gnu: Add q5go.
[jackhill/guix/guix.git] / gnu / packages / games.scm
... / ...
CommitLineData
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 Eric Bavier <bavier@member.fsf.org>
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 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 ng0 <ng0@n0.is>
19;;; Copyright © 2016 Albin Söderqvist <albin@fripost.org>
20;;; Copyright © 2016, 2017, 2018, 2019 Kei Kebreau <kkebreau@posteo.net>
21;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
22;;; Copyright © 2016, 2017, 2018, 2019 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 Arun Isaac <arunisaac@systemreboot.net>
27;;; Copyright © 2017, 2018, 2019 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 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 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 Pierre Neidhardt <mail@ambrevar.xyz>
40;;; Copyright © 2019 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 Jesse Gibbons <jgibbons2357+guix@gmail.com>
44;;; Copyright © 2019 Dan Frumin <dfrumin@cs.ru.nl>
45;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
46;;; Copyright © 2019 Timotej Lazar <timotej.lazar@araneo.si>
47;;; Copyright © 2019 Josh Holland <josh@inv.alid.pw>
48;;;
49;;; This file is part of GNU Guix.
50;;;
51;;; GNU Guix is free software; you can redistribute it and/or modify it
52;;; under the terms of the GNU General Public License as published by
53;;; the Free Software Foundation; either version 3 of the License, or (at
54;;; your option) any later version.
55;;;
56;;; GNU Guix is distributed in the hope that it will be useful, but
57;;; WITHOUT ANY WARRANTY; without even the implied warranty of
58;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
59;;; GNU General Public License for more details.
60;;;
61;;; You should have received a copy of the GNU General Public License
62;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
63
64(define-module (gnu packages games)
65 #:use-module (ice-9 match)
66 #:use-module ((guix licenses) #:prefix license:)
67 #:use-module (guix utils)
68 #:use-module (guix packages)
69 #:use-module (guix download)
70 #:use-module (guix git-download)
71 #:use-module (guix svn-download)
72 #:use-module (guix gexp)
73 #:use-module (gnu packages)
74 #:use-module (gnu packages algebra)
75 #:use-module (gnu packages autotools)
76 #:use-module (gnu packages backup)
77 #:use-module (gnu packages base)
78 #:use-module (gnu packages build-tools)
79 #:use-module (gnu packages admin)
80 #:use-module (gnu packages audio)
81 #:use-module (gnu packages avahi)
82 #:use-module (gnu packages assembly)
83 #:use-module (gnu packages bash)
84 #:use-module (gnu packages bison)
85 #:use-module (gnu packages boost)
86 #:use-module (gnu packages check)
87 #:use-module (gnu packages cmake)
88 #:use-module (gnu packages compression)
89 #:use-module (gnu packages curl)
90 #:use-module (gnu packages crypto)
91 #:use-module (gnu packages cyrus-sasl)
92 #:use-module (gnu packages documentation)
93 #:use-module (gnu packages docbook)
94 #:use-module (gnu packages emulators)
95 #:use-module (gnu packages flex)
96 #:use-module (gnu packages fltk)
97 #:use-module (gnu packages fonts)
98 #:use-module (gnu packages fontutils)
99 #:use-module (gnu packages freedesktop)
100 #:use-module (gnu packages fribidi)
101 #:use-module (gnu packages game-development)
102 #:use-module (gnu packages gcc)
103 #:use-module (gnu packages gettext)
104 #:use-module (gnu packages ghostscript)
105 #:use-module (gnu packages gimp)
106 #:use-module (gnu packages gl)
107 #:use-module (gnu packages glib)
108 #:use-module (gnu packages gnome)
109 #:use-module (gnu packages gnuzilla)
110 #:use-module (gnu packages gperf)
111 #:use-module (gnu packages graphics)
112 #:use-module (gnu packages gstreamer)
113 #:use-module (gnu packages gtk)
114 #:use-module (gnu packages guile)
115 #:use-module (gnu packages haskell)
116 #:use-module (gnu packages haskell-crypto)
117 #:use-module (gnu packages haskell-xyz)
118 #:use-module (gnu packages icu4c)
119 #:use-module (gnu packages image)
120 #:use-module (gnu packages imagemagick)
121 #:use-module (gnu packages less)
122 #:use-module (gnu packages libcanberra)
123 #:use-module (gnu packages libedit)
124 #:use-module (gnu packages libunwind)
125 #:use-module (gnu packages linux)
126 #:use-module (gnu packages llvm)
127 #:use-module (gnu packages lua)
128 #:use-module (gnu packages man)
129 #:use-module (gnu packages maths)
130 #:use-module (gnu packages mp3)
131 #:use-module (gnu packages music)
132 #:use-module (gnu packages multiprecision)
133 #:use-module (gnu packages ncurses)
134 #:use-module (gnu packages netpbm)
135 #:use-module (gnu packages networking)
136 #:use-module (gnu packages ocaml)
137 #:use-module (gnu packages opencl)
138 #:use-module (gnu packages pcre)
139 #:use-module (gnu packages perl)
140 #:use-module (gnu packages perl-check)
141 #:use-module (gnu packages pkg-config)
142 #:use-module (gnu packages pulseaudio)
143 #:use-module (gnu packages python)
144 #:use-module (gnu packages python-xyz)
145 #:use-module (gnu packages qt)
146 #:use-module (gnu packages readline)
147 #:use-module (gnu packages shells)
148 #:use-module (gnu packages sdl)
149 #:use-module (gnu packages serialization)
150 #:use-module (gnu packages sqlite)
151 #:use-module (gnu packages squirrel)
152 #:use-module (gnu packages swig)
153 #:use-module (gnu packages tcl)
154 #:use-module (gnu packages terminals)
155 #:use-module (gnu packages texinfo)
156 #:use-module (gnu packages textutils)
157 #:use-module (gnu packages tls)
158 #:use-module (gnu packages upnp)
159 #:use-module (gnu packages video)
160 #:use-module (gnu packages vulkan)
161 #:use-module (gnu packages web)
162 #:use-module (gnu packages wget)
163 #:use-module (gnu packages wxwidgets)
164 #:use-module (gnu packages xdisorg)
165 #:use-module (gnu packages xorg)
166 #:use-module (gnu packages xiph)
167 #:use-module (gnu packages xml)
168 #:use-module (gnu packages messaging)
169 #:use-module (gnu packages networking)
170 #:use-module (guix build-system glib-or-gtk)
171 #:use-module (guix build-system gnu)
172 #:use-module (guix build-system go)
173 #:use-module (guix build-system meson)
174 #:use-module (guix build-system scons)
175 #:use-module (guix build-system python)
176 #:use-module (guix build-system cmake)
177 #:use-module (guix build-system trivial)
178 #:use-module ((srfi srfi-1) #:hide (zip))
179 #:use-module (srfi srfi-26))
180
181;; Data package for adanaxisgpl.
182(define adanaxis-mush
183 (let ((version "1.1.0"))
184 (origin
185 (method url-fetch)
186 (uri (string-append "http://www.mushware.com/files/adanaxis-mush-"
187 version ".tar.gz"))
188 (sha256
189 (base32 "0mk9ibis5nkdcalcg1lkgnsdxxbw4g5w2i3icjzy667hqirsng03")))))
190
191(define-public adanaxisgpl
192 (package
193 (name "adanaxisgpl")
194 (version "1.2.5")
195 (source
196 (origin
197 (method url-fetch)
198 (uri (string-append "http://www.mushware.com/files/adanaxisgpl-"
199 version ".tar.gz"))
200 (sha256
201 (base32 "0jkn637jaabvlhd6hpvzb57vvjph94l6fbf7qxbjlw9zpr19dw1f"))
202 (modules '((guix build utils)))
203 (snippet
204 '(begin
205 ;; Necessary for building with gcc >=4.7.
206 (substitute* "src/Mushcore/MushcoreSingleton.h"
207 (("SingletonPtrSet\\(new SingletonType\\);")
208 "MushcoreSingleton::SingletonPtrSet(new SingletonType);"))
209 ;; Avoid an "invalid conversion from const char* to char*" error.
210 (substitute* "src/Platform/X11/PlatformMiscUtils.cpp"
211 (("char \\*end, \\*result;")
212 (string-append "const char *end;"
213 "\n"
214 "char *result;")))
215 #t))))
216 (build-system gnu-build-system)
217 (arguments
218 `(#:tests? #f ; no check target
219 #:phases
220 (modify-phases %standard-phases
221 (add-after 'install 'install-data
222 (lambda* (#:key inputs outputs #:allow-other-keys)
223 (let ((data (assoc-ref inputs "adanaxis-mush"))
224 (share (string-append (assoc-ref outputs "out")
225 "/share/" ,name "-" ,version)))
226 (mkdir-p share)
227 (invoke "tar" "xvf" data "-C" share)))))))
228 (native-inputs
229 `(("adanaxis-mush" ,adanaxis-mush))) ; game data
230 (inputs
231 `(("expat" ,expat)
232 ("freeglut" ,freeglut)
233 ("glu" ,glu)
234 ("libjpeg" ,libjpeg)
235 ("libogg" ,libogg)
236 ("libtiff" ,libtiff)
237 ("libvorbis" ,libvorbis)
238 ("libx11" ,libx11)
239 ("libxext" ,libxext)
240 ("pcre" ,pcre)
241 ("sdl" ,sdl)
242 ("sdl-mixer" ,sdl-mixer)))
243 (home-page "https://www.mushware.com")
244 (synopsis "Action game in four spatial dimensions")
245 (description
246 "Adanaxis is a fast-moving first person shooter set in deep space, where
247the fundamentals of space itself are changed. By adding another dimension to
248space this game provides an environment with movement in four directions and
249six planes of rotation. Initially the game explains the 4D control system via
250a graphical sequence, before moving on to 30 levels of gameplay with numerous
251enemy, ally, weapon and mission types. Features include simulated 4D texturing,
252mouse and joystick control, and original music.")
253 (license license:gpl2)))
254
255(define-public alex4
256 (package
257 (name "alex4")
258 (version "1.2.1")
259 (source
260 (origin
261 (method git-fetch)
262 (uri (git-reference
263 (url "https://github.com/carstene1ns/alex4.git")
264 (commit version)))
265 (file-name (git-file-name name version))
266 (sha256
267 (base32 "098wy72mh4lsvq3gm0rhamjssf9l1hp6hhkpzrv7klpb97cwwc3h"))))
268 (build-system gnu-build-system)
269 (arguments
270 `(#:tests? #f ; no check target
271 #:make-flags
272 (list "CC=gcc"
273 "CFLAGS=-D_FILE_OFFSET_BITS=64"
274 (string-append "PREFIX=" (assoc-ref %outputs "out")))
275 #:phases
276 (modify-phases %standard-phases
277 (delete 'configure) ; no configure script
278 (add-after 'install 'install-data
279 (lambda* (#:key outputs #:allow-other-keys)
280 (let ((share (string-append (assoc-ref outputs "out")
281 "/share/" ,name)))
282 (install-file "alex4.ini" share)
283 #t))))))
284 (inputs
285 `(("allegro" ,allegro-4)
286 ("dumb" ,dumb-allegro4)))
287 (home-page "http://allegator.sourceforge.net/")
288 (synopsis "Retro platform game")
289 (description
290 "Guide Alex the Allegator through the jungle in order to save his
291girlfriend Lola from evil humans who want to make a pair of shoes out of her.
292Plenty of classic platforming in four nice colors guaranteed!
293
294The game includes a built-in editor so you can design and share your own maps.")
295 (license license:gpl2+)))
296
297(define-public armagetronad
298 (package
299 (name "armagetronad")
300 (version "0.2.8.3.4")
301 (source (origin
302 (method url-fetch)
303 (uri (string-append "mirror://sourceforge/armagetronad/stable/"
304 version "/armagetronad-" version ".src.tar.gz"))
305 (sha256
306 (base32
307 "1pgy0r80z702qdv94aw3ywdn4ynnr4cdi86ml558pljfc5ygasj4"))))
308 (build-system gnu-build-system)
309 (inputs
310 `(("libxml2" ,libxml2)
311 ("sdl" ,sdl)
312 ("sdl-image" ,sdl-image)
313 ("freeglut" ,freeglut)
314 ("libpng" ,libpng)
315 ("libjpeg-turbo" ,libjpeg-turbo)))
316 (home-page "http://www.armagetronad.org")
317 (synopsis "Tron clone in 3D")
318 (description "Armagetron Advanced is a multiplayer game in 3d that
319attempts to emulate and expand on the lightcycle sequence from the movie Tron.
320It's an old school arcade game slung into the 21st century. Highlights
321include a customizable playing arena, HUD, unique graphics, and AI bots. For
322the more advanced player there are new game modes and a wide variety of
323physics settings to tweak as well.")
324 (license license:gpl2+)))
325
326(define-public armagetron-advanced
327 (deprecated-package "armagetron-advanced" armagetronad))
328
329(define-public bastet
330 (package
331 (name "bastet")
332 (version "0.43.2")
333 (source
334 (origin
335 (method git-fetch)
336 (uri (git-reference
337 (url "https://github.com/fph/bastet.git")
338 (commit version)))
339 (file-name (git-file-name name version))
340 (sha256
341 (base32 "09kamxapm9jw9przpsgjfg33n9k94bccv65w95dakj0br33a75wn"))
342 (patches
343 (search-patches "bastet-change-source-of-unordered_set.patch"))))
344 (build-system gnu-build-system)
345 (arguments
346 `(#:make-flags
347 (list (string-append "CXXFLAGS=-I"
348 (assoc-ref %build-inputs "boost") "/include"))
349 #:phases
350 (modify-phases %standard-phases
351 (delete 'configure) ; no configure script
352 (replace 'check
353 ;; The 'Test' target builds the tests, but doesn't actually run them.
354 (lambda* (#:key make-flags #:allow-other-keys)
355 (apply invoke "make" "Test" make-flags)
356 (setenv "HOME" ".")
357 (invoke "./Test")))
358 (replace 'install
359 (lambda* (#:key outputs #:allow-other-keys)
360 (let* ((out (assoc-ref outputs "out"))
361 (share (string-append out "/share"))
362 (hicolor (string-append share "/icons/hicolor")))
363 (install-file "bastet"
364 (string-append out "/bin"))
365
366 (install-file "bastet.desktop"
367 (string-append share "/applications"))
368 (install-file "bastet.svg"
369 (string-append hicolor "/scalable/apps"))
370
371 (install-file "bastet.appdata.xml"
372 (string-append share "/appdata"))
373
374 (install-file "bastet.6"
375 (string-append out "/share/man/man6"))
376 #t))))))
377 (native-inputs
378 `(("hicolor-icon-theme" ,hicolor-icon-theme)))
379 (inputs
380 `(("boost" ,boost)
381 ("ncurses" ,ncurses)))
382 (home-page "http://fph.altervista.org/prog/bastet.html")
383 (synopsis "Antagonistic Tetris-style falling brick game for text terminals")
384 (description
385 "Bastet (short for Bastard Tetris) is a simple ncurses-based falling brick
386game. Unlike normal Tetris, Bastet does not choose the next brick at random.
387Instead, it uses a special algorithm to choose the worst brick possible.
388
389Playing bastet can be a painful experience, especially if you usually make
390canyons and wait for the long I-shaped block to clear four rows at a time.")
391 (license license:gpl3+)))
392
393(define-public cataclysm-dda
394 (let ((commit "9c732a5de48928691ab863d3ab275ca7b0e522fc"))
395 (package
396 (name "cataclysm-dda")
397 (version "0.D")
398 (source (origin
399 (method git-fetch)
400 (uri (git-reference
401 (url "https://github.com/CleverRaven/Cataclysm-DDA.git")
402 (commit commit)))
403 (sha256
404 (base32
405 "00zzhx1mh1qjq668cga5nbrxp2qk6b82j5ak65skhgnlr6ii4ysc"))
406 (file-name (git-file-name name version))))
407 (build-system gnu-build-system)
408 (arguments
409 '(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
410 "USE_HOME_DIR=1" "DYNAMIC_LINKING=1" "RELEASE=1"
411 "LOCALIZE=1" "LANGUAGES=all")
412 #:phases
413 (modify-phases %standard-phases
414 (delete 'configure)
415 (add-after 'build 'build-tiles
416 (lambda* (#:key make-flags outputs #:allow-other-keys)
417 ;; Change prefix directory and enable tile graphics and sound.
418 (apply invoke "make" "TILES=1" "SOUND=1"
419 (string-append "PREFIX="
420 (assoc-ref outputs "tiles"))
421 (cdr make-flags))))
422 (add-after 'install 'install-tiles
423 (lambda* (#:key make-flags outputs #:allow-other-keys)
424 (apply invoke "make" "install" "TILES=1" "SOUND=1"
425 (string-append "PREFIX="
426 (assoc-ref outputs "tiles"))
427 (cdr make-flags)))))
428 ;; TODO: Add libtap++ from https://github.com/cbab/libtappp as a native
429 ;; input in order to support tests.
430 #:tests? #f))
431 (outputs '("out"
432 "tiles")) ; For tile graphics and sound support.
433 (native-inputs
434 `(("gettext" ,gettext-minimal)
435 ("pkg-config" ,pkg-config)))
436 (inputs
437 `(("freetype" ,freetype)
438 ("libogg" ,libogg)
439 ("libvorbis" ,libvorbis)
440 ("ncurses" ,ncurses)
441 ("sdl2" ,sdl2)
442 ("sdl2-image" ,sdl2-image)
443 ("sdl2-ttf" ,sdl2-ttf)
444 ("sdl2-mixer" ,sdl2-mixer)))
445 (home-page "http://en.cataclysmdda.com/")
446 (synopsis "Survival horror roguelike video game")
447 (description
448 "Cataclysm: Dark Days Ahead (or \"DDA\" for short) is a roguelike set
449in a post-apocalyptic world. Struggle to survive in a harsh, persistent,
450procedurally generated world. Scavenge the remnants of a dead civilization
451for food, equipment, or, if you are lucky, a vehicle with a full tank of gas
452to get you out of Dodge. Fight to defeat or escape from a wide variety of
453powerful monstrosities, from zombies to giant insects to killer robots and
454things far stranger and deadlier, and against the others like yourself, that
455want what you have.")
456 (license license:cc-by-sa3.0))))
457
458(define-public cataclysm-dark-days-ahead
459 (deprecated-package "cataclysm-dark-days-ahead" cataclysm-dda))
460
461(define-public cowsay
462 (package
463 (name "cowsay")
464 (version "3.04")
465 (source (origin
466 (method git-fetch)
467 (uri (git-reference
468 (url "https://github.com/tnalpgge/rank-amateur-cowsay.git")
469 (commit (string-append name "-" version))))
470 (file-name (git-file-name name version))
471 (sha256
472 (base32
473 "06455kq37hvq1xb7adyiwrx0djs50arsxvjgixyxks16lm1rlc7n"))))
474 (build-system gnu-build-system)
475 (arguments
476 `(#:phases
477 (modify-phases %standard-phases
478 (delete 'configure) ; no configure script
479 (delete 'build) ; nothing to be built
480 (replace 'install
481 (lambda* (#:key outputs #:allow-other-keys)
482 (invoke "sh" "install.sh"
483 (assoc-ref outputs "out"))))
484 (delete 'check)
485 (add-after 'install 'check
486 (lambda* (#:key outputs #:allow-other-keys)
487 (invoke (string-append (assoc-ref outputs "out")
488 "/bin/cowsay")
489 "We're done!"))))))
490 (inputs
491 `(("perl" ,perl)))
492 (home-page (string-append "https://web.archive.org/web/20071026043648/"
493 "http://www.nog.net:80/~tony/warez/cowsay.shtml"))
494 (synopsis "Speaking cow text filter")
495 (description "Cowsay is basically a text filter. Send some text into it,
496and you get a cow saying your text. If you think a talking cow isn't enough,
497cows can think too: all you have to do is run @command{cowthink}. If you're
498tired of cows, a variety of other ASCII-art messengers are available.")
499 (license license:gpl3+)))
500
501(define-public freedoom
502 (package
503 (name "freedoom")
504 (version "0.12.1")
505 (source
506 (origin
507 (method git-fetch)
508 (uri (git-reference
509 (url "https://github.com/freedoom/freedoom.git")
510 (commit (string-append "v" version))))
511 (file-name (git-file-name name version))
512 (sha256
513 (base32 "1mq60lfwaaxmch7hsz8403pwafnlsmsd5z2df2j77ppwndwcrypb"))))
514 (build-system gnu-build-system)
515 (arguments
516 '(#:make-flags
517 (list (string-append "prefix=" (assoc-ref %outputs "out")))
518 #:tests? #f ; no check target
519 #:phases
520 (modify-phases %standard-phases
521 (delete 'bootstrap)
522 (replace 'configure
523 (lambda* (#:key inputs outputs #:allow-other-keys)
524 (let* ((freedoom (assoc-ref outputs "out"))
525 (wad-dir (string-append freedoom "/share/games/doom")))
526 ;; Make sure that the install scripts know where to find
527 ;; the appropriate WAD files.
528 (substitute* "dist/freedoom"
529 (("IWAD=freedm.wad")
530 (string-append "IWAD=" wad-dir "/freedm.wad"))
531 (("IWAD=freedoom1.wad")
532 (string-append "IWAD=" wad-dir "/freedoom1.wad"))
533 (("IWAD=freedoom2.wad")
534 (string-append "IWAD=" wad-dir "/freedoom2.wad")))
535 #t))))))
536 (native-inputs
537 `(("asciidoc" ,asciidoc)
538 ("deutex" ,deutex)
539 ("python" ,python)
540 ("python-pillow" ,python-pillow)))
541 (home-page "https://freedoom.github.io/")
542 (synopsis "Free content game based on the Doom engine")
543 (native-search-paths
544 (list (search-path-specification
545 (variable "DOOMWADDIR")
546 (files '("share/games/doom")))
547 (search-path-specification
548 (variable "DOOMWADPATH")
549 (files '("share/games/doom")))))
550 (description
551 "The Freedoom project aims to create a complete free content first person
552shooter game. Freedoom by itself is just the raw material for a game: it must
553be paired with a compatible game engine (such as @code{prboom-plus}) to be
554played. Freedoom complements the Doom engine with free levels, artwork, sound
555effects and music to make a completely free game.")
556 (license license:bsd-3)))
557
558(define-public freedroidrpg
559 (package
560 (name "freedroidrpg")
561 (version "0.16.1")
562 (source
563 (origin
564 (method url-fetch)
565 (uri (string-append "http://ftp.osuosl.org/pub/freedroid/"
566 "freedroidRPG-" (version-major+minor version) "/"
567 "freedroidRPG-" version ".tar.gz"))
568 (sha256
569 (base32 "0n4kn38ncmcy3lrxmq8fjry6c1z50z4q1zcqfig0j4jb0dsz2va2"))))
570 (build-system gnu-build-system)
571 (arguments
572 `(#:configure-flags
573 (list
574 (string-append "CFLAGS="
575 "-I" (assoc-ref %build-inputs "sdl-gfx") "/include/SDL "
576 "-I" (assoc-ref %build-inputs "sdl-image") "/include/SDL "
577 "-I" (assoc-ref %build-inputs "sdl-mixer") "/include/SDL")
578 "--enable-opengl")
579 ;; FIXME: the test suite fails with the following error output:
580 ;; 4586 Segmentation fault env SDL_VIDEODRIVER=dummy \
581 ;; SDL_AUDIODRIVER=dummy ./src/freedroidRPG -nb text
582 #:tests? #f))
583 (native-inputs
584 `(("pkg-config" ,pkg-config)))
585 (inputs
586 `(("glu" ,glu)
587 ("libjpeg" ,libjpeg)
588 ("libogg" ,libogg)
589 ("libpng" ,libpng)
590 ("libvorbis" ,libvorbis)
591 ("mesa" ,mesa)
592 ("python" ,python-wrapper)
593 ("sdl" ,sdl)
594 ("sdl-gfx" ,sdl-gfx)
595 ("sdl-image" ,sdl-image)
596 ("sdl-mixer" ,sdl-mixer)
597 ("zlib" ,zlib)))
598 (home-page "http://www.freedroid.org/")
599 (synopsis "Isometric role-playing game against killer robots")
600 (description
601 "Freedroid RPG is an @dfn{RPG} (Role-Playing Game) with isometric graphics.
602The game tells the story of a world destroyed by a conflict between robots and
603their human masters. To restore peace to humankind, the player must complete
604numerous quests while fighting off rebelling robots---either by taking control
605of them, or by simply blasting them to pieces with melee and ranged weapons in
606real-time combat.")
607 (license (list license:expat ; lua/
608 license:gpl3 ; src/gen_savestruct.py
609 license:gpl2+)))) ; the rest
610
611(define-public golly
612 (package
613 (name "golly")
614 (version "3.2")
615 (source (origin
616 (method url-fetch)
617 (uri (string-append "mirror://sourceforge/golly/golly/golly-"
618 version "/golly-" version
619 "-src.tar.gz"))
620 (sha256
621 (base32
622 "0cg9mbwmf4q6qxhqlnzrxh9y047banxdb8pd3hgj3smmja2zf0jd"))))
623 (build-system gnu-build-system)
624 (arguments
625 '(#:make-flags (list "CC=gcc"
626 (string-append "GOLLYDIR="
627 (assoc-ref %outputs "out")
628 "/share/golly"))
629 #:tests? #f ; no check target
630 #:phases
631 (modify-phases %standard-phases
632 (replace 'configure
633 (lambda* (#:key inputs #:allow-other-keys)
634 ;; For some reason, setting the PYTHON_SHLIB make flag doesn't
635 ;; properly set the path to the Python shared library. This
636 ;; substitution acheives the same end by different means.
637 (substitute* "gui-wx/wxprefs.cpp"
638 (("pythonlib = wxT\\(STRINGIFY\\(PYTHON_SHLIB\\)\\)")
639 (string-append "pythonlib = \""
640 (assoc-ref inputs "python")
641 "/lib/libpython-2.7.so\"")))
642 #t))
643 (replace 'build
644 (lambda* (#:key make-flags outputs #:allow-other-keys)
645 (with-directory-excursion "gui-wx"
646 (apply invoke `("make" ,@make-flags "-f" "makefile-gtk")))))
647 (replace 'install
648 (lambda* (#:key outputs #:allow-other-keys)
649 (let* ((out (assoc-ref outputs "out"))
650 (bin (string-append out "/bin"))
651 (doc (string-append out "/share/doc/golly"))
652 (pixmaps (string-append out "/share/pixmaps"))
653 (share (string-append out "/share/golly")))
654 (for-each (lambda (binary)
655 (install-file binary bin))
656 '("bgolly" "golly"))
657 (for-each (lambda (document)
658 (install-file
659 (string-append "docs/" document ".html")
660 doc))
661 '("License" "ReadMe" "ToDo"))
662 (install-file "gui-wx/icons/appicon.xpm" pixmaps)
663 (for-each (lambda (folder)
664 (copy-recursively
665 folder
666 (string-append share "/" folder)))
667 '("Help" "Patterns" "Rules" "Scripts")))
668 #t)))))
669 (native-inputs
670 `(("lua" ,lua)))
671 (inputs
672 `(("glu" ,glu)
673 ("mesa" ,mesa)
674 ("python" ,python-2)
675 ("wxwidgets" ,wxwidgets-gtk2)
676 ("zlib" ,zlib)))
677 (home-page "http://golly.sourceforge.net/")
678 (synopsis "Software for exploring cellular automata")
679 (description
680 "Golly simulates Conway's Game of Life and many other types of cellular
681automata. The following features are available:
682@enumerate
683@item Support for bounded and unbounded universes, with cells of up to 256
684 states.
685@item Support for multiple algorithms, including Bill Gosper's Hashlife
686 algorithm.
687@item Loading patterns from BMP, PNG, GIF and TIFF image files.
688@item Reading RLE, macrocell, Life 1.05/1.06, dblife and MCell files.
689@item Scriptable via Lua or Python.
690@item Extracting patterns, rules and scripts from zip files.
691@item Downloading patterns, rules and scripts from online archives.
692@item Pasting patterns from the clipboard.
693@item Unlimited undo/redo.
694@item Configurable keyboard shortcuts.
695@item Auto fit option to keep patterns within the view.
696@end enumerate")
697 (license license:gpl2+)))
698
699(define-public meandmyshadow
700 (package
701 (name "meandmyshadow")
702 (version "0.5a")
703 (source (origin
704 (method url-fetch)
705 (uri (string-append "mirror://sourceforge/meandmyshadow/"
706 version "/meandmyshadow-" version
707 "-src.tar.gz"))
708 (sha256
709 (base32
710 "0i98v6cgmpsxy7mbb0s2y6f6qq6mkwzk2nrv1nz39ncf948aky2h"))))
711 (build-system cmake-build-system)
712 (arguments
713 `(#:tests? #f)) ; there are no tests
714 (native-inputs
715 `(("pkg-config" ,pkg-config)))
716 (inputs
717 `(("curl" ,curl)
718 ("libarchive" ,libarchive)
719 ("lua" ,lua)
720 ("sdl" ,(sdl-union (list sdl2
721 sdl2-image
722 sdl2-mixer
723 sdl2-ttf)))))
724 (home-page "https://acmepjz.github.io/meandmyshadow/")
725 (synopsis "Puzzle/platform game")
726 (description "Me and My Shadow is a puzzle/platform game in which you try
727to reach the exit by solving puzzles. Spikes, moving blocks, fragile blocks
728and much more stand between you and the exit. Record your moves and let your
729shadow mimic them to reach blocks you couldn't reach alone.")
730 (license license:gpl3+)))
731
732(define-public knights
733 (package
734 (name "knights")
735 (version "025")
736 (source (origin
737 (method url-fetch)
738 (uri (string-append "http://www.knightsgame.org.uk/files/knights_"
739 version "_src.tar.gz"))
740 (sha256
741 (base32
742 "18vp2ygvn0s0jz8rm585jqf6hjqkam1ximq81k0r9hpmfj7wb88f"))))
743 (build-system gnu-build-system)
744 (arguments
745 '(#:make-flags
746 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
747 #:phases
748 (modify-phases %standard-phases
749 ;; No configure script.
750 (delete 'configure))
751 #:tests? #f)) ;; No check target.
752 (inputs
753 `(("boost" ,boost)
754 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
755 ("freetype" ,freetype)
756 ("fontconfig" ,fontconfig)
757 ("curl" ,curl)))
758 (native-inputs
759 `(("pkg-config" ,pkg-config)))
760 (home-page "http://www.knightsgame.org.uk/")
761 (synopsis "Multiplayer dungeon game involving knights and quests")
762 (description "Knights is a multiplayer game involving several knights who
763must run around a dungeon and complete various quests. Each game revolves
764around a quest – for example, you might have to find some items and carry them
765back to your starting point. This may sound easy, but as there are only
766enough items in the dungeon for one player to win, you may end up having to
767kill your opponents to get their stuff! Other quests involve escaping from
768the dungeon, fighting a duel to the death against the enemy knights, or
769destroying an ancient book using a special wand.")
770 ;; This package includes modified sources of lua (X11), enet (Expat), and
771 ;; guichan (BSD-3). The "Coercri" library is released under the Boost
772 ;; license. The whole package is released under GPLv3+.
773 (license license:gpl3+)))
774
775(define-public gnubg
776 (package
777 (name "gnubg")
778 (version "1.06.002")
779 (source
780 (origin
781 (method url-fetch)
782 (uri (string-append "http://files.gnubg.org/media/sources/gnubg-release-"
783 version "-sources." "tar.gz"))
784 (sha256
785 (base32
786 "11xwhcli1h12k6rnhhyq4jphzrhfik7i8ah3k32pqw803460n6yf"))))
787 (build-system gnu-build-system)
788 (inputs `(("glib" ,glib)
789 ("readline" ,readline)
790 ("gtk+" ,gtk+-2)
791 ("mesa" ,mesa)
792 ("glu" ,glu)
793 ("gtkglext" ,gtkglext)
794 ("sqlite" ,sqlite)
795 ("libcanberra" ,libcanberra)))
796 (native-inputs `(("python-2" ,python-2)
797 ("pkg-config" ,pkg-config)))
798 (home-page "http://gnubg.org")
799 (synopsis "Backgammon game")
800 (description "The GNU backgammon application (also known as \"gnubg\") can
801be used for playing, analyzing and teaching the game. It has an advanced
802evaluation engine based on artificial neural networks suitable for both
803beginners and advanced players. In addition to a command-line interface, it
804also features an attractive, 3D representation of the playing board.")
805 (license license:gpl3+)))
806
807(define-public gnubackgammon
808 (deprecated-package "gnubackgammon" gnubg))
809
810(define-public gnubik
811 (package
812 (name "gnubik")
813 (version "2.4.3")
814 (source
815 (origin
816 (method url-fetch)
817 (uri (string-append "mirror://gnu/gnubik/gnubik-"
818 version ".tar.gz"))
819 (sha256
820 (base32
821 "1vlf924mq8hg93bsjj0rzvs0crc6psmlxyc6zn0fr7msnmpx6gib"))))
822 (build-system gnu-build-system)
823 (inputs `(("gtk+" ,gtk+-2)
824 ("mesa" ,mesa)
825 ("glu" ,glu)
826 ("libx11" ,libx11)
827 ("guile" ,guile-2.0)
828 ("gtkglext" ,gtkglext)))
829 (native-inputs `(("gettext" ,gettext-minimal)
830 ("pkg-config" ,pkg-config)))
831 (home-page "https://www.gnu.org/software/gnubik/")
832 (synopsis "3d Rubik's cube game")
833 (description
834 "GNUbik is a puzzle game in which you must manipulate a cube to make
835each of its faces have a uniform color. The game is customizable, allowing
836you to set the size of the cube (the default is 3x3) or to change the colors.
837You may even apply photos to the faces instead of colors. The game is
838scriptable with Guile.")
839 (license license:gpl3+)))
840
841(define-public gnushogi
842 (package
843 (name "gnushogi")
844 (version "1.4.2")
845 (source
846 (origin
847 (method url-fetch)
848 (uri (string-append "mirror://gnu/gnushogi/gnushogi-"
849 version ".tar.gz"))
850 (sha256
851 (base32
852 "0a9bsl2nbnb138lq0h14jfc5xvz7hpb2bcsj4mjn6g1hcsl4ik0y"))))
853 (arguments `(#:tests? #f)) ;; No check target.
854 (build-system gnu-build-system)
855 (home-page "https://www.gnu.org/software/gnushogi/")
856 (synopsis "The game of Shogi (Japanese chess)")
857 (description "GNU Shogi is a program that plays the game Shogi (Japanese
858Chess). It is similar to standard chess but this variant is far more complicated.")
859 (license license:gpl3+)))
860
861(define-public ltris
862 (package
863 (name "ltris")
864 (version "1.0.19")
865 (source
866 (origin
867 (method url-fetch)
868 (uri (string-append "http://prdownloads.sourceforge.net/lgames/"
869 "ltris-" version ".tar.gz"))
870 (sha256
871 (base32
872 "1895wv1fqklrj4apkz47rnkcfhfav7zjknskw6p0886j35vrwslg"))))
873 (build-system gnu-build-system)
874 (arguments
875 '(;; The code in LTris uses traditional GNU semantics for inline functions
876 #:configure-flags '("CFLAGS=-fgnu89-inline")
877 #:phases
878 (modify-phases %standard-phases
879 (add-after 'set-paths 'set-sdl-paths
880 (lambda* (#:key inputs #:allow-other-keys)
881 (setenv "CPATH"
882 (string-append (assoc-ref inputs "sdl-union")
883 "/include/SDL:"
884 (or (getenv "CPATH") "")))
885 #t)))))
886 (inputs
887 `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))))
888 (home-page "http://lgames.sourceforge.net/LTris/")
889 (synopsis "Tetris clone based on the SDL library")
890 (description
891 "LTris is a tetris clone: differently shaped blocks are falling down the
892rectangular playing field and can be moved sideways or rotated by 90 degree
893units with the aim of building lines without gaps which then disappear (causing
894any block above the deleted line to fall down). LTris has three game modes: In
895Classic you play until the stack of blocks reaches the top of the playing field
896and no new blocks can enter. In Figures the playing field is reset to a new
897figure each level and later on tiles and lines suddenly appear. In Multiplayer
898up to three players (either human or CPU) compete with each other sending
899removed lines to all opponents. There is also a Demo mode in which you can
900watch your CPU playing while enjoying a cup of tea!")
901 (license license:gpl2+)))
902
903(define-public nethack
904 (package
905 (name "nethack")
906 (version "3.6.2")
907 (source
908 (origin
909 (method url-fetch)
910 (uri
911 (string-append "https://www.nethack.org/download/" version "/nethack-"
912 (string-join (string-split version #\.) "") "-src.tgz"))
913 (sha256
914 (base32 "07fvkm3v11a4pjrq2f66vjslljsvk6raal53skn4gqsfdbd0ml7v"))))
915 (inputs
916 `(("ncurses" ,ncurses)
917 ("bison" ,bison)
918 ("flex" ,flex)
919 ("less" ,less)))
920 (build-system gnu-build-system)
921 (arguments
922 '(#:make-flags
923 `(,(string-append "PREFIX=" (assoc-ref %outputs "out")))
924 #:phases
925 (modify-phases %standard-phases
926 (add-before 'configure 'patch-paths
927 (lambda _
928 (substitute* "sys/unix/nethack.sh"
929 (("^ *cd .*$") ""))
930 (substitute* "sys/unix/Makefile.utl"
931 (("^YACC *=.*$") "YACC = bison -y\n")
932 (("^LEX *=.*$") "LEX = flex\n")
933 (("^# CC = gcc") "CC = gcc"))
934 (substitute* "sys/unix/hints/linux"
935 (("/bin/gzip") (string-append
936 (assoc-ref %build-inputs "gzip")
937 "/bin/gzip"))
938 (("^WINTTYLIB=.*") "WINTTYLIB=-lncurses"))
939 (substitute* "include/config.h"
940 (("^.*define CHDIR.*$") "")
941 (("^/\\* *#*define *REPRODUCIBLE_BUILD *\\*/")
942 ;; Honor SOURCE_DATE_EPOCH.
943 "#define REPRODUCIBLE_BUILD"))
944
945 ;; Note: 'makedefs' rejects and ignores dates that are too old
946 ;; or too new, so we must choose something reasonable here.
947 (setenv "SOURCE_DATE_EPOCH" "1531865062")
948
949 (substitute* "sys/unix/Makefile.src"
950 (("^# CC = gcc") "CC = gcc"))
951 #t))
952 (replace 'configure
953 (lambda _
954 (let ((bash (string-append
955 (assoc-ref %build-inputs "bash")
956 "/bin/bash")))
957 (with-directory-excursion "sys/unix"
958 (substitute* "setup.sh" (("/bin/sh") bash))
959 (invoke bash "setup.sh" "hints/linux"))
960 #t)))
961 (add-after 'install 'fixup-paths
962 (lambda _
963 (let* ((output (assoc-ref %outputs "out"))
964 (nethack-script (string-append output "/bin/nethack")))
965 (mkdir-p (string-append output "/games/lib/nethackuserdir"))
966 (for-each
967 (lambda (file)
968 (rename-file
969 (string-append output "/games/lib/nethackdir/" file)
970 (string-append output "/games/lib/nethackuserdir/"
971 file)))
972 '("xlogfile" "logfile" "perm" "record" "save"))
973 (mkdir-p (string-append output "/bin"))
974 (call-with-output-file nethack-script
975 (lambda (port)
976 (format port "#!~a/bin/sh
977PATH=~a:$PATH
978if [ ! -d ~~/.config/nethack ]; then
979 mkdir -p ~~/.config/nethack
980 cp -r ~a/games/lib/nethackuserdir/* ~~/.config/nethack
981 chmod -R +w ~~/.config/nethack
982fi
983
984RUNDIR=$(mktemp -d)
985
986cleanup() {
987 rm -rf $RUNDIR
988}
989trap cleanup EXIT
990
991cd $RUNDIR
992for i in ~~/.config/nethack/*; do
993 ln -s $i $(basename $i)
994done
995for i in ~a/games/lib/nethackdir/*; do
996 ln -s $i $(basename $i)
997done
998~a/games/nethack"
999 (assoc-ref %build-inputs "bash")
1000 (list->search-path-as-string
1001 (list
1002 (string-append
1003 (assoc-ref %build-inputs "coreutils") "/bin")
1004 (string-append
1005 (assoc-ref %build-inputs "less") "/bin"))
1006 ":")
1007 output
1008 output
1009 output)))
1010 (chmod nethack-script #o555)
1011 #t)))
1012 (delete 'check))))
1013 (home-page "https://nethack.org")
1014 (synopsis "Classic dungeon crawl game")
1015 (description "NetHack is a single player dungeon exploration game that runs
1016on a wide variety of computer systems, with a variety of graphical and text
1017interfaces all using the same game engine. Unlike many other Dungeons &
1018Dragons-inspired games, the emphasis in NetHack is on discovering the detail of
1019the dungeon and not simply killing everything in sight - in fact, killing
1020everything in sight is a good way to die quickly. Each game presents a
1021different landscape - the random number generator provides an essentially
1022unlimited number of variations of the dungeon and its denizens to be discovered
1023by the player in one of a number of characters: you can pick your race, your
1024role, and your gender.")
1025 (license
1026 (license:fsdg-compatible
1027 "https://nethack.org/common/license.html"))))
1028
1029(define-public pipewalker
1030 (package
1031 (name "pipewalker")
1032 (version "0.9.4")
1033 (source
1034 (origin
1035 (method url-fetch)
1036 (uri (string-append "http://downloads.sourceforge.net/pipewalker/"
1037 "pipewalker-" version ".tar.gz"))
1038 (sha256
1039 (base32 "1x46wgk0s55562pd96cxagxkn6wpgglq779f9b64ff1k3xzp3myn"))))
1040 (build-system gnu-build-system)
1041 (arguments
1042 `(#:configure-flags
1043 (list (string-append "--docdir=" (assoc-ref %outputs "out")
1044 "/share/doc/" ,name "-" ,version))
1045 #:phases
1046 (modify-phases %standard-phases
1047 (add-after 'configure 'patch-docdir
1048 ;; Makefile.in ignores configure's ‘--docdir=...’ option. Fix that.
1049 (lambda _
1050 (substitute* "Makefile"
1051 (("(pkgdocdatadir = ).*" _ assignment)
1052 (string-append assignment "$(docdir)\n")))
1053 #t)))))
1054 (inputs
1055 `(("libpng" ,libpng)
1056 ("mesa" ,mesa)
1057 ("sdl" ,sdl)))
1058 (home-page "http://pipewalker.sourceforge.net/")
1059 (synopsis "Logical tile puzzle")
1060 (description
1061 "PipeWalker is a simple puzzle game with many diffent themes: connect all
1062computers to one network server, bring water from a source to the taps, etc.
1063The underlying mechanism is always the same: you must turn each tile in the
1064grid in the right direction to combine all components into a single circuit.
1065Every puzzle has a complete solution, although there may be more than one.")
1066 (license license:gpl3+)))
1067
1068(define-public prboom-plus
1069 (package
1070 (name "prboom-plus")
1071 (version "2.5.1.4")
1072 (source (origin
1073 (method url-fetch)
1074 (uri (string-append "mirror://sourceforge/prboom-plus/prboom-plus/"
1075 version "/prboom-plus-" version ".tar.gz"))
1076 (sha256
1077 (base32 "151v6nign86m1a2vqz27krsccpc9m4d1jax4y43v2fa82wfj9qp0"))
1078 (modules '((guix build utils)))
1079 (snippet
1080 '(begin
1081 (substitute* "src/version.c"
1082 (("__DATE__") "")
1083 (("__TIME__") ""))
1084 #t))))
1085 (build-system gnu-build-system)
1086 (arguments
1087 '(#:configure-flags '("--disable-cpu-opt")
1088 #:make-flags `(,(string-append "gamesdir="
1089 (assoc-ref %outputs "out") "/bin"))
1090 #:phases
1091 (modify-phases %standard-phases
1092 (add-after 'set-paths 'set-sdl'paths
1093 (lambda* (#:key inputs #:allow-other-keys)
1094 (setenv "CPATH"
1095 (string-append (assoc-ref inputs "sdl-union")
1096 "/include/SDL:"
1097 (or (getenv "CPATH") "")))
1098 #t)))))
1099 (inputs
1100 `(("fluidsynth" ,fluidsynth)
1101 ("glu" ,glu)
1102 ("libmad" ,libmad)
1103 ("libpng" ,libpng)
1104 ("libvorbis" ,libvorbis)
1105 ("pcre" ,pcre)
1106 ("portmidi" ,portmidi)
1107 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net)))))
1108 (home-page "http://prboom-plus.sourceforge.net/")
1109 (synopsis "Version of the classic 3D shoot'em'up game Doom")
1110 (description
1111 "PrBoom+ is a Doom source port developed from the original PrBoom project.")
1112 (license license:gpl2+)))
1113
1114(define-public retux
1115 (package
1116 (name "retux")
1117 (version "1.3.6")
1118 (source (origin
1119 (method url-fetch)
1120 (uri (string-append "mirror://savannah/retux/"
1121 (version-major+minor version) "/retux-"
1122 version "-src.tar.gz"))
1123 (sha256
1124 (base32
1125 "01bidh4zisjp3nc436x0g85v60dvwb3ig37i7y01sa71j8fm4fmb"))))
1126 (build-system python-build-system)
1127 (arguments
1128 `(#:tests? #f ; no check target
1129 #:phases
1130 (modify-phases %standard-phases
1131 ;; no setup.py script
1132 (delete 'build)
1133 (replace 'install
1134 (lambda* (#:key outputs #:allow-other-keys)
1135 (let* ((out (assoc-ref outputs "out"))
1136 (bin (string-append out "/bin"))
1137 (data (string-append out "/share/retux"))
1138 (doc (string-append out "/share/doc/retux")))
1139 (mkdir-p bin)
1140
1141 (substitute* "retux.py"
1142 ;; Use the correct data directory.
1143 (("os\\.path\\.join\\(os\\.path\\.dirname\\(__file__\\), \"data\"\\),")
1144 (string-append "\"" data "\","))
1145 ;; Use Python 3 so the patch-shebangs phase works properly.
1146 ((".*python2.*") "#!/usr/bin/python3"))
1147
1148 (copy-file "retux.py" (string-append bin "/retux"))
1149
1150 (copy-recursively "data" data)
1151
1152 (install-file "COPYING" doc)
1153 #t))))))
1154 (inputs
1155 `(("python-sge-pygame" ,python-sge-pygame)
1156 ("python-six" ,python-six)
1157 ("python-xsge" ,python-xsge)))
1158 (home-page "http://retux.nongnu.org")
1159 (synopsis "Action platformer game")
1160 (description
1161 "ReTux is an action platformer loosely inspired by the Mario games,
1162utilizing the art assets from the @code{SuperTux} project.")
1163 ;; GPL version 3 or later is the license for the code and some art.
1164 ;; The rest of the licenses are for the art exclusively, as listed in
1165 ;; data/LICENSES.
1166 (license (list license:cc0
1167 license:cc-by3.0
1168 license:cc-by-sa3.0
1169 license:cc-by-sa4.0
1170 license:gpl2+
1171 license:gpl3+))))
1172
1173(define-public roguebox-adventures
1174 (package
1175 (name "roguebox-adventures")
1176 (version "2.2.1")
1177 (source
1178 (origin
1179 (method url-fetch)
1180 (uri (string-append
1181 "http://download.tuxfamily.org/rba/RogueBoxAdventures_v"
1182 (string-join (string-split version #\.) "_") "_Source.zip"))
1183 (file-name (string-append name "-" version ".zip"))
1184 (sha256
1185 (base32
1186 "0kmzdgnik8fsf3bg55546l77p3mfxn2awkzfzzdn20n82rd2babw"))))
1187 (build-system python-build-system)
1188 (arguments
1189 `(#:tests? #f ; no check target
1190 #:phases
1191 (modify-phases %standard-phases
1192 (replace 'unpack
1193 (lambda* (#:key source #:allow-other-keys)
1194 (and (invoke "unzip" source)
1195 ;; The actual source is buried a few directories deep.
1196 (chdir (string-append "RogueBoxAdventures_v"
1197 (string-join
1198 (string-split ,version #\.) "_")
1199 "_Source")))))
1200 ;; no setup.py script
1201 (replace 'build
1202 (lambda* (#:key outputs #:allow-other-keys)
1203 (let* ((out (assoc-ref outputs "out"))
1204 (data (string-append
1205 out "/share/games/roguebox-adventures")))
1206 ;; Use the correct data directory.
1207 (substitute* '("main.py" "LIB/getch.py" "LIB/getch_gcwz.py")
1208 (("basic_path + os\\.sep + 'DATA'")
1209 (string-append "'" data "'"))
1210 (("^basic_path.*$")
1211 (string-append "basic_path ='" data "'\n")))
1212 (substitute* "LIB/gra_files.py"
1213 (("basic_path = b_path\\.replace\\('/LIB',''\\)")
1214 (string-append "basic_path ='" data "'\n")))
1215
1216 ;; The game must save in the user's home directory because
1217 ;; the store is read-only.
1218 (substitute* "main.py"
1219 (("home_save = False") "home_save = True")
1220 (("'icon_small.png'")
1221 (string-append "'" data "/icon_small.png'"))))
1222 #t))
1223 (replace 'install
1224 (lambda* (#:key outputs #:allow-other-keys)
1225 (let* ((out (assoc-ref outputs "out"))
1226 (bin (string-append out "/bin"))
1227 (roguebox-adventures
1228 (string-append bin "/roguebox-adventures"))
1229 (data (string-append
1230 out "/share/games/roguebox-adventures"))
1231 (lib (string-append data "/LIB"))
1232 (doc (string-append
1233 out "/share/doc/roguebox-adventures")))
1234 (mkdir-p bin)
1235 (mkdir-p doc)
1236
1237 (for-each (lambda (file)
1238 (copy-recursively file
1239 (string-append data "/" file)))
1240 '("AUDIO" "FONT" "GRAPHIC" "LIB" "LICENSE"
1241 "icon_big.png" "icon_small.png"))
1242 (for-each (lambda (file)
1243 (chmod file #o555)
1244 (install-file file lib))
1245 '("main.py" "run.py"))
1246
1247 (copy-recursively "DOC" doc)
1248
1249 (call-with-output-file
1250 roguebox-adventures
1251 (lambda (p)
1252 (format p "\
1253#!~a
1254export PYTHONPATH=~a/LIB:~a
1255exec -a \"~a\" ~a \"$@\"\n"
1256 (which "bash") data (getenv "PYTHONPATH")
1257 (which "python3")
1258 (string-append lib "/main.py"))))
1259 (chmod roguebox-adventures #o555))
1260 #t)))))
1261 (native-inputs
1262 `(("unzip" ,unzip)))
1263 (inputs
1264 `(("python-pygame" ,python-pygame)
1265 ("python-tmx" ,python-tmx)))
1266 (home-page "https://rogueboxadventures.tuxfamily.org")
1267 (synopsis "A classical roguelike/sandbox game")
1268 (description
1269 "RogueBox Adventures is a graphical roguelike with strong influences
1270from sandbox games like Minecraft or Terraria. The main idea of RogueBox
1271Adventures is to offer the player a kind of roguelike toy-world. This world
1272can be explored and changed freely.")
1273 ;; The GPL3+ is for code, the rest are for art.
1274 (license (list license:cc0
1275 license:cc-by3.0
1276 license:gpl3+
1277 license:silofl1.1))))
1278
1279(define-public xshogi
1280 (package
1281 (name "xshogi")
1282 (version "1.4.2")
1283 (source
1284 (origin
1285 (method url-fetch)
1286 (uri (string-append "mirror://gnu/gnushogi/xshogi-"
1287 version ".tar.gz"))
1288 (sha256
1289 (base32
1290 "1dns0nhymak44by18sv48m4xb2skiwbi2i3nb9hl6w9iwd2i2brf"))))
1291 (build-system gnu-build-system)
1292 (inputs
1293 `(("libxaw" ,libxaw)
1294 ("libxt" ,libxt)))
1295 (home-page "https://www.gnu.org/software/gnushogi/")
1296 (synopsis "User interface for gnushogi")
1297 (description "A graphical user interface for the package @code{gnushogi}.")
1298 ;; Contains a copy of GPLv3 but the licence notices simply
1299 ;; state "GNU General Public Licence" without specifying a version.
1300 (license license:gpl1+)))
1301
1302(define-public abbaye
1303 (package
1304 (name "abbaye")
1305 (version "2.0.1")
1306 (source
1307 (origin
1308 (method git-fetch)
1309 (uri (git-reference
1310 (url "https://github.com/nevat/abbayedesmorts-gpl.git")
1311 (commit (string-append "v" version))))
1312 (file-name (git-file-name name version))
1313 (sha256
1314 (base32 "1pwqf7r9bqb2p3xrw9i7y8pgr1401fy3mnnqpb1qkhmdl3gqi9hb"))
1315 (modules '((guix build utils)))
1316 (snippet
1317 ;; Unbundle fonts.
1318 '(begin
1319 (delete-file-recursively "fonts")
1320 #t))))
1321 (build-system gnu-build-system)
1322 (arguments
1323 '(#:make-flags '("CC=gcc")
1324 #:phases (modify-phases %standard-phases
1325 (add-after 'set-paths 'set-sdl-paths
1326 (lambda* (#:key inputs #:allow-other-keys)
1327 (setenv "CPATH"
1328 (string-append (assoc-ref inputs "sdl-union")
1329 "/include/SDL:"
1330 (or (getenv "CPATH") "")))))
1331 (add-after 'patch-source-shebangs 'patch-makefile
1332 (lambda* (#:key outputs #:allow-other-keys)
1333 ;; Replace /usr with package output directory.
1334 (substitute* "Makefile"
1335 (("/usr") (assoc-ref outputs "out")))))
1336 (add-before 'install 'make-install-dirs
1337 (lambda* (#:key outputs #:allow-other-keys)
1338 (let ((prefix (assoc-ref outputs "out")))
1339 ;; Create directories that the makefile assumes exist.
1340 (mkdir-p (string-append prefix "/bin"))
1341 (mkdir-p (string-append prefix "/share/applications"))
1342 (mkdir-p (string-append prefix "/share/pixmaps")))))
1343 ;; No configure script.
1344 (delete 'configure))
1345 #:tests? #f)) ;; No check target.
1346 (native-inputs `(("pkg-config" ,pkg-config)))
1347 (inputs `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer)))))
1348 (home-page "https://github.com/nevat/abbayedesmorts-gpl")
1349 (synopsis "GNU/Linux port of the indie game \"l'Abbaye des Morts\"")
1350 (description "L'Abbaye des Morts is a 2D platform game set in 13th century
1351France. The Cathars, who preach about good Christian beliefs, were being
1352expelled by the Catholic Church out of the Languedoc region in France. One of
1353them, called Jean Raymond, found an old church in which to hide, not knowing
1354that beneath its ruins lay buried an ancient evil.")
1355 (license license:gpl3)))
1356
1357(define-public l-abbaye-des-morts
1358 (deprecated-package "l-abbaye-des-morts" abbaye))
1359
1360(define-public angband
1361 (package
1362 (name "angband")
1363 (version "4.2.0")
1364 (source
1365 (origin
1366 (method url-fetch)
1367 (uri (string-append "http://rephial.org/downloads/"
1368 (version-major+minor version)
1369 "/angband-" version ".tar.gz"))
1370 (sha256
1371 (base32
1372 "0vdm1ymm28wawp94nl1p5q3lhc0k7cnn2kkvvrkfx962gif4kqfk"))
1373 (modules '((guix build utils)))
1374 (snippet
1375 ;; So, some of the sounds/graphics/tilesets are under different
1376 ;; licenses... some of them even nonfree! This is a console-only
1377 ;; version of this package so we just remove them.
1378 ;; In the future, if someone tries to make a graphical variant of
1379 ;; this package, they can deal with that mess themselves. :)
1380 '(begin
1381 (for-each (lambda (subdir)
1382 (let ((lib-subdir (string-append "lib/" subdir)))
1383 (delete-file-recursively lib-subdir)))
1384 '("fonts" "icons" "sounds" "tiles"))
1385 (substitute* "lib/Makefile"
1386 ;; And don't try to invoke makefiles in the directories we removed.
1387 (("gamedata customize help screens fonts tiles sounds icons user")
1388 "gamedata customize help screens user"))
1389 #t))))
1390 (build-system gnu-build-system)
1391 (arguments
1392 `(#:tests? #f ; no check target
1393 #:configure-flags (list (string-append "--bindir=" %output "/bin"))
1394 #:phases
1395 (modify-phases %standard-phases
1396 (replace 'bootstrap
1397 (lambda _
1398 (substitute* "acinclude.m4"
1399 (("ncursesw5-config") "ncursesw6-config"))
1400 (invoke "sh" "autogen.sh"))))))
1401 (native-inputs
1402 `(("autoconf" ,autoconf)
1403 ("automake" ,automake)))
1404 (inputs `(("ncurses" ,ncurses)))
1405 (home-page "http://rephial.org/")
1406 (synopsis "Dungeon exploration roguelike")
1407 (description "Angband is a Classic dungeon exploration roguelike. Explore
1408the depths below Angband, seeking riches, fighting monsters, and preparing to
1409fight Morgoth, the Lord of Darkness.")
1410 (license license:gpl2)))
1411
1412(define-public pingus
1413 (package
1414 (name "pingus")
1415 (version "0.7.6")
1416 (source
1417 (origin
1418 (method git-fetch)
1419 (uri (git-reference
1420 (url "https://gitlab.com/pingus/pingus.git")
1421 (commit (string-append "v" version))))
1422 (file-name (git-file-name name version))
1423 (sha256
1424 (base32
1425 "0wp06kcmknsnxz7bjnsndb8x062z7r23fb3yrnbfnj68qhz18y74"))
1426 (patches (search-patches "pingus-boost-headers.patch"
1427 "pingus-sdl-libs-config.patch"))
1428 (modules '((guix build utils)))
1429 (snippet
1430 '(begin
1431 (substitute* "src/pingus/screens/demo_session.cpp"
1432 (("#include <iostream>")
1433 ;; std::function moved to <functional> with C++ 11.
1434 ;; Remove this for versions newer than 0.7.6.
1435 "#include <iostream>\n#include <functional>"))
1436 #t))))
1437 (build-system gnu-build-system)
1438 (native-inputs `(("pkg-config" ,pkg-config)
1439 ("scons-python2" ,scons-python2)))
1440 (inputs `(("sdl" ,sdl)
1441 ("sdl-image" ,sdl-image)
1442 ("sdl-mixer" ,sdl-mixer)
1443 ("mesa" ,mesa)
1444 ("glu" ,glu)
1445 ("libpng" ,libpng)
1446 ("boost" ,boost)))
1447 (arguments
1448 '(#:make-flags (list (string-append "PREFIX=" %output))
1449 #:tests? #f ; no check target
1450 #:phases
1451 (modify-phases %standard-phases
1452 (delete 'configure)))) ; no configure script
1453 (home-page "https://pingus.seul.org/")
1454 (synopsis "Lemmings clone")
1455 (description
1456 "Pingus is a free Lemmings-like puzzle game in which the player takes
1457command of a bunch of small animals and has to guide them through levels.
1458Since the animals walk on their own, the player can only influence them by
1459giving them commands, like build a bridge, dig a hole, or redirect all animals
1460in the other direction. Multiple such commands are necessary to reach the
1461level's exit. The game is presented in a 2D side view.")
1462 ;; Some source files are under bsd-3 and gpl2+ licenses.
1463 (license license:gpl3+)))
1464
1465(define-public talkfilters
1466 (package
1467 (name "talkfilters")
1468 (version "2.3.8")
1469 (source
1470 (origin
1471 (method url-fetch)
1472 (uri (string-append "http://www.hyperrealm.com/" name "/"
1473 name "-" version ".tar.gz"))
1474 (sha256
1475 (base32 "19nc5vq4bnkjvhk8srqddzhcs93jyvpm9r6lzjzwc1mgf08yg0a6"))))
1476 (build-system gnu-build-system)
1477 (home-page "https://www.gnu.org/software/talkfilters/")
1478 (synopsis "Convert English text to humorous dialects")
1479 (description "The GNU Talk Filters are programs that convert English text
1480into stereotyped or otherwise humorous dialects. The filters are provided as
1481a C library, so they can easily be integrated into other programs.")
1482 (license license:gpl2+)))
1483
1484(define-public cmatrix
1485 (package
1486 (name "cmatrix")
1487 (version "1.2a")
1488 (source
1489 (origin
1490 (method url-fetch)
1491 (uri (string-append "http://www.asty.org/cmatrix/dist/cmatrix-" version
1492 ".tar.gz"))
1493 (sha256
1494 (base32
1495 "0k06fw2n8nzp1pcdynhajp5prba03gfgsbj91bknyjr5xb5fd9hz"))))
1496 (build-system gnu-build-system)
1497 (arguments
1498 '(#:phases
1499 (modify-phases %standard-phases
1500 (replace 'configure
1501 (lambda* (#:key outputs #:allow-other-keys)
1502 ;; This old ‘configure’ script doesn't support
1503 ;; variables passed as arguments.
1504 (let ((out (assoc-ref outputs "out")))
1505 (setenv "CONFIG_SHELL" (which "bash"))
1506 (invoke "./configure"
1507 (string-append "--prefix=" out))))))))
1508 (inputs `(("ncurses" ,ncurses)))
1509 (home-page "http://www.asty.org/cmatrix")
1510 (synopsis "Simulate the display from \"The Matrix\"")
1511 (description "CMatrix simulates the display from \"The Matrix\" and is
1512based on the screensaver from the movie's website. It works with terminal
1513settings up to 132x300 and can scroll lines all at the same rate or
1514asynchronously and at a user-defined speed.")
1515 (license license:gpl2+)))
1516
1517(define-public chess
1518 (package
1519 (name "chess")
1520 (version "6.2.5")
1521 (source
1522 (origin
1523 (method url-fetch)
1524 (uri (string-append "mirror://gnu/chess/gnuchess-" version
1525 ".tar.gz"))
1526 (sha256
1527 (base32
1528 "00j8s0npgfdi41a0mr5w9qbdxagdk2v41lcr42rwl1jp6miyk6cs"))))
1529 (build-system gnu-build-system)
1530 (home-page "https://www.gnu.org/software/chess/")
1531 (synopsis "Full chess implementation")
1532 (description "GNU Chess is a chess engine. It allows you to compete
1533against the computer in a game of chess, either through the default terminal
1534interface or via an external visual interface such as GNU XBoard.")
1535 (license license:gpl3+)))
1536
1537(define freedink-engine
1538 (package
1539 (name "freedink-engine")
1540 (version "109.6")
1541 (source (origin
1542 (method url-fetch)
1543 (uri (string-append "mirror://gnu/freedink/freedink-" version
1544 ".tar.gz"))
1545 (sha256
1546 (base32
1547 "00hhk1bjdrc1np2qz44sa5n1mb62qzwxbvsnws3vpms6iyn3a2sy"))))
1548 (build-system gnu-build-system)
1549 (arguments
1550 `(#:configure-flags '("--disable-embedded-resources")
1551 #:phases
1552 (modify-phases %standard-phases
1553 (add-after 'unpack 'disable-graphical-tests
1554 (lambda _
1555 ;; These tests require a graphical interface.
1556 (substitute* "src/Makefile.am"
1557 (("test_gfx_fonts TestIOGfxDisplay") ""))
1558 #t)))))
1559 (native-inputs `(("autoconf" ,autoconf)
1560 ("automake" ,automake)
1561 ("cxxtest" ,cxxtest)
1562 ("gettext" ,gettext-minimal)
1563 ("help2man" ,help2man)
1564 ("pkg-config" ,pkg-config)))
1565 (inputs `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer
1566 sdl2-ttf sdl2-gfx)))
1567 ("fontconfig" ,fontconfig)
1568 ("glm" ,glm)))
1569 (properties '((ftp-directory . "/freedink")
1570 (upstream-name . "freedink")))
1571 (home-page "https://www.gnu.org/software/freedink/")
1572 (synopsis "Twisted adventures of young pig farmer Dink Smallwood")
1573 (description
1574 "GNU FreeDink is a free and portable re-implementation of the engine
1575for the role-playing game Dink Smallwood. It supports not only the original
1576game data files but it also supports user-produced game mods or \"D-Mods\".
1577To that extent, it also includes a front-end for managing all of your D-Mods.")
1578 (license license:gpl3+)))
1579
1580(define freedink-data
1581 (package
1582 (name "freedink-data")
1583 (version "1.08.20190120")
1584 (source (origin
1585 (method url-fetch)
1586 (uri (string-append "mirror://gnu/freedink/freedink-data-"
1587 version ".tar.gz"))
1588 (sha256
1589 (base32
1590 "17gvryadlxk172mblbsil7hina1z5wahwaxnr6g3mdq57dvl8pvi"))))
1591 (build-system gnu-build-system)
1592 (arguments
1593 `(#:phases
1594 (modify-phases %standard-phases
1595 (delete 'configure) ; no configure script
1596 (delete 'check)) ; no tests
1597 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
1598 (properties '((ftp-directory . "/freedink")))
1599 (home-page "https://www.gnu.org/software/freedink/")
1600 (synopsis "Game data for GNU Freedink")
1601 (description
1602 "This package contains the game data of GNU Freedink.")
1603 (license license:gpl3+)))
1604
1605(define-public freedink-dfarc
1606 (package
1607 (name "freedink-dfarc")
1608 (version "3.14")
1609 (source (origin
1610 (method url-fetch)
1611 (uri (string-append "mirror://gnu/freedink/dfarc-"
1612 version ".tar.gz"))
1613 (sha256
1614 (base32
1615 "1yp8n3w426xnlp10xk06vfi2y3k9xrcfyck7s7qs1v0ys7n284d5"))))
1616 (build-system gnu-build-system)
1617 (native-inputs
1618 `(("intltool" ,intltool)))
1619 (inputs
1620 `(("bzip2" ,bzip2)
1621 ("wxwidgets" ,wxwidgets)))
1622 (properties '((ftp-directory . "/freedink")
1623 (upstream-name . "dfarc")))
1624 (home-page "https://www.gnu.org/software/freedink/")
1625 (synopsis "Front-end for managing and playing Dink Modules")
1626 (description "DFArc makes it easy to play and manage the GNU FreeDink game
1627and its numerous D-Mods.")
1628 (license license:gpl3+)))
1629
1630(define-public freedink
1631 ;; This is a wrapper that tells the engine where to find the data.
1632 (package (inherit freedink-engine)
1633 (name "freedink")
1634 (build-system trivial-build-system)
1635 (arguments
1636 '(#:builder (begin
1637 (use-modules (guix build utils))
1638
1639 (let* ((output (assoc-ref %outputs "out"))
1640 (bin (string-append output "/bin"))
1641 (executable (string-append bin "/freedink")))
1642 (mkdir-p bin)
1643 (call-with-output-file executable
1644 (lambda (port)
1645 (format port "#!~a/bin/sh
1646exec ~a/bin/freedink -refdir ~a/share/dink\n"
1647 (assoc-ref %build-inputs "bash")
1648 (assoc-ref %build-inputs "engine")
1649 (assoc-ref %build-inputs "data"))
1650 (chmod port #o777)))
1651 #t))
1652 #:modules ((guix build utils))))
1653 (inputs `(("engine" ,freedink-engine)
1654 ("data" ,freedink-data)
1655 ("bash" ,bash)))
1656 (native-inputs '())))
1657
1658(define-public xboard
1659 (package
1660 (name "xboard")
1661 (version "4.9.1")
1662 (source
1663 (origin
1664 (method url-fetch)
1665 (uri (string-append "mirror://gnu/xboard/xboard-" version
1666 ".tar.gz"))
1667 (sha256
1668 (base32
1669 "1mkh36xnnacnz9r00b5f9ld9309k32jv6mcavklbdnca8bl56bib"))))
1670 (build-system gnu-build-system)
1671 (inputs
1672 `(("gtk+" ,gtk+-2)
1673 ("librsvg" ,librsvg)))
1674 (native-inputs
1675 `(("texinfo" ,texinfo)
1676 ("pkg-config" ,pkg-config)))
1677 (home-page "https://www.gnu.org/software/xboard/")
1678 (synopsis "Graphical user interface for chess programs")
1679 (description "GNU XBoard is a graphical board for all varieties of chess,
1680including international chess, xiangqi (Chinese chess), shogi (Japanese chess)
1681and Makruk. Several lesser-known variants are also supported. It presents a
1682fully interactive graphical interface and it can load and save games in the
1683Portable Game Notation.")
1684 (license license:gpl3+)))
1685
1686(define-public gtypist
1687 (package
1688 (name "gtypist")
1689 (version "2.9.5")
1690 (source (origin
1691 (method url-fetch)
1692 (uri (string-append "mirror://gnu/gtypist/gtypist-"
1693 version ".tar.xz"))
1694 (sha256
1695 (base32
1696 "0xzrkkmj0b1dw3yr0m9hml2y634cc4h61im6zwcq57s7285z8fn1"))
1697 (modules '((guix build utils)))
1698 (snippet
1699 ;; We do not provide `ncurses.h' within an `ncursesw'
1700 ;; sub-directory, so patch the source accordingly. See
1701 ;; <http://bugs.gnu.org/19018>.
1702 '(begin
1703 (for-each (lambda (file)
1704 (substitute* file
1705 (("ncursesw/ncurses.h")
1706 "ncurses.h")))
1707 (find-files "." "configure$|\\.c$"))
1708 #t))))
1709 (build-system gnu-build-system)
1710 (inputs `(("ncurses" ,ncurses)
1711 ("perl" ,perl)))
1712 (home-page "https://www.gnu.org/software/gtypist/")
1713 (synopsis "Typing tutor")
1714 (description
1715 "GNU Typist is a universal typing tutor. It can be used to learn and
1716practice touch-typing. Several tutorials are included; in addition to
1717tutorials for the standard QWERTY layout, there are also tutorials for the
1718alternative layouts Dvorak and Colemak, as well as for the numpad. Tutorials
1719are primarily in English, however some in other languages are provided.")
1720 (license license:gpl3+)))
1721
1722(define-public irrlicht
1723 (package
1724 (name "irrlicht")
1725 (version "1.8.4")
1726 (source (origin
1727 (method url-fetch)
1728 (uri (string-append
1729 "mirror://sourceforge/irrlicht/Irrlicht%20SDK/"
1730 (version-major+minor version)
1731 "/" version "/irrlicht-" version ".zip"))
1732 (sha256
1733 (base32
1734 "0cz4z4dwrv5ypl19ll67wl6jjpy5k6ly4vr042w4br88qq5jhazl"))
1735 (patches (search-patches "irrlicht-use-system-libs.patch"))
1736 (modules '((guix build utils)))
1737 (snippet
1738 '(begin
1739 (for-each delete-file-recursively
1740 '("bin" ; bundled compiled Windows binaries"
1741 "source/Irrlicht/MacOSX"
1742 "source/Irrlicht/bzip2"
1743 "source/Irrlicht/jpeglib"
1744 "source/Irrlicht/libpng"
1745 "source/Irrlicht/lzma"
1746 "source/Irrlicht/zlib"))
1747 (delete-file "source/Irrlicht/glext.h")
1748 (delete-file "source/Irrlicht/glxext.h")
1749 (delete-file "source/Irrlicht/wglext.h")
1750 #t))))
1751 (build-system gnu-build-system)
1752 (arguments
1753 `(#:phases
1754 (modify-phases %standard-phases
1755 (add-after 'unpack 'chdir-to-source
1756 (lambda _
1757 ;; The actual source is buried a few directories deep.
1758 (chdir "source/Irrlicht/")
1759 #t))
1760 (add-after 'chdir-to-source 'fix-build-env
1761 (lambda* (#:key outputs #:allow-other-keys)
1762 (let ((out (assoc-ref outputs "out")))
1763 (substitute* "Makefile"
1764 (("INSTALL_DIR = /usr/local/lib")
1765 (string-append "INSTALL_DIR = " out "/lib"))
1766 ;; Add '-fpermissive' to the CXXFLAGS
1767 (("-Wall") "-Wall -fpermissive")) ; CImageLoaderJPG.cpp
1768 ;; The Makefile assumes these directories exist.
1769 (mkdir-p (string-append out "/lib"))
1770 (mkdir-p (string-append out "/include")))))
1771 (delete 'configure)) ; no configure script
1772 #:tests? #f ; no check target
1773 #:make-flags '("CC=gcc" "sharedlib")))
1774 (inputs
1775 `(("bzip2" ,bzip2)
1776 ("libjpeg" ,libjpeg)
1777 ("libpng" ,libpng)
1778 ("libx11" ,libx11)
1779 ("libxxf86vm" ,libxxf86vm)
1780 ("mesa" ,mesa)))
1781 (synopsis "3D game engine written in C++")
1782 (description
1783 "The Irrlicht Engine is a high performance realtime 3D engine written in
1784C++. Features include an OpenGL renderer, extensible materials, scene graph
1785management, character animation, particle and other special effects, support
1786for common mesh file formats, and collision detection.")
1787 (home-page "http://irrlicht.sourceforge.net/")
1788 (license license:zlib)))
1789
1790(define-public mars
1791 ;; The latest release on SourceForge relies on an unreleased version of SFML
1792 ;; with a different API, so we take the latest version from the official
1793 ;; repository on Github.
1794 (let ((commit "c855d044094a1d92317e38935d81ba938946132e")
1795 (revision "1"))
1796 (package
1797 (name "mars")
1798 (version (string-append "0.7.5." revision "." (string-take commit 7) ))
1799 (source (origin
1800 (method git-fetch)
1801 (uri (git-reference
1802 (url "https://github.com/thelaui/M.A.R.S..git")
1803 (commit commit)))
1804 (file-name (git-file-name name version))
1805 (sha256
1806 (base32
1807 "1r4c5gap1z2zsv4yjd34qriqkxaq4lb4rykapyzkkdf4g36lc3nh"))
1808 (patches (search-patches "mars-sfml-2.3.patch"
1809 "mars-install.patch"))))
1810 (build-system cmake-build-system)
1811 (arguments
1812 `(#:tests? #f ; There are no tests
1813 #:phases
1814 (modify-phases %standard-phases
1815 (add-after 'unpack 'fix-install-path
1816 (lambda _
1817 (substitute* "src/CMakeLists.txt"
1818 (("\\$\\{CMAKE_INSTALL_PREFIX\\}/games")
1819 "${CMAKE_INSTALL_PREFIX}/bin"))
1820 #t))
1821 (add-after 'unpack 'fix-data-path
1822 (lambda* (#:key outputs #:allow-other-keys)
1823 (substitute* "src/System/settings.cpp"
1824 (("C_dataPath = \"./data/\";")
1825 (string-append "C_dataPath = \""
1826 (assoc-ref outputs "out")
1827 "/share/games/marsshooter/\";")))
1828 #t)))))
1829 (inputs
1830 `(("mesa" ,mesa)
1831 ("fribidi" ,fribidi)
1832 ("taglib" ,taglib)
1833 ("sfml" ,sfml)))
1834 (home-page "http://marsshooter.org")
1835 (synopsis "2D space shooter")
1836 (description
1837 "M.A.R.S. is a 2D space shooter with pretty visual effects and
1838attractive physics. Players can battle each other or computer controlled
1839enemies in different game modes such as space ball, death match, team death
1840match, cannon keep, and grave-itation pit.")
1841 (license license:gpl3+))))
1842
1843(define minetest-data
1844 (package
1845 (name "minetest-data")
1846 (version "5.1.0")
1847 (source (origin
1848 (method git-fetch)
1849 (uri (git-reference
1850 (url "https://github.com/minetest/minetest_game")
1851 (commit version)))
1852 (file-name (git-file-name name version))
1853 (sha256
1854 (base32
1855 "1r9fxz2j24q74a9injvbxbf2xk67fzabv616i676zw2cvgv9hn39"))))
1856 (build-system trivial-build-system)
1857 (native-inputs
1858 `(("source" ,source)))
1859 (arguments
1860 `(#:modules ((guix build utils))
1861 #:builder (begin
1862 (use-modules (guix build utils))
1863 (let ((install-dir (string-append
1864 %output
1865 "/share/minetest/games/minetest_game")))
1866 (mkdir-p install-dir)
1867 (copy-recursively
1868 (assoc-ref %build-inputs "source")
1869 install-dir)
1870 #t))))
1871 (synopsis "Main game data for the Minetest game engine")
1872 (description
1873 "Game data for the Minetest infinite-world block sandbox game.")
1874 (home-page "http://minetest.net")
1875 (license license:lgpl2.1+)))
1876
1877(define-public minetest
1878 (package
1879 (name "minetest")
1880 (version "5.1.0")
1881 (source (origin
1882 (method git-fetch)
1883 (uri (git-reference
1884 (url "https://github.com/minetest/minetest")
1885 (commit version)))
1886 (file-name (git-file-name name version))
1887 (sha256
1888 (base32
1889 "184n9gxfa7yr0j85z2x736maaymsnppd5jzm326wlqri3c0qqy3z"))
1890 (modules '((guix build utils)))
1891 (snippet
1892 '(begin
1893 ;; Mimic upstream commit 706b6aad06, for compatibility with
1894 ;; newer jsoncpp. Remove this for > 5.1.0.
1895 (substitute* "cmake/Modules/FindJson.cmake"
1896 (("features\\.h")
1897 "allocator.h"))
1898
1899 ;; Delete bundled libraries.
1900 (delete-file-recursively "lib")
1901 #t))))
1902 (build-system cmake-build-system)
1903 (arguments
1904 '(#:configure-flags
1905 (list "-DRUN_IN_PLACE=0"
1906 "-DENABLE_FREETYPE=1"
1907 "-DENABLE_GETTEXT=1"
1908 "-DENABLE_SYSTEM_JSONCPP=TRUE"
1909 (string-append "-DIRRLICHT_INCLUDE_DIR="
1910 (assoc-ref %build-inputs "irrlicht")
1911 "/include/irrlicht")
1912 (string-append "-DCURL_INCLUDE_DIR="
1913 (assoc-ref %build-inputs "curl")
1914 "/include/curl"))
1915 #:tests? #f)) ;no check target
1916 (native-search-paths
1917 (list (search-path-specification
1918 (variable "MINETEST_SUBGAME_PATH")
1919 (files '("share/minetest/games")))))
1920 (native-inputs
1921 `(("pkg-config" ,pkg-config)))
1922 (inputs
1923 `(("curl" ,curl)
1924 ("freetype" ,freetype)
1925 ("gettext" ,gettext-minimal)
1926 ("gmp" ,gmp)
1927 ("irrlicht" ,irrlicht)
1928 ("jsoncpp" ,jsoncpp)
1929 ("libjpeg" ,libjpeg)
1930 ("libpng" ,libpng)
1931 ("libogg" ,libogg)
1932 ("libvorbis" ,libvorbis)
1933 ("libxxf86vm" ,libxxf86vm)
1934 ("luajit" ,luajit)
1935 ("mesa" ,mesa)
1936 ("ncurses" ,ncurses)
1937 ("openal" ,openal)
1938 ("sqlite" ,sqlite)))
1939 (propagated-inputs
1940 `(("minetest-data" ,minetest-data)))
1941 (synopsis "Infinite-world block sandbox game")
1942 (description
1943 "Minetest is a sandbox construction game. Players can create and destroy
1944various types of blocks in a three-dimensional open world. This allows
1945forming structures in every possible creation, on multiplayer servers or as a
1946single player. Mods and texture packs allow players to personalize the game
1947in different ways.")
1948 (home-page "http://minetest.net")
1949 (license license:lgpl2.1+)))
1950
1951(define glkterm
1952 (package
1953 (name "glkterm")
1954 (version "1.0.4")
1955 (source
1956 (origin
1957 (method url-fetch)
1958 (uri (string-append "http://www.ifarchive.org/if-archive/programming/"
1959 "glk/implementations/glkterm-104.tar.gz"))
1960 (sha256
1961 (base32
1962 "0zlj9nlnkdlvgbiliczinirqygiq8ikg5hzh5vgcmnpg9pvnwga7"))))
1963 (build-system gnu-build-system)
1964 (propagated-inputs `(("ncurses" ,ncurses))) ; required by Make.glkterm
1965 (arguments
1966 '(#:tests? #f ; no check target
1967 #:phases
1968 (modify-phases %standard-phases
1969 (replace 'install
1970 (lambda* (#:key outputs #:allow-other-keys)
1971 (let* ((out (assoc-ref outputs "out"))
1972 (inc (string-append out "/include"))
1973 (lib (string-append out "/lib")))
1974 (for-each
1975 (lambda (file)
1976 (install-file file inc))
1977 '("glk.h" "glkstart.h" "gi_blorb.h" "gi_dispa.h" "Make.glkterm"))
1978 (install-file "libglkterm.a" lib))
1979 #t))
1980 (delete 'configure)))) ; no configure script
1981 (home-page "http://www.eblong.com/zarf/glk/")
1982 (synopsis "Curses Implementation of the Glk API")
1983 (description
1984 "Glk defines a portable API for applications with text UIs. It was
1985primarily designed for interactive fiction, but it should be suitable for many
1986interactive text utilities, particularly those based on a command line.
1987This is an implementation of the Glk library which runs in a terminal window,
1988using the @code{curses.h} library for screen control.")
1989 (license (license:fsf-free "file://README"))))
1990
1991(define-public glulxe
1992 (package
1993 (name "glulxe")
1994 (version "0.5.4")
1995 (source
1996 (origin
1997 (method url-fetch)
1998 (uri (string-append "http://www.ifarchive.org/if-archive/programming/"
1999 "glulx/interpreters/glulxe/glulxe-054.tar.gz"))
2000 (sha256
2001 (base32
2002 "0vipydg6ra90yf9b3ipgppwxyb2xdhcxwvirgjy0v20wlf56zhhz"))))
2003 (build-system gnu-build-system)
2004 (inputs `(("glk" ,glkterm)))
2005 (arguments
2006 '(#:tests? #f ; no check target
2007 #:make-flags
2008 (let* ((glk (assoc-ref %build-inputs "glk")))
2009 (list (string-append "GLKINCLUDEDIR=" glk "/include")
2010 (string-append "GLKLIBDIR=" glk "/lib")
2011 (string-append "GLKMAKEFILE=" "Make.glkterm")))
2012 #:phases
2013 (modify-phases %standard-phases
2014 (replace 'install
2015 (lambda* (#:key outputs #:allow-other-keys)
2016 (let* ((out (assoc-ref outputs "out"))
2017 (bin (string-append out "/bin")))
2018 (install-file "glulxe" bin))
2019 #t))
2020 (delete 'configure)))) ; no configure script
2021 (home-page "http://www.eblong.com/zarf/glulx/")
2022 (synopsis "Interpreter for Glulx VM")
2023 (description
2024 "Glulx is a 32-bit portable virtual machine intended for writing and
2025playing interactive fiction. It was designed by Andrew Plotkin to relieve
2026some of the restrictions in the venerable Z-machine format. This is the
2027reference interpreter, using the Glk API.")
2028 (license license:expat)))
2029
2030(define-public fifechan
2031 (package
2032 (name "fifechan")
2033 (version "0.1.5")
2034 (source (origin
2035 (method url-fetch)
2036 (uri (string-append "https://codeload.github.com/fifengine/"
2037 "fifechan/tar.gz/" version))
2038 (file-name (string-append name "-" version ".tar.gz"))
2039 (sha256
2040 (base32
2041 "0wxs9vz5x9y8chghd8vp7vfk089lfb0qnzggi17zrqkrngs5zgi9"))))
2042 (build-system cmake-build-system)
2043 (inputs
2044 `(("sdl2" ,sdl2)
2045 ("sdl2-image" ,sdl2-image)
2046 ("mesa" ,mesa)))
2047 (arguments
2048 '(#:tests? #f)) ; No included tests
2049 (home-page "https://fifengine.github.io/fifechan/")
2050 (synopsis "Cross platform GUI library specifically for games")
2051 (description
2052 "Fifechan is a lightweight cross platform GUI library written in C++
2053specifically designed for games. It has a built in set of extendable GUI
2054Widgets, and allows users to create more.")
2055 (license license:lgpl2.1+)))
2056
2057(define-public fifengine
2058 (package
2059 (name "fifengine")
2060 (version "0.4.2")
2061 (source (origin
2062 (method url-fetch)
2063 (uri (string-append "https://codeload.github.com/fifengine/"
2064 "fifengine/tar.gz/" version))
2065 (file-name (string-append name "-" version ".tar.gz"))
2066 (sha256
2067 (base32
2068 "1y4grw25cq5iqlg05rnbyxw1njl11ypidnlsm3qy4sm3xxdvb0p8"))))
2069 (build-system cmake-build-system)
2070 (arguments
2071 `(#:tests? #f ; TODO The test running fails to run some tests.
2072 #:modules ((srfi srfi-1)
2073 (guix build cmake-build-system)
2074 (guix build utils))
2075 #:configure-flags
2076 (list
2077 (string-append "-DOPENALSOFT_INCLUDE_DIR="
2078 (assoc-ref %build-inputs "openal")
2079 "/include/AL")
2080 (string-append "-DPYTHON_SITE_PACKAGES="
2081 (assoc-ref %outputs "out")
2082 "/lib/python3.7/site-packages"))
2083 #:phases
2084 (modify-phases %standard-phases
2085 (add-after 'unpack 'patch-run_tests.py
2086 (lambda _
2087 ;; Patch the test runner to exit with a status of 1 if any test
2088 ;; fails, to allow detecting failures.
2089 (substitute* "run_tests.py"
2090 (("ERROR\\. One or more tests failed!'\\)")
2091 "ERROR. One or more tests failed!')
2092\t\texit(1)"))
2093 #t))
2094 ;; Run tests after installation so that we can make use of the built
2095 ;; python modules.
2096 (delete 'check)
2097 (add-after 'install 'check
2098 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
2099 (define python-version
2100 (let* ((version (last (string-split
2101 (assoc-ref inputs "python")
2102 #\-)))
2103 (components (string-split version #\.))
2104 (major+minor (take components 2)))
2105 (string-join major+minor ".")))
2106
2107 (when tests?
2108 ;; Set PYTHONPATH so that python finds the installed modules.
2109 (setenv "PYTHONPATH"
2110 (string-append (getenv "PYTHONPATH") ":"
2111 (assoc-ref outputs "out")
2112 "/lib/python"
2113 python-version
2114 "/site-packages"))
2115 ;; The tests require an X server.
2116 (system "Xvfb :1 &")
2117 (setenv "DISPLAY" ":1")
2118 (setenv "XDG_RUNTIME_DIR" "/tmp")
2119 ;; Run tests
2120 (chdir ,(string-append "../" name "-" version))
2121 (invoke "python3" "run_tests.py" "-a"))
2122 #t)))))
2123 (inputs
2124 `(("sdl2" ,sdl2)
2125 ("sdl2-image" ,sdl2-image)
2126 ("sdl2-ttf" ,sdl2-ttf)
2127 ("tinyxml" ,tinyxml)
2128 ("openal" ,openal)
2129 ("libogg" ,libogg)
2130 ("glew" ,glew)
2131 ("libvorbis" ,libvorbis)
2132 ("boost" ,boost)
2133 ("fifechan" ,fifechan)
2134 ("swig" ,swig)
2135 ("python" ,python)))
2136 (native-inputs
2137 `(("python" ,python)
2138 ("swig" ,swig)
2139 ("xvfb" ,xorg-server)))
2140 (propagated-inputs
2141 `(("python-future" ,python-future)))
2142 (home-page "https://www.fifengine.net/")
2143 (synopsis "FIFE is a multi-platform isometric game engine written in C++")
2144 (description
2145 "@acronym{FIFE, Flexible Isometric Free Engine} is a multi-platform
2146isometric game engine. Python bindings are included allowing users to create
2147games using Python as well as C++.")
2148 (license license:lgpl2.1+)))
2149
2150(define-public fizmo
2151 (package
2152 (name "fizmo")
2153 (version "0.8.5")
2154 (source (origin
2155 (method url-fetch)
2156 (uri (string-append "https://fizmo.spellbreaker.org/source/"
2157 "fizmo-" version ".tar.gz"))
2158 (sha256
2159 (base32
2160 "1amyc4n41jf08kxmdgkk30bzzx54miaxa97w28f417qwn8lrl98w"))))
2161 (build-system gnu-build-system)
2162 (arguments
2163 '(#:configure-flags
2164 (let ((libjpeg (assoc-ref %build-inputs "libjpeg"))
2165 (ncurses (assoc-ref %build-inputs "ncurses")))
2166 (list (string-append "--with-jpeg-includedir=" libjpeg "/include")))))
2167 (native-inputs
2168 `(("pkg-config" ,pkg-config)))
2169 (inputs
2170 `(("freetype" ,freetype)
2171 ("libjpeg" ,libjpeg)
2172 ("libpng" ,libpng)
2173 ("libsndfile" ,libsndfile)
2174 ("libxml2" ,libxml2)
2175 ("ncurses" ,ncurses)
2176 ("sdl2" ,sdl2)))
2177 (home-page "https://fizmo.spellbreaker.org/")
2178 (synopsis "Z-machine interpreter")
2179 (description
2180 "Fizmo is a console-based Z-machine interpreter. It is used to play
2181interactive fiction, also known as text adventures, which were implemented
2182either by Infocom or created using the Inform compiler.")
2183 (license license:bsd-3)))
2184
2185(define-public gnugo
2186 (package
2187 (name "gnugo")
2188 (version "3.8")
2189 (source (origin
2190 (method url-fetch)
2191 (uri (string-append "mirror://gnu/gnugo/gnugo-" version
2192 ".tar.gz"))
2193 (sha256
2194 (base32
2195 "0wkahvqpzq6lzl5r49a4sd4p52frdmphnqsfdv7gdp24bykdfs6s"))))
2196 (build-system gnu-build-system)
2197 (inputs `(("readline" ,readline)))
2198 (synopsis "Play the game of Go")
2199 (description
2200 "GNU Go is a program that plays the game of Go, in which players
2201place stones on a grid to form territory or capture other stones. While
2202it can be played directly from the terminal, rendered in ASCII characters,
2203it is also possible to play GNU Go with 3rd party graphical interfaces or
2204even in Emacs. It supports the standard game storage format (SGF, Smart
2205Game Format) and inter-process communication format (GMP, Go Modem
2206Protocol).")
2207 (home-page "https://www.gnu.org/software/gnugo/")
2208 (license license:gpl3+)))
2209
2210(define-public extremetuxracer
2211 (package
2212 (name "extremetuxracer")
2213 (version "0.7.5")
2214 (source (origin
2215 (method url-fetch)
2216 (uri (string-append
2217 "mirror://sourceforge/extremetuxracer/releases/"
2218 version "/etr-" version ".tar.xz"))
2219 (sha256
2220 (base32
2221 "1ly63316c07i0gyqqmyzsyvygsvygn0fpk3bnbg25fi6li99rlsg"))))
2222 (build-system gnu-build-system)
2223 (native-inputs
2224 `(("pkg-config" ,pkg-config)))
2225 (inputs
2226 `(("glu" ,glu)
2227 ("sfml" ,sfml)))
2228 (synopsis "High-speed arctic racing game based on Tux Racer")
2229 ;; Snarfed straight from Debian.
2230 (description "Extreme Tux Racer, or etracer as it is called for short, is
2231a simple OpenGL racing game featuring Tux, the Linux mascot. The goal of the
2232game is to slide down a snow- and ice-covered mountain as quickly as possible,
2233avoiding the trees and rocks that will slow you down.
2234
2235Collect herrings and other goodies while sliding down the hill, but avoid fish
2236bones.
2237
2238This game is based on the GPL version of the famous game TuxRacer.")
2239 (home-page "https://sourceforge.net/projects/extremetuxracer/")
2240 (license license:gpl2+)))
2241
2242(define-public supertuxkart
2243 (package
2244 (name "supertuxkart")
2245 (version "1.0")
2246 (source
2247 (origin
2248 (method url-fetch)
2249 (uri (string-append "mirror://sourceforge/supertuxkart/SuperTuxKart/"
2250 version "/supertuxkart-" version "-src.tar.xz"))
2251 (sha256
2252 (base32
2253 "106rlp99hq18b4q1kdri3pl06cc4v7iqfp1hp9k2f8751lzz923d"))
2254 (modules '((guix build utils)))
2255 (snippet
2256 ;; Delete bundled library sources
2257 '(begin
2258 ;; Supertuxkart uses modified versions of the Irrlicht engine
2259 ;; and the bullet library. The developers gave an explanation
2260 ;; here: http://forum.freegamedev.net/viewtopic.php?f=17&t=3906
2261 ;; FIXME: try to unbundle angelscript
2262 (for-each delete-file-recursively
2263 '("lib/zlib"
2264 "lib/libpng"
2265 "lib/jpeglib"
2266 "lib/glew"
2267 "lib/wiiuse"
2268 "lib/enet"))
2269 #t))))
2270 (build-system cmake-build-system)
2271 (arguments
2272 `(#:tests? #f ; no check target
2273 #:configure-flags
2274 (list "-DUSE_WIIUSE=0"
2275 ;; Do not use the bundled zlib, glew and enet.
2276 "-DNO_IRR_COMPILE_WITH_ZLIB_=TRUE"
2277 "-DUSE_SYSTEM_GLEW=TRUE"
2278 "-DUSE_SYSTEM_ENET=TRUE"
2279 ;; FIXME: needs libopenglrecorder
2280 "-DBUILD_RECORDER=0"
2281 ;; Irrlicht returns an integer instead of a boolean
2282 "-DCMAKE_C_FLAGS=-fpermissive")))
2283 (inputs
2284 `(("glew" ,glew)
2285 ("zlib" ,zlib)
2286 ("openal" ,openal)
2287 ("libvorbis" ,libvorbis)
2288 ("freetype" ,freetype)
2289 ("fribidi" ,fribidi)
2290 ("mesa" ,mesa)
2291 ("libx11" ,libx11)
2292 ("libxrandr" ,libxrandr)
2293 ("curl" ,curl)
2294 ;; The following input is needed to build the bundled and modified
2295 ;; version of irrlicht.
2296 ("libjpeg" ,libjpeg)
2297 ("openssl" ,openssl)
2298 ("enet" ,enet)))
2299 (native-inputs
2300 `(("pkg-config" ,pkg-config)))
2301 (home-page "https://supertuxkart.net/")
2302 (synopsis "3D kart racing game")
2303 (description "SuperTuxKart is a 3D kart racing game, with a focus on
2304having fun over realism. You can play with up to 4 friends on one PC, racing
2305against each other or just trying to beat the computer; single-player mode is
2306also available.")
2307 (license license:gpl3+)))
2308
2309(define-public unknown-horizons
2310 (package
2311 (name "unknown-horizons")
2312 (version "2019.1")
2313 (source (origin
2314 (method url-fetch)
2315 (uri (string-append "https://codeload.github.com/unknown-horizons/"
2316 "unknown-horizons/tar.gz/" version))
2317 (file-name (string-append name "-" version ".tar.gz"))
2318 (sha256
2319 (base32
2320 "1n747p7h0qp48szgp262swg0xh8kxy1bw8ag1qczs4i26hyzs5x4"))))
2321 (build-system python-build-system)
2322 (arguments
2323 '(#:phases
2324 (modify-phases %standard-phases
2325 (add-before 'build 'set-HOME
2326 (lambda _
2327 (setenv "HOME" "/tmp")))
2328 (add-after 'build 'build-extra
2329 (lambda _
2330 (invoke "python3" "./setup.py" "build_i18n")
2331 (invoke "python3" "horizons/engine/generate_atlases.py" "2048")
2332 #t))
2333 (add-after 'install 'patch
2334 (lambda* (#:key outputs #:allow-other-keys)
2335 (let ((out (assoc-ref outputs "out")))
2336 (substitute* (string-append out "/bin/unknown-horizons")
2337 (("os\\.chdir\\(get\\_content\\_dir\\_parent_path\\(\\)\\)")
2338 (string-append "os.chdir(\""
2339 (assoc-ref outputs "out")
2340 "/share/unknown-horizons\")"))))
2341 #t))
2342 ;; TODO: Run GUI tests as well
2343 (replace 'check
2344 (lambda _
2345 (substitute* "horizons/constants.py"
2346 (("IS_DEV_VERSION = False")
2347 "IS_DEV_VERSION = True"))
2348 (invoke "pytest" "tests")
2349 (substitute* "horizons/constants.py"
2350 (("IS_DEV_VERSION = True")
2351 "IS_DEV_VERSION = False"))
2352 #t)))))
2353 (inputs
2354 `(("fifengine" ,fifengine)
2355 ("python:tk" ,python "tk")
2356 ("python-pillow" ,python-pillow)
2357 ("python-pyyaml" ,python-pyyaml)))
2358 (native-inputs
2359 `(("intltool" ,intltool)
2360
2361 ;; Required for tests
2362 ("python-greenlet" ,python-greenlet)
2363 ("python-polib" ,python-polib)
2364 ("python-pytest" ,python-pytest)
2365 ("python-pytest-mock" ,python-pytest-mock)))
2366 (home-page "http://unknown-horizons.org/")
2367 (synopsis "Isometric realtime strategy, economy and city building simulation")
2368 (description
2369 "Unknown Horizons is a 2D realtime strategy simulation with an emphasis
2370on economy and city building. Expand your small settlement to a strong and
2371wealthy colony, collect taxes and supply your inhabitants with valuable
2372goods. Increase your power with a well balanced economy and with strategic
2373trade and diplomacy.")
2374 (license (list
2375 license:gpl2+ ; Covers code
2376 license:expat ; tests/dummy.py, ext/polib.py
2377 license:cc-by-sa3.0 ; Covers some media content
2378 license:cc-by3.0 ; Covers some media content
2379 license:bsd-3)))) ; horizons/ext/speaklater.py
2380
2381(define-public gnujump
2382 (package
2383 (name "gnujump")
2384 (version "1.0.8")
2385 (source (origin
2386 (method url-fetch)
2387 (uri (string-append "mirror://gnu/gnujump/gnujump-"
2388 version ".tar.gz"))
2389 (sha256
2390 (base32
2391 "05syy9mzbyqcfnm0hrswlmhwlwx54f0l6zhcaq8c1c0f8dgzxhqk"))))
2392 (build-system gnu-build-system)
2393 (arguments
2394 '(#:phases
2395 (modify-phases %standard-phases
2396 (add-before
2397 'configure 'link-libm
2398 (lambda _ (setenv "LIBS" "-lm")))
2399 (add-after 'install 'create-desktop-entry
2400 (lambda* (#:key outputs #:allow-other-keys)
2401 (let* ((out (assoc-ref outputs "out"))
2402 (apps (string-append out "/share/applications")))
2403 (mkdir-p apps)
2404 (with-output-to-file
2405 (string-append apps "/gnujump.desktop")
2406 (lambda _
2407 (format #t
2408 "[Desktop Entry]~@
2409 Name=GNUjump~@
2410 Comment=Jump up the tower to survive~@
2411 Exec=~a/bin/gnujump~@
2412 Terminal=false~@
2413 Type=Application~@
2414 Categories=Game;ArcadeGame~%"
2415 out)))))))))
2416 (inputs
2417 `(("glu" ,glu)
2418 ("mesa" ,mesa)
2419 ("sdl" ,sdl)
2420 ("sdl-image" ,sdl-image)
2421 ("sdl-mixer" ,sdl-mixer)))
2422 (home-page "http://gnujump.es.gnu.org/")
2423 (synopsis
2424 "Game of jumping to the next floor, trying not to fall")
2425 (description
2426 "GNUjump is a simple, yet addictive game in which you must jump from
2427platform to platform to avoid falling, while the platforms drop at faster rates
2428the higher you go. The game features multiplayer, unlimited FPS, smooth floor
2429falling, themeable graphics and sounds, and replays.")
2430 (license license:gpl3+)))
2431
2432(define-public wesnoth
2433 (package
2434 (name "wesnoth")
2435 (version "1.14.9")
2436 (source (origin
2437 (method url-fetch)
2438 (uri (string-append "mirror://sourceforge/wesnoth/wesnoth-"
2439 (version-major+minor version)
2440 "/wesnoth-" version "/"
2441 "wesnoth-" version ".tar.bz2"))
2442 (sha256
2443 (base32
2444 "1mhdrlflxxyknf54lwdbvs7fazlc1scf7z6vxxa3j746fks533ga"))))
2445 (build-system cmake-build-system)
2446 (arguments
2447 `(#:tests? #f ;no check target
2448 #:phases (modify-phases %standard-phases
2449 (add-before 'configure 'treat-boost-as-system-header
2450 (lambda* (#:key inputs #:allow-other-keys)
2451 (let ((boost (assoc-ref inputs "boost")))
2452 ;; Ensure Boost is treated as "system headers" to
2453 ;; pacify compiler warnings induced by Boost headers.
2454 (for-each (lambda (variable)
2455 (setenv variable
2456 (string-append boost "/include:"
2457 (or (getenv variable)
2458 ""))))
2459 '("C_INCLUDE_PATH" "CPLUS_INCLUDE_PATH"))
2460 #t))))))
2461 (native-inputs
2462 `(("gettext" ,gettext-minimal)
2463 ("pkg-config" ,pkg-config)))
2464 (inputs
2465 `(("boost" ,boost)
2466 ("dbus" ,dbus)
2467 ("fribidi" ,fribidi)
2468 ("libvorbis" ,libvorbis)
2469 ("openssl" ,openssl)
2470 ("pango" ,pango)
2471 ("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
2472 (home-page "https://www.wesnoth.org/")
2473 (synopsis "Turn-based strategy game")
2474 (description
2475 "The Battle for Wesnoth is a fantasy, turn based tactical strategy game,
2476with several single player campaigns, and multiplayer games (both networked and
2477local).
2478
2479Battle for control on a range of maps, using variety of units which have
2480advantages and disadvantages against different types of attacks. Units gain
2481experience and advance levels, and are carried over from one scenario to the
2482next campaign.")
2483 (license license:gpl2+)))
2484
2485(define-public the-battle-for-wesnoth
2486 (deprecated-package "the-battle-for-wesnoth" wesnoth))
2487
2488(define-public wesnoth-server
2489 (package
2490 (inherit wesnoth)
2491 (name "wesnoth-server")
2492 (inputs
2493 `(("boost" ,boost)
2494 ("icu4c" ,icu4c)
2495 ("openssl" ,openssl)
2496 ("sdl2" ,sdl2)))
2497 (arguments
2498 `(#:configure-flags '("-DENABLE_GAME=OFF")
2499 ,@(package-arguments wesnoth)))
2500 (synopsis "Dedicated @emph{Battle for Wesnoth} server")
2501 (description "This package contains a dedicated server for @emph{The
2502Battle for Wesnoth}.")))
2503
2504(define-public the-battle-for-wesnoth-server
2505 (deprecated-package "the-battle-for-wesnoth-server" wesnoth-server))
2506
2507(define-public gamine
2508 (package
2509 (name "gamine")
2510 (version "1.6")
2511 (source (origin
2512 (method url-fetch)
2513 (uri (string-append "mirror://sourceforge/gamine-game/"
2514 "gamine-" version ".tar.gz"))
2515 (sha256
2516 (base32
2517 "1sc6f4445ciigd6yw0ri92746k4hk6ps0bvj9fm1gbp3c3fslk5n"))))
2518 (build-system gnu-build-system)
2519 (native-inputs
2520 `(("pkg-config" ,pkg-config)
2521 ("intltool" ,intltool)))
2522 (inputs
2523 `(("gstreamer" ,gstreamer)
2524 ("gst-plugins-base" ,gst-plugins-base) ; playbin plugin
2525 ("gst-plugins-good" ,gst-plugins-good) ; for wav playback
2526 ("gtk+" ,gtk+)))
2527 (arguments
2528 `(#:tests? #f
2529 #:make-flags
2530 (let ((out (assoc-ref %outputs "out")))
2531 (list (string-append "PREFIX=" out)
2532 (string-append "SYSCONFDIR=" out "/etc")))
2533 #:phases
2534 (modify-phases %standard-phases
2535 (delete 'configure)
2536 (add-after
2537 'install 'wrap-gamine
2538 (lambda* (#:key outputs #:allow-other-keys)
2539 (let ((out (assoc-ref outputs "out"))
2540 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
2541 (wrap-program (string-append out "/bin/gamine")
2542 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))
2543 #t)))))
2544 (home-page "http://gamine-game.sourceforge.net/")
2545 (synopsis "Mouse and keyboard discovery for children")
2546 (description
2547 "Gamine is a game designed for young children who are learning to use the
2548mouse and keyboard. The child uses the mouse to draw colored dots and lines
2549on the screen and keyboard to display letters.")
2550 ;; Most files under gpl2+ or gpl3+, but eat.wav under gpl3
2551 (license license:gpl3)))
2552
2553(define-public manaplus
2554 (package
2555 (name "manaplus")
2556 (version "1.9.3.23")
2557 (source (origin
2558 (method url-fetch)
2559 (uri (string-append
2560 "https://repo.manaplus.org/manaplus/download/"
2561 version "/manaplus-" version ".tar.xz"))
2562 (sha256
2563 (base32
2564 "1ky182p4svwdqm6cf7jbns85hidkhkhq4s17cs2p381f0klapfjz"))))
2565 (build-system gnu-build-system)
2566 (arguments
2567 '(#:configure-flags
2568 (list (string-append "CPPFLAGS=-I"
2569 (assoc-ref %build-inputs "sdl-union")
2570 "/include/SDL"))))
2571 (native-inputs
2572 `(("pkg-config" ,pkg-config)))
2573 (inputs
2574 `(("glu" ,glu)
2575 ("curl" ,curl)
2576 ("libxml2" ,libxml2)
2577 ("mesa" ,mesa)
2578 ("sdl-union" ,(sdl-union))))
2579 (home-page "https://manaplus.org")
2580 (synopsis "Client for 'The Mana World' and similar games")
2581 (description
2582 "ManaPlus is a 2D MMORPG client for game servers. It is the only
2583fully supported client for @uref{http://www.themanaworld.org, The mana
2584world}, @uref{http://evolonline.org, Evol Online} and
2585@uref{http://landoffire.org, Land of fire}.")
2586 ;; "src/debug/*" and "src/sdl2gfx/*" are under Zlib.
2587 ;; "data/themes/{golden-delicious,jewelry}/*" are under CC-BY-SA.
2588 ;; The rest is under GPL2+.
2589 (license (list license:gpl2+ license:zlib license:cc-by-sa4.0))))
2590
2591(define openttd-engine
2592 (package
2593 (name "openttd-engine")
2594 (version "1.9.3")
2595 (source
2596 (origin (method url-fetch)
2597 (uri (string-append "https://proxy.binaries.openttd.org/openttd-releases/"
2598 version "/openttd-" version "-source.tar.xz"))
2599 (sha256
2600 (base32
2601 "0ijq72kgx997ggw40i5f4a3nf7y2g72z37l47i18yjvgbdzy320r"))
2602 (modules '((guix build utils)))
2603 (snippet
2604 ;; The DOS port contains proprietary software.
2605 '(begin
2606 (delete-file-recursively "os/dos")
2607 #t))))
2608 (build-system gnu-build-system)
2609 (arguments
2610 `(#:tests? #f ; no "check" target
2611 #:phases
2612 (modify-phases %standard-phases
2613 ;; The build process fails if the configure script is passed the
2614 ;; option "--enable-fast-install".
2615 (replace 'configure
2616 (lambda* (#:key inputs outputs (configure-flags '())
2617 #:allow-other-keys)
2618 (let ((out (assoc-ref outputs "out"))
2619 (lzo (assoc-ref inputs "lzo")))
2620 (apply invoke "./configure"
2621 (string-append "--prefix=" out)
2622 ;; Provide the "lzo" path.
2623 (string-append "--with-liblzo2="
2624 lzo "/lib/liblzo2.a")
2625 ;; Put the binary in 'bin' instead of 'games'.
2626 "--binary-dir=bin"
2627 configure-flags)))))))
2628 (native-inputs `(("pkg-config" ,pkg-config)))
2629 (inputs
2630 `(("allegro" ,allegro)
2631 ("fontconfig" ,fontconfig)
2632 ("freetype" ,freetype)
2633 ("icu4c" ,icu4c)
2634 ("libpng" ,libpng)
2635 ("lzo" ,lzo)
2636 ("sdl" ,sdl)
2637 ("xz" ,xz)
2638 ("zlib" ,zlib)))
2639 (synopsis "Transportation economics simulator game")
2640 (description "OpenTTD is a game in which you transport goods and
2641passengers by land, water and air. It is a re-implementation of Transport
2642Tycoon Deluxe with many enhancements including multiplayer mode,
2643internationalization support, conditional orders and the ability to clone,
2644autoreplace and autoupdate vehicles. This package only includes the game
2645engine. When you start it you will be prompted to download a graphics set.")
2646 (home-page "https://www.openttd.org/")
2647 ;; This package is GPLv2, except for a few files located in
2648 ;; "src/3rdparty/" which are under the 3-clause BSD, LGPLv2.1+ and Zlib
2649 ;; licenses. In addition, this software contains an in-game downloader
2650 ;; from which the user may find non-functional data licensed under
2651 ;; different terms.
2652 (license (list license:bsd-3 license:gpl2 license:lgpl2.1+ license:zlib))))
2653
2654(define openttd-opengfx
2655 (package
2656 (name "openttd-opengfx")
2657 (version "0.5.5")
2658 (source
2659 (origin
2660 (method url-fetch)
2661 (uri (string-append "http://binaries.openttd.org/extra/opengfx/"
2662 version "/opengfx-" version "-source.tar.xz"))
2663 (sha256
2664 (base32
2665 "009fa1bdin1bk0ynzhzc30hzkmmwzmwkk6j591ax3f6w75l28n49"))))
2666 (build-system gnu-build-system)
2667 (arguments
2668 '(#:make-flags (list "CC=gcc"
2669 (string-append "INSTALL_DIR="
2670 (assoc-ref %outputs "out")
2671 "/share/games/openttd/baseset/opengfx"))
2672 #:phases
2673 (modify-phases %standard-phases
2674 (replace 'configure
2675 (lambda _
2676 ;; Make sure HOME is writable for GIMP.
2677 (setenv "HOME" (getcwd))
2678
2679 ;; Redirect stdout, not stderr, to /dev/null. This prevents
2680 ;; dos2unix from receiving its version information as a flag.
2681 (substitute* "Makefile"
2682 (("\\$\\(UNIX2DOS\\) -q --version 2>/dev/null")
2683 "$(UNIX2DOS) -q --version 1>/dev/null")))))
2684 ;; The check phase for this package only checks the md5sums of the built
2685 ;; GRF files against the md5sums of the release versions. Because we use
2686 ;; different software versions than upstream does, some of the md5sums
2687 ;; are different. However, the package is still reproducible, it's safe
2688 ;; to disable this test.
2689 #:tests? #f
2690 #:parallel-build? #f))
2691 (native-inputs `(("dos2unix" ,dos2unix)
2692 ("gimp" ,gimp)
2693 ("grfcodec" ,grfcodec)
2694 ("nml" ,nml)
2695 ("python" ,python-2)))
2696 (home-page "http://dev.openttdcoop.org/projects/opengfx")
2697 (synopsis "Base graphics set for OpenTTD")
2698 (description
2699 "The OpenGFX projects is an implementation of the OpenTTD base grahics
2700set that aims to ensure the best possible out-of-the-box experience.
2701
2702OpenGFX provides you with...
2703@enumerate
2704@item All graphics you need to enjoy OpenTTD.
2705@item Uniquely drawn rail vehicles for every climate.
2706@item Completely snow-aware rivers.
2707@item Different river and sea water.
2708@item Snow-aware buoys.
2709@end enumerate")
2710 (license license:gpl2)))
2711
2712(define openttd-opensfx
2713 (package
2714 (name "openttd-opensfx")
2715 (version "0.2.3")
2716 (source
2717 (origin
2718 (method url-fetch)
2719 (uri (string-append
2720 "https://binaries.openttd.org/extra/opensfx/"
2721 version "/opensfx-" version "-source.tar.gz"))
2722 (sha256
2723 (base32
2724 "03jxgp02ks31hmsdh4xh0xcpkb70ds8jakc9pfc1y9vdrdavh4p5"))))
2725 (build-system gnu-build-system)
2726 (native-inputs
2727 `(("catcodec" ,catcodec)
2728 ("python" ,python-2)))
2729 (arguments
2730 `(#:make-flags
2731 (list (string-append "INSTALL_DIR=" %output
2732 "/share/games/openttd/baseset/opensfx"))
2733 #:phases
2734 (modify-phases %standard-phases
2735 (add-after 'unpack 'make-reproducible
2736 (lambda _
2737 ;; Remove the time dependency of the installed tarball by setting
2738 ;; the modification times if its members to 0.
2739 (substitute* "scripts/Makefile.def"
2740 (("-cf") " --mtime=@0 -cf"))
2741 #t))
2742 (delete 'configure))))
2743 (home-page "http://dev.openttdcoop.org/projects/opensfx")
2744 (synopsis "Base sounds for OpenTTD")
2745 (description "OpenSFX is a set of free base sounds for OpenTTD which make
2746it possible to play OpenTTD without requiring the proprietary sound files from
2747the original Transport Tycoon Deluxe.")
2748 (license license:cc-sampling-plus-1.0)))
2749
2750(define openttd-openmsx
2751 (package
2752 (name "openttd-openmsx")
2753 (version "0.3.1")
2754 (source
2755 (origin
2756 (method url-fetch)
2757 (uri (string-append
2758 "https://binaries.openttd.org/extra/openmsx/"
2759 version "/openmsx-" version "-source.tar.gz"))
2760 (sha256
2761 (base32
2762 "0nskq97a6fsv1v6d62zf3yb8whzhqnlh3lap3va3nzvj7csjgf7c"))))
2763 (build-system gnu-build-system)
2764 (native-inputs
2765 `(("python" ,python-2)))
2766 (arguments
2767 `(#:make-flags
2768 (list (string-append "INSTALL_DIR=" %output
2769 "/share/games/openttd/baseset"))
2770 #:phases
2771 (modify-phases %standard-phases
2772 (delete 'configure)
2773 (add-after 'install 'post-install
2774 ;; Rename openmsx-version to openmsx
2775 (lambda* (#:key outputs #:allow-other-keys)
2776 (let ((install-directory (string-append (assoc-ref outputs "out")
2777 "/share/games/openttd/baseset")))
2778 (rename-file (string-append install-directory "/openmsx-" ,version)
2779 (string-append install-directory "/openmsx"))
2780 #t))))))
2781 (home-page "http://dev.openttdcoop.org/projects/openmsx")
2782 (synopsis "Music set for OpenTTD")
2783 (description "OpenMSX is a music set for OpenTTD which makes it possible
2784to play OpenTTD without requiring the proprietary music from the original
2785Transport Tycoon Deluxe.")
2786 (license license:gpl2)))
2787
2788(define-public openttd
2789 (package
2790 (inherit openttd-engine)
2791 (name "openttd")
2792 (arguments
2793 `(#:configure-flags
2794 (list (string-append "--with-midi=" (assoc-ref %build-inputs "timidity++")
2795 "/bin/timidity"))
2796 ,@(substitute-keyword-arguments (package-arguments openttd-engine)
2797 ((#:phases phases)
2798 `(modify-phases ,phases
2799 (add-after 'install 'install-data
2800 (lambda* (#:key inputs outputs #:allow-other-keys)
2801 (for-each
2802 (lambda (input)
2803 (copy-recursively (assoc-ref inputs input)
2804 (assoc-ref outputs "out")))
2805 (list "opengfx" "openmsx" "opensfx"))
2806 #t)))))))
2807 (inputs
2808 `(("timidity++" ,timidity++)
2809 ,@(package-inputs openttd-engine)))
2810 (native-inputs
2811 `(("opengfx" ,openttd-opengfx)
2812 ("openmsx" ,openttd-openmsx)
2813 ("opensfx" ,openttd-opensfx)
2814 ,@(package-native-inputs openttd-engine)))))
2815
2816(define openrct2-title-sequences
2817 (package
2818 (name "openrct2-title-sequences")
2819 (version "0.1.2")
2820 (source
2821 (origin
2822 (method url-fetch)
2823 (uri (string-append "https://github.com/OpenRCT2/title-sequences/releases/download/v"
2824 version "/title-sequence-v" version ".zip"))
2825 (file-name (string-append name "-" version ".zip"))
2826 (sha256
2827 (base32
2828 "0qbyxrsw8hlgaq0r5d7lx7an3idy4qbfv7yiw9byhldk763n9cfw"))))
2829 (build-system trivial-build-system)
2830 (native-inputs
2831 `(("bash" ,bash)
2832 ("coreutils" ,coreutils)
2833 ("unzip" ,unzip)))
2834 (arguments
2835 `(#:modules ((guix build utils))
2836 #:builder
2837 (begin
2838 (use-modules (guix build utils))
2839 (let* ((out (assoc-ref %outputs "out"))
2840 (openrct2-title-sequences (string-append out
2841 "/share/openrct2/title-sequences"))
2842 (source (assoc-ref %build-inputs "source"))
2843 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
2844 (copy-file source (string-append ,name "-" ,version ".zip"))
2845 (invoke unzip (string-append ,name "-" ,version ".zip"))
2846 (delete-file (string-append ,name "-" ,version ".zip"))
2847 (mkdir-p openrct2-title-sequences)
2848 (copy-recursively "."
2849 openrct2-title-sequences)
2850 #t))))
2851 (home-page "https://github.com/OpenRCT2/OpenRCT2")
2852 (synopsis "Title sequences for OpenRCT2")
2853 (description
2854 "openrct2-title-sequences is a set of title sequences for OpenRCT2.")
2855 (license license:gpl3+)))
2856
2857(define openrct2-objects
2858 (package
2859 (name "openrct2-objects")
2860 (version "1.0.9")
2861 (source
2862 (origin
2863 (method url-fetch)
2864 (uri (string-append "https://github.com/OpenRCT2/objects/releases/download/v"
2865 version "/objects.zip"))
2866 (file-name (string-append name "-" version ".zip"))
2867 (sha256
2868 (base32 "02apb8h553m7d6jvysgb1zahvxc1yzyygfca2iclb21b3fhpsas4"))))
2869 (build-system trivial-build-system)
2870 (native-inputs
2871 `(("bash" ,bash)
2872 ("coreutils" ,coreutils)
2873 ("unzip" ,unzip)))
2874 (arguments
2875 `(#:modules ((guix build utils))
2876 #:builder
2877 (begin
2878 (use-modules (guix build utils))
2879 (let* ((out (assoc-ref %outputs "out"))
2880 (openrct2-objects (string-append out
2881 "/share/openrct2/objects"))
2882 (source (assoc-ref %build-inputs "source"))
2883 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
2884 (copy-file source (string-append ,name "-" ,version ".zip"))
2885 (invoke unzip (string-append ,name "-" ,version ".zip"))
2886 (delete-file (string-append ,name "-" ,version ".zip"))
2887 (mkdir-p openrct2-objects)
2888 (copy-recursively "."
2889 openrct2-objects)
2890 #t))))
2891 (home-page "https://github.com/OpenRCT2/OpenRCT2")
2892 (synopsis "Objects for OpenRCT2")
2893 (description
2894 "openrct2-objects is a set of objects for OpenRCT2.")
2895 (license license:gpl3+)))
2896
2897(define-public openrct2
2898 (package
2899 (name "openrct2")
2900 (version "0.2.4")
2901 (source
2902 (origin
2903 (method git-fetch)
2904 (uri (git-reference
2905 (url "https://github.com/OpenRCT2/OpenRCT2.git")
2906 (commit (string-append "v" version))))
2907 (file-name (git-file-name name version))
2908 (sha256
2909 (base32 "1rlw3w20llg36sj3bk50g661qw766ng8ma3p42sdkj8br9dw800h"))))
2910 (build-system cmake-build-system)
2911 (arguments
2912 `(#:configure-flags (list "-DDOWNLOAD_OBJECTS=OFF"
2913 "-DDOWNLOAD_TITLE_SEQUENCES=OFF")
2914 #:tests? #f ; tests require network access
2915 #:phases
2916 (modify-phases %standard-phases
2917 (add-after 'unpack 'fix-usr-share-paths&add-data
2918 (lambda* (#:key inputs outputs #:allow-other-keys)
2919 (let ((titles (assoc-ref inputs "openrct2-title-sequences"))
2920 (objects (assoc-ref inputs "openrct2-objects")))
2921 ;; Fix some references to /usr/share.
2922 (substitute* "src/openrct2/platform/Platform.Linux.cpp"
2923 (("/usr/share")
2924 (string-append (assoc-ref %outputs "out") "/share")))
2925 (copy-recursively
2926 (string-append titles "/share/openrct2/title-sequences")
2927 "data/title")
2928 (copy-recursively
2929 (string-append objects "/share/openrct2/objects")
2930 "data/object"))))
2931 (add-before 'configure 'get-rid-of-errors
2932 (lambda _
2933 ;; Don't treat warnings as errors.
2934 (substitute* "CMakeLists.txt"
2935 (("-Werror") ""))
2936 #t)))))
2937 (inputs `(("curl" ,curl)
2938 ("fontconfig" ,fontconfig)
2939 ("freetype" ,freetype)
2940 ("icu4c" ,icu4c)
2941 ("jansson" ,jansson)
2942 ("libpng" ,libpng)
2943 ("libzip" ,libzip)
2944 ("mesa" ,mesa)
2945 ("openrct2-objects" ,openrct2-objects)
2946 ("openrct2-title-sequences" ,openrct2-title-sequences)
2947 ("openssl" ,openssl)
2948 ("sdl2" ,sdl2)
2949 ("speexdsp" ,speexdsp)
2950 ("zlib" ,zlib)))
2951 (native-inputs
2952 `(("pkg-config" ,pkg-config)))
2953 (home-page "https://github.com/OpenRCT2/OpenRCT2")
2954 (synopsis "Free software re-implementation of RollerCoaster Tycoon 2")
2955 (description "OpenRCT2 is a free software re-implementation of
2956RollerCoaster Tycoon 2 (RCT2). The gameplay revolves around building and
2957maintaining an amusement park containing attractions, shops and facilities.
2958
2959Note that this package does @emph{not} provide the game assets (sounds,
2960images, etc.)")
2961 ;; See <https://github.com/OpenRCT2/OpenRCT2/wiki/Required-RCT2-files>
2962 ;; regarding assets.
2963 (license license:gpl3+)))
2964
2965(define-public pinball
2966 (package
2967 (name "pinball")
2968 (version "0.3.1")
2969 (source
2970 (origin (method url-fetch)
2971 (uri (string-append "mirror://sourceforge/pinball/pinball/"
2972 "pinball-" version "/"
2973 "pinball-" version ".tar.gz"))
2974 (sha256
2975 (base32
2976 "1f2whlrfidwfh8lvr8cspcyirc6840r5d1ajm7x99qmngygrhixs"))
2977 (patches (search-patches "pinball-const-fix.patch"
2978 "pinball-cstddef.patch"
2979 "pinball-missing-separators.patch"
2980 "pinball-src-deps.patch"
2981 "pinball-system-ltdl.patch"))))
2982 (build-system gnu-build-system)
2983 (inputs
2984 `(("glu" ,glu)
2985 ("mesa" ,mesa)
2986 ("sdl" ,sdl)
2987 ("sdl-image" ,sdl-image)
2988 ("sdl-mixer" ,sdl-mixer)))
2989 (arguments
2990 '(#:configure-flags
2991 (list (string-append "CPPFLAGS=-I"
2992 (assoc-ref %build-inputs "sdl-image")
2993 "/include/SDL -I"
2994 (assoc-ref %build-inputs "sdl-mixer")
2995 "/include/SDL"))))
2996 (home-page "http://pinball.sourceforge.net")
2997 (synopsis "Pinball simulator")
2998 (description "The Emilia Pinball Project is a pinball simulator. There
2999are only two levels to play with, but they are very addictive.")
3000 (license license:gpl2)))
3001
3002(define-public pioneers
3003 (package
3004 (name "pioneers")
3005 (version "15.5")
3006 (source (origin
3007 (method url-fetch)
3008 (uri (string-append "http://downloads.sourceforge.net/pio/"
3009 "pioneers-" version ".tar.gz"))
3010 (sha256
3011 (base32
3012 "037gdiiw690jw3wd1s9lxmkqx0caxyk0b4drpm7i9p28gig43q9y"))))
3013 (build-system gnu-build-system)
3014 (inputs `(("avahi" ,avahi)
3015 ("gtk+" ,gtk+)
3016 ("librsvg" ,librsvg)))
3017 (native-inputs `(("intltool" ,intltool)
3018 ("itstool" ,itstool)
3019 ("libxml2" ,libxml2)
3020 ("pkg-config" ,pkg-config)))
3021 (synopsis "Board game inspired by The Settlers of Catan")
3022 (description "Pioneers is an emulation of the board game The Settlers of
3023Catan. It can be played on a local network, on the internet, and with AI
3024players.")
3025 (home-page "http://pio.sourceforge.net/")
3026 (license license:gpl2+)))
3027
3028(define-public einstein
3029 (package
3030 (name "einstein")
3031 (version "2.0")
3032 (source (origin
3033 (method url-fetch)
3034 (uri (string-append "mirror://debian/pool/main/e/"
3035 "einstein/einstein_2.0.dfsg.2.orig.tar.gz"))
3036 (sha256
3037 (base32
3038 "1hxrlv6n8py48j487i6wbb4n4vd55w0na69r7ccmmr9vmrsw5mlk"))
3039 (patches (search-patches "einstein-build.patch"))))
3040 (build-system gnu-build-system)
3041 (inputs
3042 `(("freetype" ,freetype)
3043 ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-ttf)))
3044 ("zlib" ,zlib)))
3045 (native-inputs
3046 `(("font-dejavu" ,font-dejavu)))
3047 (arguments
3048 `(#:tests? #f ; no check target
3049 #:phases
3050 (modify-phases %standard-phases
3051 (replace 'configure
3052 (lambda* (#:key outputs inputs #:allow-other-keys)
3053 (let ((out (assoc-ref outputs "out"))
3054 (dejavu (string-append (assoc-ref inputs "font-dejavu")
3055 "/share/fonts/truetype/DejaVuSans.ttf")))
3056 (substitute* "Makefile"
3057 (("PREFIX=/usr/local") (string-append "PREFIX=" out)))
3058 ;; The patch above registers a free font for use by the binary,
3059 ;; but the font is copied during the compile phase into a
3060 ;; resources file, so we need to make the ttf file available.
3061 (symlink dejavu "res/DejaVuSans.ttf")
3062 #t))))))
3063 (synopsis "Logic puzzle game")
3064 (description "The goal of this logic game is to open all cards in a 6x6
3065grid, using a number of hints as to their relative position. The game idea
3066is attributed to Albert Einstein.")
3067 ;; The original home page has disappeared.
3068 (home-page (string-append "http://web.archive.org/web/20120521062745/"
3069 "http://games.flowix.com/en/index.html"))
3070 ;; License according to
3071 ;; http://web.archive.org/web/20150222180355/http://www.babichev.info/en/projects/index.html
3072 ;; The source code is a DFSG-sanitized tarball and does not contain any
3073 ;; license information.
3074 (license license:gpl3+)))
3075
3076(define-public powwow
3077 (package
3078 (name "powwow")
3079 (version "1.2.19")
3080 (source (origin
3081 (method url-fetch)
3082 (uri (string-append
3083 "https://www.hoopajoo.net/static/projects/powwow-"
3084 version ".tar.gz"))
3085 (sha256
3086 (base32
3087 "10rjl63hmf62qslyhzqrbw3i2zf09dgxv65avhj0iiz0m4pbc9wy"))))
3088 (inputs
3089 `(("ncurses" ,ncurses)))
3090 (build-system gnu-build-system)
3091 (home-page "https://www.hoopajoo.net/projects/powwow.html")
3092 (synopsis "MUD and telnet client")
3093 (description
3094 "POWWOW is a client software which can be used for telnet as well as for
3095@dfn{Multi-User Dungeon} (MUD). Additionally it can serve as a nice client for
3096the chat server psyced with the specific config located at
3097http://lavachat.symlynx.com/unix/")
3098 (license license:gpl2+)))
3099
3100(define-public red-eclipse
3101 (let ((release "1.6.0")
3102 (revision 0)
3103 (data-sources
3104 '(("acerspyro" "12b0bngl7hlxw4iwdbn99jp081yl6z1ic0s788nm349drbr2pck8")
3105 ("actors" "0x7qqx67679q6ark9zz02skwhzgabid69kwi6zmhfpfgicn4927r")
3106 ("appleflap" "08xslwqfqz3j4m03pv5ry2gdzj5k2ns51z8n6sln3sa94i9x8qkm")
3107 ("blendbrush" "18zf5i2ax4p14x4c9nhk9fq6l1xgbxw62gm72vx59vbfdpjrw3cg")
3108 ("caustics" "172fxwx7kbz5nmbjq98kr52ips505wb99fibgnpg8cj02syrya8k")
3109 ("crosshairs" "14w8ysqzdsx9bzpfbl700jzngbh14rdghhjdf6zd6jlkvrl6754r")
3110 ("dziq" "056imqszvp90j7cgz52ly0f31px64gsrmvm9k2c78ldbx87jnhc3")
3111 ("elyvisions" "1bsgr0gr7njydj8fqclh0a27lrsyic3xfd5a4vwggw7g54azpgk2")
3112 ("fonts" "00ibisza1qci0ghf2rynyf28l6r3nqhfzjf80k6gg76q4v7p1myx")
3113 ("freezurbern" "07l9ldk9b82f12c13wcg5xxdf15bw0yjxk3vvk8v3ygrl2mwksyr")
3114 ("john" "1jdmwkrdi5b9pivkm22rxhmkk1db9dx6l54wzcc23cvdz04ij93k")
3115 ("jojo" "0f7kjy43fbk9kw8fip6bbw4gn3pryh0fndlahjfkaysrx98krdj3")
3116 ("jwin" "0nc8dndnpqk2ad6316a8k6kgzsrkpwvk8s4gyh7aqfi4axfclril")
3117 ("luckystrike" "04jiipqahphmvz5cd74dygr62dlvv6l4iglb8hzh4pp8frhls8bq")
3118 ("maps" "0an46ipjvw4h0nxvb6qvnzp1cdkzlkiinqz4zh9lmxy1ds0gclim")
3119 ("mayhem" "15k10imm2wr6c6fq35n4r99k7kz7n9zdnjlw6dmdq6fba67i6sbc")
3120 ("mikeplus64" "0v4wiiivm3829j4phlavy22n4c6k6ib9ixxpdz7r6ysg5cdkaw33")
3121 ("misc" "13rfgwrlfhflz6inbkg3fypyf8im0m49sw112b17qrw2zgp8i1rz")
3122 ("nieb" "0z0h9jdn2gkkjil3vsvwidb1p2k09pi5n3wjxza12hhvqmcs7q8f")
3123 ("nobiax" "08bfp4q6gbfis18bp1h4d0hqssk79jc4fhyjxnv21dbam4v4mnkn")
3124 ("particles" "1vsx3fgg19xggxfhz3vlrh6nqhmw7kl9kmxrvb2j84blp00vd6z2")
3125 ("philipk" "14irscg80607i5k5l2ci0n9nwibvda2f3xsykgv96d0vldrp5n5a")
3126 ("projectiles" "09bnfsrywirwgjm6d7ff5nicx6w6b7w9568x9pb5q0ncaps3l85s")
3127 ("props" "1dlabbprlkif8af3daf9nbgcwgxiymvj0yiphqhlri8ylfy2vpz4")
3128 ("skyboxes" "14bi3md5y47cvb9ybipdvksz40gqsqw2r0lh3zzqb4acq367w18y")
3129 ("snipergoth" "0m8rvvy5n8n9pm0b5cqvzsxsw51mqk8m7s1h3qc849b38isliwq2")
3130 ("sounds" "0ivf3w5bphz5pzzx6kwcb67vbly1l19cgv3s0cyp8n87afiqj5rd")
3131 ("textures" "0qdmgx7zbcqnb9rrga2izr93p5inirczhddfxs504rsnv0v8vyxm")
3132 ("torley" "05ppyhghq859cbbxzj3dnl9fcx3ghy04ds1pylypwg2hsxzbjwcd")
3133 ("trak" "0g3vq86q91a3syli38lwc8ca4ychfwsmmqf85kqzfzyd627ybclm")
3134 ("ulukai" "0asa5fz400impklcg6dy2f7jiaqfc1sn1c36fpg8jd01gw66lw93")
3135 ("unnamed" "0rz5683j7sfwkcycfypbv4b0ihp0qwn9rzskfsabwc1s5g324917")
3136 ("vanities" "13f18783rc8cjf22p61zr8m5g1migzlx05fzl8xnbjdkqq4cdyix")
3137 ("vegetation" "1y5d97nfmvax7y4fr0y5v0c8zb1ajkqwx76kjd4qc9n4spdsi5sc")
3138 ("weapons" "103g1dhxv5ffz4ddg2xcbshbgv9606chsbas3pzk6h9ybqsyjrqh")
3139 ("wicked" "1884rk34a2dj83gz82rc4zh3ch0dyj5221hvsr0a5h60578i7yj6"))))
3140 (package
3141 (name "red-eclipse")
3142 (version (if (zero? revision)
3143 release
3144 (string-append release "-"
3145 (number->string revision))))
3146 (source
3147 (origin
3148 (method git-fetch)
3149 (uri (git-reference
3150 (url "https://github.com/red-eclipse/base.git")
3151 (commit (string-append "v" release))))
3152 (file-name (git-file-name name version))
3153 (sha256
3154 (base32 "0qy9kmq21wc4bdhwifasxc5dv1y5c53sn7dfmyc5y3zyz8wjyij4"))
3155 (patches
3156 (search-patches "red-eclipse-remove-gamma-name-hack.patch"))))
3157 (build-system gnu-build-system)
3158 (arguments
3159 `(#:tests? #f ; no check target
3160 #:make-flags (list "CC=gcc" "-Csrc"
3161 (string-append "INSTDIR="
3162 (assoc-ref %outputs "out") "/bin")
3163 (string-append "prefix="
3164 (assoc-ref %outputs "out")))
3165 #:phases
3166 (modify-phases %standard-phases
3167 (add-after 'unpack 'unpack-data
3168 (lambda* (#:key inputs #:allow-other-keys)
3169 (delete-file-recursively "data")
3170 (mkdir "data")
3171 (with-directory-excursion "data"
3172 (for-each (lambda (name)
3173 (copy-recursively (assoc-ref inputs name) name))
3174 (list ,@(map car data-sources))))
3175 #t))
3176 (add-after 'unpack-data 'add-store-data-package-path-as-default
3177 (lambda* (#:key outputs #:allow-other-keys)
3178 (substitute* "src/engine/server.cpp"
3179 (("(else[[:space:]]*)((addpackagedir\\()\"data\"(\\);))"
3180 _
3181 else_part
3182 addpackagedir_original
3183 addpackagedir_open
3184 addpackagedir_close)
3185 (string-append else_part
3186 "{ "
3187 addpackagedir_open
3188 "\""
3189 (assoc-ref outputs "out")
3190 "/share/redeclipse/data\""
3191 addpackagedir_close
3192 " "
3193 addpackagedir_original
3194 " }")))
3195 #t))
3196 (delete 'configure) ; no configure script
3197 (add-after 'set-paths 'set-sdl-paths
3198 (lambda* (#:key inputs #:allow-other-keys)
3199 (setenv "CPATH"
3200 (string-append (assoc-ref inputs "sdl-union")
3201 "/include/SDL2:"
3202 (or (getenv "CPATH") "")))
3203 #t))
3204 (add-after 'install 'copy-data
3205 (lambda* (#:key outputs #:allow-other-keys)
3206 (let ((out (assoc-ref outputs "out")))
3207 (copy-recursively "config"
3208 (string-append out "/config"))
3209 (copy-file "doc/examples/servinit.cfg"
3210 (string-append out "/config/servinit.cfg"))
3211 (copy-recursively "data"
3212 (string-append out "/share/redeclipse/data"))
3213 (mkdir-p (string-append out "/lib/redeclipse"))
3214 (symlink (string-append out "/share/redeclipse/data")
3215 (string-append out "/lib/redeclipse/data")))
3216 #t))
3217 (add-after 'copy-data 'wrap-program
3218 (lambda* (#:key inputs outputs #:allow-other-keys)
3219 (let* ((out (assoc-ref outputs "out"))
3220 (bin (string-append out "/bin")))
3221 (with-directory-excursion bin
3222 (rename-file "redeclipse_linux"
3223 ".redeclipse_linux-real")
3224 (rename-file "redeclipse_server_linux"
3225 ".redeclipse_server_linux-real")
3226 (call-with-output-file "redeclipse_linux"
3227 (lambda (port)
3228 (format port "#!~a/bin/sh
3229# Run the thing from its home, otherwise it just bails out.
3230cd \"~a\"
3231exec -a \"$0\" ~a/.redeclipse_linux-real~%"
3232 (assoc-ref inputs "bash") ;implicit input
3233 (string-append out)
3234 (string-append bin))))
3235 (call-with-output-file "redeclipse_server_linux"
3236 (lambda (port)
3237 (format port "#!~a/bin/sh
3238# Run the thing from its home, otherwise it just bails out.
3239cd \"~a\"
3240exec -a \"$0\" ~a/.redeclipse_server_linux-real~%"
3241 (assoc-ref inputs "bash") ;implicit input
3242 (string-append out)
3243 (string-append bin))))
3244 (chmod "redeclipse_linux" #o555)
3245 (chmod "redeclipse_server_linux" #o555)))
3246 #t)))))
3247 (native-inputs
3248 `(("pkg-config" ,pkg-config)))
3249 (inputs
3250 `(("curl" ,curl)
3251 ("glu" ,glu)
3252 ("sdl-union" ,(sdl-union (list sdl2
3253 sdl2-image
3254 sdl2-mixer)))
3255 ;; Create origin records for the many separate data packages.
3256 ,@(map (match-lambda
3257 ((name hash)
3258 (list name
3259 (origin
3260 (method git-fetch)
3261 (uri
3262 (git-reference
3263 (url (string-append "https://github.com/"
3264 "red-eclipse/" name ".git"))
3265 (commit (string-append "v" release))))
3266 (sha256 (base32 hash))
3267 (file-name (git-file-name name version))))))
3268 data-sources)))
3269 (home-page "http://redeclipse.net/")
3270 (synopsis "Arena shooter derived from the Cube 2 engine")
3271 (description
3272 "Red Eclipse is an arena shooter, created from the Cube2 engine.
3273Offering an innovative parkour system and distinct but all potent weapons,
3274Red Eclipse provides fast paced and accessible gameplay.")
3275 ;; The engine is under Zlib; data files are covered by the other
3276 ;; licenses. More details at <http://redeclipse.net/wiki/License>.
3277 (license (list license:expat
3278 license:zlib
3279 license:cc-by-sa3.0
3280 license:cc-by3.0
3281 license:cc0)))))
3282
3283(define-public grue-hunter
3284 (package
3285 (name "grue-hunter")
3286 (version "1.0")
3287 (source (origin
3288 (method url-fetch)
3289 (uri (string-append "https://jxself.org/grue-hunter.tar.gz"))
3290 (sha256
3291 (base32
3292 "1hjcpy5439qs3v2zykis7hsi0i17zjs62gks3zd8mnfw9ni4i2h3"))))
3293 (build-system trivial-build-system) ; no Makefile.PL
3294 (arguments `(#:modules ((guix build utils))
3295 #:builder
3296 (begin
3297 (use-modules (guix build utils))
3298 (use-modules (srfi srfi-1))
3299
3300 (let* ((tarball (assoc-ref %build-inputs "tarball"))
3301 (perl (string-append (assoc-ref %build-inputs
3302 "perl")
3303 "/bin"))
3304 (gzip (string-append (assoc-ref %build-inputs
3305 "gzip")
3306 "/bin/gzip"))
3307 (tar (string-append (assoc-ref %build-inputs
3308 "tar")
3309 "/bin/tar"))
3310 (out (assoc-ref %outputs "out"))
3311 (bin (string-append out "/bin"))
3312 (doc (string-append out
3313 "/share/doc/grue-hunter")))
3314 (copy-file tarball "grue-hunter.tar.gz")
3315 (invoke gzip "-d" "grue-hunter.tar.gz")
3316 (invoke tar "xvf" "grue-hunter.tar")
3317
3318 (mkdir-p bin)
3319 (copy-file "grue-hunter/gh.pl"
3320 (string-append bin "/grue-hunter"))
3321 (patch-shebang (string-append bin "/grue-hunter")
3322 (list perl))
3323
3324 (install-file "grue-hunter/AGPLv3.txt" doc)
3325
3326 #t))))
3327 (inputs `(("perl" ,perl)
3328 ("tar" ,tar)
3329 ("gzip" ,gzip)
3330 ("tarball" ,source)))
3331 (home-page "http://jxself.org/grue-hunter.shtml")
3332 (synopsis "Text adventure game")
3333 (description
3334 "Grue Hunter is a text adventure game written in Perl. You must make
3335your way through an underground cave system in search of the Grue. Can you
3336capture it and get out alive?")
3337 (license license:agpl3+)))
3338
3339(define-public lierolibre
3340 (package
3341 (name "lierolibre")
3342 (version "0.5")
3343 (source (origin
3344 (method url-fetch)
3345 (uri (string-append "https://launchpad.net/lierolibre/trunk/"
3346 version "/+download/lierolibre-"
3347 version ".tar.xz"))
3348 (sha256
3349 (base32
3350 "1cf1gvsn4qq190lrf9k5bpjnqwlcfw7pajvdnh7z5r4jqw0rsbl9"))
3351 (patches
3352 (search-patches "lierolibre-check-unaligned-access.patch"
3353 "lierolibre-try-building-other-arch.patch"
3354 "lierolibre-remove-arch-warning.patch"
3355 "lierolibre-newer-libconfig.patch"
3356 "lierolibre-is-free-software.patch"))
3357 (modules '((guix build utils)))
3358 (snippet
3359 '(begin
3360 ;; Delete pre-compiled files.
3361 (delete-file "data/LIERO.CHR")
3362 (delete-file "data/LIERO.SND")
3363 #t))))
3364 (build-system gnu-build-system)
3365 (native-inputs
3366 `(("imagemagick" ,imagemagick)
3367 ("pkg-config" ,pkg-config)
3368 ("util-linux" ,util-linux)
3369 ("sox" ,sox)))
3370 (inputs
3371 `(("boost" ,boost)
3372 ("libconfig" ,libconfig)
3373 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
3374 ("zlib" ,zlib)))
3375 (home-page "https://gitlab.com/lierolibre/lierolibre")
3376 (synopsis "Old-school earthworm action game")
3377 (description
3378 "lierolibre is an earthworm action game where you fight another player
3379(or the computer) underground using a wide array of weapons.
3380
3381Features:
3382@itemize
3383@item 2 worms, 40 weapons, great playability, two game modes: Kill'em All
3384and Game of Tag, plus AI-players without true intelligence!
3385@item Dat nostalgia.
3386@item Extensions via a hidden F1 menu:
3387@itemize
3388@item Replays
3389@item Game controller support
3390@item Powerlevel palettes
3391@end itemize
3392@item Ability to write game variables to plain text files.
3393@item Ability to load game variables from both EXE and plain text files.
3394@item Scripts to extract and repack graphics, sounds and levels.
3395@end itemize
3396
3397To switch between different window sizes, use F6, F7 and F8, to switch to
3398fullscreen, use F5 or Alt+Enter.")
3399 ;; Code mainly BSD-2, some parts under Boost 1.0. All assets are WTFPL2.
3400 (license (list license:bsd-2 license:boost1.0 license:wtfpl2))))
3401
3402(define-public warzone2100
3403 (package
3404 (name "warzone2100")
3405 (version "3.2.3")
3406 (source
3407 (origin
3408 (method url-fetch)
3409 (uri (string-append "mirror://sourceforge/warzone2100/archives/"
3410 "unsupported/Warzone2100-"
3411 (version-major+minor version) "/" version
3412 "/warzone2100-" version ".tar.xz"))
3413 (sha256
3414 (base32 "10kmpr4cby95zwqsl1zwx95d9achli6khq7flv6xmrq30a39xazw"))))
3415 (build-system gnu-build-system)
3416 (arguments
3417 `(#:configure-flags '("--with-distributor=Guix")
3418 #:phases
3419 (modify-phases %standard-phases
3420 (add-after 'unpack 'link-tests-with-qt
3421 (lambda _
3422 (substitute* "tests/Makefile.in"
3423 (("(framework_linktest_LDADD|maptest_LDADD) = " prefix)
3424 (string-append prefix "$(QT5_LIBS) ")))
3425 #t))
3426 (add-after 'unpack 'fix-ivis-linktest
3427 (lambda _
3428 (substitute* "tests/ivis_linktest.cpp"
3429 (("iV_DrawTextRotated.*;")
3430 (string-append "iV_DrawTextRotated(\"Press ESC to exit.\", "
3431 "100, 100, 0.0f, font_regular);")))
3432 #t)))))
3433 (native-inputs `(("gettext" ,gettext-minimal)
3434 ("pkg-config" ,pkg-config)
3435 ("unzip" ,unzip)
3436 ("zip" ,zip)))
3437 (inputs `(("fontconfig" ,fontconfig)
3438 ("freetype" ,freetype)
3439 ("fribidi" ,fribidi)
3440 ("glew" ,glew)
3441 ("harfbuzz" ,harfbuzz)
3442 ("libtheora" ,libtheora)
3443 ("libvorbis" ,libvorbis)
3444 ("libxrandr" ,libxrandr)
3445 ("openal" ,openal)
3446 ("physfs" ,physfs)
3447 ("qtbase" ,qtbase)
3448 ("qtscript" ,qtscript)
3449 ("openssl" ,openssl)
3450 ("sdl2" ,sdl2)))
3451 (home-page "http://wz2100.net")
3452 (synopsis "3D Real-time strategy and real-time tactics game")
3453 (description
3454 "Warzone 2100 offers campaign, multi-player, and single-player skirmish
3455modes. An extensive tech tree with over 400 different technologies, combined
3456with the unit design system, allows for a wide variety of possible units and
3457tactics.")
3458 ; Everything is GPLv2+ unless otherwise specified in COPYING.NONGPL
3459 (license (list license:bsd-3
3460 license:cc0
3461 license:cc-by-sa3.0
3462 license:expat
3463 license:gpl2+
3464 license:lgpl2.1+))))
3465
3466(define-public starfighter
3467 (package
3468 (name "starfighter")
3469 (version "2.0.0.3")
3470 (source (origin
3471 (method url-fetch)
3472 (uri (string-append
3473 "https://github.com/pr-starfighter/starfighter/releases"
3474 "/download/v" version "/starfighter-"
3475 (version-major+minor version) "-src.tar.gz"))
3476 (sha256
3477 (base32
3478 "13vi5kh9ahws4f52421cbyw0jn7pmbnld358lqfmr6flql7ilj3b"))))
3479 (build-system gnu-build-system)
3480 (native-inputs
3481 `(("pkg-config" ,pkg-config)))
3482 (inputs
3483 `(("pango" ,pango)
3484 ("sdl2" ,sdl2)
3485 ("sdl2-image" ,sdl2-image)
3486 ("sdl2-mixer" ,sdl2-mixer)
3487 ("sdl2-ttf" ,sdl2-ttf)))
3488 (home-page "https://pr-starfighter.github.io/")
3489 (synopsis "2D scrolling shooter game")
3490 (description
3491 "In the year 2579, the intergalactic weapons corporation, WEAPCO, has
3492dominated the galaxy. Guide Chris Bainfield and his friend Sid Wilson on
3493their quest to liberate the galaxy from the clutches of WEAPCO. Along the
3494way, you will encounter new foes, make new allies, and assist local rebels
3495in strikes against the evil corporation.")
3496 ;; gfx and music are under CC-BY 3.0, CC-BY-SA 3.0, CC0 or Public Domain.
3497 (license (list license:gpl3+
3498 license:cc-by3.0
3499 license:cc-by-sa3.0
3500 license:cc0
3501 license:public-domain))))
3502
3503(define-public project-starfighter
3504 (deprecated-package "project-starfighter" starfighter))
3505
3506(define-public chromium-bsu
3507 (package
3508 (name "chromium-bsu")
3509 (version "0.9.16.1")
3510 (source (origin
3511 (method url-fetch)
3512 (uri (string-append "mirror://sourceforge/chromium-bsu"
3513 "/Chromium B.S.U. source code/"
3514 "chromium-bsu-" version ".tar.gz"))
3515 (sha256
3516 (base32
3517 "0jk2w5b6s6nkzri585bbz16cif2fhqcnl5l1mq3rd98r9nil3hd1"))))
3518 (build-system gnu-build-system)
3519 (native-inputs `(("pkg-config" ,pkg-config)))
3520 (inputs `(("gettext" ,gettext-minimal)
3521 ("glu" ,glu)
3522 ("quesoglc" ,quesoglc)
3523 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))))
3524 (home-page "http://chromium-bsu.sourceforge.net/")
3525 (synopsis "Fast-paced, arcade-style, top-scrolling space shooter")
3526 (description
3527 "In this game you are the captain of the cargo ship Chromium B.S.U. and
3528are responsible for delivering supplies to the troops on the front line. Your
3529ship has a small fleet of robotic fighters which you control from the relative
3530safety of the Chromium vessel.")
3531 ;; Clarified Artistic License for everything but sound, which is covered
3532 ;; by the Expat License.
3533 (license (list license:clarified-artistic license:expat))))
3534
3535(define-public tuxpaint
3536 (package
3537 (name "tuxpaint")
3538 (version "0.9.23") ;keep VER_DATE below in sync
3539 (source
3540 (origin
3541 (method url-fetch)
3542 (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint/"
3543 version "/tuxpaint-" version ".tar.gz"))
3544 (sha256
3545 (base32
3546 "09k9pxi88r3dx6dyjwf9h85d4qpva4i29qz63dc558hg9v21k69l"))
3547 (modules '((guix build utils)))
3548 (snippet
3549 '(begin
3550 ;; Remove win32 directory which contains binary dll's and the
3551 ;; deprecated visualc directory.
3552 (for-each delete-file-recursively '("win32" "visualc"))
3553 (substitute* "Makefile"
3554 ;; Do not rely on $(GPERF) being an absolute file name
3555 (("\\[ -x \\$\\(GPERF\\) \\]")
3556 "$(GPERF) --version >/dev/null 2>&1"))
3557 #t))
3558 (patches (search-patches "tuxpaint-stamps-path.patch"))))
3559 (build-system gnu-build-system)
3560 (native-inputs
3561 `(("gperf" ,gperf)
3562 ("pkg-config" ,pkg-config)))
3563 (inputs
3564 `(("cairo" ,cairo)
3565 ("fribidi" ,fribidi)
3566 ("gettext" ,gettext-minimal)
3567 ("libpng" ,libpng)
3568 ("librsvg" ,librsvg)
3569 ("libpaper" ,libpaper)
3570 ("netpbm" ,netpbm)
3571 ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-ttf sdl-image)))))
3572 ;; TODO: Use system fonts rather than those in data/fonts
3573 (arguments
3574 `(#:make-flags `("VER_DATE=2018-09-02"
3575 "GPERF=gperf" "CC=gcc"
3576 "SDL_PCNAME=sdl SDL_image SDL_mixer SDL_ttf"
3577 ,(string-append "PREFIX=" %output)
3578 "KDE_PREFIX=$(PREFIX)/share/applications"
3579 "KDE_ICON_PREFIX=$(PREFIX)/share/icons/"
3580 "COMPLETIONDIR=$(PREFIX)/etc/bash_completion.d")
3581 #:parallel-build? #f ;fails on some systems
3582 #:tests? #f ;No tests
3583 #:phases (modify-phases %standard-phases
3584 (delete 'configure) ;no configure phase
3585 (add-before 'install 'no-sys-cache
3586 (lambda _ ;do not rebuild system conf cache
3587 (substitute* "Makefile"
3588 (("kbuildsycoca4") ""))
3589 #t))
3590 (add-after 'install 'fix-import
3591 (lambda* (#:key inputs outputs #:allow-other-keys)
3592 (let* ((out (assoc-ref outputs "out"))
3593 (net (assoc-ref inputs "netpbm"))
3594 (tpi (string-append out "/bin/tuxpaint-import")))
3595 (substitute* tpi
3596 ;; Point to installation prefix so that the default
3597 ;; configure file is found.
3598 (("/usr/local") out))
3599 ;; tuxpaint-import uses a bunch of programs from
3600 ;; netpbm, so make sure it knows where those are
3601 (wrap-program tpi
3602 `("PATH" ":" prefix
3603 (,(string-append net "/bin"))))))))))
3604 (native-search-paths
3605 (list (search-path-specification
3606 (variable "TUXPAINT_STAMPS_PATH")
3607 (files '("share/tuxpaint/stamps")))))
3608 (home-page "http://www.tuxpaint.org")
3609 (synopsis "Drawing software for children")
3610 (description
3611 "Tux Paint is a free drawing program designed for young children (kids
3612ages 3 and up). It has a simple, easy-to-use interface; fun sound effects;
3613and an encouraging cartoon mascot who helps guide children as they use the
3614program. It provides a blank canvas and a variety of drawing tools to help
3615your child be creative.")
3616 (license license:gpl2+)))
3617
3618(define-public tuxpaint-stamps
3619 (package
3620 (name "tuxpaint-stamps")
3621 (version "2018.09.01")
3622 (source
3623 (origin
3624 (method url-fetch)
3625 (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint-stamps/"
3626 (string-map (λ (x) (if (eq? x #\.) #\- x)) version)
3627 "/tuxpaint-stamps-" version ".tar.gz"))
3628 (sha256
3629 (base32
3630 "1skr23k27yj3vgwfazpzxp90lb2a278gxrkr3bxw7az6zpkmb3yp"))))
3631 (build-system trivial-build-system)
3632 (native-inputs
3633 `(("tar" ,tar)
3634 ("gzip" ,gzip)))
3635 (arguments
3636 `(#:modules ((guix build utils))
3637 #:builder (begin
3638 (use-modules (guix build utils))
3639 (setenv "PATH"
3640 (string-append
3641 (assoc-ref %build-inputs "tar") "/bin" ":"
3642 (assoc-ref %build-inputs "gzip") "/bin"))
3643 (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
3644 (chdir (string-append ,name "-" ,version))
3645 (let ((dir (string-append %output "/share/tuxpaint/stamps")))
3646 (mkdir-p dir)
3647 (copy-recursively "stamps" dir))
3648 #t)))
3649 (home-page (package-home-page tuxpaint))
3650 (synopsis "Stamp images for Tux Paint")
3651 (description
3652 "This package contains a set of \"Rubber Stamp\" images which can be used
3653with the \"Stamp\" tool within Tux Paint.")
3654 (license license:gpl2+)))
3655
3656(define-public tuxpaint-config
3657 (package
3658 (name "tuxpaint-config")
3659 (version "0.0.14") ;keep VER_DATE below in sync
3660 (source
3661 (origin
3662 (method url-fetch)
3663 (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint-config/"
3664 version "/tuxpaint-config-" version ".tar.gz"))
3665 (sha256
3666 (base32
3667 "0zkgxk436nqcp43zghkfmh397c7dvh5bwn2as7gwvv208bzyij6g"))))
3668 (build-system gnu-build-system)
3669 (native-inputs
3670 `(("gettext" ,gettext-minimal)))
3671 (inputs
3672 `(("fltk" ,fltk)
3673 ("libpaper" ,libpaper)
3674 ;; TODO: Should the following be propagated by fltk?
3675 ("libx11" ,libx11)
3676 ("libxft" ,libxft)
3677 ("mesa" ,mesa)))
3678 (arguments
3679 `(#:make-flags `("VER_DATE=2018-09-01"
3680 "CONFDIR=/etc/tuxpaint" ;don't write to store
3681 ,(string-append "PREFIX=" %output)
3682 "GNOME_PREFIX=$(PREFIX)")
3683 #:parallel-build? #f ;race conditions
3684 #:tests? #f ;no tests
3685 #:phases (modify-phases %standard-phases
3686 (delete 'configure) ;no configure phase
3687 (add-before 'install 'gzip-no-name
3688 (lambda* _
3689 (substitute* "Makefile"
3690 ;; tuxpaint-config compresses its own documentation;
3691 ;; make sure it uses flags for reproducibility.
3692 (("gzip") "gzip --no-name"))))
3693 (add-before 'install 'make-install-dirs
3694 (lambda* (#:key outputs #:allow-other-keys)
3695 (let ((out (assoc-ref outputs "out")))
3696 (mkdir-p (string-append out "/bin"))
3697 #t))))))
3698 (home-page (package-home-page tuxpaint))
3699 (synopsis "Configure Tux Paint")
3700 (description
3701 "Tux Paint Config is a graphical configuration editor for Tux Paint.")
3702 (license license:gpl2))) ;no "or later" present
3703
3704(define-public supertux
3705 (package
3706 (name "supertux")
3707 (version "0.6.0")
3708 (source (origin
3709 (method url-fetch)
3710 (uri (string-append "https://github.com/SuperTux/supertux/"
3711 "releases/download/v" version "/SuperTux-v"
3712 version "-Source.tar.gz"))
3713 (file-name (string-append name "-" version ".tar.gz"))
3714 (sha256
3715 (base32
3716 "1h1s4abirkdv4ag22zvyk6zkk64skqbjmcnnba67ps4hdzxfbhy4"))
3717 (patches
3718 (search-patches "supertux-unbundle-squirrel.patch"))))
3719 (arguments
3720 '(#:tests? #f
3721 #:configure-flags '("-DINSTALL_SUBDIR_BIN=bin"
3722 "-DUSE_SYSTEM_PHYSFS=ON")
3723 #:phases
3724 (modify-phases %standard-phases
3725 (add-after 'unpack 'patch-squirrel-path
3726 (lambda* (#:key inputs #:allow-other-keys)
3727 (let ((squirrel (assoc-ref inputs "squirrel")))
3728 (substitute* "CMakeLists.txt"
3729 (("set\\(SQUIRREL_PREFIX.*")
3730 (string-append "set(SQUIRREL_PREFIX " squirrel ")"))
3731 (("add_dependencies\\(supertux2_lib squirrel\\)") "")
3732 (("\\$\\{SQUIRREL_PREFIX\\}/include")
3733 (string-append "${SQUIRREL_PREFIX}/include/squirrel"))))
3734 #t)))))
3735 (build-system cmake-build-system)
3736 (inputs `(("sdl2" ,sdl2)
3737 ("sdl2-image" ,sdl2-image)
3738 ("sdl2-mixer" ,sdl2-mixer)
3739 ("openal" ,openal)
3740 ("mesa" ,mesa)
3741 ("glew" ,glew)
3742 ("libvorbis" ,libvorbis)
3743 ("libogg" ,libogg)
3744 ("physfs" ,physfs)
3745 ("curl" ,curl)
3746 ("boost" ,boost)
3747 ("freetype" ,freetype)
3748 ("squirrel" ,squirrel)))
3749 (native-inputs `(("pkg-config" ,pkg-config)))
3750 (synopsis "2D platformer game")
3751 (description "SuperTux is a free classic 2D jump'n run sidescroller game
3752in a style similar to the original Super Mario games covered under
3753the GNU GPL.")
3754 (home-page "https://supertux.org/")
3755 (license license:gpl3+)))
3756
3757(define-public tintin++
3758 (package
3759 (name "tintin++")
3760 (version "2.01.7")
3761 (source
3762 (origin
3763 (method url-fetch)
3764 (uri (string-append "mirror://sourceforge/tintin/TinTin++ Source Code/"
3765 (version-major+minor version)
3766 "/tintin-" version ".tar.gz"))
3767 (sha256
3768 (base32
3769 "033n84pyxml3n3gd4dq0497n9w331bnrr1gppwipz9ashmq8jz7v"))))
3770 (inputs
3771 `(("gnutls" ,gnutls)
3772 ("pcre" ,pcre)
3773 ("readline" ,readline)
3774 ("zlib" ,zlib)))
3775 (arguments
3776 '(#:tests? #f ; no test suite
3777 #:phases
3778 (modify-phases %standard-phases
3779 ;; The source is in tt/src.
3780 (add-before 'configure 'chdir
3781 (lambda _
3782 (chdir "src")
3783 #t)))))
3784 (build-system gnu-build-system)
3785 (home-page "http://tintin.sourceforge.net/")
3786 (synopsis "MUD client")
3787 (description
3788 "TinTin++ is a MUD client which supports MCCP (Mud Client Compression
3789Protocol), MMCP (Mud Master Chat Protocol), xterm 256 colors, most TELNET
3790options used by MUDs, as well as those required to login via telnet on
3791Linux / Mac OS X servers, and an auto mapper with a VT100 map display.")
3792 (license license:gpl2+)))
3793
3794(define-public laby
3795 (package
3796 (name "laby")
3797 (version "0.6.4")
3798 (source
3799 (origin (method git-fetch)
3800 (uri (git-reference
3801 (url "https://github.com/sgimenez/laby.git")
3802 (commit (string-append name "-" version))))
3803 (file-name (git-file-name name version))
3804 (sha256
3805 (base32
3806 "12fq9hhrxpzgfinmj9ra9ckss9yficwdlrmgjvvsq7agvh3sgyl1"))
3807 (patches (search-patches "laby-make-install.patch"))))
3808 (build-system gnu-build-system)
3809 (inputs
3810 `(("lablgtk" ,lablgtk)
3811 ("ocaml" ,ocaml)
3812 ("ocaml-findlib" ,ocaml-findlib)
3813 ("ocamlbuild" ,ocamlbuild)))
3814 (arguments
3815 '(#:phases
3816 (modify-phases %standard-phases
3817 (delete 'configure)
3818 (add-before 'build 'allow-unsafe-strings
3819 ;; Fix a build failure with ocaml >=4.06.0.
3820 ;; See <https://github.com/sgimenez/laby/issues/53>.
3821 (lambda _
3822 (setenv "OCAMLPARAM" "safe-string=0,_")
3823 #t))
3824 (add-before 'build 'set-library-path
3825 (lambda* (#:key inputs #:allow-other-keys)
3826 (let ((lablgtk (assoc-ref inputs "lablgtk")))
3827 (setenv "LD_LIBRARY_PATH"
3828 (string-append lablgtk "/lib/ocaml/stublibs"))))))
3829 #:tests? #f ; no 'check' target
3830 #:make-flags
3831 (list (string-append "PREFIX=" (assoc-ref %outputs "out")) "all")))
3832 (home-page "https://sgimenez.github.io/laby/")
3833 (synopsis "Programming game")
3834 (description "Learn programming, playing with ants and spider webs ;-)
3835Your robot ant can be programmed in many languages: OCaml, Python, C, C++,
3836Java, Ruby, Lua, JavaScript, Pascal, Perl, Scheme, Vala, Prolog. Experienced
3837programmers may also add their own favorite language.")
3838 (license license:gpl3+)))
3839
3840(define-public bambam
3841 (package
3842 (name "bambam")
3843 (version "1.0.0")
3844 (source
3845 (origin
3846 (method git-fetch)
3847 (uri (git-reference
3848 (url "https://github.com/porridge/bambam")
3849 (commit (string-append "v" version))))
3850 (file-name (git-file-name name version))
3851 (sha256
3852 (base32 "18cwd1wpyyx8y61cags9bkdhx9x858xicc4y1c9c2s0xjmgzhl3i"))))
3853 (build-system python-build-system)
3854 (arguments
3855 `(#:tests? #f ; no tests
3856 #:phases
3857 (modify-phases %standard-phases
3858 (delete 'build) ; nothing to build
3859 (replace 'install
3860 (lambda* (#:key outputs #:allow-other-keys)
3861 (let* ((out (assoc-ref outputs "out"))
3862 (bin (string-append out "/bin"))
3863 (share (string-append out "/share")))
3864 (mkdir-p bin)
3865 (copy-file "bambam.py" (string-append bin "/bambam"))
3866 (install-file "bambam.6" (string-append share "/man/man6"))
3867 (copy-recursively "data" (string-append share "/bambam/data")))
3868 #t)))))
3869 (inputs
3870 `(("python-pygame" ,python-pygame)))
3871 (home-page "https://github.com/porridge/bambam")
3872 (synopsis "Keyboard mashing and doodling game for babies")
3873 (description "Bambam is a simple baby keyboard (and gamepad) masher
3874application that locks the keyboard and mouse and instead displays bright
3875colors, pictures, and sounds.")
3876 (license license:gpl3+)))
3877
3878(define-public mrrescue
3879 (package
3880 (name "mrrescue")
3881 (version "1.02e")
3882 (source (origin
3883 (method url-fetch)
3884 (uri (string-append
3885 "https://github.com/SimonLarsen/mrrescue/releases/"
3886 "download/" version "/mrrescue" version ".love"))
3887 (file-name (string-append name "-" version ".love"))
3888 (sha256
3889 (base32
3890 "0jwzbwkgp1l5ia6c7s760gmdirbsncp6nfqp7vqdqsfb63la9gl2"))))
3891 (build-system trivial-build-system)
3892 (arguments
3893 `(#:modules ((guix build utils))
3894 #:builder
3895 (begin
3896 (use-modules (guix build utils))
3897 (let* ((out (assoc-ref %outputs "out"))
3898 (script (string-append out "/bin/" ,name))
3899 (data (string-append out "/share/" ,name))
3900 (source (assoc-ref %build-inputs "source"))
3901 (unzip (string-append (assoc-ref %build-inputs "unzip")
3902 "/bin/unzip"))
3903 (patch (string-append (assoc-ref %build-inputs "patch")
3904 "/bin/patch"))
3905 (bash (string-append (assoc-ref %build-inputs "bash")
3906 "/bin/bash"))
3907 (love (string-append (assoc-ref %build-inputs "love")
3908 "/bin/love")))
3909
3910 (mkdir-p (dirname script))
3911 (with-output-to-file script
3912 (lambda ()
3913 (format #t "#!~a~%" bash)
3914 (format #t "exec -a ~a \"~a\" \"~a\"~%" ,name love data)))
3915 (chmod script #o755)
3916
3917 ;; The better way to package this game would be to install *only* the
3918 ;; script above, pointing to the unextracted .love file in the store.
3919 ;; However, mrrescue 1.02e needs to be patched to work with Love 11.
3920 ;; Instead of extracting the .love file, patching it, and re-zipping
3921 ;; it to the store, simply point the script to the extracted patched
3922 ;; data directory directly.
3923 (mkdir-p data)
3924 (with-directory-excursion data
3925 (invoke unzip source)
3926 (invoke patch "-p1" "-i"
3927 (assoc-ref %build-inputs "love-11.patch")))
3928 #t))))
3929 (native-inputs
3930 `(("unzip" ,unzip)
3931 ("patch" ,patch)
3932 ("love-11.patch" ,(search-patch "mrrescue-support-love-11.patch"))))
3933 (inputs
3934 `(("bash" ,bash)
3935 ("love" ,love)))
3936 (home-page "http://tangramgames.dk/games/mrrescue")
3937 (synopsis "Arcade-style fire fighting game")
3938 (description
3939 "Mr. Rescue is an arcade styled 2d action game centered around evacuating
3940civilians from burning buildings. The game features fast-paced fire
3941extinguishing action, intense boss battles, a catchy soundtrack, and lots of
3942throwing people around in pseudo-randomly generated buildings.")
3943 (license (list license:zlib ; for source code
3944 license:cc-by-sa3.0)))) ; for graphics and music assets
3945
3946(define-public hyperrogue
3947 (package
3948 (name "hyperrogue")
3949 (version "11.2d")
3950 ;; When updating this package, be sure to update the "hyperrogue-data"
3951 ;; origin in native-inputs.
3952 (source (origin
3953 (method url-fetch)
3954 (uri (string-append
3955 "https://www.roguetemple.com/z/hyper/hyperrogue"
3956 (string-join (string-split version #\.) "")
3957 "-src.tgz"))
3958 (sha256
3959 (base32
3960 "1b532s94zv1jsni7bvh848m42arxcclsr0x3n7c689iamwqzrxmn"))))
3961 (build-system gnu-build-system)
3962 (arguments
3963 `(#:tests? #f ; no check target
3964 #:make-flags '("HYPERROGUE_USE_GLEW=1"
3965 "HYPERROGUE_USE_PNG=1")
3966 #:phases
3967 (modify-phases %standard-phases
3968 (add-after 'set-paths 'set-sdl-paths
3969 (lambda* (#:key inputs #:allow-other-keys)
3970 (setenv "CPATH"
3971 (string-append (getenv "CPATH") ":"
3972 (assoc-ref inputs "sdl-union")
3973 "/include/SDL"))))
3974 (replace 'configure
3975 (lambda* (#:key inputs outputs #:allow-other-keys)
3976 (let* ((out (assoc-ref outputs "out"))
3977 (share-dir (string-append out "/share/hyperrogue"))
3978 (dejavu-dir (string-append
3979 (assoc-ref inputs "font-dejavu")
3980 "/share/fonts/truetype"))
3981 (dejavu-font "DejaVuSans-Bold.ttf")
3982 (music-file "hyperrogue-music.txt"))
3983 ;; Fix font and music paths.
3984 (substitute* "basegraph.cpp"
3985 ((dejavu-font)
3986 (string-append dejavu-dir "/" dejavu-font)))
3987 (substitute* music-file
3988 (("\\*/")
3989 (string-append share-dir "/sounds/")))
3990 (substitute* "sound.cpp"
3991 (("musicfile = \"\"")
3992 (string-append "musicfile = \""
3993 share-dir "/" music-file "\"")))
3994 ;; Disable build machine CPU optimizations and warnings treated
3995 ;; as errors.
3996 (substitute* "Makefile"
3997 (("-march=native") "")
3998 (("-Werror") "")))
3999 #t))
4000 (replace 'install
4001 (lambda* (#:key inputs outputs #:allow-other-keys)
4002 (let* ((out (assoc-ref outputs "out"))
4003 (bin (string-append out "/bin"))
4004 (share-dir (string-append out "/share/hyperrogue")))
4005 (mkdir-p bin)
4006 (install-file "hyperrogue" bin)
4007 (install-file "hyperrogue-music.txt" share-dir))
4008 #t))
4009 (add-after 'install 'install-data
4010 (lambda* (#:key inputs outputs #:allow-other-keys)
4011 (let* ((data (assoc-ref inputs "hyperrogue-data"))
4012 (out (assoc-ref outputs "out"))
4013 (sounds (string-append out "/share/hyperrogue/sounds"))
4014 (unzip (string-append (assoc-ref inputs "unzip") "/bin/unzip")))
4015 ;; Extract media license information into sounds directory.
4016 (invoke unzip "-j" data
4017 (string-append
4018 "hyperrogue"
4019 (string-join (string-split ,version #\.) "")
4020 "/sounds/credits.txt") "-d" sounds)
4021 ;; Extract sounds and music into sounds directory.
4022 (invoke "unzip" "-j" data
4023 (string-append
4024 "hyperrogue"
4025 (string-join (string-split ,version #\.) "")
4026 "/*.ogg") "-d" sounds)))))))
4027 (native-inputs
4028 `(("hyperrogue-data"
4029 ,(origin
4030 (method url-fetch)
4031 (uri
4032 (string-append
4033 "https://www.roguetemple.com/z/hyper/hyperrogue"
4034 (string-join (string-split version #\.) "")
4035 "-win.zip"))
4036 (sha256
4037 (base32
4038 "0vq4l1xaqpjj3hmxn1vn2b3bbkn1hrag42ck9f30blinv347bwhf"))))
4039 ("unzip" ,unzip)))
4040 (inputs
4041 `(("font-dejavu" ,font-dejavu)
4042 ("glew" ,glew)
4043 ("libpng" ,libpng)
4044 ("sdl-union" ,(sdl-union (list sdl
4045 sdl-gfx
4046 sdl-mixer
4047 sdl-ttf)))))
4048 (home-page "https://www.roguetemple.com/z/hyper/")
4049 (synopsis "Non-euclidean graphical rogue-like game")
4050 (description
4051 "HyperRogue is a game in which the player collects treasures and fights
4052monsters -- rogue-like but for the fact that it is played on the hyperbolic
4053plane and not in euclidean space.
4054
4055In HyperRogue, the player can move through different parts of the world, which
4056are home to particular creatures and may be subject to their own rules of
4057\"physics\".
4058
4059While the game can use ASCII characters to display the the classical rogue
4060symbols, it still needs graphics to render the non-euclidean world.")
4061 (license (list license:bsd-3 ; glew.c, mtrand.*
4062 license:cc-by-sa3.0 ; music
4063 license:cc-by-sa4.0 ; sounds
4064 license:cc0
4065 license:public-domain ; direntx.*, some sounds
4066 license:zlib ; savepng.*
4067 license:gpl2+)))) ; remaining files
4068
4069(define-public kobodeluxe
4070 (package
4071 (name "kobodeluxe")
4072 (version "0.5.1")
4073 (source (origin
4074 (method url-fetch)
4075 (uri (string-append "http://olofson.net/kobodl/download/KoboDeluxe-"
4076 version ".tar.bz2"))
4077 (sha256
4078 (base32
4079 "0b2wvdpnmaibsy419c16dfwj5kvd3pccby2aaqvm964x74592yqg"))
4080 (patches (search-patches
4081 "kobodeluxe-const-charp-conversion.patch"
4082 "kobodeluxe-enemies-pipe-decl.patch"
4083 "kobodeluxe-graphics-window-signed-char.patch"
4084 "kobodeluxe-manpage-minus-not-hyphen.patch"
4085 "kobodeluxe-midicon-segmentation-fault.patch"
4086 "kobodeluxe-paths.patch"))))
4087 (build-system gnu-build-system)
4088 (arguments
4089 '(#:configure-flags
4090 (list (string-append "CPPFLAGS=-I"
4091 (assoc-ref %build-inputs "sdl-union")
4092 "/include/SDL"))))
4093 (inputs `(("sdl-union" ,(sdl-union (list sdl sdl-image)))))
4094 (synopsis "Shooter with space station destruction")
4095 (description
4096 "Kobo Deluxe is an enhanced version of Akira Higuchi's XKobo graphical game
4097for Un*x systems with X11.")
4098 (home-page "http://olofson.net/kobodl/")
4099 (license license:gpl2+)))
4100
4101(define-public freeciv
4102 (package
4103 (name "freeciv")
4104 (version "2.6.0")
4105 (source
4106 (origin
4107 (method url-fetch)
4108 (uri (list (string-append
4109 "http://files.freeciv.org/stable/freeciv-"
4110 version ".tar.bz2")
4111 (string-append
4112 "mirror://sourceforge/freeciv/Freeciv%20"
4113 (version-major+minor version) "/" version
4114 "/freeciv-" version ".tar.bz2")))
4115 (sha256
4116 (base32
4117 "16f9wsnn7073s6chzbm3819swd0iw019p9nrzr3diiynk28kj83w"))))
4118 (build-system gnu-build-system)
4119 (inputs
4120 `(("curl" ,curl)
4121 ("cyrus-sasl" ,cyrus-sasl)
4122 ("gtk+" ,gtk+)
4123 ("sdl-mixer" ,sdl-mixer)
4124 ("zlib" ,zlib)))
4125 (native-inputs
4126 `(("pkg-config" ,pkg-config)))
4127 (home-page "http://www.freeciv.org/")
4128 (synopsis "Turn based empire building strategy game")
4129 (description "Freeciv is a turn based empire building strategy game
4130inspired by the history of human civilization. The game commences in
4131prehistory and your mission is to lead your tribe from the Stone Age
4132to the Space Age.")
4133 (license license:gpl2+)))
4134
4135(define-public no-more-secrets
4136 (package
4137 (name "no-more-secrets")
4138 (version "0.3.3")
4139 (source
4140 (origin
4141 (method git-fetch)
4142 (uri (git-reference
4143 (url "https://github.com/bartobri/no-more-secrets.git")
4144 (commit (string-append "v" version))))
4145 (file-name (git-file-name name version))
4146 (sha256
4147 (base32 "1zfv4qabikf8w9winsr4brxrdvs3f0d7xvydksyx8bydadsm2v2h"))))
4148 (build-system gnu-build-system)
4149 (arguments
4150 `(#:tests? #f
4151 #:make-flags (list "CC=gcc" "all-ncurses"
4152 (string-append "prefix="
4153 (assoc-ref %outputs "out")))
4154 #:phases
4155 (modify-phases %standard-phases
4156 (delete 'configure))))
4157 (inputs
4158 `(("ncurses" ,ncurses)))
4159 (home-page "https://github.com/bartobri/no-more-secrets")
4160 (synopsis "Recreation of data decryption effect in \"Sneakers\"")
4161 (description
4162 "@code{No More Secrets} provides a command line tool called \"nms\"
4163that recreates the famous data decryption effect seen on screen in the 1992
4164movie \"Sneakers\".
4165
4166This command works on piped data. Pipe any ASCII or UTF-8 text to nms, and
4167it will apply the hollywood effect, initially showing encrypted data, then
4168starting a decryption sequence to reveal the original plaintext characters.")
4169 (license license:expat)))
4170
4171(define-public megaglest-data
4172 (package
4173 (name "megaglest-data")
4174 (version "3.13.0")
4175 (source
4176 (origin
4177 (method url-fetch)
4178 (uri (string-append
4179 "https://github.com/MegaGlest/megaglest-data"
4180 "/releases/download/" version "/megaglest-data-"
4181 version ".tar.xz"))
4182 (sha256
4183 (base32
4184 "0ipgza33z89fw3si32iafm981f3fvm0zldvbxj29whghd2k3rpj3"))))
4185 (build-system cmake-build-system)
4186 (arguments
4187 `(#:tests? #f))
4188 (home-page "https://megaglest.org/")
4189 (synopsis "Data files for MegaGlest")
4190 (description "This package contains the data files required for MegaGlest.")
4191 (license license:cc-by-sa3.0)))
4192
4193(define-public megaglest
4194 (package
4195 (name "megaglest")
4196 (version "3.13.0")
4197 (source
4198 (origin
4199 (method url-fetch)
4200 (uri (string-append
4201 "https://github.com/MegaGlest/megaglest-source"
4202 "/releases/download/" version "/megaglest-source-"
4203 version ".tar.xz"))
4204 (sha256
4205 (base32
4206 "1ffck3ii1wp5k3nn5p0ga06jgp7pzk4zw0xln3xim2w7qrxzdzh9"))))
4207 (build-system cmake-build-system)
4208 (inputs
4209 `(("curl" ,curl)
4210 ("fontconfig" ,fontconfig)
4211 ("ftgl" ,ftgl)
4212 ("glew" ,glew)
4213 ("libjpeg-turbo" ,libjpeg-turbo)
4214 ("megaglest-data" ,megaglest-data)
4215 ("mesa" ,mesa)
4216 ("miniupnpc" ,miniupnpc)
4217 ("openal" ,openal)
4218 ("libircclient" ,libircclient)
4219 ("libpng" ,libpng)
4220 ("libvorbis" ,libvorbis)
4221 ("lua" ,lua)
4222 ("sdl2" ,sdl2)
4223 ("wxwidgets" ,wxwidgets)))
4224 (native-inputs
4225 `(("cppunit" ,cppunit)
4226 ("pkg-config" ,pkg-config)))
4227 (arguments
4228 `(#:configure-flags
4229 (list (string-append "-DCUSTOM_DATA_INSTALL_PATH="
4230 (assoc-ref %build-inputs "megaglest-data")
4231 "/share/megaglest")
4232 "-DBUILD_MEGAGLEST_TESTS=ON")
4233 #:phases
4234 (modify-phases %standard-phases
4235 (add-after 'unpack 'fix-ini-search-path
4236 (lambda* (#:key outputs #:allow-other-keys)
4237 (substitute* "source/glest_game/global/config.cpp"
4238 (("/usr/share/megaglest/")
4239 (string-append (assoc-ref outputs "out")
4240 "/share/megaglest/"))))))
4241 #:test-target "megaglest_tests"))
4242 (home-page "https://megaglest.org/")
4243 (synopsis "3D real-time strategy (RTS) game")
4244 (description "MegaGlest is a cross-platform 3D real-time strategy (RTS)
4245game, where you control the armies of one of seven different factions: Tech,
4246Magic, Egypt, Indians, Norsemen, Persian or Romans.")
4247 (license license:gpl2+)))
4248
4249(define-public freegish
4250 (let ((commit "8795cd7adc95957883f2d3465eb9036a774667a7")
4251 (revision "1"))
4252 (package
4253 (name "freegish")
4254 (version (string-append "0-" revision "." (string-take commit 9)))
4255 (source (origin
4256 (method git-fetch)
4257 (uri (git-reference
4258 (url "https://github.com/freegish/freegish.git")
4259 (commit commit)))
4260 (file-name (git-file-name name version))
4261 (sha256
4262 (base32
4263 "1p1zf5qqagmcpi1db2bs02cnalpy3qiymp6yzan7k1bhmv859gsx"))
4264 (modules '((guix build utils)))
4265 ;; The audio files in the "music" directory are licensed under
4266 ;; CC-BY-NC, so we delete them.
4267 (snippet
4268 '(begin
4269 (delete-file-recursively "music")
4270 #t))))
4271 (build-system cmake-build-system)
4272 (arguments
4273 `(#:tests? #f ; no tests included
4274 #:configure-flags
4275 (list "-DCMAKE_INSTALL_FHS=ON")
4276 #:phases
4277 (modify-phases %standard-phases
4278 (add-after 'unpack 'set-DATAPATH
4279 (lambda* (#:key outputs #:allow-other-keys)
4280 (substitute* "CMakeLists.txt"
4281 (("^option\\(INSTALL_FHS" line)
4282 (string-append "add_definitions(-DDATAPATH=\""
4283 (assoc-ref outputs "out") "/share/freegish\")\n"
4284 line)))
4285 #t)))))
4286 (inputs
4287 `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))
4288 ("openal" ,openal)
4289 ("libvorbis" ,libvorbis)
4290 ("libogg" ,libogg)
4291 ("mesa" ,mesa)
4292 ("libpng" ,libpng)
4293 ("zlib" ,zlib)))
4294 (home-page "https://github.com/freegish/freegish")
4295 (synopsis "Side-scrolling physics platformer with a ball of tar")
4296 (description "In FreeGish you control Gish, a ball of tar who lives
4297happily with his girlfriend Brea, until one day a mysterious dark creature
4298emerges from a sewer hole and pulls her below ground.")
4299 ;; The textures are available under the Expat license. All other assets
4300 ;; (including levels) are covered under CC-BY-SA or public domain. The
4301 ;; source code is under GPLv2+.
4302 (license (list license:gpl2+
4303 license:expat
4304 license:public-domain
4305 license:cc-by-sa3.0)))))
4306
4307(define-public cdogs-sdl
4308 (package
4309 (name "cdogs-sdl")
4310 (version "0.6.9")
4311 (source (origin
4312 (method git-fetch)
4313 (uri (git-reference
4314 (url "https://github.com/cxong/cdogs-sdl.git")
4315 (commit version)))
4316 (file-name (git-file-name name version))
4317 (sha256
4318 (base32
4319 "13gyv2hzk43za1n3lsjnd5v64xlzfzq7n10scd1rcbsnk1n007zr"))))
4320 (build-system cmake-build-system)
4321 (arguments
4322 `(#:configure-flags
4323 (list (string-append "-DCDOGS_DATA_DIR="
4324 (assoc-ref %outputs "out")
4325 "/share/cdogs-sdl/"))))
4326 (inputs
4327 `(("mesa" ,mesa)
4328 ("sdl2" ,sdl2)
4329 ("sdl2-image" ,sdl2-image)
4330 ("sdl2-mixer" ,sdl2-mixer)))
4331 (home-page "https://cxong.github.io/cdogs-sdl/")
4332 (synopsis "Classic overhead run-and-gun game")
4333 (description "C-Dogs SDL is a classic overhead run-and-gun game,
4334supporting up to 4 players in co-op and deathmatch modes. Customize your
4335player, choose from many weapons, and blast, slide and slash your way through
4336over 100 user-created campaigns.")
4337 ;; GPLv2+ for code (includes files under BSD-2 and BSD-3),
4338 ;; CC0/CC-BY/CC-BY-SA for assets.
4339 (license (list license:gpl2+
4340 license:bsd-2
4341 license:bsd-3
4342 license:cc0
4343 license:cc-by3.0
4344 license:cc-by-sa3.0))))
4345
4346(define-public kiki
4347 (package
4348 (name "kiki")
4349 (version "1.0.2")
4350 (source (origin
4351 (method url-fetch)
4352 (uri (string-append "mirror://sourceforge/kiki/kiki-src/"
4353 version "/kiki-" version "-src.tgz"))
4354 (sha256
4355 (base32
4356 "0ihjdsxbn8z3cz0gpcprafiipcqaiskgdnh1rhmw4qff8dszalbn"))
4357 (modules '((guix build utils)))
4358 (snippet
4359 '(begin
4360 (for-each delete-file (find-files "." "\\.dll$"))
4361 #t))
4362 (patches
4363 (search-patches "kiki-level-selection-crash.patch"
4364 "kiki-makefile.patch"
4365 "kiki-missing-includes.patch"
4366 "kiki-portability-64bit.patch"))))
4367 (build-system gnu-build-system)
4368 (arguments
4369 `(#:tests? #f ; there are no tests
4370 #:make-flags '("CXX=g++")
4371 #:phases
4372 (modify-phases %standard-phases
4373 (replace 'configure
4374 (lambda* (#:key inputs outputs #:allow-other-keys)
4375 (setenv "CPLUS_INCLUDE_PATH"
4376 (string-append (assoc-ref inputs "sdl-union")
4377 "/include/SDL:"
4378 (assoc-ref inputs "python")
4379 "/include/python2.7"))
4380 (substitute* "src/main/main.cpp"
4381 (("#include <SDL.h>" line)
4382 (string-append line "
4383#define K_INCLUDE_GLUT
4384#include \"KIncludeTools.h\""))
4385 (("// initialize SDL" line)
4386 (string-append "glutInit(&argc,argv);\n" line)))
4387 (substitute* "src/main/KikiController.cpp"
4388 (("getenv\\(\"KIKI_HOME\"\\)")
4389 (string-append "\"" (assoc-ref outputs "out") "/share/kiki/\"")))
4390 (substitute* "linux/Makefile"
4391 (("CXXOPTS =" line)
4392 (string-append line " -fpermissive"))
4393 (("PYTHON_VERSION=.*") "PYTHON_VERSION=2.7")
4394 (("PYTHONHOME =.*")
4395 (string-append "PYTHONHOME = "
4396 (assoc-ref inputs "python")
4397 "/lib/python2.7/"))
4398 (("\\$\\(GLLIBS\\)" line)
4399 (string-append line " -lm -lpython2.7")))
4400 (substitute* "src/main/KikiPythonWidget.h"
4401 (("#define __KikiPythonWidget" line)
4402 (string-append line "\n#include \"KikiPython.h\"")))
4403 #t))
4404 (add-before 'build 'build-kodilib
4405 (lambda* (#:key make-flags #:allow-other-keys)
4406 (with-directory-excursion "kodilib/linux"
4407 (apply invoke "make" make-flags))))
4408 (add-after 'build-kodilib 'chdir
4409 (lambda _ (chdir "linux") #t))
4410 (replace 'install
4411 (lambda* (#:key outputs #:allow-other-keys)
4412 (let* ((out (assoc-ref outputs "out"))
4413 (bin (string-append out "/bin"))
4414 (share (string-append out "/share/kiki")))
4415 (mkdir-p bin)
4416 (mkdir-p share)
4417 (install-file "kiki" bin)
4418 (copy-recursively "../py" (string-append share "/py"))
4419 (copy-recursively "../sound" (string-append share "/sound"))
4420 #t))))))
4421 (inputs
4422 `(("glu" ,glu)
4423 ;; Kiki builds fine with freeglut 3.0.0 but segfaults on start.
4424 ("freeglut" ,freeglut-2.8)
4425 ("sdl-union" ,(sdl-union (list sdl
4426 sdl-mixer
4427 sdl-image)))
4428 ("python" ,python-2)))
4429 (native-inputs
4430 `(("swig" ,swig)))
4431 (home-page "http://kiki.sourceforge.net/")
4432 (synopsis "3D puzzle game")
4433 (description "Kiki the nano bot is a 3D puzzle game. It is basically a
4434mixture of the games Sokoban and Kula-World. Your task is to help Kiki, a
4435small robot living in the nano world, repair its maker.")
4436 ;; See <http://metadata.ftp-master.debian.org/changelogs/main/k/
4437 ;; kiki-the-nano-bot/kiki-the-nano-bot_1.0.2+dfsg1-4_copyright>
4438 ;; for a statement from the author.
4439 (license license:public-domain)))
4440
4441(define-public kiki-the-nano-bot
4442 (deprecated-package "kiki-the-nano-bot" kiki))
4443
4444(define-public teeworlds
4445 (package
4446 (name "teeworlds")
4447 (version "0.7.2")
4448 (source (origin
4449 (method git-fetch)
4450 (uri (git-reference
4451 (url "https://github.com/teeworlds/teeworlds.git")
4452 (commit version)))
4453 (file-name (git-file-name name version))
4454 (sha256
4455 (base32
4456 "15l988qcsqgb6rjais0qd5sd2rjanm2708jmzvkariqzz0d6pb93"))
4457 (modules '((guix build utils)
4458 (ice-9 ftw)
4459 (ice-9 regex)
4460 (srfi srfi-1)
4461 (srfi srfi-26)))
4462 (snippet ; remove bundled libraries except md5
4463 '(let ((base-dir "src/engine/external/"))
4464 (for-each (compose (cut delete-file-recursively <>)
4465 (cut string-append base-dir <>))
4466 (remove (cut string-match "(^.)|(^md5$)" <>)
4467 (scandir base-dir)))
4468 #t))
4469 (patches
4470 (search-patches "teeworlds-use-latest-wavpack.patch"))))
4471 (build-system gnu-build-system)
4472 (arguments
4473 `(#:tests? #f ; no tests included
4474 #:modules ((guix build gnu-build-system)
4475 (guix build utils)
4476 (srfi srfi-26))
4477 #:phases
4478 (modify-phases %standard-phases
4479 (replace 'configure
4480 (lambda* (#:key outputs #:allow-other-keys)
4481 ;; The bundled json-parser uses an old API.
4482 ;; To use the latest non-bundled version, we need to pass the
4483 ;; length of the data in all 'json_parse_ex' calls.
4484 (define (use-latest-json-parser file)
4485 (substitute* file
4486 (("engine/external/json-parser/json\\.h")
4487 "json-parser/json.h")
4488 (("json_parse_ex\\(&JsonSettings, pFileData, aError\\);")
4489 "json_parse_ex(&JsonSettings,
4490 pFileData,
4491 strlen(pFileData),
4492 aError);")))
4493
4494 ;; Embed path to assets.
4495 (substitute* "src/engine/shared/storage.cpp"
4496 (("#define DATA_DIR.*")
4497 (string-append "#define DATA_DIR \""
4498 (assoc-ref outputs "out")
4499 "/share/teeworlds/data"
4500 "\"")))
4501
4502 ;; Bam expects all files to have a recent time stamp.
4503 (for-each (cut utime <> 1 1)
4504 (find-files "."))
4505
4506 ;; Do not use bundled libraries.
4507 (substitute* "bam.lua"
4508 (("local json = Compile.+$")
4509 "local json = nil
4510settings.link.libs:Add(\"jsonparser\")")
4511 (("local png = Compile.+$")
4512 "local png = nil
4513settings.link.libs:Add(\"pnglite\")")
4514 (("local wavpack = Compile.+$")
4515 "local wavpack = nil
4516settings.link.libs:Add(\"wavpack\")")
4517 (("if config\\.zlib\\.value == 1")
4518 "if config.zlib.value"))
4519 (substitute* "src/engine/client/graphics_threaded.cpp"
4520 (("engine/external/pnglite/pnglite\\.h")
4521 "pnglite.h"))
4522 (substitute* "src/engine/client/sound.cpp"
4523 (("engine/external/wavpack/wavpack\\.h")
4524 "wavpack/wavpack.h"))
4525 (for-each use-latest-json-parser
4526 '("src/game/client/components/countryflags.cpp"
4527 "src/game/client/components/menus_settings.cpp"
4528 "src/game/client/components/skins.cpp"
4529 "src/game/client/localization.cpp"
4530 "src/game/editor/auto_map.h"
4531 "src/game/editor/editor.cpp"))
4532 #t))
4533 (replace 'build
4534 (lambda _
4535 (invoke "bam" "-a" "-v" "conf=release")))
4536 (replace 'install
4537 (lambda* (#:key outputs #:allow-other-keys)
4538 (let* ((arch ,(system->linux-architecture
4539 (or (%current-target-system)
4540 (%current-system))))
4541 (build (string-append "build/" arch "/release/"))
4542 (data-built (string-append build "data/"))
4543 (out (assoc-ref outputs "out"))
4544 (bin (string-append out "/bin/"))
4545 (data (string-append out "/share/teeworlds/data/")))
4546 (for-each (cut install-file <> bin)
4547 (map (cut string-append build <>)
4548 '("teeworlds" "teeworlds_srv")))
4549 (copy-recursively data-built data)
4550 #t))))))
4551 (inputs
4552 `(("freetype" ,freetype)
4553 ("glu" ,glu)
4554 ("json-parser" ,json-parser)
4555 ("mesa" ,mesa)
4556 ("pnglite" ,pnglite)
4557 ("sdl2" ,sdl2)
4558 ("sdl2-image" ,sdl2-image)
4559 ("sdl2-mixer" ,sdl2-mixer)
4560 ("wavpack" ,wavpack)
4561 ("zlib" ,zlib)))
4562 (native-inputs
4563 `(("bam" ,bam)
4564 ("python" ,python-wrapper)
4565 ("pkg-config" ,pkg-config)))
4566 (home-page "https://www.teeworlds.com")
4567 (synopsis "2D retro multiplayer shooter game")
4568 (description "Teeworlds is an online multiplayer game. Battle with up to
456916 players in a variety of game modes, including Team Deathmatch and Capture
4570The Flag. You can even design your own maps!")
4571 (license license:bsd-3)))
4572
4573(define-public enigma
4574 (package
4575 (name "enigma")
4576 (version "1.21")
4577 (source (origin
4578 (method url-fetch)
4579 (uri (string-append "mirror://sourceforge/enigma-game/"
4580 "Release%20" version "/enigma-"
4581 version ".tar.gz"))
4582 (sha256
4583 (base32
4584 "00ffh9pypj1948pg3q9sjp1nmiabh52p5c8wpg9n1dcfgl3cywnq"))))
4585 (build-system gnu-build-system)
4586 (arguments
4587 `(#:configure-flags
4588 (list "--with-system-enet")
4589 #:phases
4590 (modify-phases %standard-phases
4591 (add-after 'unpack 'find-sdl
4592 (lambda _
4593 (substitute* "configure"
4594 (("SDL_ttf.h") "SDL/SDL_ttf.h"))
4595 (substitute* '("tools/ttf2bmf.cc"
4596 "lib-src/enigma-core/ecl_font.cc"
4597 "lib-src/enigma-core/ecl_video.cc"
4598 "lib-src/enigma-core/ecl_buffer.hh"
4599 "src/SoundEngine.cc"
4600 "src/SoundEngine.hh"
4601 "src/MusicManager.cc"
4602 "src/MusicManager.hh"
4603 "src/d_models.cc"
4604 "src/main.cc"
4605 "src/network.cc")
4606 (("#include \"SDL_(image|ttf|mixer|types|syswm|mutex).h\"" line header)
4607 (string-append "#include \"SDL/SDL_" header ".h\"")))
4608 (substitute* "src/main.cc"
4609 (("#include <SDL_(image|ttf|mixer).h>" line header)
4610 (string-append "#include \"SDL/SDL_" header ".h\"")))
4611 #t)))))
4612 (inputs
4613 `(("xerces-c" ,xerces-c)
4614 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
4615 ("curl" ,curl)
4616 ("enet" ,enet)))
4617 (native-inputs
4618 `(("pkg-config" ,pkg-config)
4619 ("imagemagick" ,imagemagick)))
4620 (home-page "https://www.nongnu.org/enigma")
4621 (synopsis "Puzzle game with a dexterity component")
4622 (description "Enigma is a puzzle game with 550 unique levels. The object
4623of the game is to find and uncover pairs of identically colored ‘Oxyd’ stones.
4624Simple? Yes. Easy? Certainly not! Hidden traps, vast mazes, laser beams,
4625and most of all, countless hairy puzzles usually block your direct way to the
4626Oxyd stones. Enigma’s game objects (and there are hundreds of them, lest you
4627get bored) interact in many unexpected ways, and since many of them follow the
4628laws of physics (Enigma’s special laws of physics, that is), controlling them
4629with the mouse isn’t always trivial.")
4630 (license license:gpl2+)))
4631
4632(define-public chroma
4633 (package
4634 (name "chroma")
4635 (version "1.17")
4636 (source (origin
4637 (method url-fetch)
4638 (uri (string-append "http://level7.org.uk/chroma/download/chroma-"
4639 version ".tar.bz2"))
4640 (sha256
4641 (base32
4642 "047sf00x71xbmi8bqrhfbmr9bk89l2gbykkqsfpw4wz6yfjscs6y"))))
4643 (build-system gnu-build-system)
4644 (arguments
4645 `(#:tests? #f)) ; no tests included
4646 (inputs
4647 `(("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
4648 ("freetype" ,freetype)
4649 ("ncurses" ,ncurses)
4650 ("fontconfig" ,fontconfig)
4651 ("libxft" ,libxft)))
4652 (native-inputs
4653 `(("pkg-config" ,pkg-config)))
4654 (home-page "http://level7.org.uk/chroma/")
4655 (synopsis "Abstract puzzle game")
4656 (description "Chroma is an abstract puzzle game. A variety of colourful
4657shapes are arranged in a series of increasingly complex patterns, forming
4658 fiendish traps that must be disarmed and mysterious puzzles that must be
4659 manipulated in order to give up their subtle secrets. Initially so
4660 straightforward that anyone can pick it up and begin to play, yet gradually
4661 becoming difficult enough to tax even the brightest of minds.")
4662 (license license:gpl2+)))
4663
4664(define-public fillets-ng
4665 (package
4666 (name "fillets-ng")
4667 (version "1.0.1")
4668 (source (origin
4669 (method url-fetch)
4670 (uri (string-append "mirror://sourceforge/fillets/"
4671 "Fish%20Fillets%20-%20Next%20Generation/"
4672 version "/fillets-ng-" version ".tar.gz"))
4673 (sha256
4674 (base32
4675 "1nljp75aqqb35qq3x7abhs2kp69vjcj0h1vxcpdyn2yn2nalv6ij"))))
4676 (build-system gnu-build-system)
4677 (arguments
4678 `(#:configure-flags
4679 (list (string-append "--with-lua="
4680 (assoc-ref %build-inputs "lua")))
4681 #:make-flags
4682 (list (string-append "CFLAGS=-I"
4683 (assoc-ref %build-inputs "sdl-union")
4684 "/include/SDL")
4685 (string-append "CXXFLAGS=-I"
4686 (assoc-ref %build-inputs "sdl-union")
4687 "/include/SDL"))
4688 #:phases
4689 (modify-phases %standard-phases
4690 ;; Lua 5.1 does not provide it.
4691 (add-after 'unpack 'do-not-link-with-lualib
4692 (lambda _
4693 (substitute* "configure"
4694 (("-llualib") ""))
4695 #t))
4696 (add-after 'install 'install-data
4697 (lambda* (#:key inputs outputs #:allow-other-keys)
4698 (let ((data (string-append (assoc-ref outputs "out")
4699 "/share/games/fillets-ng")))
4700 (mkdir-p data)
4701 (invoke "tar" "-xvf"
4702 (assoc-ref inputs "fillets-ng-data")
4703 "--strip-components=1"
4704 "-C" data)))))))
4705 (inputs
4706 `(("sdl-union" ,(sdl-union (list sdl
4707 sdl-mixer
4708 sdl-image
4709 sdl-ttf)))
4710 ("fribidi" ,fribidi)
4711 ("libx11" ,libx11)
4712 ("lua" ,lua-5.1)))
4713 (native-inputs
4714 `(("pkg-config" ,pkg-config)
4715 ("fillets-ng-data"
4716 ,(origin
4717 (method url-fetch)
4718 (uri (string-append "mirror://sourceforge/fillets/"
4719 "Fish%20Fillets%20-%20Next%20Generation/"
4720 version "/fillets-ng-data-" version ".tar.gz"))
4721 (sha256
4722 (base32
4723 "169p0yqh2gxvhdilvjc2ld8aap7lv2nhkhkg4i1hlmgc6pxpkjgh"))))))
4724 (home-page "http://fillets.sourceforge.net/")
4725 (synopsis "Puzzle game")
4726 (description "Fish Fillets NG is strictly a puzzle game. The goal in
4727every of the seventy levels is always the same: find a safe way out. The fish
4728utter witty remarks about their surroundings, the various inhabitants of their
4729underwater realm quarrel among themselves or comment on the efforts of your
4730fish. The whole game is accompanied by quiet, comforting music.")
4731 (license license:gpl2+)))
4732
4733(define-public fish-fillets-ng
4734 (deprecated-package "fish-fillets-ng" fillets-ng))
4735
4736(define-public crawl
4737 (package
4738 (name "crawl")
4739 (version "0.24.0")
4740 (source
4741 (origin
4742 (method url-fetch)
4743 (uri (list
4744 ;; Older releases get moved into a versioned directory
4745 (string-append "http://crawl.develz.org/release/"
4746 (version-major+minor version) "/stone_soup-"
4747 version "-nodeps.tar.xz")
4748 ;; Only the latest release is in this directory
4749 (string-append "http://crawl.develz.org/release/stone_soup-"
4750 version "-nodeps.tar.xz")))
4751 (sha256
4752 (base32 "0kdq6s12myxfdg75ma9x3ys2nd0xwb3xm2ynlmhg4628va0pnixr"))
4753 (patches (search-patches "crawl-upgrade-saves.patch"))))
4754 (build-system gnu-build-system)
4755 (inputs
4756 `(("lua51" ,lua-5.1)
4757 ("ncurses" ,ncurses)
4758 ("sqlite" ,sqlite)
4759 ("zlib" ,zlib)))
4760 (native-inputs
4761 `(("bison" ,bison)
4762 ("flex" ,flex)
4763 ("perl" ,perl)
4764 ("python" ,python-wrapper)
4765 ("python-pyyaml" ,python-pyyaml)
4766 ("pkg-config" ,pkg-config)))
4767 (arguments
4768 `(#:make-flags
4769 (let* ((sqlite (assoc-ref %build-inputs "sqlite"))
4770 (out (assoc-ref %outputs "out")))
4771 (list (string-append "SQLITE_INCLUDE_DIR=" sqlite "/include")
4772 (string-append "prefix=" out)
4773 "SAVEDIR=~/.crawl"
4774 ;; Don't compile with SSE on systems which don't have it.
4775 ,@(match (%current-system)
4776 ((or "i686-linux" "x86_64-linux")
4777 '())
4778 (_ '("NOSSE=TRUE")))
4779 ;; don't build any bundled dependencies
4780 "BUILD_LUA="
4781 "BUILD_SQLITE="
4782 "BUILD_ZLIB="
4783 "-Csource"))
4784 #:phases
4785 (modify-phases %standard-phases
4786 (add-after 'unpack 'find-SDL-image
4787 (lambda _
4788 (substitute* "source/windowmanager-sdl.cc"
4789 (("SDL_image.h") "SDL2/SDL_image.h"))
4790 #t))
4791 (delete 'configure)
4792 (replace 'check
4793 (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
4794 (setenv "HOME" (getcwd))
4795 ;; Fake a terminal for the test cases.
4796 (setenv "TERM" "xterm-256color")
4797 ;; Run the tests that don't require a debug build.
4798 (apply invoke "make" "nondebugtest"
4799 (format #f "-j~d" (parallel-job-count))
4800 ;; Force command line build for test cases.
4801 (append make-flags '("GAME=crawl" "TILES="))))))))
4802 (synopsis "Roguelike dungeon crawler game")
4803 (description "Dungeon Crawl Stone Soup (also known as \"Crawl\" or DCSS
4804for short) is a roguelike adventure through dungeons filled with dangerous
4805monsters in a quest to find the mystifyingly fabulous Orb of Zot.")
4806 (home-page "https://crawl.develz.org")
4807 (license (list license:gpl2+
4808 license:bsd-2
4809 license:bsd-3
4810 license:cc0
4811 license:expat
4812 license:zlib
4813 license:asl2.0))))
4814
4815(define-public dungeon-crawl-stone-soup
4816 (deprecated-package "dungeon-crawl-stone-soup" crawl))
4817
4818;; The linter here claims that patch file names should start with the package
4819;; name. But, in this case, the patches are inherited from crawl with the
4820;; "crawl-" prefix instead of "crawl-tiles-".
4821(define-public crawl-tiles
4822 (package
4823 (inherit crawl)
4824 (name "crawl-tiles")
4825 (arguments
4826 (substitute-keyword-arguments
4827 (package-arguments crawl)
4828 ((#:make-flags flags)
4829 `(let ((dejavu (assoc-ref %build-inputs "font-dejavu")))
4830 (cons*
4831 (string-append "PROPORTIONAL_FONT=" dejavu
4832 "/share/fonts/truetype/DejaVuSans.ttf")
4833 (string-append "MONOSPACED_FONT=" dejavu
4834 "/share/fonts/truetype/DejaVuSansMono.ttf")
4835 "TILES=y"
4836 ;; Rename the executable to allow parallel installation with crawl.
4837 "GAME=crawl-tiles"
4838 ,flags)))))
4839 (inputs
4840 `(,@(package-inputs crawl)
4841 ("font-dejavu" ,font-dejavu)
4842 ("freetype6" ,freetype)
4843 ("glu" ,glu)
4844 ("libpng" ,libpng)
4845 ("sdl2" ,sdl2)
4846 ("sdl2-image" ,sdl2-image)
4847 ("sdl2-mixer" ,sdl2-mixer)))
4848 (native-inputs
4849 `(,@(package-native-inputs crawl)
4850 ("pngcrush" ,pngcrush)
4851 ("which" ,which)))
4852 (synopsis "Graphical roguelike dungeon crawler game")))
4853
4854(define-public dungeon-crawl-stone-soup-tiles
4855 (deprecated-package "dungeon-crawl-stone-soup-tiles" crawl-tiles))
4856
4857(define-public lugaru
4858 (package
4859 (name "lugaru")
4860 (version "1.2")
4861 (source (origin
4862 (method url-fetch)
4863 (uri (string-append "https://bitbucket.org/osslugaru/lugaru/downloads/"
4864 "lugaru-" version ".tar.xz"))
4865 (sha256
4866 (base32
4867 "15zgcshy22q51rm72zi6y9z7qlgnz5iw3gczjdlir4bqmxy4gspk"))))
4868 (build-system cmake-build-system)
4869 (arguments
4870 `(#:configure-flags
4871 (list "-DSYSTEM_INSTALL=ON")
4872 ;; no test target
4873 #:tests? #f))
4874 (native-inputs
4875 `(("pkg-config" ,pkg-config)))
4876 (inputs
4877 `(("sdl2" ,sdl2)
4878 ("glu" ,glu)
4879 ("libjpeg" ,libjpeg-turbo)
4880 ("libpng" ,libpng)
4881 ("openal" ,openal)
4882 ("vorbis" ,libvorbis)
4883 ("zlib" ,zlib)))
4884 (home-page "https://osslugaru.gitlab.io")
4885 (synopsis "Cross-platform third-person action game")
4886 (description "Lugaru is a third-person action game. The main character,
4887Turner, is an anthropomorphic rebel bunny rabbit with impressive combat skills.
4888In his quest to find those responsible for slaughtering his village, he uncovers
4889a far-reaching conspiracy involving the corrupt leaders of the rabbit republic
4890and the starving wolves from a nearby den. Turner takes it upon himself to
4891fight against their plot and save his fellow rabbits from slavery.")
4892 (license (list license:gpl2+ ; code
4893 ;; assets:
4894 license:cc-by-sa3.0
4895 license:cc-by-sa4.0))))
4896
4897(define-public 0ad-data
4898 (package
4899 (name "0ad-data")
4900 (version "0.0.23b-alpha")
4901 (source
4902 (origin
4903 (method url-fetch)
4904 (uri (string-append "https://releases.wildfiregames.com/0ad-"
4905 version "-unix-data.tar.xz"))
4906 (file-name (string-append name "-" version ".tar.xz"))
4907 (sha256
4908 (base32
4909 "04x7729hk6zw1xj3n4s4lvaviijsnbjf5rhzvjxlr5fygvg4l6z1"))
4910 (modules '((guix build utils)))
4911 (snippet
4912 #~(begin
4913 (for-each (lambda (name)
4914 (let* ((dir (string-append "binaries/data/mods/" name))
4915 (file (string-append dir "/" name ".zip"))
4916 (unzip #$(file-append unzip "/bin/unzip")))
4917 (invoke unzip "-d" dir file)
4918 (delete-file file)))
4919 '("mod" "public"))
4920 #t))))
4921 (build-system trivial-build-system)
4922 (native-inputs `(("tar" ,tar)
4923 ("xz" ,xz)))
4924 (arguments
4925 `(#:modules ((guix build utils))
4926 #:builder
4927 (begin
4928 (use-modules (guix build utils))
4929 (let ((out (assoc-ref %outputs "out"))
4930 (source (assoc-ref %build-inputs "source"))
4931 (tar (string-append (assoc-ref %build-inputs "tar") "/bin/tar"))
4932 (xz-path (string-append (assoc-ref %build-inputs "xz") "/bin")))
4933 (setenv "PATH" xz-path)
4934 (mkdir out)
4935 (invoke tar "xvf" source "-C" out "--strip=3")))))
4936 (synopsis "Data files for 0ad")
4937 (description "0ad-data provides the data files required by the game 0ad.")
4938 (home-page "https://play0ad.com")
4939 (license (list (license:fsdg-compatible
4940 "http://tavmjong.free.fr/FONTS/ArevCopyright.txt"
4941 (license:license-comment
4942 (package-license font-bitstream-vera)))
4943 (package-license font-bitstream-vera)
4944 license:cc-by-sa3.0
4945 license:expat
4946 license:gfl1.0
4947 license:gpl2+
4948 license:gpl3+))))
4949
4950(define-public 0ad
4951 (package
4952 (name "0ad")
4953 (version "0.0.23b-alpha")
4954 (source
4955 (origin
4956 (method url-fetch)
4957 (uri (string-append "https://releases.wildfiregames.com/0ad-"
4958 version "-unix-build.tar.xz"))
4959 (file-name (string-append name "-" version ".tar.xz"))
4960 (sha256
4961 (base32
4962 "0draa53xg69i5qhqym85658m45xhwkbiimaldj4sr3703rjgggq1"))))
4963 ;; A snippet here would cause a build failure because of timestamps
4964 ;; reset. See https://bugs.gnu.org/26734.
4965 (inputs
4966 `(("0ad-data" ,0ad-data)
4967 ("curl" ,curl)
4968 ("enet" ,enet)
4969 ("gloox" ,gloox)
4970 ("icu4c" ,icu4c)
4971 ("libpng" ,libpng)
4972 ("libsodium" ,libsodium)
4973 ("libvorbis" ,libvorbis)
4974 ("libxcursor" ,libxcursor)
4975 ("libxml2" ,libxml2)
4976 ("miniupnpc" ,miniupnpc)
4977 ("mozjs-38" ,mozjs-38)
4978 ("openal" ,openal)
4979 ("sdl2" ,sdl2)
4980 ("wxwidgets" ,wxwidgets)
4981 ("zlib" ,zlib)))
4982 (native-inputs
4983 `(("boost" ,boost)
4984 ("cmake" ,cmake-minimal)
4985 ("mesa" ,mesa)
4986 ("pkg-config" ,pkg-config)
4987 ("python-2" ,python-2)))
4988 (build-system gnu-build-system)
4989 (arguments
4990 `(#:make-flags '("config=release" "verbose=1" "-C" "build/workspaces/gcc")
4991 #:phases
4992 (modify-phases %standard-phases
4993 (add-after 'unpack 'delete-bundles
4994 (lambda _
4995 (delete-file-recursively "libraries/source/spidermonkey")
4996 #t))
4997 (add-after 'unpack 'fix-x11-includes
4998 (lambda _
4999 (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
5000 (("<Xlib.h>") "<X11/Xlib.h>"))
5001 (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
5002 (("<Xatom.h>") "<X11/Xatom.h>"))
5003 (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
5004 (("<Xcursor/Xcursor.h>") "<X11/Xcursor/Xcursor.h>"))
5005 #t))
5006 (replace 'configure
5007 (lambda* (#:key inputs outputs #:allow-other-keys)
5008 (let* ((jobs (number->string (parallel-job-count)))
5009 (out (assoc-ref outputs "out"))
5010 (lib (string-append out "/lib"))
5011 (data (string-append out "/share/0ad")))
5012 (setenv "JOBS" (string-append "-j" jobs))
5013 (setenv "CC" "gcc")
5014 (with-directory-excursion "build/workspaces"
5015 (invoke "./update-workspaces.sh"
5016 (string-append "--libdir=" lib)
5017 (string-append "--datadir=" data)
5018 ;; TODO: "--with-system-nvtt"
5019 "--with-system-mozjs38")))))
5020 (delete 'check)
5021 (replace 'install
5022 (lambda* (#:key inputs outputs #:allow-other-keys)
5023 (chdir "binaries")
5024 (let* ((out (assoc-ref outputs "out"))
5025 (bin (string-append out "/bin"))
5026 (lib (string-append out "/lib"))
5027 (data (string-append out "/share/0ad"))
5028 (applications (string-append out "/share/applications"))
5029 (pixmaps (string-append out "/share/pixmaps"))
5030 (0ad-data (assoc-ref inputs "0ad-data")))
5031 ;; data
5032 (copy-recursively "data" data)
5033 (for-each (lambda (file)
5034 (symlink (string-append 0ad-data "/" file)
5035 (string-append data "/" file)))
5036 '("config" "mods/mod" "mods/public" "tools"))
5037 ;; libraries
5038 (for-each (lambda (file)
5039 (install-file file lib))
5040 (find-files "system" "\\.so$"))
5041 ;; binaries
5042 (install-file "system/pyrogenesis" bin)
5043 (with-directory-excursion bin
5044 (symlink "pyrogenesis" "0ad"))
5045 ;; resources
5046 (with-directory-excursion "../build/resources"
5047 (install-file "0ad.desktop" applications)
5048 (install-file "0ad.png" pixmaps))
5049 #t)))
5050 (add-after 'install 'check
5051 (lambda _
5052 (with-directory-excursion "system"
5053 (invoke "./test")))))))
5054 (home-page "https://play0ad.com")
5055 (synopsis "3D real-time strategy game of ancient warfare")
5056 (description "0 A.D. is a real-time strategy (RTS) game of ancient
5057warfare. It's a historically-based war/economy game that allows players to
5058relive or rewrite the history of twelve ancient civilizations, each depicted
5059at their peak of economic growth and military prowess.
5060
50610ad needs a window manager that supports 'Extended Window Manager Hints'.")
5062 (license (list license:bsd-2
5063 license:bsd-3
5064 license:expat
5065 license:gpl2+
5066 license:ibmpl1.0
5067 license:isc
5068 license:lgpl2.1
5069 license:lgpl3
5070 license:mpl2.0
5071 license:zlib))))
5072
5073;; There have been no official releases.
5074(define-public open-adventure
5075 (let* ((commit "d43854f0f6bb8e9eea7fbce80348150e7e7fc34d")
5076 (revision "2"))
5077 (package
5078 (name "open-adventure")
5079 (version (string-append "2.5-" revision "." (string-take commit 7)))
5080 (source (origin
5081 (method git-fetch)
5082 (uri (git-reference
5083 (url "https://gitlab.com/esr/open-adventure")
5084 (commit commit)))
5085 (file-name (string-append name "-" version "-checkout"))
5086 (sha256
5087 (base32
5088 "08bwrvf4axb1rsfd6ia1fddsky9pc1p350vjskhaakg2czc6dsk0"))))
5089 (build-system gnu-build-system)
5090 (arguments
5091 `(#:make-flags (list "CC=gcc")
5092 #:parallel-build? #f ; not supported
5093 #:phases
5094 (modify-phases %standard-phases
5095 (replace 'configure
5096 (lambda* (#:key inputs outputs #:allow-other-keys)
5097 ;; Linenoise is meant to be included, so we have to
5098 ;; copy it into the working directory.
5099 (let* ((linenoise (assoc-ref inputs "linenoise"))
5100 (noisepath (string-append linenoise "/include/linenoise"))
5101 (out (assoc-ref outputs "out")))
5102 (copy-recursively noisepath "linenoise"))
5103 #t))
5104 (add-before 'build 'use-echo
5105 (lambda _
5106 (substitute* "tests/Makefile"
5107 (("/bin/echo") (which "echo")))
5108 #t))
5109 (add-after 'build 'build-manpage
5110 (lambda _
5111 ;; This target is missing a dependency
5112 (substitute* "Makefile"
5113 ((".adoc.6:" line)
5114 (string-append line " advent.adoc")))
5115 (invoke "make" ".adoc.6")))
5116 ;; There is no install target
5117 (replace 'install
5118 (lambda* (#:key outputs #:allow-other-keys)
5119 (let* ((out (assoc-ref outputs "out"))
5120 (bin (string-append out "/bin"))
5121 (man (string-append out "/share/man/man6")))
5122 (install-file "advent" bin)
5123 (install-file "advent.6" man))
5124 #t)))))
5125 (native-inputs
5126 `(("asciidoc" ,asciidoc)
5127 ("linenoise" ,linenoise)
5128 ("python" ,python)
5129 ("python-pyyaml" ,python-pyyaml)))
5130 (home-page "https://gitlab.com/esr/open-adventure")
5131 (synopsis "Colossal Cave Adventure")
5132 (description "The original Colossal Cave Adventure from 1976 was the
5133origin of all text adventures, dungeon-crawl (computer) games, and
5134computer-hosted roleplaying games. This is the last version released by
5135Crowther & Woods, its original authors, in 1995. It has been known as
5136\"adventure 2.5\" and \"430-point adventure\".")
5137 (license license:bsd-2))))
5138
5139(define-public tome4
5140 (package
5141 (name "tome4")
5142 (version "1.6.4")
5143 (synopsis "Single-player, RPG roguelike game set in the world of Eyal")
5144 (source
5145 (origin
5146 (method url-fetch)
5147 (uri (string-append "https://te4.org/dl/t-engine/t-engine4-src-"
5148 version ".tar.bz2"))
5149 (sha256
5150 (base32
5151 "1hrh79aqmvwwd7idlr3lzpdpc9dgm1k5p7w2462chcjvd8vhfhb7"))
5152 (modules '((guix build utils)))
5153 (snippet
5154 '(begin
5155 (substitute* '("src/music.h" "src/tSDL.h")
5156 (("#elif defined(__FreeBSD__)" line)
5157 (string-append
5158 line " || defined(__GNUC__)")))
5159 (substitute* '("src/tgl.h")
5160 (("#include <GL/glext.h>") ""))
5161 #t))))
5162 (build-system gnu-build-system)
5163 (native-inputs
5164 `(("unzip" ,unzip)))
5165 (inputs
5166 `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
5167 ("glu" ,glu)
5168 ("premake4" ,premake4)
5169 ("openal" ,openal)
5170 ("vorbis" ,libvorbis)
5171 ("luajit" ,luajit)))
5172 (arguments
5173 `(#:make-flags '("CC=gcc" "config=release")
5174 ;; XXX: Building in parallel occasionally causes this build failure:
5175 ;; ../src/luajit2/src/host/buildvm.c:73:10: fatal error: buildvm_arch.h:
5176 ;; No such file or directory
5177 #:parallel-build? #f
5178 #:phases (modify-phases %standard-phases
5179 (delete 'bootstrap)
5180 (replace 'configure
5181 (lambda _
5182 (invoke "premake4" "gmake")
5183 #t))
5184 (add-after 'set-paths 'set-sdl-paths
5185 (lambda* (#:key inputs #:allow-other-keys)
5186 (setenv "CPATH"
5187 (string-append (assoc-ref inputs "sdl-union")
5188 "/include/SDL2:"
5189 (getenv "CPATH")))
5190 #t))
5191 (delete 'check)
5192 ;; premake doesn't provide install target
5193 (replace 'install
5194 (lambda* (#:key inputs outputs #:allow-other-keys)
5195 (let* ((out (assoc-ref outputs "out"))
5196 (usr (string-append out "/usr"))
5197 (bin (string-append out "/bin"))
5198 (licenses (string-append out "/share/licenses"))
5199 (documents (string-append out "/share/doc"))
5200 (pixmaps (string-append out "/share/pixmaps"))
5201 (icon "te4-icon.png")
5202 (data (string-append out "/share/" ,name))
5203 (applications (string-append
5204 out "/share/applications"))
5205 (unzip (string-append
5206 (assoc-ref inputs "unzip") "/bin/unzip"))
5207 (wrapper (string-append bin "/" ,name)))
5208 ;; icon
5209 (mkdir-p pixmaps)
5210 (system* unzip "-j"
5211 (string-append
5212 "game/engines/te4-" ,version ".teae")
5213 (string-append
5214 "data/gfx/" icon) "-d" pixmaps)
5215 ;; game executable
5216 (install-file "t-engine" data)
5217 (mkdir-p bin)
5218 (with-output-to-file wrapper
5219 (lambda ()
5220 (display
5221 (string-append
5222 "#!/bin/sh\n"
5223 ;; No bootstrap code found,
5224 ;; defaulting to working directory
5225 ;; for engine code!
5226 "cd " data "\n"
5227 "exec -a tome4 ./t-engine \"$@\"\n"))))
5228 (chmod wrapper #o555)
5229 ;; licenses
5230 (for-each (lambda (file)
5231 (install-file file licenses))
5232 '("COPYING" "COPYING-MEDIA"))
5233 ;; documents
5234 (for-each (lambda (file)
5235 (install-file file documents))
5236 '("CONTRIBUTING" "CREDITS"))
5237 ;; data
5238 (copy-recursively "bootstrap" (string-append
5239 data "/bootstrap"))
5240 (copy-recursively "game" (string-append data "/game"))
5241 ;; launcher
5242 (mkdir-p applications)
5243 (with-output-to-file (string-append applications "/"
5244 ,name ".desktop")
5245 (lambda ()
5246 (display
5247 (string-append
5248 "[Desktop Entry]
5249Name=ToME4
5250Comment=" ,synopsis "\n"
5251"Exec=" ,name "\n"
5252"Icon=" icon "\n"
5253"Terminal=false
5254Type=Application
5255Categories=Game;RolePlaying;\n")))))
5256 #t)))))
5257 (home-page "https://te4.org")
5258 (description "Tales of Maj’Eyal (ToME) RPG, featuring tactical turn-based
5259combat and advanced character building. Play as one of many unique races and
5260classes in the lore-filled world of Eyal, exploring random dungeons, facing
5261challenging battles, and developing characters with your own tailored mix of
5262abilities and powers. With a modern graphical and customisable interface,
5263intuitive mouse control, streamlined mechanics and deep, challenging combat,
5264Tales of Maj’Eyal offers engaging roguelike gameplay for the 21st century.")
5265 (license license:gpl3+)))
5266
5267(define-public tales-of-maj-eyal
5268 (deprecated-package "tales-of-maj-eyal" tome4))
5269
5270(define-public quakespasm
5271 (package
5272 (name "quakespasm")
5273 (version "0.93.1")
5274 (source
5275 (origin
5276 (method url-fetch)
5277 (uri (string-append "mirror://sourceforge/quakespasm/Source/quakespasm-"
5278 version ".tgz"))
5279 (sha256
5280 (base32
5281 "1bimv18f6rzhyjz78yvw2vqr5n0kdqbcqmq7cb3m951xgsxfcgpd"))))
5282 (arguments
5283 `(#:tests? #f
5284 #:make-flags '("CC=gcc"
5285 "MP3LIB=mpg123"
5286 "USE_CODEC_FLAC=1"
5287 "USE_CODEC_MIKMOD=1"
5288 "USE_SDL2=1"
5289 "-CQuake")
5290 #:phases (modify-phases %standard-phases
5291 (delete 'configure)
5292 (add-after 'unpack 'fix-makefile-paths
5293 (lambda* (#:key outputs #:allow-other-keys)
5294 (let ((out (assoc-ref outputs "out")))
5295 (mkdir-p (string-append out "/bin"))
5296 (substitute* "Quake/Makefile"
5297 (("/usr/local/games")
5298 (string-append out "/bin")))
5299 #t))))))
5300 (build-system gnu-build-system)
5301 (inputs `(("libmikmod" ,libmikmod)
5302 ("libvorbis" ,libvorbis)
5303 ("flac" ,flac)
5304 ("mesa" ,mesa)
5305 ("mpg123" ,mpg123)
5306 ("sdl2" ,sdl2)))
5307 (synopsis "First person shooter engine for Quake 1")
5308 (description "Quakespasm is a modern engine for id software's Quake 1.
5309It includes support for 64 bit CPUs, custom music playback, a new sound driver,
5310some graphical niceities, and numerous bug-fixes and other improvements.")
5311 (home-page "http://quakespasm.sourceforge.net/")
5312 (license license:gpl2+)))
5313
5314(define-public vkquake
5315 (package
5316 (inherit quakespasm)
5317 (name "vkquake")
5318 (version "1.01.0")
5319 (source
5320 (origin
5321 (method git-fetch)
5322 (uri (git-reference
5323 (url "https://github.com/Novum/vkQuake.git")
5324 (commit version)))
5325 (file-name (git-file-name name version))
5326 (sha256
5327 (base32 "1iwin8j5kbyrknbkhjgpy8nmm7pxqzr0daa9gn7p38qhg2mh0a39"))))
5328 (arguments
5329 `(#:make-flags
5330 (let ((vulkanlib (string-append (assoc-ref %build-inputs
5331 "vulkan-loader") "/lib")))
5332 (list "CC=gcc"
5333 "MP3LIB=mpg123"
5334 "USE_CODEC_FLAC=1"
5335 "USE_CODEC_MIKMOD=1"
5336 "USE_SDL2=1"
5337 (string-append "LDFLAGS=-Wl,-rpath=" vulkanlib)
5338 "-CQuake"))
5339 #:phases (modify-phases %standard-phases
5340 (delete 'configure)
5341 (add-after 'unpack 'fix-makefile-paths
5342 (lambda* (#:key outputs #:allow-other-keys)
5343 (let ((vulkan (assoc-ref %build-inputs
5344 "vulkan-loader"))
5345 (out (assoc-ref outputs "out")))
5346 (mkdir-p (string-append out "/bin"))
5347 (substitute* "Quake/Makefile" ((" /usr")
5348 (string-append " " out)))
5349 (substitute* "Quake/Makefile" (("/games")
5350 (string-append "/bin")))
5351 (substitute* "Quake/Makefile" (("..VULKAN_SDK.") vulkan))
5352 #t))))
5353 ,@(strip-keyword-arguments '(#:make-flags #:phases)
5354 (package-arguments quakespasm))))
5355 (inputs `(("vulkan-headers" ,vulkan-headers)
5356 ("vulkan-loader" ,vulkan-loader)
5357 ,@(package-inputs quakespasm)))
5358 (description "vkquake is a modern engine for id software's Quake 1.
5359It includes support for 64 bit CPUs, custom music playback, a new sound driver,
5360some graphical niceities, and numerous bug-fixes and other improvements.")
5361 (home-page "https://github.com/Novum/vkQuake")))
5362
5363(define-public yamagi-quake2
5364 (package
5365 (name "yamagi-quake2")
5366 (version "7.10")
5367 (source
5368 (origin
5369 (method url-fetch)
5370 (uri (string-append "https://deponie.yamagi.org/quake2/quake2-"
5371 version ".tar.xz"))
5372 (sha256
5373 (base32
5374 "0psinbg25mysd58k99s1n34w31w5hj1vppb39gdjb0zqi6sl6cps"))))
5375 (build-system gnu-build-system)
5376 (arguments
5377 `(#:tests? #f
5378 #:make-flags
5379 (list "CC=gcc"
5380 ;; link openAL instead of using dlopen at runtime
5381 "DLOPEN_OPENAL=\"no\""
5382 ;; an optional directory where it will look for quake2 data files
5383 ;; in addition to the current working directory
5384 "WITH_SYSTEMWIDE=yes"
5385 "WITH_SYSTEMDIR=\"/opt/quake2\"")
5386 #:phases
5387 (modify-phases %standard-phases
5388 (delete 'configure)
5389 (replace 'install
5390 (lambda* (#:key outputs #:allow-other-keys)
5391 (let ((out (assoc-ref outputs "out")))
5392 (mkdir-p (string-append out "/lib"))
5393 (mkdir-p (string-append out "/bin"))
5394 ;; The yamagi-quake2 binary must be in the same directory
5395 ;; as it's engine libraries, but symlinking it to /bin is okay
5396 ;; https://github.com/yquake2/yquake2/blob/master/stuff/packaging.md
5397 (copy-recursively "release"
5398 (string-append out "/lib/yamagi-quake2"))
5399 (symlink (string-append out "/lib/yamagi-quake2/quake2")
5400 (string-append out "/bin/yamagi-quake2"))
5401 (symlink (string-append out "/lib/yamagi-quake2/q2ded")
5402 (string-append out "/bin/yamagi-q2ded"))))))))
5403 (inputs `(("sdl2" ,sdl2)
5404 ("mesa" ,mesa)
5405 ("libvorbis" ,libvorbis)
5406 ("zlib" ,zlib)
5407 ("openal" ,openal)))
5408 (native-inputs `(("pkg-config" ,pkg-config)))
5409 (synopsis "First person shooter engine based on quake2")
5410 (description "Yamagi Quake II is an enhanced client for id Software's Quake II.
5411The main focus is an unchanged single player experience like back in 1997,
5412thus the gameplay and the graphics are unaltered. However the user may use one
5413of the unofficial retexturing packs. In comparison with the official client,
5414over 1000 bugs were fixed and an extensive code audit done,
5415making Yamagi Quake II one of the most solid Quake II implementations available.")
5416 (home-page "https://www.yamagi.org/quake2/")
5417 (license (list license:gpl2+ ; game and server
5418 (license:non-copyleft ; info-zip
5419 "file://LICENSE"
5420 "See Info-Zip section.")
5421 license:public-domain)))) ; stb
5422
5423(define-public nudoku
5424 (package
5425 (name "nudoku")
5426 (version "1.0.0")
5427 (source (origin
5428 (method url-fetch)
5429 (uri (string-append "https://github.com/jubalh/nudoku/"
5430 "releases/download/" version
5431 "/nudoku-" version ".tar.xz"))
5432 (sha256
5433 (base32
5434 "0nr2j2z07nxk70s8xnmmpzccxicf7kn5mbwby2kg6aq8paarjm8k"))))
5435 (build-system gnu-build-system)
5436 (inputs `(("ncurses" ,ncurses)))
5437 (home-page "https://jubalh.github.io/nudoku/")
5438 (synopsis "Sudoku for your terminal")
5439 (description "Nudoku is a ncurses-based Sudoku game for your terminal.")
5440 (license license:gpl3+)))
5441
5442(define-public the-butterfly-effect
5443 (package
5444 (name "the-butterfly-effect")
5445 (version "0.9.3.1")
5446 (source
5447 (origin
5448 (method git-fetch)
5449 (uri (git-reference
5450 (url "https://github.com/the-butterfly-effect/tbe.git")
5451 (commit (string-append "v" version))))
5452 (file-name (git-file-name name version))
5453 (sha256
5454 (base32
5455 "1ag2cp346f9bz9qy6za6q54id44d2ypvkyhvnjha14qzzapwaysj"))))
5456 (build-system gnu-build-system)
5457 (arguments
5458 `(#:phases
5459 (modify-phases %standard-phases
5460 (delete 'configure)
5461 ;; There is no "install" phase. By default, tbe is installed
5462 ;; in the build directory. Provide our own installation.
5463 (replace 'install
5464 (lambda* (#:key outputs #:allow-other-keys)
5465 (let* ((out (assoc-ref outputs "out"))
5466 (bin (string-append out "/bin"))
5467 (share (string-append out "/share")))
5468 (install-file "usr/games/tbe" bin)
5469 (mkdir-p share)
5470 (copy-recursively "usr/share" share)
5471 #t))))
5472 ;; Test suite requires a running Xorg server. Even when
5473 ;; provided, it fails with "D-Bus library appears to be
5474 ;; incorrectly set up; failed to read machine uuid: Failed to
5475 ;; open "/etc/machine-id": No such file or directory" along
5476 ;; with multiple "QPainter:: ... Painter not active" warnings.
5477 #:tests? #f))
5478 (inputs
5479 `(("qtbase" ,qtbase)
5480 ("qtsvg" ,qtsvg)))
5481 (native-inputs
5482 `(("cmake" ,cmake-minimal)
5483 ("gettext-minimal" ,gettext-minimal)
5484 ("qttools" ,qttools)))
5485 (synopsis "Realistic physics puzzle game")
5486 (description "The Butterfly Effect (tbe) is a game that uses
5487realistic physics simulations to combine lots of simple mechanical
5488elements to achieve a simple goal in the most complex way possible.")
5489 (home-page "http://the-butterfly-effect.org/")
5490 ;; Main license is GPL2-only. However, artwork is distributed
5491 ;; under various licenses, listed here.
5492 (license (list license:gpl2 license:public-domain license:expat
5493 license:cc-by-sa3.0 license:gpl3+ license:wtfpl2))))
5494
5495(define-public pioneer
5496 (package
5497 (name "pioneer")
5498 (version "20190203")
5499 (source (origin
5500 (method git-fetch)
5501 (uri (git-reference
5502 (url "https://github.com/pioneerspacesim/pioneer.git")
5503 (commit version)))
5504 (file-name (git-file-name name version))
5505 (sha256
5506 (base32
5507 "1g34wvgyvz793dhm1k64kl82ib0cavkbg0f2p3fp05b457ycljff"))))
5508 (build-system cmake-build-system)
5509 (native-inputs
5510 `(("pkg-config" ,pkg-config)))
5511 (inputs
5512 `(("assimp" ,assimp)
5513 ("curl" ,curl)
5514 ("freetype" ,freetype)
5515 ("glew" ,glew)
5516 ("glu" ,glu)
5517 ("libpng" ,libpng)
5518 ("libsigc++" ,libsigc++)
5519 ("libvorbis" ,libvorbis)
5520 ("lua" ,lua-5.2) ;not compatible with 5.3
5521 ("mesa" ,mesa)
5522 ("sdl" ,(sdl-union (list sdl2 sdl2-image)))))
5523 (arguments
5524 `(#:tests? #f ;tests are broken
5525 #:configure-flags (list "-DUSE_SYSTEM_LIBLUA:BOOL=YES"
5526 (string-append "-DPIONEER_DATA_DIR="
5527 %output "/share/games/pioneer"))))
5528 (home-page "http://pioneerspacesim.net")
5529 (synopsis "Game of lonely space adventure")
5530 (description
5531 "Pioneer is a space adventure game set in our galaxy at the turn of the
553231st century. The game is open-ended, and you are free to eke out whatever
5533kind of space-faring existence you can think of. Look for fame or fortune by
5534exploring the millions of star systems. Turn to a life of crime as a pirate,
5535smuggler or bounty hunter. Forge and break alliances with the various
5536factions fighting for power, freedom or self-determination. The universe is
5537whatever you make of it.")
5538 (license license:gpl3)))
5539
5540(define-public badass
5541 (let ((commit "3c3cd669b4fc8f73a102e3702788f7b28dc47dbb")
5542 (revision "0"))
5543 (package
5544 (name "badass")
5545 (version (git-version "0.0" revision commit))
5546 (source (origin
5547 (method git-fetch)
5548 (uri (git-reference
5549 (url "https://github.com/umayr/badass.git")
5550 (commit commit)))
5551 (file-name (git-file-name name version))
5552 (sha256
5553 (base32
5554 "05c9vdcb5ym3z0n5ll3v39mw4yl9jcjnlydmn0yl89ai9pv71zb6"))))
5555 (build-system go-build-system)
5556 (arguments
5557 '(#:import-path "github.com/umayr/badass"))
5558 (synopsis "Hacking contribution graphs in git")
5559 (description
5560 "Badass generates false commits for a range of dates, essentially
5561hacking the gamification of contribution graphs on platforms such as
5562Github or Gitlab.")
5563 (home-page "https://github.com/umayr/badass")
5564 (license license:expat))))
5565
5566(define-public colobot
5567 (package
5568 (name "colobot")
5569 (version "0.1.12-alpha")
5570 (source
5571 (origin
5572 (method git-fetch)
5573 (uri (git-reference
5574 (url "https://github.com/colobot/colobot.git")
5575 (commit (string-append "colobot-gold-" version))
5576 (recursive? #t))) ;for "data/" subdir
5577 (file-name (git-file-name name version))
5578 (sha256
5579 (base32
5580 "1c181cclkrnspgs07lvndg2c81cjq3smkv7qim8c470cj88rcrp2"))))
5581 (build-system cmake-build-system)
5582 (arguments
5583 `(#:tests? #f ;no test
5584 #:phases
5585 (modify-phases %standard-phases
5586 (add-after 'unpack 'make-git-checkout-writable
5587 (lambda _
5588 (for-each make-file-writable (find-files "."))
5589 #t))
5590 (add-after 'unpack 'fix-directories
5591 (lambda _
5592 (substitute* "CMakeLists.txt"
5593 (("(\\$\\{CMAKE_INSTALL_PREFIX\\})/games" _ prefix)
5594 (string-append prefix "/bin"))
5595 (("(\\$\\{CMAKE_INSTALL_PREFIX\\}/share)/games/colobot" _ prefix)
5596 (string-append prefix "/colobot")))
5597 #t))
5598 (add-after 'fix-directories 'install-music
5599 ;; Retrieve and install music files.
5600 (lambda* (#:key inputs #:allow-other-keys)
5601 ;; Installation process tries to download music files using
5602 ;; "wget" if not already present. Since we are going another
5603 ;; route, skip "wget" command check.
5604 (substitute* "data/music/CMakeLists.txt"
5605 (("find_program\\(WGET wget\\)") ""))
5606 ;; Populate "music/" directory.
5607 (let ((data (assoc-ref inputs "colobot-music")))
5608 (invoke "tar" "-xvf" data "-Cdata/music"))
5609 #t)))))
5610 (native-inputs
5611 `(("colobot-music"
5612 ,(origin
5613 (method url-fetch)
5614 (uri (string-append "https://colobot.info/files/music/"
5615 "colobot-music_ogg_" version ".tar.gz"))
5616 (sha256
5617 (base32
5618 "1s86cd36rwkff329mb1ay1wi5qqyi35564ppgr3f4qqz9wj9vs2m"))))
5619 ("gettext" ,gettext-minimal)
5620 ("librsvg" ,librsvg)
5621 ("po4a" ,po4a)
5622 ("python" ,python-wrapper)))
5623 (inputs
5624 `(("boost" ,boost)
5625 ("glew" ,glew)
5626 ("libogg" ,libogg)
5627 ("libpng" ,libpng)
5628 ("libsndfile" ,libsndfile)
5629 ("libvorbis" ,libvorbis)
5630 ("openal" ,openal)
5631 ("physfs" ,physfs)
5632 ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-ttf)))))
5633 (synopsis "Educational programming strategy game")
5634 (description "Colobot: Gold Edition is a real-time strategy game, where
5635you can program your units (bots) in a language called CBOT, which is similar
5636to C++ and Java. Your mission is to find a new planet to live and survive.
5637You can save humanity and get programming skills!")
5638 (home-page "https://colobot.info")
5639 (license license:gpl3+)))
5640
5641(define-public gzdoom
5642 (package
5643 (name "gzdoom")
5644 (version "3.7.2")
5645 (source (origin
5646 (method url-fetch)
5647 (uri
5648 (string-append "https://zdoom.org/files/gzdoom/src/gzdoom-src-g"
5649 version ".zip"))
5650 (sha256
5651 (base32
5652 "0182f160m8d0c3nywjw3dxvnz93xjs4cn8akx7137cha4s05wdq7"))
5653 (patches (search-patches "gzdoom-search-in-installed-share.patch"))
5654 (modules '((guix build utils)))
5655 (snippet
5656 '(begin
5657 (delete-file-recursively "bzip2")
5658 (delete-file-recursively "game-music-emu")
5659 (delete-file-recursively "jpeg")
5660 (delete-file-recursively "zlib")
5661 #t))))
5662 (arguments
5663 '(#:tests? #f
5664 #:configure-flags
5665 (let ((out (assoc-ref %outputs "out")))
5666 (list
5667 (string-append
5668 "-DCMAKE_CXX_FLAGS:="
5669 "-DSHARE_DIR=\\\"" out "/share/\\\" "
5670 "-DGUIX_OUT_PK3=\\\"" out "/share/games/doom\\\"")
5671 ;; look for libraries at buildtime instead of
5672 ;; dynamically finding them at runtime
5673 "-DDYN_OPENAL=OFF"
5674 "-DDYN_FLUIDSYNTH=OFF"
5675 "-DDYN_GTK=OFF"
5676 "-DDYN_MPG123=OFF"
5677 "-DDYN_SNDFILE=OFF"))
5678 #:phases
5679 (modify-phases %standard-phases
5680 (add-before 'configure 'fix-referenced-paths
5681 (lambda* (#:key inputs outputs #:allow-other-keys)
5682 (let ((fluid-3 (assoc-ref inputs "fluid-3"))
5683 (timidity++ (assoc-ref inputs "timidity++"))
5684 (out (assoc-ref outputs "out")))
5685
5686 (substitute*
5687 "src/CMakeLists.txt"
5688 (("COMMAND /bin/sh")
5689 (string-append "COMMAND " (which "sh"))))
5690
5691 (substitute*
5692 "src/sound/mididevices/music_fluidsynth_mididevice.cpp"
5693 (("/usr/share/sounds/sf2/FluidR3_GM.sf2")
5694 (string-append fluid-3 "/share/soundfonts/FluidR3Mono_GM.sf3")))
5695
5696 (substitute*
5697 "src/sound/mididevices/music_timiditypp_mididevice.cpp"
5698 (("exename = \"timidity\"")
5699 (string-append "exename = \"" timidity++ "/bin/timidity\"")))
5700 #t))))))
5701 (build-system cmake-build-system)
5702 (inputs `(("bzip2" ,bzip2)
5703 ("fluid-3" ,fluid-3)
5704 ("fluidsynth" ,fluidsynth-1) ;XXX: try using 2.x when updating
5705 ("gtk+3" ,gtk+)
5706 ("libgme" ,libgme)
5707 ("libjpeg" ,libjpeg)
5708 ("libsndfile" ,libsndfile)
5709 ("mesa" ,mesa)
5710 ("mpg123" ,mpg123)
5711 ("openal" ,openal)
5712 ("sdl2" ,sdl2)
5713 ("timidity++" ,timidity++)
5714 ("zlib" ,zlib)))
5715 (native-inputs `(("pkg-config" ,pkg-config)
5716 ("unzip" ,unzip)))
5717 (synopsis "Modern Doom 2 source port")
5718 (description "GZdoom is a port of the Doom 2 game engine, with a modern
5719renderer. It improves modding support with ZDoom's advanced mapping features
5720and the new ZScript language. In addition to Doom, it supports Heretic, Hexen,
5721Strife, Chex Quest, and fan-created games like Harmony, Hacx and Freedoom.")
5722 (home-page "https://zdoom.org/index")
5723 ;; The source uses x86 assembly
5724 (supported-systems '("x86_64-linux" "i686-linux"))
5725 (license (list license:gpl3+ ; gzdoom game
5726 license:lgpl3+ ; gzdoom renderer
5727 license:expat ; gdtoa
5728 (license:non-copyleft ; modified dumb
5729 "file://dumb/licence.txt"
5730 "Dumb license, explicitly GPL compatible.")))))
5731
5732(define-public odamex
5733 (package
5734 (name "odamex")
5735 (version "0.8.0")
5736 (source
5737 (origin
5738 (method url-fetch)
5739 (uri (string-append
5740 "mirror://sourceforge/odamex/Odamex/" version "/"
5741 "odamex-src-" version ".tar.gz"))
5742 (sha256
5743 (base32
5744 "1sh6lqj7vsdmnqz17hw0b6vy7xx6dp41k2sdw99ympsfa2xd1d2j"))))
5745 (build-system cmake-build-system)
5746 (arguments `(#:tests? #f)) ; no tests.
5747 (inputs
5748 `(("sdl" ,sdl)
5749 ("sdl-mixer" ,sdl-mixer)
5750 ("zlib" ,zlib)
5751 ("libpng" ,libpng)
5752 ("alsa-lib" ,alsa-lib)))
5753 (home-page "https://odamex.net/")
5754 (synopsis "Multiplayer Doom port")
5755 (description "Odamex is a modification of the Doom engine that
5756allows players to easily join servers dedicated to playing Doom
5757online.")
5758 (license license:gpl2+)))
5759
5760(define-public chocolate-doom
5761 (package
5762 (name "chocolate-doom")
5763 (version "3.0.0")
5764 (source (origin
5765 (method url-fetch)
5766 (uri (string-append "https://www.chocolate-doom.org/downloads/"
5767 version
5768 "/chocolate-doom-"
5769 version
5770 ".tar.gz"))
5771 (sha256
5772 (base32
5773 "1f6sw6qa9z0a70dsjh5cs45fkyyxw68s7vkqlykihz8cjcisdbkk"))))
5774 (build-system gnu-build-system)
5775 (inputs `(("sdl2-net" ,sdl2-net)
5776 ("sdl2-mixer" , sdl2-mixer)
5777 ("sdl2" ,sdl2)))
5778 (native-inputs
5779 `(("pkg-config" ,pkg-config)))
5780 (synopsis "Doom source port preserving the look, feel, and bugs of vanilla
5781Doom")
5782 (description
5783 "Chocolate Doom takes a different approach to other source ports. Its
5784aim is to accurately reproduce the experience of playing Vanilla Doom. It is
5785a conservative, historically accurate Doom source port, which is compatible
5786with the thousands of mods and levels that were made before the Doom source
5787code was released. Rather than flashy new graphics, Chocolate Doom's main
5788features are its accurate reproduction of the game as it was played in the
57891990s. The project is developed around a carefully-considered philosophy that
5790intentionally restricts which features may be added (and rejects any that
5791affect gameplay).")
5792 (home-page "https://www.chocolate-doom.org/wiki/index.php/Chocolate_Doom")
5793 (license license:gpl2)))
5794
5795(define-public crispy-doom
5796 (package
5797 (inherit chocolate-doom)
5798 (name "crispy-doom")
5799 (version "5.6.3")
5800 (source (origin
5801 (method git-fetch)
5802 (uri (git-reference
5803 (url "https://github.com/fabiangreffrath/crispy-doom.git")
5804 (commit (string-append "crispy-doom-" version))))
5805 (file-name (git-file-name name version))
5806 (sha256
5807 (base32 "0f319979wqfgm4pvsa6y5clg30p55l441kmrr8db0p5smyv3x2s4"))))
5808 (native-inputs
5809 (append
5810 (package-native-inputs chocolate-doom)
5811 `(("automake" ,automake)
5812 ("autoreconf" ,autoconf))))
5813 (arguments
5814 `(#:phases
5815 (modify-phases %standard-phases
5816 (replace 'bootstrap
5817 ;; the autogen.sh script in the source tree doesn't work
5818 (lambda _ (invoke "autoreconf" "-vif"))))))
5819 (synopsis "Limit-removing enhanced-resolution Doom source port based on
5820Chocolate Doom")
5821 (description
5822 "Crispy Doom is a friendly fork of Chocolate Doom that provides a higher
5823display resolution, removes the static limits of the Doom engine and offers
5824further optional visual, tactical and physical enhancements while remaining
5825entirely config file, savegame, netplay and demo compatible with the
5826original.")
5827 (home-page "https://www.chocolate-doom.org/wiki/index.php/Crispy_Doom")))
5828
5829(define-public fortune-mod
5830 (package
5831 (name "fortune-mod")
5832 (version "2.6.2")
5833 (source
5834 (origin
5835 (method git-fetch)
5836 (uri (git-reference
5837 (url "https://github.com/shlomif/fortune-mod")
5838 (commit (string-append "fortune-mod-" version))))
5839 (file-name (git-file-name name version))
5840 (sha256
5841 (base32
5842 "11xff87s8ifw2dqs90n0rjq0psv4i7ykybygmibsqjj7id3xxw4c"))))
5843 (build-system cmake-build-system)
5844 (arguments
5845 `(#:test-target "check"
5846 #:phases
5847 (modify-phases %standard-phases
5848 (add-after 'unpack 'fix-build-env
5849 (lambda* (#:key inputs #:allow-other-keys)
5850 (use-modules (guix build utils))
5851 (let* ((cmake-rules (assoc-ref inputs "cmake-rules")))
5852 (copy-file cmake-rules
5853 (string-append "fortune-mod/cmake/"
5854 (strip-store-file-name cmake-rules)))
5855 (chdir "fortune-mod")
5856 ;; TODO: Valgrind tests fail for some reason.
5857 ;; Similar issue: https://github.com/shlomif/fortune-mod/issues/21 (?)
5858 (delete-file "tests/t/valgrind.t")
5859 #t)))
5860 (add-after 'install 'fix-install-directory
5861 (lambda* (#:key outputs #:allow-other-keys)
5862 ;; Move binary from "games/" to "bin/" and remove the latter. This
5863 ;; is easier than patching CMakeLists.txt since the tests hard-code
5864 ;; the location as well.
5865 (let* ((out (assoc-ref outputs "out"))
5866 (bin (string-append out "/bin"))
5867 (games (string-append out "/games")))
5868 (rename-file (string-append games "/fortune")
5869 (string-append bin "/fortune"))
5870 (rmdir games)
5871 #t))))))
5872 (inputs `(("recode" ,recode)))
5873 (native-inputs
5874 `(("perl" ,perl)
5875 ;; The following is only needed for tests.
5876 ("perl-file-find-object" ,perl-file-find-object)
5877 ("perl-test-differences" ,perl-test-differences)
5878 ("perl-class-xsaccessor" ,perl-class-xsaccessor)
5879 ("perl-io-all" ,perl-io-all)
5880 ("perl-test-runvalgrind" ,perl-test-runvalgrind)
5881 ("cmake-rules"
5882 ,(origin
5883 (method url-fetch)
5884 (uri (string-append "https://bitbucket.org/shlomif/shlomif-cmake-modules/"
5885 "raw/c505713d7a7cda608f97f01577e5868a711b883e/"
5886 "shlomif-cmake-modules/Shlomif_Common.cmake"))
5887 (sha256
5888 (base32 "0kx9s1qqhhzprp1w3b67xmsns0n0v506bg5hgrshxaxpy6lqiwb2"))))))
5889 (home-page "http://www.shlomifish.org/open-source/projects/fortune-mod/")
5890 (synopsis "The Fortune Cookie program from BSD games")
5891 (description "Fortune is a command-line utility which displays a random
5892quotation from a collection of quotes.")
5893 (license license:bsd-4)))
5894
5895(define xonotic-data
5896 (package
5897 (name "xonotic-data")
5898 (version "0.8.2")
5899 (source
5900 (origin
5901 (method url-fetch)
5902 (uri (string-append "http://dl.xonotic.org/xonotic-"
5903 version ".zip"))
5904 (file-name (string-append name "-" version ".zip"))
5905 (sha256
5906 (base32
5907 "1mcs6l4clvn7ibfq3q69k2p0z6ww75rxvnngamdq5ic6yhq74bx2"))))
5908 (build-system trivial-build-system)
5909 (native-inputs
5910 `(("unzip" ,unzip)))
5911 (arguments
5912 `(#:modules ((guix build utils))
5913 #:builder
5914 (begin
5915 (use-modules (guix build utils))
5916 (let* ((out (assoc-ref %outputs "out"))
5917 (xonotic (string-append out "/share/xonotic"))
5918 (source (assoc-ref %build-inputs "source"))
5919 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
5920 (copy-file source (string-append ,name "-" ,version ".zip"))
5921 (invoke unzip (string-append ,name "-" ,version ".zip"))
5922 (mkdir-p out)
5923 (mkdir-p xonotic)
5924 (chdir "Xonotic")
5925 (copy-recursively "data"
5926 (string-append xonotic "/data"))
5927 (copy-recursively "server"
5928 (string-append xonotic "/server"))
5929 (install-file "key_0.d0pk" xonotic)))))
5930 (home-page "http://xonotic.org")
5931 (synopsis "Data files for Xonotic")
5932 (description
5933 "Xonotic-data provides the data files required by the game Xonotic.")
5934 (license (list license:gpl2+
5935 (license:x11-style "file://server/rcon.pl")))))
5936
5937(define-public xonotic
5938 (package
5939 (name "xonotic")
5940 (version "0.8.2")
5941 (source
5942 (origin
5943 (method url-fetch)
5944 (uri (string-append "http://dl.xonotic.org/xonotic-"
5945 version "-source.zip"))
5946 (file-name (string-append name "-" version ".zip"))
5947 (sha256
5948 (base32
5949 "0axxw04fyz6jlfqd0kp7hdrqa0li31sx1pbipf2j5qp9wvqicsay"))))
5950 (build-system gnu-build-system)
5951 (arguments
5952 `(#:configure-flags (list (string-append "--prefix="
5953 (assoc-ref %outputs "out"))
5954 "--disable-rijndael")
5955 #:phases
5956 (modify-phases %standard-phases
5957 (add-before 'configure 'make-darkplaces
5958 (lambda* (#:key outputs #:allow-other-keys)
5959 (let* ((out (assoc-ref outputs "out"))
5960 (sharedir (string-append out "/share/xonotic/")))
5961 (invoke "make" "-C" "source/darkplaces"
5962 (string-append "DP_FS_BASEDIR="
5963 sharedir)
5964 "DP_LINK_TO_LIBJPEG=1"
5965 "DP_SOUND_API=ALSA"
5966 "CC=gcc"
5967 "-f" "makefile"
5968 "cl-release")
5969 (invoke "make" "-C" "source/darkplaces"
5970 (string-append "DP_FS_BASEDIR="
5971 sharedir)
5972 "DP_LINK_TO_LIBJPEG=1"
5973 "DP_SOUND_API=ALSA"
5974 "CC=gcc"
5975 "-f" "makefile"
5976 "sdl-release")
5977 (invoke "make" "-C" "source/darkplaces"
5978 (string-append "DP_FS_BASEDIR="
5979 sharedir)
5980 "DP_LINK_TO_LIBJPEG=1"
5981 "DP_SOUND_API=ALSA"
5982 "CC=gcc"
5983 "-f" "makefile"
5984 "sv-release"))))
5985 (add-before 'configure 'bootstrap
5986 (lambda _
5987 (chdir "source/d0_blind_id")
5988 (invoke "sh" "autogen.sh")))
5989 (add-after 'build 'install-desktop-entry
5990 (lambda* (#:key outputs #:allow-other-keys)
5991 ;; Add .desktop files for the 2 variants and the symlink
5992 (let* ((output (assoc-ref outputs "out"))
5993 (apps (string-append output "/share/applications")))
5994 (mkdir-p apps)
5995 (with-output-to-file
5996 (string-append apps "/xonotic-glx.desktop")
5997 (lambda _
5998 (format #t
5999 "[Desktop Entry]~@
6000 Name=xonotic-glx~@
6001 Comment=Xonotic glx~@
6002 Exec=~a/bin/xonotic-glx~@
6003 TryExec=~@*~a/bin/xonotic-glx~@
6004 Icon=xonotic~@
6005 Categories=Game~@
6006 Type=Application~%"
6007 output)))
6008 (with-output-to-file
6009 (string-append apps "/xonotic-sdl.desktop")
6010 (lambda _
6011 (format #t
6012 "[Desktop Entry]~@
6013 Name=xonotic-sdl~@
6014 Comment=Xonotic sdl~@
6015 Exec=~a/bin/xonotic-sdl~@
6016 TryExec=~@*~a/bin/xonotic-sdl~@
6017 Icon=xonotic~@
6018 Categories=Game~@
6019 Type=Application~%"
6020 output)))
6021 (with-output-to-file
6022 (string-append apps "/xonotic.desktop")
6023 (lambda _
6024 (format #t
6025 "[Desktop Entry]~@
6026 Name=xonotic~@
6027 Comment=Xonotic~@
6028 Exec=~a/bin/xonotic-glx~@
6029 TryExec=~@*~a/bin/xonotic~@
6030 Icon=xonotic~@
6031 Categories=Game~@
6032 Type=Application~%"
6033 output)))
6034 #t)))
6035 (add-after 'install-desktop-entry 'install-icons
6036 (lambda* (#:key outputs #:allow-other-keys)
6037 (let ((out (assoc-ref outputs "out")))
6038 (with-directory-excursion "../../misc/logos/icons_png/"
6039 (for-each
6040 (lambda (file)
6041 (let* ((size (string-filter char-numeric? file))
6042 (icons (string-append out "/share/icons/hicolor/"
6043 size "x" size "/apps")))
6044 (mkdir-p icons)
6045 (copy-file file (string-append icons "/xonotic.png"))))
6046 '("xonotic_16.png" "xonotic_22.png" "xonotic_24.png"
6047 "xonotic_32.png" "xonotic_48.png" "xonotic_64.png"
6048 "xonotic_128.png" "xonotic_256.png" "xonotic_512.png"))))))
6049 (add-after 'install-icons 'install-binaries
6050 (lambda* (#:key outputs #:allow-other-keys)
6051 (let ((out (assoc-ref outputs "out")))
6052 (define (install src dst)
6053 (let ((dst (string-append out dst)))
6054 (mkdir-p (dirname dst))
6055 (copy-file src dst)))
6056 (mkdir-p (string-append out "/bin"))
6057 (install "../darkplaces/darkplaces-dedicated"
6058 "/bin/xonotic-dedicated")
6059 (install "../darkplaces/darkplaces-glx"
6060 "/bin/xonotic-glx")
6061 (install "../darkplaces/darkplaces-sdl"
6062 "/bin/xonotic-sdl")
6063 ;; Provide a default xonotic executable, defaulting to SDL.
6064 (symlink (string-append out "/bin/xonotic-sdl")
6065 (string-append out "/bin/xonotic"))
6066 #t)))
6067 (add-after 'install-binaries 'install-data
6068 (lambda* (#:key outputs inputs #:allow-other-keys)
6069 (let* ((out (assoc-ref outputs "out"))
6070 (data (assoc-ref inputs "xonotic-data")))
6071 (symlink (string-append data "/share/xonotic")
6072 (string-append out "/share/xonotic"))
6073 #t)))
6074 (add-after 'install-binaries 'wrap-binaries
6075 (lambda* (#:key outputs inputs #:allow-other-keys)
6076 ;; Curl and libvorbis need to be wrapped so that we get
6077 ;; sound and networking.
6078 (let* ((out (assoc-ref outputs "out"))
6079 (bin (string-append out "/bin/xonotic"))
6080 (bin-sdl (string-append out "/bin/xonotic-sdl"))
6081 (bin-glx (string-append out "/bin/xonotic-glx"))
6082 (bin-dedicated (string-append out "/bin/xonotic-dedicated"))
6083 (curl (assoc-ref inputs "curl"))
6084 (vorbis (assoc-ref inputs "libvorbis")))
6085 (wrap-program bin
6086 `("LD_LIBRARY_PATH" ":" prefix
6087 (,(string-append curl "/lib:" vorbis "/lib"))))
6088 (wrap-program bin-sdl
6089 `("LD_LIBRARY_PATH" ":" prefix
6090 (,(string-append curl "/lib:" vorbis "/lib"))))
6091 (wrap-program bin-glx
6092 `("LD_LIBRARY_PATH" ":" prefix
6093 (,(string-append curl "/lib:" vorbis "/lib"))))
6094 (wrap-program bin-dedicated
6095 `("LD_LIBRARY_PATH" ":" prefix
6096 (,(string-append curl "/lib:" vorbis "/lib"))))
6097 #t))))))
6098 (inputs
6099 `(("xonotic-data" ,xonotic-data)
6100 ("alsa-lib" ,alsa-lib)
6101 ("curl" ,curl)
6102 ("libjpeg" ,libjpeg)
6103 ("libmodplug" ,libmodplug)
6104 ("libvorbis" ,libvorbis)
6105 ("libogg" ,libogg)
6106 ("libxpm" ,libxpm)
6107 ("libxxf86dga" ,libxxf86dga)
6108 ("libxxf86vm" ,libxxf86vm)
6109 ("libx11" ,libx11)
6110 ("libxext" ,libxext)
6111 ("libxau" ,libxau)
6112 ("libxdmcp" ,libxdmcp)
6113 ("mesa" ,mesa)
6114 ("glu" ,glu)
6115 ("freetype" ,freetype)
6116 ("sdl2" ,sdl2)
6117 ("libpng" ,libpng)
6118 ("hicolor-icon-theme" ,hicolor-icon-theme)))
6119 (native-inputs
6120 `(("unzip" ,unzip)
6121 ("autoconf" ,autoconf)
6122 ("automake" ,automake)
6123 ("pkg-config" ,pkg-config)
6124 ("libtool" ,libtool)
6125 ("gmp" ,gmp)))
6126 (home-page "http://xonotic.org")
6127 (synopsis "Fast-paced first-person shooter game")
6128 (description
6129 "Xonotic is a free, fast-paced first-person shooter.
6130The project is geared towards providing addictive arena shooter
6131gameplay which is all spawned and driven by the community itself.
6132Xonotic is a direct successor of the Nexuiz project with years of
6133development between them, and it aims to become the best possible
6134open-source FPS of its kind.")
6135 (license (list license:gpl2+
6136 license:bsd-3 ; /source/d0_blind_id folder and others
6137 (license:x11-style "" "See file rcon.pl.")))))
6138
6139(define-public frotz
6140 (package
6141 (name "frotz")
6142 (version "2.44")
6143 (source (origin
6144 (method url-fetch)
6145 (uri (list (string-append
6146 "http://www.ifarchive.org/if-archive/infocom/interpreters/"
6147 "frotz/frotz-" version ".tar.gz")
6148 (string-append
6149 "ftp://ftp.ifarchive.org/if-archive/infocom/interpreters/"
6150 "frotz/frotz-" version ".tar.gz")))
6151 (sha256
6152 (base32
6153 "1v735xr3blznac8fnwa27s1vhllx4jpz7kw7qdw1bsfj6kq21v3k"))))
6154 (build-system gnu-build-system)
6155 (arguments
6156 `(#:tests? #f ; there are no tests
6157 #:phases
6158 (modify-phases %standard-phases
6159 (delete 'configure)
6160 (add-before 'build 'curses
6161 (lambda _
6162 (substitute* "Makefile"
6163 (("lcurses") "lncurses"))
6164 #t))
6165 (replace 'install
6166 (lambda* (#:key outputs #:allow-other-keys)
6167 (let* ((out (assoc-ref outputs "out"))
6168 (bin (string-append out "/bin"))
6169 (man (string-append out "/share/man/man6")))
6170 (install-file "frotz" bin)
6171 (mkdir-p man)
6172 (install-file "doc/frotz.6" man)
6173 #t))))))
6174 (inputs `(("libmodplug" ,libmodplug)
6175 ("libsamplerate" ,libsamplerate)
6176 ("libsndfile" ,libsndfile)
6177 ("libvorbis" ,libvorbis)
6178 ("ncurses" ,ncurses)))
6179 (synopsis "Portable Z-machine interpreter (ncurses version) for text adventure games")
6180 (description "Frotz is an interpreter for Infocom games and other Z-machine
6181games in the text adventure/interactive fiction genre. This version of Frotz
6182complies with standard 1.0 of Graham Nelson's specification. It plays all
6183Z-code games V1-V8, including V6, with sound support through libao, and uses
6184ncurses for text display.")
6185 (home-page "http://frotz.sourceforge.net")
6186 (license license:gpl2+)))
6187
6188(define-public frotz-dumb-terminal
6189 (package
6190 (name "frotz-dumb-terminal")
6191 (version "2.44")
6192 (source (origin
6193 (method url-fetch)
6194 (uri (list (string-append
6195 "http://www.ifarchive.org/if-archive/infocom/interpreters/"
6196 "frotz/frotz-" version ".tar.gz")
6197 (string-append
6198 "ftp://ftp.ifarchive.org/if-archive/infocom/interpreters/"
6199 "frotz/frotz-" version ".tar.gz")))
6200 (sha256
6201 (base32
6202 "1v735xr3blznac8fnwa27s1vhllx4jpz7kw7qdw1bsfj6kq21v3k"))))
6203 (build-system gnu-build-system)
6204 (arguments
6205 `(#:tests? #f ; there are no tests
6206 #:phases
6207 (modify-phases %standard-phases
6208 (delete 'configure)
6209 (replace 'build
6210 (lambda _
6211 (invoke "make" "dumb")))
6212 (replace 'install
6213 (lambda* (#:key outputs #:allow-other-keys)
6214 (let* ((out (assoc-ref outputs "out"))
6215 (bin (string-append out "/bin"))
6216 (man (string-append out "/share/man/man6")))
6217 (install-file "dfrotz" bin)
6218 (mkdir-p man)
6219 (install-file "doc/dfrotz.6" man)
6220 #t))))))
6221 (synopsis "Portable Z-machine dumb interpreter for text adventure games")
6222 (description "Frotz is an interpreter for Infocom games and
6223other Z-machine games in the text adventure/interactive fiction genre.
6224dfrotz is the dumb interface version. You get no screen control; everything
6225is just printed to the terminal line by line. The terminal handles all the
6226scrolling. Maybe you'd like to experience what it's like to play Adventure on
6227a teletype. A much cooler use for compiling Frotz with the dumb interface is
6228that it can be wrapped in CGI scripting, PHP, and the like to allow people
6229to play games on webpages. It can also be made into a chat bot.")
6230 (home-page "http://frotz.sourceforge.net")
6231 (license license:gpl2+)))
6232
6233(define-public frotz-sdl
6234 (let* ((commit "4de8c34f2116fff554af6216c30ec9d41bf50b24"))
6235 (package
6236 (name "frotz-sdl")
6237 (version "2.45pre")
6238 (source (origin
6239 (method git-fetch)
6240 (uri (git-reference
6241 (url "https://gitlab.com/DavidGriffith/frotz")
6242 (commit commit)))
6243 (sha256
6244 (base32
6245 "18ms21pcrl7ipcnyqnf8janamkryzx78frsgd9kfk67jvbj0z2k8"))
6246 (file-name (git-file-name name version))))
6247 (build-system gnu-build-system)
6248 (arguments
6249 `(#:tests? #f ; there are no tests
6250 #:phases
6251 (modify-phases %standard-phases
6252 (delete 'configure)
6253 (add-before 'build 'patch-makefile
6254 (lambda _
6255 (substitute* "Makefile"
6256 (("lcurses") "lncurses")
6257 (("^BUILD_DATE_TIME =.*$")
6258 "BUILD_DATE_TIME = \"2.45pre-20180907.00000\"\n"))
6259 #t))
6260 (replace 'build
6261 (lambda _
6262 (invoke "make" "sdl")))
6263 (replace 'install
6264 (lambda* (#:key outputs #:allow-other-keys)
6265 (let* ((out (assoc-ref outputs "out"))
6266 (bin (string-append out "/bin"))
6267 (man (string-append out "/share/man/man6")))
6268 (install-file "sfrotz" bin)
6269 (mkdir-p man)
6270 (install-file "doc/sfrotz.6" man)
6271 #t))))))
6272 (native-inputs
6273 `(("pkg-config" ,pkg-config)
6274 ("which" ,which)
6275 ("perl" ,perl)))
6276 (inputs `(("sdl2" ,sdl2)
6277 ("sdl2-mixer" ,sdl2-mixer)
6278 ("libmodplug" ,libmodplug)
6279 ("libsamplerate" ,libsamplerate)
6280 ("libsndfile" ,libsndfile)
6281 ("libvorbis" ,libvorbis)
6282 ("ncurses" ,ncurses)
6283 ("freetype" ,freetype)
6284 ("libjpeg-turbo" ,libjpeg-turbo)))
6285 (synopsis "Portable Z-machine interpreter (SDL port) for text adventure games")
6286 (description "Frotz is an interpreter for Infocom games and other Z-machine
6287games in the text adventure/interactive fiction genre. This version of Frotz
6288using SDL fully supports all these versions of the Z-Machine including the
6289graphical version 6. Graphics and sound are created through the use of the SDL
6290libraries. AIFF sound effects and music in MOD and OGG formats are supported
6291when packaged in Blorb container files or optionally from individual files.")
6292 (home-page "http://frotz.sourceforge.net")
6293 (license license:gpl2+))))
6294
6295(define-public libmanette
6296 (package
6297 (name "libmanette")
6298 (version "0.2.3")
6299 (source (origin
6300 (method url-fetch)
6301 (uri (string-append "mirror://gnome/sources/libmanette/"
6302 (version-major+minor version) "/"
6303 "libmanette-" version ".tar.xz"))
6304 (sha256
6305 (base32
6306 "1zxh7jn2zg7hivmal5zxam6fxvjsd1w6hlw0m2kysk76b8anbw60"))))
6307 (build-system meson-build-system)
6308 (native-inputs
6309 `(("glib" ,glib "bin") ; for glib-compile-resources
6310 ("gobject-introspection" ,gobject-introspection)
6311 ("pkg-config" ,pkg-config)
6312 ("vala" ,vala)))
6313 (inputs
6314 `(("libevdev" ,libevdev)
6315 ("libgudev" ,libgudev)))
6316 (home-page "https://wiki.gnome.org/Apps/Games")
6317 (synopsis "Game controller library")
6318 (description "Libmanette is a small GObject library giving you simple
6319access to game controllers. It supports the de-facto standard gamepads as
6320defined by the W3C standard Gamepad specification or as implemented by the SDL
6321GameController.")
6322 (license license:lgpl2.1+)))
6323
6324(define-public quadrapassel
6325 (package
6326 (name "quadrapassel")
6327 (version "3.31.3")
6328 (source (origin
6329 (method url-fetch)
6330 (uri (string-append "mirror://gnome/sources/quadrapassel/"
6331 (version-major+minor version) "/"
6332 "quadrapassel-" version ".tar.xz"))
6333 (sha256
6334 (base32
6335 "08i01nsgfb502xzzrrcxxbs7awb0j1h4c08vmj0j18ipa1sz8vb8"))))
6336 (build-system glib-or-gtk-build-system)
6337 (native-inputs
6338 `(("desktop-file-utils" ,desktop-file-utils) ;for desktop-file-validate
6339 ("gettext" ,gnu-gettext)
6340 ("glib" ,glib "bin") ;for glib-compile-resources
6341 ("itstool" ,itstool)
6342 ("libxml2" ,libxml2) ;for xmllint
6343 ("pkg-config" ,pkg-config)
6344 ("vala" ,vala)))
6345 (inputs
6346 `(("clutter" ,clutter)
6347 ("clutter-gtk" ,clutter-gtk)
6348 ("gtk+" ,gtk+)
6349 ("libcanberra" ,libcanberra)
6350 ("libmanette" ,libmanette)
6351 ("librsvg" ,librsvg)))
6352 (home-page "https://wiki.gnome.org/Apps/Quadrapassel")
6353 (synopsis "GNOME version of Tetris")
6354 (description "Quadrapassel comes from the classic falling-block game,
6355Tetris. The goal of the game is to create complete horizontal lines of
6356blocks, which will disappear. The blocks come in seven different shapes made
6357from four blocks each: one straight, two L-shaped, one square, and two
6358S-shaped. The blocks fall from the top center of the screen in a random
6359order. You rotate the blocks and move them across the screen to drop them in
6360complete lines. You score by dropping blocks fast and completing lines. As
6361your score gets higher, you level up and the blocks fall faster.")
6362 (license license:gpl2+)))
6363
6364(define-public endless-sky
6365 (package
6366 (name "endless-sky")
6367 (version "0.9.10")
6368 (source
6369 (origin
6370 (method git-fetch)
6371 (uri (git-reference
6372 (url "https://github.com/endless-sky/endless-sky")
6373 (commit (string-append "v" version))))
6374 (file-name (git-file-name name version))
6375 (sha256
6376 (base32
6377 "1wax9qhxakydg6bs92d1jy2fki1n9r0wkps1np02y0pvm1fl189i"))))
6378 (build-system scons-build-system)
6379 (arguments
6380 `(#:scons ,scons-python2
6381 #:scons-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
6382 #:tests? #f ; no tests
6383 #:phases
6384 (modify-phases %standard-phases
6385 (add-after 'unpack 'patch-resource-locations
6386 (lambda* (#:key outputs #:allow-other-keys)
6387 (substitute* "source/Files.cpp"
6388 (("/usr/local/")
6389 (string-append (assoc-ref outputs "out") "/")))
6390 #t))
6391 (add-after 'unpack 'patch-scons
6392 (lambda _
6393 (substitute* "SConstruct"
6394 ;; Keep environmental variables
6395 (("Environment\\(\\)")
6396 "Environment(ENV = os.environ)")
6397 ;; Install into %out/bin
6398 (("games\"") "bin\""))
6399 #t)))))
6400 (inputs
6401 `(("glew" ,glew)
6402 ("libjpeg" ,libjpeg-turbo)
6403 ("libmad" ,libmad)
6404 ("libpng" ,libpng)
6405 ("openal" ,openal)
6406 ("sdl2" ,sdl2)))
6407 (home-page "https://endless-sky.github.io/")
6408 (synopsis "2D space trading and combat game")
6409 (description "Endless Sky is a 2D space trading and combat game. Explore
6410other star systems. Earn money by trading, carrying passengers, or completing
6411missions. Use your earnings to buy a better ship or to upgrade the weapons and
6412engines on your current one. Blow up pirates. Take sides in a civil war. Or
6413leave human space behind and hope to find friendly aliens whose culture is more
6414civilized than your own.")
6415 (license (list license:gpl3+
6416 license:cc-by-sa3.0
6417 license:cc-by-sa4.0
6418 license:public-domain))))
6419
6420(define-public stepmania
6421 (package
6422 (name "stepmania")
6423 (version "5.1.0-b2")
6424 (source
6425 (origin
6426 (method git-fetch)
6427 (uri (git-reference
6428 (url "https://github.com/stepmania/stepmania.git")
6429 (commit (string-append "v" version))))
6430 (file-name (git-file-name name version))
6431 (sha256
6432 (base32
6433 "0a7y9l7xm510vgnpmj1is7p9m6d6yd0fcaxrjcickz295k5w3rdn"))
6434 (modules '((guix build utils)))
6435 (snippet
6436 '(begin
6437 ;; Remove song files, which are licensed under a non-commercial
6438 ;; clause, and a course pointing to them.
6439 (for-each delete-file-recursively
6440 '("Songs/StepMania 5/Goin' Under"
6441 "Songs/StepMania 5/MechaTribe Assault"
6442 "Songs/StepMania 5/Springtime"))
6443 (for-each delete-file '("Courses/Default/Jupiter.crs"
6444 "Courses/Default/Jupiter.png"))
6445 ;; Unbundle libpng.
6446 (substitute* "extern/CMakeLists.txt"
6447 (("include\\(CMakeProject-png.cmake\\)") ""))
6448 (delete-file-recursively "extern/libpng")
6449 #t))))
6450 (build-system cmake-build-system)
6451 (arguments
6452 `(#:tests? #f ;FIXME: couldn't find how to run tests
6453 #:build-type "Release"
6454 #:out-of-source? #f ;for the 'install-desktop' phase
6455 #:configure-flags
6456 (list "-DWITH_SYSTEM_FFMPEG=1"
6457 ;; SSE instructions are available on Intel systems only.
6458 ,@(if (any (cute string-prefix? <> (or (%current-target-system)
6459 (%current-system)))
6460 '("x64_64" "i686"))
6461 '()
6462 '("-DWITH_SSE2=NO"))
6463 ;; Configuration cannot find GTK2 without the two following
6464 ;; flags.
6465 (string-append "-DGTK2_GDKCONFIG_INCLUDE_DIR="
6466 (assoc-ref %build-inputs "gtk+")
6467 "/lib/gtk-2.0/include")
6468 (string-append "-DGTK2_GLIBCONFIG_INCLUDE_DIR="
6469 (assoc-ref %build-inputs "glib")
6470 "/lib/glib-2.0/include"))
6471 #:phases
6472 (modify-phases %standard-phases
6473 (add-after 'unpack 'ensure-application-files-can-be-found
6474 (lambda* (#:key outputs #:allow-other-keys)
6475 (let ((out (assoc-ref outputs "out")))
6476 (substitute* "src/arch/LoadingWindow/LoadingWindow_Gtk.cpp"
6477 (("RageFileManagerUtil::sDirOfExecutable \\+ \"/\" \\+ \"GtkModule.so\"")
6478 (string-append "\"" out
6479 "/share/stepmania/GtkModule.so\"")))
6480 (substitute* "src/arch/ArchHooks/ArchHooks_Unix.cpp"
6481 (("Root = sDirOfExecutable")
6482 (string-append "Root = \"" out "/share/stepmania/\""))
6483 (("sDirOfExecutable \\+ \"/(Packages|Songs)\"" _ dir)
6484 (string-append "\"" out "/share/stepmania/" dir "\"")))
6485 (substitute* "src/RageFileManager.cpp"
6486 (("RageFileManagerUtil::sDirOfExecutable \\+ \"/\"")
6487 (string-append "\"" out "/share/stepmania/\""))))
6488 #t))
6489 (add-after 'unpack 'fix-install-subdir
6490 ;; Installation would be done in "%out/stepmania-X.Y", but we
6491 ;; prefer the more common layout "%out/share/stepmania".
6492 (lambda _
6493 (substitute* "src/CMakeLists.txt"
6494 (("\"stepmania-.*?\"") "\"share/stepmania\""))
6495 #t))
6496 (add-after 'unpack 'unbundle-libpng
6497 (lambda* (#:key inputs #:allow-other-keys)
6498 (substitute* "src/CMakeLists.txt"
6499 (("\\$\\{SM_EXTERN_DIR\\}/libpng/include")
6500 (string-append (assoc-ref inputs "libpng") "/include")))
6501 #t))
6502 (add-after 'install 'install-executable
6503 (lambda* (#:key outputs #:allow-other-keys)
6504 (let* ((out (assoc-ref outputs "out"))
6505 (bin (string-append out "/bin"))
6506 (exe (string-append out "/share/stepmania/stepmania")))
6507 (mkdir-p bin)
6508 (symlink exe (string-append bin "/stepmania"))
6509 #t)))
6510 (add-after 'install-executable 'install-desktop
6511 (lambda* (#:key outputs #:allow-other-keys)
6512 (let* ((out (assoc-ref outputs "out"))
6513 (share (string-append out "/share"))
6514 (applications (string-append share "/applications"))
6515 (icons (string-append share "/icons")))
6516 (install-file "stepmania.desktop" applications)
6517 (mkdir-p icons)
6518 (copy-recursively "icons" icons)
6519 #t)))
6520 ;; Move documentation in a more usual place, i.e.,
6521 ;; "%out/share/doc/stepmania/".
6522 (add-after 'install-desktop 'install-doc
6523 (lambda* (#:key outputs #:allow-other-keys)
6524 (let* ((out (assoc-ref outputs "out"))
6525 (share (string-append out "/share")))
6526 (with-directory-excursion share
6527 (mkdir-p "doc")
6528 (symlink "../stepmania/Docs" "doc/stepmania"))
6529 #t))))))
6530 (native-inputs
6531 `(("pkg-config" ,pkg-config)
6532 ("yasm" ,yasm)))
6533 (inputs
6534 `(("alsa-lib" ,alsa-lib)
6535 ;; Per upstream, StepMania is only guaranteed to work with a very
6536 ;; specific FFmpeg version, which is included in the repository as
6537 ;; a Git submodule. This particular version requirement usually
6538 ;; changes every few years.
6539 ("ffmpeg" ,ffmpeg-for-stepmania)
6540 ("glib" ,glib)
6541 ("glew" ,glew)
6542 ("gtk+" ,gtk+-2)
6543 ("jsoncpp" ,jsoncpp)
6544 ("libpng" ,libpng)
6545 ("libjpeg" ,libjpeg-8)
6546 ("libmad" ,libmad)
6547 ("libogg" ,libogg)
6548 ("libva" ,libva)
6549 ("libvorbis" ,libvorbis)
6550 ("libxinerama" ,libxinerama)
6551 ("libxrandr" ,libxrandr)
6552 ("mesa" ,mesa)
6553 ("pcre" ,pcre)
6554 ("pulseaudio" ,pulseaudio)
6555 ("sdl" ,sdl2)
6556 ("udev" ,eudev)
6557 ("zlib" ,zlib)))
6558 (synopsis "Advanced rhythm game designed for both home and arcade use")
6559 (description "StepMania is a dance and rhythm game. It features 3D
6560graphics, keyboard and dance pad support, and an editor for creating your own
6561steps.
6562
6563This package provides the core application, but no song is shipped. You need
6564to download and install them in @file{$HOME/.stepmania-X.Y/Songs} directory.")
6565 (home-page "https://www.stepmania.com")
6566 (license license:expat)))
6567
6568(define-public btanks
6569 (package
6570 (name "btanks")
6571 (version "0.9.8083")
6572 (source
6573 (origin
6574 (method url-fetch)
6575 (uri (string-append "mirror://sourceforge/btanks/btanks-source/"
6576 "btanks-" version ".tar.bz2"))
6577 (sha256
6578 (base32
6579 "0ha35kxc8xlbg74wsrbapfgxvcrwy6psjkqi7c6adxs55dmcxliz"))))
6580 (build-system scons-build-system)
6581 (arguments
6582 `(#:tests? #f ; there are none
6583 #:scons ,scons-python2
6584 #:scons-flags (list (string-append "prefix=" (assoc-ref %outputs "out")))
6585 #:phases
6586 (modify-phases %standard-phases
6587 (add-after 'unpack 'replace-removed-scons-syntax
6588 (lambda _
6589 (substitute* "SConstruct"
6590 (("Options") "Variables")
6591 (("opts.Add\\(BoolOption.*") "opts.Add('gcc_visibility', 'gcc visibility', 'true')")
6592 (("opts.Add\\(EnumOption.*") "opts.Add('mode', 'build mode', 'release')"))
6593 #t))
6594 (add-after 'set-paths 'set-sdl-paths
6595 (lambda* (#:key inputs #:allow-other-keys)
6596 (setenv "CPATH"
6597 (string-append (assoc-ref inputs "sdl")
6598 "/include/SDL:"
6599 (or (getenv "CPATH") "")))
6600 #t))
6601 (add-after 'unpack 'fix-compilation-errors
6602 (lambda _
6603 (substitute* "mrt/base_file.h"
6604 (("#include <string>" m)
6605 (string-append m "\n#include <sys/types.h>")))
6606 (substitute* '("engine/sl08/sl08.h"
6607 "engine/sl08/sl08.py")
6608 (("signal = NULL") "signal = 0")
6609 (("object\\(NULL\\)") "object(0)")
6610 (("func\\(NULL\\)") "func(0)")
6611 ((" connect\\(signal_ref\\)")
6612 " this->connect(signal_ref)"))
6613 (substitute* "math/range_list.h"
6614 ((" lower_bound\\(value\\)")
6615 " this->lower_bound(value)")
6616 ((" erase\\(i\\)")
6617 " this->erase(i)"))
6618 (substitute* "clunk/source.cpp"
6619 (("using namespace clunk" m)
6620 (string-append "# define pow10f(x) exp10f(x)\n" m)))
6621 #t))
6622 (add-after 'unpack 'find-lua
6623 (lambda _
6624 (substitute* "engine/SConscript"
6625 (("lua5.1") "lua-5.1")
6626 (("bt_libs.append\\(lua\\)")
6627 "bt_libs.append(\"lua\")"))
6628 #t)))))
6629 (inputs
6630 `(("expat" ,expat)
6631 ("glu" ,glu)
6632 ("libsmpeg" ,libsmpeg-with-sdl1)
6633 ("libvorbis" ,libvorbis)
6634 ("lua51" ,lua-5.1)
6635 ("sdl" ,(sdl-union (list sdl
6636 sdl-mixer
6637 sdl-image
6638 sdl-ttf)))
6639 ("zlib" ,zlib)))
6640 (native-inputs
6641 `(("pkg-config" ,pkg-config)
6642 ("zip" ,zip)))
6643 (home-page "http://btanks.sourceforge.net")
6644 (synopsis "Multiplayer tank battle game")
6645 (description "Battle Tanks (also known as \"btanks\") is a funny battle
6646game, where you can choose one of three vehicles and eliminate your enemy
6647using the whole arsenal of weapons. It has original cartoon-like graphics and
6648cool music, it’s fun and dynamic, it has several network modes for deathmatch
6649and cooperative.")
6650 ;; Some parts (e.g. mrt/b64.cpp) are LGPLv2.1+, but the whole package is
6651 ;; released under GPLv2 or later. It comes with extra exceptions for the
6652 ;; developers.
6653 (license (list license:gpl2+ license:lgpl2.1+))))
6654
6655(define-public battle-tanks
6656 (deprecated-package "battle-tanks" btanks))
6657
6658(define-public slingshot
6659 (package
6660 (name "slingshot")
6661 (version "0.9")
6662 (source
6663 (origin
6664 (method git-fetch)
6665 (uri (git-reference
6666 (url "https://github.com/ryanakca/slingshot.git")
6667 (commit version)))
6668 (file-name (git-file-name name version))
6669 (sha256
6670 (base32
6671 "19m8b6nsi786bc6gmkp185mwri3r5y249gjmqd5qsc23nnfhgrs1"))))
6672 (build-system python-build-system)
6673 (arguments
6674 `(#:python ,python-2))
6675 (inputs
6676 `(("python-pygame" ,python2-pygame)))
6677 (home-page "https://github.com/ryanakca/slingshot")
6678 (synopsis "Simple 2D shooting strategy game set in space")
6679 (description "Slingshot is a two-dimensional strategy game where two
6680players attempt to shoot one another through a section of space populated by
6681planets. The main feature of the game is that the shots, once fired, are
6682affected by the gravity of the planets.")
6683 (license license:gpl2+)))
6684
6685(define-public 4dtris
6686 (package
6687 (name "4dtris")
6688 (version "0.4.3")
6689 (source
6690 (origin
6691 (method url-fetch)
6692 (uri (string-append "https://launchpad.net/4dtris/"
6693 (version-major+minor version)
6694 "/" version "/+download/4dtris_"
6695 version ".orig.tar.gz"))
6696 (sha256
6697 (base32
6698 "1nfkhcm0l89jyw8yr65na97g4l385zhjf7whkyg47c3v5sdqq2g7"))))
6699 (build-system gnu-build-system)
6700 (arguments
6701 `(#:phases
6702 (modify-phases %standard-phases
6703 (add-after 'unpack 'fix-install-directories
6704 (lambda* (#:key outputs #:allow-other-keys)
6705 (let ((out (assoc-ref outputs "out")))
6706 (substitute* "Makefile.in"
6707 (("bindir = /usr/games")
6708 (string-append "bindir = " out "/bin"))
6709 (("/usr/share/applications")
6710 (string-append out "/share/applications"))
6711 (("/usr/share/games/4dtris")
6712 (string-append out "/share/4dtris"))))
6713 #t))
6714 (add-after 'set-paths 'set-sdl-paths
6715 (lambda* (#:key inputs #:allow-other-keys)
6716 (setenv "CPATH"
6717 (string-append (assoc-ref inputs "sdl")
6718 "/include/SDL:"
6719 (or (getenv "CPATH") "")))
6720 #t)))))
6721 (inputs
6722 `(("fontconfig" ,fontconfig)
6723 ("freeglut" ,freeglut)
6724 ("sdl" ,(sdl-union (list sdl sdl-ttf)))))
6725 (home-page "https://launchpad.net/4dtris/")
6726 (synopsis "4D Tetris")
6727 (description "4D-TRIS is an alteration of the well-known Tetris game. The
6728game field is extended to 4D space, which has to filled up by the gamer with
67294D hyper cubes.")
6730 (license license:gpl3)))
6731
6732(define-public arx-libertatis
6733 (package
6734 (name "arx-libertatis")
6735 (version "1.1.2")
6736 (source
6737 (origin
6738 (method url-fetch)
6739 (uri (string-append "http://arx-libertatis.org/files/arx-libertatis-"
6740 version ".tar.xz"))
6741 (sha256
6742 (base32
6743 "0hjfxlsmp8wwqr06snv2dlly2s79ra0d9aw49gkp6rn8m50b9bc2"))))
6744 (build-system cmake-build-system)
6745 (outputs '("out" "installer"))
6746 (arguments
6747 '(#:tests? #f ; No tests.
6748 #:phases
6749 (modify-phases %standard-phases
6750 (add-after 'unpack 'fix-install-helper-paths
6751 (lambda* (#:key inputs #:allow-other-keys)
6752 (let ((p7zip (assoc-ref inputs "p7zip"))
6753 (innoextract (assoc-ref inputs "innoextract"))
6754 (wget (assoc-ref inputs "wget"))
6755 (zenity (assoc-ref inputs "zenity")))
6756 (substitute* "scripts/arx-install-data"
6757 (("have innoextract")
6758 (string-append "have " innoextract "/bin/innoextract"))
6759 (("then innoextract")
6760 (string-append "then " innoextract "/bin/innoextract"))
6761 (("else innoextract")
6762 (string-append "else " innoextract "/bin/innoextract"))
6763 (("for _extract_zip_sz in 7za 7z")
6764 (string-append "for _extract_zip_sz in " p7zip "/bin/7za"))
6765 (("else if have 7z")
6766 (string-append "else if have " p7zip "/bin/7za"))
6767 (("7z x -tiso")
6768 (string-append p7zip "/bin/7z x -tiso"))
6769 (("if have wget")
6770 (string-append "if have " wget "/bin/wget"))
6771 (("wget -O")
6772 (string-append wget "/bin/wget -O"))
6773 (("for backend in \\$preferred zenity")
6774 (string-append "for backend in $preferred " zenity "/bin/zenity"))
6775 (("zenity +--title")
6776 (string-append zenity "/bin/zenity --title"))
6777 (("^zenity\\)")
6778 (string-append zenity "/bin/zenity)"))))
6779 #t))
6780 (add-after 'install 'move-installer
6781 (lambda* (#:key outputs #:allow-other-keys)
6782 (let ((out (assoc-ref outputs "out"))
6783 (installer (assoc-ref outputs "installer")))
6784 (mkdir-p (string-append installer "/bin"))
6785 (rename-file (string-append out "/bin/arx-install-data")
6786 (string-append installer "/bin/arx-install-data"))))))))
6787 (inputs
6788 `(("sdl" ,sdl) ; Switch to sdl2 in >1.1.2.
6789 ("mesa" ,mesa) ; Switch to libepoxy in >1.1.2.
6790 ("glew" ,glew)
6791 ("openal" ,openal)
6792 ("zlib" ,zlib)
6793 ("boost" ,boost)
6794 ("glm" ,glm)
6795 ("freetype" ,freetype)
6796 ;; The following are only needed by the arx-install-data script.
6797 ("p7zip" ,p7zip) ; Install-helper uses it to extract ISO and .cab archives.
6798 ("zenity" ,zenity) ; GUI for install-helper.
6799 ("wget" ,wget) ; Used by the install-helper to download the patch.
6800 ;; The install-helper needs it to extract the patch.
6801 ("innoextract" ,innoextract)))
6802 (home-page "https://arx-libertatis.org/")
6803 (synopsis "Port of Arx Fatalis, a first-person role-playing game")
6804 (description "Arx Libertatis is a cross-platform port of Arx Fatalis, a 2002
6805first-person role-playing game / dungeon crawler developed by Arkane Studios.
6806This port however does not include the game data, so you need to obtain a copy
6807of the original Arx Fatalis or its demo to play Arx Libertatis. Arx Fatalis
6808features crafting, melee and ranged combat, as well as a unique casting system
6809where the player draws runes in real time to effect the desired spell.")
6810 (license license:gpl3+)))
6811
6812(define-public edgar
6813 (package
6814 (name "edgar")
6815 (version "1.32")
6816 (source
6817 (origin
6818 (method url-fetch)
6819 (uri
6820 (string-append "https://github.com/riksweeney/edgar/releases/download/"
6821 version "/edgar-" version "-1.tar.gz"))
6822 (sha256
6823 (base32 "12lam6qcscc5ima1w2ksd1cvsvxbd17h6mqkgsqpzx8ap43p2r5p"))))
6824 (build-system gnu-build-system)
6825 (arguments '(#:tests? #f ; there are no tests
6826 #:make-flags
6827 (list "CC=gcc"
6828 (string-append "PREFIX=" (assoc-ref %outputs "out"))
6829 (string-append "BIN_DIR=" (assoc-ref %outputs "out") "/bin/"))
6830 #:phases
6831 (modify-phases %standard-phases
6832 (delete 'configure)
6833 (add-before 'build 'fix-env
6834 (lambda* (#:key inputs #:allow-other-keys)
6835 (setenv "CPATH"
6836 (string-append (assoc-ref inputs "sdl2-union")
6837 "/include/SDL2:"
6838 (or (getenv "CPATH") "")))
6839 #t)))))
6840 (inputs
6841 `(("sdl2-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
6842 ("zlib" ,zlib)))
6843 (native-inputs
6844 `(("pkg-config" ,pkg-config)
6845 ("autoconf" ,autoconf)
6846 ("automake" ,automake)
6847 ("gnu-gettext" ,gnu-gettext)
6848 ("libtool" ,libtool)
6849 ("which" ,which)))
6850 (synopsis "2d action platformer game")
6851 (description "The Legend of Edgar is a 2D platform game with a persistent world.
6852When Edgar's father fails to return home after venturing out one dark and stormy night,
6853Edgar fears the worst: he has been captured by the evil sorcerer who lives in
6854a fortress beyond the forbidden swamp.")
6855 (home-page "https://www.parallelrealities.co.uk/games/edgar/")
6856 (license license:gpl2+)))
6857
6858(define-public the-legend-of-edgar
6859 (deprecated-package "the-legend-of-edgar" edgar))
6860
6861(define-public openclonk
6862 (package
6863 (name "openclonk")
6864 (version "8.1")
6865 (source (origin
6866 (method url-fetch)
6867 (uri (string-append
6868 "https://www.openclonk.org/builds/release/" version "/"
6869 "openclonk-" version "-src.tar.bz2"))
6870 (sha256
6871 (base32
6872 "0imkqjp8lww5p0cnqf4k4mb2v682mnsas63qmiz17rspakr7fxik"))))
6873 (build-system cmake-build-system)
6874 (arguments
6875 `(#:configure-flags '("-DAudio_TK=OpenAL")
6876 #:test-target "tests"
6877 #:phases
6878 (modify-phases %standard-phases
6879 (add-after 'unpack 'prepare-gmock
6880 (lambda* (#:key inputs #:allow-other-keys)
6881 (mkdir "gmock")
6882 (copy-recursively (assoc-ref inputs "googlemock") "gmock")
6883 (substitute* "tests/CMakeLists.txt"
6884 (("/usr/src/gmock")
6885 (string-append (getcwd) "/gmock/googlemock"))
6886 (("/usr/src/gtest")
6887 (string-append (getcwd) "/gmock/googletest"))
6888 (("PATH_SUFFIXES \"src\" \"gtest\"")
6889 "PATH_SUFFIXES \"src\""))
6890 #t))
6891 (add-after 'unpack 'adjust-backward-cpp-includes
6892 (lambda _
6893 ;; XXX: The bundled backward-cpp exports a CMake "interface"
6894 ;; that includes external libraries such as libdl from glibc.
6895 ;; By default, CMake interface includes are treated as "system
6896 ;; headers", and GCC behaves poorly when glibc is passed as a
6897 ;; system header (causing #include_next failures).
6898
6899 ;; Here we prevent targets that consume the Backward::Backward
6900 ;; interface from treating it as "system includes".
6901 (substitute* "CMakeLists.txt"
6902 (("target_link_libraries\\((.+) Backward::Backward\\)" all target)
6903 (string-append "set_property(TARGET " target " PROPERTY "
6904 "NO_SYSTEM_FROM_IMPORTED true)\n"
6905 all)))
6906 #t))
6907 (add-after 'unpack 'add-libiberty
6908 ;; Build fails upon linking executables without this.
6909 (lambda _
6910 (substitute* "thirdparty/backward-cpp/BackwardConfig.cmake"
6911 (("set\\(LIBBFD_LIBRARIES (.*?)\\)" _ libraries)
6912 (string-append "set(LIBBFD_LIBRARIES " libraries " iberty)")))
6913 #t))
6914 (add-after 'add-libiberty 'lax-freealut-requirement
6915 ;; TODO: We provide freealut 1.1.0, but pkg-config somehow detects
6916 ;; it as 1.0.1. Force minimal version.
6917 (lambda _
6918 (substitute* "cmake/FindAudio.cmake"
6919 (("freealut>=1.1.0") "freealut>=1.0.1"))
6920 #t))
6921 (add-after 'lax-freealut-requirement 'fix-directories
6922 ;; Prefer "$out/share/openclonk" over
6923 ;; "$out/share/games/openclonk". Also install "openclonk"
6924 ;; binary in "bin/", not "games/".
6925 (lambda _
6926 (substitute* "CMakeLists.txt"
6927 (("share/games/openclonk") "share/openclonk")
6928 (("TARGETS openclonk DESTINATION games")
6929 "TARGETS openclonk DESTINATION bin"))
6930 #t)))))
6931 (native-inputs
6932 `(("googlemock" ,(package-source googletest))
6933 ("googletest" ,googletest)
6934 ("pkg-config" ,pkg-config)))
6935 (inputs
6936 `(("freealut" ,freealut)
6937 ("freetype" ,freetype)
6938 ("glew" ,glew)
6939 ("libiberty" ,libiberty)
6940 ("libjpeg" ,libjpeg-turbo)
6941 ("libogg" ,libogg)
6942 ("libpng" ,libpng)
6943 ("libvorbis" ,libvorbis)
6944 ("libxrandr" ,libxrandr)
6945 ("mesa" ,mesa)
6946 ("miniupnpc" ,miniupnpc)
6947 ("openal" ,openal)
6948 ("qtbase" ,qtbase)
6949 ("readline" ,readline)
6950 ("sdl" ,sdl2)
6951 ("tinyxml" ,tinyxml)
6952 ("zlib" ,zlib)))
6953 (home-page "https://www.openclonk.org/")
6954 (synopsis
6955 "Multiplayer action game where you control small and nimble humanoids")
6956 (description "OpenClonk is a multiplayer action/tactics/skill game. It is
6957often referred to as a mixture of The Settlers and Worms. In a simple 2D
6958antfarm-style landscape, the player controls a crew of Clonks, small but
6959robust humanoid beings. The game encourages free play but the normal goal is
6960to either exploit valuable resources from the earth by building a mine or
6961fight each other on an arena-like map.")
6962 ;; Software as a whole is licensed under ISC, artwork under CC-BY.
6963 (license (list license:isc license:cc-by3.0))))
6964
6965(define-public flare-engine
6966 (package
6967 (name "flare-engine")
6968 (version "1.11")
6969 (source (origin
6970 (method git-fetch)
6971 (uri (git-reference
6972 (url "https://github.com/flareteam/flare-engine.git")
6973 (commit (string-append "v" version))))
6974 (file-name (git-file-name name version))
6975 (sha256
6976 (base32
6977 "1mqr1s72p5bdh4kq2a8hg72dk8lwnddicjnd2cdp1sbfa9lmjym8"))))
6978 (build-system cmake-build-system)
6979 (arguments
6980 `(#:tests? #f ;no test
6981 #:configure-flags '("-DBINDIR=bin" "-DDATADIR=share/flare")))
6982 (inputs
6983 `(("hicolor-icon-theme" ,hicolor-icon-theme)
6984 ("python" ,python-wrapper)
6985 ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
6986 (home-page "http://www.flarerpg.org/")
6987 (synopsis "Action Roleplaying Engine")
6988 (description "Flare (Free Libre Action Roleplaying Engine) is a simple
6989game engine built to handle a very specific kind of game: single-player 2D
6990action RPGs.")
6991 (license license:gpl3+)))
6992
6993(define-public flare-game
6994 (package
6995 (name "flare-game")
6996 (version "1.11")
6997 (source (origin
6998 (method git-fetch)
6999 (uri (git-reference
7000 (url "https://github.com/flareteam/flare-game.git")
7001 (commit (string-append "v" version))))
7002 (file-name (git-file-name name version))
7003 (sha256
7004 (base32
7005 "0bd5g7sd89a9176ilr408hdqzdfv4j7wj0idd685c1n6s01c3h6p"))))
7006 (build-system cmake-build-system)
7007 (arguments
7008 `(#:tests? #f ;no test
7009 #:configure-flags '("-DDATADIR=share/flare")
7010 #:phases
7011 (modify-phases %standard-phases
7012 ;; Flare expects the mods to be located in the same folder.
7013 ;; Yet, "default" mod is in the engine, whereas the others
7014 ;; are in the current package. Merge everything here with
7015 ;; a symlink.
7016 (add-after 'install 'add-default-mod
7017 (lambda* (#:key inputs outputs #:allow-other-keys)
7018 (let* ((out (assoc-ref outputs "out"))
7019 (mods (string-append out "/share/flare/mods")))
7020 (with-directory-excursion mods
7021 (symlink (string-append (assoc-ref inputs "flare-engine")
7022 "/share/flare/mods/default")
7023 "default")))
7024 #t))
7025 (add-after 'install 'install-executable
7026 ;; The package only provides assets for the game, the
7027 ;; executable coming from "flare-engine". Since more than
7028 ;; one game may use the engine, we create a new executable,
7029 ;; "flare-game", which launches the engine with appropriate
7030 ;; parameters.
7031 (lambda* (#:key inputs outputs #:allow-other-keys)
7032 (let* ((out (assoc-ref outputs "out"))
7033 (bash (string-append (assoc-ref inputs "bash")
7034 "/bin/bash"))
7035 (flare (string-append (assoc-ref inputs "flare-engine")
7036 "/bin/flare"))
7037 (script (string-append out "/bin/flare-game")))
7038 (mkdir-p (dirname script))
7039 (call-with-output-file script
7040 (lambda (port)
7041 (format port
7042 "#!~a
7043exec ~a --data-path=~a/share/flare --mods=empyrean_campaign~%"
7044 bash
7045 flare
7046 out)))
7047 (chmod script #o755))
7048 #t)))))
7049 (inputs
7050 `(("flare-engine" ,flare-engine)))
7051 (home-page "http://www.flarerpg.org/")
7052 (synopsis "Fantasy action RPG using the FLARE engine")
7053 (description "Flare is a single-player 2D action RPG with
7054fast-paced action and a dark fantasy style.")
7055 (license license:cc-by-sa3.0)))
7056
7057(define-public meritous
7058 (package
7059 (name "meritous")
7060 (version "1.5")
7061 (source (origin
7062 (method git-fetch)
7063 (uri (git-reference
7064 (url "https://gitlab.com/meritous/meritous.git")
7065 (commit (string-append "v" version))))
7066 (file-name (git-file-name name version))
7067 (sha256
7068 (base32
7069 "0n5jm4g0arjllgqmd2crv8h02i6hs3hlh1zyc7ng7yfpg1mbd8p8"))))
7070 (build-system gnu-build-system)
7071 (arguments
7072 `(#:tests? #f ;no test
7073 #:make-flags
7074 (list "CC=gcc"
7075 (string-append "prefix=" (assoc-ref %outputs "out")))
7076 #:phases
7077 (modify-phases %standard-phases
7078 (delete 'configure)
7079 (add-after 'unpack 'fix-sdl-path
7080 ;; XXX: For some reason, `sdl-config' reports stand-alone SDL
7081 ;; directory, not SDL-union provided as an input to the package.
7082 ;; We force the latter with "--prefix=" option.
7083 (lambda* (#:key inputs #:allow-other-keys)
7084 (substitute* "Makefile"
7085 (("sdl-config" command)
7086 (string-append command " --prefix=" (assoc-ref inputs "sdl"))))
7087 #t))
7088 (add-after 'unpack 'fix-crash
7089 ;; XXX: Songs are not present in the repository, due to licensing
7090 ;; issues. Yet, the game tries to load them, and, since it cannot
7091 ;; find them, crashes. Users cannot add them back, the store being
7092 ;; read-only, so we turn off background music altogether.
7093 (lambda _
7094 (substitute* "src/audio.c"
7095 (("PlayBackgroundMusic\\(new_track\\);" all)
7096 (string-append "// " all)))
7097 #t)))))
7098 (native-inputs
7099 `(("intltool" ,intltool)))
7100 (inputs
7101 `(("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer)))
7102 ("zlib" ,zlib)))
7103 (home-page "https://gitlab.com/meritous/meritous")
7104 (synopsis "Action-adventure dungeon crawl game")
7105 (description "Far below the surface of the planet is a place of limitless
7106power. Those that seek to control such a utopia will soon bring an end to
7107themselves. Seeking an end to the troubles that plague him, PSI user Merit
7108journeys into the hallowed Orcus Dome in search of answers.
7109
7110Meritous is a action-adventure game with simple controls but a challenge to
7111find a balance of power versus recovery time during real-time battles. Set in
7112a procedurally generated world, the player can explore thousands of rooms in
7113search of powerful artifacts, tools to help them, and to eventually free the
7114Orcus Dome from evil.")
7115 (license license:gpl3+)))
7116
7117(define-public marble-marcher
7118 (let ((commit "e580460a0c3826f9b28ab404607942a8ecb625d7")
7119 (revision "1"))
7120 (package
7121 (name "marble-marcher")
7122 (version (git-version "0" revision commit))
7123 (source (origin
7124 (method git-fetch)
7125 (uri (git-reference
7126 (url "https://github.com/HackerPoet/MarbleMarcher.git")
7127 (commit commit)))
7128 (file-name (git-file-name name version))
7129 (sha256
7130 (base32
7131 "0jjv832hl1v170n6gryp2sr3lgqndi9ab841qvgqk68bks8701mx"))))
7132 (build-system cmake-build-system)
7133 (arguments
7134 `(#:tests? #f ; there are none
7135 #:phases
7136 (modify-phases %standard-phases
7137 (add-after 'unpack 'embed-asset-directory
7138 (lambda* (#:key outputs #:allow-other-keys)
7139 (let ((assets (string-append (assoc-ref outputs "out")
7140 "/share/marble-marcher/assets/")))
7141 ;; Some of the files we're patching are
7142 ;; ISO-8859-1-encoded, so choose it as the default
7143 ;; encoding so the byte encoding is preserved.
7144 (with-fluids ((%default-port-encoding #f))
7145 (substitute* "src/Resource.rc"
7146 (("../assets/icon.ico")
7147 (string-append assets "icon.ico")))
7148 (substitute* "src/Res.h"
7149 (("assets/") assets))))
7150 #t))
7151 (replace 'install
7152 (lambda* (#:key outputs #:allow-other-keys)
7153 (let* ((out (assoc-ref outputs "out"))
7154 (assets (string-append out "/share/marble-marcher/assets"))
7155 (bin (string-append out "/bin/")))
7156 (mkdir-p bin)
7157 (mkdir-p assets)
7158 (copy-recursively "../source/assets" assets)
7159 (install-file "MarbleMarcher" bin))
7160 #t)))))
7161 (inputs
7162 `(("eigen" ,eigen)
7163 ("mesa" ,mesa)
7164 ("sfml" ,sfml)))
7165 (native-inputs
7166 `(("pkg-config" ,pkg-config)))
7167 (home-page "https://codeparade.itch.io/marblemarcher")
7168 (synopsis "Guide a marble across fractal landscapes")
7169 (description "Marble Marcher is a video game that uses a fractal physics
7170engine and fully procedural rendering to produce beautiful and unique
7171gameplay. The game is played on the surface of evolving fractals. The goal
7172of the game is to get your marble to the flag as quickly as possible. But be
7173careful not to fall off the level or get crushed by the fractal! There are 24
7174levels to unlock.")
7175 ;; Code is under GPLv2+, assets are under CC-BY-SA 3.0 and OFL 1.1.
7176 (license (list license:gpl2+
7177 license:silofl1.1
7178 license:cc-by-sa3.0)))))
7179
7180;; This must be updated together with flightgear.
7181(define simgear
7182 (package
7183 (name "simgear")
7184 (version "2018.3.2")
7185 (source (origin
7186 (method url-fetch)
7187 (uri (string-append "mirror://sourceforge/flightgear/release-"
7188 (version-major+minor version) "/"
7189 "simgear-" version ".tar.bz2"))
7190 (sha256
7191 (base32
7192 "1941ay8rngz4vwsx37bbpxr48hpcvcbj3xw1hy264lq4qnl99c68"))))
7193 (build-system cmake-build-system)
7194 (arguments
7195 `(#:phases
7196 (modify-phases %standard-phases
7197 (replace 'check
7198 (lambda _
7199 ;; Skip tests that require internet access.
7200 (invoke "ctest" "-E" "(http|dns)"))))))
7201 (inputs
7202 `(("boost" ,boost-for-mysql) ; fails with 1.69
7203 ("curl" ,curl)
7204 ("expat" ,expat)
7205 ("mesa" ,mesa)
7206 ("openal" ,openal)
7207 ("openscenegraph" ,openscenegraph-3.4)
7208 ("zlib" ,zlib)))
7209 (home-page "https://home.flightgear.org/")
7210 (synopsis "Libraries for 3D simulations and games")
7211 (description "SimGear is a set of libraries designed to be used as
7212building blocks for quickly assembling 3D simulations, games, and
7213visualization applications. SimGear is developed by the FlightGear project
7214and also provides the base for the FlightGear Flight Simulator.")
7215 (license license:lgpl2.0+)))
7216
7217(define-public flightgear
7218 (package
7219 (name "flightgear")
7220 (version (package-version simgear))
7221 (source (origin
7222 (method url-fetch)
7223 (uri (string-append "mirror://sourceforge/flightgear/release-"
7224 (version-major+minor version) "/"
7225 "flightgear-" version ".tar.bz2"))
7226 (sha256
7227 (base32
7228 "0lzy524cjzs8vldcjcc750bgg5c4mq9fkymxxxzqf68ilc4d1jss"))
7229 (modules '((guix build utils)))
7230 (snippet
7231 '(begin
7232 ;; There are some bundled libraries.
7233 (for-each delete-file-recursively
7234 '("3rdparty/sqlite3/"))
7235 #t))))
7236 (build-system cmake-build-system)
7237 (arguments
7238 `(#:configure-flags
7239 (list "-DSYSTEM_SQLITE=ON"
7240 (string-append "-DFG_DATA_DIR="
7241 (assoc-ref %outputs "out")
7242 "/share/flightgear"))
7243 ;; TODO: test cannot be run because the "run_test_suite" executable
7244 ;; does not seem to be built.
7245 #:tests? #f
7246 #:phases
7247 (modify-phases %standard-phases
7248 (add-after 'install 'wrap-executable
7249 (lambda* (#:key inputs outputs #:allow-other-keys)
7250 (let ((out (assoc-ref outputs "out")))
7251 (wrap-program (string-append out "/bin/fgfs")
7252 `("QT_PLUGIN_PATH" ":" prefix
7253 ,(map (lambda (label)
7254 (string-append (assoc-ref inputs label)
7255 "/lib/qt5/plugins"))
7256 '("qtbase" "qtdeclarative" "qtsvg")))
7257 `("QML2_IMPORT_PATH" ":" prefix
7258 ,(map (lambda (label)
7259 (string-append (assoc-ref inputs label)
7260 "/lib/qt5/qml"))
7261 '("qtdeclarative" "qtsvg"))))
7262 #t)))
7263 (add-after 'install 'install-data
7264 (lambda* (#:key inputs outputs #:allow-other-keys)
7265 (let ((share (string-append (assoc-ref outputs "out") "/share/flightgear")))
7266 (mkdir-p share)
7267 (with-directory-excursion share
7268 (invoke "tar" "xf" (assoc-ref inputs "flightgear-data")
7269 "--strip-components=1")))
7270 #t)))))
7271 (inputs
7272 `(("boost" ,boost-for-mysql) ; same as simgear
7273 ("dbus" ,dbus)
7274 ("eudev" ,eudev)
7275 ("freeglut" ,freeglut)
7276 ("freetype" ,freetype)
7277 ("glew" ,glew)
7278 ("libpng" ,libpng)
7279 ("openal" ,openal)
7280 ("openscenegraph" ,openscenegraph-3.4)
7281 ("plib" ,plib)
7282 ("qtbase" ,qtbase)
7283 ("qtdeclarative" ,qtdeclarative)
7284 ("qtsvg" ,qtsvg)
7285 ("simgear" ,simgear)
7286 ("speexdsp" ,speexdsp)
7287 ("sqlite" ,sqlite)
7288 ("zlib" ,zlib)))
7289 (native-inputs
7290 `(("cppunit" ,cppunit)
7291 ("pkg-config" ,pkg-config)
7292 ("qttools" ,qttools)
7293 ("flightgear-data"
7294 ,(origin
7295 (method url-fetch)
7296 (uri (string-append "mirror://sourceforge/flightgear/release-"
7297 (version-major+minor version) "/"
7298 "FlightGear-" version "-data.tar.bz2"))
7299 (sha256
7300 (base32
7301 "0h4npa7gqpf5fw6pv2bpw0wbwr7fa2vhia21cjbigfgd75x82zi7"))))))
7302 (home-page "https://home.flightgear.org/")
7303 (synopsis "Flight simulator")
7304 (description "The goal of the FlightGear project is to create a
7305sophisticated flight simulator framework for use in research or academic
7306environments, pilot training, as an industry engineering tool, for DIY-ers to
7307pursue their favorite interesting flight simulation idea, and last but
7308certainly not least as a fun, realistic, and challenging desktop flight
7309simulator.")
7310 (license license:gpl2+)))
7311
7312(define-public jumpnbump
7313 (package
7314 (name "jumpnbump")
7315 (version "1.61")
7316 (source (origin
7317 (method git-fetch)
7318 (uri (git-reference
7319 (url "https://gitlab.com/LibreGames/jumpnbump.git")
7320 (commit version)))
7321 (file-name (git-file-name name version))
7322 (sha256
7323 (base32
7324 "12lwl5sl5n009nb83r8l4lakb9286csqdf1ynpmwwydy17giqsdp"))))
7325 (build-system gnu-build-system)
7326 (arguments
7327 `(#:make-flags
7328 (list "CC=gcc"
7329 (string-append "PREFIX=" (assoc-ref %outputs "out")))
7330 #:tests? #f ;no test
7331 #:phases
7332 (modify-phases %standard-phases
7333 (delete 'configure) ;no configure script
7334 (add-after 'unpack 'fix-sdl-path
7335 ;; XXX: For some reason, `sdl2-config' reports stand-alone SDL
7336 ;; directory, not SDL-union provided as an input to the package.
7337 ;; We force the latter with "--prefix=" option.
7338 (lambda* (#:key inputs #:allow-other-keys)
7339 (substitute* "Makefile"
7340 (("sdl2-config" command)
7341 (string-append command " --prefix=" (assoc-ref inputs "sdl"))))
7342 #t)))))
7343 (inputs
7344 `(("bzip2" ,bzip2)
7345 ("sdl" ,(sdl-union (list sdl2 sdl2-mixer sdl2-net)))
7346 ("zlib" ,zlib)))
7347 (native-inputs
7348 `(("gettext" ,gettext-minimal))) ;for msgfmt
7349 (home-page "https://gitlab.com/LibreGames/jumpnbump")
7350 (synopsis "Multiplayer platform game with bunnies")
7351 (description "You, as a bunny, have to jump on your opponents to make them
7352explode. It is a true multiplayer game; you cannot play this alone. You can
7353play with up to four players simultaneously. It has network support.")
7354 (license license:gpl2+)))
7355
7356(define-public hedgewars
7357 (package
7358 (name "hedgewars")
7359 (version "1.0.0")
7360 (source (origin
7361 (method url-fetch)
7362 (uri (string-append "https://www.hedgewars.org/download/releases/"
7363 "hedgewars-src-" version ".tar.bz2"))
7364 (sha256
7365 (base32
7366 "0nqm9w02m0xkndlsj6ys3wr0ik8zc14zgilq7k6fwjrf3zk385i1"))))
7367 (build-system cmake-build-system)
7368 (arguments
7369 ;; XXX: Engine is built as Pascal source code, requiring Free Pascal
7370 ;; Compiler, which we haven't packaged yet. With the flag below, we use
7371 ;; a Pascal to C translator and Clang instead.
7372 `(#:configure-flags (list "-DBUILD_ENGINE_C=ON")
7373 #:phases
7374 (modify-phases %standard-phases
7375 (replace 'check
7376 (lambda _ (invoke "ctest"))))))
7377 (inputs
7378 `(("ffmpeg" ,ffmpeg)
7379 ("freeglut" ,freeglut)
7380 ("ghc-entropy" ,ghc-entropy)
7381 ("ghc-hslogger" ,ghc-hslogger)
7382 ("ghc-network" ,ghc-network)
7383 ("ghc-random" ,ghc-random)
7384 ("ghc-regex-tdfa" ,ghc-regex-tdfa)
7385 ("ghc-sandi" ,ghc-sandi)
7386 ("ghc-sha" ,ghc-sha)
7387 ("ghc-utf8-string" ,ghc-utf8-string)
7388 ("ghc-vector" ,ghc-vector)
7389 ("ghc-zlib" ,ghc-zlib)
7390 ("glew" ,glew)
7391 ("libpng" ,libpng)
7392 ("lua" ,lua-5.1)
7393 ("physfs" ,physfs)
7394 ("qtbase" ,qtbase)
7395 ("sdl" ,(sdl-union
7396 (list sdl2 sdl2-mixer sdl2-net sdl2-ttf sdl2-image)))))
7397 (native-inputs
7398 `(("clang" ,clang)
7399 ("ghc" ,ghc)
7400 ("pkg-config" ,pkg-config)
7401 ("qttools" ,qttools)))
7402 (home-page "https://hedgewars.org/")
7403 (synopsis "Turn-based artillery game featuring fighting hedgehogs")
7404 (description
7405 "Hedgewars is a turn based strategy, artillery, action and comedy game,
7406featuring the antics of pink hedgehogs with attitude as they battle from the
7407depths of hell to the depths of space.
7408
7409As commander, it's your job to assemble your crack team of hedgehog soldiers
7410and bring the war to your enemy.")
7411 ;; Software as a whole is licensed under GPL-2 terms. Artwork and
7412 ;; scripts are distributed under various terms.
7413 (license (list license:gpl2
7414 license:bsd-2 license:bsd-3 license:cc-by3.0 license:cc0
7415 license:expat license:fdl1.3+ license:public-domain
7416 license:zlib))))
7417
7418(define-public harmonist
7419 (package
7420 (name "harmonist")
7421 (version "0.2")
7422 (source (origin
7423 (method git-fetch)
7424 (uri (git-reference
7425 (url "https://git.tuxfamily.org/harmonist/harmonist.git")
7426 (commit (string-append "v" version))))
7427 (file-name (git-file-name name version))
7428 (sha256
7429 (base32
7430 "0hqy9kqwgirwkq1v3vj1hp9m93hjvdj4nxcfbjfvvwk2bbzri3s2"))))
7431 (build-system go-build-system)
7432 (arguments
7433 '(#:import-path "git.tuxfamily.org/harmonist/harmonist"))
7434 (inputs
7435 `(("go-github.com-nsf-termbox-go" ,go-github.com-nsf-termbox-go)))
7436 (home-page "https://harmonist.tuxfamily.org/")
7437 (synopsis "Stealth coffee-break roguelike game")
7438 (description "Harmonist: Dayoriah Clan Infiltration is a stealth
7439coffee-break roguelike game. The game has a heavy focus on tactical
7440positioning, light and noise mechanisms, making use of various terrain types
7441and cones of view for monsters. Aiming for a replayable streamlined experience,
7442the game avoids complex inventory management and character building, relying
7443on items and player adaptability for character progression.")
7444 (license license:isc)))
7445
7446(define-public harmonist-tk
7447 (package
7448 (inherit harmonist)
7449 (name "harmonist-tk")
7450 (arguments
7451 (append
7452 (package-arguments harmonist)
7453 `(#:phases
7454 (modify-phases %standard-phases
7455 (replace 'build
7456 (lambda _
7457 (invoke "go" "install" "-v" "-x" "--tags" "tk"
7458 "git.tuxfamily.org/harmonist/harmonist")))
7459 (replace 'check
7460 (lambda _
7461 (invoke "go" "test" "--tags" "tk"
7462 "git.tuxfamily.org/harmonist/harmonist")))))))
7463 (inputs
7464 `(("go-github.com-nsf-gothic" ,go-github.com-nsf-gothic)))))
7465
7466(define-public drascula
7467 (package
7468 (name "drascula")
7469 (version "1.0")
7470 (source (origin
7471 (method url-fetch)
7472 (uri (string-append "mirror://sourceforge/scummvm/extras/"
7473 "Drascula_%20The%20Vampire%20Strikes%20Back/"
7474 "drascula-" version ".zip"))
7475 (sha256
7476 (base32
7477 "1pj29rpb754sn6a56f8brfv6f2m1p5qgaqik7d68pfi2bb5zccdp"))))
7478 (build-system trivial-build-system)
7479 (arguments
7480 `(#:modules ((guix build utils))
7481 #:builder
7482 (begin
7483 (use-modules (guix build utils)
7484 (ice-9 match))
7485 (let* ((out (assoc-ref %outputs "out"))
7486 (share (string-append out "/share/drascula"))
7487 (scummvm (assoc-ref %build-inputs "scummvm")))
7488 ;; Install data.
7489 (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
7490 "/bin/unzip"))
7491 (doc (string-append out "/share/doc/" ,name "-" ,version)))
7492 (for-each
7493 (lambda (input)
7494 (invoke unzip
7495 "-j"
7496 (assoc-ref %build-inputs input)
7497 "-x" "__MACOSX")
7498 ;; Every input provides "readme.txt", and we want to
7499 ;; preserve them all. Therefore we rename them first.
7500 (match input
7501 ("drascula-int"
7502 (rename-file "readme.txt" "readme-international.txt"))
7503 ("drascula-audio"
7504 (rename-file "readme.txt" "readme-audio.txt"))
7505 (_ #f))
7506 ;; Install documentation.
7507 (for-each (lambda (f) (install-file f doc))
7508 (find-files "." "\\.(txt|doc)$"))
7509 ;; Install data.
7510 (for-each (lambda (f) (install-file f share))
7511 (find-files "." "\\.(ogg|00[0-9])$")))
7512 '("drascula-audio" "drascula-int" "source")))
7513 ;; Create standalone executable.
7514 (let* ((bin (string-append out "/bin"))
7515 (executable (string-append bin "/drascula"))
7516 (bash (string-append (assoc-ref %build-inputs "bash")
7517 "/bin/bash")))
7518 (mkdir-p bin)
7519 (with-output-to-file executable
7520 (lambda ()
7521 (format #t "#!~a~%" bash)
7522 (format #t
7523 "exec ~a/bin/scummvm --path=~a drascula~%"
7524 scummvm share)))
7525 (chmod executable #o755))
7526 ;; Create desktop file. There is no dedicated icon for the
7527 ;; game, so we borrow SCUMMVM's.
7528 (let ((apps (string-append out "/share/applications")))
7529 (mkdir-p apps)
7530 (with-output-to-file (string-append apps "/drascula.desktop")
7531 (lambda _
7532 (format #t
7533 "[Desktop Entry]~@
7534 Name=Drascula: The Vampire Strikes Back~@
7535 GenericName=Drascula~@
7536 Exec=~a/bin/drascula~@
7537 Icon=~a/share/icons/hicolor/scalable/apps/scummvm.svg~@
7538 Categories=AdventureGame;Game;RolePlaying;~@
7539 Keywords=game;adventure;roleplaying;2D,fantasy;~@
7540 Comment=Classic 2D point and click adventure game~@
7541 Comment[de]=klassisches 2D-Abenteuerspiel in Zeigen-und-Klicken-Manier~@
7542 Comment[fr]=Jeux classique d'aventure pointer-et-cliquer en 2D~@
7543 Comment[it]=Gioco classico di avventura punta e clicca 2D~@
7544 Type=Application~%"
7545 out scummvm))))
7546 #t))))
7547 (native-inputs
7548 `(("bash" ,bash)
7549 ("unzip" ,unzip)))
7550 (inputs
7551 `(("scummvm" ,scummvm)
7552 ("drascula-int"
7553 ,(let ((version "1.1"))
7554 (origin
7555 (method url-fetch)
7556 (uri (string-append "mirror://sourceforge/scummvm/extras/"
7557 "Drascula_%20The%20Vampire%20Strikes%20Back/"
7558 "drascula-int-" version ".zip"))
7559 (sha256
7560 (base32
7561 "12236i7blamal92p1i8dgp3nhp2yicics4whsl63v682bj999n14")))))
7562 ("drascula-audio"
7563 ,(let ((version "2.0"))
7564 (origin
7565 (method url-fetch)
7566 (uri (string-append "mirror://sourceforge/scummvm/extras/"
7567 "Drascula_%20The%20Vampire%20Strikes%20Back/"
7568 "drascula-audio-" version ".zip"))
7569 (sha256
7570 (base32
7571 "00g4izmsqzxb8ry1vhfx6jrygl58lvlij09nw01ds4zddsiznsky")))))))
7572 (home-page "https://www.scummvm.org")
7573 (synopsis "Classic 2D point and click adventure game")
7574 (description "Drascula: The Vampire Strikes Back is a classic humorous 2D
7575point and click adventure game.
7576
7577In Drascula you play the role of John Hacker, a British estate agent, that
7578gets to meet a gorgeous blond girl who is kidnapped by the notorious vampire
7579Count Drascula and embark on a fun yet dangerous quest to rescue her.
7580Unfortunately, Hacker is not aware of Drascula's real ambitions: DOMINATING
7581the World and demonstrating that he is even more evil than his brother Vlad.")
7582 ;; Drascula uses a BSD-like license.
7583 (license (license:non-copyleft "file:///readme.txt"))))
7584
7585(define-public gnurobots
7586 (package
7587 (name "gnurobots")
7588 (version "1.2.0")
7589 (source
7590 (origin
7591 (method url-fetch)
7592 (uri (string-append "mirror://gnu/gnurobots/gnurobots-"
7593 version ".tar.gz"))
7594 (sha256
7595 (base32
7596 "07gi3lsmbzzsjambgixj6xy79lh22km84z7bnzgwzxdy806lyvwb"))))
7597 (build-system gnu-build-system)
7598 (inputs
7599 `(("glib" ,glib)
7600 ("gtk+" ,gtk+-2)
7601 ("vte" ,vte/gtk+-2)
7602 ("readline" ,readline)
7603 ("guile" ,guile-1.8)))
7604 (native-inputs
7605 `(("pkg-config" ,pkg-config)))
7606 (arguments
7607 `(#:make-flags
7608 (list
7609 ;; Do not abort build on "deprecated-declarations" warnings.
7610 "CFLAGS=-Wno-error=deprecated-declarations"
7611 ;; Find readline headers in sub-directory.
7612 (string-append "READLINE_CFLAGS=-I"
7613 (assoc-ref %build-inputs "readline")
7614 "/include/readline/"))
7615 #:phases
7616 (modify-phases %standard-phases
7617 (add-after 'install 'install-doc
7618 (lambda* (#:key outputs #:allow-other-keys)
7619 (install-file "doc/Robots-HOWTO"
7620 (string-append (assoc-ref outputs "out")
7621 "/share/doc/gnurobots-"
7622 ,version))
7623 #t)))))
7624 (home-page "https://www.gnu.org/software/gnurobots/")
7625 (synopsis "Program a little robot and watch it explore a world")
7626 (description
7627 "GNU Robots is a game in which you program a robot to explore a world
7628full of enemies that can hurt it, obstacles and food to be eaten. The goal of
7629the game is to stay alive and collect prizes. The robot program conveniently
7630may be written in a plain text file in the Scheme programming language.")
7631 (license license:gpl3+)))
7632
7633(define-public ri-li
7634 (package
7635 (name "ri-li")
7636 (version "2.0.1")
7637 (source (origin
7638 (method url-fetch)
7639 (uri (string-append "mirror://sourceforge/ri-li/"
7640 "Ri-li%20Linux_Unix/Ri-li%20V" version "/"
7641 "Ri-li-" version ".tar.bz2"))
7642 (sha256
7643 (base32
7644 "1gcdsgnnbbn1mb1hkpwniv3fhkaj1nn8gq33v5c16q3wqchcq77p"))
7645 ;; Taken from
7646 ;; <https://github.com/NixOS/nixpkgs/blob/master/pkgs/games/rili/moderinze_cpp.patch>.
7647 ;; It doesn't build otherwise.
7648 (patches (search-patches "ri-li-modernize_cpp.patch"))))
7649 (build-system gnu-build-system)
7650 (arguments
7651 `(#:phases
7652 (modify-phases %standard-phases
7653 ;; Remove "gentoo" subdirectory from Makefile, as it is
7654 ;; missing a make file and generates a build failure.
7655 (add-after 'configure 'fix-build
7656 (lambda _
7657 (substitute* "Makefile"
7658 ((" gentoo") ""))
7659 #t))
7660 (add-after 'install 'install-desktop-file
7661 (lambda* (#:key outputs #:allow-other-keys)
7662 (let* ((out (assoc-ref outputs "out"))
7663 (apps (string-append out "/share/applications"))
7664 (pixmaps (string-append out "/share/pixmaps")))
7665 (for-each (lambda (f) (install-file f pixmaps))
7666 (find-files "data" "\\.(png|ico)$"))
7667 (mkdir-p apps)
7668 (with-output-to-file (string-append apps "/ri-li.desktop")
7669 (lambda _
7670 (format #t
7671 "[Desktop Entry]~@
7672 Name=Ri-li~@
7673 Exec=~a/bin/Ri_li~@
7674 Icon=~a/Ri-li-icon-32x32.png~@
7675 Categories=Game;ArcadeGame;~@
7676 Keywords=toy;train;wooden;snake-like;engine;~@
7677 Comment=a toy simulator game~@
7678 Comment[de]=Ein Spiel mit einem kleinen Zug~@
7679 Comment[fr]=un jeu de petit train~@
7680 Comment[ro_RO]=un joc cu un tren de jucărie~@
7681 Terminal=false~@
7682 Type=Application~%"
7683 out pixmaps))))
7684 #t))
7685 (add-after 'install-desktop-file 'remove-spurious-files
7686 ;; Delete redundant files already installed somewhere else.
7687 (lambda* (#:key outputs #:allow-other-keys)
7688 (let ((out (assoc-ref outputs "out")))
7689 (for-each delete-file
7690 (find-files (string-append out "/share/Ri-li")
7691 "\\.(png|ico)|COPYING"))
7692 #t))))))
7693 (inputs
7694 `(("sdl" ,(sdl-union (list sdl sdl-mixer)))))
7695 (home-page "http://www.ri-li.org")
7696 (synopsis "Toy train simulation game")
7697 (description "Ri-li is a game in which you drive a wooden toy
7698steam locomotive across many levels and collect all the coaches to
7699win.")
7700 ;; The project is dual-licensed GPL2+ and GPL3+.
7701 (license (list license:gpl2+ license:gpl3+))))
7702
7703(define-public freeorion
7704 (package
7705 (name "freeorion")
7706 (version "0.4.8")
7707 (source
7708 (origin
7709 (method git-fetch)
7710 (uri (git-reference
7711 (url "https://github.com/freeorion/freeorion.git")
7712 ;; Most recent stable release uses boost_signals (v1) which was
7713 ;; later replaced with boost-signals2 and no longer exists. This
7714 ;; commit builds and runs.
7715 ;;
7716 ;; TODO: Update this when the next stable release when it is
7717 ;; available.
7718 (commit "470d0711537804df3c2ca25532f674ab4bec58af")))
7719 (file-name (git-file-name name version))
7720 (sha256
7721 (base32
7722 "1wsw632l1cj17px6i88nqjzs0dngp5rsr67n6qkkjlfjfxi69j0f"))
7723 (modules '((guix build utils)))
7724 (snippet
7725 '(begin
7726 ;; There are some bundled fonts.
7727 (for-each delete-file-recursively '("default/data/fonts"))
7728 #t))))
7729 (build-system cmake-build-system)
7730 (arguments
7731 '(#:tests? #f ;no test
7732 #:phases
7733 (modify-phases %standard-phases
7734 (add-after 'unpack 'unbundle-fonts
7735 (lambda* (#:key inputs #:allow-other-keys)
7736 (let ((roboto-dir (string-append (assoc-ref inputs "font-roboto")
7737 "/share/fonts/truetype/")))
7738 (substitute* "UI/ClientUI.cpp"
7739 (("\\(GetRootDataDir.*?Roboto-(Bold|Regular)\\.ttf\"\\)\\.string\\(\\)\\);"
7740 all type)
7741 (string-append "\"" roboto-dir "Roboto-" type ".ttf\");")))
7742 #t))))))
7743 (inputs
7744 `(("boost" ,boost)
7745 ("boost_signals" ,boost-signals2)
7746 ("font-dejavu" ,font-dejavu)
7747 ("font-roboto" ,font-google-roboto)
7748 ("freetype2" ,freetype)
7749 ("glew" ,glew)
7750 ("glu" ,glu)
7751 ("libogg" ,libogg)
7752 ("libpng" ,libpng)
7753 ("libvorbis" ,libvorbis)
7754 ("openal" ,openal)
7755 ("python2" ,python-2.7)
7756 ("sdl2" ,sdl2)
7757 ("zlib" ,zlib)))
7758 (home-page "https://www.freeorion.org/index.php/Main_Page")
7759 (synopsis "Turn-based space empire and galactic conquest computer game")
7760 (description
7761 "FreeOrion is a turn-based space empire and galactic conquest (4X)
7762computer game being designed and built by the FreeOrion project. Control an
7763empire with the goal of exploring the galaxy, expanding your territory,
7764exploiting the resources, and exterminating rival alien empires. FreeOrion is
7765inspired by the tradition of the Master of Orion games, but is not a clone or
7766remake of that series or any other game.")
7767 ;; Source code is released under gpl2. Artwork, music and sounds, and
7768 ;; in-game text are released under cc-by-sa3.0. Game content scripts are
7769 ;; released under both gpl2 and cc-by-sa3.0. Bundled Gigi library is
7770 ;; released under lgpl2.1+.
7771 (license (list license:gpl2 license:cc-by-sa3.0 license:lgpl2.1+))))
7772
7773(define-public leela-zero
7774 (package
7775 (name "leela-zero")
7776 (version "0.17")
7777 (source
7778 (origin
7779 (method git-fetch)
7780 (uri (git-reference
7781 (url "https://github.com/leela-zero/leela-zero.git")
7782 (commit (string-append "v" version))))
7783 (file-name (git-file-name name version))
7784 (sha256
7785 (base32
7786 "17px5iny8mql5c01bymcli7zfssswkzvb2i8gnsmjcck6i2n8srl"))
7787 (patches (search-patches "leela-zero-gtest.patch"))))
7788 (build-system cmake-build-system)
7789 (native-inputs
7790 `(("googletest" ,googletest)))
7791 (inputs
7792 `(("boost" ,boost)
7793 ("ocl-icd" ,ocl-icd)
7794 ("openblas" ,openblas)
7795 ("opencl-headers" ,opencl-headers)
7796 ("qtbase" ,qtbase)
7797 ("zlib" ,zlib)))
7798 (arguments
7799 '(#:configure-flags '("-DUSE_BLAS=YES")
7800 #:phases (modify-phases %standard-phases
7801 (add-before 'configure 'fix-tests
7802 (lambda* (#:key outputs #:allow-other-keys)
7803 (let ((home (getcwd)))
7804 (setenv "HOME" home)
7805 (substitute* "src/tests/gtests.cpp"
7806 (("\\.\\./src/tests/0k\\.txt")
7807 (string-append home "/src/tests/0k.txt"))
7808 (("cfg_gtp_mode = true;")
7809 "cfg_gtp_mode = true; cfg_cpu_only = true;")))
7810 #t))
7811 (replace 'check
7812 (lambda _
7813 (invoke "./tests"))))))
7814 (home-page "https://github.com/leela-zero/leela-zero")
7815 (synopsis "Program playing the game of Go")
7816 (description
7817 "Leela-zero is a Go engine with no human-provided knowledge, modeled after
7818the AlphaGo Zero paper. The current best network weights file for the engine
7819can be downloaded from @url{https://zero.sjeng.org/best-network}.")
7820 (license license:gpl3+)))
7821
7822(define-public q5go
7823 (package
7824 (name "q5go")
7825 (version "1.0")
7826 (source (origin
7827 (method git-fetch)
7828 (uri (git-reference
7829 (url "https://github.com/bernds/q5Go.git")
7830 (commit (string-append "q5go-" version))))
7831 (file-name (git-file-name name version))
7832 (sha256
7833 (base32
7834 "1gdlfqcqkqv7vph3qwq78d0qz6dhmdsranxq9bmixiisbzkqby31"))))
7835 (build-system gnu-build-system)
7836 (native-inputs
7837 `(("pkg-config" ,pkg-config)))
7838 (inputs
7839 `(("qtbase" ,qtbase)
7840 ("qtmultimedia" ,qtmultimedia)
7841 ("qtsvg" ,qtsvg)))
7842 (arguments
7843 '(#:phases
7844 (modify-phases %standard-phases
7845 (add-after 'unpack 'fix-configure-script
7846 (lambda _
7847 ;; Bypass the unavailable qtchooser program.
7848 (substitute* "configure"
7849 (("test -z \"QTCHOOSER\"")
7850 "false")
7851 (("qtchooser -run-tool=(.*) -qt=qt5" _ command)
7852 command))
7853 #t))
7854 (add-after 'unpack 'fix-paths
7855 (lambda _
7856 (substitute* '("src/pics/Makefile.in"
7857 "src/translations/Makefile.in")
7858 (("\\$\\(datadir\\)/qGo/")
7859 "$(datadir)/q5go/"))
7860 #t))
7861 (add-after 'install 'install-desktop-file
7862 (lambda* (#:key outputs #:allow-other-keys)
7863 (let* ((out (assoc-ref outputs "out"))
7864 (apps (string-append out "/share/applications"))
7865 (pics (string-append out "/share/q5go/pics")))
7866 (delete-file-recursively (string-append out "/share/applnk"))
7867 (delete-file-recursively (string-append out "/share/mimelnk"))
7868 (install-file "../source/src/pics/Bowl.ico" pics)
7869 (mkdir-p apps)
7870 (with-output-to-file (string-append apps "/q5go.desktop")
7871 (lambda _
7872 (format #t
7873 "[Desktop Entry]~@
7874 Name=q5go~@
7875 Exec=~a/bin/q5go~@
7876 Icon=~a/Bowl.ico~@
7877 Categories=Game;~@
7878 Comment=Game of Go~@
7879 Comment[de]=Spiel des Go~@
7880 Comment[eo]=Goo~@
7881 Comment[es]=Juego de Go~@
7882 Comment[fr]=Jeu de Go~@
7883 Comment[ja]=囲碁~@
7884 Comment[ko]=바둑~@
7885 Comment[zh]=围棋~@
7886 Terminal=false~@
7887 Type=Application~%"
7888 out pics))))
7889 #t)))))
7890 (synopsis "Qt GUI to play the game of Go")
7891 (description
7892 "This a tool for Go players which performs the following functions:
7893@itemize
7894@item SGF editor,
7895@item Analysis frontend for Leela Zero (or compatible engines),
7896@item GTP interface (to play against an engine),
7897@item IGS client (to play on the internet),
7898@item Export games to a variety of formats.
7899@end itemize")
7900 (home-page "https://github.com/bernds/q5Go")
7901 (license license:gpl2+)))