gnu: passage: Fix typo in description.
[jackhill/guix/guix.git] / gnu / packages / games.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 John Darrington <jmd@gnu.org>
3 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
4 ;;; Copyright © 2014, 2016 David Thompson <dthompson2@worcester.edu>
5 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Eric Bavier <bavier@posteo.net>
6 ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
7 ;;; Copyright © 2014 Sylvain Beucler <beuc@beuc.net>
8 ;;; Copyright © 2014, 2015, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
9 ;;; Copyright © 2014, 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
10 ;;; Copyright © 2014, 2015, 2019 Mark H Weaver <mhw@netris.org>
11 ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr>
12 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
13 ;;; Copyright © 2015, 2017, 2018 Christopher Lemmer Webber <cwebber@dustycloud.org>
14 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
15 ;;; Copyright © 2015, 2016, 2017 Alex Kost <alezost@gmail.com>
16 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
17 ;;; Copyright © 2016, 2017 Rodger Fox <thylakoid@openmailbox.org>
18 ;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
19 ;;; Copyright © 2016 Albin Söderqvist <albin@fripost.org>
20 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Kei Kebreau <kkebreau@posteo.net>
21 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
22 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
23 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
24 ;;; Copyright © 2016 Steve Webber <webber.sl@gmail.com>
25 ;;; Copyright © 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@hyperbola.info>
26 ;;; Copyright © 2017, 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
27 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
28 ;;; Copyright © 2017, 2019 nee <nee-git@hidamari.blue>
29 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
30 ;;; Copyright © 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
31 ;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com>
32 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
33 ;;; Copyright © 2017, 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
34 ;;; Copyright © 2018 okapi <okapi@firemail.cc>
35 ;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
36 ;;; Copyright © 2018 Madalin Ionel-Patrascu <madalinionel.patrascu@mdc-berlin.de>
37 ;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net>
38 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
39 ;;; Copyright © 2019, 2020 Pierre Neidhardt <mail@ambrevar.xyz>
40 ;;; Copyright © 2019, 2020 Oleg Pykhalov <go.wigust@gmail.com>
41 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
42 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
43 ;;; Copyright © 2019, 2020 Jesse Gibbons <jgibbons2357+guix@gmail.com>
44 ;;; Copyright © 2019 Dan Frumin <dfrumin@cs.ru.nl>
45 ;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
46 ;;; Copyright © 2019, 2020 Timotej Lazar <timotej.lazar@araneo.si>
47 ;;; Copyright © 2019 Josh Holland <josh@inv.alid.pw>
48 ;;; Copyright © 2017, 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
49 ;;; Copyright © 2020 Alberto Eleuterio Flores Guerrero <barbanegra+guix@posteo.mx>
50 ;;; Copyright © 2020 Naga Malleswari <nagamalli@riseup.net>
51 ;;; Copyright © 2020 Vitaliy Shatrov <D0dyBo0D0dyBo0@protonmail.com>
52 ;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
53 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
54 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
55 ;;; Copyright © 2020 Trevor Hass <thass@okstate.edu>
56 ;;; Copyright © 2020, 2021 Leo Prikler <leo.prikler@student.tugraz.at>
57 ;;; Copyright © 2020 Lu hux <luhux@outlook.com>
58 ;;; Copyright © 2020 Tomás Ortín Fernández <tomasortin@mailbox.org>
59 ;;; Copyright © 2021 Olivier Rojon <o.rojon@posteo.net>
60 ;;;
61 ;;; This file is part of GNU Guix.
62 ;;;
63 ;;; GNU Guix is free software; you can redistribute it and/or modify it
64 ;;; under the terms of the GNU General Public License as published by
65 ;;; the Free Software Foundation; either version 3 of the License, or (at
66 ;;; your option) any later version.
67 ;;;
68 ;;; GNU Guix is distributed in the hope that it will be useful, but
69 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
70 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
71 ;;; GNU General Public License for more details.
72 ;;;
73 ;;; You should have received a copy of the GNU General Public License
74 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
75
76 (define-module (gnu packages games)
77 #:use-module (ice-9 match)
78 #:use-module ((guix licenses) #:prefix license:)
79 #:use-module (guix utils)
80 #:use-module (guix packages)
81 #:use-module (guix download)
82 #:use-module (guix git-download)
83 #:use-module (guix svn-download)
84 #:use-module (guix gexp)
85 #:use-module (gnu packages)
86 #:use-module (gnu packages adns)
87 #:use-module (gnu packages algebra)
88 #:use-module (gnu packages autotools)
89 #:use-module (gnu packages backup)
90 #:use-module (gnu packages base)
91 #:use-module (gnu packages build-tools)
92 #:use-module (gnu packages admin)
93 #:use-module (gnu packages audio)
94 #:use-module (gnu packages avahi)
95 #:use-module (gnu packages assembly)
96 #:use-module (gnu packages bash)
97 #:use-module (gnu packages bison)
98 #:use-module (gnu packages boost)
99 #:use-module (gnu packages check)
100 #:use-module (gnu packages cmake)
101 #:use-module (gnu packages compression)
102 #:use-module (gnu packages cpp)
103 #:use-module (gnu packages curl)
104 #:use-module (gnu packages crypto)
105 #:use-module (gnu packages cyrus-sasl)
106 #:use-module (gnu packages documentation)
107 #:use-module (gnu packages docbook)
108 #:use-module (gnu packages emulators)
109 #:use-module (gnu packages flex)
110 #:use-module (gnu packages fltk)
111 #:use-module (gnu packages fonts)
112 #:use-module (gnu packages fontutils)
113 #:use-module (gnu packages freedesktop)
114 #:use-module (gnu packages fribidi)
115 #:use-module (gnu packages game-development)
116 #:use-module (gnu packages gcc)
117 #:use-module (gnu packages gettext)
118 #:use-module (gnu packages ghostscript)
119 #:use-module (gnu packages gimp)
120 #:use-module (gnu packages gl)
121 #:use-module (gnu packages glib)
122 #:use-module (gnu packages gnome)
123 #:use-module (gnu packages gnu-doc)
124 #:use-module (gnu packages gnupg)
125 #:use-module (gnu packages gnuzilla)
126 #:use-module (gnu packages gperf)
127 #:use-module (gnu packages graphics)
128 #:use-module (gnu packages gsasl)
129 #:use-module (gnu packages gstreamer)
130 #:use-module (gnu packages gtk)
131 #:use-module (gnu packages guile)
132 #:use-module (gnu packages haskell)
133 #:use-module (gnu packages haskell-crypto)
134 #:use-module (gnu packages haskell-xyz)
135 #:use-module (gnu packages icu4c)
136 #:use-module (gnu packages image)
137 #:use-module (gnu packages imagemagick)
138 #:use-module (gnu packages javascript)
139 #:use-module (gnu packages kde)
140 #:use-module (gnu packages kde-frameworks)
141 #:use-module (gnu packages less)
142 #:use-module (gnu packages libcanberra)
143 #:use-module (gnu packages libedit)
144 #:use-module (gnu packages libunwind)
145 #:use-module (gnu packages linux)
146 #:use-module (gnu packages llvm)
147 #:use-module (gnu packages lua)
148 #:use-module (gnu packages man)
149 #:use-module (gnu packages maths)
150 #:use-module (gnu packages messaging)
151 #:use-module (gnu packages mp3)
152 #:use-module (gnu packages music)
153 #:use-module (gnu packages multiprecision)
154 #:use-module (gnu packages ncurses)
155 #:use-module (gnu packages netpbm)
156 #:use-module (gnu packages networking)
157 #:use-module (gnu packages ocaml)
158 #:use-module (gnu packages opencl)
159 #:use-module (gnu packages pcre)
160 #:use-module (gnu packages perl)
161 #:use-module (gnu packages perl-check)
162 #:use-module (gnu packages perl-compression)
163 #:use-module (gnu packages pkg-config)
164 #:use-module (gnu packages protobuf)
165 #:use-module (gnu packages pulseaudio)
166 #:use-module (gnu packages python)
167 #:use-module (gnu packages python-xyz)
168 #:use-module (gnu packages qt)
169 #:use-module (gnu packages readline)
170 #:use-module (gnu packages ruby)
171 #:use-module (gnu packages shells)
172 #:use-module (gnu packages sdl)
173 #:use-module (gnu packages serialization)
174 #:use-module (gnu packages sqlite)
175 #:use-module (gnu packages squirrel)
176 #:use-module (gnu packages swig)
177 #:use-module (gnu packages tcl)
178 #:use-module (gnu packages terminals)
179 #:use-module (gnu packages texinfo)
180 #:use-module (gnu packages textutils)
181 #:use-module (gnu packages tls)
182 #:use-module (gnu packages upnp)
183 #:use-module (gnu packages video)
184 #:use-module (gnu packages vulkan)
185 #:use-module (gnu packages web)
186 #:use-module (gnu packages wget)
187 #:use-module (gnu packages wxwidgets)
188 #:use-module (gnu packages xdisorg)
189 #:use-module (gnu packages xorg)
190 #:use-module (gnu packages xiph)
191 #:use-module (gnu packages xml)
192 #:use-module (guix build-system copy)
193 #:use-module (guix build-system cmake)
194 #:use-module (guix build-system glib-or-gtk)
195 #:use-module (guix build-system gnu)
196 #:use-module (guix build-system go)
197 #:use-module (guix build-system meson)
198 #:use-module (guix build-system perl)
199 #:use-module (guix build-system python)
200 #:use-module (guix build-system qt)
201 #:use-module (guix build-system scons)
202 #:use-module (guix build-system trivial)
203 #:use-module ((srfi srfi-1) #:hide (zip))
204 #:use-module (srfi srfi-26))
205
206 (define-public abe
207 (package
208 (name "abe")
209 (version "1.1")
210 (source
211 (origin
212 (method url-fetch)
213 (uri (string-append "mirror://sourceforge/abe/abe/abe-" version
214 "/abe-" version ".tar.gz"))
215 (sha256
216 (base32 "1xvpnq1y6y48fn3pvn2lk0h1ilmalv7nb7awpid1g4jcq1sfmi6z"))))
217 (build-system gnu-build-system)
218 (arguments
219 `(#:configure-flags
220 (list (string-append "--with-data-dir="
221 (assoc-ref %outputs "out")
222 "/share/abe"))
223 #:phases
224 (modify-phases %standard-phases
225 (replace 'bootstrap
226 (lambda _ (invoke "sh" "autogen.sh")))
227 (add-before 'build 'set-SDL
228 ;; Set correct environment for SDL.
229 (lambda* (#:key inputs #:allow-other-keys)
230 (setenv "CPATH"
231 (string-append
232 (assoc-ref inputs "sdl") "/include/SDL:"
233 (or (getenv "CPATH") "")))
234 #t))
235 (add-after 'install 'finalize-install
236 (lambda* (#:key outputs #:allow-other-keys)
237 (let ((share (string-append (assoc-ref outputs "out") "/share")))
238 ;; Installation script does not copy game data files.
239 (let ((data (string-append share "/abe")))
240 (for-each (lambda (dir)
241 (let ((target (string-append data "/" dir)))
242 (mkdir-p target)
243 (copy-recursively dir target)))
244 '("images" "maps" "sounds")))
245 ;; Create desktop file.
246 (let ((apps (string-append share "/applications")))
247 (mkdir-p apps)
248 (make-desktop-entry-file
249 (string-append apps "/abe.desktop")
250 #:name "Abe's Amazing Adventure"
251 #:exec ,name
252 #:categories '("AdventureGame" "Game")
253 #:keywords
254 '("side-scrolling" "adventure" "pyramid" "singleplayer")
255 #:comment
256 '(("de" "Ein sich seitwärts bewegendes Abenteuerspiel")
257 (#f "Side-scrolling game")))))
258 #t)))))
259 (native-inputs
260 `(("autoconf" ,autoconf)
261 ("automake" ,automake)))
262 (inputs
263 `(("libxi" ,libxi)
264 ("libxmu" ,libxmu)
265 ("libxt" ,libxt)
266 ("sdl" ,(sdl-union (list sdl sdl-mixer)))))
267 (home-page "http://abe.sourceforge.net")
268 (synopsis "Scrolling, platform-jumping, ancient pyramid exploring game")
269 (description
270 "Abe's Amazing Adventure is a scrolling,
271 platform-jumping, key-collecting, ancient pyramid exploring game, vaguely in
272 the style of similar games for the Commodore+4.")
273 (license license:gpl2+)))
274
275 ;; Data package for adanaxisgpl.
276 (define adanaxis-mush
277 (let ((version "1.1.0"))
278 (origin
279 (method url-fetch)
280 (uri (string-append "http://www.mushware.com/files/adanaxis-mush-"
281 version ".tar.gz"))
282 (sha256
283 (base32 "0mk9ibis5nkdcalcg1lkgnsdxxbw4g5w2i3icjzy667hqirsng03")))))
284
285 (define-public adanaxisgpl
286 (package
287 (name "adanaxisgpl")
288 (version "1.2.5")
289 (source
290 (origin
291 (method url-fetch)
292 (uri (string-append "http://www.mushware.com/files/adanaxisgpl-"
293 version ".tar.gz"))
294 (sha256
295 (base32 "0jkn637jaabvlhd6hpvzb57vvjph94l6fbf7qxbjlw9zpr19dw1f"))
296 (modules '((guix build utils)))
297 (snippet
298 '(begin
299 ;; Necessary for building with gcc >=4.7.
300 (substitute* "src/Mushcore/MushcoreSingleton.h"
301 (("SingletonPtrSet\\(new SingletonType\\);")
302 "MushcoreSingleton::SingletonPtrSet(new SingletonType);"))
303 ;; Avoid an "invalid conversion from const char* to char*" error.
304 (substitute* "src/Platform/X11/PlatformMiscUtils.cpp"
305 (("char \\*end, \\*result;")
306 (string-append "const char *end;"
307 "\n"
308 "char *result;")))
309 #t))))
310 (build-system gnu-build-system)
311 (arguments
312 `(#:tests? #f ; no check target
313 #:phases
314 (modify-phases %standard-phases
315 (add-after 'install 'install-data
316 (lambda* (#:key inputs outputs #:allow-other-keys)
317 (let ((data (assoc-ref inputs "adanaxis-mush"))
318 (share (string-append (assoc-ref outputs "out")
319 "/share/" ,name "-" ,version)))
320 (mkdir-p share)
321 (invoke "tar" "xvf" data "-C" share)))))))
322 (native-inputs
323 `(("adanaxis-mush" ,adanaxis-mush))) ; game data
324 (inputs
325 `(("expat" ,expat)
326 ("freeglut" ,freeglut)
327 ("glu" ,glu)
328 ("libjpeg" ,libjpeg-turbo)
329 ("libogg" ,libogg)
330 ("libtiff" ,libtiff)
331 ("libvorbis" ,libvorbis)
332 ("libx11" ,libx11)
333 ("libxext" ,libxext)
334 ("pcre" ,pcre)
335 ("sdl" ,sdl)
336 ("sdl-mixer" ,sdl-mixer)))
337 (home-page "https://www.mushware.com")
338 (synopsis "Action game in four spatial dimensions")
339 (description
340 "Adanaxis is a fast-moving first person shooter set in deep space, where
341 the fundamentals of space itself are changed. By adding another dimension to
342 space this game provides an environment with movement in four directions and
343 six planes of rotation. Initially the game explains the 4D control system via
344 a graphical sequence, before moving on to 30 levels of gameplay with numerous
345 enemy, ally, weapon and mission types. Features include simulated 4D texturing,
346 mouse and joystick control, and original music.")
347 (license license:gpl2)))
348
349 (define-public alex4
350 (package
351 (name "alex4")
352 (version "1.2.1")
353 (source
354 (origin
355 (method git-fetch)
356 (uri (git-reference
357 (url "https://github.com/carstene1ns/alex4")
358 (commit version)))
359 (file-name (git-file-name name version))
360 (sha256
361 (base32 "098wy72mh4lsvq3gm0rhamjssf9l1hp6hhkpzrv7klpb97cwwc3h"))))
362 (build-system gnu-build-system)
363 (arguments
364 `(#:tests? #f ; no check target
365 #:make-flags
366 (list "CC=gcc"
367 "CFLAGS=-D_FILE_OFFSET_BITS=64"
368 (string-append "PREFIX=" (assoc-ref %outputs "out")))
369 #:phases
370 (modify-phases %standard-phases
371 (delete 'configure) ; no configure script
372 (add-after 'install 'install-data
373 (lambda* (#:key outputs #:allow-other-keys)
374 (let ((share (string-append (assoc-ref outputs "out")
375 "/share/" ,name)))
376 (install-file "alex4.ini" share)
377 #t))))))
378 (inputs
379 `(("allegro" ,allegro-4)
380 ("dumb" ,dumb-allegro4)))
381 (home-page "http://allegator.sourceforge.net/")
382 (synopsis "Retro platform game")
383 (description
384 "Guide Alex the Allegator through the jungle in order to save his
385 girlfriend Lola from evil humans who want to make a pair of shoes out of her.
386 Plenty of classic platforming in four nice colors guaranteed!
387
388 The game includes a built-in editor so you can design and share your own maps.")
389 (license license:gpl2+)))
390
391 (define-public armagetronad
392 (package
393 (name "armagetronad")
394 (version "0.2.9.0.1")
395 (source (origin
396 (method url-fetch)
397 (uri (string-append "mirror://sourceforge/armagetronad/stable/"
398 version "/armagetronad-" version ".tbz"))
399 (sha256
400 (base32
401 "19rfhlg4gp0r7k1j8v4iw20325ciy156nmzax4xikmw22c6nmxcz"))))
402 (build-system gnu-build-system)
403 (native-inputs
404 `(("pkg-config" ,pkg-config)))
405 (inputs
406 `(("libxml2" ,libxml2)
407 ("sdl" ,sdl)
408 ("sdl-image" ,sdl-image)
409 ("freeglut" ,freeglut)
410 ("libpng" ,libpng)
411 ("libjpeg-turbo" ,libjpeg-turbo)))
412 (home-page "http://www.armagetronad.org")
413 (synopsis "Tron clone in 3D")
414 (description "Armagetron Advanced is a multiplayer game in 3d that
415 attempts to emulate and expand on the lightcycle sequence from the movie Tron.
416 It's an old school arcade game slung into the 21st century. Highlights
417 include a customizable playing arena, HUD, unique graphics, and AI bots. For
418 the more advanced player there are new game modes and a wide variety of
419 physics settings to tweak as well.")
420 (license license:gpl2+)))
421
422 (define-public astromenace
423 (package
424 (name "astromenace")
425 (version "1.4.1")
426 (source
427 (origin
428 (method git-fetch)
429 (uri (git-reference
430 (url "https://github.com/viewizard/astromenace")
431 (commit (string-append "v" version))))
432 (file-name (git-file-name name version))
433 (sha256
434 (base32 "1ad6l887jxqv8xspwc2rvy8ym9sdlmkqdqhsh0pi076kjarxsyws"))))
435 (build-system cmake-build-system)
436 (arguments
437 `(#:tests? #f ;no test
438 #:configure-flags (list (string-append "-DDATADIR="
439 (assoc-ref %outputs "out")
440 "/share/astromenace"))
441 #:phases
442 (modify-phases %standard-phases
443 (replace 'install
444 ;; Upstream provides no install phase.
445 (lambda* (#:key inputs outputs #:allow-other-keys)
446 (let* ((out (assoc-ref outputs "out"))
447 (bin (string-append out "/bin"))
448 (share (string-append out "/share"))
449 (apps (string-append share "/applications"))
450 (data (string-append share "/astromenace"))
451 (icons (string-append share "/icons/hicolor/64x64/apps")))
452 (install-file "astromenace" bin)
453 (install-file "gamedata.vfs" data)
454 (let ((source (assoc-ref inputs "source")))
455 (with-directory-excursion (string-append source "/share")
456 (install-file "astromenace.desktop" apps)
457 (mkdir-p icons)
458 (copy-file "astromenace_64.png"
459 (string-append icons "/astromenace.png")))))
460 #t)))))
461 (inputs
462 `(("freealut" ,freealut)
463 ("freetype" ,freetype)
464 ("glu" ,glu)
465 ("libogg" ,libogg)
466 ("libvorbis" ,libvorbis)
467 ("openal" ,openal)
468 ("sdl2" ,sdl2)))
469 (home-page "https://www.viewizard.com/")
470 (synopsis "3D space shooter with spaceship upgrade possibilities")
471 (description
472 "Space is a vast area, an unbounded territory where it seems there is
473 a room for everybody, but reversal of fortune put things differently. The
474 hordes of hostile creatures crawled out from the dark corners of the universe,
475 craving to conquer your homeland. Their force is compelling, their legions
476 are interminable. However, humans didn't give up without a final showdown and
477 put their best pilot to fight back. These malicious invaders chose the wrong
478 galaxy to conquer and you are to prove it! Go ahead and make alien aggressors
479 regret their insolence.")
480 ;; Game is released under GPL3+ terms. Artwork is subject to CC
481 ;; BY-SA 4.0, and fonts to OFL1.1.
482 (license (list license:gpl3+ license:cc-by-sa4.0 license:silofl1.1))))
483
484 (define-public bastet
485 (package
486 (name "bastet")
487 (version "0.43.2")
488 (source
489 (origin
490 (method git-fetch)
491 (uri (git-reference
492 (url "https://github.com/fph/bastet")
493 (commit version)))
494 (file-name (git-file-name name version))
495 (sha256
496 (base32 "09kamxapm9jw9przpsgjfg33n9k94bccv65w95dakj0br33a75wn"))
497 (patches
498 (search-patches "bastet-change-source-of-unordered_set.patch"))))
499 (build-system gnu-build-system)
500 (arguments
501 `(#:make-flags
502 (list (string-append "CXXFLAGS=-I"
503 (assoc-ref %build-inputs "boost") "/include"))
504 #:phases
505 (modify-phases %standard-phases
506 (delete 'configure) ; no configure script
507 (replace 'check
508 ;; The 'Test' target builds the tests, but doesn't actually run them.
509 (lambda* (#:key make-flags #:allow-other-keys)
510 (apply invoke "make" "Test" make-flags)
511 (setenv "HOME" ".")
512 (invoke "./Test")))
513 (replace 'install
514 (lambda* (#:key outputs #:allow-other-keys)
515 (let* ((out (assoc-ref outputs "out"))
516 (share (string-append out "/share"))
517 (hicolor (string-append share "/icons/hicolor")))
518 (install-file "bastet"
519 (string-append out "/bin"))
520
521 (install-file "bastet.desktop"
522 (string-append share "/applications"))
523 (install-file "bastet.svg"
524 (string-append hicolor "/scalable/apps"))
525
526 (install-file "bastet.appdata.xml"
527 (string-append share "/appdata"))
528
529 (install-file "bastet.6"
530 (string-append out "/share/man/man6"))
531 #t))))))
532 (native-inputs
533 `(("hicolor-icon-theme" ,hicolor-icon-theme)))
534 (inputs
535 `(("boost" ,boost)
536 ("ncurses" ,ncurses)))
537 (home-page "https://fph.altervista.org/prog/bastet.html")
538 (synopsis "Antagonistic Tetris-style falling brick game for text terminals")
539 (description
540 "Bastet (short for Bastard Tetris) is a simple ncurses-based falling brick
541 game. Unlike normal Tetris, Bastet does not choose the next brick at random.
542 Instead, it uses a special algorithm to choose the worst brick possible.
543
544 Playing bastet can be a painful experience, especially if you usually make
545 canyons and wait for the long I-shaped block to clear four rows at a time.")
546 (license license:gpl3+)))
547
548 (define-public blobwars
549 (package
550 (name "blobwars")
551 (version "2.00")
552 (source
553 (origin
554 (method url-fetch)
555 (uri (string-append "mirror://sourceforge/blobwars/"
556 "blobwars-" version ".tar.gz"))
557 (sha256
558 (base32 "16aagvkx6azf75gm5kaa94bh5npydvhqp3fvdqyfsanzdjgjf1n4"))))
559 (build-system gnu-build-system)
560 (arguments
561 `(#:tests? #f ;no test
562 #:make-flags
563 (let ((out (assoc-ref %outputs "out")))
564 (list (string-append "PREFIX=" out)
565 (string-append "BINDIR=" out "/bin/")
566 "USEPAK=1"
567 "RELEASE=1"))
568 #:phases
569 (modify-phases %standard-phases
570 (add-after 'unpack 'werror-begone
571 (lambda _
572 (substitute* "Makefile" (("-Werror") ""))
573 #t))
574 (delete 'configure)))) ;no configure script
575 (native-inputs
576 `(("gettext" ,gettext-minimal)
577 ("pkg-config" ,pkg-config)))
578 (inputs
579 `(("hicolor-icon-theme" ,hicolor-icon-theme)
580 ("sdl" ,(sdl-union (list sdl2
581 sdl2-image
582 sdl2-mixer
583 sdl2-ttf
584 sdl2-net)))))
585 (home-page "https://sourceforge.net/projects/blobwars/")
586 (synopsis "Platform action game featuring a blob with a lot of weapons")
587 (description "Blobwars: Metal Blob Solid is a 2D platform game, the first
588 in the Blobwars series. You take on the role of a fearless Blob agent. Your
589 mission is to infiltrate various enemy bases and rescue as many MIAs as
590 possible, while battling many vicious aliens.")
591 (license (list license:gpl2 ; For code and graphics
592 license:cc0 ; Music and sounds have specific licenses
593 license:cc-by3.0 ; see /doc/readme
594 license:cc-by-sa3.0
595 license:lgpl2.1+
596 license:bsd-2))))
597
598 (define-public bsd-games
599 (package
600 (name "bsd-games")
601 (version "2.17.0")
602 (source
603 (origin
604 (method url-fetch)
605 (uri "https://ibiblio.org/pub/linux/games/bsd-games-2.17.tar.gz")
606 (sha256
607 (base32 "0q7zdyyfvn15y0w4g54kq3gza89h61py727m8slmw73cxx594vq6"))
608 (patches
609 (search-patches
610 ;; thanks Arch, and Debian
611 "bsd-games-2.17-64bit.patch"
612 "bsd-games-bad-ntohl-cast.patch"
613 "bsd-games-gamescreen.h.patch"
614 "bsd-games-getline.patch"
615 "bsd-games-null-check.patch"
616 "bsd-games-number.c-and-test.patch"
617 "bsd-games-stdio.h.patch"
618 "bsd-games-prevent-name-collisions.patch"
619 ;; Guix customizations
620 "bsd-games-add-configure-config.patch"
621 "bsd-games-dont-install-empty-files.patch"
622 "bsd-games-add-wrapper.patch"))))
623 (build-system gnu-build-system)
624 (native-inputs
625 `(("flex" ,flex)
626 ("bison" ,bison)))
627 (inputs
628 `(("curses" ,ncurses)
629 ("pager" ,less)
630 ("miscfiles" ,miscfiles)
631 ("openssl" ,openssl))) ;used only by 'factor'
632 (arguments
633 `(#:phases
634 (modify-phases %standard-phases
635 (replace 'configure
636 (lambda* (#:key outputs inputs #:allow-other-keys)
637 (let* ((out (assoc-ref outputs "out"))
638 (bin (string-append out "/bin"))
639 (doc (string-append out "/share/doc/bsd-games-" ,version))
640 (man (string-append out "/share/man"))
641 (word-list (string-append (assoc-ref inputs "miscfiles")
642 "/share/web2"))
643 (static-data (string-append out "/share/games/bsd-games"))
644 ;; Not a "./" because of substitute* in 'patch-install
645 ;; below. The .// allow us not to mess with the games'
646 ;; code any further: we just use a wrapper script that
647 ;; cd's to a BSD_GAMES_DIR. :]
648 (save-files ".//"))
649 (substitute* "configure"
650 (("/usr/share/man") man)
651 (("/usr/share/doc/bsd-games") doc)
652 (("/usr/share/[^\n/]*") static-data)
653 (("/var/games") save-files)
654 (("/usr/bin/less") (which "less"))
655 (("(/usr/bin|/usr/games)") bin))
656 (substitute* "config.params" (("WORD_LIST") word-list))
657 (substitute* "wrapper" (("STATIC_DATA") static-data))
658 (invoke "./configure"))
659 #t))
660 (add-before 'install 'patch-install
661 ;; Some games need a writable directory containing pre-maded files.
662 ;; The files get installed to the Store. Then the wrapper kicks in.
663 (lambda* (#:key outputs #:allow-other-keys)
664 (let* ((out (assoc-ref outputs "out"))
665 (static-data (string-append out "/share/games/bsd-games"))
666 (save-files ".//"))
667 (substitute* "Makeconfig" ((save-files) static-data)))
668 #t))
669 (add-after 'install 'install-documents
670 (lambda* (#:key outputs #:allow-other-keys)
671 (let* ((out (assoc-ref outputs "out"))
672 (doc (string-append out "/share/doc/bsd-games-" ,version)))
673 (rename-file "phantasia/COPYRIGHT" "phantasia-COPYRIGHT")
674 (for-each
675 (lambda(file) (install-file file doc))
676 '("AUTHORS" "BUGS" "README" "SECURITY" "THANKS"
677 "phantasia-COPYRIGHT")))
678 #t)))))
679 (home-page "https://github.com/vattam/BSDGames")
680 (synopsis "Collection of the old text-based games and amusements")
681 (description
682 "These are the BSD games. See the fortune-mod package for fortunes.
683
684 Action: atc (keep the airplanes safe), hack (explore the dangerous Dungeon),
685 hunt (kill the others for the Pair of Boots, multi-player only), robots (avoid
686 the evil robots), sail (game of naval warfare with wooden ships), snake (steal
687 the $$ from the cave, anger the snake, and get out alive), tetris (game of
688 lining up the falling bricks of different shapes), and worm (eat, grow big,
689 and neither bite your tail, nor ram the wall).
690
691 Amusements: banner (prints a large banner), bcd & morse & ppt (print a punch
692 card, or paper tape, or Morse codes), caesar & rot13 (ciphers and deciphers
693 the input), factor (factorizes a number), number (translates numbers into
694 text), pig (translates from English to Pig Latin), pom (should print the
695 Moon's phase), primes (generates primes), rain & worms (plays an screen-saver
696 in terminal), random (prints randomly chosen lines from files, or returns a
697 random exit-code), and wtf (explains what do some acronyms mean).
698
699 Board: backgammon (lead the men out of board faster than the friend do),
700 boggle (find the words in the square of letters), dab (game of dots and
701 boxes), gomoku (game of five in a row), hangman (guess a word before man is
702 hanged), and monop (game of monopoly, hot-seat only). Also the card-games:
703 canfield, cribbage, fish (juniors game), and mille.
704
705 Quests: adventure (search for treasures with the help of wizard),
706 battlestar (explore the world around, starting from dying spaceship),
707 phantasia (role-play as an rogue), trek (hunt the Klingons, and save the
708 Federation), and wump (hunt the big smelly Wumpus in a dark cave).
709
710 Quizes: arithmetic, and quiz.")
711 ;; "Auxiliary and data files, distributed with the games in NetBSD, but
712 ;; not bearing copyright notices, probably fall under the terms of the UCB
713 ;; or NetBSD copyrights and licences. The file "fortune/Notes" contains a
714 ;; warning in regard to the fortune databases."
715 (license (list
716 ;; Most games. Files: countmail/countmail.6, dab/dab.6,
717 ;; lib/strlcpy.c, wargames/wargames.6
718 license:bsd-3
719 ;; dab and hunt. Files: adventure/extern.h,
720 ;; backgammon/backgammon/backlocal.h, caesar/rot13.in,
721 ;; countmail/countmail, dm/utmpentry.c, dm/utmpentry.h,
722 ;; hack/extern.h, robots/auto.c, sail/display.h,
723 ;; sail/restart.h, wargames/wargames
724 license:bsd-4
725 ;; wtf (the game)
726 license:public-domain
727 ;; phantasia (all but phantasia/pathnames.h.in, which is bsd-3)
728 (license:fsf-free "file:///phantasia/COPYRIGHT")))))
729
730
731 (define-public bzflag
732 (package
733 (name "bzflag")
734 (version "2.4.20")
735 (source
736 (origin
737 (method url-fetch)
738 (uri (string-append "https://download.bzflag.org/bzflag/source/"
739 version "/bzflag-" version ".tar.bz2"))
740 (sha256
741 (base32 "16brxqmfiyz4j4lb8ihzjcbwqmpsms6vm3ijbp34lnw0blbwdjb2"))))
742 (build-system gnu-build-system)
743 (arguments
744 `(#:phases
745 (modify-phases %standard-phases
746 (add-after 'install 'install-desktop-file-and-icons
747 (lambda* (#:key outputs #:allow-other-keys)
748 (let* ((share (string-append (assoc-ref outputs "out") "/share"))
749 (data (string-append share "/bzflag"))
750 (hicolor (string-append share "/icons/hicolor"))
751 (applications (string-append share "/applications")))
752 ;; Move desktop file.
753 (install-file (string-append data "/bzflag.desktop")
754 applications)
755 ;; Install icons.
756 (for-each (lambda (size)
757 (let* ((dim (string-append size "x" size))
758 (dir (string-append hicolor "/" dim "/apps")))
759 (mkdir-p dir)
760 (copy-file
761 (string-append data "/bzflag-" dim ".png")
762 (string-append dir "/bzflag.png"))))
763 '("48" "256")))
764 #t)))))
765 (native-inputs
766 `(("pkg-config" ,pkg-config)))
767 (inputs
768 `(("c-ares" ,c-ares)
769 ("curl" ,curl)
770 ("glew" ,glew)
771 ("glu" ,glu)
772 ("sdl2" ,sdl2)
773 ("zlib" ,zlib)))
774 (home-page "https://www.bzflag.org/")
775 (synopsis "3D first person tank battle game")
776 (description
777 "BZFlag is a 3D multi-player multiplatform tank battle game that
778 allows users to play against each other in a network environment.
779 There are five teams: red, green, blue, purple and rogue (rogue tanks
780 are black). Destroying a player on another team scores a win, while
781 being destroyed or destroying a teammate scores a loss. Rogues have
782 no teammates (not even other rogues), so they cannot shoot teammates
783 and they do not have a team score.
784
785 There are two main styles of play: capture-the-flag and free-for-all.
786 In capture-the-flag, each team (except rogues) has a team base and
787 each team with at least one player has a team flag. The object is to
788 capture an enemy team's flag by bringing it to your team's base. This
789 destroys every player on the captured team, subtracts one from that
790 team's score, and adds one to your team's score. In free-for-all,
791 there are no team flags or team bases. The object is simply to get as
792 high a score as possible.")
793 ;; The game is dual-licensed.
794 (license (list license:lgpl2.1 license:mpl2.0))))
795
796 (define-public cataclysm-dda
797 (package
798 (name "cataclysm-dda")
799 (version "0.E-3")
800 (source
801 (origin
802 (method git-fetch)
803 (uri (git-reference
804 (url "https://github.com/CleverRaven/Cataclysm-DDA")
805 (commit version)))
806 (sha256
807 (base32 "108cs6vp99qmqqfnmczad0xjgcl82bypm5xszwnlfcswdsrfs4da"))
808 (file-name (git-file-name name version))))
809 (build-system gnu-build-system)
810 (arguments
811 '(#:make-flags
812 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
813 "USE_HOME_DIR=1" "DYNAMIC_LINKING=1" "RELEASE=1"
814 "LOCALIZE=1" "LANGUAGES=all")
815 #:phases
816 (modify-phases %standard-phases
817 (delete 'configure)
818 (add-after 'build 'build-tiles
819 (lambda* (#:key make-flags outputs #:allow-other-keys)
820 ;; Change prefix directory and enable tile graphics and sound.
821 (apply invoke "make" "TILES=1" "SOUND=1"
822 (string-append "PREFIX="
823 (assoc-ref outputs "tiles"))
824 (cdr make-flags))))
825 (add-after 'install 'install-tiles
826 (lambda* (#:key make-flags outputs #:allow-other-keys)
827 (apply invoke "make" "install" "TILES=1" "SOUND=1"
828 (string-append "PREFIX="
829 (assoc-ref outputs "tiles"))
830 (cdr make-flags)))))
831 ;; TODO: Add libtap++ from https://github.com/cbab/libtappp as a native
832 ;; input in order to support tests.
833 #:tests? #f))
834 (outputs '("out"
835 "tiles")) ;for tile graphics and sound support
836 (native-inputs
837 `(("gettext" ,gettext-minimal)
838 ("pkg-config" ,pkg-config)))
839 (inputs
840 `(("freetype" ,freetype)
841 ("libogg" ,libogg)
842 ("libvorbis" ,libvorbis)
843 ("ncurses" ,ncurses)
844 ("sdl2" ,sdl2)
845 ("sdl2-image" ,sdl2-image)
846 ("sdl2-ttf" ,sdl2-ttf)
847 ("sdl2-mixer" ,sdl2-mixer)))
848 (home-page "https://cataclysmdda.org/")
849 (synopsis "Survival horror roguelike video game")
850 (description
851 "Cataclysm: Dark Days Ahead (or \"DDA\" for short) is a roguelike set
852 in a post-apocalyptic world. Struggle to survive in a harsh, persistent,
853 procedurally generated world. Scavenge the remnants of a dead civilization
854 for food, equipment, or, if you are lucky, a vehicle with a full tank of gas
855 to get you out of Dodge. Fight to defeat or escape from a wide variety of
856 powerful monstrosities, from zombies to giant insects to killer robots and
857 things far stranger and deadlier, and against the others like yourself, that
858 want what you have.")
859 (license license:cc-by-sa3.0)))
860
861 (define-public cockatrice
862 (let ((release-date "2021-01-26"))
863 (package
864 (name "cockatrice")
865 (version "2.8.0")
866 (source
867 (origin
868 (method git-fetch)
869 (uri (git-reference
870 (url "https://github.com/Cockatrice/Cockatrice")
871 (commit (string-append release-date "-Release-" version))))
872 (file-name (git-file-name name version))
873 (sha256
874 (base32
875 "0q8ffcklb2b7hcqhy3d2f9kz9aw22pp04pc9y4sslyqmf17pwnz9"))
876 (modules '((guix build utils)))
877 (snippet
878 ;; Strip image URLs as they point towards non-free web services
879 '(substitute* "cockatrice/src/settings/downloadsettings.cpp"
880 (("downloadURLs.append\\(\".*\"\\);") "")))))
881 (build-system cmake-build-system)
882 (arguments
883 `(#:configure-flags '("-DWITH_SERVER=1"
884 "-DWITH_CLIENT=1"
885 "-DWITH_ORACLE=1"
886 "-DTEST=1")))
887 (native-inputs
888 `(("googletest" ,googletest)
889 ("pkg-config" ,pkg-config)))
890 (inputs
891 `(("protobuf" ,protobuf)
892 ("qtbase" ,qtbase)
893 ("qtmultimedia" ,qtmultimedia)
894 ("qtsvg" ,qtsvg)
895 ("qttools" ,qttools)
896 ("qtwebsockets" ,qtwebsockets)
897 ("xz" ,xz)
898 ("zlib" ,zlib)))
899 (home-page "https://cockatrice.github.io")
900 (synopsis "Tabletop card game simulator")
901 (description "Cockatrice is a program for playing tabletop card games
902 over a network. Its server design prevents users from manipulating the game
903 for unfair advantage. The client also provides a single-player mode, which
904 allows users to brew while offline.")
905 (license license:gpl2))))
906
907 (define-public corsix-th
908 (package
909 (name "corsix-th")
910 (version "0.64")
911 (source
912 (origin
913 (method git-fetch)
914 (uri (git-reference
915 (url "https://github.com/CorsixTH/CorsixTH")
916 (commit (string-append "v" version))))
917 (file-name (git-file-name name version))
918 (sha256
919 (base32 "0chh9cv2kdc39sr0x8hclcyzd8dz2y6grgagqzkvr7j570wa5cqh"))))
920 (build-system cmake-build-system)
921 (arguments
922 `(#:phases
923 (modify-phases %standard-phases
924 (add-after 'install 'wrap-binary
925 (lambda _
926 ;; Set Lua module paths and default MIDI soundfont on startup.
927 (let* ((out (assoc-ref %outputs "out"))
928 (fluid (assoc-ref %build-inputs "fluid-3"))
929 (lua-version ,(version-major+minor (package-version lua)))
930 (lua-cpath
931 (map (lambda (lib)
932 (string-append
933 (assoc-ref %build-inputs (string-append "lua-" lib))
934 "/lib/lua/" lua-version "/?.so"))
935 '("filesystem" "lpeg"))))
936 (wrap-program (string-append out "/bin/corsix-th")
937 `("LUA_CPATH" ";" = ,lua-cpath)
938 `("SDL_SOUNDFONTS" ":" suffix
939 (,(string-append fluid "/share/soundfonts/FluidR3Mono_GM.sf3")))))
940 #t)))
941 #:tests? #f)) ; TODO need busted package to run tests
942 ;; Omit Lua-Socket dependency to disable automatic updates.
943 (inputs
944 `(("ffmpeg" ,ffmpeg)
945 ("fluid-3" ,fluid-3)
946 ("freetype" ,freetype)
947 ("lua" ,lua)
948 ("lua-filesystem" ,lua-filesystem)
949 ("lua-lpeg" ,lua-lpeg)
950 ("sdl2" ,sdl2)
951 ("sdl2-mixer" ,sdl2-mixer)))
952 (home-page "https://corsixth.com")
953 (synopsis "Implementation of the @i{Theme Hospital} game engine")
954 (description
955 "This package provides a reimplementation of the 1997 Bullfrog business
956 simulation game @i{Theme Hospital}. As well as faithfully recreating the
957 original engine, CorsixTH adds support for high resolutions, custom levels and
958 more. This package does @emph{not} provide the game assets.")
959 (license (list
960 license:expat ; main license
961 license:bsd-3)))) ; CorsixTH/Src/random.c
962
963 (define-public cowsay
964 (package
965 (name "cowsay")
966 (version "3.04")
967 (source (origin
968 (method git-fetch)
969 (uri (git-reference
970 (url "https://github.com/tnalpgge/rank-amateur-cowsay")
971 (commit (string-append name "-" version))))
972 (file-name (git-file-name name version))
973 (sha256
974 (base32
975 "06455kq37hvq1xb7adyiwrx0djs50arsxvjgixyxks16lm1rlc7n"))))
976 (build-system gnu-build-system)
977 (arguments
978 `(#:phases
979 (modify-phases %standard-phases
980 (delete 'configure) ; no configure script
981 (delete 'build) ; nothing to be built
982 (replace 'install
983 (lambda* (#:key outputs #:allow-other-keys)
984 (invoke "sh" "install.sh"
985 (assoc-ref outputs "out"))))
986 (delete 'check)
987 (add-after 'install 'check
988 (lambda* (#:key outputs #:allow-other-keys)
989 (invoke (string-append (assoc-ref outputs "out")
990 "/bin/cowsay")
991 "We're done!"))))))
992 (inputs
993 `(("perl" ,perl)))
994 (home-page (string-append "https://web.archive.org/web/20071026043648/"
995 "http://www.nog.net:80/~tony/warez/cowsay.shtml"))
996 (synopsis "Speaking cow text filter")
997 (description "Cowsay is basically a text filter. Send some text into it,
998 and you get a cow saying your text. If you think a talking cow isn't enough,
999 cows can think too: all you have to do is run @command{cowthink}. If you're
1000 tired of cows, a variety of other ASCII-art messengers are available.")
1001 (license license:gpl3+)))
1002
1003 (define-public lolcat
1004 (let ((commit "35dca3d0a381496d7195cd78f5b24aa7b62f2154")
1005 (revision "0"))
1006 (package
1007 (name "lolcat")
1008 (version (git-version "1.0" revision commit))
1009 (source
1010 (origin
1011 (method git-fetch)
1012 (uri (git-reference
1013 (url "https://github.com/jaseg/lolcat")
1014 (commit commit)))
1015 (sha256
1016 (base32
1017 "0jjbkqcc2ikjxd1xgdyv4rb0vsw218181h89f2ywg29ffs3ypd8g"))
1018 (file-name (git-file-name name version))))
1019 (build-system gnu-build-system)
1020 (arguments
1021 `(#:tests? #f ; no check target
1022 #:make-flags
1023 (list ,(string-append "CC=" (cc-for-target)))
1024 #:phases
1025 (modify-phases %standard-phases
1026 (delete 'bootstrap)
1027 (delete 'configure)
1028 (replace 'install
1029 (lambda* (#:key outputs #:allow-other-keys)
1030 (let* ((out (assoc-ref outputs "out"))
1031 (dest (string-append out "/bin")))
1032 (mkdir-p dest)
1033 (install-file "lolcat" dest)
1034 (install-file "censor" dest)
1035 #t))))))
1036 (home-page "https://github.com/jaseg/lolcat")
1037 (synopsis "Rainbow coloring effect for text console display")
1038 (description "@command{lolcat} concatenates files and streams like
1039 regular @command{cat}, but it also adds terminal escape codes between
1040 characters and lines resulting in a rainbow effect.")
1041 (license license:wtfpl2))))
1042
1043 (define-public foobillard++
1044 ;; Even though this latest revision is old already, stable release is
1045 ;; lagging way behind it, and has issues with textures rendering.
1046 (let ((svn-revision 170))
1047 (package
1048 (name "foobillard++")
1049 (version (string-append "3.43-r" (number->string svn-revision)))
1050 (source
1051 (origin
1052 (method svn-fetch)
1053 (uri (svn-reference
1054 (url "svn://svn.code.sf.net/p/foobillardplus/code/")
1055 (revision svn-revision)))
1056 (file-name (git-file-name name version))
1057 (sha256
1058 (base32 "00b693ys5zvzjbjzzj3dqfzm5xw64gwjf9m8qv6bkmf0klbhmayk"))
1059 (patches
1060 (search-patches "foobillard++-pkg-config.patch"))
1061 (modules '((guix build utils)))
1062 (snippet
1063 '(begin
1064 ;; Unfortunately, the game includes background music with
1065 ;; a non-commercial clause. Delete it.
1066 (for-each delete-file (find-files "data/music" "\\.ogg$"))
1067 #t))))
1068 (build-system gnu-build-system)
1069 (arguments
1070 `(#:configure-flags
1071 (list
1072 ;; Install data in a less exotic location.
1073 (string-append "--prefix=" (assoc-ref %outputs "out") "/share")
1074 ;; Prevent a build error about undefined trigonometric functions.
1075 "--enable-fastmath=no")
1076 #:phases
1077 (modify-phases %standard-phases
1078 (add-after 'unpack 'fix-makefile
1079 ;; Remove hard-coded directories. Also fix installation
1080 ;; rule: it tries to move around non-existent files or
1081 ;; files already moved.
1082 (lambda* (#:key outputs #:allow-other-keys)
1083 (substitute* "Makefile.am"
1084 (("/usr") (assoc-ref outputs "out"))
1085 (("cp .*?/foobillardplus\\.desktop.*") "")
1086 (("cp .*?/foobillardplus\\.(png|xbm) \\$\\(datarootdir\\).*")
1087 ""))
1088 #t))
1089 (add-after 'unpack 'unbundle-font
1090 ;; XXX: The package ships with LinBiolinum_aSB.ttf and
1091 ;; LinBiolinum_aS.ttf, which are not provided by
1092 ;; `font-linuxlibertine' package. Therefore, we cannot replace
1093 ;; them yet.
1094 (lambda* (#:key inputs #:allow-other-keys)
1095 (let ((dejavu (string-append (assoc-ref inputs "font-dejavu")
1096 "/share/fonts/truetype/")))
1097 (with-directory-excursion "data"
1098 (for-each (lambda (f)
1099 (delete-file f)
1100 (symlink (string-append dejavu f) f))
1101 '("DejaVuSans-Bold.ttf" "DejaVuSans.ttf"))))
1102 #t))
1103 (replace 'bootstrap
1104 (lambda _
1105 (invoke "aclocal" "--force")
1106 (invoke "autoconf" "-f")
1107 (invoke "autoheader" "-f")
1108 (invoke "automake" "-a" "-c" "-f")))
1109 (add-before 'build 'prepare-build
1110 ;; Set correct environment for SDL.
1111 (lambda* (#:key inputs #:allow-other-keys)
1112 (setenv "CPATH"
1113 (string-append (assoc-ref inputs "sdl")
1114 "/include/SDL:"
1115 (or (getenv "CPATH") "")))
1116 #t))
1117 (add-before 'build 'fix-settings-directory
1118 ;; Hide foobillardplus settings directory in $HOME.
1119 (lambda _
1120 (substitute* "src/history.c"
1121 (("/foobillardplus-data") "/.foobillardplus"))
1122 #t))
1123 (add-before 'install 'create-directories
1124 ;; Install process does not create directories before
1125 ;; trying to move file in it.
1126 (lambda* (#:key outputs #:allow-other-keys)
1127 (let ((out (assoc-ref outputs "out")))
1128 (mkdir-p (string-append out "/share/icons"))
1129 (mkdir-p (string-append out "/share/applications")))
1130 #t))
1131 (add-after 'install 'symlink-executable
1132 ;; Symlink executable to $out/bin.
1133 (lambda* (#:key outputs #:allow-other-keys)
1134 (let* ((out (assoc-ref outputs "out"))
1135 (bin (string-append out "/bin")))
1136 (mkdir-p bin)
1137 (with-directory-excursion bin
1138 (symlink "../share/foobillardplus/bin/foobillardplus"
1139 "foobillardplus"))
1140 #t))))))
1141 (native-inputs
1142 `(("autoconf" ,autoconf)
1143 ("automake" ,automake)
1144 ("pkg-config" ,pkg-config)))
1145 (inputs
1146 `(("font-dejavu" ,font-dejavu)
1147 ("freetype" ,freetype)
1148 ("glu" ,glu)
1149 ("libpng" ,libpng)
1150 ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-net)))))
1151 (home-page "http://foobillardplus.sourceforge.net/")
1152 (synopsis "3D billiard game")
1153 (description "FooBillard++ is an advanced 3D OpenGL billiard game
1154 based on the original foobillard 3.0a sources from Florian Berger.
1155 You can play it with one or two players or against the computer.
1156
1157 The game features:
1158
1159 @itemize
1160 @item Wood paneled table with gold covers and gold diamonds.
1161 @item Reflections on balls.
1162 @item Zoom in and out, rotation, different angles and bird's eye view.
1163 @item Different game modes: 8 or 9-ball, Snooker or Carambole.
1164 @item Tournaments. Compete against other players.
1165 @item Animated cue with strength and eccentric hit adjustment.
1166 @item Jump shots and snipping.
1167 @item Realistic gameplay and billiard sounds.
1168 @item Red-Green stereo.
1169 @item And much more.
1170 @end itemize")
1171 (license (list license:gpl2 license:silofl1.1)))))
1172
1173 (define-public freedoom
1174 (package
1175 (name "freedoom")
1176 (version "0.12.1")
1177 (source
1178 (origin
1179 (method git-fetch)
1180 (uri (git-reference
1181 (url "https://github.com/freedoom/freedoom")
1182 (commit (string-append "v" version))))
1183 (file-name (git-file-name name version))
1184 (sha256
1185 (base32 "1mq60lfwaaxmch7hsz8403pwafnlsmsd5z2df2j77ppwndwcrypb"))))
1186 (build-system gnu-build-system)
1187 (arguments
1188 '(#:make-flags
1189 (list (string-append "prefix=" (assoc-ref %outputs "out")))
1190 #:tests? #f ; no check target
1191 #:phases
1192 (modify-phases %standard-phases
1193 (delete 'bootstrap)
1194 (replace 'configure
1195 (lambda* (#:key inputs outputs #:allow-other-keys)
1196 (let* ((freedoom (assoc-ref outputs "out"))
1197 (wad-dir (string-append freedoom "/share/games/doom")))
1198 ;; Make sure that the install scripts know where to find
1199 ;; the appropriate WAD files.
1200 (substitute* "dist/freedoom"
1201 (("IWAD=freedm.wad")
1202 (string-append "IWAD=" wad-dir "/freedm.wad"))
1203 (("IWAD=freedoom1.wad")
1204 (string-append "IWAD=" wad-dir "/freedoom1.wad"))
1205 (("IWAD=freedoom2.wad")
1206 (string-append "IWAD=" wad-dir "/freedoom2.wad")))
1207 #t))))))
1208 (native-inputs
1209 `(("asciidoc" ,asciidoc)
1210 ("deutex" ,deutex)
1211 ("python" ,python)
1212 ("python-pillow" ,python-pillow)))
1213 (home-page "https://freedoom.github.io/")
1214 (synopsis "Free content game based on the Doom engine")
1215 (native-search-paths
1216 (list (search-path-specification
1217 (variable "DOOMWADDIR")
1218 (files '("share/games/doom")))
1219 (search-path-specification
1220 (variable "DOOMWADPATH")
1221 (files '("share/games/doom")))))
1222 (description
1223 "The Freedoom project aims to create a complete free content first person
1224 shooter game. Freedoom by itself is just the raw material for a game: it must
1225 be paired with a compatible game engine (such as @code{prboom-plus}) to be
1226 played. Freedoom complements the Doom engine with free levels, artwork, sound
1227 effects and music to make a completely free game.")
1228 (license license:bsd-3)))
1229
1230 (define-public freedroidrpg
1231 (package
1232 (name "freedroidrpg")
1233 (version "0.16.1")
1234 (source
1235 (origin
1236 (method url-fetch)
1237 (uri (string-append "http://ftp.osuosl.org/pub/freedroid/"
1238 "freedroidRPG-" (version-major+minor version) "/"
1239 "freedroidRPG-" version ".tar.gz"))
1240 (sha256
1241 (base32 "0n4kn38ncmcy3lrxmq8fjry6c1z50z4q1zcqfig0j4jb0dsz2va2"))))
1242 (build-system gnu-build-system)
1243 (arguments
1244 `(#:configure-flags
1245 (list
1246 (string-append "CFLAGS="
1247 "-I" (assoc-ref %build-inputs "sdl-gfx") "/include/SDL "
1248 "-I" (assoc-ref %build-inputs "sdl-image") "/include/SDL "
1249 "-I" (assoc-ref %build-inputs "sdl-mixer") "/include/SDL")
1250 "--enable-opengl")
1251 ;; FIXME: the test suite fails with the following error output:
1252 ;; 4586 Segmentation fault env SDL_VIDEODRIVER=dummy \
1253 ;; SDL_AUDIODRIVER=dummy ./src/freedroidRPG -nb text
1254 #:tests? #f))
1255 (native-inputs
1256 `(("pkg-config" ,pkg-config)))
1257 (inputs
1258 `(("glu" ,glu)
1259 ("libjpeg" ,libjpeg-turbo)
1260 ("libogg" ,libogg)
1261 ("libpng" ,libpng)
1262 ("libvorbis" ,libvorbis)
1263 ("mesa" ,mesa)
1264 ("python" ,python-wrapper)
1265 ("sdl" ,sdl)
1266 ("sdl-gfx" ,sdl-gfx)
1267 ("sdl-image" ,sdl-image)
1268 ("sdl-mixer" ,sdl-mixer)
1269 ("zlib" ,zlib)))
1270 (home-page "https://www.freedroid.org/")
1271 (synopsis "Isometric role-playing game against killer robots")
1272 (description
1273 "Freedroid RPG is an @dfn{RPG} (Role-Playing Game) with isometric graphics.
1274 The game tells the story of a world destroyed by a conflict between robots and
1275 their human masters. To restore peace to humankind, the player must complete
1276 numerous quests while fighting off rebelling robots---either by taking control
1277 of them, or by simply blasting them to pieces with melee and ranged weapons in
1278 real-time combat.")
1279 (license (list license:expat ; lua/
1280 license:gpl3 ; src/gen_savestruct.py
1281 license:gpl2+)))) ; the rest
1282
1283 (define-public golly
1284 (package
1285 (name "golly")
1286 (version "3.3")
1287 (source (origin
1288 (method url-fetch)
1289 (uri (string-append "mirror://sourceforge/golly/golly/golly-"
1290 version "/golly-" version
1291 "-src.tar.gz"))
1292 (sha256
1293 (base32
1294 "1j3ksnar4rdam4xiyspgyrs1pifbvxfxkrn65brkwxpx39mpgzc8"))))
1295 (build-system gnu-build-system)
1296 (arguments
1297 '(#:make-flags (list "CC=gcc"
1298 (string-append "GOLLYDIR="
1299 (assoc-ref %outputs "out")
1300 "/share/golly"))
1301 #:tests? #f ; no check target
1302 #:phases
1303 (modify-phases %standard-phases
1304 (replace 'configure
1305 (lambda* (#:key inputs #:allow-other-keys)
1306 ;; For some reason, setting the PYTHON_SHLIB make flag doesn't
1307 ;; properly set the path to the Python shared library. This
1308 ;; substitution acheives the same end by different means.
1309 (substitute* "gui-wx/wxprefs.cpp"
1310 (("pythonlib = wxT\\(STRINGIFY\\(PYTHON_SHLIB\\)\\)")
1311 (string-append "pythonlib = \""
1312 (assoc-ref inputs "python")
1313 "/lib/libpython-2.7.so\"")))
1314 #t))
1315 (replace 'build
1316 (lambda* (#:key make-flags outputs #:allow-other-keys)
1317 (with-directory-excursion "gui-wx"
1318 (apply invoke `("make" ,@make-flags "-f" "makefile-gtk")))))
1319 (replace 'install
1320 (lambda* (#:key outputs #:allow-other-keys)
1321 (let* ((out (assoc-ref outputs "out"))
1322 (bin (string-append out "/bin"))
1323 (doc (string-append out "/share/doc/golly"))
1324 (pixmaps (string-append out "/share/pixmaps"))
1325 (share (string-append out "/share/golly")))
1326 (for-each (lambda (binary)
1327 (install-file binary bin))
1328 '("bgolly" "golly"))
1329 (for-each (lambda (document)
1330 (install-file
1331 (string-append "docs/" document ".html")
1332 doc))
1333 '("License" "ReadMe" "ToDo"))
1334 (install-file "gui-wx/icons/appicon.xpm" pixmaps)
1335 (for-each (lambda (folder)
1336 (copy-recursively
1337 folder
1338 (string-append share "/" folder)))
1339 '("Help" "Patterns" "Rules" "Scripts")))
1340 #t)))))
1341 (native-inputs
1342 `(("lua" ,lua)))
1343 (inputs
1344 `(("glu" ,glu)
1345 ("mesa" ,mesa)
1346 ("python" ,python-2)
1347 ("wxwidgets" ,wxwidgets-gtk2)
1348 ("zlib" ,zlib)))
1349 (home-page "http://golly.sourceforge.net/")
1350 (synopsis "Software for exploring cellular automata")
1351 (description
1352 "Golly simulates Conway's Game of Life and many other types of cellular
1353 automata. The following features are available:
1354 @enumerate
1355 @item Support for bounded and unbounded universes, with cells of up to 256
1356 states.
1357 @item Support for multiple algorithms, including Bill Gosper's Hashlife
1358 algorithm.
1359 @item Loading patterns from BMP, PNG, GIF and TIFF image files.
1360 @item Reading RLE, macrocell, Life 1.05/1.06, dblife and MCell files.
1361 @item Scriptable via Lua or Python.
1362 @item Extracting patterns, rules and scripts from zip files.
1363 @item Downloading patterns, rules and scripts from online archives.
1364 @item Pasting patterns from the clipboard.
1365 @item Unlimited undo/redo.
1366 @item Configurable keyboard shortcuts.
1367 @item Auto fit option to keep patterns within the view.
1368 @end enumerate")
1369 (license license:gpl2+)))
1370
1371 (define-public julius
1372 (package
1373 (name "julius")
1374 (version "1.6.0")
1375 (source
1376 (origin
1377 (method git-fetch)
1378 (uri (git-reference
1379 (url "https://github.com/bvschaik/julius")
1380 (commit (string-append "v" version))))
1381 (file-name (git-file-name name version))
1382 (sha256
1383 (base32 "0nfdn8n6ywhm69ckz9a1chl5xxiqyaj3l337wadsbppnpscjihrc"))
1384 ;; Remove unused bundled libraries.
1385 (modules '((guix build utils)))
1386 (snippet
1387 '(begin
1388 (with-directory-excursion "ext"
1389 (for-each delete-file-recursively '("dirent" "png" "SDL2" "zlib")))
1390 #t))))
1391 (build-system cmake-build-system)
1392 (inputs
1393 `(("libpng" ,libpng)
1394 ("sdl2" ,sdl2)
1395 ("sdl2-mixer" ,sdl2-mixer)))
1396 (home-page "https://github.com/bvschaik/julius")
1397 (synopsis "Re-implementation of Caesar III game engine")
1398 (description
1399 "Engine for Caesar III, a city-building real-time strategy game.
1400 Julius includes some UI enhancements while preserving the logic (including
1401 bugs) of the original game, so that saved games are compatible. This package
1402 does not include game data.")
1403 (license (list license:agpl3
1404 license:zlib)))) ; ext/tinyfiledialogs
1405
1406 (define-public augustus
1407 (package
1408 (inherit julius)
1409 (name "augustus")
1410 (version "2.0.1")
1411 (source
1412 (origin
1413 (method git-fetch)
1414 (uri (git-reference
1415 (url "https://github.com/Keriew/augustus")
1416 (commit (string-append "v" version))))
1417 (file-name (git-file-name name version))
1418 (sha256
1419 (base32 "0czazw8mc3fbvdazs2nzvgxd1dpzjc8z5fwiv89vv4nd7laz3jkj"))
1420 ;; Remove unused bundled libraries.
1421 (modules '((guix build utils)))
1422 (snippet
1423 '(begin
1424 (with-directory-excursion "ext"
1425 (for-each delete-file-recursively '("dirent" "png" "SDL2" "zlib")))
1426 #t))))
1427 (arguments
1428 ;; No tests. See https://github.com/Keriew/augustus/issues/82.
1429 `(#:tests? #f))
1430 (home-page "https://github.com/Keriew/augustus")
1431 (synopsis "Re-implementation of Caesar III game engine with gameplay changes")
1432 (description
1433 "Fork of Julius, an engine for the a city-building real-time strategy
1434 game Caesar III. Gameplay enhancements include:
1435
1436 @itemize
1437 @item roadblocks;
1438 @item market special orders;
1439 @item global labour pool;
1440 @item partial warehouse storage;
1441 @item increased game limits;
1442 @item zoom controls.
1443 @end itemize\n")))
1444
1445 (define-public meandmyshadow
1446 (package
1447 (name "meandmyshadow")
1448 (version "0.5a")
1449 (source (origin
1450 (method url-fetch)
1451 (uri (string-append "mirror://sourceforge/meandmyshadow/"
1452 version "/meandmyshadow-" version
1453 "-src.tar.gz"))
1454 (sha256
1455 (base32
1456 "0i98v6cgmpsxy7mbb0s2y6f6qq6mkwzk2nrv1nz39ncf948aky2h"))))
1457 (build-system cmake-build-system)
1458 (arguments
1459 `(#:tests? #f)) ; there are no tests
1460 (native-inputs
1461 `(("pkg-config" ,pkg-config)))
1462 (inputs
1463 `(("curl" ,curl)
1464 ("libarchive" ,libarchive)
1465 ("lua" ,lua)
1466 ("sdl" ,(sdl-union (list sdl2
1467 sdl2-image
1468 sdl2-mixer
1469 sdl2-ttf)))))
1470 (home-page "https://acmepjz.github.io/meandmyshadow/")
1471 (synopsis "Puzzle/platform game")
1472 (description "Me and My Shadow is a puzzle/platform game in which you try
1473 to reach the exit by solving puzzles. Spikes, moving blocks, fragile blocks
1474 and much more stand between you and the exit. Record your moves and let your
1475 shadow mimic them to reach blocks you couldn't reach alone.")
1476 (license license:gpl3+)))
1477
1478 (define-public opensurge
1479 (package
1480 (name "opensurge")
1481 (version "0.5.1.2")
1482 (source
1483 (origin
1484 (method git-fetch)
1485 (uri (git-reference
1486 (url "https://github.com/alemart/opensurge")
1487 (commit (string-append "v" version))))
1488 (file-name (git-file-name name version))
1489 (sha256
1490 (base32 "0ih7hlqjnp9rv0m4lqf7c0s1ai532way5i4pk45jq1gqm8325dbv"))))
1491 (build-system cmake-build-system)
1492 (arguments
1493 `(#:tests? #f ;there are no tests
1494 #:configure-flags
1495 (let* ((out (assoc-ref %outputs "out"))
1496 (share (string-append out "/share")))
1497 (list (string-append "-DCMAKE_INSTALL_PREFIX=" out "/bin")
1498 (string-append "-DGAME_DATADIR=" share "/" ,name)
1499 (string-append "-DDESKTOP_ENTRY_PATH=" share "/applications")
1500 (string-append "-DDESKTOP_ICON_PATH=" share "/pixmaps")
1501 (string-append "-DDESKTOP_METAINFO_PATH=" share "/metainfo")))
1502 #:phases
1503 (modify-phases %standard-phases
1504 (add-after 'unpack 'fix-xdg-open-path
1505 (lambda* (#:key inputs #:allow-other-keys)
1506 ;; Look for xdg-open in the store.
1507 (substitute* "src/core/web.c"
1508 (("/usr(/bin/xdg-open)" _ bin)
1509 (string-append (assoc-ref inputs "xdg-utils") bin)))
1510 #t))
1511 (add-after 'unpack 'unbundle-fonts
1512 (lambda* (#:key inputs #:allow-other-keys)
1513 ;; Replace bundled Roboto fonts with links to the store.
1514 (with-directory-excursion "fonts"
1515 (let ((roboto-dir (string-append
1516 (assoc-ref inputs "font-google-roboto")
1517 "/share/fonts/truetype/")))
1518 (for-each
1519 (lambda (font)
1520 (delete-file font)
1521 (symlink (string-append roboto-dir font) font))
1522 '("Roboto-Black.ttf" "Roboto-Bold.ttf" "Roboto-Medium.ttf")))
1523 #t))))))
1524 (inputs
1525 `(("allegro" ,allegro)
1526 ("font-google-roboto" ,font-google-roboto)
1527 ("surgescript" ,surgescript)
1528 ("xdg-utils" ,xdg-utils)))
1529 (home-page "https://opensurge2d.org")
1530 (synopsis "2D retro side-scrolling game")
1531 (description "@code{Open Surge} is a 2D retro side-scrolling platformer
1532 inspired by the Sonic games. The player runs at high speeds through each
1533 level while collecting items and avoiding obstacles. The game includes a
1534 built-in level editor.")
1535 (license
1536 ;; Code is under GPL 3+, assets are under various licenses.
1537 ;; See src/misc/credits.c for details.
1538 (list license:gpl3+
1539 license:cc0
1540 license:cc-by3.0
1541 license:cc-by-sa3.0
1542 license:expat
1543 license:public-domain
1544 license:silofl1.1))))
1545
1546 (define-public knights
1547 (package
1548 (name "knights")
1549 (version "025")
1550 (source (origin
1551 (method url-fetch)
1552 (uri (string-append "http://www.knightsgame.org.uk/files/knights_"
1553 version "_src.tar.gz"))
1554 (sha256
1555 (base32
1556 "18vp2ygvn0s0jz8rm585jqf6hjqkam1ximq81k0r9hpmfj7wb88f"))))
1557 (build-system gnu-build-system)
1558 (arguments
1559 '(#:make-flags
1560 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
1561 "CXXFLAGS=-lpthread")
1562 #:phases
1563 (modify-phases %standard-phases
1564 ;; No configure script.
1565 (delete 'configure))
1566 #:tests? #f)) ;; No check target.
1567 (inputs
1568 `(("boost" ,boost)
1569 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
1570 ("freetype" ,freetype)
1571 ("fontconfig" ,fontconfig)
1572 ("curl" ,curl)))
1573 (native-inputs
1574 `(("pkg-config" ,pkg-config)))
1575 (home-page "http://www.knightsgame.org.uk/")
1576 (synopsis "Multiplayer dungeon game involving knights and quests")
1577 (description "Knights is a multiplayer game involving several knights who
1578 must run around a dungeon and complete various quests. Each game revolves
1579 around a quest – for example, you might have to find some items and carry them
1580 back to your starting point. This may sound easy, but as there are only
1581 enough items in the dungeon for one player to win, you may end up having to
1582 kill your opponents to get their stuff! Other quests involve escaping from
1583 the dungeon, fighting a duel to the death against the enemy knights, or
1584 destroying an ancient book using a special wand.")
1585 ;; This package includes modified sources of lua (X11), enet (Expat), and
1586 ;; guichan (BSD-3). The "Coercri" library is released under the Boost
1587 ;; license. The whole package is released under GPLv3+.
1588 (license license:gpl3+)))
1589
1590 (define-public gnome-chess
1591 (package
1592 (name "gnome-chess")
1593 (version "3.37.3")
1594 (source (origin
1595 (method url-fetch)
1596 (uri (string-append "mirror://gnome/sources/gnome-chess/"
1597 (version-major+minor version) "/"
1598 "gnome-chess-" version ".tar.xz"))
1599 (sha256
1600 (base32
1601 "09axf0q1mp13sv8cs0syfg8ahcd9r2qb26278r09j6s4njxmkfv4"))))
1602 (build-system meson-build-system)
1603 (arguments
1604 '(#:glib-or-gtk? #t
1605 #:phases
1606 (modify-phases %standard-phases
1607 (add-after 'unpack 'skip-gtk-update-icon-cache
1608 ;; Don't create 'icon-theme.cache'.
1609 (lambda _
1610 (substitute* "meson_post_install.py"
1611 (("gtk-update-icon-cache") "true"))
1612 #t)))))
1613 (inputs
1614 `(("gtk+" ,gtk+)
1615 ("librsvg" ,librsvg)))
1616 (native-inputs
1617 `(("gettext" ,gettext-minimal)
1618 ("glib:bin" ,glib "bin") ; for desktop-file-validate and appstream-util
1619 ("itstool" ,itstool)
1620 ("pkg-config" ,pkg-config)
1621 ("vala" ,vala)))
1622 (home-page "https://wiki.gnome.org/Apps/Chess")
1623 (synopsis "Chess board for GNOME")
1624 (description "GNOME Chess provides a 2D board for playing chess games
1625 against human or computer players. It supports loading and saving games in
1626 Portable Game Notation. To play against a computer, install a chess engine
1627 such as chess or stockfish.")
1628 (license license:gpl3+)))
1629
1630 (define-public gnubg
1631 (package
1632 (name "gnubg")
1633 (version "1.06.002")
1634 (source
1635 (origin
1636 (method url-fetch)
1637 (uri (string-append "mirror://gnu/gnubg/gnubg-release-"
1638 version "-sources.tar.gz"))
1639 (sha256
1640 (base32
1641 "11xwhcli1h12k6rnhhyq4jphzrhfik7i8ah3k32pqw803460n6yf"))))
1642 (build-system gnu-build-system)
1643 (inputs `(;; XXX: Build with an older Pango for 'pango_font_get_hb_font' and
1644 ;; 'pango_coverage_get_type'. Try removing this for versions > 1.06.002.
1645 ("pango" ,pango-1.42)
1646
1647 ("glib" ,glib)
1648 ("readline" ,readline)
1649 ("gtk+" ,gtk+-2)
1650 ("mesa" ,mesa)
1651 ("glu" ,glu)
1652 ("gtkglext" ,gtkglext)
1653 ("sqlite" ,sqlite)
1654 ("libcanberra" ,libcanberra)))
1655 (native-inputs `(("python-2" ,python-2)
1656 ("pkg-config" ,pkg-config)))
1657 (arguments
1658 `(#:configure-flags
1659 ;; SSE instructions are available on Intel systems only.
1660 (list ,@(if (any (cute string-prefix? <> (or (%current-target-system)
1661 (%current-system)))
1662 '("x86_64" "i686"))
1663 '("--enable-simd=sse2") ; prevent avx instructions
1664 '()))
1665 #:phases
1666 (modify-phases %standard-phases
1667 (add-after 'install 'install-desktop-file
1668 (lambda* (#:key outputs #:allow-other-keys)
1669 (let* ((out (assoc-ref outputs "out"))
1670 (apps (string-append out "/share/applications")))
1671 (mkdir-p apps)
1672 (with-output-to-file (string-append apps "/gnubg.desktop")
1673 (lambda _
1674 (format #t
1675 "[Desktop Entry]~@
1676 Name=GNU Backgammon~@
1677 Exec=~a/bin/gnubg -w~@
1678 Icon=gnubg~@
1679 Categories=Game;~@
1680 Terminal=false~@
1681 Type=Application~%"
1682 out))))
1683 #t)))))
1684 (home-page "https://www.gnu.org/software/gnubg/")
1685 (synopsis "Backgammon game")
1686 (description "The GNU backgammon application (also known as \"gnubg\") can
1687 be used for playing, analyzing and teaching the game. It has an advanced
1688 evaluation engine based on artificial neural networks suitable for both
1689 beginners and advanced players. In addition to a command-line interface, it
1690 also features an attractive, 3D representation of the playing board.")
1691 (license license:gpl3+)))
1692
1693 (define-public gnubik
1694 (package
1695 (name "gnubik")
1696 (version "2.4.3")
1697 (source
1698 (origin
1699 (method url-fetch)
1700 (uri (string-append "mirror://gnu/gnubik/gnubik-"
1701 version ".tar.gz"))
1702 (sha256
1703 (base32
1704 "1vlf924mq8hg93bsjj0rzvs0crc6psmlxyc6zn0fr7msnmpx6gib"))))
1705 (build-system gnu-build-system)
1706 (arguments
1707 '(#:phases (modify-phases %standard-phases
1708 (add-after 'unpack 'skip-gtk-update-icon-cache
1709 (lambda _
1710 ;; Do not attempt to run 'gtk-update-icon-cache', which is
1711 ;; unnecessary and causes a needless dependency on glib.
1712 (substitute* "Makefile.in"
1713 (("gtk-update-icon-cache")
1714 "true"))
1715 #t)))))
1716 (inputs `(("gtk+" ,gtk+-2)
1717 ("mesa" ,mesa)
1718 ("glu" ,glu)
1719 ("libx11" ,libx11)
1720 ("guile" ,guile-2.0)
1721 ("gtkglext" ,gtkglext)))
1722 (native-inputs `(("gettext" ,gettext-minimal)
1723 ("pkg-config" ,pkg-config)))
1724 (home-page "https://www.gnu.org/software/gnubik/")
1725 (synopsis "3d Rubik's cube game")
1726 (description
1727 "GNUbik is a puzzle game in which you must manipulate a cube to make
1728 each of its faces have a uniform color. The game is customizable, allowing
1729 you to set the size of the cube (the default is 3x3) or to change the colors.
1730 You may even apply photos to the faces instead of colors. The game is
1731 scriptable with Guile.")
1732 (license license:gpl3+)))
1733
1734 (define-public gnushogi
1735 (package
1736 (name "gnushogi")
1737 (version "1.4.2")
1738 (source
1739 (origin
1740 (method url-fetch)
1741 (uri (string-append "mirror://gnu/gnushogi/gnushogi-"
1742 version ".tar.gz"))
1743 (sha256
1744 (base32
1745 "0a9bsl2nbnb138lq0h14jfc5xvz7hpb2bcsj4mjn6g1hcsl4ik0y"))))
1746 (arguments `(#:tests? #f)) ;; No check target.
1747 (build-system gnu-build-system)
1748 (home-page "https://www.gnu.org/software/gnushogi/")
1749 (synopsis "The game of Shogi (Japanese chess)")
1750 (description "GNU Shogi is a program that plays the game Shogi (Japanese
1751 Chess). It is similar to standard chess but this variant is far more complicated.")
1752 (license license:gpl3+)))
1753
1754 (define-public ltris
1755 (package
1756 (name "ltris")
1757 (version "1.2.1")
1758 (source
1759 (origin
1760 (method url-fetch)
1761 (uri (string-append "mirror://sourceforge/lgames/ltris/"
1762 "ltris-" version ".tar.gz"))
1763 (sha256
1764 (base32 "0959vvxh5xnxzpdv7i67lpd2b6ghx69z65ldnclj1z6llyfzfs7q"))))
1765 (build-system gnu-build-system)
1766 (arguments
1767 '(;; The code in LTris uses traditional GNU semantics for inline functions
1768 #:configure-flags '("CFLAGS=-fgnu89-inline")
1769 #:phases
1770 (modify-phases %standard-phases
1771 (add-after 'set-paths 'set-sdl-paths
1772 (lambda* (#:key inputs #:allow-other-keys)
1773 (setenv "CPATH"
1774 (string-append (assoc-ref inputs "sdl-union")
1775 "/include/SDL:"
1776 (or (getenv "CPATH") "")))
1777 #t)))))
1778 (inputs
1779 `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))))
1780 (home-page "http://lgames.sourceforge.net/LTris/")
1781 (synopsis "Tetris clone based on the SDL library")
1782 (description
1783 "LTris is a tetris clone: differently shaped blocks are falling down the
1784 rectangular playing field and can be moved sideways or rotated by 90 degree
1785 units with the aim of building lines without gaps which then disappear (causing
1786 any block above the deleted line to fall down). LTris has three game modes: In
1787 Classic you play until the stack of blocks reaches the top of the playing field
1788 and no new blocks can enter. In Figures the playing field is reset to a new
1789 figure each level and later on tiles and lines suddenly appear. In Multiplayer
1790 up to three players (either human or CPU) compete with each other sending
1791 removed lines to all opponents. There is also a Demo mode in which you can
1792 watch your CPU playing while enjoying a cup of tea!")
1793 (license license:gpl2+)))
1794
1795 (define-public nethack
1796 (package
1797 (name "nethack")
1798 (version "3.6.6")
1799 (source
1800 (origin
1801 (method url-fetch)
1802 (uri
1803 (string-append "https://www.nethack.org/download/" version "/nethack-"
1804 (string-join (string-split version #\.) "") "-src.tgz"))
1805 (sha256
1806 (base32 "1liyckjp34j354qnxc1zn9730lh1p2dabrg1hap24z6xnqx0rpng"))))
1807 (native-inputs
1808 `(("bison" ,bison)
1809 ("flex" ,flex)))
1810 (inputs
1811 `(("ncurses" ,ncurses)
1812 ("less" ,less)))
1813 (build-system gnu-build-system)
1814 (arguments
1815 '(#:make-flags
1816 `(,(string-append "PREFIX=" (assoc-ref %outputs "out")))
1817 #:phases
1818 (modify-phases %standard-phases
1819 (add-before 'configure 'patch-paths
1820 (lambda _
1821 (substitute* "sys/unix/nethack.sh"
1822 (("^ *cd .*$") ""))
1823 (substitute* "sys/unix/Makefile.utl"
1824 (("^YACC *=.*$") "YACC = bison -y\n")
1825 (("^LEX *=.*$") "LEX = flex\n")
1826 (("^# CC = gcc") "CC = gcc"))
1827 (substitute* "sys/unix/hints/linux"
1828 (("/bin/gzip") (string-append
1829 (assoc-ref %build-inputs "gzip")
1830 "/bin/gzip"))
1831 (("^WINTTYLIB=.*") "WINTTYLIB=-lncurses"))
1832 (substitute* "include/config.h"
1833 (("^.*define CHDIR.*$") "")
1834 (("^/\\* *#*define *REPRODUCIBLE_BUILD *\\*/")
1835 ;; Honor SOURCE_DATE_EPOCH.
1836 "#define REPRODUCIBLE_BUILD"))
1837
1838 ;; Note: 'makedefs' rejects and ignores dates that are too old
1839 ;; or too new, so we must choose something reasonable here.
1840 (setenv "SOURCE_DATE_EPOCH" "1531865062")
1841
1842 (substitute* "sys/unix/Makefile.src"
1843 (("^# CC = gcc") "CC = gcc"))
1844 #t))
1845 (replace 'configure
1846 (lambda _
1847 (let ((bash (string-append
1848 (assoc-ref %build-inputs "bash")
1849 "/bin/bash")))
1850 (with-directory-excursion "sys/unix"
1851 (substitute* "setup.sh" (("/bin/sh") bash))
1852 (invoke bash "setup.sh" "hints/linux"))
1853 #t)))
1854 (add-after 'install 'fixup-paths
1855 (lambda _
1856 (let* ((output (assoc-ref %outputs "out"))
1857 (nethack-script (string-append output "/bin/nethack")))
1858 (mkdir-p (string-append output "/games/lib/nethackuserdir"))
1859 (for-each
1860 (lambda (file)
1861 (rename-file
1862 (string-append output "/games/lib/nethackdir/" file)
1863 (string-append output "/games/lib/nethackuserdir/"
1864 file)))
1865 '("xlogfile" "logfile" "perm" "record" "save"))
1866 (mkdir-p (string-append output "/bin"))
1867 (call-with-output-file nethack-script
1868 (lambda (port)
1869 (format port "#!~a/bin/sh
1870 PATH=~a:$PATH
1871 if [ ! -d ~~/.config/nethack ]; then
1872 mkdir -p ~~/.config/nethack
1873 cp -r ~a/games/lib/nethackuserdir/* ~~/.config/nethack
1874 chmod -R +w ~~/.config/nethack
1875 fi
1876
1877 RUNDIR=$(mktemp -d)
1878
1879 cleanup() {
1880 rm -rf $RUNDIR
1881 }
1882 trap cleanup EXIT
1883
1884 cd $RUNDIR
1885 for i in ~~/.config/nethack/*; do
1886 ln -s $i $(basename $i)
1887 done
1888 for i in ~a/games/lib/nethackdir/*; do
1889 ln -s $i $(basename $i)
1890 done
1891 ~a/games/nethack"
1892 (assoc-ref %build-inputs "bash")
1893 (list->search-path-as-string
1894 (list
1895 (string-append
1896 (assoc-ref %build-inputs "coreutils") "/bin")
1897 (string-append
1898 (assoc-ref %build-inputs "less") "/bin"))
1899 ":")
1900 output
1901 output
1902 output)))
1903 (chmod nethack-script #o555)
1904 #t)))
1905 (delete 'check))))
1906 (home-page "https://nethack.org")
1907 (synopsis "Classic dungeon crawl game")
1908 (description "NetHack is a single player dungeon exploration game that runs
1909 on a wide variety of computer systems, with a variety of graphical and text
1910 interfaces all using the same game engine. Unlike many other Dungeons &
1911 Dragons-inspired games, the emphasis in NetHack is on discovering the detail of
1912 the dungeon and not simply killing everything in sight - in fact, killing
1913 everything in sight is a good way to die quickly. Each game presents a
1914 different landscape - the random number generator provides an essentially
1915 unlimited number of variations of the dungeon and its denizens to be discovered
1916 by the player in one of a number of characters: you can pick your race, your
1917 role, and your gender.")
1918 (license
1919 (license:fsdg-compatible
1920 "https://nethack.org/common/license.html"))))
1921
1922 (define-public pipewalker
1923 (package
1924 (name "pipewalker")
1925 (version "0.9.4")
1926 (source
1927 (origin
1928 (method url-fetch)
1929 (uri (string-append "mirror://sourceforge/pipewalker/pipewalker/"
1930 version "/pipewalker-" version ".tar.gz"))
1931 (sha256
1932 (base32 "1x46wgk0s55562pd96cxagxkn6wpgglq779f9b64ff1k3xzp3myn"))))
1933 (build-system gnu-build-system)
1934 (arguments
1935 `(#:configure-flags
1936 (list (string-append "--docdir=" (assoc-ref %outputs "out")
1937 "/share/doc/" ,name "-" ,version))
1938 #:phases
1939 (modify-phases %standard-phases
1940 (add-after 'configure 'patch-docdir
1941 ;; Makefile.in ignores configure's ‘--docdir=...’ option. Fix that.
1942 (lambda _
1943 (substitute* "Makefile"
1944 (("(pkgdocdatadir = ).*" _ assignment)
1945 (string-append assignment "$(docdir)\n")))
1946 #t)))))
1947 (inputs
1948 `(("libpng" ,libpng)
1949 ("mesa" ,mesa)
1950 ("sdl" ,sdl)))
1951 (home-page "http://pipewalker.sourceforge.net/")
1952 (synopsis "Logical tile puzzle")
1953 (description
1954 "PipeWalker is a simple puzzle game with many diffent themes: connect all
1955 computers to one network server, bring water from a source to the taps, etc.
1956 The underlying mechanism is always the same: you must turn each tile in the
1957 grid in the right direction to combine all components into a single circuit.
1958 Every puzzle has a complete solution, although there may be more than one.")
1959 (license license:gpl3+)))
1960
1961 (define-public prboom-plus
1962 (package
1963 (name "prboom-plus")
1964 (version "2.5.1.4")
1965 (source (origin
1966 (method url-fetch)
1967 (uri (string-append "mirror://sourceforge/prboom-plus/prboom-plus/"
1968 version "/prboom-plus-" version ".tar.gz"))
1969 (sha256
1970 (base32 "151v6nign86m1a2vqz27krsccpc9m4d1jax4y43v2fa82wfj9qp0"))
1971 (modules '((guix build utils)))
1972 (snippet
1973 '(begin
1974 (substitute* "src/version.c"
1975 (("__DATE__") "")
1976 (("__TIME__") ""))
1977 #t))))
1978 (build-system gnu-build-system)
1979 (arguments
1980 '(#:configure-flags '("--disable-cpu-opt")
1981 #:make-flags `(,(string-append "gamesdir="
1982 (assoc-ref %outputs "out") "/bin"))
1983 #:phases
1984 (modify-phases %standard-phases
1985 (add-after 'set-paths 'set-sdl'paths
1986 (lambda* (#:key inputs #:allow-other-keys)
1987 (setenv "CPATH"
1988 (string-append (assoc-ref inputs "sdl-union")
1989 "/include/SDL:"
1990 (or (getenv "CPATH") "")))
1991 #t)))))
1992 (inputs
1993 `(("fluidsynth" ,fluidsynth)
1994 ("glu" ,glu)
1995 ("libmad" ,libmad)
1996 ("libpng" ,libpng)
1997 ("libvorbis" ,libvorbis)
1998 ("pcre" ,pcre)
1999 ("portmidi" ,portmidi)
2000 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net)))))
2001 (home-page "http://prboom-plus.sourceforge.net/")
2002 (synopsis "Version of the classic 3D shoot'em'up game Doom")
2003 (description
2004 "PrBoom+ is a Doom source port developed from the original PrBoom project.")
2005 (license license:gpl2+)))
2006
2007 (define-public retux
2008 (let ((release "1.4.1")
2009 (revision 1))
2010 (package
2011 (name "retux")
2012 (version (if (zero? revision)
2013 release
2014 (string-append release "-"
2015 (number->string revision))))
2016 (source (origin
2017 (method url-fetch)
2018 (uri (string-append "https://github.com/retux-game/retux/"
2019 "releases/download/v"
2020 version "/retux-"
2021 release "-src.tar.gz"))
2022 (sha256
2023 (base32
2024 "1vrldg2qh2gqfswj7vkpc589ldrrjd903j6cnfdik9zh0jhlq4h2"))))
2025 (build-system python-build-system)
2026 (arguments
2027 `(#:tests? #f ; no check target
2028 #:phases
2029 (modify-phases %standard-phases
2030 ;; no setup.py script
2031 (delete 'build)
2032 (replace 'install
2033 (lambda* (#:key outputs #:allow-other-keys)
2034 (let* ((out (assoc-ref outputs "out"))
2035 (bin (string-append out "/bin"))
2036 (data (string-append out "/share/retux")))
2037 (mkdir-p bin)
2038
2039 (substitute* "retux.py"
2040 ;; Use the correct data directory.
2041 (("os\\.path\\.join\\(os\\.path\\.dirname\\(__file__\\), \"data\"\\),")
2042 (string-append "\"" data "\",")))
2043
2044 (copy-file "retux.py" (string-append bin "/retux"))
2045 (copy-recursively "data" data)
2046 #t))))))
2047 (inputs
2048 `(("python-sge-pygame" ,python-sge-pygame)
2049 ("python-six" ,python-six)
2050 ("python-xsge" ,python-xsge)))
2051 (home-page "https://retux-game.github.io/")
2052 (synopsis "Action platformer game")
2053 (description
2054 "ReTux is an action platformer loosely inspired by the Mario games,
2055 utilizing the art assets from the @code{SuperTux} project.")
2056 ;; GPL version 3 or later is the license for the code and some art.
2057 ;; The rest of the licenses are for the art exclusively, as listed in
2058 ;; data/LICENSES.
2059 (license (list license:cc0
2060 license:cc-by3.0
2061 license:cc-by-sa3.0
2062 license:cc-by-sa4.0
2063 license:gpl2+
2064 license:gpl3+)))))
2065
2066 (define-public roguebox-adventures
2067 (package
2068 (name "roguebox-adventures")
2069 (version "3.0.1")
2070 (source
2071 (origin
2072 (method url-fetch)
2073 (uri (string-append
2074 "http://download.tuxfamily.org/rba/RogueBoxAdventures_v"
2075 (string-join (string-split version #\.) "_") "_Source.zip"))
2076 (file-name (string-append name "-" version ".zip"))
2077 (sha256
2078 (base32
2079 "05zd03s5w9kcpklfgcggbaa6rwf59nm0q9vcj6gh9v2lh402k067"))))
2080 (build-system python-build-system)
2081 (arguments
2082 `(#:tests? #f ; no check target
2083 #:phases
2084 (modify-phases %standard-phases
2085 (replace 'unpack
2086 (lambda* (#:key source #:allow-other-keys)
2087 (and (invoke "unzip" source)
2088 ;; The actual source is buried a few directories deep.
2089 (chdir (string-append "RogueBoxAdventures_v"
2090 (string-join
2091 (string-split ,version #\.) "_")
2092 "_Source")))))
2093 ;; no setup.py script
2094 (replace 'build
2095 (lambda* (#:key outputs #:allow-other-keys)
2096 (let* ((out (assoc-ref outputs "out"))
2097 (data (string-append
2098 out "/share/games/roguebox-adventures")))
2099 ;; Use the correct data directory.
2100 (substitute* '("main.py" "LIB/getch.py" "LIB/getch_gcwz.py")
2101 (("basic_path + os\\.sep + 'DATA'")
2102 (string-append "'" data "'"))
2103 (("^basic_path.*$")
2104 (string-append "basic_path ='" data "'\n")))
2105 (substitute* "LIB/dialog.py"
2106 (("d_path = os\\.path\\.dirname\\(.*\\)\\)")
2107 (string-append "d_path = '" data "'")))
2108 (substitute* "LIB/gra_files.py"
2109 (("basic_path = b_path\\.replace\\('/LIB',''\\)")
2110 (string-append "basic_path ='" data "'\n")))
2111
2112 ;; The game must save in the user's home directory because
2113 ;; the store is read-only.
2114 (substitute* "main.py"
2115 (("home_save = False") "home_save = True")
2116 (("'icon_small.png'")
2117 (string-append "'" data "/icon_small.png'"))))
2118 #t))
2119 (replace 'install
2120 (lambda* (#:key outputs #:allow-other-keys)
2121 (let* ((out (assoc-ref outputs "out"))
2122 (bin (string-append out "/bin"))
2123 (roguebox-adventures
2124 (string-append bin "/roguebox-adventures"))
2125 (data (string-append
2126 out "/share/games/roguebox-adventures"))
2127 (lib (string-append data "/LIB"))
2128 (doc (string-append
2129 out "/share/doc/roguebox-adventures")))
2130 (mkdir-p bin)
2131 (mkdir-p doc)
2132
2133 (for-each (lambda (file)
2134 (copy-recursively file
2135 (string-append data "/" file)))
2136 '("AUDIO" "FONT" "GRAPHIC" "LIB" "LICENSE"
2137 "icon_big.png" "icon_small.png"))
2138 (for-each (lambda (file)
2139 (chmod file #o555)
2140 (install-file file lib))
2141 '("main.py" "run.py"))
2142
2143 (copy-recursively "DOC" doc)
2144
2145 (call-with-output-file
2146 roguebox-adventures
2147 (lambda (p)
2148 (format p "\
2149 #!~a
2150 export PYTHONPATH=~a/LIB:~a
2151 exec -a \"~a\" ~a \"$@\"\n"
2152 (which "bash") data (getenv "PYTHONPATH")
2153 (which "python3")
2154 (string-append lib "/main.py"))))
2155 (chmod roguebox-adventures #o555))
2156 #t)))))
2157 (native-inputs
2158 `(("unzip" ,unzip)))
2159 (inputs
2160 `(("python-pygame" ,python-pygame)
2161 ("python-tmx" ,python-tmx)))
2162 (home-page "https://rogueboxadventures.tuxfamily.org")
2163 (synopsis "A classical roguelike/sandbox game")
2164 (description
2165 "RogueBox Adventures is a graphical roguelike with strong influences
2166 from sandbox games like Minecraft or Terraria. The main idea of RogueBox
2167 Adventures is to offer the player a kind of roguelike toy-world. This world
2168 can be explored and changed freely.")
2169 ;; The GPL3+ is for code, the rest are for art.
2170 (license (list license:cc0
2171 license:cc-by3.0
2172 license:gpl3+
2173 license:silofl1.1))))
2174
2175 (define-public seahorse-adventures
2176 (package
2177 (name "seahorse-adventures")
2178 (version "1.3")
2179 (source
2180 (origin
2181 (method git-fetch)
2182 (uri (git-reference
2183 (url "https://github.com/dulsi/seahorse-adventures")
2184 (commit (string-append "release-" version))))
2185 (file-name (git-file-name name version))
2186 (sha256
2187 (base32 "0m53jh2gchzr7rs35hml6lbvc5kb5hp229wlfqa09098b7hhl15a"))
2188 (modules '((guix build utils)
2189 (ice-9 ftw)
2190 (srfi srfi-1)))
2191 ;; Remove non-free (non-commercial) font.
2192 (snippet
2193 `(begin
2194 (for-each delete-file (find-files "data/fonts" "."))
2195 #t))))
2196 (build-system python-build-system)
2197 (arguments
2198 `(#:tests? #f ;no test
2199 #:phases
2200 (modify-phases %standard-phases
2201 (delete 'build) ;pure Python
2202 (replace 'install ;no install script
2203 (lambda* (#:key outputs #:allow-other-keys)
2204 (let* ((out (assoc-ref outputs "out"))
2205 (bin (string-append out "/bin"))
2206 (share (string-append out "/share"))
2207 (applications (string-append share "/applications"))
2208 (data (string-append share "/seahorse-adventures")))
2209 ;; Install data.
2210 (for-each (lambda (f)
2211 (chmod f #o555)
2212 (install-file f data))
2213 '("leveledit.py" "run_game.py" "tileedit.py"))
2214 (for-each (lambda (dir)
2215 (let ((target (string-append data "/" dir)))
2216 (mkdir-p target)
2217 (copy-recursively dir target)))
2218 '("data" "lib"))
2219 ;; Create executable.
2220 (mkdir-p bin)
2221 (let ((executable (string-append bin "/seahorse-adventures")))
2222 (call-with-output-file executable
2223 (lambda (p)
2224 (format p
2225 "#!~a~@
2226 export PYTHONPATH=~a:~a~@
2227 exec -a \"~a\" ~a \"$@\"~%"
2228 (which "bash") data (getenv "PYTHONPATH")
2229 (which "python3")
2230 (string-append data "/run_game.py"))))
2231 (chmod executable #o555))
2232 ;; Add desktop file.
2233 (mkdir-p applications)
2234 (make-desktop-entry-file
2235 (string-append applications "/seahorse-adventures.desktop")
2236 #:name "Seahorse Adventures"
2237 #:comment
2238 '((#f "Help Barbie the seahorse float on bubbles to the moon"))
2239 #:exec ,name
2240 #:icon ,name
2241 #:categories '("Game" "ActionGame")
2242 #:keywords '("game" "retro" "platform"))
2243 ;; Add icons.
2244 (for-each
2245 (lambda (size)
2246 (let ((dir (string-append share "/icons/hicolor/"
2247 size "x" size "/apps")))
2248 (mkdir-p dir)
2249 (copy-file
2250 (string-append "icon" size ".png")
2251 (string-append dir "/searhorse-adventures.png"))))
2252 '("32" "64" "128")))
2253 #t))
2254 (add-after 'install 'unbundle-fonts
2255 ;; Unbundle Bitstream Vera font and replace deleted one.
2256 (lambda* (#:key outputs inputs #:allow-other-keys)
2257 (let* ((out (assoc-ref outputs "out"))
2258 (data (string-append out "/share/seahorse-adventures"))
2259 (vera (string-append (assoc-ref inputs "font-bitstream-vera")
2260 "/share/fonts/truetype/Vera.ttf")))
2261 (let ((themes-dir (string-append data "/data/themes/")))
2262 (for-each
2263 (lambda (theme)
2264 (let ((target (string-append themes-dir theme "/Vera.ttf")))
2265 (delete-file target)
2266 (symlink vera target)))
2267 '("default" "gray")))
2268 (symlink vera (string-append data "/data/fonts/04B_20__.TTF"))
2269 (substitute* (string-append data "/lib/main.py")
2270 (("f_scale = 0.35") "f_scale = 0.47")))
2271 #t)))))
2272 (inputs
2273 `(("font-bitstream-vera" ,font-bitstream-vera)
2274 ("python-pygame" ,python-pygame)))
2275 (home-page "http://www.imitationpickles.org/barbie/")
2276 (synopsis "Help Barbie the seahorse float on bubbles to the moon")
2277 (description
2278 "Barbie Seahorse Adventures is a retro style platform arcade game.
2279 You are Barbie the seahorse who travels through the jungle, up to the
2280 volcano until you float on bubbles to the moon. On the way to your
2281 final destination you will encounter various enemies, servants of the
2282 evil overlord who has stolen the galaxy crystal. Avoid getting hit
2283 and defeat them with your bubbles!")
2284 ;; GPL2+ is for code, CC0 is for art.
2285 (license (list license:gpl2+ license:cc0))))
2286
2287 (define-public solarus
2288 (package
2289 (name "solarus")
2290 ;; XXX: When updating this package, please also update hash in
2291 ;; `solarus-quest-editor' below.
2292 (version "1.6.4")
2293 (source
2294 (origin
2295 (method git-fetch)
2296 (uri (git-reference
2297 (url "https://gitlab.com/solarus-games/solarus")
2298 (commit (string-append "v" version))))
2299 (file-name (git-file-name name version))
2300 (sha256
2301 (base32 "1n6l91yyqjx0pz4w1lp3yybpq0fs2yjswfcm8c1wjfkxwiznbdxi"))))
2302 (build-system cmake-build-system)
2303 (arguments
2304 `(#:phases
2305 (modify-phases %standard-phases
2306 (add-after 'unpack 'disable-failing-tests
2307 ;; The following tests fail reporting a missing "/dev/dri"
2308 ;; file.
2309 (lambda _
2310 (substitute* "tests/cmake/AddTestMaps.cmake"
2311 ((".*1200_create_shader_from_source.*" all)
2312 (string-append "#" all))
2313 ((".*1210_shader_scaling_factor.*" all)
2314 (string-append "#" all)))
2315 #t))
2316 (add-before 'check 'set-home
2317 ;; Tests fail without setting the following environment
2318 ;; variables.
2319 (lambda _
2320 (setenv "HOME" (getcwd))
2321 (setenv "XDG_RUNTIME_DIR" (getcwd))
2322 #t)))))
2323 (native-inputs
2324 `(("pkg-config" ,pkg-config)
2325 ("qttools" ,qttools)))
2326 (inputs
2327 `(("glm" ,glm)
2328 ("libmodplug" ,libmodplug)
2329 ("libogg" ,libogg)
2330 ("libvorbis" ,libvorbis)
2331 ("luajit" ,luajit)
2332 ("openal" ,openal)
2333 ("physfs" ,physfs)
2334 ("qtbase" ,qtbase)
2335 ("sdl2" ,(sdl-union (list sdl2 sdl2-image sdl2-ttf)))))
2336 (home-page "https://www.solarus-games.org/")
2337 (synopsis "Lightweight game engine for Action-RPGs")
2338 (description
2339 "Solarus is a 2D game engine written in C++, that can run games
2340 scripted in Lua. It has been designed with 16-bit classic Action-RPGs
2341 in mind.")
2342 ;; The source code is licensed under the terms of GPL-3.0.
2343 ;; Resources are licensed under the terms of CC-BY-SA-3.0 and
2344 ;; CC-BY-SA 4.0.
2345 (license (list license:gpl3 license:cc-by-sa3.0 license:cc-by-sa4.0))))
2346
2347 (define-public solarus-quest-editor
2348 (package
2349 (inherit solarus)
2350 (name "solarus-quest-editor")
2351 (version (package-version solarus))
2352 (source
2353 (origin
2354 (method git-fetch)
2355 (uri (git-reference
2356 (url "https://gitlab.com/solarus-games/solarus-quest-editor")
2357 (commit (string-append "v" version))))
2358 (file-name (git-file-name name version))
2359 (sha256
2360 (base32 "1qbc2j9kalk7xqk9j27s7wnm5zawiyjs47xqkqphw683idmzmjzn"))))
2361 (arguments
2362 `(#:tests? #false ;no test
2363 #:phases
2364 (modify-phases %standard-phases
2365 (add-after 'unpack 'fix-qt-build
2366 ;; XXX: Fix build with Qt 5.15. It has been applied upstream as
2367 ;; 81d5c7f1 and can be removed at next upgrade.
2368 (lambda _
2369 (substitute* "src/entities/jumper.cpp"
2370 (("#include <QPainter>" all)
2371 (string-append all "\n" "#include <QPainterPath>\n")))
2372 #t)))))
2373 (inputs
2374 `(("solarus" ,solarus)
2375 ,@(package-inputs solarus)))
2376 (synopsis "Create and modify quests for the Solarus engine")
2377 (description
2378 "Solarus Quest Editor is a graphical user interface to create and
2379 modify quests for the Solarus engine.")))
2380
2381 (define-public superstarfighter
2382 (package
2383 (name "superstarfighter")
2384 (version "0.6.4")
2385 (source
2386 (origin
2387 (method git-fetch)
2388 (uri (git-reference
2389 (url "https://github.com/notapixelstudio/superstarfighter")
2390 (commit (string-append "v" version))))
2391 (file-name (git-file-name name version))
2392 (sha256
2393 (base32 "1fly63yf5ls1xwm15if4lxwy67wi84k4gvjllljpykrl18vw2y0y"))))
2394 (build-system gnu-build-system)
2395 (arguments
2396 `(#:tests? #f ;there are no tests
2397 #:phases
2398 (modify-phases %standard-phases
2399 (replace 'configure
2400 (lambda _
2401 (chdir "godot")
2402 (setenv "HOME" (getcwd))
2403 (with-output-to-file "export_presets.cfg"
2404 (lambda ()
2405 (display
2406 "[preset.0]
2407 name=\"Guix\"
2408 platform=\"Linux/X11\"
2409 runnable=true
2410 [preset.0.options]")))
2411 #t))
2412 (replace 'build
2413 (lambda _
2414 (let ((godot (assoc-ref %build-inputs "godot-headless")))
2415 (invoke (string-append godot "/bin/godot_server")
2416 "--export-pack" "Guix"
2417 "superstarfighter.pck" "project.godot"))
2418 #t))
2419 (replace 'install
2420 (lambda* (#:key inputs outputs #:allow-other-keys)
2421 (let* ((out (assoc-ref outputs "out"))
2422 (bin (string-append out "/bin"))
2423 (share (string-append out "/share"))
2424 (data (string-append share "/superstarfighter"))
2425 (icons (string-append share "/icons/hicolor/256x256/apps")))
2426 (install-file "superstarfighter.pck" data)
2427 (mkdir-p bin)
2428 (call-with-output-file (string-append bin "/superstarfighter")
2429 (lambda (port)
2430 (format port
2431 "#!/bin/sh~@
2432 exec ~a/bin/godot --main-pack ~a/superstarfighter.pck~%"
2433 (assoc-ref inputs "godot")
2434 data)
2435 (chmod port #o755)))
2436 (mkdir-p icons)
2437 (copy-file "icon.png" (string-append icons "/" ,name ".png"))
2438 (make-desktop-entry-file
2439 (string-append share "/applications/" ,name ".desktop")
2440 #:name "SuperStarfighter"
2441 #:comment "Fast-paced arcade combat game"
2442 #:exec ,name
2443 #:icon ,name
2444 #:categories '("Game" "ArcadeGame")))
2445 #t)))))
2446 (native-inputs
2447 `(("godot-headless" ,godot "headless")))
2448 (inputs
2449 `(("godot" ,godot)))
2450 (home-page "https://notapixel.itch.io/superstarfighter")
2451 (synopsis "Fast-paced local multiplayer arcade game")
2452 (description "In SuperStarfighter, up to four local players compete in a
2453 2D arena with fast-moving ships and missiles. Different game types are
2454 available, as well as a single-player mode with AI-controlled ships.")
2455 (license (list license:expat ; game
2456 license:silofl1.1)))) ; fonts
2457
2458 (define %ufoai-commit "a542a87a891f96b1ab2c44d35b2f6f16859a5019")
2459 (define %ufoai-revision "0")
2460 (define %ufoai-version (git-version "2.6.0_dev" %ufoai-revision %ufoai-commit))
2461 (define ufoai-source
2462 (origin
2463 (method git-fetch)
2464 (uri (git-reference
2465 (url "git://git.code.sf.net/p/ufoai/code") ;HTTPS fails mid-clone
2466 (commit %ufoai-commit)))
2467 (file-name (string-append "ufoai-" %ufoai-version "-checkout"))
2468 (sha256
2469 (base32
2470 "024s7b9rcg7iw8i2p72gwnvabk23ljlq0nldws0y4b6hpwzyn1wz"))
2471 (modules '((guix build utils)
2472 (srfi srfi-1)
2473 (ice-9 ftw)))
2474 (snippet
2475 '(begin
2476 ;; Delete ~32MiB of bundled dependencies.
2477 (with-directory-excursion "src/libs"
2478 (for-each delete-file-recursively
2479 (lset-difference equal? (scandir ".")
2480 '("." ".." "gtest" "mumble"))))
2481
2482 ;; Use relative path to Lua headers.
2483 (substitute* "src/common/scripts_lua.h"
2484 (("\\.\\./libs/lua/") ""))
2485
2486 ;; Adjust Makefile targets to not depend on 'ufo2map', since we build
2487 ;; it as a separate package. This way we don't need to make the same
2488 ;; adjustments for 'ufoai-data' and 'ufoai' below.
2489 (substitute* "build/maps.mk"
2490 (("\\./ufo2map") "ufo2map")
2491 (("maps: ufo2map") "maps:"))
2492 (substitute* "build/modules/testall.mk"
2493 (("testall: ufo2map") "testall:"))
2494
2495 ;; If no cURL headers are found, the build system will try to include
2496 ;; the bundled version, even when not required. Prevent that.
2497 (substitute* "build/default.mk"
2498 (("^include src/libs/curl/lib/Makefile\\.inc")
2499 ""))
2500
2501 ;; While here, improve reproducibility by adding the '-X' flag to the
2502 ;; zip command used to create the map files, in order to prevent time
2503 ;; stamps from making it into the generated archives.
2504 (substitute* "build/data.mk"
2505 (("\\$\\(call ZIP\\)")
2506 "$(call ZIP) -X"))
2507 #t))))
2508
2509 (define-public trigger-rally
2510 (package
2511 (name "trigger-rally")
2512 (version "0.6.6.1")
2513 (source
2514 (origin
2515 (method url-fetch)
2516 (uri (string-append "mirror://sourceforge/trigger-rally/"
2517 "trigger-" version "/"
2518 "trigger-rally-" version ".tar.gz"))
2519 (sha256
2520 (base32
2521 "016bc2hczqscfmngacim870hjcsmwl8r3aq8x03vpf22s49nw23z"))))
2522 (build-system gnu-build-system)
2523 (inputs
2524 `(("freealut" ,freealut)
2525 ("glew" ,glew)
2526 ("glu" ,glu)
2527 ("mesa" ,mesa)
2528 ("openal" ,openal)
2529 ("physfs" ,physfs)
2530 ("sdl" ,(sdl-union (list sdl2 sdl2-image)))
2531 ("tinyxml2" ,tinyxml2)))
2532 (arguments
2533 `(#:make-flags (list (string-append "prefix=" %output)
2534 "bindir=$(prefix)/bin"
2535 "datadir=$(datarootdir)"
2536 "OPTIMS=-Ofast")
2537 #:tests? #f ; No tests present
2538 #:phases
2539 (modify-phases %standard-phases
2540 (delete 'configure)
2541 (add-before 'build 'cd-src
2542 (lambda _ (chdir "src")))
2543 (add-before 'build 'remove-timestamps
2544 (lambda _
2545 (substitute* (list "Trigger/menu.cpp"
2546 "PEngine/app.cpp")
2547 ((".*__DATE__.*") ""))))
2548 (add-before 'build 'make-verbose
2549 (lambda _
2550 (substitute* "GNUmakefile"
2551 (("@\\$\\(CXX\\)") "$(CXX)"))))
2552 (add-after 'build 'set-data-path
2553 (lambda* (#:key outputs #:allow-other-keys)
2554 (let ((out (assoc-ref outputs "out")))
2555 (substitute* "../bin/trigger-rally.config.defs"
2556 (("<data path=\"C:[^\"]*\"")
2557 (string-append "<data path=\"" out "/share/trigger-rally\""))))))
2558 (add-after 'install 'create-desktop-entry
2559 (lambda* (#:key outputs #:allow-other-keys)
2560 (let* ((out (assoc-ref outputs "out"))
2561 (apps (string-append out "/share/applications")))
2562 (mkdir-p apps)
2563 (with-output-to-file
2564 (string-append apps "/trigger-rally.desktop")
2565 (lambda ()
2566 (format #t ; Borrowed from Debian package
2567 "[Desktop Entry]~@
2568 Name=Trigger Rally~@
2569 Icon=trigger-rally~@
2570 Comment=3D rally racing car game~@
2571 Comment[de]=3D Rally-Autorennen~@
2572 Comment[fr_FR]=un jeu de rally en 3D~@
2573 Comment[ro_RO]=Un joc în 3D cu curse de raliu~@
2574 Exec=~a/bin/trigger-rally~@
2575 Terminal=false~@
2576 StartupNotify=false~@
2577 Type=Application~@
2578 TryExec=~:*~a/bin/trigger-rally~@
2579 Categories=Game;ArcadeGame;~@
2580 Keywords=racing;tracks;~@
2581 Keywords[de]=Rennstrecke;~%"
2582 out)))))))))
2583 (home-page "http://trigger-rally.sourceforge.net")
2584 (synopsis "Fast-paced single-player racing game")
2585 (description "Trigger-rally is a 3D rally simulation with great physics
2586 for drifting on over 200 maps. Different terrain materials like dirt,
2587 asphalt, sand, ice, etc. and various weather, light, and fog conditions give
2588 this rally simulation the edge over many other games. You need to make it
2589 through the maps in often tight time limits and can further improve by beating
2590 the recorded high scores. All attached single races must be finished in time
2591 in order to win an event, unlocking additional events and cars. Most maps are
2592 equipped with spoken co-driver notes and co-driver icons.")
2593 (license (list license:cc0 ;textures and audio in data.zip
2594 license:gpl2+))))
2595
2596 (define-public ufo2map
2597 (package
2598 (name "ufo2map")
2599 (version %ufoai-version)
2600 (home-page "https://ufoai.org/")
2601 (source ufoai-source)
2602 (build-system gnu-build-system)
2603 (arguments
2604 '(#:configure-flags '("CC=gcc" "CXX=g++"
2605 "--enable-release"
2606 "--enable-ufo2map"
2607 "--disable-uforadiant"
2608 "--disable-cgame-campaign"
2609 "--disable-cgame-multiplayer"
2610 "--disable-cgame-skirmish"
2611 "--disable-game"
2612 "--disable-memory"
2613 "--disable-testall"
2614 "--disable-ufoded"
2615 "--disable-ufo"
2616 "--disable-ufomodel"
2617 "--disable-ufoslicer")
2618 #:tests? #f ;no tests
2619 #:phases (modify-phases %standard-phases
2620 (replace 'configure
2621 (lambda* (#:key (configure-flags '()) #:allow-other-keys)
2622 ;; The home-made configure script does not understand
2623 ;; some of the default flags of gnu-build-system.
2624 (apply invoke "./configure" configure-flags)))
2625 (replace 'install
2626 (lambda* (#:key outputs #:allow-other-keys)
2627 (let ((out (assoc-ref outputs "out")))
2628 (install-file "ufo2map" (string-append out "/bin"))
2629 (install-file "debian/ufo2map.6"
2630 (string-append out "/share/man/man6"))
2631 #t))))))
2632 (native-inputs
2633 `(("pkg-config" ,pkg-config)))
2634 (inputs
2635 `(("libjpeg" ,libjpeg-turbo)
2636 ("libpng" ,libpng)
2637 ("lua" ,lua-5.1)
2638 ("sdl-union" ,(sdl-union (list sdl2 sdl2-mixer sdl2-ttf)))))
2639 (synopsis "UFO: AI map generator")
2640 (description
2641 "This package provides @command{ufo2map}, a program used to generate
2642 maps for the UFO: Alien Invasion strategy game.")
2643 (license license:gpl2+)))
2644
2645 (define ufoai-data
2646 (package
2647 (name "ufoai-data")
2648 (version %ufoai-version)
2649 (home-page "https://ufoai.org/")
2650 (source ufoai-source)
2651 (build-system gnu-build-system)
2652 (arguments
2653 '(#:tests? #f
2654 #:configure-flags '("CC=gcc" "CXX=g++")
2655 #:phases (modify-phases %standard-phases
2656 (replace 'configure
2657 (lambda* (#:key outputs (configure-flags '()) #:allow-other-keys)
2658 (apply invoke "./configure" configure-flags)))
2659 (replace 'build
2660 (lambda* (#:key (parallel-build? #t) #:allow-other-keys)
2661 (invoke "make"
2662 "-j" (if parallel-build?
2663 (number->string (parallel-job-count))
2664 "1")
2665 "maps")))
2666 (add-after 'build 'pack
2667 (lambda _
2668 (invoke "make" "pk3")))
2669 (replace 'install
2670 (lambda* (#:key outputs #:allow-other-keys)
2671 (let ((out (assoc-ref outputs "out")))
2672 (for-each (lambda (file)
2673 (install-file file out))
2674 (find-files "base" "\\.pk3$"))
2675 #t))))))
2676 (native-inputs
2677 `(("python" ,python-2)
2678 ("ufo2map" ,ufo2map)
2679 ("which" ,which)
2680 ("zip" ,zip)))
2681 (synopsis "UFO: AI data files")
2682 (description
2683 "This package contains maps and other assets for UFO: Alien Invasion.")
2684 ;; Most assets are available under either GPL2 or GPL2+. Some use other
2685 ;; licenses, see LICENSES for details.
2686 (license (list license:gpl2+ license:gpl2 license:cc-by3.0
2687 license:cc-by-sa3.0 license:public-domain))))
2688
2689 (define-public ufoai
2690 (package
2691 (name "ufoai")
2692 (version %ufoai-version)
2693 (home-page "https://ufoai.org/")
2694 (source ufoai-source)
2695 (build-system gnu-build-system)
2696 (arguments
2697 `(#:configure-flags
2698 (list (string-append "--prefix=" (assoc-ref %outputs "out"))
2699 (string-append "--datadir=" (assoc-ref %outputs "out")
2700 "/share/games/ufo")
2701 "CC=gcc" "CXX=g++"
2702 "--enable-release"
2703 "--enable-game"
2704 "--disable-ufo2map"
2705 "--disable-dependency-tracking"
2706
2707 ;; Disable hard links to prevent huge NARs.
2708 "--disable-hardlinkedgame"
2709 "--disable-hardlinkedcgame")
2710 #:phases (modify-phases %standard-phases
2711 (add-after 'unpack 'symlink-data-files
2712 (lambda* (#:key inputs #:allow-other-keys)
2713 (let ((data (assoc-ref inputs "ufoai-data")))
2714 ;; Symlink the data files to where the build system
2715 ;; expects to find them. Ultimately these files are
2716 ;; copied to $out/share/games/ufoai/base, losing the
2717 ;; symlinks; we could fix that after install, but it
2718 ;; does not make a big difference in practice due to
2719 ;; deduplication.
2720 (with-directory-excursion "base"
2721 (for-each (lambda (file)
2722 (symlink file (basename file)))
2723 (find-files data "\\.pk3$")))
2724 #t)))
2725 (add-before 'configure 'create-language-files
2726 (lambda _
2727 (invoke "make" "lang")))
2728 (replace 'configure
2729 (lambda* (#:key outputs (configure-flags '()) #:allow-other-keys)
2730 (apply invoke "./configure" configure-flags)))
2731 (replace 'check
2732 (lambda* (#:key tests? #:allow-other-keys)
2733 (if tests?
2734 (invoke "./testall")
2735 (format #t "test suite not run~%"))
2736 #t))
2737 (add-after 'install 'install-man-pages
2738 (lambda* (#:key outputs #:allow-other-keys)
2739 (let* ((out (assoc-ref outputs "out"))
2740 (man6 (string-append out "/share/man/man6")))
2741 (install-file "debian/ufo.6" man6)
2742 (install-file "debian/ufoded.6" man6)
2743 #t))))
2744
2745 ;; TODO: Some map tests occasionally fail because of randomness issues,
2746 ;; e.g. not enough generated aliens. The test runner also fails early
2747 ;; in the build container with 'failed to shutdown server'?
2748 #:tests? #f))
2749 (native-inputs
2750 `(("gettext" ,gettext-minimal)
2751 ("pkg-config" ,pkg-config)
2752 ("python" ,python-2)
2753 ("ufo2map" ,ufo2map)
2754 ("ufoai-data" ,ufoai-data)))
2755 (inputs
2756 `(("curl" ,curl)
2757 ("libjpeg" ,libjpeg-turbo)
2758 ("libogg" ,libogg)
2759 ("libpng" ,libpng)
2760 ("libtheora" ,libtheora)
2761 ("libvorbis" ,libvorbis)
2762 ("libxml2" ,libxml2)
2763 ("lua" ,lua-5.1)
2764 ("mesa" ,mesa)
2765 ("minixml" ,minixml)
2766 ("sdl-union" ,(sdl-union (list sdl2 sdl2-mixer sdl2-ttf)))
2767 ("zlib" ,zlib)))
2768 (synopsis "Turn-based tactical strategy game")
2769 (description
2770 "UFO: Alien Invasion is a tactical strategy game set in the year 2084.
2771 You control a secret organisation charged with defending Earth from a brutal
2772 alien enemy. Build up your bases, prepare your team, and dive head-first into
2773 the fast and flowing turn-based combat.
2774
2775 Over the long term you will need to conduct research into the alien threat to
2776 figure out their mysterious goals and use their powerful weapons for your own
2777 ends. You will produce unique items and use them in combat against your
2778 enemies.
2779
2780 You can also use them against your friends with the multiplayer functionality.
2781
2782 Warning: This is a pre-release version of UFO: AI! Some things may not work
2783 properly.")
2784
2785 ;; The game code and most assets are GPL2+, but we use GPL2 only here
2786 ;; because some assets do not use the "or later" clause. Many individual
2787 ;; assets use Creative Commons or Public Domain; see the LICENSE file.
2788 (license (delete license:gpl2+ (package-license ufoai-data)))))
2789
2790 (define-public xshogi
2791 (package
2792 (name "xshogi")
2793 (version "1.4.2")
2794 (source
2795 (origin
2796 (method url-fetch)
2797 (uri (string-append "mirror://gnu/gnushogi/xshogi-"
2798 version ".tar.gz"))
2799 (sha256
2800 (base32
2801 "1dns0nhymak44by18sv48m4xb2skiwbi2i3nb9hl6w9iwd2i2brf"))))
2802 (build-system gnu-build-system)
2803 (inputs
2804 `(("libxaw" ,libxaw)
2805 ("libxt" ,libxt)))
2806 (home-page "https://www.gnu.org/software/gnushogi/")
2807 (synopsis "User interface for gnushogi")
2808 (description "A graphical user interface for the package @code{gnushogi}.")
2809 ;; Contains a copy of GPLv3 but the licence notices simply
2810 ;; state "GNU General Public Licence" without specifying a version.
2811 (license license:gpl1+)))
2812
2813 (define-public abbaye
2814 (package
2815 (name "abbaye")
2816 (version "2.0.1")
2817 (source
2818 (origin
2819 (method git-fetch)
2820 (uri (git-reference
2821 (url "https://github.com/nevat/abbayedesmorts-gpl")
2822 (commit (string-append "v" version))))
2823 (file-name (git-file-name name version))
2824 (sha256
2825 (base32 "1pwqf7r9bqb2p3xrw9i7y8pgr1401fy3mnnqpb1qkhmdl3gqi9hb"))
2826 (modules '((guix build utils)))
2827 (snippet
2828 ;; Unbundle fonts.
2829 '(begin
2830 (delete-file-recursively "fonts")
2831 #t))))
2832 (build-system gnu-build-system)
2833 (arguments
2834 '(#:make-flags '("CC=gcc")
2835 #:phases (modify-phases %standard-phases
2836 (add-after 'set-paths 'set-sdl-paths
2837 (lambda* (#:key inputs #:allow-other-keys)
2838 (setenv "CPATH"
2839 (string-append (assoc-ref inputs "sdl-union")
2840 "/include/SDL:"
2841 (or (getenv "CPATH") "")))))
2842 (add-after 'patch-source-shebangs 'patch-makefile
2843 (lambda* (#:key outputs #:allow-other-keys)
2844 ;; Replace /usr with package output directory.
2845 (substitute* "Makefile"
2846 (("/usr") (assoc-ref outputs "out")))))
2847 (add-before 'install 'make-install-dirs
2848 (lambda* (#:key outputs #:allow-other-keys)
2849 (let ((prefix (assoc-ref outputs "out")))
2850 ;; Create directories that the makefile assumes exist.
2851 (mkdir-p (string-append prefix "/bin"))
2852 (mkdir-p (string-append prefix "/share/applications"))
2853 (mkdir-p (string-append prefix "/share/pixmaps")))))
2854 ;; No configure script.
2855 (delete 'configure))
2856 #:tests? #f)) ;; No check target.
2857 (native-inputs `(("pkg-config" ,pkg-config)))
2858 (inputs `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer)))))
2859 (home-page "https://github.com/nevat/abbayedesmorts-gpl")
2860 (synopsis "GNU/Linux port of the indie game \"l'Abbaye des Morts\"")
2861 (description "L'Abbaye des Morts is a 2D platform game set in 13th century
2862 France. The Cathars, who preach about good Christian beliefs, were being
2863 expelled by the Catholic Church out of the Languedoc region in France. One of
2864 them, called Jean Raymond, found an old church in which to hide, not knowing
2865 that beneath its ruins lay buried an ancient evil.")
2866 (license license:gpl3)))
2867
2868 (define-public angband
2869 (package
2870 (name "angband")
2871 (version "4.2.1")
2872 (source
2873 (origin
2874 (method url-fetch)
2875 (uri (string-append "https://rephial.org/downloads/"
2876 (version-major+minor version)
2877 "/angband-" version ".tar.gz"))
2878 (sha256
2879 (base32 "03qdavkj2ik02mqjxmlm5bn17ba3yxb1rirp8ghnxy3bsk4kbmxc"))
2880 (modules '((guix build utils)))
2881 (snippet
2882 ;; So, some of the sounds/graphics/tilesets are under different
2883 ;; licenses... some of them even nonfree! This is a console-only
2884 ;; version of this package so we just remove them.
2885 ;; In the future, if someone tries to make a graphical variant of
2886 ;; this package, they can deal with that mess themselves. :)
2887 '(begin
2888 (for-each (lambda (subdir)
2889 (let ((lib-subdir (string-append "lib/" subdir)))
2890 (delete-file-recursively lib-subdir)))
2891 '("fonts" "icons" "sounds" "tiles"))
2892 (substitute* "lib/Makefile"
2893 ;; And don't try to invoke makefiles in the directories we removed.
2894 (("gamedata customize help screens fonts tiles sounds icons user")
2895 "gamedata customize help screens user"))
2896 #t))))
2897 (build-system gnu-build-system)
2898 (arguments
2899 `(#:tests? #f ; no check target
2900 #:configure-flags (list (string-append "--bindir=" %output "/bin"))
2901 #:phases
2902 (modify-phases %standard-phases
2903 (replace 'bootstrap
2904 (lambda _
2905 (substitute* "acinclude.m4"
2906 (("ncursesw5-config") "ncursesw6-config"))
2907 (invoke "sh" "autogen.sh"))))))
2908 (native-inputs
2909 `(("autoconf" ,autoconf)
2910 ("automake" ,automake)))
2911 (inputs `(("ncurses" ,ncurses)))
2912 (home-page "https://rephial.org/")
2913 (synopsis "Dungeon exploration roguelike")
2914 (description "Angband is a Classic dungeon exploration roguelike. Explore
2915 the depths below Angband, seeking riches, fighting monsters, and preparing to
2916 fight Morgoth, the Lord of Darkness.")
2917 (license license:gpl2)))
2918
2919 (define-public pingus
2920 (package
2921 (name "pingus")
2922 (version "0.7.6")
2923 (source
2924 (origin
2925 (method git-fetch)
2926 (uri (git-reference
2927 (url "https://gitlab.com/pingus/pingus.git")
2928 (commit (string-append "v" version))))
2929 (file-name (git-file-name name version))
2930 (sha256
2931 (base32
2932 "0wp06kcmknsnxz7bjnsndb8x062z7r23fb3yrnbfnj68qhz18y74"))
2933 (patches (search-patches "pingus-boost-headers.patch"
2934 "pingus-sdl-libs-config.patch"))
2935 (modules '((guix build utils)))
2936 (snippet
2937 '(begin
2938 (substitute* "src/pingus/screens/demo_session.cpp"
2939 (("#include <iostream>")
2940 ;; std::function moved to <functional> with C++ 11.
2941 ;; Remove this for versions newer than 0.7.6.
2942 "#include <iostream>\n#include <functional>"))
2943 #t))))
2944 (build-system gnu-build-system)
2945 (native-inputs `(("pkg-config" ,pkg-config)
2946 ("scons-python2" ,scons-python2)))
2947 (inputs `(("sdl" ,sdl)
2948 ("sdl-image" ,sdl-image)
2949 ("sdl-mixer" ,sdl-mixer)
2950 ("mesa" ,mesa)
2951 ("glu" ,glu)
2952 ("libpng" ,libpng)
2953 ("boost" ,boost)))
2954 (arguments
2955 '(#:make-flags (list (string-append "PREFIX=" %output))
2956 #:tests? #f ; no check target
2957 #:phases
2958 (modify-phases %standard-phases
2959 (delete 'configure)))) ; no configure script
2960 (home-page "https://pingus.seul.org/")
2961 (synopsis "Lemmings clone")
2962 (description
2963 "Pingus is a free Lemmings-like puzzle game in which the player takes
2964 command of a bunch of small animals and has to guide them through levels.
2965 Since the animals walk on their own, the player can only influence them by
2966 giving them commands, like build a bridge, dig a hole, or redirect all animals
2967 in the other direction. Multiple such commands are necessary to reach the
2968 level's exit. The game is presented in a 2D side view.")
2969 ;; Some source files are under bsd-3 and gpl2+ licenses.
2970 (license license:gpl3+)))
2971
2972 (define-public talkfilters
2973 (package
2974 (name "talkfilters")
2975 (version "2.3.8")
2976 (source
2977 (origin
2978 (method url-fetch)
2979 (uri (string-append "http://www.hyperrealm.com/talkfilters/"
2980 "talkfilters-" version ".tar.gz"))
2981 (sha256
2982 (base32 "19nc5vq4bnkjvhk8srqddzhcs93jyvpm9r6lzjzwc1mgf08yg0a6"))))
2983 (build-system gnu-build-system)
2984 (home-page "https://www.gnu.org/software/talkfilters/")
2985 (synopsis "Convert English text to humorous dialects")
2986 (description "The GNU Talk Filters are programs that convert English text
2987 into stereotyped or otherwise humorous dialects. The filters are provided as
2988 a C library, so they can easily be integrated into other programs.")
2989 (license license:gpl2+)))
2990
2991 (define-public taisei
2992 (package
2993 (name "taisei")
2994 (version "1.3.1")
2995 (source
2996 (origin
2997 (method url-fetch)
2998 (uri (string-append "https://github.com/taisei-project/"
2999 "taisei/releases/download/v" version
3000 "/taisei-v" version ".tar.xz"))
3001 (sha256
3002 (base32 "11f9mlqmzy1lszwcc1nsbar9q1hs4ml6pbm52hqfd4q0f4x3ln46"))))
3003 (build-system meson-build-system)
3004 (arguments
3005 `(#:build-type "release" ;comment out for bug-reporting (and cheats)
3006 #:configure-flags
3007 (list "-Dr_default=gles30"
3008 "-Dr_gles20=true"
3009 "-Dr_gles30=true"
3010 "-Dshader_transpiler=true")))
3011 (native-inputs
3012 `(("pkg-config" ,pkg-config)
3013 ("python" ,python)
3014 ("python-docutils" ,python-docutils)
3015 ("python-pygments" ,python-pygments)))
3016 (inputs
3017 `(("freetype" ,freetype)
3018 ("libpng" ,libpng)
3019 ("libwebp" ,libwebp)
3020 ("libzip" ,libzip)
3021 ("mesa" ,mesa)
3022 ("openssl" ,openssl)
3023 ("opusfile" ,opusfile)
3024 ("sdl2" ,sdl2)
3025 ("sdl2-mixer" ,sdl2-mixer)
3026 ("shaderc" ,shaderc)
3027 ("spirv-cross" ,spirv-cross)
3028 ("zlib" ,zlib)))
3029 (home-page "https://taisei-project.org/")
3030 (synopsis "Shoot'em up fangame and libre clone of Touhou Project")
3031 (description
3032 "The player controls a character (one of three: Good, Bad, and Dead),
3033 dodges the missiles (lots of it cover the screen, but the character's hitbox
3034 is very small), and shoot at the adversaries that keep appear on the screen.")
3035 (license (list ;;game
3036 license:expat
3037 ;;resources/00-taisei.pkgdir/bgm/
3038 ;;atlas/portraits/
3039 license:cc-by4.0
3040 ;;miscellaneous
3041 license:cc0
3042 license:public-domain))))
3043
3044 (define-public cmatrix
3045 (package
3046 (name "cmatrix")
3047 (version "2.0")
3048 (source
3049 (origin
3050 (method git-fetch)
3051 (uri (git-reference
3052 (url "https://github.com/abishekvashok/cmatrix")
3053 (commit (string-append "v" version))))
3054 (file-name (git-file-name name version))
3055 (sha256
3056 (base32
3057 "1h9jz4m4s5l8c3figaq46ja0km1gimrkfxm4dg7mf4s84icmasbm"))))
3058 (build-system gnu-build-system)
3059 (native-inputs
3060 `(("autoconf" ,autoconf)
3061 ("automake" ,automake)))
3062 (arguments
3063 '(#:phases
3064 (modify-phases %standard-phases
3065 (replace 'configure
3066 (lambda* (#:key outputs #:allow-other-keys)
3067 ;; This old ‘configure’ script doesn't support
3068 ;; variables passed as arguments.
3069 (let ((out (assoc-ref outputs "out")))
3070 (setenv "CONFIG_SHELL" (which "bash"))
3071 (invoke "./configure"
3072 (string-append "--prefix=" out))))))))
3073 (inputs `(("ncurses" ,ncurses)))
3074 (home-page "http://www.asty.org/cmatrix")
3075 (synopsis "Simulate the display from \"The Matrix\"")
3076 (description "CMatrix simulates the display from \"The Matrix\" and is
3077 based on the screensaver from the movie's website. It works with terminal
3078 settings up to 132x300 and can scroll lines all at the same rate or
3079 asynchronously and at a user-defined speed.")
3080 (license license:gpl2+)))
3081
3082 (define-public chess
3083 (package
3084 (name "chess")
3085 (version "6.2.7")
3086 (source
3087 (origin
3088 (method url-fetch)
3089 (uri (string-append "mirror://gnu/chess/gnuchess-" version
3090 ".tar.gz"))
3091 (sha256
3092 (base32
3093 "0ilq4bfl0lwyzf11q7n2skydjhalfn3bgxhrp5hjxs5bc5d6fdp5"))))
3094 (build-system gnu-build-system)
3095 (home-page "https://www.gnu.org/software/chess/")
3096 (synopsis "Full chess implementation")
3097 (description "GNU Chess is a chess engine. It allows you to compete
3098 against the computer in a game of chess, either through the default terminal
3099 interface or via an external visual interface such as GNU XBoard.")
3100 (properties '((upstream-name . "gnuchess")
3101 (ftp-directory . "/chess")))
3102 (license license:gpl3+)))
3103
3104 (define-public freedink-engine
3105 (package
3106 (name "freedink-engine")
3107 (version "109.6")
3108 (source (origin
3109 (method url-fetch)
3110 (uri (string-append "mirror://gnu/freedink/freedink-" version
3111 ".tar.gz"))
3112 (patches (search-patches "freedink-engine-fix-sdl-hints.patch"))
3113 (sha256
3114 (base32
3115 "00hhk1bjdrc1np2qz44sa5n1mb62qzwxbvsnws3vpms6iyn3a2sy"))))
3116 (build-system gnu-build-system)
3117 (arguments
3118 `(#:configure-flags '("--disable-embedded-resources")
3119 #:phases
3120 (modify-phases %standard-phases
3121 (add-after 'unpack 'disable-graphical-tests
3122 (lambda _
3123 ;; These tests require a graphical interface.
3124 (substitute* "src/Makefile.am"
3125 (("test_gfx_fonts TestIOGfxDisplay") ""))
3126 #t))
3127 (add-before 'bootstrap 'autoreconf
3128 (lambda _
3129 ;; automake is out of date in the source
3130 ;; autoreconf updates the automake scripts
3131 (invoke "autoreconf")
3132 ;; Build fails when autom4te.cache exists.
3133 (delete-file-recursively "autom4te.cache")
3134 #t))
3135 (add-after 'install 'delete-freedinkedit-desktop
3136 (lambda* (#:key outputs #:allow-other-keys)
3137 (let ((out (assoc-ref outputs "out")))
3138 ;; freedinkedit does not know where to find freedink data
3139 ;; freedink data is read-only, so it cannot be edited anyway.
3140 ;; TODO: fix freedink.desktop
3141 (delete-file-recursively (string-append
3142 out "/share/applications"))
3143 #t))))))
3144 (native-inputs `(("autoconf" ,autoconf)
3145 ("automake" ,automake)
3146 ("cxxtest" ,cxxtest)
3147 ("gettext" ,gettext-minimal)
3148 ("help2man" ,help2man)
3149 ("pkg-config" ,pkg-config)))
3150 (inputs `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer
3151 sdl2-ttf sdl2-gfx)))
3152 ("fontconfig" ,fontconfig)
3153 ("glm" ,glm)))
3154 (properties '((ftp-directory . "/freedink")
3155 (upstream-name . "freedink")))
3156 (home-page "https://www.gnu.org/software/freedink/")
3157 (synopsis "Twisted adventures of young pig farmer Dink Smallwood")
3158 (description
3159 "GNU FreeDink is a free and portable re-implementation of the engine
3160 for the role-playing game Dink Smallwood. It supports not only the original
3161 game data files but it also supports user-produced game mods or \"D-Mods\".
3162 To that extent, it also includes a front-end for managing all of your D-Mods.")
3163 (license license:gpl3+)))
3164
3165 (define-public freedink-data
3166 (package
3167 (name "freedink-data")
3168 (version "1.08.20190120")
3169 (source (origin
3170 (method url-fetch)
3171 (uri (string-append "mirror://gnu/freedink/freedink-data-"
3172 version ".tar.gz"))
3173 (sha256
3174 (base32
3175 "17gvryadlxk172mblbsil7hina1z5wahwaxnr6g3mdq57dvl8pvi"))))
3176 (build-system gnu-build-system)
3177 (arguments
3178 `(#:phases
3179 (modify-phases %standard-phases
3180 (delete 'configure) ; no configure script
3181 (delete 'check)) ; no tests
3182 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
3183 (properties '((ftp-directory . "/freedink")))
3184 (home-page "https://www.gnu.org/software/freedink/")
3185 (synopsis "Game data for GNU Freedink")
3186 (description
3187 "This package contains the game data of GNU Freedink.")
3188 (license license:gpl3+)))
3189
3190 (define-public freedink-dfarc
3191 (package
3192 (name "freedink-dfarc")
3193 (version "3.14")
3194 (source (origin
3195 (method url-fetch)
3196 (uri (string-append "mirror://gnu/freedink/dfarc-"
3197 version ".tar.gz"))
3198 (sha256
3199 (base32
3200 "1yp8n3w426xnlp10xk06vfi2y3k9xrcfyck7s7qs1v0ys7n284d5"))))
3201 (build-system gnu-build-system)
3202 (native-inputs
3203 `(("intltool" ,intltool)))
3204 (inputs
3205 `(("bzip2" ,bzip2)
3206 ("wxwidgets" ,wxwidgets)))
3207 (properties '((ftp-directory . "/freedink")
3208 (upstream-name . "dfarc")))
3209 (home-page "https://www.gnu.org/software/freedink/")
3210 (synopsis "Front-end for managing and playing Dink Modules")
3211 (description "DFArc makes it easy to play and manage the GNU FreeDink game
3212 and its numerous D-Mods.")
3213 (license license:gpl3+)))
3214
3215 (define-public freedink
3216 ;; This is a wrapper that tells the engine where to find the data.
3217 (package (inherit freedink-engine)
3218 (name "freedink")
3219 (build-system trivial-build-system)
3220 (arguments
3221 '(#:builder (begin
3222 (use-modules (guix build utils))
3223
3224 (let* ((output (assoc-ref %outputs "out"))
3225 (bin (string-append output "/bin"))
3226 (executable (string-append bin "/freedink")))
3227 (mkdir-p bin)
3228 (call-with-output-file executable
3229 (lambda (port)
3230 (format port "#!~a/bin/sh
3231 exec ~a/bin/freedink -refdir ~a/share/dink\n"
3232 (assoc-ref %build-inputs "bash")
3233 (assoc-ref %build-inputs "engine")
3234 (assoc-ref %build-inputs "data"))
3235 (chmod port #o777)))
3236 #t))
3237 #:modules ((guix build utils))))
3238 (inputs `(("engine" ,freedink-engine)
3239 ("data" ,freedink-data)
3240 ("bash" ,bash)))
3241 (native-inputs '())))
3242
3243 (define-public xboard
3244 (package
3245 (name "xboard")
3246 (version "4.9.1")
3247 (source
3248 (origin
3249 (method url-fetch)
3250 (uri (string-append "mirror://gnu/xboard/xboard-" version
3251 ".tar.gz"))
3252 (sha256
3253 (base32
3254 "1mkh36xnnacnz9r00b5f9ld9309k32jv6mcavklbdnca8bl56bib"))))
3255 (build-system gnu-build-system)
3256 (inputs
3257 `(("gtk+" ,gtk+-2)
3258 ("librsvg" ,librsvg)))
3259 (native-inputs
3260 `(("texinfo" ,texinfo)
3261 ("pkg-config" ,pkg-config)))
3262 (home-page "https://www.gnu.org/software/xboard/")
3263 (synopsis "Graphical user interface for chess programs")
3264 (description "GNU XBoard is a graphical board for all varieties of chess,
3265 including international chess, xiangqi (Chinese chess), shogi (Japanese chess)
3266 and Makruk. Several lesser-known variants are also supported. It presents a
3267 fully interactive graphical interface and it can load and save games in the
3268 Portable Game Notation.")
3269 (license license:gpl3+)))
3270
3271 (define-public gtypist
3272 (package
3273 (name "gtypist")
3274 (version "2.9.5")
3275 (source (origin
3276 (method url-fetch)
3277 (uri (string-append "mirror://gnu/gtypist/gtypist-"
3278 version ".tar.xz"))
3279 (sha256
3280 (base32
3281 "0xzrkkmj0b1dw3yr0m9hml2y634cc4h61im6zwcq57s7285z8fn1"))
3282 (modules '((guix build utils)))
3283 (snippet
3284 ;; We do not provide `ncurses.h' within an `ncursesw'
3285 ;; sub-directory, so patch the source accordingly. See
3286 ;; <http://bugs.gnu.org/19018>.
3287 '(begin
3288 (for-each (lambda (file)
3289 (substitute* file
3290 (("ncursesw/ncurses.h")
3291 "ncurses.h")))
3292 (find-files "." "configure$|\\.c$"))
3293 #t))))
3294 (build-system gnu-build-system)
3295 (inputs `(("ncurses" ,ncurses)
3296 ("perl" ,perl)))
3297 (home-page "https://www.gnu.org/software/gtypist/")
3298 (synopsis "Typing tutor")
3299 (description
3300 "GNU Typist is a universal typing tutor. It can be used to learn and
3301 practice touch-typing. Several tutorials are included; in addition to
3302 tutorials for the standard QWERTY layout, there are also tutorials for the
3303 alternative layouts Dvorak and Colemak, as well as for the numpad. Tutorials
3304 are primarily in English, however some in other languages are provided.")
3305 (license license:gpl3+)))
3306
3307 (define-public irrlicht
3308 (package
3309 (name "irrlicht")
3310 (version "1.8.4")
3311 (source (origin
3312 (method url-fetch)
3313 (uri (string-append
3314 "mirror://sourceforge/irrlicht/Irrlicht%20SDK/"
3315 (version-major+minor version)
3316 "/" version "/irrlicht-" version ".zip"))
3317 (sha256
3318 (base32
3319 "0cz4z4dwrv5ypl19ll67wl6jjpy5k6ly4vr042w4br88qq5jhazl"))
3320 (patches (search-patches "irrlicht-use-system-libs.patch"))
3321 (modules '((guix build utils)))
3322 (snippet
3323 '(begin
3324 (for-each delete-file-recursively
3325 '("bin" ; bundled compiled Windows binaries"
3326 "source/Irrlicht/MacOSX"
3327 "source/Irrlicht/bzip2"
3328 "source/Irrlicht/jpeglib"
3329 "source/Irrlicht/libpng"
3330 "source/Irrlicht/lzma"
3331 "source/Irrlicht/zlib"))
3332 (delete-file "source/Irrlicht/glext.h")
3333 (delete-file "source/Irrlicht/glxext.h")
3334 (delete-file "source/Irrlicht/wglext.h")
3335 #t))))
3336 (build-system gnu-build-system)
3337 (arguments
3338 `(#:phases
3339 (modify-phases %standard-phases
3340 (add-after 'unpack 'chdir-to-source
3341 (lambda _
3342 ;; The actual source is buried a few directories deep.
3343 (chdir "source/Irrlicht/")
3344 #t))
3345 (add-after 'chdir-to-source 'fix-build-env
3346 (lambda* (#:key outputs #:allow-other-keys)
3347 (let ((out (assoc-ref outputs "out")))
3348 (substitute* "Makefile"
3349 (("INSTALL_DIR = /usr/local/lib")
3350 (string-append "INSTALL_DIR = " out "/lib"))
3351 ;; Add '-fpermissive' to the CXXFLAGS
3352 (("-Wall") "-Wall -fpermissive")) ; CImageLoaderJPG.cpp
3353 ;; The Makefile assumes these directories exist.
3354 (mkdir-p (string-append out "/lib"))
3355 (mkdir-p (string-append out "/include")))))
3356 (delete 'configure)) ; no configure script
3357 #:tests? #f ; no check target
3358 #:make-flags '("CC=gcc" "sharedlib")))
3359 (inputs
3360 `(("bzip2" ,bzip2)
3361 ("libjpeg" ,libjpeg-turbo)
3362 ("libpng" ,libpng)
3363 ("libx11" ,libx11)
3364 ("libxxf86vm" ,libxxf86vm)
3365 ("mesa" ,mesa)))
3366 (synopsis "3D game engine written in C++")
3367 (description
3368 "The Irrlicht Engine is a high performance realtime 3D engine written in
3369 C++. Features include an OpenGL renderer, extensible materials, scene graph
3370 management, character animation, particle and other special effects, support
3371 for common mesh file formats, and collision detection.")
3372 (home-page "http://irrlicht.sourceforge.net/")
3373 (license license:zlib)))
3374
3375 (define-public mars
3376 ;; The latest release on SourceForge relies on an unreleased version of SFML
3377 ;; with a different API, so we take the latest version from the official
3378 ;; repository on Github.
3379 (let ((commit "c855d044094a1d92317e38935d81ba938946132e")
3380 (revision "1"))
3381 (package
3382 (name "mars")
3383 (version (string-append "0.7.5." revision "." (string-take commit 7) ))
3384 (source (origin
3385 (method git-fetch)
3386 (uri (git-reference
3387 (url "https://github.com/thelaui/M.A.R.S.")
3388 (commit commit)))
3389 (file-name (git-file-name name version))
3390 (sha256
3391 (base32
3392 "1r4c5gap1z2zsv4yjd34qriqkxaq4lb4rykapyzkkdf4g36lc3nh"))
3393 (patches (search-patches "mars-sfml-2.3.patch"
3394 "mars-install.patch"))))
3395 (build-system cmake-build-system)
3396 (arguments
3397 `(#:tests? #f ; There are no tests
3398 #:phases
3399 (modify-phases %standard-phases
3400 (add-after 'unpack 'fix-install-path
3401 (lambda _
3402 (substitute* "src/CMakeLists.txt"
3403 (("\\$\\{CMAKE_INSTALL_PREFIX\\}/games")
3404 "${CMAKE_INSTALL_PREFIX}/bin"))
3405 #t))
3406 (add-after 'unpack 'fix-data-path
3407 (lambda* (#:key outputs #:allow-other-keys)
3408 (substitute* "src/System/settings.cpp"
3409 (("C_dataPath = \"./data/\";")
3410 (string-append "C_dataPath = \""
3411 (assoc-ref outputs "out")
3412 "/share/games/marsshooter/\";")))
3413 #t)))))
3414 (inputs
3415 `(("mesa" ,mesa)
3416 ("fribidi" ,fribidi)
3417 ("taglib" ,taglib)
3418 ("sfml" ,sfml)))
3419 (home-page "http://mars-game.sourceforge.net/")
3420 (synopsis "2D space shooter")
3421 (description
3422 "M.A.R.S. is a 2D space shooter with pretty visual effects and
3423 attractive physics. Players can battle each other or computer controlled
3424 enemies in different game modes such as space ball, death match, team death
3425 match, cannon keep, and grave-itation pit.")
3426 (license license:gpl3+))))
3427
3428 (define-public minetest
3429 (package
3430 (name "minetest")
3431 (version "5.3.0")
3432 (source (origin
3433 (method git-fetch)
3434 (uri (git-reference
3435 (url "https://github.com/minetest/minetest")
3436 (commit version)))
3437 (file-name (git-file-name name version))
3438 (sha256
3439 (base32
3440 "03ga3j3cg38w4lg4d4qxasmnjdl8n3lbizidrinanvyfdyvznyh6"))
3441 (modules '((guix build utils)))
3442 (snippet
3443 '(begin
3444 ;; Delete bundled libraries.
3445 (delete-file-recursively "lib")
3446 #t))))
3447 (build-system cmake-build-system)
3448 (arguments
3449 '(#:configure-flags
3450 (list "-DRUN_IN_PLACE=0"
3451 "-DENABLE_FREETYPE=1"
3452 "-DENABLE_GETTEXT=1"
3453 "-DENABLE_SYSTEM_JSONCPP=TRUE"
3454 (string-append "-DIRRLICHT_INCLUDE_DIR="
3455 (assoc-ref %build-inputs "irrlicht")
3456 "/include/irrlicht")
3457 (string-append "-DCURL_INCLUDE_DIR="
3458 (assoc-ref %build-inputs "curl")
3459 "/include/curl"))
3460 #:tests? #f)) ;no check target
3461 (native-search-paths
3462 (list (search-path-specification
3463 (variable "MINETEST_SUBGAME_PATH")
3464 (files '("share/minetest/games")))))
3465 (native-inputs
3466 `(("pkg-config" ,pkg-config)))
3467 (inputs
3468 `(("curl" ,curl)
3469 ("freetype" ,freetype)
3470 ("gettext" ,gettext-minimal)
3471 ("gmp" ,gmp)
3472 ("irrlicht" ,irrlicht)
3473 ("jsoncpp" ,jsoncpp)
3474 ("libjpeg" ,libjpeg-turbo)
3475 ("libpng" ,libpng)
3476 ("libogg" ,libogg)
3477 ("libvorbis" ,libvorbis)
3478 ("libxxf86vm" ,libxxf86vm)
3479 ("luajit" ,luajit)
3480 ("mesa" ,mesa)
3481 ("ncurses" ,ncurses)
3482 ("openal" ,openal)
3483 ("sqlite" ,sqlite)))
3484 (propagated-inputs
3485 `(("minetest-data" ,minetest-data)))
3486 (synopsis "Infinite-world block sandbox game")
3487 (description
3488 "Minetest is a sandbox construction game. Players can create and destroy
3489 various types of blocks in a three-dimensional open world. This allows
3490 forming structures in every possible creation, on multiplayer servers or as a
3491 single player. Mods and texture packs allow players to personalize the game
3492 in different ways.")
3493 (home-page "https://www.minetest.net/")
3494 (license license:lgpl2.1+)))
3495
3496 (define minetest-data
3497 (package
3498 (name "minetest-data")
3499 (version (package-version minetest))
3500 (source (origin
3501 (method git-fetch)
3502 (uri (git-reference
3503 (url "https://github.com/minetest/minetest_game")
3504 (commit version)))
3505 (file-name (git-file-name name version))
3506 (sha256
3507 (base32
3508 "1liciwlh013z5h08ib0psjbwn5wkvlr937ir7kslfk4vly984cjx"))))
3509 (build-system trivial-build-system)
3510 (native-inputs
3511 `(("source" ,source)))
3512 (arguments
3513 `(#:modules ((guix build utils))
3514 #:builder (begin
3515 (use-modules (guix build utils))
3516 (let ((install-dir (string-append
3517 %output
3518 "/share/minetest/games/minetest_game")))
3519 (mkdir-p install-dir)
3520 (copy-recursively
3521 (assoc-ref %build-inputs "source")
3522 install-dir)
3523 #t))))
3524 (synopsis "Main game data for the Minetest game engine")
3525 (description
3526 "Game data for the Minetest infinite-world block sandbox game.")
3527 (home-page "https://www.minetest.net/")
3528 (license license:lgpl2.1+)))
3529
3530 (define-public minetest-mineclone
3531 (package
3532 (name "minetest-mineclone")
3533 (version "0.66.2")
3534 (source (origin
3535 (method git-fetch)
3536 (uri (git-reference
3537 (url "https://git.minetest.land/Wuzzy/MineClone2")
3538 (commit version)))
3539 (file-name (git-file-name name version))
3540 (sha256
3541 (base32
3542 "0miszzlzplpvaj0j1yii9867ydr42wsaqa9g6grxdrci75p05g00"))))
3543 (build-system copy-build-system)
3544 (arguments
3545 `(#:install-plan
3546 '(("." "share/minetest/games/mineclone"))))
3547 (synopsis "Minecraft clone based on Minetest engine")
3548 (description
3549 "MineClone is a Minetest subgame, that aims to recreate Minecraft as
3550 closely as the engine allows.")
3551 (home-page "https://content.minetest.net/packages/Wuzzy/mineclone2/")
3552 (license license:gpl3+)))
3553
3554 (define glkterm
3555 (package
3556 (name "glkterm")
3557 (version "1.0.4")
3558 (source
3559 (origin
3560 (method url-fetch)
3561 (uri (string-append "http://www.ifarchive.org/if-archive/programming/"
3562 "glk/implementations/glkterm-104.tar.gz"))
3563 (sha256
3564 (base32
3565 "0zlj9nlnkdlvgbiliczinirqygiq8ikg5hzh5vgcmnpg9pvnwga7"))))
3566 (build-system gnu-build-system)
3567 (propagated-inputs `(("ncurses" ,ncurses))) ; required by Make.glkterm
3568 (arguments
3569 '(#:tests? #f ; no check target
3570 #:phases
3571 (modify-phases %standard-phases
3572 (replace 'install
3573 (lambda* (#:key outputs #:allow-other-keys)
3574 (let* ((out (assoc-ref outputs "out"))
3575 (inc (string-append out "/include"))
3576 (lib (string-append out "/lib")))
3577 (for-each
3578 (lambda (file)
3579 (install-file file inc))
3580 '("glk.h" "glkstart.h" "gi_blorb.h" "gi_dispa.h" "Make.glkterm"))
3581 (install-file "libglkterm.a" lib))
3582 #t))
3583 (delete 'configure)))) ; no configure script
3584 (home-page "http://www.eblong.com/zarf/glk/")
3585 (synopsis "Curses Implementation of the Glk API")
3586 (description
3587 "Glk defines a portable API for applications with text UIs. It was
3588 primarily designed for interactive fiction, but it should be suitable for many
3589 interactive text utilities, particularly those based on a command line.
3590 This is an implementation of the Glk library which runs in a terminal window,
3591 using the @code{curses.h} library for screen control.")
3592 (license (license:fsf-free "file://README"))))
3593
3594 (define-public glulxe
3595 (package
3596 (name "glulxe")
3597 (version "0.5.4")
3598 (source
3599 (origin
3600 (method url-fetch)
3601 (uri (string-append "http://www.ifarchive.org/if-archive/programming/"
3602 "glulx/interpreters/glulxe/glulxe-054.tar.gz"))
3603 (sha256
3604 (base32
3605 "0vipydg6ra90yf9b3ipgppwxyb2xdhcxwvirgjy0v20wlf56zhhz"))))
3606 (build-system gnu-build-system)
3607 (inputs `(("glk" ,glkterm)))
3608 (arguments
3609 '(#:tests? #f ; no check target
3610 #:make-flags
3611 (let* ((glk (assoc-ref %build-inputs "glk")))
3612 (list (string-append "GLKINCLUDEDIR=" glk "/include")
3613 (string-append "GLKLIBDIR=" glk "/lib")
3614 (string-append "GLKMAKEFILE=" "Make.glkterm")))
3615 #:phases
3616 (modify-phases %standard-phases
3617 (replace 'install
3618 (lambda* (#:key outputs #:allow-other-keys)
3619 (let* ((out (assoc-ref outputs "out"))
3620 (bin (string-append out "/bin")))
3621 (install-file "glulxe" bin))
3622 #t))
3623 (delete 'configure)))) ; no configure script
3624 (home-page "https://www.eblong.com/zarf/glulx/")
3625 (synopsis "Interpreter for Glulx VM")
3626 (description
3627 "Glulx is a 32-bit portable virtual machine intended for writing and
3628 playing interactive fiction. It was designed by Andrew Plotkin to relieve
3629 some of the restrictions in the venerable Z-machine format. This is the
3630 reference interpreter, using the Glk API.")
3631 (license license:expat)))
3632
3633 (define-public fifechan
3634 (package
3635 (name "fifechan")
3636 (version "0.1.5")
3637 (source (origin
3638 (method url-fetch)
3639 (uri (string-append "https://codeload.github.com/fifengine/"
3640 "fifechan/tar.gz/" version))
3641 (file-name (string-append name "-" version ".tar.gz"))
3642 (sha256
3643 (base32
3644 "0wxs9vz5x9y8chghd8vp7vfk089lfb0qnzggi17zrqkrngs5zgi9"))))
3645 (build-system cmake-build-system)
3646 (inputs
3647 `(("sdl2" ,sdl2)
3648 ("sdl2-image" ,sdl2-image)
3649 ("mesa" ,mesa)))
3650 (arguments
3651 '(#:tests? #f)) ; No included tests
3652 (home-page "https://fifengine.github.io/fifechan/")
3653 (synopsis "Cross platform GUI library specifically for games")
3654 (description
3655 "Fifechan is a lightweight cross platform GUI library written in C++
3656 specifically designed for games. It has a built in set of extendable GUI
3657 Widgets, and allows users to create more.")
3658 (license license:lgpl2.1+)))
3659
3660 (define-public fifengine
3661 (package
3662 (name "fifengine")
3663 (version "0.4.2")
3664 (source (origin
3665 (method url-fetch)
3666 (uri (string-append "https://codeload.github.com/fifengine/"
3667 "fifengine/tar.gz/" version))
3668 (file-name (string-append name "-" version ".tar.gz"))
3669 (patches (search-patches "fifengine-swig-compat.patch"))
3670 (sha256
3671 (base32
3672 "1y4grw25cq5iqlg05rnbyxw1njl11ypidnlsm3qy4sm3xxdvb0p8"))))
3673 (build-system cmake-build-system)
3674 (arguments
3675 `(#:tests? #f ; TODO The test running fails to run some tests.
3676 #:modules ((srfi srfi-1)
3677 (guix build cmake-build-system)
3678 (guix build utils))
3679 #:configure-flags
3680 (list
3681 (string-append "-DOPENALSOFT_INCLUDE_DIR="
3682 (assoc-ref %build-inputs "openal")
3683 "/include/AL")
3684 (string-append "-DPYTHON_SITE_PACKAGES="
3685 (assoc-ref %outputs "out")
3686 "/lib/python"
3687 ,(version-major+minor (package-version python))
3688 "/site-packages"))
3689 #:phases
3690 (modify-phases %standard-phases
3691 (add-after 'unpack 'patch-run_tests.py
3692 (lambda _
3693 ;; Patch the test runner to exit with a status of 1 if any test
3694 ;; fails, to allow detecting failures.
3695 (substitute* "run_tests.py"
3696 (("ERROR\\. One or more tests failed!'\\)")
3697 "ERROR. One or more tests failed!')
3698 \t\texit(1)"))
3699 #t))
3700 ;; Run tests after installation so that we can make use of the built
3701 ;; python modules.
3702 (delete 'check)
3703 (add-after 'install 'check
3704 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3705 (define python-version
3706 (let* ((version (last (string-split
3707 (assoc-ref inputs "python")
3708 #\-)))
3709 (components (string-split version #\.))
3710 (major+minor (take components 2)))
3711 (string-join major+minor ".")))
3712
3713 (when tests?
3714 ;; Set PYTHONPATH so that python finds the installed modules.
3715 (setenv "PYTHONPATH"
3716 (string-append (getenv "PYTHONPATH") ":"
3717 (assoc-ref outputs "out")
3718 "/lib/python"
3719 python-version
3720 "/site-packages"))
3721 ;; The tests require an X server.
3722 (system "Xvfb :1 &")
3723 (setenv "DISPLAY" ":1")
3724 (setenv "XDG_RUNTIME_DIR" "/tmp")
3725 ;; Run tests
3726 (chdir ,(string-append "../" name "-" version))
3727 (invoke "python3" "run_tests.py" "-a"))
3728 #t)))))
3729 (inputs
3730 `(("sdl2" ,sdl2)
3731 ("sdl2-image" ,sdl2-image)
3732 ("sdl2-ttf" ,sdl2-ttf)
3733 ("tinyxml" ,tinyxml)
3734 ("openal" ,openal)
3735 ("libogg" ,libogg)
3736 ("glew" ,glew)
3737 ("libvorbis" ,libvorbis)
3738 ("boost" ,boost)
3739 ("fifechan" ,fifechan)
3740 ("swig" ,swig)
3741 ("python" ,python)))
3742 (native-inputs
3743 `(("python" ,python)
3744 ("swig" ,swig)
3745 ("xvfb" ,xorg-server)))
3746 (propagated-inputs
3747 `(("python-future" ,python-future)))
3748 (home-page "https://www.fifengine.net/")
3749 (synopsis "FIFE is a multi-platform isometric game engine written in C++")
3750 (description
3751 "@acronym{FIFE, Flexible Isometric Free Engine} is a multi-platform
3752 isometric game engine. Python bindings are included allowing users to create
3753 games using Python as well as C++.")
3754 (license license:lgpl2.1+)))
3755
3756 (define-public fizmo
3757 (package
3758 (name "fizmo")
3759 (version "0.8.5")
3760 (source (origin
3761 (method url-fetch)
3762 (uri (string-append "https://fizmo.spellbreaker.org/source/"
3763 "fizmo-" version ".tar.gz"))
3764 (sha256
3765 (base32
3766 "1amyc4n41jf08kxmdgkk30bzzx54miaxa97w28f417qwn8lrl98w"))))
3767 (build-system gnu-build-system)
3768 (arguments
3769 '(#:configure-flags
3770 (let ((libjpeg (assoc-ref %build-inputs "libjpeg"))
3771 (ncurses (assoc-ref %build-inputs "ncurses")))
3772 (list (string-append "--with-jpeg-includedir=" libjpeg "/include")))))
3773 (native-inputs
3774 `(("pkg-config" ,pkg-config)))
3775 (inputs
3776 `(("freetype" ,freetype)
3777 ("libjpeg" ,libjpeg-turbo)
3778 ("libpng" ,libpng)
3779 ("libsndfile" ,libsndfile)
3780 ("libxml2" ,libxml2)
3781 ("ncurses" ,ncurses)
3782 ("sdl2" ,sdl2)))
3783 (home-page "https://fizmo.spellbreaker.org/")
3784 (synopsis "Z-machine interpreter")
3785 (description
3786 "Fizmo is a console-based Z-machine interpreter. It is used to play
3787 interactive fiction, also known as text adventures, which were implemented
3788 either by Infocom or created using the Inform compiler.")
3789 (license license:bsd-3)))
3790
3791 (define-public gnugo
3792 (package
3793 (name "gnugo")
3794 (version "3.8")
3795 (source (origin
3796 (method url-fetch)
3797 (uri (string-append "mirror://gnu/gnugo/gnugo-" version
3798 ".tar.gz"))
3799 (sha256
3800 (base32
3801 "0wkahvqpzq6lzl5r49a4sd4p52frdmphnqsfdv7gdp24bykdfs6s"))))
3802 (build-system gnu-build-system)
3803 (inputs `(("readline" ,readline)))
3804 (synopsis "Play the game of Go")
3805 (description
3806 "GNU Go is a program that plays the game of Go, in which players
3807 place stones on a grid to form territory or capture other stones. While
3808 it can be played directly from the terminal, rendered in ASCII characters,
3809 it is also possible to play GNU Go with 3rd party graphical interfaces or
3810 even in Emacs. It supports the standard game storage format (SGF, Smart
3811 Game Format) and inter-process communication format (GMP, Go Modem
3812 Protocol).")
3813 (home-page "https://www.gnu.org/software/gnugo/")
3814 (license license:gpl3+)))
3815
3816 (define-public extremetuxracer
3817 (package
3818 (name "extremetuxracer")
3819 (version "0.8.0")
3820 (source (origin
3821 (method url-fetch)
3822 (uri (string-append
3823 "mirror://sourceforge/extremetuxracer/releases/"
3824 version "/etr-" version ".tar.xz"))
3825 (sha256
3826 (base32
3827 "05ysaxvsgps9fxc421kdifsxmc1sn6n79cjaa0k0i3fs9qqrja2b"))))
3828 (build-system gnu-build-system)
3829 (native-inputs
3830 `(("pkg-config" ,pkg-config)))
3831 (inputs
3832 `(("glu" ,glu)
3833 ("sfml" ,sfml)))
3834 (synopsis "High-speed arctic racing game based on Tux Racer")
3835 ;; Snarfed straight from Debian.
3836 (description "Extreme Tux Racer, or etracer as it is called for short, is
3837 a simple OpenGL racing game featuring Tux, the Linux mascot. The goal of the
3838 game is to slide down a snow- and ice-covered mountain as quickly as possible,
3839 avoiding the trees and rocks that will slow you down.
3840
3841 Collect herrings and other goodies while sliding down the hill, but avoid fish
3842 bones.
3843
3844 This game is based on the GPL version of the famous game TuxRacer.")
3845 (home-page "https://sourceforge.net/projects/extremetuxracer/")
3846 (license license:gpl2+)))
3847
3848 (define-public supertuxkart
3849 (package
3850 (name "supertuxkart")
3851 (version "1.2")
3852 (source
3853 (origin
3854 (method url-fetch)
3855 (uri (string-append "mirror://sourceforge/supertuxkart/SuperTuxKart/"
3856 version "/SuperTuxKart-" version "-src.tar.xz"))
3857 (sha256
3858 (base32
3859 "0dvx56hmy6wdhl7m9dw8zc1n3jqfp05gnxl6zs1rbfdyzl5dybh5"))
3860 (modules '((guix build utils)))
3861 (snippet
3862 ;; Delete bundled library sources
3863 '(begin
3864 ;; Supertuxkart uses modified versions of the Irrlicht engine
3865 ;; and the bullet library. The developers gave an explanation
3866 ;; here: http://forum.freegamedev.net/viewtopic.php?f=17&t=3906
3867 ;; FIXME: try to unbundle angelscript, libmcpp and libraqm
3868 (for-each delete-file-recursively
3869 '("lib/glew"
3870 "lib/wiiuse"
3871 "lib/enet"))
3872 #t))))
3873 (build-system cmake-build-system)
3874 (arguments
3875 `(#:tests? #f ; no check target
3876 #:configure-flags
3877 (list "-DUSE_WIIUSE=0"
3878 "-DUSE_SYSTEM_GLEW=TRUE"
3879 "-DUSE_SYSTEM_ENET=TRUE"
3880 ;; In order to use the system ENet library, IPv6 support (added in
3881 ;; SuperTuxKart version 1.1) must be disabled.
3882 "-DUSE_IPV6=FALSE"
3883 ;; FIXME: needs libopenglrecorder
3884 "-DBUILD_RECORDER=0")))
3885 (inputs
3886 `(("curl" ,curl)
3887 ("freetype" ,freetype)
3888 ("fribidi" ,fribidi)
3889 ("glew" ,glew)
3890 ("harfbuzz" ,harfbuzz)
3891 ("libvorbis" ,libvorbis)
3892 ("libx11" ,libx11)
3893 ("libxrandr" ,libxrandr)
3894 ("mesa" ,mesa)
3895 ("openal" ,openal)
3896 ("sdl2" ,sdl2)
3897 ("zlib" ,zlib)
3898 ;; The following input is needed to build the bundled and modified
3899 ;; version of irrlicht.
3900 ("enet" ,enet)
3901 ("libjpeg" ,libjpeg-turbo)
3902 ("openssl" ,openssl)))
3903 (native-inputs
3904 `(("pkg-config" ,pkg-config)))
3905 (home-page "https://supertuxkart.net/Main_Page")
3906 (synopsis "3D kart racing game")
3907 (description "SuperTuxKart is a 3D kart racing game, with a focus on
3908 having fun over realism. You can play with up to 4 friends on one PC, racing
3909 against each other or just trying to beat the computer; single-player mode is
3910 also available.")
3911 (license license:gpl3+)))
3912
3913 (define-public unknown-horizons
3914 (package
3915 (name "unknown-horizons")
3916 (version "2019.1")
3917 (source (origin
3918 (method url-fetch)
3919 (uri (string-append "https://codeload.github.com/unknown-horizons/"
3920 "unknown-horizons/tar.gz/" version))
3921 (file-name (string-append name "-" version ".tar.gz"))
3922 (sha256
3923 (base32
3924 "1n747p7h0qp48szgp262swg0xh8kxy1bw8ag1qczs4i26hyzs5x4"))
3925 (patches (search-patches "unknown-horizons-python-3.8-distro.patch"))))
3926 (build-system python-build-system)
3927 (arguments
3928 '(#:phases
3929 (modify-phases %standard-phases
3930 (add-before 'build 'set-HOME
3931 (lambda _
3932 (setenv "HOME" "/tmp")
3933 #t))
3934 (add-after 'build 'build-extra
3935 (lambda _
3936 (invoke "python3" "./setup.py" "build_i18n")
3937 (invoke "python3" "horizons/engine/generate_atlases.py" "2048")
3938 #t))
3939 (add-after 'install 'patch
3940 (lambda* (#:key outputs #:allow-other-keys)
3941 (let ((out (assoc-ref outputs "out")))
3942 (substitute* (string-append out "/bin/unknown-horizons")
3943 (("os\\.chdir\\(get\\_content\\_dir\\_parent_path\\(\\)\\)")
3944 (string-append "os.chdir(\""
3945 (assoc-ref outputs "out")
3946 "/share/unknown-horizons\")"))))
3947 #t))
3948 (add-before 'check 'fix-tests-with-pytest>=4
3949 (lambda _
3950 (substitute* "tests/conftest.py"
3951 (("pytest_namespace")
3952 "pytest_configure")
3953 (("get_marker")
3954 "get_closest_marker"))
3955 #t))
3956 ;; TODO: Run GUI tests as well
3957 (replace 'check
3958 (lambda _
3959 (substitute* "horizons/constants.py"
3960 (("IS_DEV_VERSION = False")
3961 "IS_DEV_VERSION = True"))
3962 (invoke "pytest" "tests")
3963 (substitute* "horizons/constants.py"
3964 (("IS_DEV_VERSION = True")
3965 "IS_DEV_VERSION = False"))
3966 #t)))))
3967 (inputs
3968 `(("fifengine" ,fifengine)
3969 ("python:tk" ,python "tk")
3970 ("python-pillow" ,python-pillow)
3971 ("python-pyyaml" ,python-pyyaml)))
3972 (native-inputs
3973 `(("intltool" ,intltool)
3974 ("python-distro" ,python-distro)
3975
3976 ;; Required for tests
3977 ("python-greenlet" ,python-greenlet)
3978 ("python-polib" ,python-polib)
3979 ("python-pytest" ,python-pytest)
3980 ("python-pytest-mock" ,python-pytest-mock)))
3981 (home-page "http://unknown-horizons.org/")
3982 (synopsis "Isometric realtime strategy, economy and city building simulation")
3983 (description
3984 "Unknown Horizons is a 2D realtime strategy simulation with an emphasis
3985 on economy and city building. Expand your small settlement to a strong and
3986 wealthy colony, collect taxes and supply your inhabitants with valuable
3987 goods. Increase your power with a well balanced economy and with strategic
3988 trade and diplomacy.")
3989 (license (list
3990 license:gpl2+ ; Covers code
3991 license:expat ; tests/dummy.py, ext/polib.py
3992 license:cc-by-sa3.0 ; Covers some media content
3993 license:cc-by3.0 ; Covers some media content
3994 license:bsd-3)))) ; horizons/ext/speaklater.py
3995
3996 (define-public gnujump
3997 (package
3998 (name "gnujump")
3999 (version "1.0.8")
4000 (source (origin
4001 (method url-fetch)
4002 (uri (string-append "mirror://gnu/gnujump/gnujump-"
4003 version ".tar.gz"))
4004 (sha256
4005 (base32
4006 "05syy9mzbyqcfnm0hrswlmhwlwx54f0l6zhcaq8c1c0f8dgzxhqk"))))
4007 (build-system gnu-build-system)
4008 (arguments
4009 '(#:phases
4010 (modify-phases %standard-phases
4011 (add-before
4012 'configure 'link-libm
4013 (lambda _ (setenv "LIBS" "-lm")))
4014 (add-after 'install 'create-desktop-entry
4015 (lambda* (#:key outputs #:allow-other-keys)
4016 (let* ((out (assoc-ref outputs "out"))
4017 (apps (string-append out "/share/applications")))
4018 (mkdir-p apps)
4019 (with-output-to-file
4020 (string-append apps "/gnujump.desktop")
4021 (lambda _
4022 (format #t
4023 "[Desktop Entry]~@
4024 Name=GNUjump~@
4025 Comment=Jump up the tower to survive~@
4026 Exec=~a/bin/gnujump~@
4027 Terminal=false~@
4028 Type=Application~@
4029 Categories=Game;ArcadeGame~%"
4030 out)))))))))
4031 (inputs
4032 `(("glu" ,glu)
4033 ("mesa" ,mesa)
4034 ("sdl" ,sdl)
4035 ("sdl-image" ,sdl-image)
4036 ("sdl-mixer" ,sdl-mixer)))
4037 (home-page "http://gnujump.es.gnu.org/")
4038 (synopsis
4039 "Game of jumping to the next floor, trying not to fall")
4040 (description
4041 "GNUjump is a simple, yet addictive game in which you must jump from
4042 platform to platform to avoid falling, while the platforms drop at faster rates
4043 the higher you go. The game features multiplayer, unlimited FPS, smooth floor
4044 falling, themeable graphics and sounds, and replays.")
4045 (license license:gpl3+)))
4046
4047 (define-public wesnoth
4048 (package
4049 (name "wesnoth")
4050 (version "1.14.15")
4051 (source (origin
4052 (method url-fetch)
4053 (uri (string-append "mirror://sourceforge/wesnoth/wesnoth-"
4054 (version-major+minor version)
4055 "/wesnoth-" version "/"
4056 "wesnoth-" version ".tar.bz2"))
4057 (sha256
4058 (base32
4059 "05iapxj3nzaqh10y42yq1jf7spxgm4iwjw4qj1c4lnb25xp4mc2h"))))
4060 (build-system cmake-build-system)
4061 (arguments
4062 `(#:tests? #f)) ;no check target
4063 (native-inputs
4064 `(("gettext" ,gettext-minimal)
4065 ("pkg-config" ,pkg-config)))
4066 (inputs
4067 `(("boost" ,boost)
4068 ("dbus" ,dbus)
4069 ("fribidi" ,fribidi)
4070 ("libvorbis" ,libvorbis)
4071 ("openssl" ,openssl)
4072 ("pango" ,pango)
4073 ("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
4074 (home-page "https://www.wesnoth.org/")
4075 (synopsis "Turn-based strategy game")
4076 (description
4077 "The Battle for Wesnoth is a fantasy, turn based tactical strategy game,
4078 with several single player campaigns, and multiplayer games (both networked and
4079 local).
4080
4081 Battle for control on a range of maps, using variety of units which have
4082 advantages and disadvantages against different types of attacks. Units gain
4083 experience and advance levels, and are carried over from one scenario to the
4084 next campaign.")
4085 (license license:gpl2+)))
4086
4087 (define-public wesnoth-server
4088 (package
4089 (inherit wesnoth)
4090 (name "wesnoth-server")
4091 (inputs
4092 `(("boost" ,boost)
4093 ("icu4c" ,icu4c)
4094 ("openssl" ,openssl)
4095 ("sdl2" ,sdl2)))
4096 (arguments
4097 `(#:configure-flags '("-DENABLE_GAME=OFF")
4098 ,@(package-arguments wesnoth)))
4099 (synopsis "Dedicated @emph{Battle for Wesnoth} server")
4100 (description "This package contains a dedicated server for @emph{The
4101 Battle for Wesnoth}.")))
4102
4103 (define-public gamine
4104 (package
4105 (name "gamine")
4106 (version "1.6")
4107 (source (origin
4108 (method url-fetch)
4109 (uri (string-append "mirror://sourceforge/gamine-game/"
4110 "gamine-" version ".tar.gz"))
4111 (sha256
4112 (base32
4113 "1sc6f4445ciigd6yw0ri92746k4hk6ps0bvj9fm1gbp3c3fslk5n"))))
4114 (build-system gnu-build-system)
4115 (native-inputs
4116 `(("pkg-config" ,pkg-config)
4117 ("intltool" ,intltool)))
4118 (inputs
4119 `(("gstreamer" ,gstreamer)
4120 ("gst-plugins-base" ,gst-plugins-base) ; playbin plugin
4121 ("gst-plugins-good" ,gst-plugins-good) ; for wav playback
4122 ("gtk+" ,gtk+)))
4123 (arguments
4124 `(#:tests? #f
4125 #:make-flags
4126 (let ((out (assoc-ref %outputs "out")))
4127 (list (string-append "PREFIX=" out)
4128 (string-append "SYSCONFDIR=" out "/etc")))
4129 #:phases
4130 (modify-phases %standard-phases
4131 (delete 'configure)
4132 (add-after
4133 'install 'wrap-gamine
4134 (lambda* (#:key outputs #:allow-other-keys)
4135 (let ((out (assoc-ref outputs "out"))
4136 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
4137 (wrap-program (string-append out "/bin/gamine")
4138 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))
4139 #t)))))
4140 (home-page "http://gamine-game.sourceforge.net/")
4141 (synopsis "Mouse and keyboard discovery for children")
4142 (description
4143 "Gamine is a game designed for young children who are learning to use the
4144 mouse and keyboard. The child uses the mouse to draw colored dots and lines
4145 on the screen and keyboard to display letters.")
4146 ;; Most files under gpl2+ or gpl3+, but eat.wav under gpl3
4147 (license license:gpl3)))
4148
4149 (define-public manaplus
4150 (package
4151 (name "manaplus")
4152 (version "1.9.3.23")
4153 (source (origin
4154 (method url-fetch)
4155 (uri (string-append
4156 "https://repo.manaplus.org/manaplus/download/"
4157 version "/manaplus-" version ".tar.xz"))
4158 (sha256
4159 (base32
4160 "1ky182p4svwdqm6cf7jbns85hidkhkhq4s17cs2p381f0klapfjz"))))
4161 (build-system gnu-build-system)
4162 (arguments
4163 '(#:configure-flags
4164 (list (string-append "CPPFLAGS=-I"
4165 (assoc-ref %build-inputs "sdl-union")
4166 "/include/SDL"))))
4167 (native-inputs
4168 `(("pkg-config" ,pkg-config)))
4169 (inputs
4170 `(("glu" ,glu)
4171 ("curl" ,curl)
4172 ("libxml2" ,libxml2)
4173 ("mesa" ,mesa)
4174 ("sdl-union" ,(sdl-union))))
4175 (home-page "https://manaplus.org")
4176 (synopsis "Client for 'The Mana World' and similar games")
4177 (description
4178 "ManaPlus is a 2D MMORPG client for game servers. It is the only
4179 fully supported client for @uref{http://www.themanaworld.org, The mana
4180 world}, @uref{http://evolonline.org, Evol Online} and
4181 @uref{http://landoffire.org, Land of fire}.")
4182 ;; "src/debug/*" and "src/sdl2gfx/*" are under Zlib.
4183 ;; "data/themes/{golden-delicious,jewelry}/*" are under CC-BY-SA.
4184 ;; The rest is under GPL2+.
4185 (license (list license:gpl2+ license:zlib license:cc-by-sa4.0))))
4186
4187 (define openttd-engine
4188 (package
4189 (name "openttd-engine")
4190 (version "1.10.3")
4191 (source
4192 (origin (method url-fetch)
4193 (uri (string-append "https://cdn.openttd.org/openttd-releases/"
4194 version "/openttd-" version "-source.tar.xz"))
4195 (sha256
4196 (base32
4197 "0fxmfz1mm95a2x0rnzfff9wb8q57w0cvsdd0z7agdcbyakph25n1"))))
4198 (build-system gnu-build-system)
4199 (arguments
4200 `(#:tests? #f ; no "check" target
4201 #:phases
4202 (modify-phases %standard-phases
4203 ;; The build process fails if the configure script is passed the
4204 ;; option "--enable-fast-install".
4205 (replace 'configure
4206 (lambda* (#:key inputs outputs (configure-flags '())
4207 #:allow-other-keys)
4208 (let ((out (assoc-ref outputs "out"))
4209 (lzo (assoc-ref inputs "lzo")))
4210 (apply invoke "./configure"
4211 (string-append "--prefix=" out)
4212 ;; Provide the "lzo" path.
4213 (string-append "--with-liblzo2="
4214 lzo "/lib/liblzo2.a")
4215 ;; Put the binary in 'bin' instead of 'games'.
4216 "--binary-dir=bin"
4217 configure-flags)))))))
4218 (native-inputs `(("pkg-config" ,pkg-config)))
4219 (inputs
4220 `(("allegro" ,allegro)
4221 ("fontconfig" ,fontconfig)
4222 ("freetype" ,freetype)
4223 ("icu4c" ,icu4c)
4224 ("libpng" ,libpng)
4225 ("lzo" ,lzo)
4226 ("sdl" ,sdl)
4227 ("xz" ,xz)
4228 ("zlib" ,zlib)))
4229 (synopsis "Transportation economics simulator game")
4230 (description "OpenTTD is a game in which you transport goods and
4231 passengers by land, water and air. It is a re-implementation of Transport
4232 Tycoon Deluxe with many enhancements including multiplayer mode,
4233 internationalization support, conditional orders and the ability to clone,
4234 autoreplace and autoupdate vehicles. This package only includes the game
4235 engine. When you start it you will be prompted to download a graphics set.")
4236 (home-page "https://www.openttd.org/")
4237 ;; This package is GPLv2, except for a few files located in
4238 ;; "src/3rdparty/" which are under the 3-clause BSD, LGPLv2.1+ and Zlib
4239 ;; licenses. In addition, this software contains an in-game downloader
4240 ;; from which the user may find non-functional data licensed under
4241 ;; different terms.
4242 (license (list license:bsd-3 license:gpl2 license:lgpl2.1+ license:zlib))))
4243
4244 (define openttd-opengfx
4245 (package
4246 (name "openttd-opengfx")
4247 (version "0.6.0")
4248 (source
4249 (origin
4250 (method url-fetch)
4251 (uri (string-append "https://cdn.openttd.org/opengfx-releases/"
4252 version "/opengfx-" version "-source.tar.xz"))
4253 (sha256
4254 (base32
4255 "0qxc6gl2gxcrn1np88dnjgbaaakkkx96b13rcmy1spryc8c09hyr"))))
4256 (build-system gnu-build-system)
4257 (arguments
4258 '(#:make-flags (list "CC=gcc"
4259 (string-append "INSTALL_DIR="
4260 (assoc-ref %outputs "out")
4261 "/share/games/openttd/baseset/opengfx"))
4262 #:phases
4263 (modify-phases %standard-phases
4264 (replace 'configure
4265 (lambda _
4266 ;; Make sure HOME is writable for GIMP.
4267 (setenv "HOME" (getcwd))
4268
4269 ;; Redirect stdout, not stderr, to /dev/null. This prevents
4270 ;; dos2unix from receiving its version information as a flag.
4271 (substitute* "Makefile"
4272 (("\\$\\(UNIX2DOS\\) -q --version 2>/dev/null")
4273 "$(UNIX2DOS) -q --version 1>/dev/null")))))
4274 ;; The check phase for this package only checks the md5sums of the built
4275 ;; GRF files against the md5sums of the release versions. Because we use
4276 ;; different software versions than upstream does, some of the md5sums
4277 ;; are different. However, the package is still reproducible, it's safe
4278 ;; to disable this test.
4279 #:tests? #f
4280 #:parallel-build? #f))
4281 (native-inputs `(("dos2unix" ,dos2unix)
4282 ("gimp" ,gimp)
4283 ("grfcodec" ,grfcodec)
4284 ("nml" ,nml)
4285 ("which" ,which)
4286 ("python" ,python-2)))
4287 (home-page "http://dev.openttdcoop.org/projects/opengfx")
4288 (synopsis "Base graphics set for OpenTTD")
4289 (description
4290 "The OpenGFX project is an implementation of the OpenTTD base graphics
4291 set that aims to ensure the best possible out-of-the-box experience.
4292
4293 OpenGFX provides you with...
4294 @enumerate
4295 @item All graphics you need to enjoy OpenTTD.
4296 @item Uniquely drawn rail vehicles for every climate.
4297 @item Completely snow-aware rivers.
4298 @item Different river and sea water.
4299 @item Snow-aware buoys.
4300 @end enumerate")
4301 (license license:gpl2)))
4302
4303 (define openttd-opensfx
4304 (package
4305 (name "openttd-opensfx")
4306 (version "0.2.3")
4307 (source
4308 (origin
4309 (method url-fetch)
4310 (uri (string-append
4311 "https://binaries.openttd.org/extra/opensfx/"
4312 version "/opensfx-" version "-source.tar.gz"))
4313 (sha256
4314 (base32
4315 "03jxgp02ks31hmsdh4xh0xcpkb70ds8jakc9pfc1y9vdrdavh4p5"))))
4316 (build-system gnu-build-system)
4317 (native-inputs
4318 `(("catcodec" ,catcodec)
4319 ("python" ,python-2)))
4320 (arguments
4321 `(#:make-flags
4322 (list (string-append "INSTALL_DIR=" %output
4323 "/share/games/openttd/baseset/opensfx"))
4324 #:phases
4325 (modify-phases %standard-phases
4326 (add-after 'unpack 'make-reproducible
4327 (lambda _
4328 ;; Remove the time dependency of the installed tarball by setting
4329 ;; the modification times if its members to 0.
4330 (substitute* "scripts/Makefile.def"
4331 (("-cf") " --mtime=@0 -cf"))
4332 #t))
4333 (delete 'configure))))
4334 (home-page "http://dev.openttdcoop.org/projects/opensfx")
4335 (synopsis "Base sounds for OpenTTD")
4336 (description "OpenSFX is a set of free base sounds for OpenTTD which make
4337 it possible to play OpenTTD without requiring the proprietary sound files from
4338 the original Transport Tycoon Deluxe.")
4339 (license license:cc-sampling-plus-1.0)))
4340
4341 (define openttd-openmsx
4342 (package
4343 (name "openttd-openmsx")
4344 (version "0.3.1")
4345 (source
4346 (origin
4347 (method url-fetch)
4348 (uri (string-append
4349 "https://binaries.openttd.org/extra/openmsx/"
4350 version "/openmsx-" version "-source.tar.gz"))
4351 (sha256
4352 (base32
4353 "0nskq97a6fsv1v6d62zf3yb8whzhqnlh3lap3va3nzvj7csjgf7c"))))
4354 (build-system gnu-build-system)
4355 (native-inputs
4356 `(("python" ,python-2)))
4357 (arguments
4358 `(#:make-flags
4359 (list (string-append "INSTALL_DIR=" %output
4360 "/share/games/openttd/baseset"))
4361 #:phases
4362 (modify-phases %standard-phases
4363 (delete 'configure)
4364 (add-after 'install 'post-install
4365 ;; Rename openmsx-version to openmsx
4366 (lambda* (#:key outputs #:allow-other-keys)
4367 (let ((install-directory (string-append (assoc-ref outputs "out")
4368 "/share/games/openttd/baseset")))
4369 (rename-file (string-append install-directory "/openmsx-" ,version)
4370 (string-append install-directory "/openmsx"))
4371 #t))))))
4372 (home-page "http://dev.openttdcoop.org/projects/openmsx")
4373 (synopsis "Music set for OpenTTD")
4374 (description "OpenMSX is a music set for OpenTTD which makes it possible
4375 to play OpenTTD without requiring the proprietary music from the original
4376 Transport Tycoon Deluxe.")
4377 (license license:gpl2)))
4378
4379 (define-public openttd
4380 (package
4381 (inherit openttd-engine)
4382 (name "openttd")
4383 (arguments
4384 `(#:configure-flags
4385 (list (string-append "--with-midi=" (assoc-ref %build-inputs "timidity++")
4386 "/bin/timidity"))
4387 ,@(substitute-keyword-arguments (package-arguments openttd-engine)
4388 ((#:phases phases)
4389 `(modify-phases ,phases
4390 (add-after 'install 'install-data
4391 (lambda* (#:key inputs outputs #:allow-other-keys)
4392 (for-each
4393 (lambda (input)
4394 (copy-recursively (assoc-ref inputs input)
4395 (assoc-ref outputs "out")))
4396 (list "opengfx" "openmsx" "opensfx"))
4397 #t)))))))
4398 (inputs
4399 `(("timidity++" ,timidity++)
4400 ,@(package-inputs openttd-engine)))
4401 (native-inputs
4402 `(("opengfx" ,openttd-opengfx)
4403 ("openmsx" ,openttd-openmsx)
4404 ("opensfx" ,openttd-opensfx)
4405 ,@(package-native-inputs openttd-engine)))))
4406
4407 (define openrct2-title-sequences
4408 (package
4409 (name "openrct2-title-sequences")
4410 (version "0.1.2")
4411 (source
4412 (origin
4413 (method url-fetch)
4414 (uri (string-append "https://github.com/OpenRCT2/title-sequences/releases/download/v"
4415 version "/title-sequence-v" version ".zip"))
4416 (file-name (string-append name "-" version ".zip"))
4417 (sha256
4418 (base32
4419 "0qbyxrsw8hlgaq0r5d7lx7an3idy4qbfv7yiw9byhldk763n9cfw"))))
4420 (build-system trivial-build-system)
4421 (native-inputs
4422 `(("bash" ,bash)
4423 ("coreutils" ,coreutils)
4424 ("unzip" ,unzip)))
4425 (arguments
4426 `(#:modules ((guix build utils))
4427 #:builder
4428 (begin
4429 (use-modules (guix build utils))
4430 (let* ((out (assoc-ref %outputs "out"))
4431 (openrct2-title-sequences (string-append out
4432 "/share/openrct2/title-sequences"))
4433 (source (assoc-ref %build-inputs "source"))
4434 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
4435 (copy-file source (string-append ,name "-" ,version ".zip"))
4436 (invoke unzip (string-append ,name "-" ,version ".zip"))
4437 (delete-file (string-append ,name "-" ,version ".zip"))
4438 (mkdir-p openrct2-title-sequences)
4439 (copy-recursively "."
4440 openrct2-title-sequences)
4441 #t))))
4442 (home-page "https://github.com/OpenRCT2/OpenRCT2")
4443 (synopsis "Title sequences for OpenRCT2")
4444 (description
4445 "openrct2-title-sequences is a set of title sequences for OpenRCT2.")
4446 (license license:gpl3+)))
4447
4448 (define openrct2-objects
4449 (package
4450 (name "openrct2-objects")
4451 (version "1.0.20")
4452 (source
4453 (origin
4454 (method url-fetch)
4455 (uri (string-append "https://github.com/OpenRCT2/objects/releases/download/v"
4456 version "/objects.zip"))
4457 (file-name (string-append name "-" version ".zip"))
4458 (sha256
4459 (base32 "1q7a38kcwrfijav6app1gf253yfv8b0rljbkah8040y6i7snw9mw"))))
4460 (build-system trivial-build-system)
4461 (native-inputs
4462 `(("bash" ,bash)
4463 ("coreutils" ,coreutils)
4464 ("unzip" ,unzip)))
4465 (arguments
4466 `(#:modules ((guix build utils))
4467 #:builder
4468 (begin
4469 (use-modules (guix build utils))
4470 (let* ((out (assoc-ref %outputs "out"))
4471 (openrct2-objects (string-append out
4472 "/share/openrct2/objects"))
4473 (source (assoc-ref %build-inputs "source"))
4474 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
4475 (copy-file source (string-append ,name "-" ,version ".zip"))
4476 (invoke unzip (string-append ,name "-" ,version ".zip"))
4477 (delete-file (string-append ,name "-" ,version ".zip"))
4478 (mkdir-p openrct2-objects)
4479 (copy-recursively "."
4480 openrct2-objects)
4481 #t))))
4482 (home-page "https://github.com/OpenRCT2/OpenRCT2")
4483 (synopsis "Objects for OpenRCT2")
4484 (description
4485 "openrct2-objects is a set of objects for OpenRCT2.")
4486 (license license:gpl3+)))
4487
4488 (define-public openrct2
4489 (package
4490 (name "openrct2")
4491 (version "0.3.2")
4492 (source
4493 (origin
4494 (method git-fetch)
4495 (uri (git-reference
4496 (url "https://github.com/OpenRCT2/OpenRCT2")
4497 (commit (string-append "v" version))))
4498 (file-name (git-file-name name version))
4499 (sha256
4500 (base32 "1fd32wniiy6qz2046ppqfj2sb3rf2qf086rf9v1bdhyj254d0b1z"))))
4501 (build-system cmake-build-system)
4502 (arguments
4503 `(#:configure-flags (list "-DDOWNLOAD_OBJECTS=OFF"
4504 "-DDOWNLOAD_TITLE_SEQUENCES=OFF")
4505 #:tests? #f ; tests require network access
4506 #:phases
4507 (modify-phases %standard-phases
4508 (add-after 'unpack 'fix-usr-share-paths&add-data
4509 (lambda* (#:key inputs outputs #:allow-other-keys)
4510 (let ((titles (assoc-ref inputs "openrct2-title-sequences"))
4511 (objects (assoc-ref inputs "openrct2-objects")))
4512 ;; Fix some references to /usr/share.
4513 (substitute* "src/openrct2/platform/Platform.Linux.cpp"
4514 (("/usr/share")
4515 (string-append (assoc-ref %outputs "out") "/share")))
4516 (copy-recursively
4517 (string-append titles "/share/openrct2/title-sequences")
4518 "data/title")
4519 (copy-recursively
4520 (string-append objects "/share/openrct2/objects")
4521 "data/object"))))
4522 (add-before 'configure 'get-rid-of-errors
4523 (lambda _
4524 ;; Don't treat warnings as errors.
4525 (substitute* "CMakeLists.txt"
4526 (("-Werror") ""))
4527 #t)))))
4528 (inputs `(("curl" ,curl)
4529 ("duktape" ,duktape)
4530 ("fontconfig" ,fontconfig)
4531 ("freetype" ,freetype)
4532 ("icu4c" ,icu4c)
4533 ("jansson" ,jansson)
4534 ("libpng" ,libpng)
4535 ("libzip" ,libzip)
4536 ("mesa" ,mesa)
4537 ("nlohmann-json-cpp" ,nlohmann-json-cpp)
4538 ("openrct2-objects" ,openrct2-objects)
4539 ("openrct2-title-sequences" ,openrct2-title-sequences)
4540 ("openssl" ,openssl)
4541 ("sdl2" ,sdl2)
4542 ("speexdsp" ,speexdsp)
4543 ("zlib" ,zlib)))
4544 (native-inputs
4545 `(("pkg-config" ,pkg-config)))
4546 (home-page "https://github.com/OpenRCT2/OpenRCT2")
4547 (synopsis "Free software re-implementation of RollerCoaster Tycoon 2")
4548 (description "OpenRCT2 is a free software re-implementation of
4549 RollerCoaster Tycoon 2 (RCT2). The gameplay revolves around building and
4550 maintaining an amusement park containing attractions, shops and facilities.
4551
4552 Note that this package does @emph{not} provide the game assets (sounds,
4553 images, etc.)")
4554 ;; See <https://github.com/OpenRCT2/OpenRCT2/wiki/Required-RCT2-files>
4555 ;; regarding assets.
4556 (license license:gpl3+)))
4557
4558 (define-public pinball
4559 (package
4560 (name "pinball")
4561 (version "0.3.1")
4562 (source
4563 (origin (method url-fetch)
4564 (uri (string-append "mirror://sourceforge/pinball/pinball/"
4565 "pinball-" version "/"
4566 "pinball-" version ".tar.gz"))
4567 (sha256
4568 (base32
4569 "1f2whlrfidwfh8lvr8cspcyirc6840r5d1ajm7x99qmngygrhixs"))
4570 (patches (search-patches "pinball-const-fix.patch"
4571 "pinball-cstddef.patch"
4572 "pinball-missing-separators.patch"
4573 "pinball-src-deps.patch"
4574 "pinball-system-ltdl.patch"))))
4575 (build-system gnu-build-system)
4576 (inputs
4577 `(("glu" ,glu)
4578 ("mesa" ,mesa)
4579 ("sdl" ,sdl)
4580 ("sdl-image" ,sdl-image)
4581 ("sdl-mixer" ,sdl-mixer)))
4582 (arguments
4583 '(#:configure-flags
4584 (list (string-append "CPPFLAGS=-I"
4585 (assoc-ref %build-inputs "sdl-image")
4586 "/include/SDL -I"
4587 (assoc-ref %build-inputs "sdl-mixer")
4588 "/include/SDL"))))
4589 (home-page "http://pinball.sourceforge.net")
4590 (synopsis "Pinball simulator")
4591 (description "The Emilia Pinball Project is a pinball simulator. There
4592 are only two levels to play with, but they are very addictive.")
4593 (license license:gpl2)))
4594
4595 (define-public pioneers
4596 (package
4597 (name "pioneers")
4598 (version "15.6")
4599 (source (origin
4600 (method url-fetch)
4601 (uri (string-append "https://downloads.sourceforge.net/pio/"
4602 "pioneers-" version ".tar.gz"))
4603 (sha256
4604 (base32
4605 "07b3xdd81n8ybsb4fzc5lx0813y9crzp1hj69khncf4faj48sdcs"))))
4606 (build-system gnu-build-system)
4607 (inputs `(("avahi" ,avahi)
4608 ("gtk+" ,gtk+)
4609 ("librsvg" ,librsvg)))
4610 (native-inputs `(("intltool" ,intltool)
4611 ("itstool" ,itstool)
4612 ("libxml2" ,libxml2)
4613 ("pkg-config" ,pkg-config)))
4614 (synopsis "Board game inspired by The Settlers of Catan")
4615 (description "Pioneers is an emulation of the board game The Settlers of
4616 Catan. It can be played on a local network, on the internet, and with AI
4617 players.")
4618 (home-page "http://pio.sourceforge.net/")
4619 (license license:gpl2+)))
4620
4621 (define-public einstein
4622 (package
4623 (name "einstein")
4624 (version "2.0")
4625 (source (origin
4626 (method url-fetch)
4627 (uri (string-append "mirror://debian/pool/main/e/"
4628 "einstein/einstein_2.0.dfsg.2.orig.tar.gz"))
4629 (sha256
4630 (base32
4631 "1hxrlv6n8py48j487i6wbb4n4vd55w0na69r7ccmmr9vmrsw5mlk"))
4632 (patches (search-patches "einstein-build.patch"))))
4633 (build-system gnu-build-system)
4634 (inputs
4635 `(("freetype" ,freetype)
4636 ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-ttf)))
4637 ("zlib" ,zlib)))
4638 (native-inputs
4639 `(("font-dejavu" ,font-dejavu)))
4640 (arguments
4641 `(#:tests? #f ; no check target
4642 #:phases
4643 (modify-phases %standard-phases
4644 (replace 'configure
4645 (lambda* (#:key outputs inputs #:allow-other-keys)
4646 (let ((out (assoc-ref outputs "out"))
4647 (dejavu (string-append (assoc-ref inputs "font-dejavu")
4648 "/share/fonts/truetype/DejaVuSans.ttf")))
4649 (substitute* "Makefile"
4650 (("PREFIX=/usr/local") (string-append "PREFIX=" out)))
4651 ;; The patch above registers a free font for use by the binary,
4652 ;; but the font is copied during the compile phase into a
4653 ;; resources file, so we need to make the ttf file available.
4654 (symlink dejavu "res/DejaVuSans.ttf")
4655 #t))))))
4656 (synopsis "Logic puzzle game")
4657 (description "The goal of this logic game is to open all cards in a 6x6
4658 grid, using a number of hints as to their relative position. The game idea
4659 is attributed to Albert Einstein.")
4660 ;; The original home page has disappeared.
4661 (home-page (string-append "http://web.archive.org/web/20120521062745/"
4662 "http://games.flowix.com/en/index.html"))
4663 ;; License according to
4664 ;; http://web.archive.org/web/20150222180355/http://www.babichev.info/en/projects/index.html
4665 ;; The source code is a DFSG-sanitized tarball and does not contain any
4666 ;; license information.
4667 (license license:gpl3+)))
4668
4669 (define-public powwow
4670 (package
4671 (name "powwow")
4672 (version "1.2.22")
4673 (source (origin
4674 (method url-fetch)
4675 (uri (string-append
4676 "https://www.hoopajoo.net/static/projects/powwow-"
4677 version ".tar.gz"))
4678 (sha256
4679 (base32
4680 "12i11b8zxg8vdb9d6ims8qy2lmwwr42rcqbwq3vsa1x94s51bcbp"))))
4681 (inputs
4682 `(("ncurses" ,ncurses)))
4683 (build-system gnu-build-system)
4684 (home-page "https://www.hoopajoo.net/projects/powwow.html")
4685 (synopsis "MUD and telnet client")
4686 (description
4687 "POWWOW is a client software which can be used for telnet as well as for
4688 @dfn{Multi-User Dungeon} (MUD). Additionally it can serve as a nice client for
4689 the chat server psyced with the specific config located at
4690 http://lavachat.symlynx.com/unix/")
4691 (license license:gpl2+)))
4692
4693 (define-public red-eclipse
4694 (let ((release "2.0.0")
4695 (revision 0))
4696 (package
4697 (name "red-eclipse")
4698 (version (if (zero? revision)
4699 release
4700 (string-append release "-"
4701 (number->string revision))))
4702 (source
4703 (origin
4704 (method git-fetch)
4705 (uri (git-reference
4706 (url "https://github.com/redeclipse/base")
4707 (commit (string-append "v" release))
4708 (recursive? #t))) ; for game data
4709 (file-name (git-file-name name version))
4710 (sha256
4711 (base32 "0sz0mqhwx8r9n4mk3qrxw420nlsm3y0n48gd0lazgd64lfqjh3ab"))
4712 (modules '((guix build utils)))
4713 (snippet
4714 ;; Remove proprietary libraries and other pre-compiled binaries.
4715 '(begin
4716 (delete-file-recursively "bin")
4717 #t))))
4718 (build-system gnu-build-system)
4719 (arguments
4720 `(#:tests? #f ; no check target
4721 #:make-flags (list "CC=gcc" "-Csrc"
4722 (string-append "INSTDIR="
4723 (assoc-ref %outputs "out") "/bin")
4724 (string-append "prefix="
4725 (assoc-ref %outputs "out")))
4726 #:phases
4727 (modify-phases %standard-phases
4728 (add-after 'unpack 'add-store-data-package-path-as-default
4729 (lambda* (#:key outputs #:allow-other-keys)
4730 (substitute* "src/engine/server.cpp"
4731 (("data = \"data\"")
4732 (string-append "data = \""
4733 (assoc-ref outputs "out")
4734 "/share/redeclipse/data\"")))
4735 #t))
4736 (delete 'configure) ; no configure script
4737 (add-after 'set-paths 'set-sdl-paths
4738 (lambda* (#:key inputs #:allow-other-keys)
4739 (setenv "CPATH"
4740 (string-append (assoc-ref inputs "sdl-union")
4741 "/include/SDL2:"
4742 (or (getenv "CPATH") "")))
4743 #t))
4744 (add-after 'install 'copy-data
4745 (lambda* (#:key outputs #:allow-other-keys)
4746 (let ((out (assoc-ref outputs "out")))
4747 (copy-recursively "config"
4748 (string-append out "/config"))
4749 (copy-file "doc/examples/servinit.cfg"
4750 (string-append out "/config/servinit.cfg"))
4751 (copy-recursively "data"
4752 (string-append out "/share/redeclipse/data"))
4753 (mkdir-p (string-append out "/lib/redeclipse"))
4754 (symlink (string-append out "/share/redeclipse/data")
4755 (string-append out "/lib/redeclipse/data")))
4756 #t))
4757 (add-after 'copy-data 'wrap-program
4758 (lambda* (#:key inputs outputs #:allow-other-keys)
4759 (let* ((out (assoc-ref outputs "out"))
4760 (bin (string-append out "/bin")))
4761 (with-directory-excursion bin
4762 (rename-file "redeclipse_linux"
4763 ".redeclipse_linux-real")
4764 (rename-file "redeclipse_server_linux"
4765 ".redeclipse_server_linux-real")
4766 (call-with-output-file "redeclipse_linux"
4767 (lambda (port)
4768 (format port "#!~a/bin/sh
4769 # Run the thing from its home, otherwise it just bails out.
4770 cd \"~a\"
4771 exec -a \"$0\" ~a/.redeclipse_linux-real~%"
4772 (assoc-ref inputs "bash") ;implicit input
4773 (string-append out)
4774 (string-append bin))))
4775 (call-with-output-file "redeclipse_server_linux"
4776 (lambda (port)
4777 (format port "#!~a/bin/sh
4778 # Run the thing from its home, otherwise it just bails out.
4779 cd \"~a\"
4780 exec -a \"$0\" ~a/.redeclipse_server_linux-real~%"
4781 (assoc-ref inputs "bash") ;implicit input
4782 (string-append out)
4783 (string-append bin))))
4784 (chmod "redeclipse_linux" #o555)
4785 (chmod "redeclipse_server_linux" #o555)))
4786 #t)))))
4787 (native-inputs
4788 `(("pkg-config" ,pkg-config)))
4789 (inputs
4790 `(("curl" ,curl)
4791 ("freetype" ,freetype)
4792 ("glu" ,glu)
4793 ("sdl-union" ,(sdl-union (list sdl2
4794 sdl2-image
4795 sdl2-mixer)))))
4796 (home-page "https://redeclipse.net/")
4797 (synopsis "Arena shooter derived from the Cube 2 engine")
4798 (description
4799 "Red Eclipse is an arena shooter, created from the Cube2 engine.
4800 Offering an innovative parkour system and distinct but all potent weapons,
4801 Red Eclipse provides fast paced and accessible gameplay.")
4802 ;; The engine is under Zlib; data files are covered by the other
4803 ;; licenses. More details at file:///doc/all-licenses.txt.
4804 (license (list license:expat
4805 license:zlib
4806 license:cc-by-sa4.0
4807 license:cc-by-sa3.0
4808 license:cc-by3.0
4809 license:cc0
4810 license:public-domain
4811 license:silofl1.1)))))
4812
4813 (define-public grue-hunter
4814 (package
4815 (name "grue-hunter")
4816 (version "1.0")
4817 (source (origin
4818 (method url-fetch)
4819 (uri (string-append "https://jxself.org/grue-hunter.tar.gz"))
4820 (sha256
4821 (base32
4822 "1hjcpy5439qs3v2zykis7hsi0i17zjs62gks3zd8mnfw9ni4i2h3"))))
4823 (build-system trivial-build-system) ; no Makefile.PL
4824 (arguments `(#:modules ((guix build utils))
4825 #:builder
4826 (begin
4827 (use-modules (guix build utils))
4828 (use-modules (srfi srfi-1))
4829
4830 (let* ((tarball (assoc-ref %build-inputs "tarball"))
4831 (perl (string-append (assoc-ref %build-inputs
4832 "perl")
4833 "/bin"))
4834 (gzip (string-append (assoc-ref %build-inputs
4835 "gzip")
4836 "/bin/gzip"))
4837 (tar (string-append (assoc-ref %build-inputs
4838 "tar")
4839 "/bin/tar"))
4840 (out (assoc-ref %outputs "out"))
4841 (bin (string-append out "/bin"))
4842 (doc (string-append out
4843 "/share/doc/grue-hunter")))
4844 (copy-file tarball "grue-hunter.tar.gz")
4845 (invoke gzip "-d" "grue-hunter.tar.gz")
4846 (invoke tar "xvf" "grue-hunter.tar")
4847
4848 (mkdir-p bin)
4849 (copy-file "grue-hunter/gh.pl"
4850 (string-append bin "/grue-hunter"))
4851 (patch-shebang (string-append bin "/grue-hunter")
4852 (list perl))
4853
4854 (install-file "grue-hunter/AGPLv3.txt" doc)
4855
4856 #t))))
4857 (inputs `(("perl" ,perl)
4858 ("tar" ,tar)
4859 ("gzip" ,gzip)
4860 ("tarball" ,source)))
4861 (home-page "https://jxself.org/grue-hunter.shtml")
4862 (synopsis "Text adventure game")
4863 (description
4864 "Grue Hunter is a text adventure game written in Perl. You must make
4865 your way through an underground cave system in search of the Grue. Can you
4866 capture it and get out alive?")
4867 (license license:agpl3+)))
4868
4869 (define-public lierolibre
4870 (package
4871 (name "lierolibre")
4872 (version "0.5")
4873 (source (origin
4874 (method url-fetch)
4875 (uri (string-append "https://launchpad.net/lierolibre/trunk/"
4876 version "/+download/lierolibre-"
4877 version ".tar.xz"))
4878 (sha256
4879 (base32
4880 "1cf1gvsn4qq190lrf9k5bpjnqwlcfw7pajvdnh7z5r4jqw0rsbl9"))
4881 (patches
4882 (search-patches "lierolibre-check-unaligned-access.patch"
4883 "lierolibre-try-building-other-arch.patch"
4884 "lierolibre-remove-arch-warning.patch"
4885 "lierolibre-newer-libconfig.patch"
4886 "lierolibre-is-free-software.patch"))
4887 (modules '((guix build utils)))
4888 (snippet
4889 '(begin
4890 ;; Delete pre-compiled files.
4891 (delete-file "data/LIERO.CHR")
4892 (delete-file "data/LIERO.SND")
4893 #t))))
4894 (build-system gnu-build-system)
4895 (native-inputs
4896 `(("imagemagick" ,imagemagick)
4897 ("pkg-config" ,pkg-config)
4898 ("util-linux" ,util-linux)
4899 ("sox" ,sox)))
4900 (inputs
4901 `(("boost" ,boost)
4902 ("libconfig" ,libconfig)
4903 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
4904 ("zlib" ,zlib)))
4905 (home-page "https://gitlab.com/lierolibre/lierolibre")
4906 (synopsis "Old-school earthworm action game")
4907 (description
4908 "lierolibre is an earthworm action game where you fight another player
4909 (or the computer) underground using a wide array of weapons.
4910
4911 Features:
4912 @itemize
4913 @item 2 worms, 40 weapons, great playability, two game modes: Kill'em All
4914 and Game of Tag, plus AI-players without true intelligence!
4915 @item Dat nostalgia.
4916 @item Extensions via a hidden F1 menu:
4917 @itemize
4918 @item Replays
4919 @item Game controller support
4920 @item Powerlevel palettes
4921 @end itemize
4922 @item Ability to write game variables to plain text files.
4923 @item Ability to load game variables from both EXE and plain text files.
4924 @item Scripts to extract and repack graphics, sounds and levels.
4925 @end itemize
4926
4927 To switch between different window sizes, use F6, F7 and F8, to switch to
4928 fullscreen, use F5 or Alt+Enter.")
4929 ;; Code mainly BSD-2, some parts under Boost 1.0. All assets are WTFPL2.
4930 (license (list license:bsd-2 license:boost1.0 license:wtfpl2))))
4931
4932 (define-public tennix
4933 (package
4934 (name "tennix")
4935 (version "1.3.1")
4936 (source
4937 (origin
4938 (method git-fetch)
4939 (uri (git-reference
4940 (url "https://repo.or.cz/tennix.git")
4941 (commit (string-append "tennix-" version))))
4942 (file-name (git-file-name name version))
4943 (sha256
4944 (base32 "02cj4lrdrisal5s9pnbf2smx7qz9czczjzndfkhfx0qy67b957sk"))
4945 ;; Remove non-free images.
4946 (modules '((guix build utils)))
4947 (snippet
4948 '(begin
4949 (for-each delete-file
4950 '("data/loc_training_camp.png"
4951 "data/loc_austrian_open.png"
4952 "data/loc_olympic_green_tennis.png"))
4953 #t))))
4954 (build-system gnu-build-system)
4955 (arguments
4956 `(#:tests? #f ;no test
4957 #:phases
4958 (modify-phases %standard-phases
4959 (add-after 'unpack 'fix-include
4960 (lambda _
4961 (substitute* '("src/graphics.h" "src/sound.h")
4962 (("#include \"(SDL_(image|ttf|mixer)\\.h)\"" _ header)
4963 (string-append "#include \"SDL/" header "\"")))
4964 (substitute* '("src/tennix.h" "src/network.h" "src/SDL_rotozoom.h")
4965 (("#include <SDL.h>") "#include <SDL/SDL.h>")
4966 (("#include <SDL_net.h>") "#include <SDL/SDL_net.h>"))
4967 #t))
4968 (add-after 'unpack 'locate-install
4969 ;; Build process cannot expand "$(INSTALL)" in Makefile.
4970 (lambda _
4971 (substitute* "makefile"
4972 (("^CONFIGURE_OUTPUT :=.*" all)
4973 (string-append "INSTALL := install -c\n" all)))
4974 #t))
4975 (replace 'configure
4976 ;; The "configure" script is picky about the arguments it
4977 ;; gets. Call it ourselves.
4978 (lambda _
4979 (invoke "./configure" "--prefix" (assoc-ref %outputs "out")))))))
4980 (native-inputs
4981 `(("which" ,which)))
4982 (inputs
4983 `(("python" ,python-wrapper)
4984 ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf sdl-net)))))
4985 (home-page "http://icculus.org/tennix/")
4986 (synopsis "Play tennis against the computer or a friend")
4987 (description "Tennix is a 2D tennis game. You can play against the
4988 computer or against another player using the keyboard. The game runs
4989 in-window at 640x480 resolution or fullscreen.")
4990 ;; Project is licensed under GPL2+ terms. It includes images
4991 ;; released under Public Domain terms, and SDL_rotozoom, released
4992 ;; under LGPL2.1 terms.
4993 (license (list license:gpl2+ license:public-domain license:lgpl2.1))))
4994
4995 (define-public warzone2100
4996 (package
4997 (name "warzone2100")
4998 (version "3.4.1")
4999 (source
5000 (origin
5001 (method url-fetch)
5002 (uri (string-append "mirror://sourceforge/warzone2100/releases/"
5003 version
5004 "/warzone2100_src.tar.xz"))
5005 (sha256
5006 (base32 "0savalmw1kp1sf8vg5aqrl5hc77p4jacxy5y9qj8k2hi2vqdfb7a"))
5007 (modules '((guix build utils)))
5008 (snippet
5009 '(begin
5010 (with-directory-excursion "3rdparty"
5011 (for-each
5012 delete-file-recursively
5013 '("discord-rpc"
5014 "miniupnp"
5015 "utfcpp")))
5016 #t))))
5017 (build-system cmake-build-system)
5018 (arguments
5019 `(#:configure-flags '("-DWZ_DISTRIBUTOR=Guix"
5020 "-DENABLE_DISCORD=off")
5021 #:tests? #f ; TODO: Tests seem to be broken, configure.ac is missing.
5022 #:phases
5023 (modify-phases %standard-phases
5024 (add-after 'unpack 'fix-utfcpp-include
5025 (lambda _
5026 (substitute* "lib/framework/wzstring.cpp"
5027 (("<utfcpp/source/utf8.h>") "<utf8.h>"))
5028 #t))
5029 (add-after 'unpack 'link-tests-with-qt
5030 (lambda _
5031 (substitute* "tests/Makefile.am"
5032 (("(framework_linktest_LDADD|maptest_LDADD) = " prefix)
5033 (string-append prefix "$(QT5_LIBS) ")))
5034 #t))
5035 (add-after 'unpack 'fix-ivis-linktest
5036 (lambda _
5037 (substitute* "tests/ivis_linktest.cpp"
5038 (("iV_DrawTextRotated.*;")
5039 (string-append "iV_DrawTextRotated(\"Press ESC to exit.\", "
5040 "100, 100, 0.0f, font_regular);")))
5041 #t)))))
5042 (native-inputs `(("asciidoc" ,asciidoc)
5043 ("asciidoctor" ,ruby-asciidoctor)
5044 ("gettext" ,gettext-minimal)
5045 ("pkg-config" ,pkg-config)
5046 ("unzip" ,unzip)
5047 ;; 7z is used to create .zip archive, not `zip' as in version 3.2.*.
5048 ("p7zip" ,p7zip)))
5049 (inputs `(("curl" ,curl)
5050 ("fontconfig" ,fontconfig)
5051 ("freetype" ,freetype)
5052 ("glew" ,glew)
5053 ("harfbuzz" ,harfbuzz)
5054 ("libtheora" ,libtheora)
5055 ("libvorbis" ,libvorbis)
5056 ("libxrandr" ,libxrandr)
5057 ("libsodium" ,libsodium)
5058 ("miniupnpc" ,miniupnpc)
5059 ("openal" ,openal)
5060 ("physfs" ,physfs)
5061 ("qtbase" ,qtbase)
5062 ("qtscript" ,qtscript)
5063 ("openssl" ,openssl)
5064 ("sdl2" ,sdl2)
5065 ("utfcpp" ,utfcpp)))
5066 (home-page "https://wz2100.net")
5067 (synopsis "3D Real-time strategy and real-time tactics game")
5068 (description
5069 "Warzone 2100 offers campaign, multi-player, and single-player skirmish
5070 modes. An extensive tech tree with over 400 different technologies, combined
5071 with the unit design system, allows for a wide variety of possible units and
5072 tactics.")
5073 ;; Everything is GPLv2+ unless otherwise specified in COPYING.NONGPL
5074 (license (list license:bsd-3
5075 license:cc0
5076 license:cc-by-sa3.0
5077 license:expat
5078 license:gpl2+
5079 license:lgpl2.1+))))
5080
5081 (define-public widelands
5082 (package
5083 (name "widelands")
5084 (version "21")
5085 (source
5086 (origin
5087 (method url-fetch)
5088 (uri (string-append "https://launchpad.net/widelands/"
5089 "build" version "/build" version "/+download/"
5090 "widelands-build" version "-source.tar.gz"))
5091 (sha256
5092 (base32 "0mz3jily0w1zxxqbnkqrp6hl88xhrwzbil9crq7gpcwidx60w7k0"))
5093 (modules '((guix build utils)))
5094 (snippet
5095 '(begin
5096 (delete-file-recursively "src/third_party/minizip")
5097 #t))
5098 (patches
5099 ;; Use system Minizip. Patch is provided by Debian, and discussed
5100 ;; upstream at <https://github.com/widelands/widelands/issues/399>.
5101 (search-patches "widelands-system-wide_minizip.patch"))))
5102 (build-system cmake-build-system)
5103 (arguments
5104 `(#:configure-flags
5105 (let* ((out (assoc-ref %outputs "out"))
5106 (share (string-append out "/share")))
5107 (list (string-append "-DCMAKE_INSTALL_PREFIX=" out "/bin")
5108 (string-append "-DWL_INSTALL_BASEDIR=" share "/widelands")
5109 (string-append "-DWL_INSTALL_DATADIR=" share "/widelands")
5110 "-DOPTION_BUILD_WEBSITE_TOOLS=OFF"
5111 ;; CMakeLists.txt does not handle properly RelWithDebInfo build
5112 ;; type. When used, no game data is installed!
5113 "-DCMAKE_BUILD_TYPE=Release"))
5114 #:phases
5115 (modify-phases %standard-phases
5116 (add-after 'unpack 'unbundle-fonts
5117 ;; Unbundle fonts already packaged in Guix. XXX: missing fonts are
5118 ;; amiri, Culmus, mmrCensus, Nakula, and Sinhala.
5119 (lambda* (#:key inputs #:allow-other-keys)
5120 (with-directory-excursion "data/i18n/fonts"
5121 (for-each (lambda (font)
5122 (delete-file-recursively font)
5123 (symlink (string-append (assoc-ref inputs font)
5124 "/share/fonts/truetype")
5125 font))
5126 '("DejaVu" "MicroHei")))
5127 #t)))))
5128 (native-inputs
5129 `(("gettext" ,gettext-minimal)
5130 ("python" ,python-wrapper)))
5131 (inputs
5132 `(("boost" ,boost)
5133 ("glew" ,glew)
5134 ("icu4c" ,icu4c)
5135 ("libpng" ,libpng)
5136 ("minizip" ,minizip)
5137 ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
5138 ("zlib" ,zlib)
5139 ;; Fonts for the ‘unbundle-fonts’ phase. Case matters in name!
5140 ("DejaVu" ,font-dejavu)
5141 ("MicroHei" ,font-wqy-microhei)))
5142 (home-page "https://www.widelands.org/")
5143 (synopsis "Fantasy real-time strategy game")
5144 (description
5145 "In Widelands, you are the regent of a small clan. You start out with
5146 nothing but your headquarters, where all your resources are stored.
5147
5148 In the course of the game, you will build an ever growing settlement. Every
5149 member of your clan will do his or her part to produce more resources---wood,
5150 food, iron, gold and more---to further this growth. The economic network is
5151 complex and different in the four tribes (Barbarians, Empire, Atlanteans, and
5152 Frisians).
5153
5154 As you are not alone in the world, you will meet other clans sooner or later.
5155 Some of them may be friendly and you may eventually trade with them. However,
5156 if you want to rule the world, you will have to train soldiers and fight.
5157
5158 Widelands offers single-player mode with different campaigns; the campaigns
5159 all tell stories of tribes and their struggle in the Widelands universe!
5160 However, settling really starts when you unite with friends over the Internet
5161 or LAN to build up new empires together---or to crush each other in the dusts
5162 of war. Widelands also offers an Artificial Intelligence to challenge you.")
5163 ;; Game is released as GPL2+. Some parts, e.g., art, are released under
5164 ;; different licenses.
5165 (license (list license:gpl2+
5166 license:expat ;src/third_party/eris
5167 license:silofl1.1 ;Widelands.ttf
5168 license:cc-by-sa3.0)))) ;some music files
5169
5170 (define-public starfighter
5171 (package
5172 (name "starfighter")
5173 (version "2.4")
5174 (source (origin
5175 (method url-fetch)
5176 (uri (string-append
5177 "https://github.com/pr-starfighter/starfighter/releases"
5178 "/download/v" version "/starfighter-"
5179 version "-src.tar.gz"))
5180 (sha256
5181 (base32
5182 "0ips79j3sdy8wa64jqka0skbbqkzqiln9bbiiilh4z717q7vz9r5"))))
5183 (build-system gnu-build-system)
5184 (native-inputs
5185 `(("pkg-config" ,pkg-config)))
5186 (inputs
5187 `(("pango" ,pango)
5188 ("sdl2" ,sdl2)
5189 ("sdl2-image" ,sdl2-image)
5190 ("sdl2-mixer" ,sdl2-mixer)
5191 ("sdl2-ttf" ,sdl2-ttf)))
5192 (home-page "https://pr-starfighter.github.io/")
5193 (synopsis "2D scrolling shooter game")
5194 (description
5195 "In the year 2579, the intergalactic weapons corporation, WEAPCO, has
5196 dominated the galaxy. Guide Chris Bainfield and his friend Sid Wilson on
5197 their quest to liberate the galaxy from the clutches of WEAPCO. Along the
5198 way, you will encounter new foes, make new allies, and assist local rebels
5199 in strikes against the evil corporation.")
5200 ;; gfx and music are under CC-BY 3.0, CC-BY-SA 3.0, CC0 or Public Domain.
5201 (license (list license:gpl3+
5202 license:cc-by3.0
5203 license:cc-by-sa3.0
5204 license:cc0
5205 license:public-domain))))
5206
5207 (define-public chromium-bsu
5208 (package
5209 (name "chromium-bsu")
5210 (version "0.9.16.1")
5211 (source (origin
5212 (method url-fetch)
5213 (uri (string-append "mirror://sourceforge/chromium-bsu"
5214 "/Chromium B.S.U. source code/"
5215 "chromium-bsu-" version ".tar.gz"))
5216 (sha256
5217 (base32
5218 "0jk2w5b6s6nkzri585bbz16cif2fhqcnl5l1mq3rd98r9nil3hd1"))))
5219 (build-system gnu-build-system)
5220 (native-inputs `(("pkg-config" ,pkg-config)))
5221 (inputs `(("gettext" ,gettext-minimal)
5222 ("glu" ,glu)
5223 ("quesoglc" ,quesoglc)
5224 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))))
5225 (home-page "http://chromium-bsu.sourceforge.net/")
5226 (synopsis "Fast-paced, arcade-style, top-scrolling space shooter")
5227 (description
5228 "In this game you are the captain of the cargo ship Chromium B.S.U. and
5229 are responsible for delivering supplies to the troops on the front line. Your
5230 ship has a small fleet of robotic fighters which you control from the relative
5231 safety of the Chromium vessel.")
5232 ;; Clarified Artistic License for everything but sound, which is covered
5233 ;; by the Expat License.
5234 (license (list license:clarified-artistic license:expat))))
5235
5236 (define-public tuxpaint
5237 (package
5238 (name "tuxpaint")
5239 (version "0.9.23") ;keep VER_DATE below in sync
5240 (source
5241 (origin
5242 (method url-fetch)
5243 (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint/"
5244 version "/tuxpaint-" version ".tar.gz"))
5245 (sha256
5246 (base32
5247 "09k9pxi88r3dx6dyjwf9h85d4qpva4i29qz63dc558hg9v21k69l"))
5248 (modules '((guix build utils)))
5249 (snippet
5250 '(begin
5251 ;; Remove win32 directory which contains binary dll's and the
5252 ;; deprecated visualc directory.
5253 (for-each delete-file-recursively '("win32" "visualc"))
5254 (substitute* "Makefile"
5255 ;; Do not rely on $(GPERF) being an absolute file name
5256 (("\\[ -x \\$\\(GPERF\\) \\]")
5257 "$(GPERF) --version >/dev/null 2>&1"))
5258 #t))
5259 (patches (search-patches "tuxpaint-stamps-path.patch"))))
5260 (build-system gnu-build-system)
5261 (native-inputs
5262 `(("gperf" ,gperf)
5263 ("pkg-config" ,pkg-config)))
5264 (inputs
5265 `(("cairo" ,cairo)
5266 ("fribidi" ,fribidi)
5267 ("gettext" ,gettext-minimal)
5268 ("libpng" ,libpng)
5269 ("librsvg" ,librsvg)
5270 ("libpaper" ,libpaper)
5271 ("netpbm" ,netpbm)
5272 ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-ttf sdl-image)))))
5273 ;; TODO: Use system fonts rather than those in data/fonts
5274 (arguments
5275 `(#:make-flags `("VER_DATE=2018-09-02"
5276 "GPERF=gperf" "CC=gcc"
5277 "SDL_PCNAME=sdl SDL_image SDL_mixer SDL_ttf"
5278 ,(string-append "PREFIX=" %output)
5279 "KDE_PREFIX=$(PREFIX)/share/applications"
5280 "KDE_ICON_PREFIX=$(PREFIX)/share/icons/"
5281 "COMPLETIONDIR=$(PREFIX)/etc/bash_completion.d")
5282 #:parallel-build? #f ;fails on some systems
5283 #:tests? #f ;No tests
5284 #:phases (modify-phases %standard-phases
5285 (delete 'configure) ;no configure phase
5286 (add-before 'install 'no-sys-cache
5287 (lambda _ ;do not rebuild system conf cache
5288 (substitute* "Makefile"
5289 (("kbuildsycoca4") ""))
5290 #t))
5291 (add-after 'install 'fix-import
5292 (lambda* (#:key inputs outputs #:allow-other-keys)
5293 (let* ((out (assoc-ref outputs "out"))
5294 (net (assoc-ref inputs "netpbm"))
5295 (tpi (string-append out "/bin/tuxpaint-import")))
5296 (substitute* tpi
5297 ;; Point to installation prefix so that the default
5298 ;; configure file is found.
5299 (("/usr/local") out))
5300 ;; tuxpaint-import uses a bunch of programs from
5301 ;; netpbm, so make sure it knows where those are
5302 (wrap-program tpi
5303 `("PATH" ":" prefix
5304 (,(string-append net "/bin"))))))))))
5305 (native-search-paths
5306 (list (search-path-specification
5307 (variable "TUXPAINT_STAMPS_PATH")
5308 (files '("share/tuxpaint/stamps")))))
5309 (home-page "http://www.tuxpaint.org")
5310 (synopsis "Drawing software for children")
5311 (description
5312 "Tux Paint is a free drawing program designed for young children (kids
5313 ages 3 and up). It has a simple, easy-to-use interface; fun sound effects;
5314 and an encouraging cartoon mascot who helps guide children as they use the
5315 program. It provides a blank canvas and a variety of drawing tools to help
5316 your child be creative.")
5317 (license license:gpl2+)))
5318
5319 (define-public tuxpaint-stamps
5320 (package
5321 (name "tuxpaint-stamps")
5322 (version "2018.09.01")
5323 (source
5324 (origin
5325 (method url-fetch)
5326 (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint-stamps/"
5327 (string-map (λ (x) (if (eq? x #\.) #\- x)) version)
5328 "/tuxpaint-stamps-" version ".tar.gz"))
5329 (sha256
5330 (base32
5331 "1skr23k27yj3vgwfazpzxp90lb2a278gxrkr3bxw7az6zpkmb3yp"))))
5332 (build-system trivial-build-system)
5333 (native-inputs
5334 `(("tar" ,tar)
5335 ("gzip" ,gzip)))
5336 (arguments
5337 `(#:modules ((guix build utils))
5338 #:builder (begin
5339 (use-modules (guix build utils))
5340 (setenv "PATH"
5341 (string-append
5342 (assoc-ref %build-inputs "tar") "/bin" ":"
5343 (assoc-ref %build-inputs "gzip") "/bin"))
5344 (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
5345 (chdir (string-append ,name "-" ,version))
5346 (let ((dir (string-append %output "/share/tuxpaint/stamps")))
5347 (mkdir-p dir)
5348 (copy-recursively "stamps" dir))
5349 #t)))
5350 (home-page (package-home-page tuxpaint))
5351 (synopsis "Stamp images for Tux Paint")
5352 (description
5353 "This package contains a set of \"Rubber Stamp\" images which can be used
5354 with the \"Stamp\" tool within Tux Paint.")
5355 (license license:gpl2+)))
5356
5357 (define-public tuxpaint-config
5358 (package
5359 (name "tuxpaint-config")
5360 (version "0.0.14") ;keep VER_DATE below in sync
5361 (source
5362 (origin
5363 (method url-fetch)
5364 (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint-config/"
5365 version "/tuxpaint-config-" version ".tar.gz"))
5366 (sha256
5367 (base32
5368 "0zkgxk436nqcp43zghkfmh397c7dvh5bwn2as7gwvv208bzyij6g"))))
5369 (build-system gnu-build-system)
5370 (native-inputs
5371 `(("gettext" ,gettext-minimal)))
5372 (inputs
5373 `(("fltk" ,fltk)
5374 ("libpaper" ,libpaper)
5375 ;; TODO: Should the following be propagated by fltk?
5376 ("libx11" ,libx11)
5377 ("libxft" ,libxft)
5378 ("mesa" ,mesa)))
5379 (arguments
5380 `(#:make-flags `("VER_DATE=2018-09-01"
5381 "CONFDIR=/etc/tuxpaint" ;don't write to store
5382 ,(string-append "PREFIX=" %output)
5383 "GNOME_PREFIX=$(PREFIX)")
5384 #:parallel-build? #f ;race conditions
5385 #:tests? #f ;no tests
5386 #:phases (modify-phases %standard-phases
5387 (delete 'configure) ;no configure phase
5388 (add-before 'install 'gzip-no-name
5389 (lambda* _
5390 (substitute* "Makefile"
5391 ;; tuxpaint-config compresses its own documentation;
5392 ;; make sure it uses flags for reproducibility.
5393 (("gzip") "gzip --no-name"))))
5394 (add-before 'install 'make-install-dirs
5395 (lambda* (#:key outputs #:allow-other-keys)
5396 (let ((out (assoc-ref outputs "out")))
5397 (mkdir-p (string-append out "/bin"))
5398 #t))))))
5399 (home-page (package-home-page tuxpaint))
5400 (synopsis "Configure Tux Paint")
5401 (description
5402 "Tux Paint Config is a graphical configuration editor for Tux Paint.")
5403 (license license:gpl2))) ;no "or later" present
5404
5405 (define-public supertux
5406 (package
5407 (name "supertux")
5408 (version "0.6.2")
5409 (source (origin
5410 (method url-fetch)
5411 (uri (string-append "https://github.com/SuperTux/supertux/"
5412 "releases/download/v" version "/SuperTux-v"
5413 version "-Source.tar.gz"))
5414 (file-name (string-append name "-" version ".tar.gz"))
5415 (sha256
5416 (base32
5417 "167m3z4m8n76dvbv42m1fnvabpbpsxvr28zk9641916jl9pfba96"))
5418 (patches
5419 (search-patches "supertux-unbundle-squirrel.patch"))))
5420 (arguments
5421 '(#:tests? #f
5422 #:configure-flags '("-DINSTALL_SUBDIR_BIN=bin"
5423 "-DUSE_SYSTEM_PHYSFS=ON")
5424 #:phases
5425 (modify-phases %standard-phases
5426 (add-after 'unpack 'patch-squirrel-path
5427 (lambda* (#:key inputs #:allow-other-keys)
5428 (let ((squirrel (assoc-ref inputs "squirrel")))
5429 (substitute* "CMakeLists.txt"
5430 (("set\\(SQUIRREL_PREFIX.*")
5431 (string-append "set(SQUIRREL_PREFIX " squirrel ")"))
5432 (("add_dependencies\\(supertux2_lib squirrel\\)") "")
5433 (("\\$\\{SQUIRREL_PREFIX\\}/include")
5434 (string-append "${SQUIRREL_PREFIX}/include/squirrel"))))
5435 #t)))))
5436 (build-system cmake-build-system)
5437 (inputs `(("sdl2" ,sdl2)
5438 ("sdl2-image" ,sdl2-image)
5439 ("sdl2-mixer" ,sdl2-mixer)
5440 ("openal" ,openal)
5441 ("mesa" ,mesa)
5442 ("glew" ,glew)
5443 ("libvorbis" ,libvorbis)
5444 ("libogg" ,libogg)
5445 ("physfs" ,physfs)
5446 ("curl" ,curl)
5447 ("boost" ,boost)
5448 ("freetype" ,freetype)
5449 ("squirrel" ,squirrel)))
5450 (native-inputs
5451 `(("pkg-config" ,pkg-config)))
5452 (synopsis "2D platformer game")
5453 (description "SuperTux is a classic 2D jump'n run sidescroller game in
5454 a style similar to the original Super Mario games.")
5455 (home-page "https://supertux.org/")
5456 (license license:gpl3+)))
5457
5458 (define-public tintin++
5459 (package
5460 (name "tintin++")
5461 (version "2.02.05")
5462 (source
5463 (origin
5464 (method url-fetch)
5465 (uri (string-append "mirror://sourceforge/tintin/TinTin++ Source Code/"
5466 (string-drop-right version 1)
5467 "/tintin-" version ".tar.gz"))
5468 (sha256
5469 (base32 "18fm9ga08mxqmblahmnlzwnl387i8mbkj4n0gffxc91d299019v3"))))
5470 (inputs
5471 `(("gnutls" ,gnutls)
5472 ("pcre" ,pcre)
5473 ("readline" ,readline)
5474 ("zlib" ,zlib)))
5475 (arguments
5476 '(#:tests? #f ; no test suite
5477 #:phases
5478 (modify-phases %standard-phases
5479 ;; The source is in tt/src.
5480 (add-before 'configure 'chdir
5481 (lambda _
5482 (chdir "src")
5483 #t)))))
5484 (build-system gnu-build-system)
5485 (home-page "https://tintin.mudhalla.net/")
5486 (synopsis "MUD client")
5487 (description
5488 "TinTin++ is a MUD client which supports MCCP (Mud Client Compression
5489 Protocol), MMCP (Mud Master Chat Protocol), xterm 256 colors, most TELNET
5490 options used by MUDs, as well as those required to login via telnet on
5491 Linux / Mac OS X servers, and an auto mapper with a VT100 map display.")
5492 (license license:gpl3+)))
5493
5494 (define-public laby
5495 (package
5496 (name "laby")
5497 (version "0.7.0")
5498 (source
5499 (origin (method git-fetch)
5500 (uri (git-reference
5501 (url "https://github.com/sgimenez/laby")
5502 (commit (string-append name "-" version))))
5503 (file-name (git-file-name name version))
5504 (sha256
5505 (base32
5506 "1y6nfxcjhqg9bb81hs0wijg7kcwk5kff81rgd8bsv5ps7ia9nj6b"))
5507 (patches (search-patches "laby-make-install.patch"))))
5508 (build-system gnu-build-system)
5509 (inputs
5510 `(("lablgtk" ,lablgtk)
5511 ("ocaml" ,ocaml)
5512 ("ocaml-findlib" ,ocaml-findlib)
5513 ("ocamlbuild" ,ocamlbuild)))
5514 (arguments
5515 '(#:phases
5516 (modify-phases %standard-phases
5517 (delete 'configure)
5518 (add-before 'build 'allow-unsafe-strings
5519 ;; Fix a build failure with ocaml >=4.06.0.
5520 ;; See <https://github.com/sgimenez/laby/issues/53>.
5521 (lambda _
5522 (setenv "OCAMLPARAM" "safe-string=0,_")
5523 #t))
5524 (add-before 'build 'set-library-path
5525 (lambda* (#:key inputs #:allow-other-keys)
5526 (let ((lablgtk (assoc-ref inputs "lablgtk")))
5527 (setenv "LD_LIBRARY_PATH"
5528 (string-append lablgtk "/lib/ocaml/stublibs"))))))
5529 #:tests? #f ; no 'check' target
5530 #:make-flags
5531 (list (string-append "PREFIX=" (assoc-ref %outputs "out")) "all")))
5532 (home-page "https://sgimenez.github.io/laby/")
5533 (synopsis "Programming game")
5534 (description "Learn programming, playing with ants and spider webs ;-)
5535 Your robot ant can be programmed in many languages: OCaml, Python, C, C++,
5536 Java, Ruby, Lua, JavaScript, Pascal, Perl, Scheme, Vala, Prolog. Experienced
5537 programmers may also add their own favorite language.")
5538 (license license:gpl3+)))
5539
5540 (define-public bambam
5541 (package
5542 (name "bambam")
5543 (version "1.0.0")
5544 (source
5545 (origin
5546 (method git-fetch)
5547 (uri (git-reference
5548 (url "https://github.com/porridge/bambam")
5549 (commit (string-append "v" version))))
5550 (file-name (git-file-name name version))
5551 (sha256
5552 (base32 "18cwd1wpyyx8y61cags9bkdhx9x858xicc4y1c9c2s0xjmgzhl3i"))))
5553 (build-system python-build-system)
5554 (arguments
5555 `(#:tests? #f ; no tests
5556 #:phases
5557 (modify-phases %standard-phases
5558 (delete 'build) ; nothing to build
5559 (replace 'install
5560 (lambda* (#:key outputs #:allow-other-keys)
5561 (let* ((out (assoc-ref outputs "out"))
5562 (bin (string-append out "/bin"))
5563 (share (string-append out "/share")))
5564 (mkdir-p bin)
5565 (copy-file "bambam.py" (string-append bin "/bambam"))
5566 (install-file "bambam.6" (string-append share "/man/man6"))
5567 (copy-recursively "data" (string-append share "/bambam/data")))
5568 #t)))))
5569 (inputs
5570 `(("python-pygame" ,python-pygame)))
5571 (home-page "https://github.com/porridge/bambam")
5572 (synopsis "Keyboard mashing and doodling game for babies")
5573 (description "Bambam is a simple baby keyboard (and gamepad) masher
5574 application that locks the keyboard and mouse and instead displays bright
5575 colors, pictures, and sounds.")
5576 (license license:gpl3+)))
5577
5578 (define-public mrrescue
5579 (package
5580 (name "mrrescue")
5581 (version "1.02e")
5582 (source (origin
5583 (method url-fetch)
5584 (uri (string-append
5585 "https://github.com/SimonLarsen/mrrescue/releases/"
5586 "download/" version "/mrrescue" version ".love"))
5587 (file-name (string-append name "-" version ".love"))
5588 (sha256
5589 (base32
5590 "0jwzbwkgp1l5ia6c7s760gmdirbsncp6nfqp7vqdqsfb63la9gl2"))))
5591 (build-system trivial-build-system)
5592 (arguments
5593 `(#:modules ((guix build utils))
5594 #:builder
5595 (begin
5596 (use-modules (guix build utils))
5597 (let* ((out (assoc-ref %outputs "out"))
5598 (script (string-append out "/bin/" ,name))
5599 (data (string-append out "/share/" ,name))
5600 (source (assoc-ref %build-inputs "source"))
5601 (unzip (string-append (assoc-ref %build-inputs "unzip")
5602 "/bin/unzip"))
5603 (patch (string-append (assoc-ref %build-inputs "patch")
5604 "/bin/patch"))
5605 (bash (string-append (assoc-ref %build-inputs "bash")
5606 "/bin/bash"))
5607 (love (string-append (assoc-ref %build-inputs "love")
5608 "/bin/love")))
5609
5610 (mkdir-p (dirname script))
5611 (with-output-to-file script
5612 (lambda ()
5613 (format #t "#!~a~%" bash)
5614 (format #t "exec -a ~a \"~a\" \"~a\"~%" ,name love data)))
5615 (chmod script #o755)
5616
5617 ;; The better way to package this game would be to install *only* the
5618 ;; script above, pointing to the unextracted .love file in the store.
5619 ;; However, mrrescue 1.02e needs to be patched to work with Love 11.
5620 ;; Instead of extracting the .love file, patching it, and re-zipping
5621 ;; it to the store, simply point the script to the extracted patched
5622 ;; data directory directly.
5623 (mkdir-p data)
5624 (with-directory-excursion data
5625 (invoke unzip source)
5626 (invoke patch "-p1" "-i"
5627 (assoc-ref %build-inputs "love-11.patch")))
5628 #t))))
5629 (native-inputs
5630 `(("unzip" ,unzip)
5631 ("patch" ,patch)
5632 ("love-11.patch" ,(search-patch "mrrescue-support-love-11.patch"))))
5633 (inputs
5634 `(("bash" ,bash)
5635 ("love" ,love)))
5636 (home-page "https://tangramgames.dk/games/mrrescue")
5637 (synopsis "Arcade-style fire fighting game")
5638 (description
5639 "Mr. Rescue is an arcade styled 2d action game centered around evacuating
5640 civilians from burning buildings. The game features fast-paced fire
5641 extinguishing action, intense boss battles, a catchy soundtrack, and lots of
5642 throwing people around in pseudo-randomly generated buildings.")
5643 (license (list license:zlib ; for source code
5644 license:cc-by-sa3.0)))) ; for graphics and music assets
5645
5646 (define-public hyperrogue
5647 (package
5648 (name "hyperrogue")
5649 (version "11.3a")
5650 ;; When updating this package, be sure to update the "hyperrogue-data"
5651 ;; origin in native-inputs.
5652 (source (origin
5653 (method url-fetch)
5654 (uri (string-append
5655 "https://www.roguetemple.com/z/hyper/hyperrogue"
5656 (string-join (string-split version #\.) "")
5657 "-src.tgz"))
5658 (sha256
5659 (base32
5660 "1yxabbswq02fc5frigvs43f83m5vlxybc7n5mynkwzj2c70lfp2k"))))
5661 (build-system gnu-build-system)
5662 (arguments
5663 `(#:tests? #f ; no check target
5664 #:make-flags '("HYPERROGUE_USE_GLEW=1"
5665 "HYPERROGUE_USE_PNG=1")
5666 #:phases
5667 (modify-phases %standard-phases
5668 (add-after 'set-paths 'set-sdl-paths
5669 (lambda* (#:key inputs #:allow-other-keys)
5670 (setenv "CPATH"
5671 (string-append (or (getenv "CPATH") "") ":"
5672 (assoc-ref inputs "sdl-union")
5673 "/include/SDL"))))
5674 (replace 'configure
5675 (lambda* (#:key inputs outputs #:allow-other-keys)
5676 (let* ((out (assoc-ref outputs "out"))
5677 (share-dir (string-append out "/share/hyperrogue"))
5678 (dejavu-dir (string-append
5679 (assoc-ref inputs "font-dejavu")
5680 "/share/fonts/truetype"))
5681 (dejavu-font "DejaVuSans-Bold.ttf")
5682 (music-file "hyperrogue-music.txt"))
5683 ;; Fix font and music paths.
5684 (substitute* "basegraph.cpp"
5685 ((dejavu-font)
5686 (string-append dejavu-dir "/" dejavu-font)))
5687 (substitute* music-file
5688 (("\\*/")
5689 (string-append share-dir "/sounds/")))
5690 (substitute* "sound.cpp"
5691 (("musicfile = \"\"")
5692 (string-append "musicfile = \""
5693 share-dir "/" music-file "\"")))
5694 ;; Disable build machine CPU optimizations and warnings treated
5695 ;; as errors.
5696 (substitute* "Makefile"
5697 (("-march=native") "")
5698 (("-Werror") "")))
5699 #t))
5700 (replace 'install
5701 (lambda* (#:key inputs outputs #:allow-other-keys)
5702 (let* ((out (assoc-ref outputs "out"))
5703 (bin (string-append out "/bin"))
5704 (share-dir (string-append out "/share/hyperrogue")))
5705 (mkdir-p bin)
5706 (install-file "hyperrogue" bin)
5707 (install-file "hyperrogue-music.txt" share-dir))
5708 #t))
5709 (add-after 'install 'install-data
5710 (lambda* (#:key inputs outputs #:allow-other-keys)
5711 (let* ((data (assoc-ref inputs "hyperrogue-data"))
5712 (out (assoc-ref outputs "out"))
5713 (sounds (string-append out "/share/hyperrogue/sounds"))
5714 (unzip (string-append (assoc-ref inputs "unzip") "/bin/unzip")))
5715 ;; Extract media license information into sounds directory.
5716 (invoke unzip "-j" data
5717 (string-append
5718 "hyperrogue"
5719 (string-join (string-split ,version #\.) "")
5720 "/sounds/credits.txt") "-d" sounds)
5721 ;; Extract sounds and music into sounds directory.
5722 (invoke "unzip" "-j" data
5723 (string-append
5724 "hyperrogue"
5725 (string-join (string-split ,version #\.) "")
5726 "/*.ogg") "-d" sounds)))))))
5727 (native-inputs
5728 `(("hyperrogue-data"
5729 ,(origin
5730 (method url-fetch)
5731 (uri
5732 (string-append
5733 "https://www.roguetemple.com/z/hyper/hyperrogue"
5734 (string-join (string-split version #\.) "")
5735 "-win.zip"))
5736 (sha256
5737 (base32
5738 "11yhbia45f1w9z0j67h9nynwjqmvakr9l6rnrmdrdkzin6lvzzj4"))))
5739 ("unzip" ,unzip)))
5740 (inputs
5741 `(("font-dejavu" ,font-dejavu)
5742 ("glew" ,glew)
5743 ("libpng" ,libpng)
5744 ("sdl-union" ,(sdl-union (list sdl
5745 sdl-gfx
5746 sdl-mixer
5747 sdl-ttf)))))
5748 (home-page "https://www.roguetemple.com/z/hyper/")
5749 (synopsis "Non-euclidean graphical rogue-like game")
5750 (description
5751 "HyperRogue is a game in which the player collects treasures and fights
5752 monsters -- rogue-like but for the fact that it is played on the hyperbolic
5753 plane and not in euclidean space.
5754
5755 In HyperRogue, the player can move through different parts of the world, which
5756 are home to particular creatures and may be subject to their own rules of
5757 \"physics\".
5758
5759 While the game can use ASCII characters to display the the classical rogue
5760 symbols, it still needs graphics to render the non-euclidean world.")
5761 (license (list license:bsd-3 ; glew.c, mtrand.*
5762 license:cc-by-sa3.0 ; music
5763 license:cc-by-sa4.0 ; sounds
5764 license:cc0
5765 license:public-domain ; direntx.*, some sounds
5766 license:zlib ; savepng.*
5767 license:gpl2+)))) ; remaining files
5768
5769 (define-public kobodeluxe
5770 (package
5771 (name "kobodeluxe")
5772 (version "0.5.1")
5773 (source (origin
5774 (method url-fetch)
5775 (uri (string-append "http://olofson.net/kobodl/download/KoboDeluxe-"
5776 version ".tar.bz2"))
5777 (sha256
5778 (base32
5779 "0b2wvdpnmaibsy419c16dfwj5kvd3pccby2aaqvm964x74592yqg"))
5780 (patches (search-patches
5781 "kobodeluxe-const-charp-conversion.patch"
5782 "kobodeluxe-enemies-pipe-decl.patch"
5783 "kobodeluxe-graphics-window-signed-char.patch"
5784 "kobodeluxe-manpage-minus-not-hyphen.patch"
5785 "kobodeluxe-midicon-segmentation-fault.patch"
5786 "kobodeluxe-paths.patch"))))
5787 (build-system gnu-build-system)
5788 (arguments
5789 '(#:configure-flags
5790 (list (string-append "CPPFLAGS=-I"
5791 (assoc-ref %build-inputs "sdl-union")
5792 "/include/SDL"))))
5793 (inputs
5794 `(("glu" ,glu)
5795 ("sdl-union" ,(sdl-union (list sdl sdl-image)))))
5796 (synopsis "Shooter with space station destruction")
5797 (description
5798 "Kobo Deluxe is an enhanced version of Akira Higuchi's XKobo graphical game
5799 for Un*x systems with X11.")
5800 (home-page "http://olofson.net/kobodl/")
5801 (license license:gpl2+)))
5802
5803 (define-public freeciv
5804 (package
5805 (name "freeciv")
5806 (version "2.6.3")
5807 (source
5808 (origin
5809 (method url-fetch)
5810 (uri (list (string-append
5811 "http://files.freeciv.org/stable/freeciv-"
5812 version ".tar.bz2")
5813 (string-append
5814 "mirror://sourceforge/freeciv/Freeciv%20"
5815 (version-major+minor version) "/" version
5816 "/freeciv-" version ".tar.bz2")))
5817 (sha256
5818 (base32 "1lgq7wcbhwpy2yqdw4biwfmp5q8fh7lhlwxcgm0fpaapfl12whvp"))))
5819 (build-system gnu-build-system)
5820 (inputs
5821 `(("curl" ,curl)
5822 ("cyrus-sasl" ,cyrus-sasl)
5823 ("gtk+" ,gtk+)
5824 ("sdl-mixer" ,sdl-mixer)
5825 ("zlib" ,zlib)))
5826 (native-inputs
5827 `(("pkg-config" ,pkg-config)))
5828 (home-page "http://www.freeciv.org/")
5829 (synopsis "Turn-based empire building strategy game")
5830 (description "Freeciv is a turn-based empire building strategy game
5831 inspired by the history of human civilization. The game commences in
5832 prehistory and your mission is to lead your tribe from the Stone Age
5833 into the Space Age.")
5834 (license license:gpl2+)))
5835
5836 (define-public no-more-secrets
5837 (package
5838 (name "no-more-secrets")
5839 (version "0.3.3")
5840 (source
5841 (origin
5842 (method git-fetch)
5843 (uri (git-reference
5844 (url "https://github.com/bartobri/no-more-secrets")
5845 (commit (string-append "v" version))))
5846 (file-name (git-file-name name version))
5847 (sha256
5848 (base32 "1zfv4qabikf8w9winsr4brxrdvs3f0d7xvydksyx8bydadsm2v2h"))))
5849 (build-system gnu-build-system)
5850 (arguments
5851 `(#:tests? #f
5852 #:make-flags (list "CC=gcc" "all-ncurses"
5853 (string-append "prefix="
5854 (assoc-ref %outputs "out")))
5855 #:phases
5856 (modify-phases %standard-phases
5857 (delete 'configure))))
5858 (inputs
5859 `(("ncurses" ,ncurses)))
5860 (home-page "https://github.com/bartobri/no-more-secrets")
5861 (synopsis "Recreation of data decryption effect in \"Sneakers\"")
5862 (description
5863 "@code{No More Secrets} provides a command line tool called \"nms\"
5864 that recreates the famous data decryption effect seen on screen in the 1992
5865 movie \"Sneakers\".
5866
5867 This command works on piped data. Pipe any ASCII or UTF-8 text to nms, and
5868 it will apply the hollywood effect, initially showing encrypted data, then
5869 starting a decryption sequence to reveal the original plaintext characters.")
5870 (license license:expat)))
5871
5872 (define-public megaglest-data
5873 (package
5874 (name "megaglest-data")
5875 (version "3.13.0")
5876 (source
5877 (origin
5878 (method url-fetch)
5879 (uri (string-append
5880 "https://github.com/MegaGlest/megaglest-data"
5881 "/releases/download/" version "/megaglest-data-"
5882 version ".tar.xz"))
5883 (sha256
5884 (base32
5885 "0ipgza33z89fw3si32iafm981f3fvm0zldvbxj29whghd2k3rpj3"))))
5886 (build-system cmake-build-system)
5887 (arguments
5888 `(#:tests? #f))
5889 (home-page "https://megaglest.org/")
5890 (synopsis "Data files for MegaGlest")
5891 (description "This package contains the data files required for MegaGlest.")
5892 (license license:cc-by-sa3.0)))
5893
5894 (define-public megaglest
5895 (package
5896 (name "megaglest")
5897 (version "3.13.0")
5898 (source
5899 (origin
5900 (method url-fetch)
5901 (uri (string-append
5902 "https://github.com/MegaGlest/megaglest-source"
5903 "/releases/download/" version "/megaglest-source-"
5904 version ".tar.xz"))
5905 (sha256
5906 (base32
5907 "1ffck3ii1wp5k3nn5p0ga06jgp7pzk4zw0xln3xim2w7qrxzdzh9"))))
5908 (build-system cmake-build-system)
5909 (inputs
5910 `(("curl" ,curl)
5911 ("fontconfig" ,fontconfig)
5912 ("ftgl" ,ftgl)
5913 ("glew" ,glew)
5914 ("libjpeg-turbo" ,libjpeg-turbo)
5915 ("megaglest-data" ,megaglest-data)
5916 ("mesa" ,mesa)
5917 ("miniupnpc" ,miniupnpc)
5918 ("openal" ,openal)
5919 ("libircclient" ,libircclient)
5920 ("libpng" ,libpng)
5921 ("libvorbis" ,libvorbis)
5922 ("lua" ,lua)
5923 ("sdl2" ,sdl2)
5924 ("wxwidgets" ,wxwidgets)))
5925 (native-inputs
5926 `(("cppunit" ,cppunit)
5927 ("pkg-config" ,pkg-config)))
5928 (arguments
5929 `(#:configure-flags
5930 (list (string-append "-DCUSTOM_DATA_INSTALL_PATH="
5931 (assoc-ref %build-inputs "megaglest-data")
5932 "/share/megaglest")
5933 "-DBUILD_MEGAGLEST_TESTS=ON")
5934 #:phases
5935 (modify-phases %standard-phases
5936 (add-after 'unpack 'fix-ini-search-path
5937 (lambda* (#:key outputs #:allow-other-keys)
5938 (substitute* "source/glest_game/global/config.cpp"
5939 (("/usr/share/megaglest/")
5940 (string-append (assoc-ref outputs "out")
5941 "/share/megaglest/"))))))
5942 #:test-target "megaglest_tests"))
5943 (home-page "https://megaglest.org/")
5944 (synopsis "3D real-time strategy (RTS) game")
5945 (description "MegaGlest is a cross-platform 3D real-time strategy (RTS)
5946 game, where you control the armies of one of seven different factions: Tech,
5947 Magic, Egypt, Indians, Norsemen, Persian or Romans.")
5948 (license license:gpl2+)))
5949
5950 (define-public freegish
5951 (let ((commit "8795cd7adc95957883f2d3465eb9036a774667a7")
5952 (revision "1"))
5953 (package
5954 (name "freegish")
5955 (version (string-append "0-" revision "." (string-take commit 9)))
5956 (source (origin
5957 (method git-fetch)
5958 (uri (git-reference
5959 (url "https://github.com/freegish/freegish")
5960 (commit commit)))
5961 (file-name (git-file-name name version))
5962 (sha256
5963 (base32
5964 "1p1zf5qqagmcpi1db2bs02cnalpy3qiymp6yzan7k1bhmv859gsx"))
5965 (modules '((guix build utils)))
5966 ;; The audio files in the "music" directory are licensed under
5967 ;; CC-BY-NC, so we delete them.
5968 (snippet
5969 '(begin
5970 (delete-file-recursively "music")
5971 #t))))
5972 (build-system cmake-build-system)
5973 (arguments
5974 `(#:tests? #f ; no tests included
5975 #:configure-flags
5976 (list "-DCMAKE_INSTALL_FHS=ON")
5977 #:phases
5978 (modify-phases %standard-phases
5979 (add-after 'unpack 'set-DATAPATH
5980 (lambda* (#:key outputs #:allow-other-keys)
5981 (substitute* "CMakeLists.txt"
5982 (("^option\\(INSTALL_FHS" line)
5983 (string-append "add_definitions(-DDATAPATH=\""
5984 (assoc-ref outputs "out") "/share/freegish\")\n"
5985 line)))
5986 #t)))))
5987 (inputs
5988 `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))
5989 ("openal" ,openal)
5990 ("libvorbis" ,libvorbis)
5991 ("libogg" ,libogg)
5992 ("mesa" ,mesa)
5993 ("libpng" ,libpng)
5994 ("zlib" ,zlib)))
5995 (home-page "https://github.com/freegish/freegish")
5996 (synopsis "Side-scrolling physics platformer with a ball of tar")
5997 (description "In FreeGish you control Gish, a ball of tar who lives
5998 happily with his girlfriend Brea, until one day a mysterious dark creature
5999 emerges from a sewer hole and pulls her below ground.")
6000 ;; The textures are available under the Expat license. All other assets
6001 ;; (including levels) are covered under CC-BY-SA or public domain. The
6002 ;; source code is under GPLv2+.
6003 (license (list license:gpl2+
6004 license:expat
6005 license:public-domain
6006 license:cc-by-sa3.0)))))
6007
6008 (define-public cdogs-sdl
6009 (package
6010 (name "cdogs-sdl")
6011 (version "0.8.0")
6012 (source
6013 (origin
6014 (method git-fetch)
6015 (uri (git-reference
6016 (url "https://github.com/cxong/cdogs-sdl")
6017 (commit version)))
6018 (file-name (git-file-name name version))
6019 (sha256
6020 (base32 "0vx37zb2iw7sfw5a2bs97ydlmb301nvy485ybdm8g46c5hn9s13c"))))
6021 (build-system cmake-build-system)
6022 (arguments
6023 `(#:configure-flags
6024 (list (string-append "-DCDOGS_DATA_DIR="
6025 (assoc-ref %outputs "out")
6026 "/share/cdogs-sdl/"))))
6027 (native-inputs
6028 `(("pkg-config" ,pkg-config)))
6029 (inputs
6030 `(("gtk+" ,gtk+)
6031 ("mesa" ,mesa)
6032 ("sdl2" ,sdl2)
6033 ("sdl2-image" ,sdl2-image)
6034 ("sdl2-mixer" ,sdl2-mixer)))
6035 (home-page "https://cxong.github.io/cdogs-sdl/")
6036 (synopsis "Classic overhead run-and-gun game")
6037 (description "C-Dogs SDL is a classic overhead run-and-gun game,
6038 supporting up to 4 players in co-op and deathmatch modes. Customize your
6039 player, choose from many weapons, and blast, slide and slash your way through
6040 over 100 user-created campaigns.")
6041 ;; GPLv2+ for code (includes files under BSD-2 and BSD-3),
6042 ;; CC0/CC-BY/CC-BY-SA for assets.
6043 (license (list license:gpl2+
6044 license:bsd-2
6045 license:bsd-3
6046 license:cc0
6047 license:cc-by3.0
6048 license:cc-by-sa3.0))))
6049
6050 (define-public kiki
6051 (package
6052 (name "kiki")
6053 (version "1.0.2")
6054 (source (origin
6055 (method url-fetch)
6056 (uri (string-append "mirror://sourceforge/kiki/kiki-src/"
6057 version "/kiki-" version "-src.tgz"))
6058 (sha256
6059 (base32
6060 "0ihjdsxbn8z3cz0gpcprafiipcqaiskgdnh1rhmw4qff8dszalbn"))
6061 (modules '((guix build utils)))
6062 (snippet
6063 '(begin
6064 (for-each delete-file (find-files "." "\\.dll$"))
6065 #t))
6066 (patches
6067 (search-patches "kiki-level-selection-crash.patch"
6068 "kiki-makefile.patch"
6069 "kiki-missing-includes.patch"
6070 "kiki-portability-64bit.patch"))))
6071 (build-system gnu-build-system)
6072 (arguments
6073 `(#:tests? #f ; there are no tests
6074 #:make-flags '("CXX=g++")
6075 #:phases
6076 (modify-phases %standard-phases
6077 (replace 'configure
6078 (lambda* (#:key inputs outputs #:allow-other-keys)
6079 (setenv "CPLUS_INCLUDE_PATH"
6080 (string-append (assoc-ref inputs "sdl-union")
6081 "/include/SDL:"
6082 (assoc-ref inputs "python")
6083 "/include/python2.7:"
6084 (or (getenv "CPLUS_INCLUDE_PATH") "")))
6085 (substitute* "src/main/main.cpp"
6086 (("#include <SDL.h>" line)
6087 (string-append line "
6088 #define K_INCLUDE_GLUT
6089 #include \"KIncludeTools.h\""))
6090 (("// initialize SDL" line)
6091 (string-append "glutInit(&argc,argv);\n" line)))
6092 (substitute* "src/main/KikiController.cpp"
6093 (("getenv\\(\"KIKI_HOME\"\\)")
6094 (string-append "\"" (assoc-ref outputs "out") "/share/kiki/\"")))
6095 (substitute* "linux/Makefile"
6096 (("CXXOPTS =" line)
6097 (string-append line " -fpermissive"))
6098 (("PYTHON_VERSION=.*") "PYTHON_VERSION=2.7")
6099 (("PYTHONHOME =.*")
6100 (string-append "PYTHONHOME = "
6101 (assoc-ref inputs "python")
6102 "/lib/python2.7/"))
6103 (("\\$\\(GLLIBS\\)" line)
6104 (string-append line " -lm -lpython2.7")))
6105 (substitute* "src/main/KikiPythonWidget.h"
6106 (("#define __KikiPythonWidget" line)
6107 (string-append line "\n#include \"KikiPython.h\"")))
6108 #t))
6109 (add-before 'build 'build-kodilib
6110 (lambda* (#:key make-flags #:allow-other-keys)
6111 (with-directory-excursion "kodilib/linux"
6112 (apply invoke "make" make-flags))))
6113 (add-after 'build-kodilib 'chdir
6114 (lambda _ (chdir "linux") #t))
6115 (replace 'install
6116 (lambda* (#:key outputs #:allow-other-keys)
6117 (let* ((out (assoc-ref outputs "out"))
6118 (bin (string-append out "/bin"))
6119 (share (string-append out "/share/kiki")))
6120 (mkdir-p bin)
6121 (mkdir-p share)
6122 (install-file "kiki" bin)
6123 (copy-recursively "../py" (string-append share "/py"))
6124 (copy-recursively "../sound" (string-append share "/sound"))
6125 #t))))))
6126 (inputs
6127 `(("glu" ,glu)
6128 ;; Kiki builds fine with freeglut 3.0.0 but segfaults on start.
6129 ("freeglut" ,freeglut-2.8)
6130 ("sdl-union" ,(sdl-union (list sdl
6131 sdl-mixer
6132 sdl-image)))
6133 ("python" ,python-2)))
6134 (native-inputs
6135 `(("swig" ,swig)))
6136 (home-page "http://kiki.sourceforge.net/")
6137 (synopsis "3D puzzle game")
6138 (description "Kiki the nano bot is a 3D puzzle game. It is basically a
6139 mixture of the games Sokoban and Kula-World. Your task is to help Kiki, a
6140 small robot living in the nano world, repair its maker.")
6141 ;; See <http://metadata.ftp-master.debian.org/changelogs/main/k/
6142 ;; kiki-the-nano-bot/kiki-the-nano-bot_1.0.2+dfsg1-4_copyright>
6143 ;; for a statement from the author.
6144 (license license:public-domain)))
6145
6146 (define-public teeworlds
6147 (package
6148 (name "teeworlds")
6149 (version "0.7.5")
6150 (source (origin
6151 (method git-fetch)
6152 (uri (git-reference
6153 (url "https://github.com/teeworlds/teeworlds")
6154 (commit version)
6155 ;; There are two submodules in datasrc/{languages,maps}
6156 (recursive? #t)))
6157 (file-name (git-file-name name version))
6158 (sha256
6159 (base32
6160 "1l19ksmimg6b8zzjy0skyhh7z11ql7n5gvilkv7ay5x2b9ndbqwz"))
6161 (modules '((guix build utils)
6162 (ice-9 ftw)
6163 (ice-9 regex)
6164 (srfi srfi-1)
6165 (srfi srfi-26)))
6166 (snippet ; remove bundled libraries except md5
6167 '(let ((base-dir "src/engine/external/"))
6168 (for-each (compose (cut delete-file-recursively <>)
6169 (cut string-append base-dir <>))
6170 (remove (cut string-match "(^.)|(^md5$)" <>)
6171 (scandir base-dir)))
6172 #t))))
6173 (build-system cmake-build-system)
6174 (arguments
6175 `(#:tests? #f ; no tests included
6176 #:phases
6177 (modify-phases %standard-phases
6178 (add-after 'unpack 'patch-paths
6179 (lambda* (#:key outputs #:allow-other-keys)
6180 ;; Embed path to assets.
6181 (substitute* "src/engine/shared/storage.cpp"
6182 (("#define DATA_DIR.*")
6183 (string-append "#define DATA_DIR \""
6184 (assoc-ref outputs "out")
6185 "/share/teeworlds/data"
6186 "\"")))
6187 #t)))))
6188 (inputs
6189 `(("freetype" ,freetype)
6190 ("glu" ,glu)
6191 ("json-parser" ,json-parser)
6192 ("mesa" ,mesa)
6193 ("pnglite" ,pnglite)
6194 ("sdl2" ,sdl2)
6195 ("sdl2-image" ,sdl2-image)
6196 ("sdl2-mixer" ,sdl2-mixer)
6197 ("wavpack" ,wavpack)
6198 ("openssl" ,openssl)
6199 ("zlib" ,zlib)))
6200 (native-inputs
6201 `(("python" ,python-wrapper)
6202 ("pkg-config" ,pkg-config)))
6203 (home-page "https://www.teeworlds.com")
6204 (synopsis "2D retro multiplayer shooter game")
6205 (description "Teeworlds is an online multiplayer game. Battle with up to
6206 16 players in a variety of game modes, including Team Deathmatch and Capture
6207 The Flag. You can even design your own maps!")
6208 (license (list license:bsd-3 license:cc-by-sa3.0)))) ; game+maps&languages
6209
6210 (define-public enigma
6211 (package
6212 (name "enigma")
6213 (version "1.21")
6214 (source (origin
6215 (method url-fetch)
6216 (uri (string-append "mirror://sourceforge/enigma-game/"
6217 "Release%20" version "/enigma-"
6218 version ".tar.gz"))
6219 (sha256
6220 (base32
6221 "00ffh9pypj1948pg3q9sjp1nmiabh52p5c8wpg9n1dcfgl3cywnq"))))
6222 (build-system gnu-build-system)
6223 (arguments
6224 `(#:configure-flags
6225 (list "--with-system-enet")
6226 #:phases
6227 (modify-phases %standard-phases
6228 (add-after 'unpack 'fix-build-with-new-gcc
6229 (lambda _
6230 ;; Fix build with GCC6 and later by avoiding comparing ifstream
6231 ;; to NULL. Can be removed for versions > 1.21.
6232 (substitute* "src/lev/Proxy.cc"
6233 (("ifs != NULL")
6234 "ifs"))
6235 #t))
6236 (add-after 'unpack 'find-sdl
6237 (lambda _
6238 (substitute* "configure"
6239 (("SDL_ttf.h") "SDL/SDL_ttf.h"))
6240 (substitute* '("tools/ttf2bmf.cc"
6241 "lib-src/enigma-core/ecl_font.cc"
6242 "lib-src/enigma-core/ecl_video.cc"
6243 "lib-src/enigma-core/ecl_buffer.hh"
6244 "src/SoundEngine.cc"
6245 "src/SoundEngine.hh"
6246 "src/MusicManager.cc"
6247 "src/MusicManager.hh"
6248 "src/d_models.cc"
6249 "src/main.cc"
6250 "src/network.cc")
6251 (("#include \"SDL_(image|ttf|mixer|types|syswm|mutex).h\"" line header)
6252 (string-append "#include \"SDL/SDL_" header ".h\"")))
6253 (substitute* "src/main.cc"
6254 (("#include <SDL_(image|ttf|mixer).h>" line header)
6255 (string-append "#include \"SDL/SDL_" header ".h\"")))
6256 #t)))))
6257 (inputs
6258 `(("xerces-c" ,xerces-c)
6259 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
6260 ("curl" ,curl)
6261 ("enet" ,enet)))
6262 (native-inputs
6263 `(("pkg-config" ,pkg-config)
6264 ("imagemagick" ,imagemagick)))
6265 (home-page "https://www.nongnu.org/enigma")
6266 (synopsis "Puzzle game with a dexterity component")
6267 (description "Enigma is a puzzle game with 550 unique levels. The object
6268 of the game is to find and uncover pairs of identically colored ‘Oxyd’ stones.
6269 Simple? Yes. Easy? Certainly not! Hidden traps, vast mazes, laser beams,
6270 and most of all, countless hairy puzzles usually block your direct way to the
6271 Oxyd stones. Enigma’s game objects (and there are hundreds of them, lest you
6272 get bored) interact in many unexpected ways, and since many of them follow the
6273 laws of physics (Enigma’s special laws of physics, that is), controlling them
6274 with the mouse isn’t always trivial.")
6275 (license license:gpl2+)))
6276
6277 (define-public chroma
6278 (package
6279 (name "chroma")
6280 (version "1.17")
6281 (source (origin
6282 (method url-fetch)
6283 (uri (string-append "http://level7.org.uk/chroma/download/chroma-"
6284 version ".tar.bz2"))
6285 (sha256
6286 (base32
6287 "047sf00x71xbmi8bqrhfbmr9bk89l2gbykkqsfpw4wz6yfjscs6y"))))
6288 (build-system gnu-build-system)
6289 (arguments
6290 `(#:tests? #f ; no tests included
6291 #:configure-flags '("CFLAGS=-fgnu89-inline"))) ; fix inlines
6292 (inputs
6293 `(("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
6294 ("freetype" ,freetype)
6295 ("ncurses" ,ncurses)
6296 ("fontconfig" ,fontconfig)
6297 ("libxft" ,libxft)))
6298 (native-inputs
6299 `(("pkg-config" ,pkg-config)))
6300 (home-page "http://level7.org.uk/chroma/")
6301 (synopsis "Abstract puzzle game")
6302 (description "Chroma is an abstract puzzle game. A variety of colourful
6303 shapes are arranged in a series of increasingly complex patterns, forming
6304 fiendish traps that must be disarmed and mysterious puzzles that must be
6305 manipulated in order to give up their subtle secrets. Initially so
6306 straightforward that anyone can pick it up and begin to play, yet gradually
6307 becoming difficult enough to tax even the brightest of minds.")
6308 (license license:gpl2+)))
6309
6310 (define-public fillets-ng
6311 (package
6312 (name "fillets-ng")
6313 (version "1.0.1")
6314 (source (origin
6315 (method url-fetch)
6316 (uri (string-append "mirror://sourceforge/fillets/"
6317 "Fish%20Fillets%20-%20Next%20Generation/"
6318 version "/fillets-ng-" version ".tar.gz"))
6319 (sha256
6320 (base32
6321 "1nljp75aqqb35qq3x7abhs2kp69vjcj0h1vxcpdyn2yn2nalv6ij"))))
6322 (build-system gnu-build-system)
6323 (arguments
6324 `(#:configure-flags
6325 (list (string-append "--with-lua="
6326 (assoc-ref %build-inputs "lua")))
6327 #:make-flags
6328 (list (string-append "CFLAGS=-I"
6329 (assoc-ref %build-inputs "sdl-union")
6330 "/include/SDL")
6331 (string-append "CXXFLAGS=-I"
6332 (assoc-ref %build-inputs "sdl-union")
6333 "/include/SDL"))
6334 #:phases
6335 (modify-phases %standard-phases
6336 ;; Lua 5.1 does not provide it.
6337 (add-after 'unpack 'do-not-link-with-lualib
6338 (lambda _
6339 (substitute* "configure"
6340 (("-llualib") ""))
6341 #t))
6342 (add-after 'install 'install-data
6343 (lambda* (#:key inputs outputs #:allow-other-keys)
6344 (let ((data (string-append (assoc-ref outputs "out")
6345 "/share/games/fillets-ng")))
6346 (mkdir-p data)
6347 (invoke "tar" "-xvf"
6348 (assoc-ref inputs "fillets-ng-data")
6349 "--strip-components=1"
6350 "-C" data)))))))
6351 (inputs
6352 `(("sdl-union" ,(sdl-union (list sdl
6353 sdl-mixer
6354 sdl-image
6355 sdl-ttf)))
6356 ("fribidi" ,fribidi)
6357 ("libx11" ,libx11)
6358 ("lua" ,lua-5.1)))
6359 (native-inputs
6360 `(("pkg-config" ,pkg-config)
6361 ("fillets-ng-data"
6362 ,(origin
6363 (method url-fetch)
6364 (uri (string-append "mirror://sourceforge/fillets/"
6365 "Fish%20Fillets%20-%20Next%20Generation/"
6366 version "/fillets-ng-data-" version ".tar.gz"))
6367 (sha256
6368 (base32
6369 "169p0yqh2gxvhdilvjc2ld8aap7lv2nhkhkg4i1hlmgc6pxpkjgh"))))))
6370 (home-page "http://fillets.sourceforge.net/")
6371 (synopsis "Puzzle game")
6372 (description "Fish Fillets NG is strictly a puzzle game. The goal in
6373 every of the seventy levels is always the same: find a safe way out. The fish
6374 utter witty remarks about their surroundings, the various inhabitants of their
6375 underwater realm quarrel among themselves or comment on the efforts of your
6376 fish. The whole game is accompanied by quiet, comforting music.")
6377 (license license:gpl2+)))
6378
6379 (define-public crawl
6380 (package
6381 (name "crawl")
6382 (version "0.26.1")
6383 (source
6384 (origin
6385 (method url-fetch)
6386 (uri (string-append "https://github.com/crawl/crawl/releases/download/"
6387 version "/stone_soup-" version "-nodeps.tar.xz"))
6388 (sha256
6389 (base32 "1d8p2np2q5951wqphq2f4dyvv976m2lh82b0qp7w9pp1h8zzi1ff"))
6390 (patches (search-patches "crawl-upgrade-saves.patch"))))
6391 (build-system gnu-build-system)
6392 (inputs
6393 `(("lua51" ,lua-5.1)
6394 ("ncurses" ,ncurses)
6395 ("sqlite" ,sqlite)
6396 ("zlib" ,zlib)))
6397 (native-inputs
6398 `(("bison" ,bison)
6399 ("flex" ,flex)
6400 ("perl" ,perl)
6401 ("python" ,python-wrapper)
6402 ("python-pyyaml" ,python-pyyaml)
6403 ("pkg-config" ,pkg-config)))
6404 (arguments
6405 `(#:make-flags
6406 (let* ((sqlite (assoc-ref %build-inputs "sqlite"))
6407 (out (assoc-ref %outputs "out")))
6408 (list (string-append "SQLITE_INCLUDE_DIR=" sqlite "/include")
6409 (string-append "prefix=" out)
6410 "SAVEDIR=~/.crawl"
6411 ;; Don't compile with SSE on systems which don't have it.
6412 ,@(match (%current-system)
6413 ((or "i686-linux" "x86_64-linux")
6414 '())
6415 (_ '("NOSSE=TRUE")))
6416 ;; don't build any bundled dependencies
6417 "BUILD_LUA="
6418 "BUILD_SQLITE="
6419 "BUILD_ZLIB="
6420 "-Csource"))
6421 #:phases
6422 (modify-phases %standard-phases
6423 (add-after 'unpack 'find-SDL-image
6424 (lambda _
6425 (substitute* "source/windowmanager-sdl.cc"
6426 (("SDL_image.h") "SDL2/SDL_image.h"))
6427 #t))
6428 (delete 'configure)
6429 (replace 'check
6430 (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
6431 (setenv "HOME" (getcwd))
6432 ;; Fake a terminal for the test cases.
6433 (setenv "TERM" "xterm-256color")
6434 ;; Run the tests that don't require a debug build.
6435 (apply invoke "make" "nondebugtest"
6436 (format #f "-j~d" (parallel-job-count))
6437 ;; Force command line build for test cases.
6438 (append make-flags '("GAME=crawl" "TILES="))))))))
6439 (synopsis "Roguelike dungeon crawler game")
6440 (description "Dungeon Crawl Stone Soup (also known as \"Crawl\" or DCSS
6441 for short) is a roguelike adventure through dungeons filled with dangerous
6442 monsters in a quest to find the mystifyingly fabulous Orb of Zot.")
6443 (home-page "https://crawl.develz.org")
6444 (license (list license:gpl2+
6445 license:bsd-2
6446 license:bsd-3
6447 license:cc0
6448 license:expat
6449 license:zlib
6450 license:asl2.0))))
6451
6452 ;; The linter here claims that patch file names should start with the package
6453 ;; name. But, in this case, the patches are inherited from crawl with the
6454 ;; "crawl-" prefix instead of "crawl-tiles-".
6455 (define-public crawl-tiles
6456 (package
6457 (inherit crawl)
6458 (name "crawl-tiles")
6459 (arguments
6460 (substitute-keyword-arguments
6461 (package-arguments crawl)
6462 ((#:make-flags flags)
6463 `(let ((dejavu (assoc-ref %build-inputs "font-dejavu")))
6464 (cons*
6465 (string-append "PROPORTIONAL_FONT=" dejavu
6466 "/share/fonts/truetype/DejaVuSans.ttf")
6467 (string-append "MONOSPACED_FONT=" dejavu
6468 "/share/fonts/truetype/DejaVuSansMono.ttf")
6469 "TILES=y"
6470 ;; Rename the executable to allow parallel installation with crawl.
6471 "GAME=crawl-tiles"
6472 ,flags)))))
6473 (inputs
6474 `(,@(package-inputs crawl)
6475 ("font-dejavu" ,font-dejavu)
6476 ("freetype6" ,freetype)
6477 ("glu" ,glu)
6478 ("libpng" ,libpng)
6479 ("sdl2" ,sdl2)
6480 ("sdl2-image" ,sdl2-image)
6481 ("sdl2-mixer" ,sdl2-mixer)))
6482 (native-inputs
6483 `(,@(package-native-inputs crawl)
6484 ("pngcrush" ,pngcrush)
6485 ("which" ,which)))
6486 (synopsis "Graphical roguelike dungeon crawler game")))
6487
6488 (define-public lugaru
6489 (package
6490 (name "lugaru")
6491 (version "1.2")
6492 (source (origin
6493 (method url-fetch)
6494 (uri (string-append "https://bitbucket.org/osslugaru/lugaru/downloads/"
6495 "lugaru-" version ".tar.xz"))
6496 (sha256
6497 (base32
6498 "15zgcshy22q51rm72zi6y9z7qlgnz5iw3gczjdlir4bqmxy4gspk"))))
6499 (build-system cmake-build-system)
6500 (arguments
6501 `(#:configure-flags
6502 (list "-DSYSTEM_INSTALL=ON")
6503 ;; no test target
6504 #:tests? #f))
6505 (native-inputs
6506 `(("pkg-config" ,pkg-config)))
6507 (inputs
6508 `(("sdl2" ,sdl2)
6509 ("glu" ,glu)
6510 ("libjpeg" ,libjpeg-turbo)
6511 ("libpng" ,libpng)
6512 ("openal" ,openal)
6513 ("vorbis" ,libvorbis)
6514 ("zlib" ,zlib)))
6515 (home-page "https://osslugaru.gitlab.io")
6516 (synopsis "Cross-platform third-person action game")
6517 (description "Lugaru is a third-person action game. The main character,
6518 Turner, is an anthropomorphic rebel bunny rabbit with impressive combat skills.
6519 In his quest to find those responsible for slaughtering his village, he uncovers
6520 a far-reaching conspiracy involving the corrupt leaders of the rabbit republic
6521 and the starving wolves from a nearby den. Turner takes it upon himself to
6522 fight against their plot and save his fellow rabbits from slavery.")
6523 (license (list license:gpl2+ ; code
6524 ;; assets:
6525 license:cc-by-sa3.0
6526 license:cc-by-sa4.0))))
6527
6528 (define-public 0ad-data
6529 (package
6530 (name "0ad-data")
6531 (version "0.0.23b-alpha")
6532 (source
6533 (origin
6534 (method url-fetch)
6535 (uri (string-append "https://releases.wildfiregames.com/0ad-"
6536 version "-unix-data.tar.xz"))
6537 (file-name (string-append name "-" version ".tar.xz"))
6538 (sha256
6539 (base32
6540 "04x7729hk6zw1xj3n4s4lvaviijsnbjf5rhzvjxlr5fygvg4l6z1"))
6541 (modules '((guix build utils)))
6542 (snippet
6543 #~(begin
6544 (for-each (lambda (name)
6545 (let* ((dir (string-append "binaries/data/mods/" name))
6546 (file (string-append dir "/" name ".zip"))
6547 (unzip #$(file-append unzip "/bin/unzip")))
6548 (invoke unzip "-d" dir file)
6549 (delete-file file)))
6550 '("mod" "public"))
6551 #t))))
6552 (build-system trivial-build-system)
6553 (native-inputs `(("tar" ,tar)
6554 ("xz" ,xz)))
6555 (arguments
6556 `(#:modules ((guix build utils))
6557 #:builder
6558 (begin
6559 (use-modules (guix build utils))
6560 (let ((out (assoc-ref %outputs "out"))
6561 (source (assoc-ref %build-inputs "source"))
6562 (tar (string-append (assoc-ref %build-inputs "tar") "/bin/tar"))
6563 (xz-path (string-append (assoc-ref %build-inputs "xz") "/bin")))
6564 (setenv "PATH" xz-path)
6565 (mkdir out)
6566 (invoke tar "xvf" source "-C" out "--strip=3")))))
6567 (synopsis "Data files for 0ad")
6568 (description "0ad-data provides the data files required by the game 0ad.")
6569 (home-page "https://play0ad.com")
6570 (license (list (license:fsdg-compatible
6571 "http://tavmjong.free.fr/FONTS/ArevCopyright.txt"
6572 "Similar to the license of the Bitstream Vera fonts.")
6573 (license:fsdg-compatible
6574 "https://www.gnome.org/fonts/#Final_Bitstream_Vera_Fonts")
6575 license:cc-by-sa3.0
6576 license:expat
6577 license:gfl1.0
6578 license:gpl2+
6579 license:gpl3+))))
6580
6581 (define-public 0ad
6582 (package
6583 (name "0ad")
6584 (version "0.0.23b-alpha")
6585 (source
6586 (origin
6587 (method url-fetch)
6588 (uri (string-append "https://releases.wildfiregames.com/0ad-"
6589 version "-unix-build.tar.xz"))
6590 (file-name (string-append name "-" version ".tar.xz"))
6591 (sha256
6592 (base32
6593 "0draa53xg69i5qhqym85658m45xhwkbiimaldj4sr3703rjgggq1"))))
6594 ;; A snippet here would cause a build failure because of timestamps
6595 ;; reset. See https://bugs.gnu.org/26734.
6596 (inputs
6597 `(("0ad-data" ,0ad-data)
6598 ("curl" ,curl)
6599 ("enet" ,enet)
6600 ("gloox" ,gloox)
6601 ("icu4c" ,icu4c)
6602 ("libpng" ,libpng)
6603 ("libsodium" ,libsodium)
6604 ("libvorbis" ,libvorbis)
6605 ("libxcursor" ,libxcursor)
6606 ("libxml2" ,libxml2)
6607 ("miniupnpc" ,miniupnpc)
6608 ("mozjs-38" ,mozjs-38)
6609 ("openal" ,openal)
6610 ("sdl2" ,sdl2)
6611 ("wxwidgets" ,wxwidgets)
6612 ("zlib" ,zlib)))
6613 (native-inputs
6614 `(("boost" ,boost)
6615 ("cmake" ,cmake-minimal)
6616 ("mesa" ,mesa)
6617 ("pkg-config" ,pkg-config)
6618 ("python-2" ,python-2)))
6619 (build-system gnu-build-system)
6620 (arguments
6621 `(#:make-flags '("config=release" "verbose=1" "-C" "build/workspaces/gcc")
6622 #:phases
6623 (modify-phases %standard-phases
6624 (add-after 'unpack 'delete-bundles
6625 (lambda _
6626 (delete-file-recursively "libraries/source/spidermonkey")
6627 #t))
6628 (add-after 'unpack 'fix-x11-includes
6629 (lambda _
6630 (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
6631 (("<Xlib.h>") "<X11/Xlib.h>"))
6632 (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
6633 (("<Xatom.h>") "<X11/Xatom.h>"))
6634 (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
6635 (("<Xcursor/Xcursor.h>") "<X11/Xcursor/Xcursor.h>"))
6636 #t))
6637 (replace 'configure
6638 (lambda* (#:key inputs outputs #:allow-other-keys)
6639 (let* ((jobs (number->string (parallel-job-count)))
6640 (out (assoc-ref outputs "out"))
6641 (lib (string-append out "/lib"))
6642 (data (string-append out "/share/0ad")))
6643 (setenv "JOBS" (string-append "-j" jobs))
6644 (setenv "CC" "gcc")
6645 (with-directory-excursion "build/workspaces"
6646 (invoke "./update-workspaces.sh"
6647 (string-append "--libdir=" lib)
6648 (string-append "--datadir=" data)
6649 ;; TODO: "--with-system-nvtt"
6650 "--with-system-mozjs38")))))
6651 (delete 'check)
6652 (replace 'install
6653 (lambda* (#:key inputs outputs #:allow-other-keys)
6654 (chdir "binaries")
6655 (let* ((out (assoc-ref outputs "out"))
6656 (bin (string-append out "/bin"))
6657 (lib (string-append out "/lib"))
6658 (data (string-append out "/share/0ad"))
6659 (applications (string-append out "/share/applications"))
6660 (pixmaps (string-append out "/share/pixmaps"))
6661 (0ad-data (assoc-ref inputs "0ad-data")))
6662 ;; data
6663 (copy-recursively "data" data)
6664 (for-each (lambda (file)
6665 (symlink (string-append 0ad-data "/" file)
6666 (string-append data "/" file)))
6667 '("config" "mods/mod" "mods/public" "tools"))
6668 ;; libraries
6669 (for-each (lambda (file)
6670 (install-file file lib))
6671 (find-files "system" "\\.so$"))
6672 ;; binaries
6673 (install-file "system/pyrogenesis" bin)
6674 (with-directory-excursion bin
6675 (symlink "pyrogenesis" "0ad"))
6676 ;; resources
6677 (with-directory-excursion "../build/resources"
6678 (install-file "0ad.desktop" applications)
6679 (install-file "0ad.png" pixmaps))
6680 #t)))
6681 (add-after 'install 'check
6682 (lambda _
6683 (with-directory-excursion "system"
6684 (invoke "./test")))))))
6685 (home-page "https://play0ad.com")
6686 (synopsis "3D real-time strategy game of ancient warfare")
6687 (description "0 A.D. is a real-time strategy (RTS) game of ancient
6688 warfare. It's a historically-based war/economy game that allows players to
6689 relive or rewrite the history of twelve ancient civilizations, each depicted
6690 at their peak of economic growth and military prowess.
6691
6692 0ad needs a window manager that supports 'Extended Window Manager Hints'.")
6693 (license (list license:bsd-2
6694 license:bsd-3
6695 license:expat
6696 license:gpl2+
6697 license:ibmpl1.0
6698 license:isc
6699 license:lgpl2.1
6700 license:lgpl3
6701 license:mpl2.0
6702 license:zlib))))
6703
6704 (define-public open-adventure
6705 (package
6706 (name "open-adventure")
6707 (version "1.9")
6708 (source
6709 (origin
6710 (method git-fetch)
6711 (uri (git-reference
6712 (url "https://gitlab.com/esr/open-adventure")
6713 (commit version)))
6714 (file-name (git-file-name name version))
6715 (sha256
6716 (base32 "123svzy7xczdklx6plbafp22yv9bcvwfibjk0jv2c9i22dfsr07f"))))
6717 (build-system gnu-build-system)
6718 (arguments
6719 `(#:make-flags (list "CC=gcc")
6720 #:phases
6721 (modify-phases %standard-phases
6722 (delete 'configure) ;no configure script
6723 (add-before 'build 'use-echo
6724 (lambda _
6725 (substitute* "tests/Makefile"
6726 (("/bin/echo") (which "echo")))
6727 #t))
6728 (add-after 'build 'build-manpage
6729 (lambda _
6730 ;; This target is missing a dependency
6731 (substitute* "Makefile"
6732 ((".adoc.6:" line)
6733 (string-append line " advent.adoc")))
6734 (invoke "make" ".adoc.6")))
6735 ;; There is no install target.
6736 (replace 'install
6737 (lambda* (#:key outputs #:allow-other-keys)
6738 (let* ((out (assoc-ref outputs "out"))
6739 (bin (string-append out "/bin"))
6740 (man (string-append out "/share/man/man6")))
6741 (install-file "advent" bin)
6742 (install-file "advent.6" man))
6743 #t)))))
6744 (native-inputs
6745 `(("asciidoc" ,asciidoc)
6746 ("libedit" ,libedit)
6747 ("pkg-config" ,pkg-config)
6748 ("python" ,python-wrapper)
6749 ("python-pyyaml" ,python-pyyaml)))
6750 (home-page "https://gitlab.com/esr/open-adventure")
6751 (synopsis "Colossal Cave Adventure")
6752 (description
6753 "The original Colossal Cave Adventure from 1976 was the origin of all
6754 text adventures, dungeon-crawl (computer) games, and computer-hosted
6755 roleplaying games. This is a forward port of the last version released by
6756 Crowther & Woods, its original authors, in 1995. It has been known as
6757 ``adventure 2.5'' and ``430-point adventure''.")
6758 (license license:bsd-2)))
6759
6760 (define-public open-adventure-2.5
6761 (package
6762 (inherit open-adventure)
6763 (version "2.5")
6764 (properties `((superseded . ,open-adventure)))))
6765
6766 (define-public tome4
6767 (package
6768 (name "tome4")
6769 (version "1.7.2")
6770 (synopsis "Single-player, RPG roguelike game set in the world of Eyal")
6771 (source
6772 (origin
6773 (method url-fetch)
6774 (uri (string-append "https://te4.org/dl/t-engine/t-engine4-src-"
6775 version ".tar.bz2"))
6776 (sha256
6777 (base32 "1xa0pdn9pggwf7hnqb87ya2qxqhjahkdjwf8cr2y01gixgrkj9lv"))
6778 (modules '((guix build utils)))
6779 (snippet
6780 '(begin
6781 (substitute* '("src/music.h" "src/tSDL.h")
6782 (("#elif defined(__FreeBSD__)" line)
6783 (string-append
6784 line " || defined(__GNUC__)")))
6785 (substitute* '("src/tgl.h")
6786 (("#include <GL/glext.h>") ""))
6787 #t))))
6788 (build-system gnu-build-system)
6789 (native-inputs
6790 `(("unzip" ,unzip)))
6791 (inputs
6792 `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
6793 ("glu" ,glu)
6794 ("premake4" ,premake4)
6795 ("openal" ,openal)
6796 ("vorbis" ,libvorbis)
6797 ("luajit" ,luajit)))
6798 (arguments
6799 `(#:make-flags
6800 (list (string-append "CC=" ,(cc-for-target))
6801 "config=release")
6802 ;; XXX: Building in parallel occasionally causes this build failure:
6803 ;; ../src/luajit2/src/host/buildvm.c:73:10: fatal error: buildvm_arch.h:
6804 ;; No such file or directory
6805 #:parallel-build? #f
6806 #:phases (modify-phases %standard-phases
6807 (delete 'bootstrap)
6808 (replace 'configure
6809 (lambda _
6810 (invoke "premake4" "gmake")
6811 #t))
6812 (add-after 'set-paths 'set-sdl-paths
6813 (lambda* (#:key inputs #:allow-other-keys)
6814 (setenv "CPATH"
6815 (string-append (assoc-ref inputs "sdl-union")
6816 "/include/SDL2:"
6817 (or (getenv "CPATH") "")))
6818 #t))
6819 (delete 'check)
6820 ;; premake doesn't provide install target
6821 (replace 'install
6822 (lambda* (#:key inputs outputs #:allow-other-keys)
6823 (let* ((out (assoc-ref outputs "out"))
6824 (usr (string-append out "/usr"))
6825 (bin (string-append out "/bin"))
6826 (licenses (string-append out "/share/licenses"))
6827 (documents (string-append out "/share/doc"))
6828 (pixmaps (string-append out "/share/pixmaps"))
6829 (icon "te4-icon.png")
6830 (data (string-append out "/share/" ,name))
6831 (applications (string-append
6832 out "/share/applications"))
6833 (unzip (string-append
6834 (assoc-ref inputs "unzip") "/bin/unzip"))
6835 (wrapper (string-append bin "/" ,name)))
6836 ;; icon
6837 (mkdir-p pixmaps)
6838 (invoke unzip "-j"
6839 (string-append
6840 "game/engines/te4-" ,version ".teae")
6841 (string-append
6842 "data/gfx/" icon) "-d" pixmaps)
6843 ;; game executable
6844 (install-file "t-engine" data)
6845 (mkdir-p bin)
6846 (with-output-to-file wrapper
6847 (lambda ()
6848 (display
6849 (string-append
6850 "#!/bin/sh\n"
6851 ;; No bootstrap code found,
6852 ;; defaulting to working directory
6853 ;; for engine code!
6854 "cd " data "\n"
6855 "exec -a tome4 ./t-engine \"$@\"\n"))))
6856 (chmod wrapper #o555)
6857 ;; licenses
6858 (for-each (lambda (file)
6859 (install-file file licenses))
6860 '("COPYING" "COPYING-MEDIA"))
6861 ;; documents
6862 (for-each (lambda (file)
6863 (install-file file documents))
6864 '("CONTRIBUTING" "CREDITS"))
6865 ;; data
6866 (copy-recursively "bootstrap" (string-append
6867 data "/bootstrap"))
6868 (copy-recursively "game" (string-append data "/game"))
6869 ;; launcher
6870 (mkdir-p applications)
6871 (make-desktop-entry-file
6872 (string-append applications "/" ,name ".desktop")
6873 #:name "ToME4"
6874 #:comment ,synopsis
6875 #:exec ,name
6876 #:icon icon
6877 #:categories '("Game" "RolePlaying")))
6878 #t)))))
6879 (home-page "https://te4.org")
6880 (description "Tales of Maj’Eyal (ToME) RPG, featuring tactical turn-based
6881 combat and advanced character building. Play as one of many unique races and
6882 classes in the lore-filled world of Eyal, exploring random dungeons, facing
6883 challenging battles, and developing characters with your own tailored mix of
6884 abilities and powers. With a modern graphical and customisable interface,
6885 intuitive mouse control, streamlined mechanics and deep, challenging combat,
6886 Tales of Maj’Eyal offers engaging roguelike gameplay for the 21st century.")
6887 (license license:gpl3+)))
6888
6889 (define-public quakespasm
6890 (package
6891 (name "quakespasm")
6892 (version "0.93.2")
6893 (source
6894 (origin
6895 (method url-fetch)
6896 (uri (string-append "mirror://sourceforge/quakespasm/Source/quakespasm-"
6897 version ".tgz"))
6898 (sha256
6899 (base32 "0qm0j5drybvvq8xadfyppkpk3rxqsxbywzm6iwsjwdf0iia3gss5"))))
6900 (arguments
6901 `(#:tests? #f
6902 #:make-flags '("CC=gcc"
6903 "MP3LIB=mpg123"
6904 "USE_CODEC_FLAC=1"
6905 "USE_CODEC_MIKMOD=1"
6906 "USE_SDL2=1"
6907 "-CQuake")
6908 #:phases (modify-phases %standard-phases
6909 (delete 'configure)
6910 (add-after 'unpack 'fix-makefile-paths
6911 (lambda* (#:key outputs #:allow-other-keys)
6912 (let ((out (assoc-ref outputs "out")))
6913 (mkdir-p (string-append out "/bin"))
6914 (substitute* "Quake/Makefile"
6915 (("/usr/local/games")
6916 (string-append out "/bin")))
6917 #t))))))
6918 (build-system gnu-build-system)
6919 (inputs `(("libmikmod" ,libmikmod)
6920 ("libvorbis" ,libvorbis)
6921 ("flac" ,flac)
6922 ("mesa" ,mesa)
6923 ("mpg123" ,mpg123)
6924 ("sdl2" ,sdl2)))
6925 (synopsis "First person shooter engine for Quake 1")
6926 (description "Quakespasm is a modern engine for id software's Quake 1.
6927 It includes support for 64 bit CPUs, custom music playback, a new sound driver,
6928 some graphical niceities, and numerous bug-fixes and other improvements.")
6929 (home-page "http://quakespasm.sourceforge.net/")
6930 (license license:gpl2+)))
6931
6932 (define-public vkquake
6933 (package
6934 (inherit quakespasm)
6935 (name "vkquake")
6936 (version "1.01.0")
6937 (source
6938 (origin
6939 (method git-fetch)
6940 (uri (git-reference
6941 (url "https://github.com/Novum/vkQuake")
6942 (commit version)))
6943 (file-name (git-file-name name version))
6944 (sha256
6945 (base32 "1iwin8j5kbyrknbkhjgpy8nmm7pxqzr0daa9gn7p38qhg2mh0a39"))))
6946 (arguments
6947 `(#:make-flags
6948 (let ((vulkanlib (string-append (assoc-ref %build-inputs
6949 "vulkan-loader") "/lib")))
6950 (list "CC=gcc"
6951 "MP3LIB=mpg123"
6952 "USE_CODEC_FLAC=1"
6953 "USE_CODEC_MIKMOD=1"
6954 "USE_SDL2=1"
6955 (string-append "LDFLAGS=-Wl,-rpath=" vulkanlib)
6956 "-CQuake"))
6957 #:phases (modify-phases %standard-phases
6958 (add-after 'unpack 'patch-for-new-vulkan
6959 (lambda _
6960 ;; Mimic upstream commit a869a22d9b51c68e for
6961 ;; compatibility with newer vulkan-headers.
6962 (substitute* "Quake/gl_rmisc.c"
6963 (("VK_DYNAMIC_STATE_RANGE_SIZE")
6964 "3"))
6965 #t))
6966 (delete 'configure)
6967 (add-after 'unpack 'fix-makefile-paths
6968 (lambda* (#:key outputs #:allow-other-keys)
6969 (let ((vulkan (assoc-ref %build-inputs
6970 "vulkan-loader"))
6971 (out (assoc-ref outputs "out")))
6972 (mkdir-p (string-append out "/bin"))
6973 (substitute* "Quake/Makefile" ((" /usr")
6974 (string-append " " out)))
6975 (substitute* "Quake/Makefile" (("/games")
6976 (string-append "/bin")))
6977 (substitute* "Quake/Makefile" (("..VULKAN_SDK.") vulkan))
6978 #t))))
6979 ,@(strip-keyword-arguments '(#:make-flags #:phases)
6980 (package-arguments quakespasm))))
6981 (inputs `(("vulkan-headers" ,vulkan-headers)
6982 ("vulkan-loader" ,vulkan-loader)
6983 ,@(package-inputs quakespasm)))
6984 (description "vkquake is a modern engine for id software's Quake 1.
6985 It includes support for 64 bit CPUs, custom music playback, a new sound driver,
6986 some graphical niceities, and numerous bug-fixes and other improvements.")
6987 (home-page "https://github.com/Novum/vkQuake")))
6988
6989 (define-public yamagi-quake2
6990 (package
6991 (name "yamagi-quake2")
6992 (version "7.45")
6993 (source
6994 (origin
6995 (method url-fetch)
6996 (uri (string-append "https://deponie.yamagi.org/quake2/quake2-"
6997 version ".tar.xz"))
6998 (sha256
6999 (base32 "0rgz8x7lzd0zb0xqd0gvnf2641nr9xpfm6v14mgh99hspxklaln7"))))
7000 (build-system gnu-build-system)
7001 (arguments
7002 `(#:tests? #f
7003 #:make-flags
7004 (list "CC=gcc"
7005 ;; link openAL instead of using dlopen at runtime
7006 "DLOPEN_OPENAL=\"no\""
7007 ;; an optional directory where it will look for quake2 data files
7008 ;; in addition to the current working directory
7009 "WITH_SYSTEMWIDE=yes"
7010 "WITH_SYSTEMDIR=\"/opt/quake2\"")
7011 #:phases
7012 (modify-phases %standard-phases
7013 (delete 'configure)
7014 (replace 'install
7015 (lambda* (#:key outputs #:allow-other-keys)
7016 (let ((out (assoc-ref outputs "out")))
7017 (mkdir-p (string-append out "/lib"))
7018 (mkdir-p (string-append out "/bin"))
7019 ;; The yamagi-quake2 binary must be in the same directory
7020 ;; as it's engine libraries, but symlinking it to /bin is okay
7021 ;; https://github.com/yquake2/yquake2/blob/master/stuff/packaging.md
7022 (copy-recursively "release"
7023 (string-append out "/lib/yamagi-quake2"))
7024 (symlink (string-append out "/lib/yamagi-quake2/quake2")
7025 (string-append out "/bin/yamagi-quake2"))
7026 (symlink (string-append out "/lib/yamagi-quake2/q2ded")
7027 (string-append out "/bin/yamagi-q2ded"))))))))
7028 (native-inputs
7029 `(("pkg-config" ,pkg-config)))
7030 (inputs
7031 `(("curl" ,curl-minimal)
7032 ("libvorbis" ,libvorbis)
7033 ("mesa" ,mesa)
7034 ("openal" ,openal)
7035 ("sdl2" ,sdl2)
7036 ("zlib" ,zlib)))
7037 (synopsis "First person shooter engine based on quake2")
7038 (description "Yamagi Quake II is an enhanced client for id Software's Quake II.
7039 The main focus is an unchanged single player experience like back in 1997,
7040 thus the gameplay and the graphics are unaltered. However the user may use one
7041 of the unofficial retexturing packs. In comparison with the official client,
7042 over 1000 bugs were fixed and an extensive code audit done,
7043 making Yamagi Quake II one of the most solid Quake II implementations available.")
7044 (home-page "https://www.yamagi.org/quake2/")
7045 (license (list license:gpl2+ ; game and server
7046 (license:non-copyleft ; info-zip
7047 "file://LICENSE"
7048 "See Info-Zip section.")
7049 license:public-domain)))) ; stb
7050
7051 (define-public nudoku
7052 (package
7053 (name "nudoku")
7054 (version "2.1.0")
7055 (source
7056 (origin
7057 (method git-fetch)
7058 (uri (git-reference
7059 (url "https://github.com/jubalh/nudoku")
7060 (commit version)))
7061 (file-name (git-file-name name version))
7062 (sha256
7063 (base32 "12v00z3p0ymi8f3w4b4bgl4c76irawn3kmd147r0ap6s9ssx2q6m"))))
7064 (build-system gnu-build-system)
7065 (native-inputs
7066 `(("autoconf" ,autoconf)
7067 ("automake" ,automake)
7068 ("gettext" ,gettext-minimal)
7069 ("pkg-config" ,pkg-config)))
7070 (inputs
7071 `(("ncurses" ,ncurses)))
7072 (home-page "https://jubalh.github.io/nudoku/")
7073 (synopsis "Sudoku for your terminal")
7074 (description "Nudoku is a ncurses-based Sudoku game for your terminal.")
7075 (license license:gpl3+)))
7076
7077 (define-public the-butterfly-effect
7078 (package
7079 (name "the-butterfly-effect")
7080 (version "0.9.3.1")
7081 (source
7082 (origin
7083 (method git-fetch)
7084 (uri (git-reference
7085 (url "https://github.com/the-butterfly-effect/tbe")
7086 (commit (string-append "v" version))))
7087 (file-name (git-file-name name version))
7088 (sha256
7089 (base32
7090 "1ag2cp346f9bz9qy6za6q54id44d2ypvkyhvnjha14qzzapwaysj"))))
7091 (build-system gnu-build-system)
7092 (arguments
7093 `(#:phases
7094 (modify-phases %standard-phases
7095 (delete 'configure)
7096 ;; There is no "install" phase. By default, tbe is installed
7097 ;; in the build directory. Provide our own installation.
7098 (replace 'install
7099 (lambda* (#:key outputs #:allow-other-keys)
7100 (let* ((out (assoc-ref outputs "out"))
7101 (bin (string-append out "/bin"))
7102 (share (string-append out "/share")))
7103 (install-file "usr/games/tbe" bin)
7104 (mkdir-p share)
7105 (copy-recursively "usr/share" share)
7106 #t))))
7107 ;; Test suite requires a running Xorg server. Even when
7108 ;; provided, it fails with "D-Bus library appears to be
7109 ;; incorrectly set up; failed to read machine uuid: Failed to
7110 ;; open "/etc/machine-id": No such file or directory" along
7111 ;; with multiple "QPainter:: ... Painter not active" warnings.
7112 #:tests? #f))
7113 (inputs
7114 `(("qtbase" ,qtbase)
7115 ("qtsvg" ,qtsvg)))
7116 (native-inputs
7117 `(("cmake" ,cmake-minimal)
7118 ("gettext-minimal" ,gettext-minimal)
7119 ("qttools" ,qttools)))
7120 (synopsis "Realistic physics puzzle game")
7121 (description "The Butterfly Effect (tbe) is a game that uses
7122 realistic physics simulations to combine lots of simple mechanical
7123 elements to achieve a simple goal in the most complex way possible.")
7124 (home-page "http://the-butterfly-effect.org/")
7125 ;; Main license is GPL2-only. However, artwork is distributed
7126 ;; under various licenses, listed here.
7127 (license (list license:gpl2 license:public-domain license:expat
7128 license:cc-by-sa3.0 license:gpl3+ license:wtfpl2))))
7129
7130 (define-public pioneer
7131 (package
7132 (name "pioneer")
7133 (version "20210203")
7134 (source (origin
7135 (method git-fetch)
7136 (uri (git-reference
7137 (url "https://github.com/pioneerspacesim/pioneer")
7138 (commit version)))
7139 (file-name (git-file-name name version))
7140 (sha256
7141 (base32
7142 "1zyi1xyghj99hz8fa6dywpscj6flp04fspnlgxbivf3rgmnxflg7"))))
7143 (build-system cmake-build-system)
7144 (native-inputs
7145 `(("pkg-config" ,pkg-config)))
7146 (inputs
7147 `(("assimp" ,assimp)
7148 ("curl" ,curl)
7149 ("freetype" ,freetype)
7150 ("glew" ,glew)
7151 ("glu" ,glu)
7152 ("libpng" ,libpng)
7153 ("libsigc++" ,libsigc++)
7154 ("libvorbis" ,libvorbis)
7155 ("lua" ,lua-5.2) ;not compatible with 5.3
7156 ("mesa" ,mesa)
7157 ("sdl" ,(sdl-union (list sdl2 sdl2-image)))))
7158 (arguments
7159 `(#:tests? #f ;tests are broken
7160 #:configure-flags (list "-DUSE_SYSTEM_LIBLUA:BOOL=YES"
7161 (string-append "-DPIONEER_DATA_DIR="
7162 %output "/share/games/pioneer"))))
7163 (home-page "https://pioneerspacesim.net")
7164 (synopsis "Game of lonely space adventure")
7165 (description
7166 "Pioneer is a space adventure game set in our galaxy at the turn of the
7167 31st century. The game is open-ended, and you are free to eke out whatever
7168 kind of space-faring existence you can think of. Look for fame or fortune by
7169 exploring the millions of star systems. Turn to a life of crime as a pirate,
7170 smuggler or bounty hunter. Forge and break alliances with the various
7171 factions fighting for power, freedom or self-determination. The universe is
7172 whatever you make of it.")
7173 (license license:gpl3)))
7174
7175 (define-public badass
7176 (let ((commit "3c3cd669b4fc8f73a102e3702788f7b28dc47dbb")
7177 (revision "0"))
7178 (package
7179 (name "badass")
7180 (version (git-version "0.0" revision commit))
7181 (source (origin
7182 (method git-fetch)
7183 (uri (git-reference
7184 (url "https://github.com/umayr/badass")
7185 (commit commit)))
7186 (file-name (git-file-name name version))
7187 (sha256
7188 (base32
7189 "05c9vdcb5ym3z0n5ll3v39mw4yl9jcjnlydmn0yl89ai9pv71zb6"))))
7190 (build-system go-build-system)
7191 (arguments
7192 '(#:import-path "github.com/umayr/badass"))
7193 (synopsis "Hacking contribution graphs in git")
7194 (description
7195 "Badass generates false commits for a range of dates, essentially
7196 hacking the gamification of contribution graphs on platforms such as
7197 Github or Gitlab.")
7198 (home-page "https://github.com/umayr/badass")
7199 (license license:expat))))
7200
7201 (define-public colobot
7202 (package
7203 (name "colobot")
7204 (version "0.1.12-alpha")
7205 (source
7206 (origin
7207 (method git-fetch)
7208 (uri (git-reference
7209 (url "https://github.com/colobot/colobot")
7210 (commit (string-append "colobot-gold-" version))
7211 (recursive? #t))) ;for "data/" subdir
7212 (file-name (git-file-name name version))
7213 (sha256
7214 (base32
7215 "1c181cclkrnspgs07lvndg2c81cjq3smkv7qim8c470cj88rcrp2"))))
7216 (build-system cmake-build-system)
7217 (arguments
7218 `(#:tests? #f ;no test
7219 #:phases
7220 (modify-phases %standard-phases
7221 (add-after 'unpack 'make-git-checkout-writable
7222 (lambda _
7223 (for-each make-file-writable (find-files "."))
7224 #t))
7225 (add-after 'unpack 'fix-directories
7226 (lambda _
7227 (substitute* "CMakeLists.txt"
7228 (("(\\$\\{CMAKE_INSTALL_PREFIX\\})/games" _ prefix)
7229 (string-append prefix "/bin"))
7230 (("(\\$\\{CMAKE_INSTALL_PREFIX\\}/share)/games/colobot" _ prefix)
7231 (string-append prefix "/colobot")))
7232 #t))
7233 (add-after 'fix-directories 'install-music
7234 ;; Retrieve and install music files.
7235 (lambda* (#:key inputs #:allow-other-keys)
7236 ;; Installation process tries to download music files using
7237 ;; "wget" if not already present. Since we are going another
7238 ;; route, skip "wget" command check.
7239 (substitute* "data/music/CMakeLists.txt"
7240 (("find_program\\(WGET wget\\)") ""))
7241 ;; Populate "music/" directory.
7242 (let ((data (assoc-ref inputs "colobot-music")))
7243 (invoke "tar" "-xvf" data "-Cdata/music"))
7244 #t)))))
7245 (native-inputs
7246 `(("colobot-music"
7247 ,(origin
7248 (method url-fetch)
7249 (uri (string-append "https://colobot.info/files/music/"
7250 "colobot-music_ogg_" version ".tar.gz"))
7251 (sha256
7252 (base32
7253 "1s86cd36rwkff329mb1ay1wi5qqyi35564ppgr3f4qqz9wj9vs2m"))))
7254 ("gettext" ,gettext-minimal)
7255 ("librsvg" ,librsvg)
7256 ("po4a" ,po4a)
7257 ("python" ,python-wrapper)))
7258 (inputs
7259 `(("boost" ,boost)
7260 ("glew" ,glew)
7261 ("libogg" ,libogg)
7262 ("libpng" ,libpng)
7263 ("libsndfile" ,libsndfile)
7264 ("libvorbis" ,libvorbis)
7265 ("openal" ,openal)
7266 ("physfs" ,physfs)
7267 ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-ttf)))))
7268 (synopsis "Educational programming strategy game")
7269 (description "Colobot: Gold Edition is a real-time strategy game, where
7270 you can program your units (bots) in a language called CBOT, which is similar
7271 to C++ and Java. Your mission is to find a new planet to live and survive.
7272 You can save humanity and get programming skills!")
7273 (home-page "https://colobot.info")
7274 (license license:gpl3+)))
7275
7276 (define-public gzdoom
7277 (package
7278 (name "gzdoom")
7279 (version "4.3.2")
7280 (source
7281 (origin
7282 (method git-fetch)
7283 (uri (git-reference
7284 (url "https://github.com/coelckers/gzdoom")
7285 (commit (string-append "g" version))))
7286 (file-name (git-file-name name version))
7287 (sha256
7288 (base32 "0i4hyg72z84fc6ca2ic9q82q5cbgrbd7bynl3kpkypxvyasq08wz"))
7289 (patches (search-patches "gzdoom-search-in-installed-share.patch"
7290 "gzdoom-find-system-libgme.patch"))
7291 (modules '((guix build utils)))
7292 (snippet
7293 '(begin
7294 ;; Remove some bundled libraries. XXX There are more, but removing
7295 ;; them would require, at least, patching the build system.
7296 (with-directory-excursion "libraries"
7297 (delete-file-recursively "bzip2")
7298 (delete-file-recursively "game-music-emu")
7299 (delete-file-recursively "jpeg")
7300 (delete-file-recursively "zlib"))
7301 #t))))
7302 (arguments
7303 '(#:tests? #f
7304 #:configure-flags
7305 (let ((out (assoc-ref %outputs "out")))
7306 (list
7307 (string-append
7308 "-DCMAKE_CXX_FLAGS:="
7309 "-DSHARE_DIR=\\\"" out "/share/\\\" "
7310 "-DGUIX_OUT_PK3=\\\"" out "/share/games/doom\\\"")
7311
7312 ;; The build requires some extra convincing not to use the bundled
7313 ;; libgme previously deleted in the soure snippet.
7314 "-DFORCE_INTERNAL_GME=OFF"
7315
7316 ;; Link libraries at build time instead of loading them at run time.
7317 "-DDYN_OPENAL=OFF"
7318 "-DDYN_FLUIDSYNTH=OFF"
7319 "-DDYN_GTK=OFF"
7320 "-DDYN_MPG123=OFF"
7321 "-DDYN_SNDFILE=OFF"))
7322 #:phases
7323 (modify-phases %standard-phases
7324 (add-before 'configure 'fix-referenced-paths
7325 (lambda* (#:key inputs outputs #:allow-other-keys)
7326 (let ((fluid-3 (assoc-ref inputs "fluid-3"))
7327 (timidity++ (assoc-ref inputs "timidity++"))
7328 (out (assoc-ref outputs "out")))
7329
7330 (substitute*
7331 "src/CMakeLists.txt"
7332 (("COMMAND /bin/sh")
7333 (string-append "COMMAND " (which "sh"))))
7334
7335 (substitute*
7336 "libraries/zmusic/mididevices/music_fluidsynth_mididevice.cpp"
7337 (("/usr/share/sounds/sf2/FluidR3_GM.sf2")
7338 (string-append fluid-3 "/share/soundfonts/FluidR3Mono_GM.sf3")))
7339
7340 (substitute*
7341 "libraries/zmusic/mididevices/music_timiditypp_mididevice.cpp"
7342 (("exename = \"timidity\"")
7343 (string-append "exename = \"" timidity++ "/bin/timidity\"")))
7344 #t))))))
7345 (build-system cmake-build-system)
7346 (inputs `(("bzip2" ,bzip2)
7347 ("fluid-3" ,fluid-3)
7348 ("fluidsynth" ,fluidsynth)
7349 ("gtk+3" ,gtk+)
7350 ("libgme" ,libgme)
7351 ("libjpeg" ,libjpeg-turbo)
7352 ("libsndfile" ,libsndfile)
7353 ("mesa" ,mesa)
7354 ("mpg123" ,mpg123)
7355 ("openal" ,openal)
7356 ("sdl2" ,sdl2)
7357 ("timidity++" ,timidity++)
7358 ("zlib" ,zlib)))
7359 (native-inputs `(("pkg-config" ,pkg-config)
7360 ("unzip" ,unzip)))
7361 (synopsis "Modern Doom 2 source port")
7362 (description "GZdoom is a port of the Doom 2 game engine, with a modern
7363 renderer. It improves modding support with ZDoom's advanced mapping features
7364 and the new ZScript language. In addition to Doom, it supports Heretic, Hexen,
7365 Strife, Chex Quest, and fan-created games like Harmony, Hacx and Freedoom.")
7366 (home-page "https://zdoom.org/index")
7367 ;; The source uses x86 assembly
7368 (supported-systems '("x86_64-linux" "i686-linux"))
7369 (license (list license:gpl3+ ; gzdoom game
7370 license:lgpl3+ ; gzdoom renderer
7371 license:expat ; gdtoa
7372 (license:non-copyleft ; modified dumb
7373 "file://dumb/licence.txt"
7374 "Dumb license, explicitly GPL compatible.")))))
7375
7376 (define-public odamex
7377 (package
7378 (name "odamex")
7379 (version "0.8.3")
7380 (source
7381 (origin
7382 (method url-fetch)
7383 (uri (string-append
7384 "mirror://sourceforge/odamex/Odamex/" version "/"
7385 "odamex-src-" version ".tar.gz"))
7386 (sha256
7387 (base32 "0f887g87bmcq4dpcga7xc2mpxs947dkbc934ir9xs55gz6z13q96"))))
7388 (build-system cmake-build-system)
7389 (arguments `(#:tests? #f)) ; no tests
7390 (inputs
7391 `(("sdl" ,sdl)
7392 ("sdl-mixer" ,sdl-mixer)
7393 ("zlib" ,zlib)
7394 ("libpng" ,libpng)
7395 ("alsa-lib" ,alsa-lib)))
7396 (home-page "https://odamex.net/")
7397 (synopsis "Multiplayer Doom port")
7398 (description "Odamex is a modification of the Doom engine that
7399 allows players to easily join servers dedicated to playing Doom
7400 online.")
7401 (license license:gpl2+)))
7402
7403 (define-public chocolate-doom
7404 (package
7405 (name "chocolate-doom")
7406 (version "3.0.1")
7407 (source (origin
7408 (method url-fetch)
7409 (uri (string-append "https://www.chocolate-doom.org/downloads/"
7410 version
7411 "/chocolate-doom-"
7412 version
7413 ".tar.gz"))
7414 (sha256
7415 (base32
7416 "1iy8rx7kjvi1zjiw4zh77szzmd1sgpqajvbhprh1sj93fhbxcdfl"))))
7417 (build-system gnu-build-system)
7418 (inputs `(("sdl2-net" ,sdl2-net)
7419 ("sdl2-mixer" , sdl2-mixer)
7420 ("sdl2" ,sdl2)))
7421 (native-inputs
7422 `(("pkg-config" ,pkg-config)))
7423 (synopsis "Doom source port preserving the look, feel, and bugs of vanilla
7424 Doom")
7425 (description
7426 "Chocolate Doom takes a different approach to other source ports. Its
7427 aim is to accurately reproduce the experience of playing Vanilla Doom. It is
7428 a conservative, historically accurate Doom source port, which is compatible
7429 with the thousands of mods and levels that were made before the Doom source
7430 code was released. Rather than flashy new graphics, Chocolate Doom's main
7431 features are its accurate reproduction of the game as it was played in the
7432 1990s. The project is developed around a carefully-considered philosophy that
7433 intentionally restricts which features may be added (and rejects any that
7434 affect gameplay).")
7435 (home-page "https://www.chocolate-doom.org/wiki/index.php/Chocolate_Doom")
7436 (license license:gpl2)))
7437
7438 (define-public crispy-doom
7439 (package
7440 (inherit chocolate-doom)
7441 (name "crispy-doom")
7442 (version "5.8.0")
7443 (source (origin
7444 (method git-fetch)
7445 (uri (git-reference
7446 (url "https://github.com/fabiangreffrath/crispy-doom")
7447 (commit (string-append "crispy-doom-" version))))
7448 (file-name (git-file-name name version))
7449 (sha256
7450 (base32 "1b6gn0dysv631jynh769whww9xcss1gms78sz3nrn855q1dsvcb4"))))
7451 (native-inputs
7452 (append
7453 (package-native-inputs chocolate-doom)
7454 `(("automake" ,automake)
7455 ("autoreconf" ,autoconf))))
7456 (arguments
7457 `(#:phases
7458 (modify-phases %standard-phases
7459 (replace 'bootstrap
7460 ;; The bundled autogen.sh script unconditionally runs ./configure.
7461 (lambda _ (invoke "autoreconf" "-vif"))))))
7462 (synopsis "Limit-removing enhanced-resolution Doom source port based on
7463 Chocolate Doom")
7464 (description
7465 "Crispy Doom is a friendly fork of Chocolate Doom that provides a higher
7466 display resolution, removes the static limits of the Doom engine and offers
7467 further optional visual, tactical and physical enhancements while remaining
7468 entirely config file, savegame, netplay and demo compatible with the
7469 original.")
7470 (home-page "https://www.chocolate-doom.org/wiki/index.php/Crispy_Doom")))
7471
7472 (define shlomif-cmake-modules
7473 (origin
7474 (method url-fetch)
7475 (uri (string-append "https://bitbucket.org/shlomif/shlomif-cmake-modules/"
7476 "raw/c505713d7a7cda608f97f01577e5868a711b883e/"
7477 "shlomif-cmake-modules/Shlomif_Common.cmake"))
7478 (sha256
7479 (base32 "0kx9s1qqhhzprp1w3b67xmsns0n0v506bg5hgrshxaxpy6lqiwb2"))))
7480
7481 (define-public rinutils
7482 (package
7483 (name "rinutils")
7484 (version "0.2.0")
7485 (source (origin
7486 (method git-fetch)
7487 (uri (git-reference
7488 (url "https://github.com/shlomif/rinutils")
7489 (commit version)))
7490 (file-name (git-file-name name version))
7491 (sha256
7492 (base32
7493 "1fpxyg86ggv0h7j8aarjjxrvwlj7jycd3bw066c0dwkq2fszxsf2"))))
7494 (native-inputs
7495 `(("perl" ,perl)
7496 ;; The following is only needed for tests.
7497 ("perl-file-find-object" ,perl-file-find-object)
7498 ("perl-test-differences" ,perl-test-differences)
7499 ("perl-class-xsaccessor" ,perl-class-xsaccessor)
7500 ("perl-io-all" ,perl-io-all)
7501 ("perl-test-runvalgrind" ,perl-test-runvalgrind)
7502 ("cmake-rules" ,shlomif-cmake-modules)
7503 ("pkg-config" ,pkg-config)))
7504 (inputs
7505 `(("cmocka" ,cmocka)
7506 ("perl-env-path" ,perl-env-path)
7507 ("perl-inline" ,perl-inline)
7508 ("perl-inline-c" ,perl-inline-c)
7509 ("perl-string-shellquote" ,perl-string-shellquote)
7510 ("perl-test-trailingspace" ,perl-test-trailingspace)
7511 ("perl-file-find-object-rule" ,perl-file-find-object-rule)
7512 ("perl-text-glob" ,perl-text-glob)
7513 ("perl-number-compare" ,perl-number-compare)
7514 ("perl-moo" ,perl-moo)))
7515 (arguments
7516 `(#:phases
7517 (modify-phases %standard-phases
7518 (add-after 'unpack 'fix-build-env
7519 (lambda* (#:key inputs #:allow-other-keys)
7520 (use-modules (guix build utils))
7521 (let* ((cmake-rules (assoc-ref inputs "cmake-rules")))
7522 (copy-file cmake-rules
7523 (string-append "cmake/"
7524 (strip-store-file-name cmake-rules)))
7525 #t)))
7526 (replace 'check
7527 (lambda _
7528 (with-directory-excursion "../source"
7529 (setenv "FCS_TEST_BUILD" "1")
7530 (setenv "RINUTILS_TEST_BUILD" "1")
7531 ;; TODO: Run tests after setting RINUTILS_TEST_TIDY to `1',
7532 ;; which requires tidy-all.
7533 ;; (setenv "RINUTILS_TEST_TIDY" "1")
7534 (invoke "perl" "CI-testing/continuous-integration-testing.pl")))))))
7535 (build-system cmake-build-system)
7536 (home-page "https://www.shlomifish.org/open-source/projects/")
7537 (synopsis "C11 / gnu11 utilities C library")
7538 (description "This package provides C11 / gnu11 utilities C library")
7539 (license license:expat)))
7540
7541 (define-public fortune-mod
7542 (package
7543 (name "fortune-mod")
7544 (version "2.28.0")
7545 (source
7546 (origin
7547 (method git-fetch)
7548 (uri (git-reference
7549 (url "https://github.com/shlomif/fortune-mod")
7550 (commit (string-append "fortune-mod-" version))))
7551 (file-name (git-file-name name version))
7552 (sha256
7553 (base32 "1ppzgnffgdcmq6fq4gmdq2ig10ip2bnfgklkb3i8nc6bdxm7pb89"))))
7554 (build-system cmake-build-system)
7555 (arguments
7556 `(#:test-target "check"
7557 #:phases
7558 (modify-phases %standard-phases
7559 (add-after 'unpack 'fix-build-env
7560 (lambda* (#:key inputs #:allow-other-keys)
7561 (use-modules (guix build utils))
7562 (let* ((cmake-rules (assoc-ref inputs "cmake-rules")))
7563 (copy-file cmake-rules
7564 (string-append "fortune-mod/cmake/"
7565 (strip-store-file-name cmake-rules)))
7566 (chdir "fortune-mod")
7567 ;; TODO: Valgrind tests fail for some reason.
7568 ;; Similar issue: https://github.com/shlomif/fortune-mod/issues/21 (?)
7569 (delete-file "tests/t/valgrind.t")
7570 #t)))
7571 (add-after 'install 'fix-install-directory
7572 (lambda* (#:key outputs #:allow-other-keys)
7573 ;; Move binary from "games/" to "bin/" and remove the latter. This
7574 ;; is easier than patching CMakeLists.txt since the tests hard-code
7575 ;; the location as well.
7576 (let* ((out (assoc-ref outputs "out"))
7577 (bin (string-append out "/bin"))
7578 (games (string-append out "/games")))
7579 (rename-file (string-append games "/fortune")
7580 (string-append bin "/fortune"))
7581 (rmdir games)
7582 #t))))))
7583 (inputs `(("recode" ,recode)))
7584 (native-inputs
7585 `(("perl" ,perl)
7586 ;; The following is only needed for tests.
7587 ("perl-file-find-object" ,perl-file-find-object)
7588 ("perl-test-differences" ,perl-test-differences)
7589 ("perl-class-xsaccessor" ,perl-class-xsaccessor)
7590 ("perl-io-all" ,perl-io-all)
7591 ("perl-test-runvalgrind" ,perl-test-runvalgrind)
7592 ("cmake-rules" ,shlomif-cmake-modules)
7593 ("rinutils" ,rinutils)))
7594 (home-page "https://www.shlomifish.org/open-source/projects/fortune-mod/")
7595 (synopsis "The Fortune Cookie program from BSD games")
7596 (description "Fortune is a command-line utility which displays a random
7597 quotation from a collection of quotes.")
7598 (license license:bsd-4)))
7599
7600 (define xonotic-data
7601 (package
7602 (name "xonotic-data")
7603 (version "0.8.2")
7604 (source
7605 (origin
7606 (method url-fetch)
7607 (uri (string-append "http://dl.xonotic.org/xonotic-"
7608 version ".zip"))
7609 (file-name (string-append name "-" version ".zip"))
7610 (sha256
7611 (base32
7612 "1mcs6l4clvn7ibfq3q69k2p0z6ww75rxvnngamdq5ic6yhq74bx2"))))
7613 (build-system trivial-build-system)
7614 (native-inputs
7615 `(("unzip" ,unzip)))
7616 (arguments
7617 `(#:modules ((guix build utils))
7618 #:builder
7619 (begin
7620 (use-modules (guix build utils))
7621 (let* ((out (assoc-ref %outputs "out"))
7622 (xonotic (string-append out "/share/xonotic"))
7623 (source (assoc-ref %build-inputs "source"))
7624 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
7625 (copy-file source (string-append ,name "-" ,version ".zip"))
7626 (invoke unzip (string-append ,name "-" ,version ".zip"))
7627 (mkdir-p out)
7628 (mkdir-p xonotic)
7629 (chdir "Xonotic")
7630 (copy-recursively "data"
7631 (string-append xonotic "/data"))
7632 (copy-recursively "server"
7633 (string-append xonotic "/server"))
7634 (install-file "key_0.d0pk" xonotic)))))
7635 (home-page "http://xonotic.org")
7636 (synopsis "Data files for Xonotic")
7637 (description
7638 "Xonotic-data provides the data files required by the game Xonotic.")
7639 (license (list license:gpl2+
7640 (license:x11-style "file://server/rcon.pl")))))
7641
7642 (define-public xonotic
7643 (package
7644 (name "xonotic")
7645 (version "0.8.2")
7646 (source
7647 (origin
7648 (method url-fetch)
7649 (uri (string-append "http://dl.xonotic.org/xonotic-"
7650 version "-source.zip"))
7651 (file-name (string-append name "-" version ".zip"))
7652 (sha256
7653 (base32
7654 "0axxw04fyz6jlfqd0kp7hdrqa0li31sx1pbipf2j5qp9wvqicsay"))))
7655 (build-system gnu-build-system)
7656 (arguments
7657 `(#:configure-flags (list (string-append "--prefix="
7658 (assoc-ref %outputs "out"))
7659 "--disable-rijndael")
7660 #:phases
7661 (modify-phases %standard-phases
7662 (add-before 'configure 'make-darkplaces
7663 (lambda* (#:key outputs #:allow-other-keys)
7664 (let* ((out (assoc-ref outputs "out"))
7665 (sharedir (string-append out "/share/xonotic/")))
7666 (invoke "make" "-C" "source/darkplaces"
7667 (string-append "DP_FS_BASEDIR="
7668 sharedir)
7669 "DP_LINK_TO_LIBJPEG=1"
7670 "DP_SOUND_API=ALSA"
7671 "CC=gcc"
7672 "-f" "makefile"
7673 "cl-release")
7674 (invoke "make" "-C" "source/darkplaces"
7675 (string-append "DP_FS_BASEDIR="
7676 sharedir)
7677 "DP_LINK_TO_LIBJPEG=1"
7678 "DP_SOUND_API=ALSA"
7679 "CC=gcc"
7680 "-f" "makefile"
7681 "sdl-release")
7682 (invoke "make" "-C" "source/darkplaces"
7683 (string-append "DP_FS_BASEDIR="
7684 sharedir)
7685 "DP_LINK_TO_LIBJPEG=1"
7686 "DP_SOUND_API=ALSA"
7687 "CC=gcc"
7688 "-f" "makefile"
7689 "sv-release"))))
7690 (add-before 'configure 'bootstrap
7691 (lambda _
7692 (chdir "source/d0_blind_id")
7693 (invoke "sh" "autogen.sh")))
7694 (add-after 'build 'install-desktop-entry
7695 (lambda* (#:key outputs #:allow-other-keys)
7696 ;; Add .desktop files for the 2 variants and the symlink
7697 (let* ((output (assoc-ref outputs "out"))
7698 (apps (string-append output "/share/applications")))
7699 (mkdir-p apps)
7700 (with-output-to-file
7701 (string-append apps "/xonotic-glx.desktop")
7702 (lambda _
7703 (format #t
7704 "[Desktop Entry]~@
7705 Name=xonotic-glx~@
7706 Comment=Xonotic glx~@
7707 Exec=~a/bin/xonotic-glx~@
7708 TryExec=~@*~a/bin/xonotic-glx~@
7709 Icon=xonotic~@
7710 Categories=Game~@
7711 Type=Application~%"
7712 output)))
7713 (with-output-to-file
7714 (string-append apps "/xonotic-sdl.desktop")
7715 (lambda _
7716 (format #t
7717 "[Desktop Entry]~@
7718 Name=xonotic-sdl~@
7719 Comment=Xonotic sdl~@
7720 Exec=~a/bin/xonotic-sdl~@
7721 TryExec=~@*~a/bin/xonotic-sdl~@
7722 Icon=xonotic~@
7723 Categories=Game~@
7724 Type=Application~%"
7725 output)))
7726 (with-output-to-file
7727 (string-append apps "/xonotic.desktop")
7728 (lambda _
7729 (format #t
7730 "[Desktop Entry]~@
7731 Name=xonotic~@
7732 Comment=Xonotic~@
7733 Exec=~a/bin/xonotic-glx~@
7734 TryExec=~@*~a/bin/xonotic~@
7735 Icon=xonotic~@
7736 Categories=Game~@
7737 Type=Application~%"
7738 output)))
7739 #t)))
7740 (add-after 'install-desktop-entry 'install-icons
7741 (lambda* (#:key outputs #:allow-other-keys)
7742 (let ((out (assoc-ref outputs "out")))
7743 (with-directory-excursion "../../misc/logos/icons_png/"
7744 (for-each
7745 (lambda (file)
7746 (let* ((size (string-filter char-numeric? file))
7747 (icons (string-append out "/share/icons/hicolor/"
7748 size "x" size "/apps")))
7749 (mkdir-p icons)
7750 (copy-file file (string-append icons "/xonotic.png"))))
7751 '("xonotic_16.png" "xonotic_22.png" "xonotic_24.png"
7752 "xonotic_32.png" "xonotic_48.png" "xonotic_64.png"
7753 "xonotic_128.png" "xonotic_256.png" "xonotic_512.png"))))))
7754 (add-after 'install-icons 'install-binaries
7755 (lambda* (#:key outputs #:allow-other-keys)
7756 (let ((out (assoc-ref outputs "out")))
7757 (define (install src dst)
7758 (let ((dst (string-append out dst)))
7759 (mkdir-p (dirname dst))
7760 (copy-file src dst)))
7761 (mkdir-p (string-append out "/bin"))
7762 (install "../darkplaces/darkplaces-dedicated"
7763 "/bin/xonotic-dedicated")
7764 (install "../darkplaces/darkplaces-glx"
7765 "/bin/xonotic-glx")
7766 (install "../darkplaces/darkplaces-sdl"
7767 "/bin/xonotic-sdl")
7768 ;; Provide a default xonotic executable, defaulting to SDL.
7769 (symlink (string-append out "/bin/xonotic-sdl")
7770 (string-append out "/bin/xonotic"))
7771 #t)))
7772 (add-after 'install-binaries 'install-data
7773 (lambda* (#:key outputs inputs #:allow-other-keys)
7774 (let* ((out (assoc-ref outputs "out"))
7775 (data (assoc-ref inputs "xonotic-data")))
7776 (symlink (string-append data "/share/xonotic")
7777 (string-append out "/share/xonotic"))
7778 #t)))
7779 (add-after 'install-binaries 'wrap-binaries
7780 (lambda* (#:key outputs inputs #:allow-other-keys)
7781 ;; Curl and libvorbis need to be wrapped so that we get
7782 ;; sound and networking.
7783 (let* ((out (assoc-ref outputs "out"))
7784 (bin (string-append out "/bin/xonotic"))
7785 (bin-sdl (string-append out "/bin/xonotic-sdl"))
7786 (bin-glx (string-append out "/bin/xonotic-glx"))
7787 (bin-dedicated (string-append out "/bin/xonotic-dedicated"))
7788 (curl (assoc-ref inputs "curl"))
7789 (vorbis (assoc-ref inputs "libvorbis")))
7790 (wrap-program bin
7791 `("LD_LIBRARY_PATH" ":" prefix
7792 (,(string-append curl "/lib:" vorbis "/lib"))))
7793 (wrap-program bin-sdl
7794 `("LD_LIBRARY_PATH" ":" prefix
7795 (,(string-append curl "/lib:" vorbis "/lib"))))
7796 (wrap-program bin-glx
7797 `("LD_LIBRARY_PATH" ":" prefix
7798 (,(string-append curl "/lib:" vorbis "/lib"))))
7799 (wrap-program bin-dedicated
7800 `("LD_LIBRARY_PATH" ":" prefix
7801 (,(string-append curl "/lib:" vorbis "/lib"))))
7802 #t))))))
7803 (inputs
7804 `(("xonotic-data" ,xonotic-data)
7805 ("alsa-lib" ,alsa-lib)
7806 ("curl" ,curl)
7807 ("libjpeg" ,libjpeg-turbo)
7808 ("libmodplug" ,libmodplug)
7809 ("libvorbis" ,libvorbis)
7810 ("libogg" ,libogg)
7811 ("libxpm" ,libxpm)
7812 ("libxxf86dga" ,libxxf86dga)
7813 ("libxxf86vm" ,libxxf86vm)
7814 ("libx11" ,libx11)
7815 ("libxext" ,libxext)
7816 ("libxau" ,libxau)
7817 ("libxdmcp" ,libxdmcp)
7818 ("mesa" ,mesa)
7819 ("glu" ,glu)
7820 ("freetype" ,freetype)
7821 ("sdl2" ,sdl2)
7822 ("libpng" ,libpng)
7823 ("hicolor-icon-theme" ,hicolor-icon-theme)))
7824 (native-inputs
7825 `(("unzip" ,unzip)
7826 ("autoconf" ,autoconf)
7827 ("automake" ,automake)
7828 ("pkg-config" ,pkg-config)
7829 ("libtool" ,libtool)
7830 ("gmp" ,gmp)))
7831 (home-page "https://xonotic.org")
7832 (synopsis "Fast-paced first-person shooter game")
7833 (description
7834 "Xonotic is a free, fast-paced first-person shooter.
7835 The project is geared towards providing addictive arena shooter
7836 gameplay which is all spawned and driven by the community itself.
7837 Xonotic is a direct successor of the Nexuiz project with years of
7838 development between them, and it aims to become the best possible
7839 open-source FPS of its kind.")
7840 (license (list license:gpl2+
7841 license:bsd-3 ; /source/d0_blind_id folder and others
7842 (license:x11-style "" "See file rcon.pl.")))))
7843
7844 (define-public frotz
7845 (package
7846 (name "frotz")
7847 (version "2.44")
7848 (source (origin
7849 (method url-fetch)
7850 (uri (list (string-append
7851 "http://www.ifarchive.org/if-archive/infocom/interpreters/"
7852 "frotz/frotz-" version ".tar.gz")
7853 (string-append
7854 "ftp://ftp.ifarchive.org/if-archive/infocom/interpreters/"
7855 "frotz/frotz-" version ".tar.gz")))
7856 (sha256
7857 (base32
7858 "1v735xr3blznac8fnwa27s1vhllx4jpz7kw7qdw1bsfj6kq21v3k"))))
7859 (build-system gnu-build-system)
7860 (arguments
7861 `(#:tests? #f ; there are no tests
7862 #:phases
7863 (modify-phases %standard-phases
7864 (delete 'configure)
7865 (add-before 'build 'curses
7866 (lambda _
7867 (substitute* "Makefile"
7868 (("lcurses") "lncurses"))
7869 #t))
7870 (replace 'install
7871 (lambda* (#:key outputs #:allow-other-keys)
7872 (let* ((out (assoc-ref outputs "out"))
7873 (bin (string-append out "/bin"))
7874 (man (string-append out "/share/man/man6")))
7875 (install-file "frotz" bin)
7876 (mkdir-p man)
7877 (install-file "doc/frotz.6" man)
7878 #t))))))
7879 (inputs `(("libmodplug" ,libmodplug)
7880 ("libsamplerate" ,libsamplerate)
7881 ("libsndfile" ,libsndfile)
7882 ("libvorbis" ,libvorbis)
7883 ("ncurses" ,ncurses)))
7884 (synopsis "Portable Z-machine interpreter (ncurses version) for text adventure games")
7885 (description "Frotz is an interpreter for Infocom games and other Z-machine
7886 games in the text adventure/interactive fiction genre. This version of Frotz
7887 complies with standard 1.0 of Graham Nelson's specification. It plays all
7888 Z-code games V1-V8, including V6, with sound support through libao, and uses
7889 ncurses for text display.")
7890 (home-page "http://frotz.sourceforge.net")
7891 (license license:gpl2+)))
7892
7893 (define-public frotz-dumb-terminal
7894 (package
7895 (name "frotz-dumb-terminal")
7896 (version "2.44")
7897 (source (origin
7898 (method url-fetch)
7899 (uri (list (string-append
7900 "http://www.ifarchive.org/if-archive/infocom/interpreters/"
7901 "frotz/frotz-" version ".tar.gz")
7902 (string-append
7903 "ftp://ftp.ifarchive.org/if-archive/infocom/interpreters/"
7904 "frotz/frotz-" version ".tar.gz")))
7905 (sha256
7906 (base32
7907 "1v735xr3blznac8fnwa27s1vhllx4jpz7kw7qdw1bsfj6kq21v3k"))))
7908 (build-system gnu-build-system)
7909 (arguments
7910 `(#:tests? #f ; there are no tests
7911 #:phases
7912 (modify-phases %standard-phases
7913 (delete 'configure)
7914 (replace 'build
7915 (lambda _
7916 (invoke "make" "dumb")))
7917 (replace 'install
7918 (lambda* (#:key outputs #:allow-other-keys)
7919 (let* ((out (assoc-ref outputs "out"))
7920 (bin (string-append out "/bin"))
7921 (man (string-append out "/share/man/man6")))
7922 (install-file "dfrotz" bin)
7923 (mkdir-p man)
7924 (install-file "doc/dfrotz.6" man)
7925 #t))))))
7926 (synopsis "Portable Z-machine dumb interpreter for text adventure games")
7927 (description "Frotz is an interpreter for Infocom games and
7928 other Z-machine games in the text adventure/interactive fiction genre.
7929 dfrotz is the dumb interface version. You get no screen control; everything
7930 is just printed to the terminal line by line. The terminal handles all the
7931 scrolling. Maybe you'd like to experience what it's like to play Adventure on
7932 a teletype. A much cooler use for compiling Frotz with the dumb interface is
7933 that it can be wrapped in CGI scripting, PHP, and the like to allow people
7934 to play games on webpages. It can also be made into a chat bot.")
7935 (home-page "http://frotz.sourceforge.net")
7936 (license license:gpl2+)))
7937
7938 (define-public frotz-sdl
7939 (let* ((commit "4de8c34f2116fff554af6216c30ec9d41bf50b24"))
7940 (package
7941 (name "frotz-sdl")
7942 (version "2.45pre")
7943 (source (origin
7944 (method git-fetch)
7945 (uri (git-reference
7946 (url "https://gitlab.com/DavidGriffith/frotz")
7947 (commit commit)))
7948 (sha256
7949 (base32
7950 "18ms21pcrl7ipcnyqnf8janamkryzx78frsgd9kfk67jvbj0z2k8"))
7951 (file-name (git-file-name name version))))
7952 (build-system gnu-build-system)
7953 (arguments
7954 `(#:tests? #f ; there are no tests
7955 #:phases
7956 (modify-phases %standard-phases
7957 (delete 'configure)
7958 (add-before 'build 'patch-makefile
7959 (lambda _
7960 (substitute* "Makefile"
7961 (("lcurses") "lncurses")
7962 (("^BUILD_DATE_TIME =.*$")
7963 "BUILD_DATE_TIME = \"2.45pre-20180907.00000\"\n"))
7964 #t))
7965 (replace 'build
7966 (lambda _
7967 (invoke "make" "sdl")))
7968 (replace 'install
7969 (lambda* (#:key outputs #:allow-other-keys)
7970 (let* ((out (assoc-ref outputs "out"))
7971 (bin (string-append out "/bin"))
7972 (man (string-append out "/share/man/man6")))
7973 (install-file "sfrotz" bin)
7974 (mkdir-p man)
7975 (install-file "doc/sfrotz.6" man)
7976 #t))))))
7977 (native-inputs
7978 `(("pkg-config" ,pkg-config)
7979 ("which" ,which)
7980 ("perl" ,perl)))
7981 (inputs `(("sdl2" ,sdl2)
7982 ("sdl2-mixer" ,sdl2-mixer)
7983 ("libmodplug" ,libmodplug)
7984 ("libsamplerate" ,libsamplerate)
7985 ("libsndfile" ,libsndfile)
7986 ("libvorbis" ,libvorbis)
7987 ("ncurses" ,ncurses)
7988 ("freetype" ,freetype)
7989 ("libjpeg-turbo" ,libjpeg-turbo)))
7990 (synopsis "Portable Z-machine interpreter (SDL port) for text adventure games")
7991 (description "Frotz is an interpreter for Infocom games and other Z-machine
7992 games in the text adventure/interactive fiction genre. This version of Frotz
7993 using SDL fully supports all these versions of the Z-Machine including the
7994 graphical version 6. Graphics and sound are created through the use of the SDL
7995 libraries. AIFF sound effects and music in MOD and OGG formats are supported
7996 when packaged in Blorb container files or optionally from individual files.")
7997 (home-page "http://frotz.sourceforge.net")
7998 (license license:gpl2+))))
7999
8000 (define-public frozen-bubble
8001 ;; Last official release is very outdated (2010). Use latest commit (2017).
8002 (let ((commit "d6a029110ad6ab9e4960052e175addc98807fb7e")
8003 (revision "1"))
8004 (package
8005 (name "frozen-bubble")
8006 (version (git-version "2.2.1" revision commit))
8007 (source
8008 (origin
8009 (method git-fetch)
8010 (uri (git-reference
8011 (url "https://github.com/kthakore/frozen-bubble")
8012 (commit commit)))
8013 (file-name (git-file-name name version))
8014 (sha256
8015 (base32 "1rfrcym5lf4qac2qdklikb1ywijyxypq298azzxahy461dadl6cx"))))
8016 (build-system perl-build-system)
8017 (arguments
8018 `(#:phases
8019 (modify-phases %standard-phases
8020 ;; Build process needs to create files in the "server"
8021 ;; directory.
8022 (add-after 'unpack 'fix-permissions
8023 (lambda _
8024 (for-each make-file-writable
8025 (find-files "server" "." #:directories? #t))))
8026 ;; By default, build stops at warnings.
8027 (add-after 'unpack 'prevent-build-error
8028 (lambda _
8029 (substitute* "inc/My/Builder.pm"
8030 (("-Werror") ""))
8031 #t))
8032 (add-after 'install 'install-desktop-file-and-icons
8033 (lambda* (#:key outputs #:allow-other-keys)
8034 (let* ((share (string-append (assoc-ref outputs "out") "/share"))
8035 (hicolor (string-append share "/icons/hicolor")))
8036 ;; Create desktop entry.
8037 (make-desktop-entry-file
8038 (string-append share "/applications/" ,name ".desktop")
8039 #:name "Frozen Bubble"
8040 #:comment "Frozen Bubble arcade game"
8041 #:exec ,name
8042 #:icon ,name
8043 #:categories '("Game" "ArcadeGame"))
8044 ;; Add icons.
8045 (with-directory-excursion "share/icons"
8046 (for-each
8047 (lambda (size)
8048 (let* ((dim (string-append size "x" size))
8049 (dir (string-append hicolor "/" dim "/apps")))
8050 (mkdir-p dir)
8051 (copy-file
8052 (string-append "frozen-bubble-icon-" dim ".png")
8053 (string-append dir "/frozen-bubble.png"))))
8054 '("16" "32" "48" "64"))))
8055 #t))
8056 (add-after 'install 'wrap-perl-libs
8057 (lambda* (#:key outputs #:allow-other-keys)
8058 (let ((out (assoc-ref outputs "out"))
8059 (perl5lib (getenv "PERL5LIB")))
8060 (for-each (lambda (prog)
8061 (wrap-program (string-append out "/" prog)
8062 `("PERL5LIB" ":" prefix
8063 (,(string-append perl5lib ":" out
8064 "/lib/perl5/site_perl")))))
8065 (find-files "bin" ".")))
8066 #t)))))
8067 (native-inputs
8068 `(("perl-alien-sdl" ,perl-alien-sdl)
8069 ("perl-capture-tiny" ,perl-capture-tiny)
8070 ("perl-locale-maketext-lexicon" ,perl-locale-maketext-lexicon)
8071 ("perl-module-build" ,perl-module-build)
8072 ("pkg-config" ,pkg-config)))
8073 (inputs
8074 `(("glib" ,glib)
8075 ("perl-compress-bzip2" ,perl-compress-bzip2)
8076 ("perl-file-sharedir" ,perl-file-sharedir)
8077 ("perl-file-slurp" ,perl-file-slurp)
8078 ("perl-file-which" ,perl-file-which)
8079 ("perl-ipc-system-simple" ,perl-ipc-system-simple)
8080 ("perl-sdl" ,perl-sdl)
8081 ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-pango sdl-ttf)))))
8082 (home-page "http://frozen-bubble.org/")
8083 (synopsis "Puzzle with bubbles")
8084 (description
8085 "Frozen-Bubble is a clone of the popular Puzzle Bobble game, in which
8086 you attempt to shoot bubbles into groups of the same color to cause them to
8087 pop.
8088
8089 Players compete as penguins and must use the arrow keys to aim a colored
8090 bubble at groups of bubbles. The objective is to clear all the bubbles off
8091 the screen before a bubble passes below a line at the bottom.
8092
8093 It features 100 single-player levels, a two-player mode, music and striking
8094 graphics. A level editor is also included to allow players to create and play
8095 their own levels.")
8096 (license license:gpl2))))
8097
8098 (define-public libmanette
8099 (package
8100 (name "libmanette")
8101 (version "0.2.6")
8102 (source (origin
8103 (method url-fetch)
8104 (uri (string-append "mirror://gnome/sources/libmanette/"
8105 (version-major+minor version) "/"
8106 "libmanette-" version ".tar.xz"))
8107 (sha256
8108 (base32
8109 "1b3bcdkk5xd5asq797cch9id8692grsjxrc1ss87vv11m1ck4rb3"))))
8110 (build-system meson-build-system)
8111 (native-inputs
8112 `(("glib" ,glib "bin") ; for glib-compile-resources
8113 ("gobject-introspection" ,gobject-introspection)
8114 ("pkg-config" ,pkg-config)
8115 ("vala" ,vala)))
8116 (inputs
8117 `(("libevdev" ,libevdev)
8118 ("libgudev" ,libgudev)))
8119 (home-page "https://wiki.gnome.org/Apps/Games")
8120 (synopsis "Game controller library")
8121 (description "Libmanette is a small GObject library giving you simple
8122 access to game controllers. It supports the de-facto standard gamepads as
8123 defined by the W3C standard Gamepad specification or as implemented by the SDL
8124 GameController.")
8125 (license license:lgpl2.1+)))
8126
8127 (define-public quadrapassel
8128 (package
8129 (name "quadrapassel")
8130 (version "3.36.05")
8131 (source (origin
8132 (method url-fetch)
8133 (uri (string-append "mirror://gnome/sources/quadrapassel/"
8134 (version-major+minor version) "/"
8135 "quadrapassel-" version ".tar.xz"))
8136 (sha256
8137 (base32
8138 "04abxmimh5npw8rhz1sfi6wxilgc6i1wka9mlnfwp8v1p1cb00cv"))))
8139 (build-system meson-build-system)
8140 (arguments
8141 '(#:glib-or-gtk? #t
8142 #:phases
8143 (modify-phases %standard-phases
8144 (add-after 'unpack 'skip-gtk-update-icon-cache
8145 ;; Don't create 'icon-theme.cache'.
8146 (lambda _
8147 (substitute* "build-aux/meson_post_install.py"
8148 (("gtk-update-icon-cache") (which "true")))
8149 #t)))))
8150 (native-inputs
8151 `(("desktop-file-utils" ,desktop-file-utils) ;for desktop-file-validate
8152 ("gettext" ,gettext-minimal)
8153 ("glib" ,glib "bin") ;for glib-compile-resources
8154 ("itstool" ,itstool)
8155 ("libxml2" ,libxml2) ;for xmllint
8156 ("pkg-config" ,pkg-config)
8157 ("vala" ,vala)))
8158 (inputs
8159 `(("clutter" ,clutter)
8160 ("clutter-gtk" ,clutter-gtk)
8161 ("gsound" ,gsound)
8162 ("gtk+" ,gtk+)
8163 ("libcanberra" ,libcanberra)
8164 ("libmanette" ,libmanette)
8165 ("librsvg" ,librsvg)))
8166 (home-page "https://wiki.gnome.org/Apps/Quadrapassel")
8167 (synopsis "GNOME version of Tetris")
8168 (description "Quadrapassel comes from the classic falling-block game,
8169 Tetris. The goal of the game is to create complete horizontal lines of
8170 blocks, which will disappear. The blocks come in seven different shapes made
8171 from four blocks each: one straight, two L-shaped, one square, and two
8172 S-shaped. The blocks fall from the top center of the screen in a random
8173 order. You rotate the blocks and move them across the screen to drop them in
8174 complete lines. You score by dropping blocks fast and completing lines. As
8175 your score gets higher, you level up and the blocks fall faster.")
8176 (license license:gpl2+)))
8177
8178 (define-public endless-sky
8179 (package
8180 (name "endless-sky")
8181 (version "0.9.12")
8182 (source
8183 (origin
8184 (method git-fetch)
8185 (uri (git-reference
8186 (url "https://github.com/endless-sky/endless-sky")
8187 (commit (string-append "v" version))))
8188 (file-name (git-file-name name version))
8189 (sha256
8190 (base32 "18nkl4s3r5sy3sd9lhbdg9160c7fggklklprx0d5azifc8g6k0wj"))))
8191 (build-system scons-build-system)
8192 (arguments
8193 `(#:scons ,scons-python2
8194 #:scons-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
8195 #:tests? #f ; no tests
8196 #:phases
8197 (modify-phases %standard-phases
8198 (add-after 'unpack 'patch-resource-locations
8199 (lambda* (#:key outputs #:allow-other-keys)
8200 (substitute* "source/Files.cpp"
8201 (("/usr/local/")
8202 (string-append (assoc-ref outputs "out") "/")))
8203 #t))
8204 (add-after 'unpack 'patch-scons
8205 (lambda _
8206 (substitute* "SConstruct"
8207 ;; Keep environmental variables
8208 (("Environment\\(\\)")
8209 "Environment(ENV = os.environ)")
8210 ;; Install into %out/bin
8211 (("games\"") "bin\""))
8212 #t)))))
8213 (inputs
8214 `(("glew" ,glew)
8215 ("libjpeg" ,libjpeg-turbo)
8216 ("libmad" ,libmad)
8217 ("libpng" ,libpng)
8218 ("openal" ,openal)
8219 ("sdl2" ,sdl2)))
8220 (home-page "https://endless-sky.github.io/")
8221 (synopsis "2D space trading and combat game")
8222 (description "Endless Sky is a 2D space trading and combat game. Explore
8223 other star systems. Earn money by trading, carrying passengers, or completing
8224 missions. Use your earnings to buy a better ship or to upgrade the weapons and
8225 engines on your current one. Blow up pirates. Take sides in a civil war. Or
8226 leave human space behind and hope to find friendly aliens whose culture is more
8227 civilized than your own.")
8228 (license (list license:gpl3+
8229 license:cc-by-sa3.0
8230 license:cc-by-sa4.0
8231 license:public-domain))))
8232
8233 (define-public stepmania
8234 (package
8235 (name "stepmania")
8236 (version "5.1.0-b2")
8237 (source
8238 (origin
8239 (method git-fetch)
8240 (uri (git-reference
8241 (url "https://github.com/stepmania/stepmania")
8242 (commit (string-append "v" version))))
8243 (file-name (git-file-name name version))
8244 (sha256
8245 (base32
8246 "0a7y9l7xm510vgnpmj1is7p9m6d6yd0fcaxrjcickz295k5w3rdn"))
8247 (modules '((guix build utils)))
8248 (snippet
8249 '(begin
8250 ;; Remove song files, which are licensed under a non-commercial
8251 ;; clause, and a course pointing to them.
8252 (for-each delete-file-recursively
8253 '("Songs/StepMania 5/Goin' Under"
8254 "Songs/StepMania 5/MechaTribe Assault"
8255 "Songs/StepMania 5/Springtime"))
8256 (for-each delete-file '("Courses/Default/Jupiter.crs"
8257 "Courses/Default/Jupiter.png"))
8258 ;; Unbundle libpng.
8259 (substitute* "extern/CMakeLists.txt"
8260 (("include\\(CMakeProject-png.cmake\\)") ""))
8261 (delete-file-recursively "extern/libpng")
8262 #t))))
8263 (build-system cmake-build-system)
8264 (arguments
8265 `(#:tests? #f ;FIXME: couldn't find how to run tests
8266 #:build-type "Release"
8267 #:out-of-source? #f ;for the 'install-desktop' phase
8268 #:configure-flags
8269 (list "-DWITH_SYSTEM_FFMPEG=1"
8270 ;; SSE instructions are available on Intel systems only.
8271 ,@(if (any (cute string-prefix? <> (or (%current-target-system)
8272 (%current-system)))
8273 '("x86_64" "i686"))
8274 '()
8275 '("-DWITH_SSE2=NO"))
8276 ;; Configuration cannot find GTK2 without the two following
8277 ;; flags.
8278 (string-append "-DGTK2_GDKCONFIG_INCLUDE_DIR="
8279 (assoc-ref %build-inputs "gtk+")
8280 "/lib/gtk-2.0/include")
8281 (string-append "-DGTK2_GLIBCONFIG_INCLUDE_DIR="
8282 (assoc-ref %build-inputs "glib")
8283 "/lib/glib-2.0/include"))
8284 #:phases
8285 (modify-phases %standard-phases
8286 (add-after 'unpack 'ensure-application-files-can-be-found
8287 (lambda* (#:key outputs #:allow-other-keys)
8288 (let ((out (assoc-ref outputs "out")))
8289 (substitute* "src/arch/LoadingWindow/LoadingWindow_Gtk.cpp"
8290 (("RageFileManagerUtil::sDirOfExecutable \\+ \"/\" \\+ \"GtkModule.so\"")
8291 (string-append "\"" out
8292 "/share/stepmania/GtkModule.so\"")))
8293 (substitute* "src/arch/ArchHooks/ArchHooks_Unix.cpp"
8294 (("Root = sDirOfExecutable")
8295 (string-append "Root = \"" out "/share/stepmania/\""))
8296 (("sDirOfExecutable \\+ \"/(Packages|Songs)\"" _ dir)
8297 (string-append "\"" out "/share/stepmania/" dir "\"")))
8298 (substitute* "src/RageFileManager.cpp"
8299 (("RageFileManagerUtil::sDirOfExecutable \\+ \"/\"")
8300 (string-append "\"" out "/share/stepmania/\""))))
8301 #t))
8302 (add-after 'unpack 'fix-install-subdir
8303 ;; Installation would be done in "%out/stepmania-X.Y", but we
8304 ;; prefer the more common layout "%out/share/stepmania".
8305 (lambda _
8306 (substitute* "src/CMakeLists.txt"
8307 (("\"stepmania-.*?\"") "\"share/stepmania\""))
8308 #t))
8309 (add-after 'unpack 'unbundle-libpng
8310 (lambda* (#:key inputs #:allow-other-keys)
8311 (substitute* "src/CMakeLists.txt"
8312 (("\\$\\{SM_EXTERN_DIR\\}/libpng/include")
8313 (string-append (assoc-ref inputs "libpng") "/include")))
8314 #t))
8315 (add-after 'install 'install-executable
8316 (lambda* (#:key outputs #:allow-other-keys)
8317 (let* ((out (assoc-ref outputs "out"))
8318 (bin (string-append out "/bin"))
8319 (exe (string-append out "/share/stepmania/stepmania")))
8320 (mkdir-p bin)
8321 (symlink exe (string-append bin "/stepmania"))
8322 #t)))
8323 (add-after 'install-executable 'install-desktop
8324 (lambda* (#:key outputs #:allow-other-keys)
8325 (let* ((out (assoc-ref outputs "out"))
8326 (share (string-append out "/share"))
8327 (applications (string-append share "/applications"))
8328 (icons (string-append share "/icons")))
8329 (install-file "stepmania.desktop" applications)
8330 (mkdir-p icons)
8331 (copy-recursively "icons" icons)
8332 #t)))
8333 ;; Move documentation in a more usual place, i.e.,
8334 ;; "%out/share/doc/stepmania/".
8335 (add-after 'install-desktop 'install-doc
8336 (lambda* (#:key outputs #:allow-other-keys)
8337 (let* ((out (assoc-ref outputs "out"))
8338 (share (string-append out "/share")))
8339 (with-directory-excursion share
8340 (mkdir-p "doc")
8341 (symlink "../stepmania/Docs" "doc/stepmania"))
8342 #t))))))
8343 (native-inputs
8344 `(("pkg-config" ,pkg-config)
8345 ("yasm" ,yasm)))
8346 (inputs
8347 `(("alsa-lib" ,alsa-lib)
8348 ;; Per upstream, StepMania is only guaranteed to work with a very
8349 ;; specific FFmpeg version, which is included in the repository as
8350 ;; a Git submodule. This particular version requirement usually
8351 ;; changes every few years.
8352 ("ffmpeg" ,ffmpeg-for-stepmania)
8353 ("glib" ,glib)
8354 ("glew" ,glew)
8355 ("gtk+" ,gtk+-2)
8356 ("jsoncpp" ,jsoncpp)
8357 ("libpng" ,libpng)
8358 ("libjpeg" ,libjpeg-turbo)
8359 ("libmad" ,libmad)
8360 ("libogg" ,libogg)
8361 ("libva" ,libva)
8362 ("libvorbis" ,libvorbis)
8363 ("libxinerama" ,libxinerama)
8364 ("libxrandr" ,libxrandr)
8365 ("mesa" ,mesa)
8366 ("pcre" ,pcre)
8367 ("pulseaudio" ,pulseaudio)
8368 ("sdl" ,sdl2)
8369 ("udev" ,eudev)
8370 ("zlib" ,zlib)))
8371 (synopsis "Advanced rhythm game designed for both home and arcade use")
8372 (description "StepMania is a dance and rhythm game. It features 3D
8373 graphics, keyboard and dance pad support, and an editor for creating your own
8374 steps.
8375
8376 This package provides the core application, but no song is shipped. You need
8377 to download and install them in @file{$HOME/.stepmania-X.Y/Songs} directory.")
8378 (home-page "https://www.stepmania.com")
8379 (license license:expat)))
8380
8381 (define-public btanks
8382 (package
8383 (name "btanks")
8384 (version "0.9.8083")
8385 (source
8386 (origin
8387 (method url-fetch)
8388 (uri (string-append "mirror://sourceforge/btanks/btanks-source/"
8389 "btanks-" version ".tar.bz2"))
8390 (sha256
8391 (base32
8392 "0ha35kxc8xlbg74wsrbapfgxvcrwy6psjkqi7c6adxs55dmcxliz"))))
8393 (build-system scons-build-system)
8394 (arguments
8395 `(#:tests? #f ; there are none
8396 #:scons ,scons-python2
8397 #:scons-flags (list (string-append "prefix=" (assoc-ref %outputs "out")))
8398 #:phases
8399 (modify-phases %standard-phases
8400 (add-after 'unpack 'replace-removed-scons-syntax
8401 (lambda _
8402 (substitute* "SConstruct"
8403 (("Options") "Variables")
8404 (("opts.Add\\(BoolOption.*") "opts.Add('gcc_visibility', 'gcc visibility', 'true')")
8405 (("opts.Add\\(EnumOption.*") "opts.Add('mode', 'build mode', 'release')"))
8406 #t))
8407 (add-after 'set-paths 'set-sdl-paths
8408 (lambda* (#:key inputs #:allow-other-keys)
8409 (setenv "CPATH"
8410 (string-append (assoc-ref inputs "sdl")
8411 "/include/SDL:"
8412 (or (getenv "CPATH") "")))
8413 #t))
8414 (add-after 'unpack 'fix-compilation-errors
8415 (lambda _
8416 (substitute* "mrt/base_file.h"
8417 (("#include <string>" m)
8418 (string-append m "\n#include <sys/types.h>")))
8419 (substitute* '("engine/sl08/sl08.h"
8420 "engine/sl08/sl08.py")
8421 (("signal = NULL") "signal = 0")
8422 (("object\\(NULL\\)") "object(0)")
8423 (("func\\(NULL\\)") "func(0)")
8424 ((" connect\\(signal_ref\\)")
8425 " this->connect(signal_ref)"))
8426 (substitute* "math/range_list.h"
8427 ((" lower_bound\\(value\\)")
8428 " this->lower_bound(value)")
8429 ((" erase\\(i\\)")
8430 " this->erase(i)"))
8431 (substitute* "clunk/source.cpp"
8432 (("using namespace clunk" m)
8433 (string-append "# define pow10f(x) exp10f(x)\n" m)))
8434 #t))
8435 (add-after 'unpack 'find-lua
8436 (lambda _
8437 (substitute* "engine/SConscript"
8438 (("lua5.1") "lua-5.1")
8439 (("bt_libs.append\\(lua\\)")
8440 "bt_libs.append(\"lua\")"))
8441 #t)))))
8442 (inputs
8443 `(("expat" ,expat)
8444 ("glu" ,glu)
8445 ("libsmpeg" ,libsmpeg-with-sdl1)
8446 ("libvorbis" ,libvorbis)
8447 ("lua51" ,lua-5.1)
8448 ("sdl" ,(sdl-union (list sdl
8449 sdl-mixer
8450 sdl-image
8451 sdl-ttf)))
8452 ("zlib" ,zlib)))
8453 (native-inputs
8454 `(("pkg-config" ,pkg-config)
8455 ("zip" ,zip)))
8456 (home-page "http://btanks.sourceforge.net")
8457 (synopsis "Multiplayer tank battle game")
8458 (description "Battle Tanks (also known as \"btanks\") is a funny battle
8459 game, where you can choose one of three vehicles and eliminate your enemy
8460 using the whole arsenal of weapons. It has original cartoon-like graphics and
8461 cool music, it’s fun and dynamic, it has several network modes for deathmatch
8462 and cooperative.")
8463 ;; Some parts (e.g. mrt/b64.cpp) are LGPLv2.1+, but the whole package is
8464 ;; released under GPLv2 or later. It comes with extra exceptions for the
8465 ;; developers.
8466 (license (list license:gpl2+ license:lgpl2.1+))))
8467
8468 (define-public slimevolley
8469 (package
8470 (name "slimevolley")
8471 (version "2.4.2")
8472 (source
8473 (origin
8474 (method url-fetch)
8475 (uri (string-append "https://download.tuxfamily.org/slime/"
8476 "slimevolley_" version ".tar.gz"))
8477 (sha256
8478 (base32 "1pi60zjpx95mfdkrbwf4cbzy5lv4v5qrljvgck46qca78i9g9g46"))))
8479 (build-system cmake-build-system)
8480 (arguments
8481 `(#:tests? #f ;no test
8482 ;; Work around build failure: "error adding symbols: DSO
8483 ;; missing from command line".
8484 #:configure-flags (list "-DCMAKE_EXE_LINKER_FLAGS=-lm")))
8485 (native-inputs
8486 `(("gettext" ,gettext-minimal)))
8487 (inputs
8488 `(("sdl" ,(sdl-union (list sdl sdl-image sdl-net sdl-ttf)))))
8489 (home-page "https://slime.tuxfamily.org/")
8490 (synopsis "Unrealistic 2D volleyball simulation")
8491 (description
8492 "Slime Volley is a 2D arcade-oriented volleyball simulation, in
8493 the spirit of some Java games of the same name.
8494
8495 Two teams, 1-3 players each, try to be the first to get 10 points.
8496 This happens when the one ball touches the floor on the other side of
8497 the net. There can be 1 to 8 balls in game. Once one ball touches
8498 the ground, the set ends and all balls are served again.")
8499 (license license:gpl3+)))
8500
8501 (define-public slingshot
8502 (package
8503 (name "slingshot")
8504 (version "0.9")
8505 (source
8506 (origin
8507 (method git-fetch)
8508 (uri (git-reference
8509 (url "https://github.com/ryanakca/slingshot")
8510 (commit version)))
8511 (file-name (git-file-name name version))
8512 (sha256
8513 (base32
8514 "19m8b6nsi786bc6gmkp185mwri3r5y249gjmqd5qsc23nnfhgrs1"))))
8515 (build-system python-build-system)
8516 (arguments
8517 `(#:python ,python-2))
8518 (inputs
8519 `(("python-pygame" ,python2-pygame)))
8520 (home-page "https://github.com/ryanakca/slingshot")
8521 (synopsis "Simple 2D shooting strategy game set in space")
8522 (description "Slingshot is a two-dimensional strategy game where two
8523 players attempt to shoot one another through a section of space populated by
8524 planets. The main feature of the game is that the shots, once fired, are
8525 affected by the gravity of the planets.")
8526 (license license:gpl2+)))
8527
8528 (define-public 4dtris
8529 (package
8530 (name "4dtris")
8531 (version "0.4.3")
8532 (source
8533 (origin
8534 (method url-fetch)
8535 (uri (string-append "https://launchpad.net/4dtris/"
8536 (version-major+minor version)
8537 "/" version "/+download/4dtris_"
8538 version ".orig.tar.gz"))
8539 (sha256
8540 (base32
8541 "1nfkhcm0l89jyw8yr65na97g4l385zhjf7whkyg47c3v5sdqq2g7"))))
8542 (build-system gnu-build-system)
8543 (arguments
8544 `(#:phases
8545 (modify-phases %standard-phases
8546 (add-after 'unpack 'fix-install-directories
8547 (lambda* (#:key outputs #:allow-other-keys)
8548 (let ((out (assoc-ref outputs "out")))
8549 (substitute* "Makefile.in"
8550 (("bindir = /usr/games")
8551 (string-append "bindir = " out "/bin"))
8552 (("/usr/share/applications")
8553 (string-append out "/share/applications"))
8554 (("/usr/share/games/4dtris")
8555 (string-append out "/share/4dtris"))))
8556 #t))
8557 (add-after 'set-paths 'set-sdl-paths
8558 (lambda* (#:key inputs #:allow-other-keys)
8559 (setenv "CPATH"
8560 (string-append (assoc-ref inputs "sdl")
8561 "/include/SDL:"
8562 (or (getenv "CPATH") "")))
8563 #t)))))
8564 (inputs
8565 `(("fontconfig" ,fontconfig)
8566 ("freeglut" ,freeglut)
8567 ("sdl" ,(sdl-union (list sdl sdl-ttf)))))
8568 (home-page "https://launchpad.net/4dtris/")
8569 (synopsis "4D Tetris")
8570 (description "4D-TRIS is an alteration of the well-known Tetris game. The
8571 game field is extended to 4D space, which has to filled up by the gamer with
8572 4D hyper cubes.")
8573 (license license:gpl3)))
8574
8575 (define-public arx-libertatis
8576 (package
8577 (name "arx-libertatis")
8578 (version "1.1.2")
8579 (source
8580 (origin
8581 (method url-fetch)
8582 (uri (string-append "http://arx-libertatis.org/files/arx-libertatis-"
8583 version ".tar.xz"))
8584 (sha256
8585 (base32
8586 "0hjfxlsmp8wwqr06snv2dlly2s79ra0d9aw49gkp6rn8m50b9bc2"))))
8587 (build-system cmake-build-system)
8588 (outputs '("out" "installer"))
8589 (arguments
8590 '(#:tests? #f ; No tests.
8591 #:phases
8592 (modify-phases %standard-phases
8593 (add-after 'unpack 'fix-install-helper-paths
8594 (lambda* (#:key inputs #:allow-other-keys)
8595 (let ((p7zip (assoc-ref inputs "p7zip"))
8596 (innoextract (assoc-ref inputs "innoextract"))
8597 (wget (assoc-ref inputs "wget"))
8598 (zenity (assoc-ref inputs "zenity")))
8599 (substitute* "scripts/arx-install-data"
8600 (("have innoextract")
8601 (string-append "have " innoextract "/bin/innoextract"))
8602 (("then innoextract")
8603 (string-append "then " innoextract "/bin/innoextract"))
8604 (("else innoextract")
8605 (string-append "else " innoextract "/bin/innoextract"))
8606 (("for _extract_zip_sz in 7za 7z")
8607 (string-append "for _extract_zip_sz in " p7zip "/bin/7za"))
8608 (("else if have 7z")
8609 (string-append "else if have " p7zip "/bin/7za"))
8610 (("7z x -tiso")
8611 (string-append p7zip "/bin/7z x -tiso"))
8612 (("if have wget")
8613 (string-append "if have " wget "/bin/wget"))
8614 (("wget -O")
8615 (string-append wget "/bin/wget -O"))
8616 (("for backend in \\$preferred zenity")
8617 (string-append "for backend in $preferred " zenity "/bin/zenity"))
8618 (("zenity +--title")
8619 (string-append zenity "/bin/zenity --title"))
8620 (("^zenity\\)")
8621 (string-append zenity "/bin/zenity)"))))
8622 #t))
8623 (add-after 'install 'move-installer
8624 (lambda* (#:key outputs #:allow-other-keys)
8625 (let ((out (assoc-ref outputs "out"))
8626 (installer (assoc-ref outputs "installer")))
8627 (mkdir-p (string-append installer "/bin"))
8628 (rename-file (string-append out "/bin/arx-install-data")
8629 (string-append installer "/bin/arx-install-data"))))))))
8630 (inputs
8631 `(("sdl" ,sdl) ; Switch to sdl2 in >1.1.2.
8632 ("mesa" ,mesa) ; Switch to libepoxy in >1.1.2.
8633 ("glew" ,glew)
8634 ("openal" ,openal)
8635 ("zlib" ,zlib)
8636 ("boost" ,boost)
8637 ("glm" ,glm)
8638 ("freetype" ,freetype)
8639 ;; The following are only needed by the arx-install-data script.
8640 ("p7zip" ,p7zip) ; Install-helper uses it to extract ISO and .cab archives.
8641 ("zenity" ,zenity) ; GUI for install-helper.
8642 ("wget" ,wget) ; Used by the install-helper to download the patch.
8643 ;; The install-helper needs it to extract the patch.
8644 ("innoextract" ,innoextract)))
8645 (home-page "https://arx-libertatis.org/")
8646 (synopsis "Port of Arx Fatalis, a first-person role-playing game")
8647 (description "Arx Libertatis is a cross-platform port of Arx Fatalis, a 2002
8648 first-person role-playing game / dungeon crawler developed by Arkane Studios.
8649 This port however does not include the game data, so you need to obtain a copy
8650 of the original Arx Fatalis or its demo to play Arx Libertatis. Arx Fatalis
8651 features crafting, melee and ranged combat, as well as a unique casting system
8652 where the player draws runes in real time to effect the desired spell.")
8653 (license license:gpl3+)))
8654
8655 (define-public edgar
8656 (package
8657 (name "edgar")
8658 (version "1.33")
8659 (source
8660 (origin
8661 (method url-fetch)
8662 (uri
8663 (string-append "https://github.com/riksweeney/edgar/releases/download/"
8664 version "/edgar-" version "-1.tar.gz"))
8665 (sha256
8666 (base32 "1mbx7dvizdca4g1blcv3bdh6yxd13k47rkya4rdzg0nvvz24m175"))))
8667 (build-system gnu-build-system)
8668 (arguments '(#:tests? #f ; there are no tests
8669 #:make-flags
8670 (list "CC=gcc"
8671 (string-append "PREFIX=" (assoc-ref %outputs "out"))
8672 (string-append "BIN_DIR=" (assoc-ref %outputs "out") "/bin/"))
8673 #:phases
8674 (modify-phases %standard-phases
8675 (delete 'configure)
8676 (add-before 'build 'fix-env
8677 (lambda* (#:key inputs #:allow-other-keys)
8678 (setenv "CPATH"
8679 (string-append (assoc-ref inputs "sdl2-union")
8680 "/include/SDL2:"
8681 (or (getenv "CPATH") "")))
8682 #t)))))
8683 (inputs
8684 `(("sdl2-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
8685 ("zlib" ,zlib)))
8686 (native-inputs
8687 `(("pkg-config" ,pkg-config)
8688 ("autoconf" ,autoconf)
8689 ("automake" ,automake)
8690 ("gnu-gettext" ,gettext-minimal)
8691 ("libtool" ,libtool)
8692 ("which" ,which)))
8693 (synopsis "2d action platformer game")
8694 (description "The Legend of Edgar is a 2D platform game with a persistent world.
8695 When Edgar's father fails to return home after venturing out one dark and stormy night,
8696 Edgar fears the worst: he has been captured by the evil sorcerer who lives in
8697 a fortress beyond the forbidden swamp.")
8698 (home-page "https://www.parallelrealities.co.uk/games/edgar/")
8699 (license license:gpl2+)))
8700
8701 (define-public openclonk
8702 (package
8703 (name "openclonk")
8704 (version "8.1")
8705 (source (origin
8706 (method url-fetch)
8707 (uri (string-append
8708 "https://www.openclonk.org/builds/release/" version "/"
8709 "openclonk-" version "-src.tar.bz2"))
8710 (sha256
8711 (base32
8712 "0imkqjp8lww5p0cnqf4k4mb2v682mnsas63qmiz17rspakr7fxik"))))
8713 (build-system cmake-build-system)
8714 (arguments
8715 `(#:configure-flags '("-DAudio_TK=OpenAL")
8716 #:test-target "tests"
8717 #:phases
8718 (modify-phases %standard-phases
8719 (add-after 'unpack 'prepare-gmock
8720 (lambda* (#:key inputs #:allow-other-keys)
8721 (mkdir "gmock")
8722 (copy-recursively (assoc-ref inputs "googlemock") "gmock")
8723 (substitute* "tests/CMakeLists.txt"
8724 (("/usr/src/gmock")
8725 (string-append (getcwd) "/gmock/googlemock"))
8726 (("/usr/src/gtest")
8727 (string-append (getcwd) "/gmock/googletest"))
8728 (("PATH_SUFFIXES \"src\" \"gtest\"")
8729 "PATH_SUFFIXES \"src\""))
8730 #t))
8731 (add-after 'unpack 'adjust-backward-cpp-includes
8732 (lambda _
8733 ;; XXX: The bundled backward-cpp exports a CMake "interface"
8734 ;; that includes external libraries such as libdl from glibc.
8735 ;; By default, CMake interface includes are treated as "system
8736 ;; headers", and GCC behaves poorly when glibc is passed as a
8737 ;; system header (causing #include_next failures).
8738
8739 ;; Here we prevent targets that consume the Backward::Backward
8740 ;; interface from treating it as "system includes".
8741 (substitute* "CMakeLists.txt"
8742 (("target_link_libraries\\((.+) Backward::Backward\\)" all target)
8743 (string-append "set_property(TARGET " target " PROPERTY "
8744 "NO_SYSTEM_FROM_IMPORTED true)\n"
8745 all)))
8746 #t))
8747 (add-after 'unpack 'add-libiberty
8748 ;; Build fails upon linking executables without this.
8749 (lambda _
8750 (substitute* "thirdparty/backward-cpp/BackwardConfig.cmake"
8751 (("set\\(LIBBFD_LIBRARIES (.*?)\\)" _ libraries)
8752 (string-append "set(LIBBFD_LIBRARIES " libraries " iberty)")))
8753 #t))
8754 (add-after 'add-libiberty 'lax-freealut-requirement
8755 ;; TODO: We provide freealut 1.1.0, but pkg-config somehow detects
8756 ;; it as 1.0.1. Force minimal version.
8757 (lambda _
8758 (substitute* "cmake/FindAudio.cmake"
8759 (("freealut>=1.1.0") "freealut>=1.0.1"))
8760 #t))
8761 (add-after 'lax-freealut-requirement 'fix-directories
8762 ;; Prefer "$out/share/openclonk" over
8763 ;; "$out/share/games/openclonk". Also install "openclonk"
8764 ;; binary in "bin/", not "games/".
8765 (lambda _
8766 (substitute* "CMakeLists.txt"
8767 (("share/games/openclonk") "share/openclonk")
8768 (("TARGETS openclonk DESTINATION games")
8769 "TARGETS openclonk DESTINATION bin"))
8770 #t)))))
8771 (native-inputs
8772 `(("googlemock" ,(package-source googletest))
8773 ("googletest" ,googletest)
8774 ("pkg-config" ,pkg-config)))
8775 (inputs
8776 `(("freealut" ,freealut)
8777 ("freetype" ,freetype)
8778 ("glew" ,glew)
8779 ("libiberty" ,libiberty)
8780 ("libjpeg" ,libjpeg-turbo)
8781 ("libogg" ,libogg)
8782 ("libpng" ,libpng)
8783 ("libvorbis" ,libvorbis)
8784 ("libxrandr" ,libxrandr)
8785 ("mesa" ,mesa)
8786 ("miniupnpc" ,miniupnpc)
8787 ("openal" ,openal)
8788 ("qtbase" ,qtbase)
8789 ("readline" ,readline)
8790 ("sdl" ,sdl2)
8791 ("tinyxml" ,tinyxml)
8792 ("zlib" ,zlib)))
8793 (home-page "https://www.openclonk.org/")
8794 (synopsis
8795 "Multiplayer action game where you control small and nimble humanoids")
8796 (description "OpenClonk is a multiplayer action/tactics/skill game. It is
8797 often referred to as a mixture of The Settlers and Worms. In a simple 2D
8798 antfarm-style landscape, the player controls a crew of Clonks, small but
8799 robust humanoid beings. The game encourages free play but the normal goal is
8800 to either exploit valuable resources from the earth by building a mine or
8801 fight each other on an arena-like map.")
8802 ;; Software as a whole is licensed under ISC, artwork under CC-BY.
8803 (license (list license:isc license:cc-by3.0))))
8804
8805 (define-public flare-engine
8806 (package
8807 (name "flare-engine")
8808 (version "1.11")
8809 (source (origin
8810 (method git-fetch)
8811 (uri (git-reference
8812 (url "https://github.com/flareteam/flare-engine")
8813 (commit (string-append "v" version))))
8814 (file-name (git-file-name name version))
8815 (sha256
8816 (base32
8817 "1mqr1s72p5bdh4kq2a8hg72dk8lwnddicjnd2cdp1sbfa9lmjym8"))))
8818 (build-system cmake-build-system)
8819 (arguments
8820 `(#:tests? #f ;no test
8821 #:configure-flags '("-DBINDIR=bin" "-DDATADIR=share/flare")))
8822 (inputs
8823 `(("hicolor-icon-theme" ,hicolor-icon-theme)
8824 ("python" ,python-wrapper)
8825 ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
8826 (home-page "http://www.flarerpg.org/")
8827 (synopsis "Action Roleplaying Engine")
8828 (description "Flare (Free Libre Action Roleplaying Engine) is a simple
8829 game engine built to handle a very specific kind of game: single-player 2D
8830 action RPGs.")
8831 (license license:gpl3+)))
8832
8833 (define-public flare-game
8834 (package
8835 (name "flare-game")
8836 (version "1.11")
8837 (source (origin
8838 (method git-fetch)
8839 (uri (git-reference
8840 (url "https://github.com/flareteam/flare-game")
8841 (commit (string-append "v" version))))
8842 (file-name (git-file-name name version))
8843 (sha256
8844 (base32
8845 "0bd5g7sd89a9176ilr408hdqzdfv4j7wj0idd685c1n6s01c3h6p"))))
8846 (build-system cmake-build-system)
8847 (arguments
8848 `(#:tests? #f ;no test
8849 #:configure-flags '("-DDATADIR=share/flare")
8850 #:phases
8851 (modify-phases %standard-phases
8852 ;; Flare expects the mods to be located in the same folder.
8853 ;; Yet, "default" mod is in the engine, whereas the others
8854 ;; are in the current package. Merge everything here with
8855 ;; a symlink.
8856 (add-after 'install 'add-default-mod
8857 (lambda* (#:key inputs outputs #:allow-other-keys)
8858 (let* ((out (assoc-ref outputs "out"))
8859 (mods (string-append out "/share/flare/mods")))
8860 (with-directory-excursion mods
8861 (symlink (string-append (assoc-ref inputs "flare-engine")
8862 "/share/flare/mods/default")
8863 "default")))
8864 #t))
8865 (add-after 'install 'install-executable
8866 ;; The package only provides assets for the game, the
8867 ;; executable coming from "flare-engine". Since more than
8868 ;; one game may use the engine, we create a new executable,
8869 ;; "flare-game", which launches the engine with appropriate
8870 ;; parameters.
8871 (lambda* (#:key inputs outputs #:allow-other-keys)
8872 (let* ((out (assoc-ref outputs "out"))
8873 (bash (string-append (assoc-ref inputs "bash")
8874 "/bin/bash"))
8875 (flare (string-append (assoc-ref inputs "flare-engine")
8876 "/bin/flare"))
8877 (script (string-append out "/bin/flare-game")))
8878 (mkdir-p (dirname script))
8879 (call-with-output-file script
8880 (lambda (port)
8881 (format port
8882 "#!~a
8883 exec ~a --data-path=~a/share/flare --mods=empyrean_campaign~%"
8884 bash
8885 flare
8886 out)))
8887 (chmod script #o755))
8888 #t)))))
8889 (inputs
8890 `(("flare-engine" ,flare-engine)))
8891 (home-page "http://www.flarerpg.org/")
8892 (synopsis "Fantasy action RPG using the FLARE engine")
8893 (description "Flare is a single-player 2D action RPG with
8894 fast-paced action and a dark fantasy style.")
8895 (license license:cc-by-sa3.0)))
8896
8897 (define-public meritous
8898 (package
8899 (name "meritous")
8900 (version "1.5")
8901 (source (origin
8902 (method git-fetch)
8903 (uri (git-reference
8904 (url "https://gitlab.com/meritous/meritous.git")
8905 (commit (string-append "v" version))))
8906 (file-name (git-file-name name version))
8907 (sha256
8908 (base32
8909 "0n5jm4g0arjllgqmd2crv8h02i6hs3hlh1zyc7ng7yfpg1mbd8p8"))))
8910 (build-system gnu-build-system)
8911 (arguments
8912 `(#:tests? #f ;no test
8913 #:make-flags
8914 (list "CC=gcc"
8915 (string-append "prefix=" (assoc-ref %outputs "out")))
8916 #:phases
8917 (modify-phases %standard-phases
8918 (delete 'configure)
8919 (add-after 'unpack 'fix-sdl-path
8920 ;; XXX: For some reason, `sdl-config' reports stand-alone SDL
8921 ;; directory, not SDL-union provided as an input to the package.
8922 ;; We force the latter with "--prefix=" option.
8923 (lambda* (#:key inputs #:allow-other-keys)
8924 (substitute* "Makefile"
8925 (("sdl-config" command)
8926 (string-append command " --prefix=" (assoc-ref inputs "sdl"))))
8927 #t))
8928 (add-after 'unpack 'fix-crash
8929 ;; XXX: Songs are not present in the repository, due to licensing
8930 ;; issues. Yet, the game tries to load them, and, since it cannot
8931 ;; find them, crashes. Users cannot add them back, the store being
8932 ;; read-only, so we turn off background music altogether.
8933 (lambda _
8934 (substitute* "src/audio.c"
8935 (("PlayBackgroundMusic\\(new_track\\);" all)
8936 (string-append "// " all)))
8937 #t)))))
8938 (native-inputs
8939 `(("intltool" ,intltool)))
8940 (inputs
8941 `(("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer)))
8942 ("zlib" ,zlib)))
8943 (home-page "https://gitlab.com/meritous/meritous")
8944 (synopsis "Action-adventure dungeon crawl game")
8945 (description "Far below the surface of the planet is a place of limitless
8946 power. Those that seek to control such a utopia will soon bring an end to
8947 themselves. Seeking an end to the troubles that plague him, PSI user Merit
8948 journeys into the hallowed Orcus Dome in search of answers.
8949
8950 Meritous is a action-adventure game with simple controls but a challenge to
8951 find a balance of power versus recovery time during real-time battles. Set in
8952 a procedurally generated world, the player can explore thousands of rooms in
8953 search of powerful artifacts, tools to help them, and to eventually free the
8954 Orcus Dome from evil.")
8955 (license license:gpl3+)))
8956
8957 (define-public marble-marcher
8958 (let ((commit "e580460a0c3826f9b28ab404607942a8ecb625d7")
8959 (revision "1"))
8960 (package
8961 (name "marble-marcher")
8962 (version (git-version "0" revision commit))
8963 (source (origin
8964 (method git-fetch)
8965 (uri (git-reference
8966 (url "https://github.com/HackerPoet/MarbleMarcher")
8967 (commit commit)))
8968 (file-name (git-file-name name version))
8969 (sha256
8970 (base32
8971 "0jjv832hl1v170n6gryp2sr3lgqndi9ab841qvgqk68bks8701mx"))))
8972 (build-system cmake-build-system)
8973 (arguments
8974 `(#:tests? #f ; there are none
8975 #:phases
8976 (modify-phases %standard-phases
8977 (add-after 'unpack 'embed-asset-directory
8978 (lambda* (#:key outputs #:allow-other-keys)
8979 (let ((assets (string-append (assoc-ref outputs "out")
8980 "/share/marble-marcher/assets/")))
8981 ;; Some of the files we're patching are
8982 ;; ISO-8859-1-encoded, so choose it as the default
8983 ;; encoding so the byte encoding is preserved.
8984 (with-fluids ((%default-port-encoding #f))
8985 (substitute* "src/Resource.rc"
8986 (("../assets/icon.ico")
8987 (string-append assets "icon.ico")))
8988 (substitute* "src/Res.h"
8989 (("assets/") assets))))
8990 #t))
8991 (replace 'install
8992 (lambda* (#:key outputs #:allow-other-keys)
8993 (let* ((out (assoc-ref outputs "out"))
8994 (assets (string-append out "/share/marble-marcher/assets"))
8995 (bin (string-append out "/bin/")))
8996 (mkdir-p bin)
8997 (mkdir-p assets)
8998 (copy-recursively "../source/assets" assets)
8999 (install-file "MarbleMarcher" bin))
9000 #t)))))
9001 (inputs
9002 `(("eigen" ,eigen)
9003 ("mesa" ,mesa)
9004 ("sfml" ,sfml)))
9005 (native-inputs
9006 `(("pkg-config" ,pkg-config)))
9007 (home-page "https://codeparade.itch.io/marblemarcher")
9008 (synopsis "Guide a marble across fractal landscapes")
9009 (description "Marble Marcher is a video game that uses a fractal physics
9010 engine and fully procedural rendering to produce beautiful and unique
9011 gameplay. The game is played on the surface of evolving fractals. The goal
9012 of the game is to get your marble to the flag as quickly as possible. But be
9013 careful not to fall off the level or get crushed by the fractal! There are 24
9014 levels to unlock.")
9015 ;; Code is under GPLv2+, assets are under CC-BY-SA 3.0 and OFL 1.1.
9016 (license (list license:gpl2+
9017 license:silofl1.1
9018 license:cc-by-sa3.0)))))
9019
9020 ;; This must be updated together with flightgear.
9021 (define simgear
9022 (package
9023 (name "simgear")
9024 (version "2018.3.5")
9025 (source
9026 (origin
9027 (method url-fetch)
9028 (uri (string-append "mirror://sourceforge/flightgear/release-"
9029 (version-major+minor version) "/"
9030 "simgear-" version ".tar.bz2"))
9031 (sha256
9032 (base32 "1vkqm66r1205k3hdjmx5wmx5kvmsb0dgfzrs8n5gqnxj8szs42dl"))))
9033 (build-system cmake-build-system)
9034 (arguments
9035 `(#:phases
9036 (modify-phases %standard-phases
9037 (replace 'check
9038 (lambda _
9039 ;; Skip tests that require internet access.
9040 (invoke "ctest" "-E" "(http|dns)"))))))
9041 (inputs
9042 `(("boost" ,boost-for-mysql) ; fails with 1.69
9043 ("curl" ,curl)
9044 ("expat" ,expat)
9045 ("mesa" ,mesa)
9046 ("openal" ,openal)
9047 ("openscenegraph" ,openscenegraph-3.4)
9048 ("zlib" ,zlib)))
9049 (home-page "https://home.flightgear.org/")
9050 (synopsis "Libraries for 3D simulations and games")
9051 (description "SimGear is a set of libraries designed to be used as
9052 building blocks for quickly assembling 3D simulations, games, and
9053 visualization applications. SimGear is developed by the FlightGear project
9054 and also provides the base for the FlightGear Flight Simulator.")
9055 (license license:lgpl2.0+)))
9056
9057 (define-public flightgear
9058 (package
9059 (name "flightgear")
9060 (version (package-version simgear))
9061 (source
9062 (origin
9063 (method url-fetch)
9064 (uri (string-append "mirror://sourceforge/flightgear/release-"
9065 (version-major+minor version) "/"
9066 "flightgear-" version ".tar.bz2"))
9067 (sha256
9068 (base32 "0ya3vb539kwi1qrifqhsj5j3k4w6s06hrllp2vdzxf6id7cgf0hc"))
9069 (modules '((guix build utils)))
9070 (snippet
9071 '(begin
9072 ;; There are some bundled libraries.
9073 (for-each delete-file-recursively
9074 '("3rdparty/sqlite3/"))
9075 #t))))
9076 (build-system cmake-build-system)
9077 (arguments
9078 `(#:configure-flags
9079 (list "-DSYSTEM_SQLITE=ON"
9080 (string-append "-DFG_DATA_DIR="
9081 (assoc-ref %outputs "out")
9082 "/share/flightgear"))
9083 ;; TODO: test cannot be run because the "run_test_suite" executable
9084 ;; does not seem to be built.
9085 #:tests? #f
9086 #:phases
9087 (modify-phases %standard-phases
9088 (add-after 'install 'wrap-executable
9089 (lambda* (#:key inputs outputs #:allow-other-keys)
9090 (let ((out (assoc-ref outputs "out")))
9091 (wrap-program (string-append out "/bin/fgfs")
9092 `("QT_PLUGIN_PATH" ":" prefix
9093 ,(map (lambda (label)
9094 (string-append (assoc-ref inputs label)
9095 "/lib/qt5/plugins"))
9096 '("qtbase" "qtdeclarative" "qtsvg")))
9097 `("QML2_IMPORT_PATH" ":" prefix
9098 ,(map (lambda (label)
9099 (string-append (assoc-ref inputs label)
9100 "/lib/qt5/qml"))
9101 '("qtdeclarative" "qtsvg"))))
9102 #t)))
9103 (add-after 'install 'install-data
9104 (lambda* (#:key inputs outputs #:allow-other-keys)
9105 (let ((share (string-append (assoc-ref outputs "out") "/share/flightgear")))
9106 (mkdir-p share)
9107 (with-directory-excursion share
9108 (invoke "tar" "xf" (assoc-ref inputs "flightgear-data")
9109 "--strip-components=1")))
9110 #t)))))
9111 (inputs
9112 `(("boost" ,boost-for-mysql) ; same as simgear
9113 ("dbus" ,dbus)
9114 ("eudev" ,eudev)
9115 ("freeglut" ,freeglut)
9116 ("freetype" ,freetype)
9117 ("glew" ,glew)
9118 ("libpng" ,libpng)
9119 ("openal" ,openal)
9120 ("openscenegraph" ,openscenegraph-3.4)
9121 ("plib" ,plib)
9122 ("qtbase" ,qtbase)
9123 ("qtdeclarative" ,qtdeclarative)
9124 ("qtsvg" ,qtsvg)
9125 ("simgear" ,simgear)
9126 ("speexdsp" ,speexdsp)
9127 ("sqlite" ,sqlite)
9128 ("zlib" ,zlib)))
9129 (native-inputs
9130 `(("cppunit" ,cppunit)
9131 ("pkg-config" ,pkg-config)
9132 ("qttools" ,qttools)
9133 ("flightgear-data"
9134 ,(origin
9135 (method url-fetch)
9136 (uri (string-append "mirror://sourceforge/flightgear/release-"
9137 (version-major+minor version) "/"
9138 "FlightGear-" version "-data.tar.bz2"))
9139 (sha256
9140 (base32
9141 "04fv9za5zlyxlyfh6jx78y42l3jazvzl9dq2y6rzxqlcc9g5swhk"))))))
9142 (home-page "https://home.flightgear.org/")
9143 (synopsis "Flight simulator")
9144 (description "The goal of the FlightGear project is to create a
9145 sophisticated flight simulator framework for use in research or academic
9146 environments, pilot training, as an industry engineering tool, for DIY-ers to
9147 pursue their favorite interesting flight simulation idea, and last but
9148 certainly not least as a fun, realistic, and challenging desktop flight
9149 simulator.")
9150 (license license:gpl2+)))
9151
9152 (define-public jumpnbump
9153 (package
9154 (name "jumpnbump")
9155 (version "1.61")
9156 (source (origin
9157 (method git-fetch)
9158 (uri (git-reference
9159 (url "https://gitlab.com/LibreGames/jumpnbump.git")
9160 (commit version)))
9161 (file-name (git-file-name name version))
9162 (sha256
9163 (base32
9164 "12lwl5sl5n009nb83r8l4lakb9286csqdf1ynpmwwydy17giqsdp"))))
9165 (build-system gnu-build-system)
9166 (arguments
9167 `(#:make-flags
9168 (list "CC=gcc"
9169 (string-append "PREFIX=" (assoc-ref %outputs "out")))
9170 #:tests? #f ;no test
9171 #:phases
9172 (modify-phases %standard-phases
9173 (delete 'configure) ;no configure script
9174 (add-after 'unpack 'fix-sdl-path
9175 ;; XXX: For some reason, `sdl2-config' reports stand-alone SDL
9176 ;; directory, not SDL-union provided as an input to the package.
9177 ;; We force the latter with "--prefix=" option.
9178 (lambda* (#:key inputs #:allow-other-keys)
9179 (substitute* "Makefile"
9180 (("sdl2-config" command)
9181 (string-append command " --prefix=" (assoc-ref inputs "sdl"))))
9182 #t)))))
9183 (inputs
9184 `(("bzip2" ,bzip2)
9185 ("sdl" ,(sdl-union (list sdl2 sdl2-mixer sdl2-net)))
9186 ("zlib" ,zlib)))
9187 (native-inputs
9188 `(("gettext" ,gettext-minimal))) ;for msgfmt
9189 (home-page "https://gitlab.com/LibreGames/jumpnbump")
9190 (synopsis "Multiplayer platform game with bunnies")
9191 (description "You, as a bunny, have to jump on your opponents to make them
9192 explode. It is a true multiplayer game; you cannot play this alone. You can
9193 play with up to four players simultaneously. It has network support.")
9194 (license license:gpl2+)))
9195
9196 (define-public hedgewars
9197 (package
9198 (name "hedgewars")
9199 (version "1.0.0")
9200 (source (origin
9201 (method url-fetch)
9202 (uri (string-append "https://www.hedgewars.org/download/releases/"
9203 "hedgewars-src-" version ".tar.bz2"))
9204 (sha256
9205 (base32
9206 "0nqm9w02m0xkndlsj6ys3wr0ik8zc14zgilq7k6fwjrf3zk385i1"))))
9207 (build-system cmake-build-system)
9208 (arguments
9209 ;; XXX: Engine is built as Pascal source code, requiring Free Pascal
9210 ;; Compiler, which we haven't packaged yet. With the flag below, we use
9211 ;; a Pascal to C translator and Clang instead.
9212 `(#:configure-flags (list "-DBUILD_ENGINE_C=ON"
9213 "-Dhaskell_flags=-dynamic;-fPIC")
9214 #:phases
9215 (modify-phases %standard-phases
9216 (add-before 'configure 'fix-sources
9217 (lambda _
9218 ;; Fix a missing 'include'.
9219 (substitute* "QTfrontend/ui/page/pagegamestats.cpp"
9220 (("#include <QSizePolicy>")
9221 "#include <QSizePolicy>\n#include <QPainterPath>"))))
9222 (replace 'check
9223 (lambda _ (invoke "ctest")))
9224 (add-after 'install 'install-icon
9225 (lambda _
9226 ;; Install icon for the desktop file.
9227 (let* ((out (assoc-ref %outputs "out"))
9228 (icons (string-append out "/share/icons/hicolor/512x512/apps")))
9229 (with-directory-excursion (string-append "../hedgewars-src-" ,version)
9230 (install-file "misc/hedgewars.png" icons)))
9231 #t)))))
9232 (inputs
9233 `(("ffmpeg" ,ffmpeg)
9234 ("freeglut" ,freeglut)
9235 ("ghc-entropy" ,ghc-entropy)
9236 ("ghc-hslogger" ,ghc-hslogger)
9237 ("ghc-network" ,ghc-network)
9238 ("ghc-random" ,ghc-random)
9239 ("ghc-regex-tdfa" ,ghc-regex-tdfa)
9240 ("ghc-sandi" ,ghc-sandi)
9241 ("ghc-sha" ,ghc-sha)
9242 ("ghc-utf8-string" ,ghc-utf8-string)
9243 ("ghc-vector" ,ghc-vector)
9244 ("ghc-zlib" ,ghc-zlib)
9245 ("glew" ,glew)
9246 ("libpng" ,libpng)
9247 ("lua" ,lua-5.1)
9248 ("physfs" ,physfs)
9249 ("qtbase" ,qtbase)
9250 ("sdl" ,(sdl-union
9251 (list sdl2 sdl2-mixer sdl2-net sdl2-ttf sdl2-image)))))
9252 (native-inputs
9253 `(("clang" ,clang)
9254 ("ghc" ,ghc)
9255 ("pkg-config" ,pkg-config)
9256 ("qttools" ,qttools)))
9257 (home-page "https://hedgewars.org/")
9258 (synopsis "Turn-based artillery game featuring fighting hedgehogs")
9259 (description
9260 "Hedgewars is a turn based strategy, artillery, action and comedy game,
9261 featuring the antics of pink hedgehogs with attitude as they battle from the
9262 depths of hell to the depths of space.
9263
9264 As commander, it's your job to assemble your crack team of hedgehog soldiers
9265 and bring the war to your enemy.")
9266 ;; Software as a whole is licensed under GPL-2 terms. Artwork and
9267 ;; scripts are distributed under various terms.
9268 (license (list license:gpl2
9269 license:bsd-2 license:bsd-3 license:cc-by3.0 license:cc0
9270 license:expat license:fdl1.3+ license:public-domain
9271 license:zlib))))
9272
9273 (define-public harmonist
9274 (package
9275 (name "harmonist")
9276 (version "0.3.0")
9277 (source (origin
9278 (method git-fetch)
9279 (uri (git-reference
9280 (url "https://git.tuxfamily.org/harmonist/harmonist.git")
9281 (commit (string-append "v" version))))
9282 (file-name (git-file-name name version))
9283 (sha256
9284 (base32
9285 "146wiyanag0zqj6fhyll2sw6sydnnll8mgxhhqf9sjqsl2rx4s5r"))))
9286 (build-system go-build-system)
9287 (arguments
9288 '(#:import-path "git.tuxfamily.org/harmonist/harmonist"))
9289 (inputs
9290 `(("go-github.com-nsf-termbox-go" ,go-github.com-nsf-termbox-go)))
9291 (home-page "https://harmonist.tuxfamily.org/")
9292 (synopsis "Stealth coffee-break roguelike game")
9293 (description "Harmonist: Dayoriah Clan Infiltration is a stealth
9294 coffee-break roguelike game. The game has a heavy focus on tactical
9295 positioning, light and noise mechanisms, making use of various terrain types
9296 and cones of view for monsters. Aiming for a replayable streamlined experience,
9297 the game avoids complex inventory management and character building, relying
9298 on items and player adaptability for character progression.")
9299 (license license:isc)))
9300
9301 (define-public harmonist-tk
9302 (package
9303 (inherit harmonist)
9304 (name "harmonist-tk")
9305 (arguments
9306 (append
9307 (package-arguments harmonist)
9308 `(#:phases
9309 (modify-phases %standard-phases
9310 (replace 'build
9311 (lambda _
9312 (invoke "go" "install" "-v" "-x" "--tags" "tk"
9313 "git.tuxfamily.org/harmonist/harmonist")))
9314 (replace 'check
9315 (lambda _
9316 (invoke "go" "test" "--tags" "tk"
9317 "git.tuxfamily.org/harmonist/harmonist")))))))
9318 (inputs
9319 `(("go-github.com-nsf-gothic" ,go-github.com-nsf-gothic)))))
9320
9321 (define-public drascula
9322 (package
9323 (name "drascula")
9324 (version "1.0")
9325 (source (origin
9326 (method url-fetch)
9327 (uri (string-append "mirror://sourceforge/scummvm/extras/"
9328 "Drascula_%20The%20Vampire%20Strikes%20Back/"
9329 "drascula-" version ".zip"))
9330 (sha256
9331 (base32
9332 "1pj29rpb754sn6a56f8brfv6f2m1p5qgaqik7d68pfi2bb5zccdp"))))
9333 (build-system trivial-build-system)
9334 (arguments
9335 `(#:modules ((guix build utils))
9336 #:builder
9337 (begin
9338 (use-modules (guix build utils)
9339 (ice-9 match))
9340 (let* ((out (assoc-ref %outputs "out"))
9341 (share (string-append out "/share/drascula"))
9342 (scummvm (assoc-ref %build-inputs "scummvm")))
9343 ;; Install data.
9344 (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
9345 "/bin/unzip"))
9346 (doc (string-append out "/share/doc/" ,name "-" ,version)))
9347 (for-each
9348 (lambda (input)
9349 (invoke unzip
9350 "-j"
9351 (assoc-ref %build-inputs input)
9352 "-x" "__MACOSX")
9353 ;; Every input provides "readme.txt", and we want to
9354 ;; preserve them all. Therefore we rename them first.
9355 (match input
9356 ("drascula-int"
9357 (rename-file "readme.txt" "readme-international.txt"))
9358 ("drascula-audio"
9359 (rename-file "readme.txt" "readme-audio.txt"))
9360 (_ #f))
9361 ;; Install documentation.
9362 (for-each (lambda (f) (install-file f doc))
9363 (find-files "." "\\.(txt|doc)$"))
9364 ;; Install data.
9365 (for-each (lambda (f) (install-file f share))
9366 (find-files "." "\\.(ogg|00[0-9])$")))
9367 '("drascula-audio" "drascula-int" "source")))
9368 ;; Create standalone executable.
9369 (let* ((bin (string-append out "/bin"))
9370 (executable (string-append bin "/drascula"))
9371 (bash (string-append (assoc-ref %build-inputs "bash")
9372 "/bin/bash")))
9373 (mkdir-p bin)
9374 (with-output-to-file executable
9375 (lambda ()
9376 (format #t "#!~a~%" bash)
9377 (format #t
9378 "exec ~a/bin/scummvm --path=~a drascula~%"
9379 scummvm share)))
9380 (chmod executable #o755))
9381 ;; Create desktop file. There is no dedicated icon for the
9382 ;; game, so we borrow SCUMMVM's.
9383 (let ((apps (string-append out "/share/applications")))
9384 (mkdir-p apps)
9385 (make-desktop-entry-file
9386 (string-append apps "/drascula.desktop")
9387 #:name "Drascula: The Vampire Strikes Back"
9388 #:generic-name "Drascula"
9389 #:exec (string-append out "/bin/drascula")
9390 #:icon (string-append scummvm "/share/icons/hicolor/scalable/apps/scummvm.svg")
9391 #:categories '("AdventureGame" "Game" "RolePlaying")
9392 #:keywords '("game" "adventure" "roleplaying" "2D" "fantasy")
9393 #:comment '((#f "Classic 2D point and click adventure game")
9394 ("de" "Klassisches 2D-Abenteuerspiel in Zeigen-und-Klicken-Manier")
9395 ("fr" "Jeu classique d'aventure pointer-et-cliquer en 2D")
9396 ("it" "Gioco classico di avventura punta e clicca 2D"))))
9397 #t))))
9398 (native-inputs
9399 `(("bash" ,bash)
9400 ("unzip" ,unzip)))
9401 (inputs
9402 `(("scummvm" ,scummvm)
9403 ("drascula-int"
9404 ,(let ((version "1.1"))
9405 (origin
9406 (method url-fetch)
9407 (uri (string-append "mirror://sourceforge/scummvm/extras/"
9408 "Drascula_%20The%20Vampire%20Strikes%20Back/"
9409 "drascula-int-" version ".zip"))
9410 (sha256
9411 (base32
9412 "12236i7blamal92p1i8dgp3nhp2yicics4whsl63v682bj999n14")))))
9413 ("drascula-audio"
9414 ,(let ((version "2.0"))
9415 (origin
9416 (method url-fetch)
9417 (uri (string-append "mirror://sourceforge/scummvm/extras/"
9418 "Drascula_%20The%20Vampire%20Strikes%20Back/"
9419 "drascula-audio-" version ".zip"))
9420 (sha256
9421 (base32
9422 "00g4izmsqzxb8ry1vhfx6jrygl58lvlij09nw01ds4zddsiznsky")))))))
9423 (home-page "https://www.scummvm.org")
9424 (synopsis "Classic 2D point and click adventure game")
9425 (description "Drascula: The Vampire Strikes Back is a classic humorous 2D
9426 point and click adventure game.
9427
9428 In Drascula you play the role of John Hacker, a British estate agent, that
9429 gets to meet a gorgeous blond girl who is kidnapped by the notorious vampire
9430 Count Drascula and embark on a fun yet dangerous quest to rescue her.
9431 Unfortunately, Hacker is not aware of Drascula's real ambitions: DOMINATING
9432 the World and demonstrating that he is even more evil than his brother Vlad.")
9433 ;; Drascula uses a BSD-like license.
9434 (license (license:non-copyleft "file:///readme.txt"))))
9435
9436 (define (make-lure-package name language hash)
9437 (package
9438 (name name)
9439 (version "1.1")
9440 (source
9441 (origin
9442 (method url-fetch)
9443 (uri (string-append
9444 "mirror://sourceforge/scummvm/extras/"
9445 "Lure%20of%20the%20Temptress/"
9446 name "-" version ".zip"))
9447 (sha256
9448 (base32 hash))))
9449 (build-system trivial-build-system)
9450 (arguments
9451 `(#:modules ((guix build utils))
9452 #:builder
9453 (begin
9454 (use-modules (guix build utils))
9455 (let* ((out (assoc-ref %outputs "out"))
9456 (share (string-append out "/share"))
9457 (data (string-append share "/" ,name "/" ,language))
9458 (apps (string-append share "/applications"))
9459 (bin (string-append out "/bin"))
9460 (executable (string-append bin "/" ,name))
9461 (scummvm (assoc-ref %build-inputs "scummvm")))
9462 (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
9463 "/bin/unzip")))
9464 (invoke unzip "-j" (assoc-ref %build-inputs "source")))
9465 (let ((doc (string-append share "/doc/" ,name "-" ,version)))
9466 (for-each (lambda (f) (install-file f doc))
9467 (find-files "." "\\.(txt|PDF|pdf)$")))
9468 (for-each (lambda (f) (install-file f data))
9469 (find-files "." "\\.(vga|VGA)$"))
9470 ;; Build the executable.
9471 (mkdir-p bin)
9472 (let ((bash (assoc-ref %build-inputs "bash")))
9473 (with-output-to-file executable
9474 (lambda ()
9475 (format #t "#!~a/bin/bash~%" bash)
9476 (format #t "exec ~a/bin/scummvm -q ~a -p ~a lure~%"
9477 scummvm ,language data))))
9478 (chmod executable #o755)
9479 ;; Create desktop file. There is no dedicated
9480 ;; icon for the game, so we borrow SCUMMVM's.
9481 (mkdir-p apps)
9482 (with-output-to-file (string-append apps "/" ,name ".desktop")
9483 (lambda _
9484 (format #t
9485 "[Desktop Entry]~@
9486 Name=Lure of the Temptress~@
9487 GenericName=Lure~@
9488 Exec=~a~@
9489 Icon=~a/share/icons/hicolor/scalable/apps/scummvm.svg~@
9490 Categories=AdventureGame;Game;RolePlaying;~@
9491 Keywords=game;adventure;roleplaying;2D,fantasy;~@
9492 Comment=Classic 2D point and click adventure game~@
9493 Comment[de]=klassisches 2D-Abenteuerspiel in Zeigen-und-Klicken-Manier~@
9494 Comment[fr]=Jeu classique d'aventure pointer-et-cliquer en 2D~@
9495 Comment[it]=Gioco classico di avventura punta e clicca 2D~@
9496 Type=Application~%"
9497 executable scummvm)))
9498 #t))))
9499 (native-inputs
9500 `(("unzip" ,unzip)))
9501 (inputs
9502 `(("bash" ,bash)
9503 ("scummvm" ,scummvm)))
9504 (home-page "https://www.scummvm.org")
9505 (synopsis "2D point and click fantasy adventure game")
9506 (description
9507 "Lure of the Temptress is a classic 2D point and click adventure game.
9508
9509 You are Diermot, an unwilling hero who'd prefer a quiet life, and are, to all
9510 intents and purposes, a good man. After decades of unrest the King has united
9511 the warring factions in his kingdom and all his lands are at peace, except
9512 a remote region around a town called Turnvale. A revolt has recently taken
9513 place in Turnvale, a revolt orchestrated by an apprentice sorceress called
9514 Selena, the titular temptress. The king calls together his finest horsemen
9515 and heads off (with you in tow) to Turnvale just to witness how hellish
9516 mercenary monsters called Skorl are invading the town.
9517
9518 The king's men are defeated, the king is killed and you fall of your horse and
9519 bang your head heavily on the ground. You have been *unconscious for a while
9520 when you realize that you are in a dingy cell guarded by a not so friendly
9521 Skorl. Maybe it would be an idea to try and escape...")
9522 (license (license:non-copyleft "file:///README"))))
9523
9524 (define-public lure
9525 (make-lure-package
9526 "lure" "en" "0201i70qcs1m797kvxjx3ygkhg6kcl5yf49sihba2ga8l52q45zk"))
9527
9528 (define-public lure-de
9529 (make-lure-package
9530 "lure-de" "de" "0sqq7h5llml6rv85x0bfv4bgzwhs4c82p4w4zmfcaab6cjlad0sy"))
9531
9532 (define-public lure-es
9533 (make-lure-package
9534 "lure-es" "es" "1dvv5znvlsakw6w5r16calv9jkgw27aymgybsf4q22lcmpxbj1lk"))
9535
9536 (define-public lure-fr
9537 (make-lure-package
9538 "lure-fr" "fr" "1y51jjb7f8023832g44vd1jsb6ni85586pi2n5hjg9qjk6gi90r9"))
9539
9540 (define-public lure-it
9541 (make-lure-package
9542 "lure-it" "it" "1ks6n39r1cllisrrh6pcr39swsdv7ng3gx5c47vaw71zzfr70hjj"))
9543
9544 (define (make-queen-package name file-prefix release language hash)
9545 (package
9546 (name name)
9547 (version release)
9548 (source
9549 (origin
9550 (method url-fetch)
9551 (uri (string-append "mirror://sourceforge/scummvm/extras/"
9552 "Flight%20of%20the%20Amazon%20Queen/"
9553 file-prefix release ".zip"))
9554 (sha256
9555 (base32 hash))))
9556 (build-system trivial-build-system)
9557 (arguments
9558 `(#:modules ((guix build utils))
9559 #:builder
9560 (begin
9561 (use-modules (guix build utils))
9562 (let* ((out (assoc-ref %outputs "out"))
9563 (share (string-append out "/share"))
9564 (data (string-append share "/" ,name))
9565 (apps (string-append share "/applications"))
9566 (bin (string-append out "/bin"))
9567 (executable (string-append bin "/" ,name))
9568 (scummvm (assoc-ref %build-inputs "scummvm")))
9569 (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
9570 "/bin/unzip")))
9571 (invoke unzip "-j" (assoc-ref %build-inputs "source")))
9572 (let ((doc (string-append share "/doc/" ,name "-" ,version)))
9573 (install-file "readme.txt" doc))
9574 (install-file "queen.1c" data)
9575 (mkdir-p bin)
9576 (let ((bash (assoc-ref %build-inputs "bash")))
9577 (with-output-to-file executable
9578 (lambda ()
9579 (format #t "#!~a/bin/bash~%" bash)
9580 (format #t "exec ~a/bin/scummvm -q fr -p ~a queen~%"
9581 scummvm data))))
9582 (chmod executable #o755)
9583 ;; Create desktop file. There is no dedicated
9584 ;; icon for the game, so we borrow SCUMMVM's.
9585 (mkdir-p apps)
9586 (with-output-to-file (string-append apps "/" ,name ".desktop")
9587 (lambda _
9588 (format #t
9589 "[Desktop Entry]~@
9590 Name=Flight of the Amazon Queen~@
9591 GenericName=Queen~@
9592 Comment=Embark on a quest to rescue a kidnapped princess and in the process, discover the true sinister intentions of a suspiciously located Lederhosen company~@
9593 Comment[de]=Begib dich auf ein Abenteuer, um eine entführte Prinzessin zu retten und entdecke die wahren, finsteren Absichten eines verdächtig erscheinenden Lederhosen-Unternehmens~@
9594 Type=Application~@
9595 Exec=~a~@
9596 Icon=~a/share/icons/hicolor/scalable/apps/scummvm.svg~@
9597 Categories=AdventureGame;Game;RolePlaying;~@
9598 Keywords=adventure;game;roleplaying;fantasy;~%"
9599 executable scummvm))))
9600 #t)))
9601 (native-inputs
9602 `(("unzip" ,unzip)))
9603 (inputs
9604 `(("bash" ,bash)
9605 ("scummvm" ,scummvm)))
9606 (home-page "https://www.scummvm.org/")
9607 (synopsis "Classic 2D point and click adventure game")
9608 (description "Flight of the Amazon Queen is a 2D point-and-click
9609 adventure game set in the 1940s.
9610
9611 You assume the role of Joe King, a pilot for hire who is given the job
9612 of flying Faye Russell (a famous movie star) into the Amazon jungle
9613 for a photo shoot. Of course, things never go according to plans.
9614 After an unfortunate turn of events they find themselves stranded in
9615 the heart of the Amazon jungle, where Joe will embark on a quest to
9616 rescue a kidnapped princess and in the process, discover the true
9617 sinister intentions of a suspiciously located Lederhosen company. In
9618 a rich 2D environment, Joe will cross paths with a variety of unlikely
9619 jungle inhabitants including, but not limited to, a tribe of Amazon
9620 women and 6-foot-tall pygmies.")
9621 (license (license:non-copyleft "file:///readme.txt"))))
9622
9623 (define-public queen
9624 (make-queen-package
9625 "queen" "FOTAQ_Talkie-" "1.1" "en"
9626 "1a6q71q1dl9vvw2qqsxk5h1sv0gaqy6236zr5905w2is01gdsp52"))
9627
9628 (define-public queen-de
9629 (make-queen-package
9630 "queen-de" "FOTAQ_Ger_talkie-" "1.0" "de"
9631 "13vn43x7214vyprlpqabvv71k890nff3d6fjscflr1ll7acjca3f"))
9632
9633 (define-public queen-fr
9634 (make-queen-package
9635 "queen-fr" "FOTAQ_Fr_Talkie_" "1.0" "fr"
9636 "0hq5g4qrkcwm2kn5i4kv4hijs9hi7bw9xl1vrwd1l69qqn30crwy"))
9637
9638 (define-public queen-it
9639 (make-queen-package
9640 "queen-it" "FOTAQ_It_Talkie_" "1.0" "it"
9641 "1h76y70lrpzfjkm53n4nr364nhyka54vbz9r7sadzyzl7c7ilv4d"))
9642
9643 (define-public sky
9644 (package
9645 (name "sky")
9646 (version "1.2") ;1.3 is floppy version
9647 (source
9648 (origin
9649 (method url-fetch)
9650 (uri (string-append "mirror://sourceforge/scummvm/extras/"
9651 "Beneath%20a%20Steel%20Sky/"
9652 "bass-cd-" version ".zip"))
9653 (sha256
9654 (base32 "14s5jz67kavm8l15gfm5xb7pbpn8azrv460mlxzzvdpa02a9n82k"))))
9655 (build-system trivial-build-system)
9656 (arguments
9657 `(#:modules ((guix build utils))
9658 #:builder
9659 (begin
9660 (use-modules (guix build utils))
9661 (let* ((out (assoc-ref %outputs "out"))
9662 (share (string-append out "/share"))
9663 (data (string-append share "/" ,name))
9664 (apps (string-append share "/applications"))
9665 (bin (string-append out "/bin"))
9666 (executable (string-append bin "/" ,name))
9667 (scummvm (assoc-ref %build-inputs "scummvm")))
9668 (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
9669 "/bin/unzip")))
9670 (invoke unzip "-j" (assoc-ref %build-inputs "source")))
9671 (let ((doc (string-append share "/doc/bass-" ,version)))
9672 (install-file "readme.txt" doc))
9673 (for-each (lambda (f) (install-file f data))
9674 (find-files "." "^sky\\."))
9675 ;; Build the executable.
9676 (mkdir-p bin)
9677 (let ((bash (assoc-ref %build-inputs "bash")))
9678 (with-output-to-file executable
9679 (lambda ()
9680 (format #t "#!~a/bin/bash~%" bash)
9681 (format #t "exec ~a/bin/scummvm -p ~a sky~%" scummvm data))))
9682 (chmod executable #o755)
9683 ;; Create desktop file. There is no dedicated
9684 ;; icon for the game, so we borrow SCUMMVM's.
9685 (mkdir-p apps)
9686 (with-output-to-file (string-append apps "/" ,name ".desktop")
9687 (lambda _
9688 (format #t
9689 "[Desktop Entry]~@
9690 Name=Beneath a Steel Sky~@
9691 GenericName=Bass~@
9692 Exec=~a~@
9693 Icon=~a/share/icons/hicolor/scalable/apps/scummvm.svg~@
9694 Categories=AdventureGame;Game;RolePlaying;~@
9695 Keywords=adventure;game;roleplaying;cyberpunk;~@
9696 Comment=A science-fiction adventure game set in a bleak post-apocalyptic vision of the future~@
9697 Comment[de]=Ein Science-Fiction-Abenteuerspiel \
9698 angesiedelt in einer düsteren, postapokalyptischen Vision der Zukunft~@
9699 Type=Application~%"
9700 executable scummvm)))
9701 #t))))
9702 (native-inputs
9703 `(("unzip" ,unzip)))
9704 (inputs
9705 `(("bash" ,bash)
9706 ("scummvm" ,scummvm)))
9707 (home-page "https://www.scummvm.org/")
9708 (synopsis "Classic 2D point and click science-fiction adventure game")
9709 (description
9710 "Beneath a Steel Sky is a science-fiction thriller set in a bleak
9711 post-apocalyptic vision of the future. It revolves around Union City,
9712 where selfishness, rivalry, and corruption by its citizens seems to be
9713 all too common, those who can afford it live underground, away from
9714 the pollution and social problems which are plaguing the city.
9715
9716 You take on the role of Robert Foster, an outcast of sorts from the
9717 city since a boy who was raised in a remote environment outside of
9718 Union City simply termed ``the gap''. Robert's mother took him away
9719 from Union City as a child on their way to ``Hobart'' but the
9720 helicopter crashed on its way. Unfortunately, Robert's mother died,
9721 but he survived and was left to be raised by a local tribe from the
9722 gap.
9723
9724 Years later, Union City security drops by and abducts Robert, killing
9725 his tribe in the process; upon reaching the city the helicopter taking
9726 him there crashes with him escaping, high upon a tower block in the
9727 middle of the city. He sets out to discover the truth about his past,
9728 and to seek vengeance for the killing of his tribe.")
9729 (license (license:non-copyleft "file:///readme.txt"))))
9730
9731 (define-public gnurobots
9732 (package
9733 (name "gnurobots")
9734 (version "1.2.0")
9735 (source
9736 (origin
9737 (method url-fetch)
9738 (uri (string-append "mirror://gnu/gnurobots/gnurobots-"
9739 version ".tar.gz"))
9740 (sha256
9741 (base32
9742 "07gi3lsmbzzsjambgixj6xy79lh22km84z7bnzgwzxdy806lyvwb"))))
9743 (build-system gnu-build-system)
9744 (inputs
9745 `(("glib" ,glib)
9746 ("gtk+" ,gtk+-2)
9747 ("vte" ,vte/gtk+-2)
9748 ("readline" ,readline)
9749 ("guile" ,guile-1.8)))
9750 (native-inputs
9751 `(("pkg-config" ,pkg-config)))
9752 (arguments
9753 `(#:make-flags
9754 (list
9755 ;; Do not abort build on "deprecated-declarations" warnings.
9756 "CFLAGS=-Wno-error=deprecated-declarations"
9757 ;; Find readline headers in sub-directory.
9758 (string-append "READLINE_CFLAGS=-I"
9759 (assoc-ref %build-inputs "readline")
9760 "/include/readline/"))
9761 #:phases
9762 (modify-phases %standard-phases
9763 (add-after 'install 'install-doc
9764 (lambda* (#:key outputs #:allow-other-keys)
9765 (install-file "doc/Robots-HOWTO"
9766 (string-append (assoc-ref outputs "out")
9767 "/share/doc/gnurobots-"
9768 ,version))
9769 #t)))))
9770 (home-page "https://www.gnu.org/software/gnurobots/")
9771 (synopsis "Program a little robot and watch it explore a world")
9772 (description
9773 "GNU Robots is a game in which you program a robot to explore a world
9774 full of enemies that can hurt it, obstacles and food to be eaten. The goal of
9775 the game is to stay alive and collect prizes. The robot program conveniently
9776 may be written in a plain text file in the Scheme programming language.")
9777 (license license:gpl3+)))
9778
9779 (define-public ri-li
9780 (package
9781 (name "ri-li")
9782 (version "2.0.1")
9783 (source (origin
9784 (method url-fetch)
9785 (uri (string-append "mirror://sourceforge/ri-li/"
9786 "Ri-li%20Linux_Unix/Ri-li%20V" version "/"
9787 "Ri-li-" version ".tar.bz2"))
9788 (sha256
9789 (base32
9790 "1gcdsgnnbbn1mb1hkpwniv3fhkaj1nn8gq33v5c16q3wqchcq77p"))
9791 ;; Taken from
9792 ;; <https://github.com/NixOS/nixpkgs/blob/master/pkgs/games/rili/moderinze_cpp.patch>.
9793 ;; It doesn't build otherwise.
9794 (patches (search-patches "ri-li-modernize_cpp.patch"))))
9795 (build-system gnu-build-system)
9796 (arguments
9797 `(#:phases
9798 (modify-phases %standard-phases
9799 ;; Remove "gentoo" subdirectory from Makefile, as it is
9800 ;; missing a make file and generates a build failure.
9801 (add-after 'configure 'fix-build
9802 (lambda _
9803 (substitute* "Makefile"
9804 ((" gentoo") ""))
9805 #t))
9806 (add-after 'install 'install-desktop-file
9807 (lambda* (#:key outputs #:allow-other-keys)
9808 (let* ((out (assoc-ref outputs "out"))
9809 (apps (string-append out "/share/applications"))
9810 (pixmaps (string-append out "/share/pixmaps")))
9811 (for-each (lambda (f) (install-file f pixmaps))
9812 (find-files "data" "\\.(png|ico)$"))
9813 (mkdir-p apps)
9814 (with-output-to-file (string-append apps "/ri-li.desktop")
9815 (lambda _
9816 (format #t
9817 "[Desktop Entry]~@
9818 Name=Ri-li~@
9819 Exec=~a/bin/Ri_li~@
9820 Icon=~a/Ri-li-icon-32x32.png~@
9821 Categories=Game;ArcadeGame;~@
9822 Keywords=toy;train;wooden;snake-like;engine;~@
9823 Comment=a toy simulator game~@
9824 Comment[de]=Ein Spiel mit einem kleinen Zug~@
9825 Comment[fr]=un jeu de petit train~@
9826 Comment[ro_RO]=un joc cu un tren de jucărie~@
9827 Terminal=false~@
9828 Type=Application~%"
9829 out pixmaps))))
9830 #t))
9831 (add-after 'install-desktop-file 'remove-spurious-files
9832 ;; Delete redundant files already installed somewhere else.
9833 (lambda* (#:key outputs #:allow-other-keys)
9834 (let ((out (assoc-ref outputs "out")))
9835 (for-each delete-file
9836 (find-files (string-append out "/share/Ri-li")
9837 "\\.(png|ico)|COPYING"))
9838 #t))))))
9839 (inputs
9840 `(("sdl" ,(sdl-union (list sdl sdl-mixer)))))
9841 (home-page "http://www.ri-li.org")
9842 (synopsis "Toy train simulation game")
9843 (description "Ri-li is a game in which you drive a wooden toy
9844 steam locomotive across many levels and collect all the coaches to
9845 win.")
9846 ;; The project is dual-licensed GPL2+ and GPL3+.
9847 (license (list license:gpl2+ license:gpl3+))))
9848
9849 (define-public freeorion
9850 (package
9851 (name "freeorion")
9852 (version "0.4.10")
9853 (source
9854 (origin
9855 (method url-fetch)
9856 (uri (string-append "https://github.com/freeorion/freeorion/releases/"
9857 "download/v" version "/FreeOrion_v" version
9858 "_2020-07-10.f3d403e_Source.tar.gz"))
9859 (sha256
9860 (base32 "12xspixrkx6mmmsdqjha0hg02r4y73pk229l0wjq9s0yp8nb8ap7"))
9861 (modules '((guix build utils)))
9862 (snippet
9863 '(begin
9864 ;; There are some bundled fonts.
9865 (for-each delete-file-recursively '("default/data/fonts"))
9866 #t))))
9867 (build-system cmake-build-system)
9868 (arguments
9869 '(#:tests? #f ;no test
9870 #:phases
9871 (modify-phases %standard-phases
9872 (add-after 'unpack 'unbundle-fonts
9873 (lambda* (#:key inputs #:allow-other-keys)
9874 (let ((roboto-dir (string-append (assoc-ref inputs "font-roboto")
9875 "/share/fonts/truetype/")))
9876 (substitute* "UI/ClientUI.cpp"
9877 (("\\(GetRootDataDir.*?Roboto-(Bold|Regular)\\.ttf\"\\)\\.string\\(\\)\\);"
9878 all type)
9879 (string-append "\"" roboto-dir "Roboto-" type ".ttf\");")))
9880 #t))))))
9881 (inputs
9882 `(("boost" ,boost)
9883 ("boost_signals" ,boost-signals2)
9884 ("font-dejavu" ,font-dejavu)
9885 ("font-roboto" ,font-google-roboto)
9886 ("freetype2" ,freetype)
9887 ("glew" ,glew)
9888 ("glu" ,glu)
9889 ("libogg" ,libogg)
9890 ("libpng" ,libpng)
9891 ("libvorbis" ,libvorbis)
9892 ("openal" ,openal)
9893 ("python" ,python)
9894 ("sdl2" ,sdl2)
9895 ("zlib" ,zlib)))
9896 (home-page "https://www.freeorion.org/index.php/Main_Page")
9897 (synopsis "Turn-based space empire and galactic conquest computer game")
9898 (description
9899 "FreeOrion is a turn-based space empire and galactic conquest (4X)
9900 computer game being designed and built by the FreeOrion project. Control an
9901 empire with the goal of exploring the galaxy, expanding your territory,
9902 exploiting the resources, and exterminating rival alien empires. FreeOrion is
9903 inspired by the tradition of the Master of Orion games, but is not a clone or
9904 remake of that series or any other game.")
9905 ;; Source code is released under gpl2. Artwork, music and sounds, and
9906 ;; in-game text are released under cc-by-sa3.0. Game content scripts are
9907 ;; released under both gpl2 and cc-by-sa3.0. Bundled Gigi library is
9908 ;; released under lgpl2.1+.
9909 (license (list license:gpl2 license:cc-by-sa3.0 license:lgpl2.1+))))
9910
9911 (define-public leela-zero
9912 (package
9913 (name "leela-zero")
9914 (version "0.17")
9915 (source
9916 (origin
9917 (method git-fetch)
9918 (uri (git-reference
9919 (url "https://github.com/leela-zero/leela-zero")
9920 (commit (string-append "v" version))))
9921 (file-name (git-file-name name version))
9922 (sha256
9923 (base32
9924 "17px5iny8mql5c01bymcli7zfssswkzvb2i8gnsmjcck6i2n8srl"))
9925 (patches (search-patches "leela-zero-gtest.patch"))))
9926 (build-system cmake-build-system)
9927 (native-inputs
9928 `(("googletest" ,googletest)))
9929 (inputs
9930 `(("boost" ,boost)
9931 ("ocl-icd" ,ocl-icd)
9932 ("openblas" ,openblas)
9933 ("opencl-headers" ,opencl-headers)
9934 ("qtbase" ,qtbase)
9935 ("zlib" ,zlib)))
9936 (arguments
9937 '(#:configure-flags '("-DUSE_BLAS=YES")
9938 #:phases (modify-phases %standard-phases
9939 (add-before 'configure 'fix-tests
9940 (lambda* (#:key outputs #:allow-other-keys)
9941 (let ((home (getcwd)))
9942 (setenv "HOME" home)
9943 (substitute* "src/tests/gtests.cpp"
9944 (("\\.\\./src/tests/0k\\.txt")
9945 (string-append home "/src/tests/0k.txt"))
9946 (("cfg_gtp_mode = true;")
9947 "cfg_gtp_mode = true; cfg_cpu_only = true;")))
9948 #t))
9949 (replace 'check
9950 (lambda _
9951 (invoke "./tests"))))))
9952 (home-page "https://github.com/leela-zero/leela-zero")
9953 (synopsis "Program playing the game of Go")
9954 (description
9955 "Leela-zero is a Go engine with no human-provided knowledge, modeled after
9956 the AlphaGo Zero paper. The current best network weights file for the engine
9957 can be downloaded from @url{https://zero.sjeng.org/best-network}.")
9958 (license license:gpl3+)))
9959
9960 (define-public q5go
9961 (package
9962 (name "q5go")
9963 (version "1.0")
9964 (source (origin
9965 (method git-fetch)
9966 (uri (git-reference
9967 (url "https://github.com/bernds/q5Go")
9968 (commit (string-append "q5go-" version))))
9969 (file-name (git-file-name name version))
9970 (sha256
9971 (base32
9972 "1gdlfqcqkqv7vph3qwq78d0qz6dhmdsranxq9bmixiisbzkqby31"))))
9973 (build-system gnu-build-system)
9974 (native-inputs
9975 `(("pkg-config" ,pkg-config)))
9976 (inputs
9977 `(("qtbase" ,qtbase)
9978 ("qtmultimedia" ,qtmultimedia)
9979 ("qtsvg" ,qtsvg)))
9980 (arguments
9981 '(#:phases
9982 (modify-phases %standard-phases
9983 (add-after 'unpack 'fix-configure-script
9984 (lambda _
9985 ;; Bypass the unavailable qtchooser program.
9986 (substitute* "configure"
9987 (("test -z \"QTCHOOSER\"")
9988 "false")
9989 (("qtchooser -run-tool=(.*) -qt=qt5" _ command)
9990 command))
9991 #t))
9992 (add-after 'unpack 'fix-paths
9993 (lambda _
9994 (substitute* '("src/pics/Makefile.in"
9995 "src/translations/Makefile.in")
9996 (("\\$\\(datadir\\)/qGo/")
9997 "$(datadir)/q5go/"))
9998 #t))
9999 (add-after 'install 'install-desktop-file
10000 (lambda* (#:key outputs #:allow-other-keys)
10001 (let* ((out (assoc-ref outputs "out"))
10002 (apps (string-append out "/share/applications"))
10003 (pics (string-append out "/share/q5go/pics")))
10004 (delete-file-recursively (string-append out "/share/applnk"))
10005 (delete-file-recursively (string-append out "/share/mimelnk"))
10006 (install-file "../source/src/pics/Bowl.ico" pics)
10007 (mkdir-p apps)
10008 (with-output-to-file (string-append apps "/q5go.desktop")
10009 (lambda _
10010 (format #t
10011 "[Desktop Entry]~@
10012 Name=q5go~@
10013 Exec=~a/bin/q5go~@
10014 Icon=~a/Bowl.ico~@
10015 Categories=Game;~@
10016 Comment=Game of Go~@
10017 Comment[de]=Spiel des Go~@
10018 Comment[eo]=Goo~@
10019 Comment[es]=Juego de Go~@
10020 Comment[fr]=Jeu de Go~@
10021 Comment[ja]=囲碁~@
10022 Comment[ko]=바둑~@
10023 Comment[zh]=围棋~@
10024 Terminal=false~@
10025 Type=Application~%"
10026 out pics))))
10027 #t)))))
10028 (synopsis "Qt GUI to play the game of Go")
10029 (description
10030 "This a tool for Go players which performs the following functions:
10031 @itemize
10032 @item SGF editor,
10033 @item Analysis frontend for Leela Zero (or compatible engines),
10034 @item GTP interface (to play against an engine),
10035 @item IGS client (to play on the internet),
10036 @item Export games to a variety of formats.
10037 @end itemize")
10038 (home-page "https://github.com/bernds/q5Go")
10039 (license license:gpl2+)))
10040
10041 (define-public ktuberling
10042 (package
10043 (name "ktuberling")
10044 (version "20.12.0")
10045 (source
10046 (origin
10047 (method url-fetch)
10048 (uri (string-append "mirror://kde/stable/release-service/" version
10049 "/src/ktuberling-" version ".tar.xz"))
10050 (sha256
10051 (base32 "0mlv9qllg70p26dbrcsr820c70d3ib88hapc1z6wgjhdpmc12ni1"))))
10052 (build-system qt-build-system)
10053 (native-inputs
10054 `(("extra-cmake-modules" ,extra-cmake-modules)
10055 ("kdoctools" ,kdoctools)
10056 ("perl" ,perl)))
10057 (inputs
10058 `(("kcompletion" ,kcompletion)
10059 ("kconfigwidgets" ,kconfigwidgets)
10060 ("kcoreaddons" ,kcoreaddons)
10061 ("kcrash" ,kcrash)
10062 ("kdbusaddons" ,kdbusaddons)
10063 ("ki18n" ,ki18n)
10064 ("kio" ,kio)
10065 ("kwidgetsaddons" ,kwidgetsaddons)
10066 ("kxmlgui" ,kxmlgui)
10067 ("libkdegames" ,libkdegames)
10068 ("python" ,python-wrapper)
10069 ("qtbase" ,qtbase)
10070 ("qtmultimedia" ,qtmultimedia)
10071 ("qtdeclarative" ,qtdeclarative)
10072 ("qtsvg" ,qtsvg)))
10073 (home-page "https://games.kde.org/")
10074 (synopsis "Stamp drawing toy")
10075 (description "KTuberling is a drawing toy intended for small children and
10076 adults who remain young at heart. The game has no winner; the only purpose is
10077 to make the funniest faces you can. Several activities are possible, e.g.:
10078
10079 @itemize
10080 @item Give the potato a funny face, clothes, and other goodies
10081 @item Build a small town, complete with school, zoo, and fire department
10082 @item Create a fantastic moonscape with spaceships and aliens
10083 @item Top a pizza
10084 @end itemize
10085
10086 KTuberling can speak the name of each the object in several languages,
10087 to assist in learning basic vocabulary.
10088
10089 This package is part of the KDE games module.")
10090 (license (list license:gpl2+ license:fdl1.2+))))
10091
10092 (define-public picmi
10093 (package
10094 (name "picmi")
10095 (version "20.12.0")
10096 (source
10097 (origin
10098 (method url-fetch)
10099 (uri (string-append "mirror://kde/stable/release-service/" version
10100 "/src/picmi-" version ".tar.xz"))
10101 (sha256
10102 (base32 "1dfq9m4njh0czz8zws46rkz6xq2n6xra5w223m3s2f5civiw5msz"))))
10103 (build-system qt-build-system)
10104 (native-inputs
10105 `(("extra-cmake-modules" ,extra-cmake-modules)
10106 ("kdoctools" ,kdoctools)))
10107 (inputs
10108 `(("kcoreaddons" ,kcoreaddons)
10109 ("kcrash" ,kcrash)
10110 ("kdbusaddons" ,kdbusaddons)
10111 ("kdeclarative" ,kdeclarative)
10112 ("ki18n" ,ki18n)
10113 ("kio" ,kio)
10114 ("knewstuff" ,knewstuff)
10115 ("kxmlgui" ,kxmlgui)
10116 ("libkdegames" ,libkdegames)
10117 ("qtbase" ,qtbase)
10118 ("qtdeclarative" ,qtdeclarative)
10119 ("qtsvg" ,qtsvg)))
10120 (home-page "https://games.kde.org/")
10121 (synopsis "Number logic game")
10122 (description "Picmi is a number logic game in which cells in a grid have
10123 to be colored or left blank according to numbers given at the side of the
10124 grid. The aim is to reveal a hidden picture.
10125
10126 This package is part of the KDE games module.")
10127 (license (list license:gpl2+ license:fdl1.2+))))
10128
10129 (define-public kolf
10130 (package
10131 (name "kolf")
10132 (version "20.12.0")
10133 (source
10134 (origin
10135 (method url-fetch)
10136 (uri (string-append "mirror://kde/stable/release-service/" version
10137 "/src/kolf-" version ".tar.xz"))
10138 (sha256
10139 (base32 "1lpp6pzr5dgd4si4a8c7hcvgxgqy0bgyhkx9m6jqb0zhll6dxj10"))))
10140 (build-system qt-build-system)
10141 (native-inputs
10142 `(("extra-cmake-modules" ,extra-cmake-modules)
10143 ("kdoctools" ,kdoctools)))
10144 (inputs
10145 `(("kcompletion" ,kcompletion)
10146 ("kconfigwidgets" ,kconfigwidgets)
10147 ("kcoreaddons" ,kcoreaddons)
10148 ("kcrash" ,kcrash)
10149 ("kdbusaddons" ,kdbusaddons)
10150 ("ki18n" ,ki18n)
10151 ("kio" ,kio)
10152 ("kwidgetsaddons" ,kwidgetsaddons)
10153 ("kxmlgui" ,kxmlgui)
10154 ("ktextwidgets" ,ktextwidgets)
10155 ("libkdegames" ,libkdegames)
10156 ("qtbase" ,qtbase)
10157 ("qtdeclarative" ,qtdeclarative)))
10158 (home-page "https://games.kde.org/")
10159 (synopsis "Miniature golf game")
10160 (description "Kolf is a miniature golf game for one to ten players. The
10161 game is played from an overhead view, with a short bar representing the golf
10162 club. Kolf features many different types of objects, such as water hazards,
10163 slopes, sand traps, and black holes (warps), among others.
10164
10165 Features are:
10166 @itemize
10167 @item Single and Multi-player (up to ten players) modes
10168 @item High scores table
10169 @item Dynamic courses
10170 @item Third-party courses
10171 @item Course editor
10172 @end itemize
10173
10174 This package is part of the KDE games module.")
10175 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
10176
10177 (define-public libkmahjongg
10178 (package
10179 (name "libkmahjongg")
10180 (version "20.12.0")
10181 (source
10182 (origin
10183 (method url-fetch)
10184 (uri (string-append "mirror://kde/stable/release-service/"
10185 version "/src/libkmahjongg-" version ".tar.xz"))
10186 (sha256
10187 (base32 "10ljzbf7qki5flydankrbksaihhkqpfyljb8c71fbwqwmkr7rgfq"))))
10188 (build-system qt-build-system)
10189 (native-inputs
10190 `(("extra-cmake-modules" ,extra-cmake-modules)))
10191 (inputs
10192 `(("kauth" ,kauth)
10193 ("kcompletion" ,kcompletion)
10194 ;("kconfig" ,kconfig)
10195 ("kcodecs" ,kcodecs)
10196 ("kconfigwidgets" ,kconfigwidgets)
10197 ("kcoreaddons" ,kcoreaddons)
10198 ("ki18n" ,ki18n)
10199 ("kwidgetsaddons" ,kwidgetsaddons)
10200 ("qtbase" ,qtbase)
10201 ("qtsvg" ,qtsvg)))
10202 (home-page "https://games.kde.org/")
10203 (synopsis "Shared library for kmahjongg and kshisen")
10204 (description "Shared library and common files for kmahjongg, kshisen and
10205 other Mah Jongg like games.")
10206 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
10207
10208 (define-public kmahjongg
10209 (package
10210 (name "kmahjongg")
10211 (version "20.12.0")
10212 (source
10213 (origin
10214 (method url-fetch)
10215 (uri (string-append "mirror://kde/stable/release-service/"
10216 version "/src/kmahjongg-" version ".tar.xz"))
10217 (sha256
10218 (base32 "1fcj4jb2zzbaxp7cp04w36y0c7lh77yzin66fmvrcxkl11xi2wwd"))))
10219 (build-system qt-build-system)
10220 (native-inputs
10221 `(("extra-cmake-modules" ,extra-cmake-modules)
10222 ("kdoctools" ,kdoctools)))
10223 (inputs
10224 `(("kcompletion" ,kcompletion)
10225 ("kcrash" ,kcrash)
10226 ("kdbusaddons" ,kdbusaddons)
10227 ("kdeclarative" ,kdeclarative)
10228 ("ki18n" ,ki18n)
10229 ("knewstuff" ,knewstuff)
10230 ("kxmlgui" ,kxmlgui)
10231 ("libkdegames" ,libkdegames)
10232 ("libkmahjongg" ,libkmahjongg)
10233 ("qtbase" ,qtbase)
10234 ("qtdeclarative" ,qtdeclarative)
10235 ("qtsvg" ,qtsvg)))
10236 (home-page "https://games.kde.org/")
10237 (synopsis "Tile laying patience")
10238 (description "In KMahjongg the tiles are scrambled and staked on top of
10239 each other to resemble a certain shape. The player is then expected to remove
10240 all the tiles off the game board by locating each tile's matching pair.
10241
10242 A variety of tile layouts are included, as well as an editor to create new
10243 layouts.
10244
10245 This package is part of the KDE games module.")
10246 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
10247
10248 (define-public kshisen
10249 (package
10250 (name "kshisen")
10251 (version "20.12.0")
10252 (source
10253 (origin
10254 (method url-fetch)
10255 (uri (string-append "mirror://kde/stable/release-service/"
10256 version "/src/kshisen-" version ".tar.xz"))
10257 (sha256
10258 (base32 "1hrwr0f1kidivsp8lnwdbqz3xxagjvjwh72r3gma8smfilybygfb"))))
10259 (build-system qt-build-system)
10260 (native-inputs
10261 `(("extra-cmake-modules" ,extra-cmake-modules)
10262 ;("perl" ,perl)
10263 ;("pkg-config" ,pkg-config)
10264 ("kdoctools" ,kdoctools)))
10265 (inputs
10266 `(("kauth" ,kauth)
10267 ("kcompletion" ,kcompletion)
10268 ("kconfigwidgets" ,kconfigwidgets)
10269 ("kcoreaddons" ,kcoreaddons)
10270 ("kcrash" ,kcrash)
10271 ("kdbusaddons" ,kdbusaddons)
10272 ("ki18n" ,ki18n)
10273 ("kxmlgui" ,kxmlgui)
10274 ("libkdegames" ,libkdegames)
10275 ("libkmahjongg" ,libkmahjongg)
10276 ("qtbase" ,qtbase)
10277 ("qtdeclarative" ,qtdeclarative)))
10278 (home-page "https://games.kde.org/")
10279 (synopsis "Shisen-Sho solitaire game")
10280 (description "KShisen is a solitaire-like game played using the standard
10281 set of Mahjong tiles. Unlike Mahjong however, KShisen has only one layer of
10282 scrambled tiles
10283
10284 This package is part of the KDE games module.")
10285 (license license:gpl2+)))
10286
10287 (define-public kajongg
10288 (package
10289 (name "kajongg")
10290 (version "20.12.0")
10291 (source
10292 (origin
10293 (method url-fetch)
10294 (uri (string-append "mirror://kde/stable/release-service/"
10295 version "/src/kajongg-" version ".tar.xz"))
10296 (sha256
10297 (base32 "03fdbnx7zx7vgcxvwd1h1098ks9gq162bwz35fhpyzpynr667m5r"))))
10298 (build-system qt-build-system)
10299 (arguments
10300 `(#:phases
10301 (modify-phases %standard-phases
10302 (add-after 'install 'wrap
10303 (lambda* (#:key outputs #:allow-other-keys)
10304 (let ((out (assoc-ref outputs "out")))
10305 (wrap-program (string-append out "/bin/kajongg")
10306 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
10307 #t))))))
10308 (native-inputs
10309 `(("extra-cmake-modules" ,extra-cmake-modules)
10310 ;("perl" ,perl)
10311 ("kdoctools" ,kdoctools)))
10312 (inputs
10313 `(("kconfig" ,kconfig)
10314 ("kconfigwidgets" ,kconfigwidgets)
10315 ("kcoreaddons" ,kcoreaddons)
10316 ("ki18n" ,ki18n)
10317 ("libkmahjongg" ,libkmahjongg)
10318 ("python" ,python)
10319 ("python-twisted" ,python-twisted)
10320 ("python-pyqt" ,python-pyqt)
10321 ("qtbase" ,qtbase)
10322 ("qtsvg" ,qtsvg)))
10323 (home-page "https://games.kde.org/")
10324 (synopsis "Classical Mah Jongg game for 4 players")
10325 (description "Kajongg is the ancient Chinese board game for 4 players.
10326
10327 If you are looking for the Mah Jongg solitaire please use the application
10328 kmahjongg.
10329
10330 Kajongg can be used in two different ways: Scoring a manual game where you
10331 play as always and use Kajongg for the computation of scores and for
10332 bookkeeping. Or you can use Kajongg to play against any combination of other
10333 human players or computer players.
10334
10335 This package is part of the KDE games module.")
10336 (license (list license:gpl2+ license:fdl1.2+))))
10337
10338 (define-public kbreakout
10339 (package
10340 (name "kbreakout")
10341 (version "20.12.0")
10342 (source
10343 (origin
10344 (method url-fetch)
10345 (uri (string-append "mirror://kde/stable/release-service/" version
10346 "/src/kbreakout-" version ".tar.xz"))
10347 (sha256
10348 (base32 "0kqj2cx0ny3qq65c6w5fpnzmrwl9irg8slzvpd3anck5cnvma3j4"))))
10349 (build-system qt-build-system)
10350 (native-inputs
10351 `(("extra-cmake-modules" ,extra-cmake-modules)
10352 ("kdoctools" ,kdoctools)))
10353 (inputs
10354 `(("kcompletion" ,kcompletion)
10355 ("kconfig" ,kconfig)
10356 ("kconfigwidgets" ,kconfigwidgets)
10357 ("kcoreaddons" ,kcoreaddons)
10358 ("kcrash" ,kcrash)
10359 ("kdbusaddons" ,kdbusaddons)
10360 ("ki18n" ,ki18n)
10361 ("kwidgetsaddons" ,kwidgetsaddons)
10362 ("kxmlgui" ,kxmlgui)
10363 ("libkdegames" ,libkdegames)
10364 ("qtbase" ,qtbase)
10365 ("qtdeclarative" ,qtdeclarative)))
10366 (home-page "https://games.kde.org/")
10367 (synopsis "Breakout like game")
10368 (description "KBreakout is similar to the classics breakout and xboing,
10369 featuring a number of added graphical enhancements and effects. You control a
10370 paddle at the bottom of the playing-field, and must destroy bricks at the top
10371 by bouncing balls against them.
10372
10373 This package is part of the KDE games module.")
10374 (license (list license:gpl2+ license:fdl1.2+))))
10375
10376 (define-public kmines
10377 (package
10378 (name "kmines")
10379 (version "20.12.0")
10380 (source
10381 (origin
10382 (method url-fetch)
10383 (uri (string-append "mirror://kde/stable/release-service/" version
10384 "/src/kmines-" version ".tar.xz"))
10385 (sha256
10386 (base32 "0hqjwh3jq2npqwkvh67fyn2xnq8swiasdw5jz8f0ikl0k28id775"))))
10387 (build-system qt-build-system)
10388 (native-inputs
10389 `(("extra-cmake-modules" ,extra-cmake-modules)
10390 ("kdoctools" ,kdoctools)))
10391 (inputs
10392 `(("kcompletion" ,kcompletion)
10393 ("kconfig" ,kconfig)
10394 ("kconfigwidgets" ,kconfigwidgets)
10395 ("kcoreaddons" ,kcoreaddons)
10396 ("kcrash" ,kcrash)
10397 ("kdbusaddons" ,kdbusaddons)
10398 ("ki18n" ,ki18n)
10399 ("ktextwidgets" ,ktextwidgets)
10400 ("kwidgetsaddons" ,kwidgetsaddons)
10401 ("kxmlgui" ,kxmlgui)
10402 ("libkdegames" ,libkdegames)
10403 ("qtbase" ,qtbase)
10404 ("qtdeclarative" ,qtdeclarative)))
10405 (home-page "https://games.kde.org/")
10406 (synopsis "Classical mine sweeper game")
10407 (description "KMines is a classic Minesweeper game. The idea is to
10408 uncover all the squares without blowing up any mines. When a mine is blown
10409 up, the game is over.
10410
10411 This package is part of the KDE games module.")
10412 (license (list license:gpl2+ license:fdl1.2+))))
10413
10414 (define-public konquest
10415 (package
10416 (name "konquest")
10417 (version "20.12.0")
10418 (source
10419 (origin
10420 (method url-fetch)
10421 (uri (string-append "mirror://kde/stable/release-service/"
10422 version "/src/konquest-" version ".tar.xz"))
10423 (sha256
10424 (base32 "0lnwj06vv4qx05hr8pzysnvrxh8y04asajrph0rsj37v8hs9g5lh"))))
10425 (build-system qt-build-system)
10426 (native-inputs
10427 `(("extra-cmake-modules" ,extra-cmake-modules)
10428 ("kdoctools" ,kdoctools)))
10429 (inputs
10430 `(("kcompletion" ,kcompletion)
10431 ("kconfig" ,kconfig)
10432 ("kcoreaddons" ,kcoreaddons)
10433 ("kcrash" ,kcrash)
10434 ("kdbusaddons" ,kdbusaddons)
10435 ("kguiaddons" ,kguiaddons)
10436 ("ki18n" ,ki18n)
10437 ("kwidgetsaddons" ,kwidgetsaddons)
10438 ("kxmlgui" ,kxmlgui)
10439 ("libkdegames" ,libkdegames)
10440 ("qtbase" ,qtbase)
10441 ("qtdeclarative" ,qtdeclarative)
10442 ("qtsvg" ,qtsvg)))
10443 (home-page "https://games.kde.org/")
10444 (synopsis "Simple turn-based strategy game")
10445 (description "Konquest is the KDE version of Gnu-Lactic Konquest. Players
10446 conquer other planets by sending ships to them. The goal is to build an
10447 interstellar empire and ultimately conquer all other player's planets. The
10448 game can be played with up to nine empires, commanded either by the computer
10449 or by puny earthlings.
10450
10451 This package is part of the KDE games module.")
10452 (license (list license:gpl2+ license:fdl1.2+))))
10453
10454 (define-public kbounce
10455 (package
10456 (name "kbounce")
10457 (version "20.12.0")
10458 (source
10459 (origin
10460 (method url-fetch)
10461 (uri (string-append "mirror://kde/stable/release-service/"
10462 version "/src/kbounce-" version ".tar.xz"))
10463 (sha256
10464 (base32 "0ymy0z1qlw3n653xs3dsa1xm78q4xaj09dnnci4km77rzis26vb6"))))
10465 (build-system qt-build-system)
10466 (native-inputs
10467 `(("extra-cmake-modules" ,extra-cmake-modules)
10468 ("kdoctools" ,kdoctools)))
10469 (inputs
10470 `(("kcompletion" ,kcompletion)
10471 ("kconfigwidgets" ,kconfigwidgets)
10472 ("kcoreaddons" ,kcoreaddons)
10473 ("kcrash" ,kcrash)
10474 ("kdbusaddons" ,kdbusaddons)
10475 ("ki18n" ,ki18n)
10476 ("kio" ,kio)
10477 ("kwidgetsaddons" ,kwidgetsaddons)
10478 ("kxmlgui" ,kxmlgui)
10479 ("libkdegames" ,libkdegames)
10480 ("qtbase" ,qtbase)
10481 ("qtdeclarative" ,qtdeclarative)
10482 ("qtsvg" ,qtsvg)))
10483 (home-page "https://games.kde.org/")
10484 (synopsis "Jezzball arcade game")
10485 (description "KBounce is a single player arcade game with the elements of
10486 puzzle. It is played on a field, surrounded by wall, with two or more balls
10487 bouncing around within the walls. The object of the game is to build new
10488 walls to decrease the size of the active field.
10489
10490 This package is part of the KDE games module.")
10491 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
10492
10493 (define-public kblocks
10494 (package
10495 (name "kblocks")
10496 (version "20.12.0")
10497 (source
10498 (origin
10499 (method url-fetch)
10500 (uri (string-append "mirror://kde/stable/release-service/"
10501 version "/src/kblocks-" version ".tar.xz"))
10502 (sha256
10503 (base32 "09yfm9mzbamp294cvc5finq6ilxvxr68i0dnb0m72pa4sfzmij32"))))
10504 (build-system qt-build-system)
10505 (native-inputs
10506 `(("extra-cmake-modules" ,extra-cmake-modules)
10507 ("kdoctools" ,kdoctools)))
10508 (inputs
10509 `(("kcompletion" ,kcompletion)
10510 ("kconfig" ,kconfig)
10511 ("kconfigwidgets" ,kconfigwidgets)
10512 ("kcoreaddons" ,kcoreaddons)
10513 ("kcrash" ,kcrash)
10514 ("kdbusaddons" ,kdbusaddons)
10515 ("ki18n" ,ki18n)
10516 ("kwidgetsaddons" ,kwidgetsaddons)
10517 ("kxmlgui" ,kxmlgui)
10518 ("libkdegames" ,libkdegames)
10519 ("qtbase" ,qtbase)
10520 ("qtdeclarative" ,qtdeclarative)
10521 ("qtsvg" ,qtsvg)))
10522 (home-page "https://games.kde.org/")
10523 (synopsis "Single player falling blocks puzzle game")
10524 (description "KBlocks is the classic Tetris-like falling blocks game.
10525
10526 The idea is to stack the falling blocks to create horizontal lines without any
10527 gaps. When a line is completed it is removed, and more space is available in
10528 the play area. When there is not enough space for blocks to fall, the game is
10529 over.
10530
10531 This package is part of the KDE games module.")
10532 (license (list license:gpl2+ license:fdl1.2+))))
10533
10534 (define-public ksudoku
10535 (package
10536 (name "ksudoku")
10537 (version "20.12.0")
10538 (source
10539 (origin
10540 (method url-fetch)
10541 (uri (string-append "mirror://kde/stable/release-service/"
10542 version "/src/ksudoku-" version ".tar.xz"))
10543 (sha256
10544 (base32 "0pj6ry7ak1rnpb93mqypaxrcbmrhwg9ir6zhb3ybzfkfcrh67g12"))))
10545 (build-system qt-build-system)
10546 (native-inputs
10547 `(("extra-cmake-modules" ,extra-cmake-modules)
10548 ("kdoctools" ,kdoctools)))
10549 (inputs
10550 `(("karchive" ,karchive)
10551 ("kconfig" ,kconfig)
10552 ("kconfigwidgets" ,kconfigwidgets)
10553 ("kcoreaddons" ,kcoreaddons)
10554 ("kcrash" ,kcrash)
10555 ("kguiaddons" ,kguiaddons)
10556 ("ki18n" ,ki18n)
10557 ("kiconthemes" ,kiconthemes)
10558 ("kio" ,kio)
10559 ("kwidgetsaddons" ,kwidgetsaddons)
10560 ("kxmlgui" ,kxmlgui)
10561 ("libkdegames" ,libkdegames)
10562 ("glu" ,glu)
10563 ("qtbase" ,qtbase)
10564 ("qtdeclarative" ,qtdeclarative)
10565 ("qtsvg" ,qtsvg)))
10566 (home-page "https://games.kde.org/")
10567 (synopsis "Sudoku puzzle game and solver")
10568 (description "KSudoku is a Sudoku game and solver, supporting a range of
10569 2D and 3D Sudoku variants. In addition to playing Sudoku, it can print Sudoku
10570 puzzle sheets and find the solution to any Sudoku puzzle.
10571
10572 The word Sudoku means \"single number in an allotted place\" in Japanese.
10573 These are the basic rules: Every Sudoku is a square divided into 3x3
10574 subsquares with 3x3 cells each.
10575
10576 Some cells are filled with a number at the beginning. The remaining ones are
10577 to be filled by the player using numbers from 1 to 9, without repeating a
10578 number twice on each column, row or subsquare (each of them must contain only
10579 one 1, one 2, one 3, and so on). The game requires logic and patience.
10580 Solving takes usually 10 to 30 minutes, depending on puzzle level, your skill
10581 and experience.
10582
10583 The numerals in Sudoku puzzles are used for convenience (for example in 16x16
10584 board we use letters): arithmetic relationships between numbers are
10585 irrelevant.
10586
10587 This program supports also 16x16 games with numbers from 1 to 16 and 256
10588 cells with 16 cols, rows and subsquares!
10589
10590 More information at http://en.wikipedia.org/wiki/Sudoku
10591
10592 This package is part of the KDE games module.")
10593 (license (list license:gpl2+ license:fdl1.2+))))
10594
10595 (define-public klines
10596 (package
10597 (name "klines")
10598 (version "20.12.0")
10599 (source
10600 (origin
10601 (method url-fetch)
10602 (uri (string-append "mirror://kde/stable/release-service/" version
10603 "/src/klines-" version ".tar.xz"))
10604 (sha256
10605 (base32 "0y8lnwawrkl4ixn7v4dg48k2zpr083krv7dv4d94b2dpkh7xfvih"))))
10606 (build-system qt-build-system)
10607 (native-inputs
10608 `(("extra-cmake-modules" ,extra-cmake-modules)
10609 ("kdoctools" ,kdoctools)))
10610 (inputs
10611 `(("kcompletion" ,kcompletion)
10612 ("kconfigwidgets" ,kconfigwidgets)
10613 ("kcoreaddons" ,kcoreaddons)
10614 ("kcrash" ,kcrash)
10615 ("kdbusaddons" ,kdbusaddons)
10616 ("ki18n" ,ki18n)
10617 ("kwidgetsaddons" ,kwidgetsaddons)
10618 ("kxmlgui" ,kxmlgui)
10619 ("libkdegames" ,libkdegames)
10620 ("qtbase" ,qtbase)
10621 ("qtdeclarative" ,qtdeclarative)))
10622 (home-page "https://games.kde.org/")
10623 (synopsis "Place 5 equal pieces together, but wait, there are 3 new ones")
10624 (description "KLines is a simple but highly addictive one player game.
10625
10626 The player has to move the colored balls around the game board, gathering them
10627 into the lines of the same color by five. Once the line is complete it is
10628 removed from the board, therefore freeing precious space. In the same time
10629 the new balls keep arriving by three after each move, filling up the game
10630 board.
10631
10632 KLines is a single-player game where the player removes colored balls from the
10633 board by arranging them into lines of five or more. However, every time the
10634 player moves a ball, three more balls are added to the board.
10635
10636 This package is part of the KDE games module.")
10637 (license (list license:gpl2+ license:fdl1.2+))))
10638
10639 (define-public kgoldrunner
10640 (package
10641 (name "kgoldrunner")
10642 (version "20.12.0")
10643 (source
10644 (origin
10645 (method url-fetch)
10646 (uri (string-append "mirror://kde/stable/release-service/" version
10647 "/src/kgoldrunner-" version ".tar.xz"))
10648 (sha256
10649 (base32 "17ra5d3r9ajy2inj17gwd5xphzhvbzx5kpvdwyj6msx4dd9wxgfi"))))
10650 (build-system qt-build-system)
10651 (native-inputs
10652 `(("extra-cmake-modules" ,extra-cmake-modules)
10653 ("kdoctools" ,kdoctools)))
10654 (inputs
10655 `(("kcompletion" ,kcompletion)
10656 ("kcoreaddons" ,kcoreaddons)
10657 ("kcrash" ,kcrash)
10658 ("kdbusaddons" ,kdbusaddons)
10659 ("ki18n" ,ki18n)
10660 ("kio" ,kio)
10661 ("kwidgetsaddons" ,kwidgetsaddons)
10662 ("kxmlgui" ,kxmlgui)
10663 ("libkdegames" ,libkdegames)
10664 ("qtbase" ,qtbase)
10665 ("qtdeclarative" ,qtdeclarative)))
10666 (home-page "https://games.kde.org/")
10667 (synopsis "Action and puzzle solving game")
10668 (description "KGoldrunner is an action game where the hero runs through a
10669 maze, climbs stairs, dig holes and dodges enemies in order to collect all the
10670 gold nuggets and escape to the next level. Your enemies are also after the
10671 gold. Worse still, they are after you!.
10672
10673 KGoldrunner is a fast-paced platform game where the player must navigate a
10674 maze while collecting gold nuggets and avoiding enemies. A variety of level
10675 packs are included, as well as an editor to create new levels.
10676
10677 This package is part of the KDE games module.")
10678 (license (list license:gpl2+ license:fdl1.2+))))
10679
10680 (define-public kdiamond
10681 (package
10682 (name "kdiamond")
10683 (version "20.12.0")
10684 (source
10685 (origin
10686 (method url-fetch)
10687 (uri (string-append "mirror://kde/stable/release-service/" version
10688 "/src/kdiamond-" version ".tar.xz"))
10689 (sha256
10690 (base32 "1iyxrx3422asa58kh0siwvi1svds5kccrym6gdfpdhlmhmciqlzi"))))
10691 (build-system qt-build-system)
10692 (native-inputs
10693 `(("extra-cmake-modules" ,extra-cmake-modules)
10694 ("kdoctools" ,kdoctools)))
10695 (inputs
10696 `(("kcompletion" ,kcompletion)
10697 ("kconfig" ,kconfig)
10698 ("kconfigwidgets" ,kconfigwidgets)
10699 ("kcoreaddons" ,kcoreaddons)
10700 ("kcrash" ,kcrash)
10701 ("kdbusaddons" ,kdbusaddons)
10702 ("ki18n" ,ki18n)
10703 ("knotifications" ,knotifications)
10704 ("knotifyconfig" ,knotifyconfig)
10705 ("kwidgetsaddons" ,kwidgetsaddons)
10706 ("kxmlgui" ,kxmlgui)
10707 ("libkdegames" ,libkdegames)
10708 ("qtbase" ,qtbase)
10709 ("qtdeclarative" ,qtdeclarative)))
10710 (home-page "https://games.kde.org/")
10711 (synopsis "Three-in-a-row game")
10712 (description "KDiamond is a three-in-a-row game like Bejeweled. It
10713 features unlimited fun with randomly generated games and five difficulty
10714 levels with varying number of diamond colors and board sizes.
10715
10716 This package is part of the KDE games module.")
10717 (license (list license:gpl2+ license:fdl1.2+))))
10718
10719 (define-public kfourinline
10720 (package
10721 (name "kfourinline")
10722 (version "20.12.0")
10723 (source
10724 (origin
10725 (method url-fetch)
10726 (uri (string-append "mirror://kde/stable/release-service/" version
10727 "/src/kfourinline-" version ".tar.xz"))
10728 (sha256
10729 (base32 "0plx3lv35fc8q9svbyl71mms3ji6zn58j306bvm1f8kkgg0x395b"))))
10730 (build-system qt-build-system)
10731 (native-inputs
10732 `(("extra-cmake-modules" ,extra-cmake-modules)
10733 ("kdoctools" ,kdoctools)))
10734 (inputs
10735 `(("kcompletion" ,kcompletion)
10736 ("kconfig" ,kconfig)
10737 ("kconfigwidgets" ,kconfigwidgets)
10738 ("kcoreaddons" ,kcoreaddons)
10739 ("kcrash" ,kcrash)
10740 ("kdnssd" ,kdnssd)
10741 ("ki18n" ,ki18n)
10742 ("kxmlgui" ,kxmlgui)
10743 ("libkdegames" ,libkdegames)
10744 ("qtbase" ,qtbase)
10745 ("qtdeclarative" ,qtdeclarative)
10746 ("qtsvg" ,qtsvg)))
10747 (home-page "https://games.kde.org/")
10748 (synopsis "Place 4 pieces in a row")
10749 (description "KFourInLine is a board game for two players based on the
10750 Connect-Four game.
10751
10752 KFourInLine is a game where two players take turns dropping pieces into a
10753 grid, the winner being the first to place four pieces in a line.
10754
10755 This package is part of the KDE games module.")
10756 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
10757
10758 (define-public kblackbox
10759 (package
10760 (name "kblackbox")
10761 (version "20.12.0")
10762 (source
10763 (origin
10764 (method url-fetch)
10765 (uri (string-append "mirror://kde/stable/release-service/" version
10766 "/src/kblackbox-" version ".tar.xz"))
10767 (sha256
10768 (base32 "0la5w44b0gl72g3wfp0pw8gwnm287lh7nd9k5ikpszw5nn49db0h"))))
10769 (build-system qt-build-system)
10770 (native-inputs
10771 `(("extra-cmake-modules" ,extra-cmake-modules)
10772 ("kdoctools" ,kdoctools)))
10773 (inputs
10774 `(("karchive" ,karchive)
10775 ("kcompletion" ,kcompletion)
10776 ("kconfig" ,kconfig)
10777 ("kcoreaddons" ,kcoreaddons)
10778 ("kcrash" ,kcrash)
10779 ("kdbusaddons" ,kdbusaddons)
10780 ("ki18n" ,ki18n)
10781 ("ktextwidgets" ,ktextwidgets)
10782 ("kxmlgui" ,kxmlgui)
10783 ("libkdegames" ,libkdegames)
10784 ("qtbase" ,qtbase)
10785 ("qtdeclarative" ,qtdeclarative)
10786 ("qtsvg" ,qtsvg)))
10787 (home-page "https://games.kde.org/")
10788 (synopsis "Find atoms in a grid by shooting electrons")
10789 (description "KBlackbox is a game of hide and seek played on a grid of
10790 boxes where the computer has hidden several balls. The position of the hidden
10791 balls can be deduced by shooting beams into the box
10792
10793 KBlackBox is a game of hide and seek played on an grid of boxes, where the
10794 player shoots rays into the grid to deduce the positions of hidden objects.
10795
10796 This package is part of the KDE games module.")
10797 (license (list license:gpl2+ license:fdl1.2+))))
10798
10799 (define-public knetwalk
10800 (package
10801 (name "knetwalk")
10802 (version "20.12.0")
10803 (source
10804 (origin
10805 (method url-fetch)
10806 (uri (string-append "mirror://kde/stable/release-service/" version
10807 "/src/knetwalk-" version ".tar.xz"))
10808 (sha256
10809 (base32 "060kj06vpigdy570izsjfgnmqqrpmb8bkr9arqc109hg3avl5wjz"))))
10810 (build-system qt-build-system)
10811 (native-inputs
10812 `(("extra-cmake-modules" ,extra-cmake-modules)
10813 ("kdoctools" ,kdoctools)))
10814 (inputs
10815 `(("kcompletion" ,kcompletion)
10816 ("kconfig" ,kconfig)
10817 ("kconfigwidgets" ,kconfigwidgets)
10818 ("kcoreaddons" ,kcoreaddons)
10819 ("kcrash" ,kcrash)
10820 ("kdbusaddons" ,kdbusaddons)
10821 ("ki18n" ,ki18n)
10822 ("ktextwidgets" ,ktextwidgets)
10823 ("kwidgetsaddons" ,kwidgetsaddons)
10824 ("kxmlgui" ,kxmlgui)
10825 ("libkdegames" ,libkdegames)
10826 ("qtbase" ,qtbase)
10827 ("qtdeclarative" ,qtdeclarative)))
10828 (home-page "https://games.kde.org/")
10829 (synopsis "Turn the board pieces to get all computers connected")
10830 (description "KNetWalk is a small game where you have to build up a
10831 computer network by rotating the wires to connect the terminals to the server.
10832 When the network is build, a highscore-list comes up where competitions can be
10833 fought out.
10834
10835 KNetwalk is a puzzle game where the player arranges sections of wire to
10836 connect all the computers on the board.
10837
10838 This package is part of the KDE games module.")
10839 (license (list license:gpl2+ license:fdl1.2+))))
10840
10841 (define-public bomber
10842 (package
10843 (name "bomber")
10844 (version "20.12.0")
10845 (source
10846 (origin
10847 (method url-fetch)
10848 (uri (string-append "mirror://kde/stable/release-service/" version
10849 "/src/bomber-" version ".tar.xz"))
10850 (sha256
10851 (base32 "1fjcwm591jgx3bgqpi0j5fnb2l2r2h3r6lav3vhaxz4rkf56pg2a"))))
10852 (build-system qt-build-system)
10853 (native-inputs
10854 `(("extra-cmake-modules" ,extra-cmake-modules)
10855 ("kdoctools" ,kdoctools)))
10856 (inputs
10857 `(("kcompletiom" ,kcompletion)
10858 ("kconfig" ,kconfig)
10859 ("kcoreaddons" ,kcoreaddons)
10860 ("kcrash" ,kcrash)
10861 ("kdbusaddons" ,kdbusaddons)
10862 ("ki18n" ,ki18n)
10863 ("kxmlgui" ,kxmlgui)
10864 ("libkdegames" ,libkdegames)
10865 ("qtbase" ,qtbase)
10866 ("qtdeclarative" ,qtdeclarative)))
10867 (home-page "https://games.kde.org/")
10868 (synopsis "Arcade bombing game")
10869 (description "Bomber is a single player arcade game.
10870
10871 The player is invading various cities in a plane that is decreasing in height.
10872 The goal of the game is to destroy all the buildings and advance to the next
10873 level. Each level gets a bit harder by increasing the speed of the plane and
10874 the height of the buildings.
10875
10876 Bomber is a game where you fly a spaceship and attempt to bomb the buildings
10877 below you. Each pass the spaceship makes, it gets lower and lower. If you've
10878 not destroyed a building in your path, you will crash into it.
10879
10880 This package is part of the KDE games module.")
10881 (license (list license:gpl2+ license:fdl1.2+))))
10882
10883 (define-public granatier
10884 (package
10885 (name "granatier")
10886 (version "20.12.0")
10887 (source
10888 (origin
10889 (method url-fetch)
10890 (uri (string-append "mirror://kde/stable/release-service/" version
10891 "/src/granatier-" version ".tar.xz"))
10892 (sha256
10893 (base32 "1fyh7zyacb3pnlfd29jw2jmyl8a7sjw354pi234nd5x5999xw5z6"))))
10894 (build-system qt-build-system)
10895 (native-inputs
10896 `(("extra-cmake-modules" ,extra-cmake-modules)
10897 ("kdoctools" ,kdoctools)))
10898 (inputs
10899 `(("kcompletion" ,kcompletion)
10900 ("kconfig" ,kconfig)
10901 ("kconfigwidgets" ,kconfigwidgets)
10902 ("kcoreaddons" ,kcoreaddons)
10903 ("kcrash" ,kcrash)
10904 ("kdbusaddons" ,kdbusaddons)
10905 ("ki18n" ,ki18n)
10906 ("knewstuff" ,knewstuff)
10907 ("kwidgetsaddons" ,kwidgetsaddons)
10908 ("kxmlgui" ,kxmlgui)
10909 ("libkdegames" ,libkdegames)
10910 ("qtbase" ,qtbase)
10911 ("qtdeclarative" ,qtdeclarative)
10912 ("qtsvg" ,qtsvg)))
10913 (home-page "https://games.kde.org/")
10914 (synopsis "Bomberman clone")
10915 (description "Granatier is a clone of the classic Bomberman game,
10916 inspired by the work of the Clanbomber clone.
10917
10918 This package is part of the KDE games module.")
10919 (license (list license:gpl2+ license:fdl1.2+))))
10920
10921 (define-public ksirk
10922 (package
10923 (name "ksirk")
10924 (version "20.12.0")
10925 (source
10926 (origin
10927 (method url-fetch)
10928 (uri (string-append "mirror://kde/stable/release-service/" version
10929 "/src/ksirk-" version ".tar.xz"))
10930 (sha256
10931 (base32 "10y7nm0x6zcc0gh3am69bbxyyb8azbbfyrdqsa023ggr7n04cn21"))))
10932 (build-system qt-build-system)
10933 (native-inputs
10934 `(("extra-cmake-modules" ,extra-cmake-modules)
10935 ("kdoctools" ,kdoctools)))
10936 (inputs
10937 `(("kcrash" ,kcrash)
10938 ("ki18n" ,ki18n)
10939 ("kiconthemes" ,kiconthemes)
10940 ("kio" ,kio)
10941 ("knewstuff" ,knewstuff)
10942 ("kwallet" ,kwallet)
10943 ("kxmlgui" ,kxmlgui)
10944 ("libkdegames" ,libkdegames)
10945 ("phonon" ,phonon)
10946 ("qca" ,qca)
10947 ("qtbase" ,qtbase)
10948 ("qtdeclarative" ,qtdeclarative)
10949 ("qtsvg" ,qtsvg)
10950 ("zlib" ,zlib)))
10951 (home-page "https://games.kde.org/")
10952 (synopsis "Computerized version of the well known strategy board game
10953 'Risk'")
10954 (description "KsirK is a multi-player network-enabled game. The goal of
10955 the game is simply to conquer the world by attacking your neighbors with your
10956 armies.
10957
10958 At the beginning of the game, countries are distributed to all the players.
10959 Each country contains one army represented by an infantryman. Each player has
10960 some armies to distribute to his countries. On each turn, each player can
10961 attack his neighbours, eventually conquering one or more countries. At the
10962 end of each turn, some bonus armies are distributed to the players in function
10963 of the number of countries they own. The winner is the player that conquered
10964 all the world.
10965
10966 Features:
10967 @itemize
10968 @item Support for 1-6 human or computer players
10969 @item Multi-player gaming over a network
10970 @item You can easily create new skins with SVG graphics and the skin editor
10971 @item Hot New Stuff support. You can easily download and install new skins
10972 @end itemize
10973
10974 This package is part of the KDE games module.")
10975 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
10976
10977 (define-public palapeli
10978 (package
10979 (name "palapeli")
10980 (version "20.12.0")
10981 (source
10982 (origin
10983 (method url-fetch)
10984 (uri (string-append "mirror://kde/stable/release-service/" version
10985 "/src/palapeli-" version ".tar.xz"))
10986 (sha256
10987 (base32 "0xxz9g4zxljlg20g88a5lkbwzzm9yg4vxnrfigk8m018cz0nqd5b"))))
10988 (build-system qt-build-system)
10989 (native-inputs
10990 `(("extra-cmake-modules" ,extra-cmake-modules)
10991 ("kdoctools" ,kdoctools)))
10992 (inputs
10993 `(("karchive" ,karchive)
10994 ("kcompletion" ,kcompletion)
10995 ("kconfig" ,kconfig)
10996 ("kconfigwidgets" ,kconfigwidgets)
10997 ("kcoreaddons" ,kcoreaddons)
10998 ("kcrash" ,kcrash)
10999 ("kcrash" ,kcrash)
11000 ("ki18n" ,ki18n)
11001 ("ki18n" ,ki18n)
11002 ("kio" ,kio)
11003 ("kitemviews" ,kitemviews)
11004 ("knotifications" ,knotifications)
11005 ("kservice" ,kservice)
11006 ("kwidgetsaddons" ,kwidgetsaddons)
11007 ("kxmlgui" ,kxmlgui)
11008 ("libkdegames" ,libkdegames)
11009 ("qtbase" ,qtbase)
11010 ("qtdeclarative" ,qtdeclarative)
11011 ("qtsvg" ,qtsvg)
11012 ("shared-mime-info" ,shared-mime-info)))
11013 (home-page "https://games.kde.org/")
11014 (synopsis "Jigsaw puzzle game")
11015 (description "Palapeli is a jigsaw puzzle game. Unlike other games in
11016 that genre, you are not limited to aligning pieces on imaginary grids. The
11017 pieces are freely moveable. Also, Palapeli features real persistency, i.e.
11018 everything you do is saved on your disk immediately.
11019
11020 Palapeli is the Finnish word for jigsaw puzzle.
11021
11022 This package is part of the KDE games module.")
11023 (license license:gpl2+)))
11024
11025 (define-public kiriki
11026 (package
11027 (name "kiriki")
11028 (version "20.12.0")
11029 (source
11030 (origin
11031 (method url-fetch)
11032 (uri (string-append "mirror://kde/stable/release-service/" version
11033 "/src/kiriki-" version ".tar.xz"))
11034 (sha256
11035 (base32 "0milc8fl1rj4yrwdvm60ampd47dyiys1xvqi5f0g7y6mgymgyk4x"))))
11036 (build-system qt-build-system)
11037 (native-inputs
11038 `(("extra-cmake-modules" ,extra-cmake-modules)
11039 ("kdoctools" ,kdoctools)))
11040 (inputs
11041 `(("kcompletion" ,kcompletion)
11042 ("kconfig" ,kconfig)
11043 ("kconfigwidgets" ,kconfigwidgets)
11044 ("kcoreaddons" ,kcoreaddons)
11045 ("kcrash" ,kcrash)
11046 ("kdbusaddons" ,kdbusaddons)
11047 ("ki18n" ,ki18n)
11048 ("kiconthemes" ,kiconthemes)
11049 ("kxmlgui" ,kxmlgui)
11050 ("libkdegames" ,libkdegames)
11051 ("qtbase" ,qtbase)
11052 ("qtdeclarative" ,qtdeclarative)))
11053 (home-page "https://games.kde.org/")
11054 (synopsis "Yahtzee dice game")
11055 (description "Kiriki is an addictive and fun dice game, designed to be
11056 played by as many as six players.
11057
11058 Participants have to collect points by rolling five dice for up to three times
11059 per single turn to make combinations with the highest score.
11060
11061 This package is part of the KDE games module.")
11062 (license (list license:gpl2+ license:fdl1.2+))))
11063
11064 (define-public kigo
11065 (package
11066 (name "kigo")
11067 (version "20.12.0")
11068 (source
11069 (origin
11070 (method url-fetch)
11071 (uri (string-append "mirror://kde/stable/release-service/" version
11072 "/src/kigo-" version ".tar.xz"))
11073 (sha256
11074 (base32 "088752yzmfsnppd27p8hld4x5s7sw5fagm08024l5ra1mlicdfz9"))))
11075 (build-system qt-build-system)
11076 (native-inputs
11077 `(("extra-cmake-modules" ,extra-cmake-modules)
11078 ("kdoctools" ,kdoctools)))
11079 (inputs
11080 `(("kconfig" ,kconfig)
11081 ("kconfigwidgets" ,kconfigwidgets)
11082 ("kcoreaddons" ,kcoreaddons)
11083 ("kcrash" ,kcrash)
11084 ("kdbusaddons" ,kdbusaddons)
11085 ("ki18n" ,ki18n)
11086 ("kio" ,kio)
11087 ("knewstuff" ,knewstuff)
11088 ("ktextwidgets" ,ktextwidgets)
11089 ("kxmlgui" ,kxmlgui)
11090 ("libkdegames" ,libkdegames)
11091 ("qtbase" ,qtbase)
11092 ("qtdeclarative" ,qtdeclarative)
11093 ("qtsvg" ,qtsvg)))
11094 (home-page "https://games.kde.org/")
11095 (synopsis "Go board game")
11096 (description "Kigo is an open-source implementation of the popular Go
11097 game.
11098
11099 Go is a strategic board game for two players. It is also known as
11100 igo (Japanese), weiqi or wei ch'i (Chinese) or baduk (Korean). Go is noted
11101 for being rich in strategic complexity despite its simple rules. The game is
11102 played by two players who alternately place black and white stones (playing
11103 pieces, now usually made of glass or plastic) on the vacant intersections of a
11104 grid of 19x19 lines (9x9 or 13x13 for easier games).
11105
11106 You also need to install a go engine, e.g. @code{gnugo}.
11107
11108 This package is part of the KDE games module.")
11109 (license license:gpl3+)))
11110
11111 (define-public kubrick
11112 (package
11113 (name "kubrick")
11114 (version "20.12.0")
11115 (source
11116 (origin
11117 (method url-fetch)
11118 (uri (string-append "mirror://kde/stable/release-service/" version
11119 "/src/kubrick-" version ".tar.xz"))
11120 (sha256
11121 (base32 "0h3mypwd67sss08j5vvrih5f5ss85m9kax6412y40xmsm51lz2pq"))))
11122 (build-system qt-build-system)
11123 (native-inputs
11124 `(("extra-cmake-modules" ,extra-cmake-modules)
11125 ("kdoctools" ,kdoctools)))
11126 (inputs
11127 `(("glu" ,glu)
11128 ("kconfig" ,kconfig)
11129 ("kconfigwidgets" ,kconfigwidgets)
11130 ("kcoreaddons" ,kcoreaddons)
11131 ("kcrash" ,kcrash)
11132 ("ki18n" ,ki18n)
11133 ("kio" ,kio)
11134 ("kwidgetsaddons" ,kwidgetsaddons)
11135 ("kxmlgui" ,kxmlgui)
11136 ("libkdegames" ,libkdegames)
11137 ("qtbase" ,qtbase)
11138 ("qtdeclarative" ,qtdeclarative)
11139 ("qtsvg" ,qtsvg)))
11140 (home-page "https://games.kde.org/")
11141 (synopsis "Game based on Rubik's Cube")
11142 (description "Kubrick is a game based on the Rubik's Cube puzzle.
11143
11144 The cube sizes range from 2x2x2 up to 6x6x6, or you can play with irregular
11145 \"bricks\" such as 5x3x2 or \"mats\" such as 6x4x1 or 2x2x1. The game has a
11146 selection of puzzles at several levels of difficulty, as well as demos of
11147 pretty patterns and solution moves, or you can make up your own puzzles. The
11148 game has unlimited undo, redo, save and reload capabilities.
11149
11150 This package is part of the KDE games module.")
11151 (license (list license:gpl2+ license:fdl1.2+))))
11152
11153 (define-public lskat
11154 (package
11155 (name "lskat")
11156 (version "20.12.0")
11157 (source
11158 (origin
11159 (method url-fetch)
11160 (uri (string-append "mirror://kde/stable/release-service/" version
11161 "/src/lskat-" version ".tar.xz"))
11162 (sha256
11163 (base32 "1wg9zxp64kwjxqs4qw0h7j8yhgffbmvh8j9d4dgmz45dscngnjli"))))
11164 (build-system qt-build-system)
11165 (native-inputs
11166 `(("extra-cmake-modules" ,extra-cmake-modules)
11167 ("kdoctools" ,kdoctools)))
11168 (inputs
11169 `(("kcompletion" ,kcompletion)
11170 ("kconfig" ,kconfig)
11171 ("kcoreaddons" ,kcoreaddons)
11172 ("kcrash" ,kcrash)
11173 ("kguiaddons" ,kguiaddons)
11174 ("ki18n" ,ki18n)
11175 ("kwidgetsaddons" ,kwidgetsaddons)
11176 ("kxmlgui" ,kxmlgui)
11177 ("libkdegames" ,libkdegames)
11178 ("qtbase" ,qtbase)
11179 ("qtdeclarative" ,qtdeclarative)
11180 ("qtsvg" ,qtsvg)))
11181 (home-page "https://games.kde.org/")
11182 (synopsis "Lieutnant Skat card game")
11183 (description "Lieutnant Skat (from German \"Offiziersskat\") is a fun and
11184 engaging card game for two players, where the second player is either live
11185 opponent, or a built in artificial intelligence.
11186
11187 Lieutnant Skat is a simplified variant of the Skat card game for two players.
11188
11189 This package is part of the KDE games module.")
11190 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
11191
11192 (define-public kapman
11193 (package
11194 (name "kapman")
11195 (version "20.12.0")
11196 (source
11197 (origin
11198 (method url-fetch)
11199 (uri (string-append "mirror://kde/stable/release-service/" version
11200 "/src/kapman-" version ".tar.xz"))
11201 (sha256
11202 (base32 "14x3v6li4r3gzzwfd6ar9saq2rhc7yxs0sp9ygalzq8vq4d7i1kh"))))
11203 (build-system qt-build-system)
11204 (native-inputs
11205 `(("extra-cmake-modules" ,extra-cmake-modules)
11206 ("kdoctools" ,kdoctools)))
11207 (inputs
11208 `(("kcompletion" ,kcompletion)
11209 ("kconfig" ,kconfig)
11210 ("kconfigwidgets" ,kconfigwidgets)
11211 ("kcoreaddons" ,kcoreaddons)
11212 ("kcrash" ,kcrash)
11213 ("kdbusaddons" ,kdbusaddons)
11214 ("ki18n" ,ki18n)
11215 ("kxmlgui" ,kxmlgui)
11216 ("libkdegames" ,libkdegames)
11217 ("qtbase" ,qtbase)
11218 ("qtdeclarative" ,qtdeclarative)
11219 ("qtsvg" ,qtsvg)))
11220 (home-page "https://games.kde.org/")
11221 (synopsis "Pac-Man clone")
11222 (description "Kapman is a clone of the well known game Pac-Man.
11223
11224 You must run through the maze to eat all pills without being captured by a
11225 ghost. By eating an energizer, Kapman gets the ability to eat ghosts for a
11226 few seconds. When a stage is cleared of pills and energizer the player is
11227 taken to the next stage with slightly increased game speed
11228
11229 This package is part of the KDE games module.")
11230 (license (list license:gpl2+ license:fdl1.2+))))
11231
11232 (define-public kspaceduel
11233 (package
11234 (name "kspaceduel")
11235 (version "20.12.0")
11236 (source
11237 (origin
11238 (method url-fetch)
11239 (uri (string-append "mirror://kde/stable/release-service/" version
11240 "/src/kspaceduel-" version ".tar.xz"))
11241 (sha256
11242 (base32 "1aixh6ygif2cm1a5g32sl5y6b5x68139pzihaxq4334c6avamdai"))))
11243 (build-system qt-build-system)
11244 (native-inputs
11245 `(("extra-cmake-modules" ,extra-cmake-modules)
11246 ("kdoctools" ,kdoctools)))
11247 (inputs
11248 `(("kcompletion" ,kcompletion)
11249 ("kconfig" ,kconfig)
11250 ("kconfigwidgets" ,kconfigwidgets)
11251 ("kcoreaddons" ,kcoreaddons)
11252 ("kcrash" ,kcrash)
11253 ("kdbusaddons" ,kdbusaddons)
11254 ("ki18n" ,ki18n)
11255 ("kxmlgui" ,kxmlgui)
11256 ("libkdegames" ,libkdegames)
11257 ("qtbase" ,qtbase)
11258 ("qtdeclarative" ,qtdeclarative)
11259 ("qtsvg" ,qtsvg)))
11260 (home-page "https://games.kde.org/")
11261 (synopsis "Two player game with shooting spaceships flying around a sun")
11262 (description "KSpaceduel is a space battle game for one or two players,
11263 where two ships fly around a star in a struggle to be the only survivor.
11264
11265 This package is part of the KDE games module.")
11266 (license (list license:gpl2+ license:fdl1.2+))))
11267
11268 (define-public bovo
11269 (package
11270 (name "bovo")
11271 (version "20.12.0")
11272 (source
11273 (origin
11274 (method url-fetch)
11275 (uri (string-append "mirror://kde/stable/release-service/" version
11276 "/src/bovo-" version ".tar.xz"))
11277 (sha256
11278 (base32 "18qbac366m0xma3ary11q9zxz0wgnysppcl7kpypl6ic3nf61wqz"))))
11279 (build-system qt-build-system)
11280 (native-inputs
11281 `(("extra-cmake-modules" ,extra-cmake-modules)
11282 ("kdoctools" ,kdoctools)))
11283 (inputs
11284 `(("kcompletion" ,kcompletion)
11285 ("kcoreaddons" ,kcoreaddons)
11286 ("kcrash" ,kcrash)
11287 ("kdbusaddons" ,kdbusaddons)
11288 ("ki18n" ,ki18n)
11289 ("kxmlgui" ,kxmlgui)
11290 ("libkdegames" ,libkdegames)
11291 ("qtbase" ,qtbase)
11292 ("qtdeclarative" ,qtdeclarative)
11293 ("qtsvg" ,qtsvg)))
11294 (home-page "https://games.kde.org/")
11295 (synopsis "Classic pen and paper game: five in a line")
11296 (description "Bovo is a Gomoku (from Japanese 五目並べ - lit. \"five
11297 points\") like game for two players, where the opponents alternate in placing
11298 their respective pictogram on the game board. The winner is the first to
11299 complete a line of five markers. (Also known as: Connect Five, Five in a row,
11300 X and O, Naughts and Crosses)
11301
11302 This package is part of the KDE games module.")
11303 (license (list license:gpl2+ license:fdl1.2+))))
11304
11305 (define-public killbots
11306 (package
11307 (name "killbots")
11308 (version "20.12.0")
11309 (source
11310 (origin
11311 (method url-fetch)
11312 (uri (string-append "mirror://kde/stable/release-service/" version
11313 "/src/killbots-" version ".tar.xz"))
11314 (sha256
11315 (base32 "1296gww42nwnai7y6m2qpjqpyc30p7z9chfv5rv0n48jvdhva88y"))))
11316 (build-system qt-build-system)
11317 (native-inputs
11318 `(("extra-cmake-modules" ,extra-cmake-modules)
11319 ("kdoctools" ,kdoctools)))
11320 (inputs
11321 `(("kcompletion" ,kcompletion)
11322 ("kconfig" ,kconfig)
11323 ("kconfigwidgets" ,kconfigwidgets)
11324 ("kcoreaddons" ,kcoreaddons)
11325 ("kcrash" ,kcrash)
11326 ("kdbusaddons" ,kdbusaddons)
11327 ("ki18n" ,ki18n)
11328 ("kwidgetsaddons" ,kwidgetsaddons)
11329 ("kxmlgui" ,kxmlgui)
11330 ("libkdegames" ,libkdegames)
11331 ("qtbase" ,qtbase)
11332 ("qtdeclarative" ,qtdeclarative)))
11333 (home-page "https://games.kde.org/")
11334 (synopsis "Port of the classic BSD console game robots")
11335 (description "Killbots is a simple game of evading killer robots.
11336
11337 Who created the robots and why they have been programmed to destroy, no one
11338 knows. All that is known is that the robots are numerous and their sole
11339 objective is to destroy you. Fortunately for you, their creator has focused
11340 on quantity rather than quality and as a result the robots are severely
11341 lacking in intelligence. Your superior wit and a fancy teleportation device
11342 are your only weapons against the never-ending stream of mindless automatons.
11343
11344 This package is part of the KDE games module.")
11345 (license (list license:gpl2+ license:fdl1.2+))))
11346
11347 (define-public ksnakeduel
11348 (package
11349 (name "ksnakeduel")
11350 (version "20.12.0")
11351 (source
11352 (origin
11353 (method url-fetch)
11354 (uri (string-append "mirror://kde/stable/release-service/" version
11355 "/src/ksnakeduel-" version ".tar.xz"))
11356 (sha256
11357 (base32 "0mp6g258n3xzvgf23jnhkw10xgwqwqdzqfdc6r9jq6a6m8v77swz"))))
11358 (build-system qt-build-system)
11359 (native-inputs
11360 `(("extra-cmake-modules" ,extra-cmake-modules)
11361 ("kdoctools" ,kdoctools)))
11362 (inputs
11363 `(("kcompletion" ,kcompletion)
11364 ("kconfig" ,kconfig)
11365 ("kconfigwidgets" ,kconfigwidgets)
11366 ("kcoreaddons" ,kcoreaddons)
11367 ("kcrash" ,kcrash)
11368 ("kdbusaddons" ,kdbusaddons)
11369 ("kguiaddons" ,kguiaddons)
11370 ("ki18n" ,ki18n)
11371 ("kxmlgui" ,kxmlgui)
11372 ("libkdegames" ,libkdegames)
11373 ("qtbase" ,qtbase)
11374 ("qtdeclarative" ,qtdeclarative)
11375 ("qtsvg" ,qtsvg)))
11376 (home-page "https://games.kde.org/")
11377 (synopsis "Snake race played against the computer")
11378 (description "KSnakeDuel is a fast action game where you steer a snake
11379 which has to eat food. While eating the snake grows. But once a player
11380 collides with the other snake or the wall the game is lost. This becomes of
11381 course more and more difficult the longer the snakes grow.
11382
11383 This package is part of the KDE games module.")
11384 (license (list license:gpl2+ license:fdl1.2+))))
11385
11386 (define-public kollision
11387 (package
11388 (name "kollision")
11389 (version "20.12.0")
11390 (source
11391 (origin
11392 (method url-fetch)
11393 (uri (string-append "mirror://kde/stable/release-service/" version
11394 "/src/kollision-" version ".tar.xz"))
11395 (sha256
11396 (base32 "180ybafizpwjsg80npy0l9142cjsnlyxwv9dz3bq6r8v4smn2g6b"))))
11397 (build-system qt-build-system)
11398 (native-inputs
11399 `(("extra-cmake-modules" ,extra-cmake-modules)
11400 ("kdoctools" ,kdoctools)))
11401 (inputs
11402 `(("kcompletion" ,kcompletion)
11403 ("kconfig" ,kconfig)
11404 ("kcoreaddons" ,kcoreaddons)
11405 ("kcrash" ,kcrash)
11406 ("kdbusaddons" ,kdbusaddons)
11407 ("ki18n" ,ki18n)
11408 ("kwidgetsaddons" ,kwidgetsaddons)
11409 ("kxmlgui" ,kxmlgui)
11410 ("libkdegames" ,libkdegames)
11411 ("qtbase" ,qtbase)
11412 ("qtdeclarative" ,qtdeclarative)))
11413 (home-page "https://games.kde.org/")
11414 (synopsis "Simple ball dodging game")
11415 (description "In Kollision you use mouse to control a small blue ball in a
11416 closed space environment filled with small red balls, which move about
11417 chaotically. Your goal is to avoid touching any of those red balls with your
11418 blue one, because the moment you do the game will be over. The longer you can
11419 stay in game the higher will your score be.
11420
11421 This package is part of the KDE games module.")
11422 (license (list license:gpl2+ license:fdl1.2+))))
11423
11424 (define-public knavalbattle
11425 (package
11426 (name "knavalbattle")
11427 (version "20.12.0")
11428 (source
11429 (origin
11430 (method url-fetch)
11431 (uri (string-append "mirror://kde/stable/release-service/" version
11432 "/src/knavalbattle-" version ".tar.xz"))
11433 (sha256
11434 (base32 "03rqf4avn61b0v340ymmzgp7s0axygjgxq1nlp5aaqbx70zcb4lq"))))
11435 (build-system qt-build-system)
11436 (native-inputs
11437 `(("extra-cmake-modules" ,extra-cmake-modules)
11438 ("kdoctools" ,kdoctools)))
11439 (inputs
11440 `(("kauth" ,kauth)
11441 ("kcompletion" ,kcompletion)
11442 ("kconfig" ,kconfig)
11443 ("kconfigwidgets" ,kconfigwidgets)
11444 ("kcoreaddons" ,kcoreaddons)
11445 ("kcrash" ,kcrash)
11446 ("kdbusaddons" ,kdbusaddons)
11447 ("kdnssd" ,kdnssd)
11448 ("ki18n" ,ki18n)
11449 ("ktextwidgets" ,ktextwidgets)
11450 ("kxmlgui" ,kxmlgui)
11451 ("libkdegames" ,libkdegames)
11452 ("qtbase" ,qtbase)
11453 ("qtdeclarative" ,qtdeclarative)))
11454 (home-page "https://games.kde.org/")
11455 (synopsis "Battleship board game with built-in game server")
11456 (description "KBattleship is a Battle Ship game for KDE.
11457
11458 Ships are placed on a board which represents the sea. Players try to hit each
11459 others ships in turns without knowing where they are placed. The first player
11460 to destroy all ships wins the game.
11461
11462 This package is part of the KDE games module.")
11463 (license (list license:gpl2+ license:fdl1.2+))))
11464
11465 (define-public kreversi
11466 (package
11467 (name "kreversi")
11468 (version "20.08.3")
11469 (source
11470 (origin
11471 (method url-fetch)
11472 (uri (string-append "mirror://kde/stable/release-service/" version
11473 "/src/kreversi-" version ".tar.xz"))
11474 (sha256
11475 (base32 "0d3y072q61xcik9lf0pz0c9njvarwlvf6hqv5fp5jyqaf2902pmi"))))
11476 (build-system qt-build-system)
11477 (native-inputs
11478 `(("extra-cmake-modules" ,extra-cmake-modules)
11479 ("kdoctools" ,kdoctools)))
11480 (inputs
11481 `(("kconfig" ,kconfig)
11482 ("kconfigwidgets" ,kconfigwidgets)
11483 ("kcoreaddons" ,kcoreaddons)
11484 ("kcrash" ,kcrash)
11485 ("kdbusaddons" ,kdbusaddons)
11486 ("kdeclarative" ,kdeclarative)
11487 ("ki18n" ,ki18n)
11488 ("kiconthemes" ,kiconthemes)
11489 ("kio" ,kio)
11490 ("kxmlgui" ,kxmlgui)
11491 ("libkdegames" ,libkdegames)
11492 ("qtbase" ,qtbase)
11493 ("qtdeclarative" ,qtdeclarative)
11494 ("qtsvg" ,qtsvg)))
11495 (home-page "https://games.kde.org/")
11496 (synopsis "Old reversi board game, also known as othello")
11497 (description "KReversi is a simple one player strategy game played
11498 against the computer.
11499
11500 If a player's piece is captured by an opposing player, that piece is turned
11501 over to reveal the color of that player. A winner is declared when one player
11502 has more pieces of his own color on the board and there are no more possible
11503 moves.
11504
11505 This package is part of the KDE games module.")
11506 (license (list license:gpl2+ license:fdl1.2+))))
11507
11508 (define-public ksquares
11509 (package
11510 (name "ksquares")
11511 (version "20.12.0")
11512 (source
11513 (origin
11514 (method url-fetch)
11515 (uri (string-append "mirror://kde/stable/release-service/" version
11516 "/src/ksquares-" version ".tar.xz"))
11517 (sha256
11518 (base32 "0chd30byl2kww1k699vkygrxq2wdyvi84m2bimk23q96fl8h831y"))))
11519 (build-system qt-build-system)
11520 (native-inputs
11521 `(("extra-cmake-modules" ,extra-cmake-modules)
11522 ("kdoctools" ,kdoctools)))
11523 (inputs
11524 `(("kcompletion" ,kcompletion)
11525 ("kconfig" ,kconfig)
11526 ("kconfigwidgets" ,kconfigwidgets)
11527 ("kcoreaddons" ,kcoreaddons)
11528 ("kcrash" ,kcrash)
11529 ("kdbusaddons" ,kdbusaddons)
11530 ("ki18n" ,ki18n)
11531 ("kwidgetsaddons" ,kwidgetsaddons)
11532 ("kxmlgui" ,kxmlgui)
11533 ("libkdegames" ,libkdegames)
11534 ("qtbase" ,qtbase)
11535 ("qtdeclarative" ,qtdeclarative)))
11536 (home-page "https://games.kde.org/")
11537 (synopsis "Dots and Boxes game")
11538 (description "KSquares is an implementation of the popular paper based
11539 game Squares. Two players take turns connecting dots on a grid to complete
11540 squares, the player with the most squares wins.
11541
11542 This package is part of the KDE games module.")
11543 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
11544
11545 (define-public kjumpingcube
11546 (package
11547 (name "kjumpingcube")
11548 (version "20.12.0")
11549 (source
11550 (origin
11551 (method url-fetch)
11552 (uri (string-append "mirror://kde/stable/release-service/" version
11553 "/src/kjumpingcube-" version ".tar.xz"))
11554 (sha256
11555 (base32 "1mk73il4jh15z5pm3fp65hsyvmrga11c3h7w96yamy2n2bbniapq"))))
11556 (build-system qt-build-system)
11557 (native-inputs
11558 `(("extra-cmake-modules" ,extra-cmake-modules)
11559 ("kdoctools" ,kdoctools)))
11560 (inputs
11561 `(("kconfig" ,kconfig)
11562 ("kconfigwidgets" ,kconfigwidgets)
11563 ("kcoreaddons" ,kcoreaddons)
11564 ("kcrash" ,kcrash)
11565 ("kdbusaddons" ,kdbusaddons)
11566 ("ki18n" ,ki18n)
11567 ("kio" ,kio)
11568 ("kwidgetsaddons" ,kwidgetsaddons)
11569 ("kxmlgui" ,kxmlgui)
11570 ("libkdegames" ,libkdegames)
11571 ("qtbase" ,qtbase)
11572 ("qtdeclarative" ,qtdeclarative)
11573 ("qtsvg" ,qtsvg)))
11574 (home-page "https://games.kde.org/")
11575 (synopsis "Simple tactical game for number-crunchers")
11576 (description "KJumpingcube is a simple tactical game for one or two
11577 players, played on a grid of numbered squares. Each turn, players compete for
11578 control of the board by capturing or adding to one square.
11579
11580 This package is part of the KDE games module.")
11581 (license (list license:gpl2+ license:fdl1.2+))))
11582
11583 (define-public xmoto
11584 (package
11585 (name "xmoto")
11586 (version "0.6.1")
11587 (source
11588 (origin
11589 (method git-fetch)
11590 (uri (git-reference
11591 (url "https://github.com/xmoto/xmoto")
11592 (commit version)))
11593 (file-name (git-file-name name version))
11594 (sha256
11595 (base32 "00f5ha79lfa2iiaz66wl0hl5dapa1l15qdr7m7knzi0ll7j6z66n"))
11596 (modules '((guix build utils)
11597 (ice-9 ftw)
11598 (srfi srfi-1)))
11599 ;; XXX: Remove some bundled libraries. Guix provides Chipmunk, but
11600 ;; it appears to be incompatible with the (older) one bundled.
11601 (snippet
11602 `(begin
11603 (let ((keep '("chipmunk" "glad" "md5sum")))
11604 (with-directory-excursion "vendor"
11605 (for-each delete-file-recursively
11606 (lset-difference string=?
11607 (scandir ".")
11608 (cons* "." ".." keep))))
11609 (substitute* "src/CMakeLists.txt"
11610 (("add_subdirectory\\(.*?/vendor/(.+?)\".*" line library)
11611 (if (member library keep) line ""))))
11612 #t))))
11613 (build-system cmake-build-system)
11614 (arguments
11615 `(#:tests? #f ;no test
11616 #:phases
11617 (modify-phases %standard-phases
11618 (add-after 'unpack 'fix-hard-coded-directory
11619 (lambda* (#:key outputs #:allow-other-keys)
11620 (substitute* "src/common/VFileIO.cpp"
11621 (("/usr/share")
11622 (string-append (assoc-ref outputs "out") "/share")))
11623 #t))
11624 (add-before 'build 'set-SDL
11625 ;; Set correct environment for SDL.
11626 (lambda* (#:key inputs #:allow-other-keys)
11627 (setenv "CPATH"
11628 (string-append
11629 (assoc-ref inputs "sdl") "/include/SDL:"
11630 (or (getenv "CPATH") "")))
11631 #t))
11632 (add-after 'install 'unbundle-fonts
11633 ;; Unbundle DejaVuSans TTF files.
11634 (lambda* (#:key outputs inputs #:allow-other-keys)
11635 (let ((font-dir (string-append (assoc-ref inputs "font-dejavu")
11636 "/share/fonts/truetype/"))
11637 (target-dir (string-append (assoc-ref outputs "out")
11638 "/share/xmoto/Textures/Fonts/")))
11639 (for-each (lambda (f)
11640 (let ((font (string-append font-dir f))
11641 (target (string-append target-dir f)))
11642 (delete-file target)
11643 (symlink font target)))
11644 '("DejaVuSans.ttf" "DejaVuSansMono.ttf"))
11645 #t))))))
11646 (native-inputs
11647 `(("gettext" ,gettext-minimal)
11648 ("pkg-config" ,pkg-config)))
11649 (inputs
11650 `(("bzip2" ,bzip2)
11651 ("curl" ,curl)
11652 ("font-dejavu" ,font-dejavu)
11653 ("glu" ,glu)
11654 ("libjpeg" ,libjpeg-turbo)
11655 ("libpng" ,libpng)
11656 ("libxdg-basedir" ,libxdg-basedir)
11657 ("libxml2" ,libxml2)
11658 ("lua" ,lua-5.1)
11659 ("ode" ,ode)
11660 ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-net sdl-ttf)))
11661 ("sqlite" ,sqlite)
11662 ("zlib" ,zlib)))
11663 (home-page "https://xmoto.tuxfamily.org/")
11664 (synopsis "2D motocross platform game")
11665 (description
11666 "X-Moto is a challenging 2D motocross platform game, where
11667 physics play an all important role in the gameplay. You need to
11668 control your bike to its limit, if you want to have a chance finishing
11669 the more difficult challenges.")
11670 (license (list license:gpl2+ ;whole project
11671 license:bsd-3 ;vendor/md5sum
11672 license:lgpl2.1+
11673 license:expat))))
11674
11675 (define-public eboard
11676 (package
11677 (name "eboard")
11678 (version "1.1.3")
11679 (source
11680 (origin
11681 (method git-fetch)
11682 (uri (git-reference
11683 (url "https://github.com/fbergo/eboard")
11684 (commit (string-append "v" version))))
11685 (file-name (git-file-name name version))
11686 (sha256
11687 (base32 "1z4pwpqyvxhlda99h6arh2rjk90fbms9q29fqizjblrdn01dlxn1"))))
11688 (build-system gnu-build-system)
11689 (native-inputs
11690 `(("perl" ,perl)
11691 ("pkg-config" ,pkg-config)))
11692 (inputs
11693 `(("gtk+" ,gtk+-2)
11694 ("libpng" ,libpng)
11695 ("gstreamer" ,gstreamer)))
11696 (arguments
11697 `(#:tests? #f
11698 #:phases
11699 (modify-phases %standard-phases
11700 (replace 'configure
11701 (lambda* (#:key outputs #:allow-other-keys)
11702 (make-file-writable "eboard-config")
11703 (setenv "CC" "gcc")
11704 (invoke "./configure"
11705 (string-append "--prefix=" (assoc-ref outputs "out")))
11706 #t))
11707 (add-before 'install 'make-required-directories
11708 (lambda* (#:key outputs #:allow-other-keys)
11709 (mkdir-p (string-append (assoc-ref outputs "out")
11710 "/share/eboard"))
11711 #t)))))
11712 (synopsis "Graphical user interface to play chess")
11713 (description
11714 "Eboard is a chess board interface for ICS (Internet Chess Servers)
11715 and chess engines.")
11716 (home-page "https://www.bergo.eng.br/eboard/")
11717 (license license:gpl2+)))
11718
11719 (define-public chessx
11720 (package
11721 (name "chessx")
11722 (version "1.5.4")
11723 (source
11724 (origin
11725 (method url-fetch)
11726 (uri (string-append "mirror://sourceforge/chessx/chessx/"
11727 version "/chessx-" version ".tgz"))
11728 (sha256
11729 (base32 "1a3541vl5hp6jllgx998w9kjh9kp3wrl80yfwkxmq1bc5bzsrnz2"))))
11730 (build-system qt-build-system)
11731 (native-inputs
11732 `(("qttools" ,qttools)))
11733 (inputs
11734 `(("qtbase" ,qtbase)
11735 ("qtmultimedia" ,qtmultimedia)
11736 ("qtspeech" ,qtspeech)
11737 ("qtsvg" ,qtsvg)
11738 ("zlib" ,zlib)))
11739 (arguments
11740 `(#:tests? #f
11741 #:phases
11742 (modify-phases %standard-phases
11743 (add-after 'unpack 'fix-paths
11744 (lambda* (#:key inputs #:allow-other-keys)
11745 (substitute* "chessx.pro"
11746 (("\\$\\$\\[QT_INSTALL_BINS\\]/lrelease")
11747 (string-append (assoc-ref inputs "qttools") "/bin/lrelease"))
11748 ;; Fix missing translations.
11749 (("TRANSLATIONS = i18n/chessx_de.ts")
11750 "TRANSLATIONS = i18n/chessx_de.ts i18n/chessx_da.ts \\
11751 i18n/chessx_fr.ts i18n/chessx_it.ts i18n/chessx_cz.ts i18n/chessx_ru.ts \\
11752 i18n/chessx_es.ts"))
11753 #t))
11754 (add-after 'fix-paths 'make-qt-deterministic
11755 (lambda _
11756 (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")
11757 #t))
11758 (replace 'configure
11759 (lambda _
11760 (invoke "qmake")
11761 #t))
11762 (replace 'install
11763 (lambda* (#:key outputs #:allow-other-keys)
11764 (let ((out (assoc-ref outputs "out")))
11765 (install-file "release/chessx" (string-append out "/bin"))
11766 (install-file "unix/chessx.desktop"
11767 (string-append out "/share/applications")))
11768 #t)))))
11769 (synopsis "Chess game database")
11770 (description
11771 "ChessX is a chess database. With ChessX you can operate on your
11772 collection of chess games in many ways: browse, edit, add, organize, analyze,
11773 etc. You can also play games on FICS or against an engine.")
11774 (home-page "http://chessx.sourceforge.net/")
11775 (license license:gpl2+)))
11776
11777 (define-public stockfish
11778 (package
11779 (name "stockfish")
11780 (version "12")
11781 (source
11782 (origin
11783 (method git-fetch)
11784 (uri (git-reference
11785 (url "https://github.com/official-stockfish/Stockfish")
11786 (commit (string-append "sf_" version))))
11787 (file-name (git-file-name name version))
11788 (sha256
11789 (base32 "0vcymbwp5nf114pp3ax40s21ki5dckda15vmhr77d1mnq3fn0l32"))))
11790 (build-system gnu-build-system)
11791 (inputs
11792 `(("neural-network"
11793 ,(origin
11794 (method url-fetch)
11795 (uri "https://tests.stockfishchess.org/api/nn/nn-82215d0fd0df.nnue")
11796 (sha256
11797 (base32 "1r4yqrh4di05syyhl84hqcz84djpbd605b27zhbxwg6zs07ms8c2"))))))
11798 (arguments
11799 `(#:tests? #f
11800 #:make-flags (list "-C" "src"
11801 "build"
11802 (string-append "PREFIX="
11803 (assoc-ref %outputs "out"))
11804 (string-append "ARCH="
11805 ,(match (%current-system)
11806 ("x86_64-linux" "x86-64")
11807 ("i686-linux" "x86-32")
11808 ("aarch64-linux" "general-64")
11809 ("armhf-linux" "armv7")
11810 ("mips64el-linux" "general-64")
11811 (_ "general-32"))))
11812 #:phases (modify-phases %standard-phases
11813 (delete 'configure)
11814 ;; The official neural network file is needed for building
11815 ;; and is embedded in the resulting binary.
11816 (add-after 'unpack 'copy-net
11817 (lambda* (#:key inputs #:allow-other-keys)
11818 (copy-file (assoc-ref inputs "neural-network")
11819 "src/nn-82215d0fd0df.nnue")
11820 #t)))))
11821 (synopsis "Strong chess engine")
11822 (description
11823 "Stockfish is a very strong chess engine. It is much stronger than the
11824 best human chess grandmasters. It can be used with UCI-compatible GUIs like
11825 ChessX.")
11826 (home-page "https://stockfishchess.org/")
11827 (license license:gpl3+)))
11828
11829 (define-public barrage
11830 (package
11831 (name "barrage")
11832 (version "1.0.5")
11833 (source
11834 (origin
11835 (method url-fetch)
11836 (uri (string-append "mirror://sourceforge/lgames/barrage/"
11837 "barrage-" version ".tar.gz"))
11838 (sha256
11839 (base32 "0139wxyrir10cbkvkjn548xgmp84wax8mfwk80yxbxlcdamrg257"))))
11840 (build-system gnu-build-system)
11841 (inputs
11842 `(("hicolor-icon-theme" ,hicolor-icon-theme)
11843 ("sdl" ,sdl)
11844 ("sdl-mixer" ,sdl-mixer)))
11845 (arguments
11846 `(#:configure-flags
11847 (list
11848 (string-append "CFLAGS="
11849 "-I" (assoc-ref %build-inputs "sdl-mixer")
11850 "/include/SDL"))))
11851 (home-page "http://lgames.sourceforge.net/Barrage/")
11852 (synopsis "Violent point-and-click shooting game with nice effects")
11853 (description
11854 "Barrage is a rather destructive action game that puts you on a shooting
11855 range with the objective to hit as many dummy targets as possible within
11856 3 minutes. You control a gun that may either fire small or large grenades at
11857 soldiers, jeeps and tanks. The gameplay is simple but it is not that easy to
11858 get high scores.")
11859 (license license:gpl2+)))
11860
11861 (define-public burgerspace
11862 (package
11863 (name "burgerspace")
11864 (version "1.9.3")
11865 (source
11866 (origin
11867 (method url-fetch)
11868 (uri (string-append "http://perso.b2b2c.ca/~sarrazip/dev/"
11869 "burgerspace-" version ".tar.gz"))
11870 (sha256
11871 (base32 "1005a04rbn4lzjrpfg0m394k2mfaji63fm2qhdqdsxila8a6kjbv"))))
11872 (build-system gnu-build-system)
11873 (native-inputs
11874 `(("pkg-config" ,pkg-config)))
11875 (inputs
11876 `(("flatzebra" ,flatzebra)))
11877 (home-page "http://perso.b2b2c.ca/~sarrazip/dev/burgerspace.html")
11878 (synopsis "Avoid evil foodstuffs and make burgers")
11879 (description
11880 "This is a clone of the classic game BurgerTime. In it, you play
11881 the part of a chef who must create burgers by stepping repeatedly on
11882 the ingredients until they fall into place. And to make things more
11883 complicated, you also must avoid evil animate food items while
11884 performing this task, with nothing but your trusty pepper shaker to
11885 protect you.")
11886 (license license:gpl2+)))
11887
11888 (define-public 7kaa
11889 (package
11890 (name "7kaa")
11891 (version "2.15.4p1")
11892 (source
11893 (origin
11894 (method url-fetch)
11895 (uri (string-append "https://github.com/the3dfxdude/7kaa/"
11896 "releases/download/v" version "/"
11897 "7kaa-" version ".tar.xz"))
11898 (sha256
11899 (base32 "1y7v0jhp3apb619p7asikqr1dnwb2yxbh40wbx1ppmr5f03mq9ph"))))
11900 (build-system gnu-build-system)
11901 (native-inputs
11902 `(("gettext" ,gettext-minimal)
11903 ("pkg-config" ,pkg-config)))
11904 (inputs
11905 `(("curl" ,curl)
11906 ("enet" ,enet)
11907 ("openal" ,openal)
11908 ("sdl2" ,sdl2)))
11909 (home-page "https://7kfans.com/")
11910 (synopsis "Seven Kingdoms Ancient Adversaries: real-time strategy game")
11911 (description
11912 "Seven Kingdoms, designed by Trevor Chan, brings a blend of Real-Time
11913 Strategy with the addition of trade, diplomacy, and espionage. The game
11914 enables players to compete against up to six other kingdoms allowing players
11915 to conquer opponents by defeating them in war (with troops or machines),
11916 capturing their buildings with spies, or offering opponents money for their
11917 kingdom.")
11918 (license license:gpl2+)))
11919
11920 (define-public neverball
11921 ;; Git version is 6-years younger than latest release.
11922 (let ((commit "760a25d32a5fb0661b99426d4ddcb9ac9f3d1644")
11923 (revision "1"))
11924 (package
11925 (name "neverball")
11926 (version (git-version "1.6.0" revision commit))
11927 (source
11928 (origin
11929 (method git-fetch)
11930 (uri (git-reference
11931 (url "https://github.com/Neverball/neverball")
11932 (commit commit)))
11933 (sha256
11934 (base32
11935 "0bwh67df3lyf33bv710y25l3frjdd34j9b7gsjadwxviz6r1vpj5"))
11936 (file-name (git-file-name name version))
11937 (modules '((guix build utils)))
11938 (snippet
11939 '(begin
11940 ;; Octocat seems to be non-free. Oddly, Debian doesn't strip it.
11941 (delete-file-recursively "data/ball/octocat")
11942 #t))))
11943 (build-system copy-build-system)
11944 (arguments
11945 `(#:install-plan
11946 '(("neverball" "bin/")
11947 ("neverputt" "bin/")
11948 ("mapc" "bin/")
11949 ("data" "share/games/neverball/")
11950 ("locale" "share/")
11951 ("dist/" "share/games/neverball" #:include ("neverball_replay.png"
11952 "neverlogos.svg"
11953 "svg readme.txt"))
11954 ("dist/" "share/applications" #:include ("neverball.desktop"
11955 "neverputt.desktop"))
11956 ("dist/neverball_16.png"
11957 "/share/icons/hicolor/16x16/apps/neverball.png")
11958 ("dist/neverball_24.png"
11959 "/share/icons/hicolor/24x24/apps/neverball.png")
11960 ("dist/neverball_32.png"
11961 "/share/icons/hicolor/32x32/apps/neverball.png")
11962 ("dist/neverball_48.png"
11963 "/share/icons/hicolor/48x48/apps/neverball.png")
11964 ("dist/neverball_64.png"
11965 "/share/icons/hicolor/64x64/apps/neverball.png")
11966 ("dist/neverball_128.png"
11967 "/share/icons/hicolor/128x128/apps/neverball.png")
11968 ("dist/neverball_256.png"
11969 "/share/icons/hicolor/256x256/apps/neverball.png")
11970 ("dist/neverball_512.png"
11971 "/share/icons/hicolor/512x512/apps/neverball.png")
11972 ("dist/neverputt_16.png"
11973 "/share/icons/hicolor/16x16/apps/neverputt.png")
11974 ("dist/neverputt_24.png"
11975 "/share/icons/hicolor/24x24/apps/neverputt.png")
11976 ("dist/neverputt_32.png"
11977 "/share/icons/hicolor/32x32/apps/neverputt.png")
11978 ("dist/neverputt_48.png"
11979 "/share/icons/hicolor/48x48/apps/neverputt.png")
11980 ("dist/neverputt_64.png"
11981 "/share/icons/hicolor/64x64/apps/neverputt.png")
11982 ("dist/neverputt_128.png"
11983 "/share/icons/hicolor/128x128/apps/neverputt.png")
11984 ("dist/neverputt_256.png"
11985 "/share/icons/hicolor/256x256/apps/neverputt.png")
11986 ("dist/neverputt_512.png"
11987 "/share/icons/hicolor/512x512/apps/neverputt.png")
11988 ("dist/" "share/man/man1" #:include ("mapc.1"))
11989 ("dist/" "share/man/man6" #:include ("neverball.6" "neverputt.6"))
11990 ("doc/" "share/doc/neverball")
11991 ("README.md" "share/doc/neverball/"))
11992 #:phases
11993 (modify-phases %standard-phases
11994 (add-before 'install 'build
11995 (lambda* (#:key inputs outputs #:allow-other-keys)
11996 (let* ((out (assoc-ref outputs "out"))
11997 (sdl (assoc-ref inputs "sdl")))
11998 (invoke "make" "-j" (number->string (parallel-job-count))
11999 "--environment-overrides"
12000 "CC=gcc" "BUILD=release"
12001 (string-append "DATADIR="
12002 out
12003 "/share/games/neverball/data")
12004 (string-append "LOCALEDIR=" out "/share/locale")
12005 (string-append "SDL_CPPFLAGS=-I"
12006 sdl
12007 "/include/SDL2/")))
12008 #t))
12009 (add-after 'install 'fix-some-broken-fonts
12010 (lambda* (#:key outputs #:allow-other-keys)
12011 (let* ((out (assoc-ref outputs "out")))
12012 (wrap-program (string-append out "/bin/neverball")
12013 `("LANG" = ("en_US.utf8")))
12014 (wrap-program (string-append out "/bin/neverputt")
12015 `("LANG" = ("en_US.utf8"))))
12016 #t)))))
12017 (native-inputs
12018 `(("gettext" ,gettext-minimal))) ;for msgfmt
12019 (inputs
12020 `(("libjpeg" ,libjpeg-turbo)
12021 ("libpng" ,libpng)
12022 ("libvorbis" ,libvorbis)
12023 ("physfs" ,physfs)
12024 ("sdl" ,(sdl-union (list sdl2 sdl2-ttf)))))
12025 (home-page "https://neverball.org/")
12026 (synopsis "3D floor-tilting game")
12027 (description
12028 "In the grand tradition of Marble Madness and Super Monkey Ball,
12029 Neverball has you guide a rolling ball through dangerous territory. Balance
12030 on narrow bridges, navigate mazes, ride moving platforms, and dodge pushers
12031 and shovers to get to the goal. Race against the clock to collect coins to
12032 earn extra balls. Also included is Neverputt, which is a 3D miniature golf
12033 game.") ;thanks to Debian for description
12034 (license license:gpl2+))))
12035
12036 (define-public pokerth
12037 (package
12038 (name "pokerth")
12039 (version "1.1.2")
12040 (source
12041 (origin
12042 (method url-fetch)
12043 (uri (string-append "mirror://sourceforge/pokerth/pokerth/"
12044 version "/pokerth-" version ".tar.gz"))
12045 (sha256
12046 (base32 "0yi9bj3k8yc1gkwmaf14zbbvvn13n54n1dli8k6j1pkph3p3vjq2"))
12047 (modules '((guix build utils)))
12048 (snippet
12049 '(begin
12050 ;; Remove bundled websocketpp.
12051 (delete-file-recursively "src/third_party/websocketpp")
12052 (substitute* "pokerth_lib.pro"
12053 (("src/third_party/websocketpp")
12054 ""))
12055 #t))))
12056 (build-system qt-build-system)
12057 (inputs
12058 `(("boost" ,boost)
12059 ("curl" ,curl)
12060 ("gsasl" ,gsasl)
12061 ("libgcrypt" ,libgcrypt)
12062 ("libircclient" ,libircclient)
12063 ("protobuf" ,protobuf-2) ; remove package when no longer needed
12064 ("qtbase" ,qtbase)
12065 ("sdl" ,(sdl-union (list sdl sdl-mixer)))
12066 ("sqlite" ,sqlite)
12067 ("tinyxml" ,tinyxml)
12068 ("websocketpp" ,websocketpp)
12069 ("zlib" ,zlib)))
12070 (arguments
12071 `(#:tests? #f ; No test suite
12072 #:phases
12073 (modify-phases %standard-phases
12074 (add-after 'unpack 'fix-paths
12075 (lambda* (#:key inputs #:allow-other-keys)
12076 (substitute* (find-files "." "\\.pro$")
12077 (("/opt/gsasl")
12078 (assoc-ref inputs "gsasl"))
12079 (("\\$\\$\\{PREFIX\\}/include/libircclient")
12080 (string-append (assoc-ref inputs "libircclient")
12081 "/include/libircclient"))
12082 (("LIB_DIRS =")
12083 (string-append "LIB_DIRS = "
12084 (assoc-ref inputs "boost") "/lib")))
12085 #t))
12086 (add-after 'unpack 'fix-build
12087 (lambda _
12088 ;; Fixes for Boost versions >= 1.66.
12089 (substitute* '("src/net/common/clientthread.cpp"
12090 "src/net/serveraccepthelper.h")
12091 (("boost::asio::socket_base::non_blocking_io command\\(true\\);")
12092 "")
12093 (("newSock->io_control\\(command\\);")
12094 "newSock->non_blocking(true);")
12095 (("acceptedSocket->io_control\\(command\\);")
12096 "acceptedSocket->non_blocking(true);"))
12097 #t))
12098 (replace 'configure
12099 (lambda* (#:key outputs #:allow-other-keys)
12100 (invoke "qmake" "pokerth.pro" "CONFIG+=client"
12101 (string-append "PREFIX=" (assoc-ref outputs "out"))))))))
12102 (home-page "https://www.pokerth.net")
12103 (synopsis "Texas holdem poker game")
12104 (description
12105 "With PokerTH you can play the Texas holdem poker game, either against
12106 computer opponents or against real players online.")
12107 (license license:agpl3+)))
12108
12109 (define-public azimuth
12110 (package
12111 (name "azimuth")
12112 ;; Not marked as latest release, but it fixes a compiling issue
12113 ;; and adds the install target.
12114 (version "1.0.3")
12115 (source
12116 (origin
12117 (method git-fetch)
12118 (uri (git-reference
12119 (url "https://github.com/mdsteele/azimuth")
12120 (commit (string-append "v" version))))
12121 (file-name (git-file-name name version))
12122 (sha256
12123 (base32
12124 "1znfvpmqiixd977jv748glk5zc4cmhw5813zp81waj07r9b0828r"))))
12125 (build-system gnu-build-system)
12126 (arguments
12127 `(#:test-target "test"
12128 #:phases
12129 (modify-phases %standard-phases
12130 (delete 'configure) ; no configure script
12131 ;; Build release version instead of debug version.
12132 (add-after 'unpack 'set-release
12133 (lambda _
12134 (setenv "BUILDTYPE" "release") #t))
12135 (add-after 'unpack 'fix-install ; set install directory
12136 (lambda* (#:key outputs #:allow-other-keys)
12137 (substitute* "Makefile" (("/usr") (assoc-ref outputs "out"))) #t)))))
12138 (inputs `(("sdl" ,sdl)))
12139 (home-page "https://mdsteele.games/azimuth/")
12140 (synopsis "Metroidvania game with vector graphics")
12141 (description
12142 "Pilot your ship inside a planet to find and rescue the colonists trapped
12143 inside the Zenith Colony.")
12144 (license license:gpl3+)))
12145
12146 (define-public cgoban
12147 (package
12148 (name "cgoban")
12149 (version "1.9.14")
12150 (source
12151 (origin
12152 (method url-fetch)
12153 (uri (string-append "mirror://sourceforge/cgoban1/cgoban1/"
12154 version "/cgoban-" version ".tar.gz"))
12155 (sha256
12156 (base32 "0qlvkiaglqq0izfph3l04mp4rqqqm9ks6rcsrmzrggw9x706z2iv"))))
12157 (build-system gnu-build-system)
12158 (inputs
12159 `(("libx11" ,libx11)
12160 ("libxt" ,libxt)
12161 ("xorgproto" ,xorgproto)))
12162 (home-page "http://cgoban1.sourceforge.net/")
12163 (synopsis "Go client for X11")
12164 (description "Provides a large set of Go-related services for X11:
12165 @itemize
12166 @item Local games with precise implementation of the Chinese and Japanese rulesets
12167 @item Edition and visualization of SGF files-Connection to the NNGS or IGS Go servers
12168 @item Bridge to Go modem protocol, allowing to play against Go modem-capable AIs
12169 such as GnuGo.
12170 @end itemize")
12171 (license license:gpl2+)))
12172
12173 (define-public passage
12174 (package
12175 (name "passage")
12176 (version "4")
12177 (source
12178 (origin
12179 (method url-fetch)
12180 (uri (string-append "mirror://sourceforge/hcsoftware/Passage/v"
12181 version "/Passage_v" version "_UnixSource.tar.gz"))
12182 (sha256
12183 (base32 "02ky4a4xdjvr71r58339jjrjyz76b5skcnbq4f8707mrln9vhby3"))))
12184 (build-system gnu-build-system)
12185 (arguments
12186 `(#:tests? #false ; there are none
12187 #:phases
12188 (modify-phases %standard-phases
12189 (add-after 'unpack 'chdir
12190 (lambda _
12191 (chdir "gamma256/gameSource")
12192 (system "cat Makefile.GnuLinux Makefile.all > Makefile")))
12193 (replace 'configure
12194 (lambda* (#:key outputs inputs #:allow-other-keys)
12195 (setenv "CPATH"
12196 (string-append
12197 (assoc-ref inputs "sdl") "/include/SDL:"
12198 (or (getenv "CPATH") "")))
12199 (let* ((out (assoc-ref outputs "out"))
12200 (assets (string-append out "/share/passage")))
12201 (substitute* "common.cpp"
12202 (("readTGA\\( \"graphics\"")
12203 (format #false "readTGA(\"~a/graphics\"" assets)))
12204 (substitute* "musicPlayer.cpp"
12205 (("readTGA\\( \"music\"")
12206 (format #false "readTGA(\"~a/music\"" assets))))))
12207 (replace 'install
12208 (lambda* (#:key outputs #:allow-other-keys)
12209 (let* ((out (assoc-ref outputs "out"))
12210 (bin (string-append out "/bin"))
12211 (assets (string-append out "/share/passage/")))
12212 (install-file "Passage" bin)
12213 (install-file "../documentation/Readme.txt" assets)
12214 (copy-recursively "graphics" (string-append assets "graphics"))
12215 (copy-recursively "music" (string-append assets "music"))
12216 (copy-recursively "settings" (string-append assets "settings"))))))))
12217 (inputs
12218 `(("sdl" ,(sdl-union (list sdl sdl-mixer)))))
12219 (native-inputs
12220 `(("imagemagick" ,imagemagick)))
12221 (home-page "http://hcsoftware.sourceforge.net/passage/")
12222 (synopsis "Memento mori game")
12223 (description
12224 "Passage is meant to be a memento mori game. It presents an entire life,
12225 from young adulthood through old age and death, in the span of five minutes.
12226 Of course, it's a game, not a painting or a film, so the choices that you make
12227 as the player are crucial. There's no ``right'' way to play Passage, just as
12228 there's no right way to interpret it.")
12229 (license license:public-domain)))
12230
12231 (define-public paperview
12232 (let ((commit "9f8538eb6734c76877b878b8f1e52587f2ae19e6")
12233 (revision "1"))
12234 (package
12235 (name "paperview")
12236 (version (git-version "0.0.1" revision commit)) ;no upstream release
12237 (source (origin
12238 (method git-fetch)
12239 (uri (git-reference
12240 (url "https://github.com/glouw/paperview")
12241 (commit commit)))
12242 (file-name (git-file-name name version))
12243 (sha256
12244 (base32
12245 "09sb9sg44fvkgfdyycrm1ndpx7cnkrglxhci41y8f3gpagnvi7jk"))))
12246 (build-system gnu-build-system)
12247 (inputs
12248 `(("sdl2" ,sdl2)))
12249 (arguments
12250 '(#:tests? #f ;no tests
12251 #:make-flags
12252 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
12253 #:phases
12254 (modify-phases %standard-phases
12255 (delete 'configure))))
12256 (home-page "https://github.com/glouw/paperview/")
12257 (synopsis "High performance X11 animated wallpaper setter")
12258 (description "High performance animated desktop background setter for
12259 X11 that won't set your CPU on fire, drain your laptop battery, or lower video
12260 game FPS.")
12261 (license license:unlicense))))
12262
12263 (define-public curseofwar
12264 (package
12265 (name "curseofwar")
12266 (version "1.3.0")
12267 (source
12268 (origin
12269 (method git-fetch)
12270 (uri (git-reference
12271 (url "https://github.com/a-nikolaev/curseofwar")
12272 (commit (string-append "v" version))))
12273 (file-name (git-file-name name version))
12274 (sha256
12275 (base32 "1wd71wdnj9izg5d95m81yx3684g4zdi7fsy0j5wwnbd9j34ilz1i"))))
12276 (build-system gnu-build-system)
12277 (arguments
12278 `(#:tests? #f ; no tests
12279 #:make-flags
12280 (list (string-append "CC=" ,(cc-for-target))
12281 (string-append "PREFIX=" (assoc-ref %outputs "out")))
12282 #:phases
12283 (modify-phases %standard-phases
12284 (delete 'configure))))
12285 (inputs `(("ncurses" ,ncurses)))
12286 (home-page "https://a-nikolaev.github.io/curseofwar/")
12287 (synopsis "Fast-paced action strategy game")
12288 (description "Curse of War is a fast-paced action strategy game originally
12289 implemented using ncurses user interface. An SDL graphical version is also
12290 available.")
12291 (license license:gpl3+)))