gnu: Remove unneeded uses of python{,2}-minimal.
[jackhill/guix/guix.git] / gnu / packages / games.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 John Darrington <jmd@gnu.org>
3 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
4 ;;; Copyright © 2014, 2016 David Thompson <dthompson2@worcester.edu>
5 ;;; Copyright © 2014, 2015, 2016, 2017, 2018 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 Ludovic Courtès <ludo@gnu.org>
9 ;;; Copyright © 2014, 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
10 ;;; Copyright © 2014, 2015 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 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 Nils Gillmann <ng0@n0.is>
19 ;;; Copyright © 2016 Albin Söderqvist <albin@fripost.org>
20 ;;; Copyright © 2016, 2017, 2018 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 nee <nee-git@hidamari.blue>
29 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
30 ;;; Copyright © 2017 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 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 ;;;
40 ;;; This file is part of GNU Guix.
41 ;;;
42 ;;; GNU Guix is free software; you can redistribute it and/or modify it
43 ;;; under the terms of the GNU General Public License as published by
44 ;;; the Free Software Foundation; either version 3 of the License, or (at
45 ;;; your option) any later version.
46 ;;;
47 ;;; GNU Guix is distributed in the hope that it will be useful, but
48 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
49 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
50 ;;; GNU General Public License for more details.
51 ;;;
52 ;;; You should have received a copy of the GNU General Public License
53 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
54
55 (define-module (gnu packages games)
56 #:use-module (ice-9 match)
57 #:use-module ((guix licenses) #:prefix license:)
58 #:use-module (guix utils)
59 #:use-module (guix packages)
60 #:use-module (guix download)
61 #:use-module (guix git-download)
62 #:use-module (guix svn-download)
63 #:use-module (guix gexp)
64 #:use-module (gnu packages)
65 #:use-module (gnu packages algebra)
66 #:use-module (gnu packages autotools)
67 #:use-module (gnu packages backup)
68 #:use-module (gnu packages base)
69 #:use-module (gnu packages build-tools)
70 #:use-module (gnu packages admin)
71 #:use-module (gnu packages audio)
72 #:use-module (gnu packages avahi)
73 #:use-module (gnu packages assembly)
74 #:use-module (gnu packages bash)
75 #:use-module (gnu packages bison)
76 #:use-module (gnu packages boost)
77 #:use-module (gnu packages check)
78 #:use-module (gnu packages cmake)
79 #:use-module (gnu packages compression)
80 #:use-module (gnu packages curl)
81 #:use-module (gnu packages crypto)
82 #:use-module (gnu packages cyrus-sasl)
83 #:use-module (gnu packages documentation)
84 #:use-module (gnu packages docbook)
85 #:use-module (gnu packages flex)
86 #:use-module (gnu packages fltk)
87 #:use-module (gnu packages fonts)
88 #:use-module (gnu packages fontutils)
89 #:use-module (gnu packages freedesktop)
90 #:use-module (gnu packages fribidi)
91 #:use-module (gnu packages game-development)
92 #:use-module (gnu packages gcc)
93 #:use-module (gnu packages gettext)
94 #:use-module (gnu packages ghostscript)
95 #:use-module (gnu packages gimp)
96 #:use-module (gnu packages gl)
97 #:use-module (gnu packages glib)
98 #:use-module (gnu packages gnome)
99 #:use-module (gnu packages gnuzilla)
100 #:use-module (gnu packages gperf)
101 #:use-module (gnu packages graphics)
102 #:use-module (gnu packages gstreamer)
103 #:use-module (gnu packages gtk)
104 #:use-module (gnu packages guile)
105 #:use-module (gnu packages icu4c)
106 #:use-module (gnu packages image)
107 #:use-module (gnu packages imagemagick)
108 #:use-module (gnu packages less)
109 #:use-module (gnu packages libcanberra)
110 #:use-module (gnu packages libedit)
111 #:use-module (gnu packages libunwind)
112 #:use-module (gnu packages linux)
113 #:use-module (gnu packages lua)
114 #:use-module (gnu packages haskell)
115 #:use-module (gnu packages mp3)
116 #:use-module (gnu packages music)
117 #:use-module (gnu packages multiprecision)
118 #:use-module (gnu packages ncurses)
119 #:use-module (gnu packages netpbm)
120 #:use-module (gnu packages networking)
121 #:use-module (gnu packages ocaml)
122 #:use-module (gnu packages pcre)
123 #:use-module (gnu packages perl)
124 #:use-module (gnu packages perl-check)
125 #:use-module (gnu packages pkg-config)
126 #:use-module (gnu packages pulseaudio)
127 #:use-module (gnu packages python)
128 #:use-module (gnu packages python-xyz)
129 #:use-module (gnu packages qt)
130 #:use-module (gnu packages readline)
131 #:use-module (gnu packages shells)
132 #:use-module (gnu packages sdl)
133 #:use-module (gnu packages serialization)
134 #:use-module (gnu packages sqlite)
135 #:use-module (gnu packages swig)
136 #:use-module (gnu packages tcl)
137 #:use-module (gnu packages texinfo)
138 #:use-module (gnu packages textutils)
139 #:use-module (gnu packages tls)
140 #:use-module (gnu packages upnp)
141 #:use-module (gnu packages video)
142 #:use-module (gnu packages vulkan)
143 #:use-module (gnu packages web)
144 #:use-module (gnu packages wxwidgets)
145 #:use-module (gnu packages xdisorg)
146 #:use-module (gnu packages xorg)
147 #:use-module (gnu packages xiph)
148 #:use-module (gnu packages xml)
149 #:use-module (gnu packages messaging)
150 #:use-module (gnu packages networking)
151 #:use-module (guix build-system glib-or-gtk)
152 #:use-module (guix build-system gnu)
153 #:use-module (guix build-system go)
154 #:use-module (guix build-system haskell)
155 #:use-module (guix build-system meson)
156 #:use-module (guix build-system scons)
157 #:use-module (guix build-system python)
158 #:use-module (guix build-system cmake)
159 #:use-module (guix build-system trivial)
160 #:use-module ((srfi srfi-1) #:hide (zip))
161 #:use-module (srfi srfi-26))
162
163 (define-public armagetronad
164 (package
165 (name "armagetronad")
166 (version "0.2.8.3.4")
167 (source (origin
168 (method url-fetch)
169 (uri (string-append "mirror://sourceforge/" name "/stable/"
170 version "/" name "-" version ".src.tar.gz"))
171 (sha256
172 (base32
173 "1pgy0r80z702qdv94aw3ywdn4ynnr4cdi86ml558pljfc5ygasj4"))))
174 (build-system gnu-build-system)
175 (inputs
176 `(("libxml2" ,libxml2)
177 ("sdl" ,sdl)
178 ("sdl-image" ,sdl-image)
179 ("freeglut" ,freeglut)
180 ("libpng" ,libpng)
181 ("libjpeg-turbo" ,libjpeg-turbo)))
182 (home-page "http://www.armagetronad.org")
183 (synopsis "Tron clone in 3D")
184 (description "Armagetron is a multiplayer game in 3d that attempts to
185 emulate and expand on the lightcycle sequence from the movie Tron. It's
186 an old school arcade game slung into the 21st century. Highlights include
187 a customizable playing arena, HUD, unique graphics, and AI bots. For the
188 more advanced player there are new game modes and a wide variety of physics
189 settings to tweak as well.")
190 (license license:gpl2+)))
191
192 (define-public bastet
193 (package
194 (name "bastet")
195 (version "0.43.2")
196 (source
197 (origin
198 (method git-fetch)
199 (uri (git-reference
200 (url "https://github.com/fph/bastet.git")
201 (commit version)))
202 (file-name (git-file-name name version))
203 (sha256
204 (base32 "09kamxapm9jw9przpsgjfg33n9k94bccv65w95dakj0br33a75wn"))
205 (patches
206 (search-patches "bastet-change-source-of-unordered_set.patch"))))
207 (build-system gnu-build-system)
208 (arguments
209 `(#:make-flags
210 (list (string-append "CXXFLAGS=-I"
211 (assoc-ref %build-inputs "boost") "/include"))
212 #:phases
213 (modify-phases %standard-phases
214 (delete 'configure) ; no configure script
215 (replace 'check
216 ;; The 'Test' target builds the tests, but doesn't actually run them.
217 (lambda* (#:key make-flags #:allow-other-keys)
218 (apply invoke "make" "Test" make-flags)
219 (setenv "HOME" ".")
220 (invoke "./Test")))
221 (replace 'install
222 (lambda* (#:key outputs #:allow-other-keys)
223 (let* ((out (assoc-ref outputs "out"))
224 (share (string-append out "/share"))
225 (hicolor (string-append share "/icons/hicolor")))
226 (install-file "bastet"
227 (string-append out "/bin"))
228
229 (install-file "bastet.desktop"
230 (string-append share "/applications"))
231 (install-file "bastet.svg"
232 (string-append hicolor "/scalable/apps"))
233
234 (install-file "bastet.appdata.xml"
235 (string-append share "/appdata"))
236
237 (install-file "bastet.6"
238 (string-append out "/share/man/man6"))
239 #t))))))
240 (native-inputs
241 `(("hicolor-icon-theme" ,hicolor-icon-theme)))
242 (inputs
243 `(("boost" ,boost)
244 ("ncurses" ,ncurses)))
245 (home-page "http://fph.altervista.org/prog/bastet.html")
246 (synopsis "Antagonistic Tetris-style falling brick game for text terminals")
247 (description
248 "Bastet (short for Bastard Tetris) is a simple ncurses-based falling brick
249 game. Unlike normal Tetris, Bastet does not choose the next brick at random.
250 Instead, it uses a special algorithm to choose the worst brick possible.
251
252 Playing bastet can be a painful experience, especially if you usually make
253 canyons and wait for the long I-shaped block to clear four rows at a time.")
254 (license license:gpl3+)))
255
256 (define-public cataclysm-dda
257 (let ((commit "0b2c194e5c6a06f4fbf14a0ec1260e0f3cf2567c")
258 (revision "2"))
259 (package
260 (name "cataclysm-dda")
261 ;; This denotes the version released after the 0.C release.
262 ;; Revert to a normal version number if updating to stable version 0.D.
263 (version (git-version "0.C" revision commit))
264 (source (origin
265 (method git-fetch)
266 (uri (git-reference
267 (url "https://github.com/CleverRaven/Cataclysm-DDA.git")
268 (commit commit)))
269 (sha256
270 (base32
271 "1yzsn0y2g27bvbxjvivjyjhkmf2w5na1qqw5qfkswcfqqwym2y33"))
272 (file-name (git-file-name name version))))
273 (build-system gnu-build-system)
274 (arguments
275 '(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
276 "USE_HOME_DIR=1" "DYNAMIC_LINKING=1" "RELEASE=1"
277 "LOCALIZE=1" "LANGUAGES=all")
278 #:phases
279 (modify-phases %standard-phases
280 (delete 'configure)
281 (add-after 'build 'build-tiles
282 (lambda* (#:key make-flags outputs #:allow-other-keys)
283 ;; Change prefix directory and enable tile graphics and sound.
284 (apply invoke "make" "TILES=1" "SOUND=1"
285 (string-append "PREFIX="
286 (assoc-ref outputs "tiles"))
287 (cdr make-flags))))
288 (add-after 'install 'install-tiles
289 (lambda* (#:key make-flags outputs #:allow-other-keys)
290 (apply invoke "make" "install" "TILES=1" "SOUND=1"
291 (string-append "PREFIX="
292 (assoc-ref outputs "tiles"))
293 (cdr make-flags)))))
294 ;; TODO: Add libtap++ from https://github.com/cbab/libtappp as a native
295 ;; input in order to support tests.
296 #:tests? #f))
297 (outputs '("out"
298 "tiles")) ; For tile graphics and sound support.
299 (native-inputs
300 `(("gettext" ,gettext-minimal)
301 ("pkg-config" ,pkg-config)))
302 (inputs
303 `(("freetype" ,freetype)
304 ("libogg" ,libogg)
305 ("libvorbis" ,libvorbis)
306 ("ncurses" ,ncurses)
307 ("sdl2" ,sdl2)
308 ("sdl2-image" ,sdl2-image)
309 ("sdl2-ttf" ,sdl2-ttf)
310 ("sdl2-mixer" ,sdl2-mixer)))
311 (home-page "http://en.cataclysmdda.com/")
312 (synopsis "Survival horror roguelike video game")
313 (description
314 "Cataclysm: Dark Days Ahead is a roguelike set in a post-apocalyptic
315 world. Struggle to survive in a harsh, persistent, procedurally generated
316 world. Scavenge the remnants of a dead civilization for food, equipment, or,
317 if you are lucky, a vehicle with a full tank of gas to get you out of Dodge.
318 Fight to defeat or escape from a wide variety of powerful monstrosities, from
319 zombies to giant insects to killer robots and things far stranger and deadlier,
320 and against the others like yourself, that want what you have.")
321 (license license:cc-by-sa3.0))))
322
323 (define-public cowsay
324 (package
325 (name "cowsay")
326 (version "3.04")
327 (source (origin
328 (method url-fetch)
329 (uri (string-append "https://github.com/tnalpgge/"
330 "rank-amateur-cowsay/archive/"
331 name "-" version ".tar.gz"))
332 (sha256
333 (base32
334 "12w7apbf6a9qffk92r32b16w22na2fjcqbl32rn0n7zw5hrp3f6q"))))
335 (build-system gnu-build-system)
336 (arguments
337 `(#:phases
338 (modify-phases %standard-phases
339 (delete 'configure) ; no configure script
340 (delete 'build) ; nothing to be built
341 (replace 'install
342 (lambda* (#:key outputs #:allow-other-keys)
343 (invoke "sh" "install.sh"
344 (assoc-ref outputs "out"))))
345 (delete 'check)
346 (add-after 'install 'check
347 (lambda* (#:key outputs #:allow-other-keys)
348 (invoke (string-append (assoc-ref outputs "out")
349 "/bin/cowsay")
350 "We're done!"))))))
351 (inputs
352 `(("perl" ,perl)))
353 (home-page (string-append "https://web.archive.org/web/20071026043648/"
354 "http://www.nog.net:80/~tony/warez/cowsay.shtml"))
355 (synopsis "Speaking cow text filter")
356 (description "Cowsay is basically a text filter. Send some text into it,
357 and you get a cow saying your text. If you think a talking cow isn't enough,
358 cows can think too: all you have to do is run @command{cowthink}. If you're
359 tired of cows, a variety of other ASCII-art messengers are available.")
360 (license license:gpl3+)))
361
362 (define-public freedoom
363 (package
364 (name "freedoom")
365 (version "0.11.3")
366 (source (origin
367 (method url-fetch)
368 (uri (string-append "https://github.com/" name "/" name
369 "/archive/v" version ".tar.gz"))
370 (file-name (string-append name "-" version ".tar.gz"))
371 (sha256
372 (base32
373 "1bjijdfqhpazyifx1qda7scj7dry1azhjrnl8h8zn2vqfgdmlh0q"))))
374 (build-system gnu-build-system)
375 (arguments
376 '(#:make-flags `(,(string-append "prefix=" (assoc-ref %outputs "out")))
377 #:parallel-build? #f
378 #:tests? #f ; no check target
379 #:phases
380 (modify-phases %standard-phases
381 (delete 'bootstrap)
382 (replace 'configure
383 (lambda* (#:key inputs outputs #:allow-other-keys)
384 (let* ((dejavu (assoc-ref inputs "font-dejavu"))
385 (freedoom (assoc-ref outputs "out"))
386 (wad-dir (string-append freedoom "/share/games/doom")))
387 ;; Replace the font-searching function in a shell
388 ;; script with a direct path to the required font.
389 ;; This is necessary because ImageMagick can only find the
390 ;; most basic fonts while in the build environment.
391 (substitute* "graphics/titlepic/create_caption"
392 (("font=\\$\\(find_font.*$")
393 (string-append
394 "font=" dejavu
395 "/share/fonts/truetype/DejaVuSansCondensed-Bold.ttf\n")))
396 ;; Make icon creation reproducible.
397 (substitute* "dist/Makefile"
398 (("freedm.png")
399 "-define png:exclude-chunks=date freedm.png")
400 (("freedoom1.png")
401 "-define png:exclude-chunks=date freedoom1.png")
402 (("freedoom2.png")
403 "-define png:exclude-chunks=date freedoom2.png"))
404 ;; Make sure that the install scripts know where to find
405 ;; the appropriate WAD files.
406 (substitute* "dist/freedoom"
407 (("IWAD=freedm.wad")
408 (string-append "IWAD=" wad-dir "/freedm.wad"))
409 (("IWAD=freedoom1.wad")
410 (string-append "IWAD=" wad-dir "/freedoom1.wad"))
411 (("IWAD=freedoom2.wad")
412 (string-append "IWAD=" wad-dir "/freedoom2.wad")))
413 #t))))))
414 (native-inputs
415 `(("asciidoc" ,asciidoc)
416 ("deutex" ,deutex)
417 ("font-dejavu" ,font-dejavu)
418 ("imagemagick" ,imagemagick)
419 ("python" ,python-2)))
420 (inputs
421 `(("prboom-plus" ,prboom-plus)))
422 (home-page "https://freedoom.github.io/")
423 (synopsis "Free content game based on the Doom engine")
424 (native-search-paths
425 (list (search-path-specification
426 (variable "DOOMWADDIR")
427 (files '("share/games/doom")))
428 (search-path-specification
429 (variable "DOOMWADPATH")
430 (files '("share/games/doom")))))
431 (description
432 "The Freedoom project aims to create a complete free content first person
433 shooter game. Freedoom by itself is just the raw material for a game: it must
434 be paired with a compatible game engine (such as @code{prboom-plus}) to be
435 played. Freedoom complements the Doom engine with free levels, artwork, sound
436 effects and music to make a completely free game.")
437 (license license:bsd-3)))
438
439 (define-public freedroidrpg
440 (package
441 (name "freedroidrpg")
442 (version "0.16.1")
443 (source
444 (origin
445 (method url-fetch)
446 (uri (string-append "http://ftp.osuosl.org/pub/freedroid/"
447 "freedroidRPG-" (version-major+minor version) "/"
448 "freedroidRPG-" version ".tar.gz"))
449 (sha256
450 (base32 "0n4kn38ncmcy3lrxmq8fjry6c1z50z4q1zcqfig0j4jb0dsz2va2"))))
451 (build-system gnu-build-system)
452 (arguments
453 `(#:configure-flags
454 (list
455 (string-append "CFLAGS="
456 "-I" (assoc-ref %build-inputs "sdl-gfx") "/include/SDL "
457 "-I" (assoc-ref %build-inputs "sdl-image") "/include/SDL "
458 "-I" (assoc-ref %build-inputs "sdl-mixer") "/include/SDL")
459 "--enable-opengl")
460 ;; FIXME: the test suite fails with the following error output:
461 ;; 4586 Segmentation fault env SDL_VIDEODRIVER=dummy \
462 ;; SDL_AUDIODRIVER=dummy ./src/freedroidRPG -nb text
463 #:tests? #f))
464 (native-inputs
465 `(("pkg-config" ,pkg-config)))
466 (inputs
467 `(("glu" ,glu)
468 ("libjpeg" ,libjpeg)
469 ("libogg" ,libogg)
470 ("libpng" ,libpng)
471 ("libvorbis" ,libvorbis)
472 ("mesa" ,mesa)
473 ("python" ,python-wrapper)
474 ("sdl" ,sdl)
475 ("sdl-gfx" ,sdl-gfx)
476 ("sdl-image" ,sdl-image)
477 ("sdl-mixer" ,sdl-mixer)
478 ("zlib" ,zlib)))
479 (home-page "http://www.freedroid.org/")
480 (synopsis "Isometric role-playing game against killer robots")
481 (description
482 "Freedroid RPG is an @dfn{RPG} (Role-Playing Game) with isometric graphics.
483 The game tells the story of a world destroyed by a conflict between robots and
484 their human masters. To restore peace to humankind, the player must complete
485 numerous quests while fighting off rebelling robots---either by taking control
486 of them, or by simply blasting them to pieces with melee and ranged weapons in
487 real-time combat.")
488 (license (list license:expat ; lua/
489 license:gpl3 ; src/gen_savestruct.py
490 license:gpl2+)))) ; the rest
491
492 (define-public golly
493 (package
494 (name "golly")
495 (version "3.2")
496 (source (origin
497 (method url-fetch)
498 (uri (string-append "mirror://sourceforge/golly/golly/golly-"
499 version "/golly-" version
500 "-src.tar.gz"))
501 (sha256
502 (base32
503 "0cg9mbwmf4q6qxhqlnzrxh9y047banxdb8pd3hgj3smmja2zf0jd"))))
504 (build-system gnu-build-system)
505 (arguments
506 '(#:make-flags (list "CC=gcc"
507 (string-append "GOLLYDIR="
508 (assoc-ref %outputs "out")
509 "/share/golly"))
510 #:tests? #f ; no check target
511 #:phases
512 (modify-phases %standard-phases
513 (replace 'configure
514 (lambda* (#:key inputs #:allow-other-keys)
515 ;; For some reason, setting the PYTHON_SHLIB make flag doesn't
516 ;; properly set the path to the Python shared library. This
517 ;; substitution acheives the same end by different means.
518 (substitute* "gui-wx/wxprefs.cpp"
519 (("pythonlib = wxT\\(STRINGIFY\\(PYTHON_SHLIB\\)\\)")
520 (string-append "pythonlib = \""
521 (assoc-ref inputs "python")
522 "/lib/libpython-2.7.so\"")))
523 #t))
524 (replace 'build
525 (lambda* (#:key make-flags outputs #:allow-other-keys)
526 (with-directory-excursion "gui-wx"
527 (apply invoke `("make" ,@make-flags "-f" "makefile-gtk")))))
528 (replace 'install
529 (lambda* (#:key outputs #:allow-other-keys)
530 (let* ((out (assoc-ref outputs "out"))
531 (bin (string-append out "/bin"))
532 (doc (string-append out "/share/doc/golly"))
533 (pixmaps (string-append out "/share/pixmaps"))
534 (share (string-append out "/share/golly")))
535 (for-each (lambda (binary)
536 (install-file binary bin))
537 '("bgolly" "golly"))
538 (for-each (lambda (document)
539 (install-file
540 (string-append "docs/" document ".html")
541 doc))
542 '("License" "ReadMe" "ToDo"))
543 (install-file "gui-wx/icons/appicon.xpm" pixmaps)
544 (for-each (lambda (folder)
545 (copy-recursively
546 folder
547 (string-append share "/" folder)))
548 '("Help" "Patterns" "Rules" "Scripts")))
549 #t)))))
550 (native-inputs
551 `(("lua" ,lua)))
552 (inputs
553 `(("glu" ,glu)
554 ("mesa" ,mesa)
555 ("python" ,python-2)
556 ("wxwidgets" ,wxwidgets-gtk2)
557 ("zlib" ,zlib)))
558 (home-page "http://golly.sourceforge.net/")
559 (synopsis "Software for exploring cellular automata")
560 (description
561 "Golly simulates Conway's Game of Life and many other types of cellular
562 automata. The following features are available:
563 @enumerate
564 @item Support for bounded and unbounded universes, with cells of up to 256
565 states.
566 @item Support for multiple algorithms, including Bill Gosper's Hashlife
567 algorithm.
568 @item Loading patterns from BMP, PNG, GIF and TIFF image files.
569 @item Reading RLE, macrocell, Life 1.05/1.06, dblife and MCell files.
570 @item Scriptable via Lua or Python.
571 @item Extracting patterns, rules and scripts from zip files.
572 @item Downloading patterns, rules and scripts from online archives.
573 @item Pasting patterns from the clipboard.
574 @item Unlimited undo/redo.
575 @item Configurable keyboard shortcuts.
576 @item Auto fit option to keep patterns within the view.
577 @end enumerate")
578 (license license:gpl2+)))
579
580 (define-public meandmyshadow
581 (package
582 (name "meandmyshadow")
583 (version "0.5a")
584 (source (origin
585 (method url-fetch)
586 (uri (string-append "mirror://sourceforge/meandmyshadow/"
587 version "/meandmyshadow-" version
588 "-src.tar.gz"))
589 (sha256
590 (base32
591 "0i98v6cgmpsxy7mbb0s2y6f6qq6mkwzk2nrv1nz39ncf948aky2h"))))
592 (build-system cmake-build-system)
593 (arguments
594 `(#:tests? #f)) ; there are no tests
595 (native-inputs
596 `(("pkg-config" ,pkg-config)))
597 (inputs
598 `(("curl" ,curl)
599 ("libarchive" ,libarchive)
600 ("lua" ,lua)
601 ("sdl" ,(sdl-union (list sdl2
602 sdl2-image
603 sdl2-mixer
604 sdl2-ttf)))))
605 (home-page "https://acmepjz.github.io/meandmyshadow/")
606 (synopsis "Puzzle/platform game")
607 (description "Me and My Shadow is a puzzle/platform game in which you try
608 to reach the exit by solving puzzles. Spikes, moving blocks, fragile blocks
609 and much more stand between you and the exit. Record your moves and let your
610 shadow mimic them to reach blocks you couldn't reach alone.")
611 (license license:gpl3+)))
612
613 (define-public knights
614 (package
615 (name "knights")
616 (version "025")
617 (source (origin
618 (method url-fetch)
619 (uri (string-append "http://www.knightsgame.org.uk/files/knights_"
620 version "_src.tar.gz"))
621 (sha256
622 (base32
623 "18vp2ygvn0s0jz8rm585jqf6hjqkam1ximq81k0r9hpmfj7wb88f"))))
624 (build-system gnu-build-system)
625 (arguments
626 '(#:make-flags
627 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
628 #:phases
629 (modify-phases %standard-phases
630 ;; No configure script.
631 (delete 'configure))
632 #:tests? #f)) ;; No check target.
633 (inputs
634 `(("boost" ,boost)
635 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
636 ("freetype" ,freetype)
637 ("fontconfig" ,fontconfig)
638 ("curl" ,curl)))
639 (native-inputs
640 `(("pkg-config" ,pkg-config)))
641 (home-page "http://www.knightsgame.org.uk/")
642 (synopsis "Multiplayer dungeon game involving knights and quests")
643 (description "Knights is a multiplayer game involving several knights who
644 must run around a dungeon and complete various quests. Each game revolves
645 around a quest – for example, you might have to find some items and carry them
646 back to your starting point. This may sound easy, but as there are only
647 enough items in the dungeon for one player to win, you may end up having to
648 kill your opponents to get their stuff! Other quests involve escaping from
649 the dungeon, fighting a duel to the death against the enemy knights, or
650 destroying an ancient book using a special wand.")
651 ;; This package includes modified sources of lua (X11), enet (Expat), and
652 ;; guichan (BSD-3). The "Coercri" library is released under the Boost
653 ;; license. The whole package is released under GPLv3+.
654 (license license:gpl3+)))
655
656 (define-public gnubg
657 (package
658 (name "gnubg")
659 (version "1.06.002")
660 (source
661 (origin
662 (method url-fetch)
663 (uri (string-append "http://files.gnubg.org/media/sources/gnubg-release-"
664 version "-sources." "tar.gz"))
665 (sha256
666 (base32
667 "11xwhcli1h12k6rnhhyq4jphzrhfik7i8ah3k32pqw803460n6yf"))))
668 (build-system gnu-build-system)
669 (inputs `(("glib" ,glib)
670 ("readline" ,readline)
671 ("gtk+" ,gtk+-2)
672 ("mesa" ,mesa)
673 ("glu" ,glu)
674 ("gtkglext" ,gtkglext)
675 ("sqlite" ,sqlite)
676 ("libcanberra" ,libcanberra)))
677 (native-inputs `(("python-2" ,python-2)
678 ("pkg-config" ,pkg-config)))
679 (home-page "http://gnubg.org")
680 (synopsis "Backgammon game")
681 (description "The GNU backgammon application can be used for playing,
682 analyzing and teaching the game. It has an advanced evaluation engine based on
683 artificial neural networks suitable for both beginners and advanced players. In
684 addition to a command-line interface, it also features an attractive, 3D
685 representation of the playing board.")
686 (license license:gpl3+)))
687
688 (define-public gnubik
689 (package
690 (name "gnubik")
691 (version "2.4.3")
692 (source
693 (origin
694 (method url-fetch)
695 (uri (string-append "mirror://gnu/gnubik/gnubik-"
696 version ".tar.gz"))
697 (sha256
698 (base32
699 "1vlf924mq8hg93bsjj0rzvs0crc6psmlxyc6zn0fr7msnmpx6gib"))))
700 (build-system gnu-build-system)
701 (inputs `(("gtk+" ,gtk+-2)
702 ("mesa" ,mesa)
703 ("glu" ,glu)
704 ("libx11" ,libx11)
705 ("guile" ,guile-2.0)
706 ("gtkglext" ,gtkglext)))
707 (native-inputs `(("gettext" ,gettext-minimal)
708 ("pkg-config" ,pkg-config)))
709 (home-page "https://www.gnu.org/software/gnubik/")
710 (synopsis "3d Rubik's cube game")
711 (description
712 "GNUbik is a puzzle game in which you must manipulate a cube to make
713 each of its faces have a uniform color. The game is customizable, allowing
714 you to set the size of the cube (the default is 3x3) or to change the colors.
715 You may even apply photos to the faces instead of colors. The game is
716 scriptable with Guile.")
717 (license license:gpl3+)))
718
719 (define-public gnushogi
720 (package
721 (name "gnushogi")
722 (version "1.4.2")
723 (source
724 (origin
725 (method url-fetch)
726 (uri (string-append "mirror://gnu/gnushogi/gnushogi-"
727 version ".tar.gz"))
728 (sha256
729 (base32
730 "0a9bsl2nbnb138lq0h14jfc5xvz7hpb2bcsj4mjn6g1hcsl4ik0y"))))
731 (arguments `(#:tests? #f)) ;; No check target.
732 (build-system gnu-build-system)
733 (home-page "https://www.gnu.org/software/gnushogi/")
734 (synopsis "The game of Shogi (Japanese chess)")
735 (description "GNU Shogi is a program that plays the game Shogi (Japanese
736 Chess). It is similar to standard chess but this variant is far more complicated.")
737 (license license:gpl3+)))
738
739 (define-public ltris
740 (package
741 (name "ltris")
742 (version "1.0.19")
743 (source
744 (origin
745 (method url-fetch)
746 (uri (string-append "http://prdownloads.sourceforge.net/lgames/"
747 name "-" version ".tar.gz"))
748 (sha256
749 (base32
750 "1895wv1fqklrj4apkz47rnkcfhfav7zjknskw6p0886j35vrwslg"))))
751 (build-system gnu-build-system)
752 (arguments
753 '(;; The code in LTris uses traditional GNU semantics for inline functions
754 #:configure-flags '("CFLAGS=-fgnu89-inline")
755 #:phases
756 (modify-phases %standard-phases
757 (add-after 'set-paths 'set-sdl-paths
758 (lambda* (#:key inputs #:allow-other-keys)
759 (setenv "CPATH"
760 (string-append (assoc-ref inputs "sdl-union")
761 "/include/SDL"))
762 #t)))))
763 (inputs
764 `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))))
765 (home-page "http://lgames.sourceforge.net/LTris/")
766 (synopsis "Tetris clone based on the SDL library")
767 (description
768 "LTris is a tetris clone: differently shaped blocks are falling down the
769 rectangular playing field and can be moved sideways or rotated by 90 degree
770 units with the aim of building lines without gaps which then disappear (causing
771 any block above the deleted line to fall down). LTris has three game modes: In
772 Classic you play until the stack of blocks reaches the top of the playing field
773 and no new blocks can enter. In Figures the playing field is reset to a new
774 figure each level and later on tiles and lines suddenly appear. In Multiplayer
775 up to three players (either human or CPU) compete with each other sending
776 removed lines to all opponents. There is also a Demo mode in which you can
777 watch your CPU playing while enjoying a cup of tea!")
778 (license license:gpl2+)))
779
780 (define-public nethack
781 (package
782 (name "nethack")
783 (version "3.6.1")
784 (source
785 (origin
786 (method url-fetch)
787 (uri (string-append "https://www.nethack.org/download/"
788 version "/" name "-361-src.tgz"))
789 (sha256
790 (base32 "1dha0ijvxhx7c9hr0452h93x81iiqsll8bc9msdnp7xdqcfbz32b"))))
791 (inputs
792 `(("ncurses" ,ncurses)
793 ("bison" ,bison)
794 ("flex" ,flex)
795 ("less" ,less)))
796 (build-system gnu-build-system)
797 (arguments
798 '(#:make-flags
799 `(,(string-append "PREFIX=" (assoc-ref %outputs "out")))
800 #:phases
801 (modify-phases %standard-phases
802 (add-before 'configure 'patch-paths
803 (lambda _
804 (substitute* "sys/unix/nethack.sh"
805 (("^ *cd .*$") ""))
806 (substitute* "sys/unix/Makefile.utl"
807 (("^YACC *=.*$") "YACC = bison -y\n")
808 (("^LEX *=.*$") "LEX = flex\n")
809 (("^# CC = gcc") "CC = gcc"))
810 (substitute* "sys/unix/hints/linux"
811 (("/bin/gzip") (string-append
812 (assoc-ref %build-inputs "gzip")
813 "/bin/gzip"))
814 (("^WINTTYLIB=.*") "WINTTYLIB=-lncurses"))
815 (substitute* "include/config.h"
816 (("^.*define CHDIR.*$") "")
817 (("^/\\* *#*define *REPRODUCIBLE_BUILD *\\*/")
818 ;; Honor SOURCE_DATE_EPOCH.
819 "#define REPRODUCIBLE_BUILD"))
820
821 ;; Note: 'makedefs' rejects and ignores dates that are too old
822 ;; or too new, so we must choose something reasonable here.
823 (setenv "SOURCE_DATE_EPOCH" "1531865062")
824
825 (substitute* "sys/unix/Makefile.src"
826 (("^# CC = gcc") "CC = gcc"))
827 #t))
828 (replace 'configure
829 (lambda _
830 (let ((bash (string-append
831 (assoc-ref %build-inputs "bash")
832 "/bin/bash")))
833 (with-directory-excursion "sys/unix"
834 (substitute* "setup.sh" (("/bin/sh") bash))
835 (invoke bash "setup.sh" "hints/linux"))
836 #t)))
837 (add-after 'install 'fixup-paths
838 (lambda _
839 (let* ((output (assoc-ref %outputs "out"))
840 (nethack-script (string-append output "/bin/nethack")))
841 (mkdir-p (string-append output "/games/lib/nethackuserdir"))
842 (for-each
843 (lambda (file)
844 (rename-file
845 (string-append output "/games/lib/nethackdir/" file)
846 (string-append output "/games/lib/nethackuserdir/"
847 file)))
848 '("xlogfile" "logfile" "perm" "record" "save"))
849 (mkdir-p (string-append output "/bin"))
850 (call-with-output-file nethack-script
851 (lambda (port)
852 (format port "#!~a/bin/sh
853 PATH=~a:$PATH
854 if [ ! -d ~~/.config/nethack ]; then
855 mkdir -p ~~/.config/nethack
856 cp -r ~a/games/lib/nethackuserdir/* ~~/.config/nethack
857 chmod -R +w ~~/.config/nethack
858 fi
859
860 RUNDIR=$(mktemp -d)
861
862 cleanup() {
863 rm -rf $RUNDIR
864 }
865 trap cleanup EXIT
866
867 cd $RUNDIR
868 for i in ~~/.config/nethack/*; do
869 ln -s $i $(basename $i)
870 done
871 for i in ~a/games/lib/nethackdir/*; do
872 ln -s $i $(basename $i)
873 done
874 ~a/games/nethack"
875 (assoc-ref %build-inputs "bash")
876 (list->search-path-as-string
877 (list
878 (string-append
879 (assoc-ref %build-inputs "coreutils") "/bin")
880 (string-append
881 (assoc-ref %build-inputs "less") "/bin"))
882 ":")
883 output
884 output
885 output)))
886 (chmod nethack-script #o555)
887 #t)))
888 (delete 'check))))
889 (home-page "https://nethack.org")
890 (synopsis "Classic dungeon crawl game")
891 (description "NetHack is a single player dungeon exploration game that runs
892 on a wide variety of computer systems, with a variety of graphical and text
893 interfaces all using the same game engine. Unlike many other Dungeons &
894 Dragons-inspired games, the emphasis in NetHack is on discovering the detail of
895 the dungeon and not simply killing everything in sight - in fact, killing
896 everything in sight is a good way to die quickly. Each game presents a
897 different landscape - the random number generator provides an essentially
898 unlimited number of variations of the dungeon and its denizens to be discovered
899 by the player in one of a number of characters: you can pick your race, your
900 role, and your gender.")
901 (license
902 (license:fsdg-compatible
903 "https://nethack.org/common/license.html"))))
904
905 (define-public pipewalker
906 (package
907 (name "pipewalker")
908 (version "0.9.4")
909 (source
910 (origin
911 (method url-fetch)
912 (uri (string-append "http://downloads.sourceforge.net/pipewalker/"
913 name "-" version ".tar.gz"))
914 (sha256
915 (base32
916 "1x46wgk0s55562pd96cxagxkn6wpgglq779f9b64ff1k3xzp3myn"))))
917 (build-system gnu-build-system)
918 (arguments
919 `(#:configure-flags
920 (list (string-append "--docdir=" (assoc-ref %outputs "out")
921 "/share/doc/" ,name "-" ,version))
922 #:phases
923 (modify-phases %standard-phases
924 (add-after 'configure 'patch-docdir
925 ;; Makefile.in ignores configure's ‘--docdir=...’ option. Fix that.
926 (lambda _
927 (substitute* "Makefile"
928 (("(pkgdocdatadir = ).*" _ assignment)
929 (string-append assignment "$(docdir)\n")))
930 #t)))))
931 (inputs
932 `(("libpng" ,libpng)
933 ("mesa" ,mesa)
934 ("sdl" ,sdl)))
935 (home-page "http://pipewalker.sourceforge.net/")
936 (synopsis "Logical tile puzzle")
937 (description
938 "PipeWalker is a simple puzzle game with many diffent themes: connect all
939 computers to one network server, bring water from a source to the taps, etc.
940 The underlying mechanism is always the same: you must turn each tile in the
941 grid in the right direction to combine all components into a single circuit.
942 Every puzzle has a complete solution, although there may be more than one.")
943 (license license:gpl3+)))
944
945 (define-public prboom-plus
946 (package
947 (name "prboom-plus")
948 (version "2.5.1.4")
949 (source (origin
950 (method url-fetch)
951 (uri (string-append "mirror://sourceforge/" name "/" name "/"
952 version "/" name "-" version ".tar.gz"))
953 (sha256
954 (base32
955 "151v6nign86m1a2vqz27krsccpc9m4d1jax4y43v2fa82wfj9qp0"))
956 (modules '((guix build utils)))
957 (snippet
958 '(begin
959 (substitute* "src/version.c"
960 (("__DATE__") "")
961 (("__TIME__") ""))
962 #t))))
963 (build-system gnu-build-system)
964 (arguments
965 '(#:configure-flags '("--disable-cpu-opt")
966 #:make-flags `(,(string-append "gamesdir="
967 (assoc-ref %outputs "out") "/bin"))
968 #:phases
969 (modify-phases %standard-phases
970 (add-after 'set-paths 'set-sdl'paths
971 (lambda* (#:key inputs #:allow-other-keys)
972 (setenv "CPATH"
973 (string-append (assoc-ref inputs "sdl-union")
974 "/include/SDL"))
975 #t)))))
976 (inputs
977 `(("fluidsynth" ,fluidsynth)
978 ("glu" ,glu)
979 ("libmad" ,libmad)
980 ("libpng" ,libpng)
981 ("libvorbis" ,libvorbis)
982 ("pcre" ,pcre)
983 ("portmidi" ,portmidi)
984 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net)))))
985 (home-page "http://prboom-plus.sourceforge.net/")
986 (synopsis "Version of the classic 3D shoot'em'up game Doom")
987 (description
988 "PrBoom+ is a Doom source port developed from the original PrBoom project.")
989 (license license:gpl2+)))
990
991 (define-public retux
992 (package
993 (name "retux")
994 (version "1.3.6")
995 (source (origin
996 (method url-fetch)
997 (uri (string-append "mirror://savannah/retux/"
998 (version-major+minor version) "/retux-"
999 version "-src.tar.gz"))
1000 (sha256
1001 (base32
1002 "01bidh4zisjp3nc436x0g85v60dvwb3ig37i7y01sa71j8fm4fmb"))))
1003 (build-system python-build-system)
1004 (arguments
1005 `(#:tests? #f ; no check target
1006 #:phases
1007 (modify-phases %standard-phases
1008 ;; no setup.py script
1009 (delete 'build)
1010 (replace 'install
1011 (lambda* (#:key outputs #:allow-other-keys)
1012 (let* ((out (assoc-ref outputs "out"))
1013 (bin (string-append out "/bin"))
1014 (data (string-append out "/share/retux"))
1015 (doc (string-append out "/share/doc/retux")))
1016 (mkdir-p bin)
1017
1018 (substitute* "retux.py"
1019 ;; Use the correct data directory.
1020 (("os\\.path\\.join\\(os\\.path\\.dirname\\(__file__\\), \"data\"\\),")
1021 (string-append "\"" data "\","))
1022 ;; Use Python 3 so the patch-shebangs phase works properly.
1023 ((".*python2.*") "#!/usr/bin/python3"))
1024
1025 (copy-file "retux.py" (string-append bin "/retux"))
1026
1027 (copy-recursively "data" data)
1028
1029 (install-file "COPYING" doc)
1030 #t))))))
1031 (inputs
1032 `(("python-sge-pygame" ,python-sge-pygame)
1033 ("python-six" ,python-six)
1034 ("python-xsge" ,python-xsge)))
1035 (home-page "http://retux.nongnu.org")
1036 (synopsis "Action platformer game")
1037 (description
1038 "ReTux is an action platformer loosely inspired by the Mario games,
1039 utilizing the art assets from the @code{SuperTux} project.")
1040 ;; GPL version 3 or later is the license for the code and some art.
1041 ;; The rest of the licenses are for the art exclusively, as listed in
1042 ;; data/LICENSES.
1043 (license (list license:cc0
1044 license:cc-by3.0
1045 license:cc-by-sa3.0
1046 license:cc-by-sa4.0
1047 license:gpl2+
1048 license:gpl3+))))
1049
1050 (define-public roguebox-adventures
1051 (package
1052 (name "roguebox-adventures")
1053 (version "2.2.1")
1054 (source
1055 (origin
1056 (method url-fetch)
1057 (uri (string-append
1058 "http://download.tuxfamily.org/rba/RogueBoxAdventures_v"
1059 (string-join (string-split version #\.) "_") "_Source.zip"))
1060 (file-name (string-append name "-" version ".zip"))
1061 (sha256
1062 (base32
1063 "0kmzdgnik8fsf3bg55546l77p3mfxn2awkzfzzdn20n82rd2babw"))))
1064 (build-system python-build-system)
1065 (arguments
1066 `(#:tests? #f ; no check target
1067 #:phases
1068 (modify-phases %standard-phases
1069 (replace 'unpack
1070 (lambda* (#:key source #:allow-other-keys)
1071 (and (invoke "unzip" source)
1072 ;; The actual source is buried a few directories deep.
1073 (chdir (string-append "RogueBoxAdventures_v"
1074 (string-join
1075 (string-split ,version #\.) "_")
1076 "_Source")))))
1077 ;; no setup.py script
1078 (replace 'build
1079 (lambda* (#:key outputs #:allow-other-keys)
1080 (let* ((out (assoc-ref outputs "out"))
1081 (data (string-append
1082 out "/share/games/roguebox-adventures")))
1083 ;; Use the correct data directory.
1084 (substitute* '("main.py" "LIB/getch.py" "LIB/getch_gcwz.py")
1085 (("basic_path + os\\.sep + 'DATA'")
1086 (string-append "'" data "'"))
1087 (("^basic_path.*$")
1088 (string-append "basic_path ='" data "'\n")))
1089 (substitute* "LIB/gra_files.py"
1090 (("basic_path = b_path\\.replace\\('/LIB',''\\)")
1091 (string-append "basic_path ='" data "'\n")))
1092
1093 ;; The game must save in the user's home directory because
1094 ;; the store is read-only.
1095 (substitute* "main.py"
1096 (("home_save = False") "home_save = True")
1097 (("'icon_small.png'")
1098 (string-append "'" data "/icon_small.png'"))))
1099 #t))
1100 (replace 'install
1101 (lambda* (#:key outputs #:allow-other-keys)
1102 (let* ((out (assoc-ref outputs "out"))
1103 (bin (string-append out "/bin"))
1104 (roguebox-adventures
1105 (string-append bin "/roguebox-adventures"))
1106 (data (string-append
1107 out "/share/games/roguebox-adventures"))
1108 (lib (string-append data "/LIB"))
1109 (doc (string-append
1110 out "/share/doc/roguebox-adventures")))
1111 (mkdir-p bin)
1112 (mkdir-p doc)
1113
1114 (for-each (lambda (file)
1115 (copy-recursively file
1116 (string-append data "/" file)))
1117 '("AUDIO" "FONT" "GRAPHIC" "LIB" "LICENSE"
1118 "icon_big.png" "icon_small.png"))
1119 (for-each (lambda (file)
1120 (chmod file #o555)
1121 (install-file file lib))
1122 '("main.py" "run.py"))
1123
1124 (copy-recursively "DOC" doc)
1125
1126 (call-with-output-file
1127 roguebox-adventures
1128 (lambda (p)
1129 (format p "\
1130 #!~a
1131 export PYTHONPATH=~a/LIB:~a
1132 exec -a \"~a\" ~a \"$@\"\n"
1133 (which "bash") data (getenv "PYTHONPATH")
1134 (which "python3")
1135 (string-append lib "/main.py"))))
1136 (chmod roguebox-adventures #o555))
1137 #t)))))
1138 (native-inputs
1139 `(("unzip" ,unzip)))
1140 (inputs
1141 `(("python-pygame" ,python-pygame)
1142 ("python-tmx" ,python-tmx)))
1143 (home-page "https://rogueboxadventures.tuxfamily.org")
1144 (synopsis "A classical roguelike/sandbox game")
1145 (description
1146 "RogueBox Adventures is a graphical roguelike with strong influences
1147 from sandbox games like Minecraft or Terraria. The main idea of RogueBox
1148 Adventures is to offer the player a kind of roguelike toy-world. This world
1149 can be explored and changed freely.")
1150 ;; The GPL3+ is for code, the rest are for art.
1151 (license (list license:cc0
1152 license:cc-by3.0
1153 license:gpl3+
1154 license:silofl1.1))))
1155
1156 (define-public xshogi
1157 (package
1158 (name "xshogi")
1159 (version "1.4.2")
1160 (source
1161 (origin
1162 (method url-fetch)
1163 (uri (string-append "mirror://gnu/gnushogi/xshogi-"
1164 version ".tar.gz"))
1165 (sha256
1166 (base32
1167 "1dns0nhymak44by18sv48m4xb2skiwbi2i3nb9hl6w9iwd2i2brf"))))
1168 (build-system gnu-build-system)
1169 (inputs
1170 `(("libxaw" ,libxaw)
1171 ("libxt" ,libxt)))
1172 (home-page "https://www.gnu.org/software/gnushogi/")
1173 (synopsis "User interface for gnushogi")
1174 (description "A graphical user interface for the package @code{gnushogi}.")
1175 ;; Contains a copy of GPLv3 but the licence notices simply
1176 ;; state "GNU General Public Licence" without specifying a version.
1177 (license license:gpl1+)))
1178
1179 (define-public abbaye
1180 (package
1181 (name "abbaye")
1182 (version "2.0.1")
1183 (source
1184 (origin
1185 (method url-fetch)
1186 (uri (string-append "https://github.com/nevat/abbayedesmorts-gpl/"
1187 "archive/v" version ".tar.gz"))
1188 (file-name (string-append name "-" version ".tar.gz"))
1189 (sha256
1190 (base32
1191 "1a67b0hq6271dd7pvwndjq29cwn2n8gawwz17xafa3k1hrhf8vw3"))
1192 (modules '((guix build utils)))
1193 (snippet
1194 ;; Unbundle fonts.
1195 '(begin
1196 (delete-file-recursively "fonts")
1197 #t))))
1198 (build-system gnu-build-system)
1199 (arguments
1200 '(#:make-flags '("CC=gcc")
1201 #:phases (modify-phases %standard-phases
1202 (add-after 'set-paths 'set-sdl-paths
1203 (lambda* (#:key inputs #:allow-other-keys)
1204 (setenv "CPATH"
1205 (string-append (assoc-ref inputs "sdl-union")
1206 "/include/SDL"))))
1207 (add-after 'patch-source-shebangs 'patch-makefile
1208 (lambda* (#:key outputs #:allow-other-keys)
1209 ;; Replace /usr with package output directory.
1210 (substitute* "Makefile"
1211 (("/usr") (assoc-ref outputs "out")))))
1212 (add-before 'install 'make-install-dirs
1213 (lambda* (#:key outputs #:allow-other-keys)
1214 (let ((prefix (assoc-ref outputs "out")))
1215 ;; Create directories that the makefile assumes exist.
1216 (mkdir-p (string-append prefix "/bin"))
1217 (mkdir-p (string-append prefix "/share/applications"))
1218 (mkdir-p (string-append prefix "/share/pixmaps")))))
1219 ;; No configure script.
1220 (delete 'configure))
1221 #:tests? #f)) ;; No check target.
1222 (native-inputs `(("pkg-config" ,pkg-config)))
1223 (inputs `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer)))))
1224 (home-page "https://github.com/nevat/abbayedesmorts-gpl")
1225 (synopsis "GNU/Linux port of the indie game \"l'Abbaye des Morts\"")
1226 (description "L'Abbaye des Morts is a 2D platform game set in 13th century
1227 France. The Cathars, who preach about good Christian beliefs, were being
1228 expelled by the Catholic Church out of the Languedoc region in France. One of
1229 them, called Jean Raymond, found an old church in which to hide, not knowing
1230 that beneath its ruins lay buried an ancient evil.")
1231 (license license:gpl3)))
1232
1233 (define-public angband
1234 (package
1235 (name "angband")
1236 (version "4.1.3")
1237 (source
1238 (origin
1239 (method url-fetch)
1240 (uri (string-append "http://rephial.org/downloads/"
1241 (version-major+minor version)
1242 "/angband-" version ".tar.gz"))
1243 (sha256
1244 (base32
1245 "0vs0314lbdc6rzxn4jnb7zp6n1p1cdb8r53savadn7k9vbwc80ll"))
1246 (modules '((guix build utils)))
1247 (snippet
1248 ;; So, some of the sounds/graphics/tilesets are under different
1249 ;; licenses... some of them even nonfree! This is a console-only
1250 ;; version of this package so we just remove them.
1251 ;; In the future, if someone tries to make a graphical variant of
1252 ;; this package, they can deal with that mess themselves. :)
1253 '(begin
1254 (for-each (lambda (subdir)
1255 (let ((lib-subdir (string-append "lib/" subdir)))
1256 (delete-file-recursively lib-subdir)))
1257 '("fonts" "icons" "sounds" "tiles"))
1258 (substitute* "lib/Makefile"
1259 ;; And don't try to invoke makefiles in the directories we removed
1260 (("gamedata customize help screens fonts tiles sounds icons user")
1261 "gamedata customize help screens user"))
1262 #t))))
1263 (build-system gnu-build-system)
1264 (arguments
1265 `(#:tests? #f ; no check target
1266 #:configure-flags (list (string-append "--bindir=" %output "/bin"))
1267 #:phases
1268 (modify-phases %standard-phases
1269 (replace 'bootstrap
1270 (lambda _
1271 (substitute* "acinclude.m4"
1272 (("ncursesw5-config") "ncursesw6-config"))
1273 (invoke "sh" "autogen.sh"))))))
1274 (native-inputs
1275 `(("autoconf" ,autoconf)
1276 ("automake" ,automake)))
1277 (inputs `(("ncurses" ,ncurses)))
1278 (home-page "http://rephial.org/")
1279 (synopsis "Dungeon exploration roguelike")
1280 (description "Angband is a Classic dungeon exploration roguelike. Explore
1281 the depths below Angband, seeking riches, fighting monsters, and preparing to
1282 fight Morgoth, the Lord of Darkness.")
1283 (license license:gpl2)))
1284
1285 (define-public pingus
1286 (package
1287 (name "pingus")
1288 (version "0.7.6")
1289 (source
1290 (origin
1291 (method git-fetch)
1292 (uri (git-reference
1293 (url "https://github.com/Pingus/pingus.git")
1294 (commit (string-append "v" version))))
1295 (file-name (git-file-name name version))
1296 (sha256
1297 (base32
1298 "0wp06kcmknsnxz7bjnsndb8x062z7r23fb3yrnbfnj68qhz18y74"))
1299 (patches (search-patches "pingus-boost-headers.patch"
1300 "pingus-sdl-libs-config.patch"))))
1301 (build-system gnu-build-system)
1302 (native-inputs `(("pkg-config" ,pkg-config)
1303 ("scons-python2" ,scons-python2)))
1304 (inputs `(("sdl" ,sdl)
1305 ("sdl-image" ,sdl-image)
1306 ("sdl-mixer" ,sdl-mixer)
1307 ("mesa" ,mesa)
1308 ("glu" ,glu)
1309 ("libpng" ,libpng)
1310 ("boost" ,boost)))
1311 (arguments
1312 '(#:make-flags (list (string-append "PREFIX=" %output))
1313 #:tests? #f ; no check target
1314 #:phases
1315 (modify-phases %standard-phases
1316 (delete 'configure)))) ; no configure script
1317 (home-page "https://pingus.seul.org/")
1318 (synopsis "Lemmings clone")
1319 (description
1320 "Pingus is a free Lemmings-like puzzle game in which the player takes
1321 command of a bunch of small animals and has to guide them through levels.
1322 Since the animals walk on their own, the player can only influence them by
1323 giving them commands, like build a bridge, dig a hole, or redirect all animals
1324 in the other direction. Multiple such commands are necessary to reach the
1325 level's exit. The game is presented in a 2D side view.")
1326 ;; Some source files are under bsd-3 and gpl2+ licenses.
1327 (license license:gpl3+)))
1328
1329 (define-public talkfilters
1330 (package
1331 (name "talkfilters")
1332 (version "2.3.8")
1333 (source
1334 (origin
1335 (method url-fetch)
1336 (uri (string-append "http://www.hyperrealm.com/" name "/"
1337 name "-" version ".tar.gz"))
1338 (sha256
1339 (base32 "19nc5vq4bnkjvhk8srqddzhcs93jyvpm9r6lzjzwc1mgf08yg0a6"))))
1340 (build-system gnu-build-system)
1341 (home-page "https://www.gnu.org/software/talkfilters/")
1342 (synopsis "Convert English text to humorous dialects")
1343 (description "The GNU Talk Filters are programs that convert English text
1344 into stereotyped or otherwise humorous dialects. The filters are provided as
1345 a C library, so they can easily be integrated into other programs.")
1346 (license license:gpl2+)))
1347
1348 (define-public cmatrix
1349 (package
1350 (name "cmatrix")
1351 (version "1.2a")
1352 (source
1353 (origin
1354 (method url-fetch)
1355 (uri (string-append "http://www.asty.org/cmatrix/dist/cmatrix-" version
1356 ".tar.gz"))
1357 (sha256
1358 (base32
1359 "0k06fw2n8nzp1pcdynhajp5prba03gfgsbj91bknyjr5xb5fd9hz"))))
1360 (build-system gnu-build-system)
1361 (arguments
1362 '(#:phases
1363 (modify-phases %standard-phases
1364 (replace 'configure
1365 (lambda* (#:key outputs #:allow-other-keys)
1366 ;; This old ‘configure’ script doesn't support
1367 ;; variables passed as arguments.
1368 (let ((out (assoc-ref outputs "out")))
1369 (setenv "CONFIG_SHELL" (which "bash"))
1370 (invoke "./configure"
1371 (string-append "--prefix=" out))))))))
1372 (inputs `(("ncurses" ,ncurses)))
1373 (home-page "http://www.asty.org/cmatrix")
1374 (synopsis "Simulate the display from \"The Matrix\"")
1375 (description "CMatrix simulates the display from \"The Matrix\" and is
1376 based on the screensaver from the movie's website. It works with terminal
1377 settings up to 132x300 and can scroll lines all at the same rate or
1378 asynchronously and at a user-defined speed.")
1379 (license license:gpl2+)))
1380
1381 (define-public chess
1382 (package
1383 (name "chess")
1384 (version "6.2.5")
1385 (source
1386 (origin
1387 (method url-fetch)
1388 (uri (string-append "mirror://gnu/chess/gnuchess-" version
1389 ".tar.gz"))
1390 (sha256
1391 (base32
1392 "00j8s0npgfdi41a0mr5w9qbdxagdk2v41lcr42rwl1jp6miyk6cs"))))
1393 (build-system gnu-build-system)
1394 (home-page "https://www.gnu.org/software/chess/")
1395 (synopsis "Full chess implementation")
1396 (description "GNU Chess is a chess engine. It allows you to compete
1397 against the computer in a game of chess, either through the default terminal
1398 interface or via an external visual interface such as GNU XBoard.")
1399 (license license:gpl3+)))
1400
1401 (define freedink-engine
1402 (package
1403 (name "freedink-engine")
1404 (version "108.4")
1405 (source (origin
1406 (method url-fetch)
1407 (uri (string-append "mirror://gnu/freedink/freedink-" version
1408 ".tar.gz"))
1409 (sha256
1410 (base32
1411 "08c51imfjfcydm7h0va09z8qfw5nc837bi2x754ni2z737hb5kw2"))))
1412 (build-system gnu-build-system)
1413 (arguments `(#:configure-flags '("--disable-embedded-resources")))
1414 (native-inputs `(("gettext" ,gettext-minimal)
1415 ("pkg-config" ,pkg-config)))
1416 (inputs `(("sdl" ,sdl)
1417 ("sdl-image" ,sdl-image)
1418 ("sdl-mixer" ,sdl-mixer)
1419 ("sdl-ttf" ,sdl-ttf)
1420 ("sdl-gfx" ,sdl-gfx)
1421 ("fontconfig" ,fontconfig)
1422 ("check" ,check)))
1423 (properties '((ftp-directory . "/freedink")
1424 (upstream-name . "freedink")))
1425 (home-page "https://www.gnu.org/software/freedink/")
1426 (synopsis "Twisted adventures of young pig farmer Dink Smallwood")
1427 (description
1428 "GNU FreeDink is a free and portable re-implementation of the engine
1429 for the role-playing game Dink Smallwood. It supports not only the original
1430 game data files but it also supports user-produced game mods or \"D-Mods\".
1431 To that extent, it also includes a front-end for managing all of your D-Mods.")
1432 (license license:gpl3+)))
1433
1434 (define freedink-data
1435 (package
1436 (name "freedink-data")
1437 (version "1.08.20190120")
1438 (source (origin
1439 (method url-fetch)
1440 (uri (string-append "mirror://gnu/freedink/freedink-data-"
1441 version ".tar.gz"))
1442 (sha256
1443 (base32
1444 "17gvryadlxk172mblbsil7hina1z5wahwaxnr6g3mdq57dvl8pvi"))))
1445 (build-system gnu-build-system)
1446 (arguments
1447 `(#:phases
1448 (modify-phases %standard-phases
1449 (delete 'configure) ; no configure script
1450 (delete 'check)) ; no tests
1451 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
1452 (properties '((ftp-directory . "/freedink")))
1453 (home-page "https://www.gnu.org/software/freedink/")
1454 (synopsis "Game data for GNU Freedink")
1455 (description
1456 "This package contains the game data of GNU Freedink.")
1457 (license license:gpl3+)))
1458
1459 (define-public freedink-dfarc
1460 (package
1461 (name "freedink-dfarc")
1462 (version "3.14")
1463 (source (origin
1464 (method url-fetch)
1465 (uri (string-append "mirror://gnu/freedink/dfarc-"
1466 version ".tar.gz"))
1467 (sha256
1468 (base32
1469 "1yp8n3w426xnlp10xk06vfi2y3k9xrcfyck7s7qs1v0ys7n284d5"))))
1470 (build-system gnu-build-system)
1471 (native-inputs
1472 `(("intltool" ,intltool)))
1473 (inputs
1474 `(("bzip2" ,bzip2)
1475 ("wxwidgets" ,wxwidgets)))
1476 (properties '((ftp-directory . "/freedink")
1477 (upstream-name . "dfarc")))
1478 (home-page "https://www.gnu.org/software/freedink/")
1479 (synopsis "Front-end for managing and playing Dink Modules")
1480 (description "DFArc makes it easy to play and manage the GNU FreeDink game
1481 and its numerous D-Mods.")
1482 (license license:gpl3+)))
1483
1484 (define-public freedink
1485 ;; This is a wrapper that tells the engine where to find the data.
1486 (package (inherit freedink-engine)
1487 (name "freedink")
1488 (build-system trivial-build-system)
1489 (arguments
1490 '(#:builder (begin
1491 (use-modules (guix build utils))
1492
1493 (let* ((output (assoc-ref %outputs "out"))
1494 (bin (string-append output "/bin"))
1495 (executable (string-append bin "/freedink")))
1496 (mkdir-p bin)
1497 (call-with-output-file executable
1498 (lambda (port)
1499 (format port "#!~a/bin/sh
1500 exec ~a/bin/freedink -refdir ~a/share/dink\n"
1501 (assoc-ref %build-inputs "bash")
1502 (assoc-ref %build-inputs "engine")
1503 (assoc-ref %build-inputs "data"))
1504 (chmod port #o777)))
1505 #t))
1506 #:modules ((guix build utils))))
1507 (inputs `(("engine" ,freedink-engine)
1508 ("data" ,freedink-data)
1509 ("bash" ,bash)))
1510 (native-inputs '())))
1511
1512 (define-public xboard
1513 (package
1514 (name "xboard")
1515 (version "4.9.1")
1516 (source
1517 (origin
1518 (method url-fetch)
1519 (uri (string-append "mirror://gnu/xboard/xboard-" version
1520 ".tar.gz"))
1521 (sha256
1522 (base32
1523 "1mkh36xnnacnz9r00b5f9ld9309k32jv6mcavklbdnca8bl56bib"))))
1524 (build-system gnu-build-system)
1525 (inputs
1526 `(("gtk+" ,gtk+-2)
1527 ("librsvg" ,librsvg)))
1528 (native-inputs
1529 `(("texinfo" ,texinfo)
1530 ("pkg-config" ,pkg-config)))
1531 (home-page "https://www.gnu.org/software/xboard/")
1532 (synopsis "Graphical user interface for chess programs")
1533 (description "GNU XBoard is a graphical board for all varieties of chess,
1534 including international chess, xiangqi (Chinese chess), shogi (Japanese chess)
1535 and Makruk. Several lesser-known variants are also supported. It presents a
1536 fully interactive graphical interface and it can load and save games in the
1537 Portable Game Notation.")
1538 (license license:gpl3+)))
1539
1540 (define-public gtypist
1541 (package
1542 (name "gtypist")
1543 (version "2.9.5")
1544 (source (origin
1545 (method url-fetch)
1546 (uri (string-append "mirror://gnu/gtypist/gtypist-"
1547 version ".tar.xz"))
1548 (sha256
1549 (base32
1550 "0xzrkkmj0b1dw3yr0m9hml2y634cc4h61im6zwcq57s7285z8fn1"))
1551 (modules '((guix build utils)))
1552 (snippet
1553 ;; We do not provide `ncurses.h' within an `ncursesw'
1554 ;; sub-directory, so patch the source accordingly. See
1555 ;; <http://bugs.gnu.org/19018>.
1556 '(begin
1557 (for-each (lambda (file)
1558 (substitute* file
1559 (("ncursesw/ncurses.h")
1560 "ncurses.h")))
1561 (find-files "." "configure$|\\.c$"))
1562 #t))))
1563 (build-system gnu-build-system)
1564 (inputs `(("ncurses" ,ncurses)
1565 ("perl" ,perl)))
1566 (home-page "https://www.gnu.org/software/gtypist/")
1567 (synopsis "Typing tutor")
1568 (description
1569 "GNU Typist is a universal typing tutor. It can be used to learn and
1570 practice touch-typing. Several tutorials are included; in addition to
1571 tutorials for the standard QWERTY layout, there are also tutorials for the
1572 alternative layouts Dvorak and Colemak, as well as for the numpad. Tutorials
1573 are primarily in English, however some in other languages are provided.")
1574 (license license:gpl3+)))
1575
1576 (define-public irrlicht
1577 (package
1578 (name "irrlicht")
1579 (version "1.8.4")
1580 (source (origin
1581 (method url-fetch)
1582 (uri (string-append
1583 "mirror://sourceforge/irrlicht/Irrlicht%20SDK/"
1584 (version-major+minor version)
1585 "/" version "/irrlicht-" version ".zip"))
1586 (sha256
1587 (base32
1588 "0cz4z4dwrv5ypl19ll67wl6jjpy5k6ly4vr042w4br88qq5jhazl"))
1589 (patches (search-patches "irrlicht-use-system-libs.patch"))
1590 (modules '((guix build utils)))
1591 (snippet
1592 '(begin
1593 (for-each delete-file-recursively
1594 '("bin" ; bundled compiled Windows binaries"
1595 "source/Irrlicht/MacOSX"
1596 "source/Irrlicht/bzip2"
1597 "source/Irrlicht/jpeglib"
1598 "source/Irrlicht/libpng"
1599 "source/Irrlicht/lzma"
1600 "source/Irrlicht/zlib"))
1601 (delete-file "source/Irrlicht/glext.h")
1602 (delete-file "source/Irrlicht/glxext.h")
1603 (delete-file "source/Irrlicht/wglext.h")
1604 #t))))
1605 (build-system gnu-build-system)
1606 (arguments
1607 `(#:phases
1608 (modify-phases %standard-phases
1609 (add-after 'unpack 'chdir-to-source
1610 (lambda _
1611 ;; The actual source is buried a few directories deep.
1612 (chdir "source/Irrlicht/")
1613 #t))
1614 (add-after 'chdir-to-source 'fix-build-env
1615 (lambda* (#:key outputs #:allow-other-keys)
1616 (let ((out (assoc-ref outputs "out")))
1617 (substitute* "Makefile"
1618 (("INSTALL_DIR = /usr/local/lib")
1619 (string-append "INSTALL_DIR = " out "/lib"))
1620 ;; Add '-fpermissive' to the CXXFLAGS
1621 (("-Wall") "-Wall -fpermissive")) ; CImageLoaderJPG.cpp
1622 ;; The Makefile assumes these directories exist.
1623 (mkdir-p (string-append out "/lib"))
1624 (mkdir-p (string-append out "/include")))))
1625 (delete 'configure)) ; no configure script
1626 #:tests? #f ; no check target
1627 #:make-flags '("CC=gcc" "sharedlib")))
1628 (inputs
1629 `(("bzip2" ,bzip2)
1630 ("libjpeg" ,libjpeg)
1631 ("libpng" ,libpng)
1632 ("libx11" ,libx11)
1633 ("libxxf86vm" ,libxxf86vm)
1634 ("mesa" ,mesa)))
1635 (synopsis "3D game engine written in C++")
1636 (description
1637 "The Irrlicht Engine is a high performance realtime 3D engine written in
1638 C++. Features include an OpenGL renderer, extensible materials, scene graph
1639 management, character animation, particle and other special effects, support
1640 for common mesh file formats, and collision detection.")
1641 (home-page "http://irrlicht.sourceforge.net/")
1642 (license license:zlib)))
1643
1644 (define-public mars
1645 ;; The latest release on SourceForge relies on an unreleased version of SFML
1646 ;; with a different API, so we take the latest version from the official
1647 ;; repository on Github.
1648 (let ((commit "c855d044094a1d92317e38935d81ba938946132e")
1649 (revision "1"))
1650 (package
1651 (name "mars")
1652 (version (string-append "0.7.5." revision "." (string-take commit 7) ))
1653 (source (origin
1654 (method git-fetch)
1655 (uri (git-reference
1656 (url "https://github.com/thelaui/M.A.R.S..git")
1657 (commit commit)))
1658 (file-name (string-append name "-" version))
1659 (sha256
1660 (base32
1661 "1r4c5gap1z2zsv4yjd34qriqkxaq4lb4rykapyzkkdf4g36lc3nh"))
1662 (patches (search-patches "mars-sfml-2.3.patch"
1663 "mars-install.patch"))))
1664 (build-system cmake-build-system)
1665 (arguments
1666 `(#:tests? #f ; There are no tests
1667 #:phases
1668 (modify-phases %standard-phases
1669 (add-after 'unpack 'fix-install-path
1670 (lambda _
1671 (substitute* "src/CMakeLists.txt"
1672 (("\\$\\{CMAKE_INSTALL_PREFIX\\}/games")
1673 "${CMAKE_INSTALL_PREFIX}/bin"))
1674 #t))
1675 (add-after 'unpack 'fix-data-path
1676 (lambda* (#:key outputs #:allow-other-keys)
1677 (substitute* "src/System/settings.cpp"
1678 (("C_dataPath = \"./data/\";")
1679 (string-append "C_dataPath = \""
1680 (assoc-ref outputs "out")
1681 "/share/games/marsshooter/\";")))
1682 #t)))))
1683 (inputs
1684 `(("mesa" ,mesa)
1685 ("fribidi" ,fribidi)
1686 ("taglib" ,taglib)
1687 ("sfml" ,sfml)))
1688 (home-page "http://marsshooter.org")
1689 (synopsis "2D space shooter")
1690 (description
1691 "M.A.R.S. is a 2D space shooter with pretty visual effects and
1692 attractive physics. Players can battle each other or computer controlled
1693 enemies in different game modes such as space ball, death match, team death
1694 match, cannon keep, and grave-itation pit.")
1695 (license license:gpl3+))))
1696
1697 (define minetest-data
1698 (package
1699 (name "minetest-data")
1700 (version "0.4.17")
1701 (source (origin
1702 (method git-fetch)
1703 (uri (git-reference
1704 (url "https://github.com/minetest/minetest_game")
1705 (commit version)))
1706 (file-name (git-file-name name version))
1707 (sha256
1708 (base32
1709 "1g8iw2pya32ifljbdx6z6rpcinmzm81i9minhi2bi1d500ailn7s"))))
1710 (build-system trivial-build-system)
1711 (native-inputs
1712 `(("source" ,source)))
1713 (arguments
1714 `(#:modules ((guix build utils))
1715 #:builder (begin
1716 (use-modules (guix build utils))
1717 (let ((install-dir (string-append
1718 %output
1719 "/share/minetest/games/minetest_game")))
1720 (mkdir-p install-dir)
1721 (copy-recursively
1722 (assoc-ref %build-inputs "source")
1723 install-dir)
1724 #t))))
1725 (synopsis "Main game data for the Minetest game engine")
1726 (description
1727 "Game data for the Minetest infinite-world block sandox game.")
1728 (home-page "http://minetest.net")
1729 (license license:lgpl2.1+)))
1730
1731 (define-public minetest
1732 (package
1733 (name "minetest")
1734 (version "0.4.17.1")
1735 (source (origin
1736 (method git-fetch)
1737 (uri (git-reference
1738 (url "https://github.com/minetest/minetest")
1739 (commit version)))
1740 (file-name (git-file-name name version))
1741 (sha256
1742 (base32
1743 "19sfblgh9mchkgw32n7gdvm7a8a9jxsl9cdlgmxn9bk9m939a2sg"))
1744 (modules '((guix build utils)))
1745 (snippet
1746 '(begin
1747 (delete-file-recursively "lib") #t))))
1748 (build-system cmake-build-system)
1749 (arguments
1750 '(#:configure-flags
1751 (list "-DRUN_IN_PLACE=0"
1752 "-DENABLE_FREETYPE=1"
1753 "-DENABLE_GETTEXT=1"
1754 "-DENABLE_SYSTEM_JSONCPP=TRUE"
1755 (string-append "-DIRRLICHT_INCLUDE_DIR="
1756 (assoc-ref %build-inputs "irrlicht")
1757 "/include/irrlicht")
1758 (string-append "-DCURL_INCLUDE_DIR="
1759 (assoc-ref %build-inputs "curl")
1760 "/include/curl"))
1761 #:tests? #f)) ; no check target
1762 (native-search-paths
1763 (list (search-path-specification
1764 (variable "MINETEST_SUBGAME_PATH")
1765 (files '("share/minetest/games")))))
1766 (native-inputs
1767 `(("pkg-config" ,pkg-config)))
1768 (inputs
1769 `(("curl" ,curl)
1770 ("freetype" ,(@ (gnu packages fontutils) freetype))
1771 ("gettext" ,gettext-minimal)
1772 ("gmp" ,gmp)
1773 ("irrlicht" ,irrlicht)
1774 ("jsoncpp" ,jsoncpp)
1775 ("libjpeg" ,libjpeg)
1776 ("libpng" ,libpng)
1777 ("libogg" ,libogg)
1778 ("libvorbis" ,libvorbis)
1779 ("libxxf86vm" ,libxxf86vm)
1780 ("luajit" ,luajit)
1781 ("mesa" ,mesa)
1782 ("ncurses" ,ncurses)
1783 ("openal" ,openal)
1784 ("sqlite" ,sqlite)))
1785 (propagated-inputs
1786 `(("minetest-data" ,minetest-data)))
1787 (synopsis "Infinite-world block sandbox game")
1788 (description
1789 "Minetest is a sandbox construction game. Players can create and destroy
1790 various types of blocks in a three-dimensional open world. This allows
1791 forming structures in every possible creation, on multiplayer servers or as a
1792 single player. Mods and texture packs allow players to personalize the game
1793 in different ways.")
1794 (home-page "http://minetest.net")
1795 (license license:lgpl2.1+)))
1796
1797 (define glkterm
1798 (package
1799 (name "glkterm")
1800 (version "1.0.4")
1801 (source
1802 (origin
1803 (method url-fetch)
1804 (uri (string-append "http://www.ifarchive.org/if-archive/programming/"
1805 "glk/implementations/glkterm-104.tar.gz"))
1806 (sha256
1807 (base32
1808 "0zlj9nlnkdlvgbiliczinirqygiq8ikg5hzh5vgcmnpg9pvnwga7"))))
1809 (build-system gnu-build-system)
1810 (propagated-inputs `(("ncurses" ,ncurses))) ; required by Make.glkterm
1811 (arguments
1812 '(#:tests? #f ; no check target
1813 #:phases
1814 (modify-phases %standard-phases
1815 (replace 'install
1816 (lambda* (#:key outputs #:allow-other-keys)
1817 (let* ((out (assoc-ref outputs "out"))
1818 (inc (string-append out "/include"))
1819 (lib (string-append out "/lib")))
1820 (for-each
1821 (lambda (file)
1822 (install-file file inc))
1823 '("glk.h" "glkstart.h" "gi_blorb.h" "gi_dispa.h" "Make.glkterm"))
1824 (install-file "libglkterm.a" lib))
1825 #t))
1826 (delete 'configure)))) ; no configure script
1827 (home-page "http://www.eblong.com/zarf/glk/")
1828 (synopsis "Curses Implementation of the Glk API")
1829 (description
1830 "Glk defines a portable API for applications with text UIs. It was
1831 primarily designed for interactive fiction, but it should be suitable for many
1832 interactive text utilities, particularly those based on a command line.
1833 This is an implementation of the Glk library which runs in a terminal window,
1834 using the @code{curses.h} library for screen control.")
1835 (license (license:fsf-free "file://README"))))
1836
1837 (define-public glulxe
1838 (package
1839 (name "glulxe")
1840 (version "0.5.4")
1841 (source
1842 (origin
1843 (method url-fetch)
1844 (uri (string-append "http://www.ifarchive.org/if-archive/programming/"
1845 "glulx/interpreters/glulxe/glulxe-054.tar.gz"))
1846 (sha256
1847 (base32
1848 "0vipydg6ra90yf9b3ipgppwxyb2xdhcxwvirgjy0v20wlf56zhhz"))))
1849 (build-system gnu-build-system)
1850 (inputs `(("glk" ,glkterm)))
1851 (arguments
1852 '(#:tests? #f ; no check target
1853 #:make-flags
1854 (let* ((glk (assoc-ref %build-inputs "glk")))
1855 (list (string-append "GLKINCLUDEDIR=" glk "/include")
1856 (string-append "GLKLIBDIR=" glk "/lib")
1857 (string-append "GLKMAKEFILE=" "Make.glkterm")))
1858 #:phases
1859 (modify-phases %standard-phases
1860 (replace 'install
1861 (lambda* (#:key outputs #:allow-other-keys)
1862 (let* ((out (assoc-ref outputs "out"))
1863 (bin (string-append out "/bin")))
1864 (install-file "glulxe" bin))
1865 #t))
1866 (delete 'configure)))) ; no configure script
1867 (home-page "http://www.eblong.com/zarf/glulx/")
1868 (synopsis "Interpreter for Glulx VM")
1869 (description
1870 "Glulx is a 32-bit portable virtual machine intended for writing and
1871 playing interactive fiction. It was designed by Andrew Plotkin to relieve
1872 some of the restrictions in the venerable Z-machine format. This is the
1873 reference interpreter, using the Glk API.")
1874 (license license:expat)))
1875
1876 (define-public fizmo
1877 (package
1878 (name "fizmo")
1879 (version "0.8.5")
1880 (source (origin
1881 (method url-fetch)
1882 (uri (string-append "https://fizmo.spellbreaker.org/source/"
1883 name "-" version ".tar.gz"))
1884 (sha256
1885 (base32
1886 "1amyc4n41jf08kxmdgkk30bzzx54miaxa97w28f417qwn8lrl98w"))))
1887 (build-system gnu-build-system)
1888 (arguments
1889 '(#:configure-flags
1890 (let ((libjpeg (assoc-ref %build-inputs "libjpeg"))
1891 (ncurses (assoc-ref %build-inputs "ncurses")))
1892 (list (string-append "--with-jpeg-includedir=" libjpeg "/include")))))
1893 (native-inputs
1894 `(("pkg-config" ,pkg-config)))
1895 (inputs
1896 `(("freetype" ,freetype)
1897 ("libjpeg" ,libjpeg)
1898 ("libpng" ,libpng)
1899 ("libsndfile" ,libsndfile)
1900 ("libxml2" ,libxml2)
1901 ("ncurses" ,ncurses)
1902 ("sdl2" ,sdl2)))
1903 (home-page "https://fizmo.spellbreaker.org/")
1904 (synopsis "Z-machine interpreter")
1905 (description
1906 "Fizmo is a console-based Z-machine interpreter. It is used to play
1907 interactive fiction, also known as text adventures, which were implemented
1908 either by Infocom or created using the Inform compiler.")
1909 (license license:bsd-3)))
1910
1911 (define-public gnugo
1912 (package
1913 (name "gnugo")
1914 (version "3.8")
1915 (source (origin
1916 (method url-fetch)
1917 (uri (string-append "mirror://gnu/gnugo/gnugo-" version
1918 ".tar.gz"))
1919 (sha256
1920 (base32
1921 "0wkahvqpzq6lzl5r49a4sd4p52frdmphnqsfdv7gdp24bykdfs6s"))))
1922 (build-system gnu-build-system)
1923 (inputs `(("readline" ,readline)))
1924 (synopsis "Play the game of Go")
1925 (description
1926 "GNU Go is a program that plays the game of Go, in which players
1927 place stones on a grid to form territory or capture other stones. While
1928 it can be played directly from the terminal, rendered in ASCII characters,
1929 it is also possible to play GNU Go with 3rd party graphical interfaces or
1930 even in Emacs. It supports the standard game storage format (SGF, Smart
1931 Game Format) and inter-process communication format (GMP, Go Modem
1932 Protocol).")
1933 (home-page "https://www.gnu.org/software/gnugo/")
1934 (license license:gpl3+)))
1935
1936 (define-public extremetuxracer
1937 (package
1938 (name "extremetuxracer")
1939 (version "0.7.5")
1940 (source (origin
1941 (method url-fetch)
1942 (uri (string-append
1943 "mirror://sourceforge/extremetuxracer/releases/"
1944 version "/etr-" version ".tar.xz"))
1945 (sha256
1946 (base32
1947 "1ly63316c07i0gyqqmyzsyvygsvygn0fpk3bnbg25fi6li99rlsg"))))
1948 (build-system gnu-build-system)
1949 (native-inputs
1950 `(("pkg-config" ,pkg-config)))
1951 (inputs
1952 `(("glu" ,glu)
1953 ("sfml" ,sfml)))
1954 (synopsis "High-speed arctic racing game based on Tux Racer")
1955 ;; Snarfed straight from Debian.
1956 (description "Extreme Tux Racer, or etracer as it is called for short, is
1957 a simple OpenGL racing game featuring Tux, the Linux mascot. The goal of the
1958 game is to slide down a snow- and ice-covered mountain as quickly as possible,
1959 avoiding the trees and rocks that will slow you down.
1960
1961 Collect herrings and other goodies while sliding down the hill, but avoid fish
1962 bones.
1963
1964 This game is based on the GPL version of the famous game TuxRacer.")
1965 (home-page "https://sourceforge.net/projects/extremetuxracer/")
1966 (license license:gpl2+)))
1967
1968 (define-public supertuxkart
1969 (package
1970 (name "supertuxkart")
1971 (version "0.9.3")
1972 (source
1973 (origin
1974 (method url-fetch)
1975 (uri (string-append "mirror://sourceforge/supertuxkart/SuperTuxKart/"
1976 version "/supertuxkart-" version "-src.tar.xz"))
1977 (sha256
1978 (base32
1979 "1c4w47ibj87lgwiqygq8qi7jiz6gklj4dwf5bs5zk15s0rqlw0fq"))
1980 (modules '((guix build utils)))
1981 (snippet
1982 ;; Delete bundled library sources
1983 '(begin
1984 ;; FIXME: try to unbundle enet, and angelscript
1985 (for-each delete-file-recursively
1986 '("lib/zlib"
1987 "lib/libpng"
1988 "lib/jpeglib"
1989 "lib/glew"
1990 "lib/wiiuse"))
1991 (substitute* "CMakeLists.txt"
1992 ;; Supertuxkart uses modified versions of the Irrlicht engine
1993 ;; and the bullet library. The developers gave an explanation here:
1994 ;; http://forum.freegamedev.net/viewtopic.php?f=17&t=3906
1995 (("add_subdirectory\\(.*/(glew|zlib)\"\\)") ""))
1996 #t))))
1997 (build-system cmake-build-system)
1998 (arguments
1999 `(#:tests? #f ; no check target
2000 #:configure-flags
2001 (list "-DUSE_WIIUSE=0"
2002 ;; Do not use the bundled zlib
2003 "-DNO_IRR_COMPILE_WITH_ZLIB_=TRUE"
2004 ;; FIXME: needs libopenglrecorder
2005 "-DBUILD_RECORDER=0"
2006 ;; Irrlicht returns an integer instead of a boolean
2007 "-DCMAKE_C_FLAGS=-fpermissive")
2008 #:phases
2009 (modify-phases %standard-phases
2010 ;; see https://github.com/supertuxkart/stk-code/issues/3557
2011 (add-after 'unpack 'patch-for-mesa-18.3
2012 (lambda _
2013 (substitute* "src/graphics/gl_headers.hpp"
2014 (("#if !defined\\(USE_GLES2\\)")
2015 "#if !defined(USE_GLES2)\n# define __gl_glext_h_"))
2016 #t))
2017 (add-after 'unpack 'unbundle
2018 (lambda* (#:key inputs #:allow-other-keys)
2019 (substitute* "CMakeLists.txt"
2020 (("glew")
2021 (string-append (assoc-ref inputs "glew")
2022 "/lib/libGLEW.a"))
2023 (("include_directories\\(\"\\$\\{PROJECT_SOURCE_DIR\\}/lib/glew/include\"\\)")
2024 (string-append "include_directories(\""
2025 (assoc-ref inputs "glew")
2026 "/include\")")))
2027 #t)))))
2028 (inputs
2029 `(("glew" ,glew)
2030 ("zlib" ,zlib)
2031 ("openal" ,openal)
2032 ("libvorbis" ,libvorbis)
2033 ("freetype" ,freetype)
2034 ("fribidi" ,fribidi)
2035 ("mesa" ,mesa)
2036 ("libx11" ,libx11)
2037 ("libxrandr" ,libxrandr)
2038 ("curl" ,curl)
2039 ;; The following input is needed to build the bundled and modified
2040 ;; version of irrlicht.
2041 ("libjpeg" ,libjpeg)))
2042 (native-inputs
2043 `(("pkg-config" ,pkg-config)))
2044 (home-page "https://supertuxkart.net/")
2045 (synopsis "3D kart racing game")
2046 (description "SuperTuxKart is a 3D kart racing game, with a focus on
2047 having fun over realism. You can play with up to 4 friends on one PC, racing
2048 against each other or just trying to beat the computer; single-player mode is
2049 also available.")
2050 (license license:gpl3+)))
2051
2052 (define-public gnujump
2053 (package
2054 (name "gnujump")
2055 (version "1.0.8")
2056 (source (origin
2057 (method url-fetch)
2058 (uri (string-append "mirror://gnu/gnujump/gnujump-"
2059 version ".tar.gz"))
2060 (sha256
2061 (base32
2062 "05syy9mzbyqcfnm0hrswlmhwlwx54f0l6zhcaq8c1c0f8dgzxhqk"))))
2063 (build-system gnu-build-system)
2064 (arguments
2065 '(#:phases
2066 (modify-phases %standard-phases
2067 (add-before
2068 'configure 'link-libm
2069 (lambda _ (setenv "LIBS" "-lm"))))))
2070 (inputs
2071 `(("glu" ,glu)
2072 ("mesa" ,mesa)
2073 ("sdl" ,sdl)
2074 ("sdl-image" ,sdl-image)
2075 ("sdl-mixer" ,sdl-mixer)))
2076 (home-page "http://gnujump.es.gnu.org/")
2077 (synopsis
2078 "Game of jumping to the next floor, trying not to fall")
2079 (description
2080 "GNUjump is a simple, yet addictive game in which you must jump from
2081 platform to platform to avoid falling, while the platforms drop at faster rates
2082 the higher you go. The game features multiplayer, unlimited FPS, smooth floor
2083 falling, themeable graphics and sounds, and replays.")
2084 (license license:gpl3+)))
2085
2086 (define-public wesnoth
2087 (package
2088 (name "wesnoth")
2089 (version "1.14.5")
2090 (source (origin
2091 (method url-fetch)
2092 (uri (string-append "mirror://sourceforge/wesnoth/wesnoth-"
2093 (version-major+minor version) "/wesnoth-"
2094 version "/"
2095 name "-" version ".tar.bz2"))
2096 (sha256
2097 (base32
2098 "1kgpj2f22nnx4mwd1zis3s5ny2983aasgqsmz7wnqaq7n6a7ac85"))
2099 (patches (search-patches "wesnoth-newer-boost.patch"))))
2100 (build-system cmake-build-system)
2101 (arguments
2102 `(#:tests? #f)) ; no check target
2103 (native-inputs
2104 `(("gettext" ,gettext-minimal)
2105 ("pkg-config" ,pkg-config)))
2106 (inputs
2107 `(("boost" ,boost)
2108 ("dbus" ,dbus)
2109 ("fribidi" ,fribidi)
2110 ("libvorbis" ,libvorbis)
2111 ("openssl" ,openssl)
2112 ("pango" ,pango)
2113 ("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
2114 (home-page "https://www.wesnoth.org/")
2115 (synopsis "Turn-based strategy game")
2116 (description
2117 "The Battle for Wesnoth is a fantasy, turn based tactical strategy game,
2118 with several single player campaigns, and multiplayer games (both networked and
2119 local).
2120
2121 Battle for control on a range of maps, using variety of units which have
2122 advantages and disadvantages against different types of attacks. Units gain
2123 experience and advance levels, and are carried over from one scenario to the
2124 next campaign.")
2125 (license license:gpl2+)))
2126
2127 (define-public wesnoth-server
2128 (package
2129 (inherit wesnoth)
2130 (name "wesnoth-server")
2131 (inputs
2132 `(("boost" ,boost)
2133 ("icu4c" ,icu4c)
2134 ("openssl" ,openssl)
2135 ("sdl2" ,sdl2)))
2136 (arguments
2137 `(#:configure-flags '("-DENABLE_GAME=OFF")
2138 ,@(package-arguments wesnoth)))
2139 (synopsis "Dedicated @emph{Battle for Wesnoth} server")
2140 (description "This package contains a dedicated server for @emph{The
2141 Battle for Wesnoth}.")))
2142
2143 (define-public gamine
2144 (package
2145 (name "gamine")
2146 (version "1.6")
2147 (source (origin
2148 (method url-fetch)
2149 (uri (string-append "mirror://sourceforge/gamine-game/"
2150 "gamine-" version ".tar.gz"))
2151 (sha256
2152 (base32
2153 "1sc6f4445ciigd6yw0ri92746k4hk6ps0bvj9fm1gbp3c3fslk5n"))))
2154 (build-system gnu-build-system)
2155 (native-inputs
2156 `(("pkg-config" ,pkg-config)
2157 ("intltool" ,intltool)))
2158 (inputs
2159 `(("gstreamer" ,gstreamer)
2160 ("gst-plugins-base" ,gst-plugins-base) ; playbin plugin
2161 ("gst-plugins-good" ,gst-plugins-good) ; for wav playback
2162 ("gtk+" ,gtk+)))
2163 (arguments
2164 `(#:tests? #f
2165 #:make-flags
2166 (let ((out (assoc-ref %outputs "out")))
2167 (list (string-append "PREFIX=" out)
2168 (string-append "SYSCONFDIR=" out "/etc")))
2169 #:phases
2170 (modify-phases %standard-phases
2171 (delete 'configure)
2172 (add-after
2173 'install 'wrap-gamine
2174 (lambda* (#:key outputs #:allow-other-keys)
2175 (let ((out (assoc-ref outputs "out"))
2176 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
2177 (wrap-program (string-append out "/bin/gamine")
2178 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))
2179 #t)))))
2180 (home-page "http://gamine-game.sourceforge.net/")
2181 (synopsis "Mouse and keyboard discovery for children")
2182 (description
2183 "Gamine is a game designed for young children who are learning to use the
2184 mouse and keyboard. The child uses the mouse to draw colored dots and lines
2185 on the screen and keyboard to display letters.")
2186 ;; Most files under gpl2+ or gpl3+, but eat.wav under gpl3
2187 (license license:gpl3)))
2188
2189 (define-public raincat
2190 (package
2191 (name "raincat")
2192 (version "1.2.1")
2193 (source
2194 (origin
2195 (method url-fetch)
2196 (uri (string-append "http://hackage.haskell.org/package/Raincat/"
2197 "Raincat-" version ".tar.gz"))
2198 (sha256
2199 (base32
2200 "10y9zi22m6hf13c9h8zd9vg7mljpwbw0r3djb6r80bna701fdf6c"))))
2201 (build-system haskell-build-system)
2202 (arguments
2203 `(#:phases
2204 (modify-phases %standard-phases
2205 (add-after 'install 'wrap-executable
2206 (lambda* (#:key inputs outputs #:allow-other-keys)
2207 (let ((out (assoc-ref outputs "out")))
2208 (wrap-program (string-append out "/bin/raincat")
2209 `("LD_LIBRARY_PATH" ":" =
2210 (,(string-append (assoc-ref inputs "freeglut")
2211 "/lib"))))
2212 #t))))))
2213 (inputs
2214 `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
2215 ("ghc-random" ,ghc-random)
2216 ("ghc-glut" ,ghc-glut)
2217 ("freeglut" ,freeglut)
2218 ("ghc-opengl" ,ghc-opengl)
2219 ("ghc-sdl2" ,ghc-sdl2)
2220 ("ghc-sdl2-image" ,ghc-sdl2-image)
2221 ("ghc-sdl2-mixer" ,ghc-sdl2-mixer)))
2222 (home-page "http://www.bysusanlin.com/raincat/")
2223 (synopsis "Puzzle game with a cat in lead role")
2224 (description "Project Raincat is a game developed by Carnegie Mellon
2225 students through GCS during the Fall 2008 semester. Raincat features game
2226 play inspired from classics Lemmings and The Incredible Machine. The project
2227 proved to be an excellent learning experience for the programmers. Everything
2228 is programmed in Haskell.")
2229 (license license:bsd-3)))
2230
2231 (define-public manaplus
2232 (package
2233 (name "manaplus")
2234 (version "1.7.6.10")
2235 (source (origin
2236 (method url-fetch)
2237 (uri (string-append
2238 "http://repo.manaplus.org/manaplus/download/"
2239 version "/manaplus-" version ".tar.xz"))
2240 (sha256
2241 (base32
2242 "0l7swvpzq20am4w2rsjpp6fsvbjv07il6wbfy45a7h9zsdihmqhl"))))
2243 (build-system gnu-build-system)
2244 (arguments
2245 '(#:configure-flags
2246 (list (string-append "CPPFLAGS=-I"
2247 (assoc-ref %build-inputs "sdl-union")
2248 "/include/SDL"))))
2249 (native-inputs
2250 `(("pkg-config" ,pkg-config)))
2251 (inputs
2252 `(("glu" ,glu)
2253 ("curl" ,curl)
2254 ("libxml2" ,libxml2)
2255 ("mesa" ,mesa)
2256 ("sdl-union" ,(sdl-union))))
2257 (home-page "http://manaplus.org")
2258 (synopsis "Client for 'The Mana World' and similar games")
2259 (description
2260 "ManaPlus is a 2D MMORPG client for game servers. It is the only
2261 fully supported client for @uref{http://www.themanaworld.org, The mana
2262 world}, @uref{http://evolonline.org, Evol Online} and
2263 @uref{http://landoffire.org, Land of fire}.")
2264 ;; "src/debug/*" and "src/sdl2gfx/*" are under Zlib.
2265 ;; "data/themes/{golden-delicious,jewelry}/*" are under CC-BY-SA.
2266 ;; The rest is under GPL2+.
2267 (license (list license:gpl2+ license:zlib license:cc-by-sa4.0))))
2268
2269 (define openttd-engine
2270 (package
2271 (name "openttd-engine")
2272 (version "1.8.0")
2273 (source
2274 (origin (method url-fetch)
2275 (uri (string-append "http://binaries.openttd.org/releases/"
2276 version "/openttd-" version "-source.tar.xz"))
2277 (patches
2278 (list
2279 (origin (method url-fetch)
2280 (uri (string-append
2281 "https://github.com/OpenTTD/OpenTTD/commit/"
2282 "19076c24c1f3baf2a22d1fa832d5688216cf54a3.patch"))
2283 (file-name "openttd-fix-compilation-with-ICU-61.patch")
2284 (sha256
2285 (base32
2286 "02d1xmb75yv4x6rfnvxk3vvq4l3lvvwr2pfsdzn7lzalic51ziqh")))))
2287 (sha256
2288 (base32
2289 "0zq8xdg0k92p3s4j9x76591zaqz7k9ra69q008m209vdfffjvly2"))
2290 (modules '((guix build utils)))
2291 (snippet
2292 ;; The DOS port contains proprietary software.
2293 '(begin
2294 (delete-file-recursively "os/dos")
2295 #t))))
2296 (build-system gnu-build-system)
2297 (arguments
2298 `(#:tests? #f ; no "check" target
2299 #:phases
2300 (modify-phases %standard-phases
2301 ;; The build process fails if the configure script is passed the
2302 ;; option "--enable-fast-install".
2303 (replace 'configure
2304 (lambda* (#:key inputs outputs (configure-flags '())
2305 #:allow-other-keys)
2306 (let ((out (assoc-ref outputs "out"))
2307 (lzo (assoc-ref inputs "lzo")))
2308 (apply invoke "./configure"
2309 (string-append "--prefix=" out)
2310 ;; Provide the "lzo" path.
2311 (string-append "--with-liblzo2="
2312 lzo "/lib/liblzo2.a")
2313 ;; Put the binary in 'bin' instead of 'games'.
2314 "--binary-dir=bin"
2315 configure-flags)))))))
2316 (native-inputs `(("pkg-config" ,pkg-config)))
2317 (inputs
2318 `(("allegro" ,allegro)
2319 ("fontconfig" ,fontconfig)
2320 ("freetype" ,freetype)
2321 ("icu4c" ,icu4c)
2322 ("libpng" ,libpng)
2323 ("lzo" ,lzo)
2324 ("sdl" ,sdl)
2325 ("xz" ,xz)
2326 ("zlib" ,zlib)))
2327 (synopsis "Transportation economics simulator")
2328 (description "OpenTTD is a game in which you transport goods and
2329 passengers by land, water and air. It is a re-implementation of Transport
2330 Tycoon Deluxe with many enhancements including multiplayer mode,
2331 internationalization support, conditional orders and the ability to clone,
2332 autoreplace and autoupdate vehicles. This package only includes the game
2333 engine. When you start it you will be prompted to download a graphics set.")
2334 (home-page "http://openttd.org/")
2335 ;; This package is GPLv2, except for a few files located in
2336 ;; "src/3rdparty/" which are under the 3-clause BSD, LGPLv2.1+ and Zlib
2337 ;; licenses. In addition, this software contains an in-game downloader
2338 ;; from which the user may find non-functional data licensed under
2339 ;; different terms.
2340 (license (list license:bsd-3 license:gpl2 license:lgpl2.1+ license:zlib))))
2341
2342 (define openttd-opengfx
2343 (package
2344 (name "openttd-opengfx")
2345 (version "0.5.2")
2346 (source
2347 (origin
2348 (method url-fetch)
2349 (uri (string-append "http://binaries.openttd.org/extra/opengfx/"
2350 version "/opengfx-" version "-source.tar.xz"))
2351 (sha256
2352 (base32
2353 "0iz66q7p1mf00njfjbc4vibh3jaybki7armkl18iz7p6x4chp9zv"))))
2354 (build-system gnu-build-system)
2355 (arguments
2356 '(#:make-flags (list "CC=gcc"
2357 (string-append "INSTALL_DIR="
2358 (assoc-ref %outputs "out")
2359 "/share/games/openttd/baseset/opengfx"))
2360 #:phases
2361 (modify-phases %standard-phases
2362 (replace 'configure
2363 (lambda _
2364 ;; Make sure HOME is writable for GIMP.
2365 (setenv "HOME" (getcwd))
2366
2367 ;; Redirect stdout, not stderr, to /dev/null. This prevents
2368 ;; dos2unix from receiving its version information as a flag.
2369 (substitute* "Makefile"
2370 (("\\$\\(UNIX2DOS\\) -q --version 2>/dev/null")
2371 "$(UNIX2DOS) -q --version 1>/dev/null")))))
2372 ;; The check phase for this package only checks the md5sums of the built
2373 ;; GRF files against the md5sums of the release versions. Because we use
2374 ;; different software versions than upstream does, some of the md5sums
2375 ;; are different. However, the package is still reproducible, it's safe
2376 ;; to disable this test.
2377 #:tests? #f
2378 #:parallel-build? #f))
2379 (native-inputs `(("dos2unix" ,dos2unix)
2380 ("gimp" ,gimp)
2381 ("grfcodec" ,grfcodec)
2382 ("nml" ,nml)
2383 ("python" ,python-2)))
2384 (home-page "http://dev.openttdcoop.org/projects/opengfx")
2385 (synopsis "Base graphics set for OpenTTD")
2386 (description
2387 "The OpenGFX projects is an implementation of the OpenTTD base grahics
2388 set that aims to ensure the best possible out-of-the-box experience.
2389
2390 OpenGFX provides you with...
2391 @enumerate
2392 @item All graphics you need to enjoy OpenTTD.
2393 @item Uniquely drawn rail vehicles for every climate.
2394 @item Completely snow-aware rivers.
2395 @item Different river and sea water.
2396 @item Snow-aware buoys.
2397 @end enumerate")
2398 (license license:gpl2)))
2399
2400 (define openttd-opensfx
2401 (package
2402 (name "openttd-opensfx")
2403 (version "0.2.3")
2404 (source
2405 (origin
2406 (method url-fetch)
2407 (uri (string-append
2408 "https://binaries.openttd.org/extra/opensfx/"
2409 version "/opensfx-" version "-source.tar.gz"))
2410 (sha256
2411 (base32
2412 "03jxgp02ks31hmsdh4xh0xcpkb70ds8jakc9pfc1y9vdrdavh4p5"))))
2413 (build-system gnu-build-system)
2414 (native-inputs
2415 `(("catcodec" ,catcodec)
2416 ("python" ,python-2)))
2417 (arguments
2418 `(#:make-flags
2419 (list (string-append "INSTALL_DIR=" %output
2420 "/share/games/openttd/baseset/opensfx"))
2421 #:phases
2422 (modify-phases %standard-phases
2423 (add-after 'unpack 'make-reproducible
2424 (lambda _
2425 ;; Remove the time dependency of the installed tarball by setting
2426 ;; the modification times if its members to 0.
2427 (substitute* "scripts/Makefile.def"
2428 (("-cf") " --mtime=@0 -cf"))
2429 #t))
2430 (delete 'configure))))
2431 (home-page "http://dev.openttdcoop.org/projects/opensfx")
2432 (synopsis "Base sounds for OpenTTD")
2433 (description "OpenSFX is a set of free base sounds for OpenTTD which make
2434 it possible to play OpenTTD without requiring the proprietary sound files from
2435 the original Transport Tycoon Deluxe.")
2436 (license license:cc-sampling-plus-1.0)))
2437
2438 (define openttd-openmsx
2439 (package
2440 (name "openttd-openmsx")
2441 (version "0.3.1")
2442 (source
2443 (origin
2444 (method url-fetch)
2445 (uri (string-append
2446 "https://binaries.openttd.org/extra/openmsx/"
2447 version "/openmsx-" version "-source.tar.gz"))
2448 (sha256
2449 (base32
2450 "0nskq97a6fsv1v6d62zf3yb8whzhqnlh3lap3va3nzvj7csjgf7c"))))
2451 (build-system gnu-build-system)
2452 (native-inputs
2453 `(("python" ,python-2)))
2454 (arguments
2455 `(#:make-flags
2456 (list (string-append "INSTALL_DIR=" %output
2457 "/share/games/openttd/baseset"))
2458 #:phases
2459 (modify-phases %standard-phases
2460 (delete 'configure)
2461 (add-after 'install 'post-install
2462 ;; Rename openmsx-version to openmsx
2463 (lambda* (#:key outputs #:allow-other-keys)
2464 (let ((install-directory (string-append (assoc-ref outputs "out")
2465 "/share/games/openttd/baseset")))
2466 (rename-file (string-append install-directory "/openmsx-" ,version)
2467 (string-append install-directory "/openmsx"))
2468 #t))))))
2469 (home-page "http://dev.openttdcoop.org/projects/openmsx")
2470 (synopsis "Music set for OpenTTD")
2471 (description "OpenMSX is a music set for OpenTTD which makes it possible
2472 to play OpenTTD without requiring the proprietary music from the original
2473 Transport Tycoon Deluxe.")
2474 (license license:gpl2)))
2475
2476 (define-public openttd
2477 (package
2478 (inherit openttd-engine)
2479 (name "openttd")
2480 (arguments
2481 `(#:configure-flags
2482 (list (string-append "--with-midi=" (assoc-ref %build-inputs "timidity++")
2483 "/bin/timidity"))
2484 ,@(substitute-keyword-arguments (package-arguments openttd-engine)
2485 ((#:phases phases)
2486 `(modify-phases ,phases
2487 (add-after 'install 'install-data
2488 (lambda* (#:key inputs outputs #:allow-other-keys)
2489 (for-each
2490 (lambda (input)
2491 (copy-recursively (assoc-ref inputs input)
2492 (assoc-ref outputs "out")))
2493 (list "opengfx" "openmsx" "opensfx"))
2494 #t)))))))
2495 (inputs
2496 `(("timidity++" ,timidity++)
2497 ,@(package-inputs openttd-engine)))
2498 (native-inputs
2499 `(("opengfx" ,openttd-opengfx)
2500 ("openmsx" ,openttd-openmsx)
2501 ("opensfx" ,openttd-opensfx)
2502 ,@(package-native-inputs openttd-engine)))))
2503
2504 (define openrct2-title-sequences
2505 (package
2506 (name "openrct2-title-sequences")
2507 (version "0.1.2")
2508 (source
2509 (origin
2510 (method url-fetch)
2511 (uri (string-append "https://github.com/OpenRCT2/title-sequences/releases/download/v"
2512 version "/title-sequence-v" version ".zip"))
2513 (file-name (string-append name "-" version ".zip"))
2514 (sha256
2515 (base32
2516 "0qbyxrsw8hlgaq0r5d7lx7an3idy4qbfv7yiw9byhldk763n9cfw"))))
2517 (build-system trivial-build-system)
2518 (native-inputs
2519 `(("bash" ,bash)
2520 ("coreutils" ,coreutils)
2521 ("unzip" ,unzip)))
2522 (arguments
2523 `(#:modules ((guix build utils))
2524 #:builder
2525 (begin
2526 (use-modules (guix build utils))
2527 (let* ((out (assoc-ref %outputs "out"))
2528 (openrct2-title-sequences (string-append out
2529 "/share/openrct2/title-sequences"))
2530 (source (assoc-ref %build-inputs "source"))
2531 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
2532 (copy-file source (string-append ,name "-" ,version ".zip"))
2533 (invoke unzip (string-append ,name "-" ,version ".zip"))
2534 (delete-file (string-append ,name "-" ,version ".zip"))
2535 (mkdir-p openrct2-title-sequences)
2536 (copy-recursively "."
2537 openrct2-title-sequences)
2538 #t))))
2539 (home-page "https://github.com/OpenRCT2/OpenRCT2")
2540 (synopsis "Title sequences for OpenRCT2")
2541 (description
2542 "openrct2-title-sequences is a set of title sequences for OpenRCT2.")
2543 (license license:gpl3+)))
2544
2545 (define openrct2-objects
2546 (package
2547 (name "openrct2-objects")
2548 (version "1.0.6")
2549 (source
2550 (origin
2551 (method url-fetch)
2552 (uri (string-append "https://github.com/OpenRCT2/objects/releases/download/v"
2553 version "/objects.zip"))
2554 (file-name (string-append name "-" version ".zip"))
2555 (sha256
2556 (base32
2557 "00kfy95zx6g4ldr6br5p7bwkwfx6pw9v78fd3rvghjnwyvf5fhki"))))
2558 (build-system trivial-build-system)
2559 (native-inputs
2560 `(("bash" ,bash)
2561 ("coreutils" ,coreutils)
2562 ("unzip" ,unzip)))
2563 (arguments
2564 `(#:modules ((guix build utils))
2565 #:builder
2566 (begin
2567 (use-modules (guix build utils))
2568 (let* ((out (assoc-ref %outputs "out"))
2569 (openrct2-objects (string-append out
2570 "/share/openrct2/objects"))
2571 (source (assoc-ref %build-inputs "source"))
2572 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
2573 (copy-file source (string-append ,name "-" ,version ".zip"))
2574 (invoke unzip (string-append ,name "-" ,version ".zip"))
2575 (delete-file (string-append ,name "-" ,version ".zip"))
2576 (mkdir-p openrct2-objects)
2577 (copy-recursively "."
2578 openrct2-objects)
2579 #t))))
2580 (home-page "https://github.com/OpenRCT2/OpenRCT2")
2581 (synopsis "Objects for OpenRCT2")
2582 (description
2583 "openrct2-objects is a set of objects for OpenRCT2.")
2584 (license license:gpl3+)))
2585
2586 (define-public openrct2
2587 (package
2588 (name "openrct2")
2589 (version "0.2.1")
2590 (source
2591 (origin
2592 (method url-fetch)
2593 (uri (string-append "https://github.com/OpenRCT2/OpenRCT2/archive/v"
2594 version ".tar.gz"))
2595 (sha256
2596 (base32
2597 "1fxzk037xphpyk7vv5jfrcz739zrj86p43pnf5gjjv9rjxwv7m8f"))
2598 (file-name (string-append name "-" version ".tar.gz"))))
2599 (build-system cmake-build-system)
2600 (arguments
2601 `(#:configure-flags (list "-DDOWNLOAD_OBJECTS=OFF"
2602 "-DDOWNLOAD_TITLE_SEQUENCES=OFF")
2603 #:tests? #f ; Tests require network.
2604 #:phases
2605 (modify-phases %standard-phases
2606 (add-after 'unpack 'fix-usr-share-paths&add-data
2607 (lambda* (#:key inputs outputs #:allow-other-keys)
2608 (let ((titles (assoc-ref inputs "openrct2-title-sequences"))
2609 (objects (assoc-ref inputs "openrct2-objects")))
2610 ;; Fix some references to /usr/share.
2611 (substitute* "src/openrct2/platform/Platform.Linux.cpp"
2612 (("/usr/share")
2613 (string-append (assoc-ref %outputs "out") "/share")))
2614 (copy-recursively (string-append titles
2615 "/share/openrct2/title-sequences") "data/title")
2616 (copy-recursively (string-append objects
2617 "/share/openrct2/objects") "data/object"))))
2618 (add-before 'configure 'fixgcc7
2619 (lambda _
2620 (unsetenv "C_INCLUDE_PATH")
2621 (unsetenv "CPLUS_INCLUDE_PATH")
2622 #t))
2623 (add-after 'fixgcc7 'get-rid-of-errors
2624 (lambda _
2625 ;; Don't treat warnings as errors.
2626 (substitute* "CMakeLists.txt"
2627 (("-Werror") "")))))))
2628 (inputs `(("curl" ,curl)
2629 ("fontconfig" ,fontconfig)
2630 ("freetype" ,freetype)
2631 ("icu4c" ,icu4c)
2632 ("jansson" ,jansson)
2633 ("libpng" ,libpng)
2634 ("libzip" ,libzip)
2635 ("mesa" ,mesa)
2636 ("openrct2-objects" ,openrct2-objects)
2637 ("openrct2-title-sequences" ,openrct2-title-sequences)
2638 ("openssl" ,openssl)
2639 ("sdl2" ,sdl2)
2640 ("speexdsp" ,speexdsp)
2641 ("zlib" ,zlib)))
2642 (native-inputs
2643 `(("gcc" ,gcc-7)
2644 ("pkg-config" ,pkg-config)))
2645 (home-page "https://github.com/OpenRCT2/OpenRCT2")
2646 (synopsis "Free software re-implementation of RollerCoaster Tycoon 2")
2647 (description "OpenRCT2 is a free software re-implementation of
2648 RollerCoaster Tycoon 2 (RCT2). The gameplay revolves around building and
2649 maintaining an amusement park containing attractions, shops and facilities.
2650
2651 Note that this package does @emph{not} provide the game assets (sounds,
2652 images, etc.)")
2653 ;; See <https://github.com/OpenRCT2/OpenRCT2/wiki/Required-RCT2-files>
2654 ;; regarding assets.
2655 (license license:gpl3+)))
2656
2657 (define-public pinball
2658 (package
2659 (name "pinball")
2660 (version "0.3.1")
2661 (source
2662 (origin (method url-fetch)
2663 (uri (string-append "mirror://sourceforge/pinball/pinball/"
2664 "pinball-" version "/"
2665 "pinball-" version ".tar.gz"))
2666 (sha256
2667 (base32
2668 "1f2whlrfidwfh8lvr8cspcyirc6840r5d1ajm7x99qmngygrhixs"))
2669 (patches (search-patches "pinball-const-fix.patch"
2670 "pinball-cstddef.patch"
2671 "pinball-missing-separators.patch"
2672 "pinball-src-deps.patch"
2673 "pinball-system-ltdl.patch"))))
2674 (build-system gnu-build-system)
2675 (inputs
2676 `(("glu" ,glu)
2677 ("mesa" ,mesa)
2678 ("sdl" ,sdl)
2679 ("sdl-image" ,sdl-image)
2680 ("sdl-mixer" ,sdl-mixer)))
2681 (arguments
2682 '(#:configure-flags
2683 (list (string-append "CPPFLAGS=-I"
2684 (assoc-ref %build-inputs "sdl-image")
2685 "/include/SDL -I"
2686 (assoc-ref %build-inputs "sdl-mixer")
2687 "/include/SDL"))))
2688 (home-page "http://pinball.sourceforge.net")
2689 (synopsis "Pinball simulator")
2690 (description "The Emilia Pinball Project is a pinball simulator. There
2691 are only two levels to play with, but they are very addictive.")
2692 (license license:gpl2)))
2693
2694 (define-public pioneers
2695 (package
2696 (name "pioneers")
2697 (version "15.5")
2698 (source (origin
2699 (method url-fetch)
2700 (uri (string-append "http://downloads.sourceforge.net/pio/"
2701 "pioneers-" version ".tar.gz"))
2702 (sha256
2703 (base32
2704 "037gdiiw690jw3wd1s9lxmkqx0caxyk0b4drpm7i9p28gig43q9y"))))
2705 (build-system gnu-build-system)
2706 (inputs `(("avahi" ,avahi)
2707 ("gtk+" ,gtk+)
2708 ("librsvg" ,librsvg)))
2709 (native-inputs `(("intltool" ,intltool)
2710 ("itstool" ,itstool)
2711 ("libxml2" ,libxml2)
2712 ("pkg-config" ,pkg-config)))
2713 (synopsis "Board game inspired by The Settlers of Catan")
2714 (description "Pioneers is an emulation of the board game The Settlers of
2715 Catan. It can be played on a local network, on the internet, and with AI
2716 players.")
2717 (home-page "http://pio.sourceforge.net/")
2718 (license license:gpl2+)))
2719
2720 (define-public einstein
2721 (package
2722 (name "einstein")
2723 (version "2.0")
2724 (source (origin
2725 (method url-fetch)
2726 (uri (string-append "http://http.debian.net/debian/pool/main/e/"
2727 "einstein/einstein_2.0.dfsg.2.orig.tar.gz"))
2728 (sha256
2729 (base32
2730 "1hxrlv6n8py48j487i6wbb4n4vd55w0na69r7ccmmr9vmrsw5mlk"))
2731 (patches (search-patches "einstein-build.patch"))))
2732 (build-system gnu-build-system)
2733 (inputs
2734 `(("freetype" ,freetype)
2735 ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-ttf)))
2736 ("zlib" ,zlib)))
2737 (native-inputs
2738 `(("font-dejavu" ,font-dejavu)))
2739 (arguments
2740 `(#:tests? #f ; no check target
2741 #:phases
2742 (modify-phases %standard-phases
2743 (replace 'configure
2744 (lambda* (#:key outputs inputs #:allow-other-keys)
2745 (let ((out (assoc-ref outputs "out"))
2746 (dejavu (string-append (assoc-ref inputs "font-dejavu")
2747 "/share/fonts/truetype/DejaVuSans.ttf")))
2748 (substitute* "Makefile"
2749 (("PREFIX=/usr/local") (string-append "PREFIX=" out)))
2750 ;; The patch above registers a free font for use by the binary,
2751 ;; but the font is copied during the compile phase into a
2752 ;; resources file, so we need to make the ttf file available.
2753 (symlink dejavu "res/DejaVuSans.ttf")
2754 #t))))))
2755 (synopsis "Logic puzzle game")
2756 (description "The goal of this logic game is to open all cards in a 6x6
2757 grid, using a number of hints as to their relative position. The game idea
2758 is attributed to Albert Einstein.")
2759 ;; The original home page has disappeared.
2760 (home-page (string-append "http://web.archive.org/web/20120521062745/"
2761 "http://games.flowix.com/en/index.html"))
2762 ;; License according to
2763 ;; http://web.archive.org/web/20150222180355/http://www.babichev.info/en/projects/index.html
2764 ;; The source code is a DFSG-sanitized tarball and does not contain any
2765 ;; license information.
2766 (license license:gpl3+)))
2767
2768 (define-public powwow
2769 (package
2770 (name "powwow")
2771 (version "1.2.18")
2772 (source (origin
2773 (method url-fetch)
2774 (uri (string-append
2775 "https://www.hoopajoo.net/static/projects/powwow-"
2776 version ".tar.gz"))
2777 (file-name (string-append name "-" version ".tar.gz"))
2778 (sha256
2779 (base32
2780 "1gf0jc1vfv05lxij51n3c1dqn3aiiy2kj1v6q14an3wm7yl7cllp"))))
2781 (inputs
2782 `(("ncurses" ,ncurses)))
2783 (build-system gnu-build-system)
2784 (home-page "https://www.hoopajoo.net/projects/powwow.html")
2785 (synopsis "MUD and telnet client")
2786 (description
2787 "POWWOW is a client software which can be used for telnet as well as for
2788 @dfn{Multi-User Dungeon} (MUD). Additionally it can serve as a nice client for
2789 the chat server psyced with the specific config located at
2790 http://lavachat.symlynx.com/unix/")
2791 (license license:gpl2+)))
2792
2793 (define-public red-eclipse
2794 (let ((release "1.6.0")
2795 (revision 0)
2796 (data-sources
2797 '(("acerspyro" "07mzgdahnr3w3w7kf8nmy20r199rimfx9ryqxjdr793sw0vawqd3")
2798 ("actors" "1hkgscfhg0kmwgym0mw56fhcckzbb2hh3nsvd45v4mdfyk0xnrm7")
2799 ("appleflap" "1q4xs3x904mrrbxzv6lpr3lywm8p6i8339ijzy9j091s2wdl51ka")
2800 ("blendbrush" "004md2haysr9w8fj6l7bj9wcfjqrq9wx1rrjf9dv16k5sbrkqza9")
2801 ("caustics" "1qmmv8ds70j1ixy4rvli309vbcyjq1l5j1wri6nbnjay10f9fcgq")
2802 ("crosshairs" "0q1vadg5cai9i6igl6y08774fd05gav0kinbgb2757n47ig50bns")
2803 ("dziq" "1s9248ky2qqy24z9c2vgpisz500dvsaj249pv1fkrxgsypjm1z6v")
2804 ("elyvisions" "15synpms05996v4c4kdl0h899spl4z7si9kl8c4m7rvc2yvin1ga")
2805 ("fonts" "1l4727ai8mphi7n3wcjp2lh3p47nh6w82s5dpqbbjpqr9gilb69j")
2806 ("freezurbern" "0hcdbzs02mvpsfhmahhqjv6pd8lbsag1bm6rpy61ns5qwmhg96ys")
2807 ("john" "1whyvlx87mb83kfb7jhhnwz9s7lry4li8l3xar61vmlqgmsnz33d")
2808 ("jojo" "02wxa93f5al4rlnsdjpd0hlnca0ympnj8481lgdxx70hny8zi3qi")
2809 ("jwin" "1gb4l7lbhr150hml1y0wbyx7266q5nslh6n494wwrrsvp11s2qk8")
2810 ("luckystrike" "0wy2spvhx5k233fsl283250ym5bqvkk8i6i19sw3zvzyxp2p4yq9")
2811 ("maps" "1dmvp9mskval606z5srjd909jpm6qz4fdcpaszkkhfr5ajbj30vq")
2812 ("mayhem" "0hkzzx0rxda70ixw9lfh9v1dpsbn2dj86jrr3zxjgasbgaxw37ax")
2813 ("mikeplus64" "144fxhp4qjqjw3gvhf7ym6rnfxvxc0zvd3f54jg1jgnccc1hfyah")
2814 ("misc" "0bpvibyc6vjhbzsf67xxn85yq2h97xs96icbskwzs2wsd860kq8c")
2815 ("nieb" "0d72wsibk9sg9nhin3fwzz9zljiccyln0fn42y2q2xbd4my23b1k")
2816 ("nobiax" "19lr36ys98cmpp739svjar1j942fbxz6r062gi7ygh89zh9yrgfy")
2817 ("particles" "02pnq8ksl7f6kqxss3aza98jssdq2s41rhkhki71ynavp2a5akar")
2818 ("philipk" "1xkrb7wa1pyhbs4xxx7vnnzsxrqzswk7gjbdac7i7rj0lwnfaij2")
2819 ("projectiles" "1hra0f1ifiddh16fv4pqcr2amf046lf445v0653zkyri43zgrj5f")
2820 ("props" "0ff6a8pz62f4nsk4c9cr50kirw108a661y5j6fvlsjickw3xjmyv")
2821 ("skyboxes" "1lq58dhrdiivq7llkiyqwpi3bwa89r8hbi98p7zjhw7wdn34i6n2")
2822 ("snipergoth" "0d5qf01bxd4dlffgxf8i91zq6mbyjmfd00dpyligpfj6fdbz87gc")
2823 ("sounds" "0z6jmxsr3w735hrdnxypdb0gi399pwkaycv9grjpiqy43j3ic7gj")
2824 ("textures" "0k5a47g2z99xn17vw7bqbp0w726gxmk33g5gwmqvfhxxxzzwimvi")
2825 ("torley" "12x23l8xcv9ard5v76lb210lvp66whsns2p3k3xkd1sabp5ixbd5")
2826 ("trak" "03kmwj47yb3dqzb6k9kilna9ja8c6jcnblvbs72x15767fl496pb")
2827 ("ulukai" "0vvd016a7x981ixif6dnlg45s0ak7i89pgyrgwy2fpd94nl2am15")
2828 ("unnamed" "18sxvdha41njp6g8wn56mjy6w9x778c793gh8fr0h9cnysb5gfmi")
2829 ("vanities" "1p38mc2566bmb4vdyr9n9s6fkwmynp2xlpdq2a97gzgi4nmm0232")
2830 ("vegetation" "0pf3qvqzabdcri5za61z6m89b5hq7sd3q0idkazmx88a62mcclkb")
2831 ("weapons" "1jr05y9qhhx53plvir35srvv3cmn6wa065p3bskx6h1x6dcbx3c6")
2832 ("wicked" "14b9f92h8hccp7a015z6rqgbs8236sdyxnwsq991ylnap7cbwvam"))))
2833 (package
2834 (name "red-eclipse")
2835 (version (if (zero? revision)
2836 release
2837 (string-append release "-"
2838 (number->string revision))))
2839 (source (origin
2840 (method url-fetch)
2841 (uri (string-append "https://github.com/red-eclipse/base"
2842 "/archive/v" release ".tar.gz"))
2843 (file-name (string-append name "-" version ".tar.gz"))
2844 (sha256
2845 (base32
2846 "1vs9k6f5fgsiy1n72imlqm8khjwm8cryc08zwd4gr7yxlxv45bs0"))
2847 (patches
2848 (search-patches "red-eclipse-remove-gamma-name-hack.patch"))))
2849 (build-system gnu-build-system)
2850 (arguments
2851 `(#:tests? #f ; no check target
2852 #:make-flags (list "CC=gcc" "-Csrc"
2853 (string-append "INSTDIR="
2854 (assoc-ref %outputs "out") "/bin")
2855 (string-append "prefix="
2856 (assoc-ref %outputs "out")))
2857 #:phases
2858 (modify-phases %standard-phases
2859 (add-after 'unpack 'unpack-data
2860 (lambda* (#:key inputs #:allow-other-keys)
2861 (delete-file-recursively "data")
2862 (mkdir "data")
2863 (for-each (lambda (name)
2864 (invoke "tar" "-xvf"
2865 (assoc-ref inputs name)
2866 "-Cdata"
2867 "--transform"
2868 (string-append "s/"
2869 name "-" ,release "/"
2870 name "/")))
2871 (list ,@(map car data-sources)))
2872 #t))
2873 (add-after 'unpack-data 'add-store-data-package-path-as-default
2874 (lambda* (#:key outputs #:allow-other-keys)
2875 (substitute* "src/engine/server.cpp"
2876 (("(else[[:space:]]*)((addpackagedir\\()\"data\"(\\);))"
2877 _
2878 else_part
2879 addpackagedir_original
2880 addpackagedir_open
2881 addpackagedir_close)
2882 (string-append else_part
2883 "{ "
2884 addpackagedir_open
2885 "\""
2886 (assoc-ref outputs "out")
2887 "/share/redeclipse/data\""
2888 addpackagedir_close
2889 " "
2890 addpackagedir_original
2891 " }")))
2892 #t))
2893 (delete 'configure) ; no configure script
2894 (add-after 'set-paths 'set-sdl-paths
2895 (lambda* (#:key inputs #:allow-other-keys)
2896 (setenv "CPATH"
2897 (string-append (assoc-ref inputs "sdl-union")
2898 "/include/SDL2"))
2899 #t))
2900 (add-after 'install 'copy-data
2901 (lambda* (#:key outputs #:allow-other-keys)
2902 (let ((out (assoc-ref outputs "out")))
2903 (copy-recursively "config"
2904 (string-append out "/config"))
2905 (copy-file "doc/examples/servinit.cfg"
2906 (string-append out "/config/servinit.cfg"))
2907 (copy-recursively "data"
2908 (string-append out "/share/redeclipse/data"))
2909 (mkdir-p (string-append out "/lib/redeclipse"))
2910 (symlink (string-append out "/share/redeclipse/data")
2911 (string-append out "/lib/redeclipse/data")))
2912 #t))
2913 (add-after 'copy-data 'wrap-program
2914 (lambda* (#:key inputs outputs #:allow-other-keys)
2915 (let* ((out (assoc-ref outputs "out"))
2916 (bin (string-append out "/bin")))
2917 (with-directory-excursion bin
2918 (rename-file "redeclipse_linux"
2919 ".redeclipse_linux-real")
2920 (rename-file "redeclipse_server_linux"
2921 ".redeclipse_server_linux-real")
2922 (call-with-output-file "redeclipse_linux"
2923 (lambda (port)
2924 (format port "#!~a/bin/sh
2925 # Run the thing from its home, otherwise it just bails out.
2926 cd \"~a\"
2927 exec -a \"$0\" ~a/.redeclipse_linux-real~%"
2928 (assoc-ref inputs "bash") ;implicit input
2929 (string-append out)
2930 (string-append bin))))
2931 (call-with-output-file "redeclipse_server_linux"
2932 (lambda (port)
2933 (format port "#!~a/bin/sh
2934 # Run the thing from its home, otherwise it just bails out.
2935 cd \"~a\"
2936 exec -a \"$0\" ~a/.redeclipse_server_linux-real~%"
2937 (assoc-ref inputs "bash") ;implicit input
2938 (string-append out)
2939 (string-append bin))))
2940 (chmod "redeclipse_linux" #o555)
2941 (chmod "redeclipse_server_linux" #o555)))
2942 #t)))))
2943 (native-inputs `(("pkg-config" ,pkg-config)))
2944 (inputs
2945 `(("curl" ,curl)
2946 ("glu" ,glu)
2947 ("sdl-union" ,(sdl-union (list sdl2
2948 sdl2-image
2949 sdl2-mixer)))
2950 ;; Create origin records for the many separate data packages.
2951 ,@(map (match-lambda
2952 ((name hash)
2953 (list name
2954 (origin
2955 (method url-fetch)
2956 (uri (string-append
2957 "https://github.com/red-eclipse/"
2958 name "/archive/v" release ".tar.gz"))
2959 (sha256 (base32 hash))
2960 (file-name (string-append name "-" version
2961 ".tar.gz"))))))
2962 data-sources)))
2963 (home-page "http://redeclipse.net/")
2964 (synopsis "Arena shooter derived from the Cube 2 engine")
2965 (description
2966 "Red Eclipse is an arena shooter, created from the Cube2 engine.
2967 Offering an innovative parkour system and distinct but all potent weapons,
2968 Red Eclipse provides fast paced and accessible gameplay.")
2969 ;; The engine is under Zlib; data files are covered by the other
2970 ;; licenses. More details at <http://redeclipse.net/wiki/License>.
2971 (license (list license:expat
2972 license:zlib
2973 license:cc-by-sa3.0
2974 license:cc-by3.0
2975 license:cc0)))))
2976
2977 (define-public grue-hunter
2978 (package
2979 (name "grue-hunter")
2980 (version "1.0")
2981 (source (origin
2982 (method url-fetch)
2983 (uri (string-append "https://jxself.org/" name ".tar.gz"))
2984 (sha256
2985 (base32
2986 "1hjcpy5439qs3v2zykis7hsi0i17zjs62gks3zd8mnfw9ni4i2h3"))))
2987 (build-system trivial-build-system) ; no Makefile.PL
2988 (arguments `(#:modules ((guix build utils))
2989 #:builder
2990 (begin
2991 (use-modules (guix build utils))
2992 (use-modules (srfi srfi-1))
2993
2994 (let* ((tarball (assoc-ref %build-inputs "tarball"))
2995 (perl (string-append (assoc-ref %build-inputs
2996 "perl")
2997 "/bin"))
2998 (gzip (string-append (assoc-ref %build-inputs
2999 "gzip")
3000 "/bin/gzip"))
3001 (tar (string-append (assoc-ref %build-inputs
3002 "tar")
3003 "/bin/tar"))
3004 (out (assoc-ref %outputs "out"))
3005 (bin (string-append out "/bin"))
3006 (doc (string-append out
3007 "/share/doc/grue-hunter")))
3008 (copy-file tarball "grue-hunter.tar.gz")
3009 (invoke gzip "-d" "grue-hunter.tar.gz")
3010 (invoke tar "xvf" "grue-hunter.tar")
3011
3012 (mkdir-p bin)
3013 (copy-file "grue-hunter/gh.pl"
3014 (string-append bin "/grue-hunter"))
3015 (patch-shebang (string-append bin "/grue-hunter")
3016 (list perl))
3017
3018 (install-file "grue-hunter/AGPLv3.txt" doc)
3019
3020 #t))))
3021 (inputs `(("perl" ,perl)
3022 ("tar" ,tar)
3023 ("gzip" ,gzip)
3024 ("tarball" ,source)))
3025 (home-page "http://jxself.org/grue-hunter.shtml")
3026 (synopsis "Text adventure game")
3027 (description
3028 "Grue Hunter is a text adventure game written in Perl. You must make
3029 your way through an underground cave system in search of the Grue. Can you
3030 capture it and get out alive?")
3031 (license license:agpl3+)))
3032
3033 (define-public lierolibre
3034 (package
3035 (name "lierolibre")
3036 (version "0.5")
3037 (source (origin
3038 (method url-fetch)
3039 (uri (string-append "https://launchpad.net/lierolibre/trunk/"
3040 version "/+download/lierolibre-"
3041 version ".tar.xz"))
3042 (sha256
3043 (base32
3044 "1cf1gvsn4qq190lrf9k5bpjnqwlcfw7pajvdnh7z5r4jqw0rsbl9"))
3045 (patches
3046 (search-patches "lierolibre-check-unaligned-access.patch"
3047 "lierolibre-try-building-other-arch.patch"
3048 "lierolibre-remove-arch-warning.patch"
3049 "lierolibre-newer-libconfig.patch"
3050 "lierolibre-is-free-software.patch"))
3051 (modules '((guix build utils)))
3052 (snippet
3053 '(begin
3054 ;; Delete pre-compiled files.
3055 (delete-file "data/LIERO.CHR")
3056 (delete-file "data/LIERO.SND")
3057 #t))))
3058 (build-system gnu-build-system)
3059 (native-inputs
3060 `(("imagemagick" ,imagemagick)
3061 ("pkg-config" ,pkg-config)
3062 ("util-linux" ,util-linux)
3063 ("sox" ,sox)))
3064 (inputs
3065 `(("boost" ,boost)
3066 ("libconfig" ,libconfig)
3067 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
3068 ("zlib" ,zlib)))
3069 (home-page "https://gitlab.com/lierolibre/lierolibre")
3070 (synopsis "Old-school earthworm action game")
3071 (description
3072 "lierolibre is an earthworm action game where you fight another player
3073 (or the computer) underground using a wide array of weapons.
3074
3075 Features:
3076 @itemize
3077 @item 2 worms, 40 weapons, great playability, two game modes: Kill'em All
3078 and Game of Tag, plus AI-players without true intelligence!
3079 @item Dat nostalgia.
3080 @item Extensions via a hidden F1 menu:
3081 @itemize
3082 @item Replays
3083 @item Game controller support
3084 @item Powerlevel palettes
3085 @end itemize
3086 @item Ability to write game variables to plain text files.
3087 @item Ability to load game variables from both EXE and plain text files.
3088 @item Scripts to extract and repack graphics, sounds and levels.
3089 @end itemize
3090
3091 To switch between different window sizes, use F6, F7 and F8, to switch to
3092 fullscreen, use F5 or Alt+Enter.")
3093 ;; Code mainly BSD-2, some parts under Boost 1.0. All assets are WTFPL2.
3094 (license (list license:bsd-2 license:boost1.0 license:wtfpl2))))
3095
3096 (define-public warzone2100
3097 (package
3098 (name "warzone2100")
3099 (version "3.2.3")
3100 (source (origin
3101 (method url-fetch)
3102 (uri (string-append "mirror://sourceforge/" name
3103 "/releases/" version "/" name "-" version
3104 ".tar.xz"))
3105 (sha256
3106 (base32
3107 "10kmpr4cby95zwqsl1zwx95d9achli6khq7flv6xmrq30a39xazw"))))
3108 (build-system gnu-build-system)
3109 (arguments
3110 `(#:configure-flags '("--with-distributor=Guix")
3111 #:phases
3112 (modify-phases %standard-phases
3113 (add-after 'unpack 'link-tests-with-qt
3114 (lambda _
3115 (substitute* "tests/Makefile.in"
3116 (("(framework_linktest_LDADD|maptest_LDADD) = " prefix)
3117 (string-append prefix "$(QT5_LIBS) ")))
3118 #t))
3119 (add-after 'unpack 'fix-ivis-linktest
3120 (lambda _
3121 (substitute* "tests/ivis_linktest.cpp"
3122 (("iV_DrawTextRotated.*;")
3123 (string-append "iV_DrawTextRotated(\"Press ESC to exit.\", "
3124 "100, 100, 0.0f, font_regular);")))
3125 #t)))))
3126 (native-inputs `(("gettext" ,gettext-minimal)
3127 ("pkg-config" ,pkg-config)
3128 ("unzip" ,unzip)
3129 ("zip" ,zip)))
3130 (inputs `(("fontconfig" ,fontconfig)
3131 ("freetype" ,freetype)
3132 ("fribidi" ,fribidi)
3133 ("glew" ,glew)
3134 ("harfbuzz" ,harfbuzz)
3135 ("libtheora" ,libtheora)
3136 ("libvorbis" ,libvorbis)
3137 ("libxrandr" ,libxrandr)
3138 ("openal" ,openal)
3139 ("physfs" ,physfs)
3140 ("qtbase" ,qtbase)
3141 ("qtscript" ,qtscript)
3142 ("openssl" ,openssl)
3143 ("sdl2" ,sdl2)))
3144 (home-page "http://wz2100.net")
3145 (synopsis "3D Real-time strategy and real-time tactics game")
3146 (description
3147 "Warzone 2100 offers campaign, multi-player, and single-player skirmish
3148 modes. An extensive tech tree with over 400 different technologies, combined
3149 with the unit design system, allows for a wide variety of possible units and
3150 tactics.")
3151 ; Everything is GPLv2+ unless otherwise specified in COPYING.NONGPL
3152 (license (list license:bsd-3
3153 license:cc0
3154 license:cc-by-sa3.0
3155 license:expat
3156 license:gpl2+
3157 license:lgpl2.1+))))
3158
3159 (define-public starfighter
3160 (package
3161 (name "starfighter")
3162 (version "1.7")
3163 (source (origin
3164 (method url-fetch)
3165 (uri (string-append
3166 "mirror://savannah/starfighter/"
3167 (version-major+minor version) "/"
3168 name "-" version "-src.tar.gz"))
3169 (sha256
3170 (base32
3171 "1646hpjq8bz2fkfkja1dah511hn7zd2r7da4w9c9blhad3p5732v"))))
3172 (build-system gnu-build-system)
3173 (native-inputs
3174 `(("pkg-config" ,pkg-config)))
3175 (inputs
3176 `(("sdl2" ,sdl2)
3177 ("sdl2-image" ,sdl2-image)
3178 ("sdl2-mixer" ,sdl2-mixer)))
3179 (home-page "http://starfighter.nongnu.org/")
3180 (synopsis "2D scrolling shooter game")
3181 (description
3182 "In the year 2579, the intergalactic weapons corporation, WEAPCO, has
3183 dominated the galaxy. Guide Chris Bainfield and his friend Sid Wilson on
3184 their quest to liberate the galaxy from the clutches of WEAPCO. Along the
3185 way, you will encounter new foes, make new allies, and assist local rebels
3186 in strikes against the evil corporation.")
3187 ;; gfx and music are under CC-BY 3.0, CC-BY-SA 3.0, CC0 or Public Domain.
3188 (license (list license:gpl3+
3189 license:cc-by3.0
3190 license:cc-by-sa3.0
3191 license:cc0
3192 license:public-domain))))
3193
3194 (define-public chromium-bsu
3195 (package
3196 (name "chromium-bsu")
3197 (version "0.9.16.1")
3198 (source (origin
3199 (method url-fetch)
3200 (uri (string-append "mirror://sourceforge/" name
3201 "/Chromium B.S.U. source code/"
3202 name "-" version ".tar.gz"))
3203 (sha256
3204 (base32
3205 "0jk2w5b6s6nkzri585bbz16cif2fhqcnl5l1mq3rd98r9nil3hd1"))))
3206 (build-system gnu-build-system)
3207 (native-inputs `(("pkg-config" ,pkg-config)))
3208 (inputs `(("gettext" ,gettext-minimal)
3209 ("glu" ,glu)
3210 ("quesoglc" ,quesoglc)
3211 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))))
3212 (home-page "http://chromium-bsu.sourceforge.net/")
3213 (synopsis "Fast-paced, arcade-style, top-scrolling space shooter")
3214 (description
3215 "In this game you are the captain of the cargo ship Chromium B.S.U. and
3216 are responsible for delivering supplies to the troops on the front line. Your
3217 ship has a small fleet of robotic fighters which you control from the relative
3218 safety of the Chromium vessel.")
3219 ;; Clarified Artistic License for everything but sound, which is covered
3220 ;; by the Expat License.
3221 (license (list license:clarified-artistic license:expat))))
3222
3223 (define-public tuxpaint
3224 (package
3225 (name "tuxpaint")
3226 (version "0.9.23") ;keep VER_DATE below in sync
3227 (source
3228 (origin
3229 (method url-fetch)
3230 (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint/"
3231 version "/tuxpaint-" version ".tar.gz"))
3232 (sha256
3233 (base32
3234 "09k9pxi88r3dx6dyjwf9h85d4qpva4i29qz63dc558hg9v21k69l"))
3235 (modules '((guix build utils)))
3236 (snippet
3237 '(begin
3238 ;; Remove win32 directory which contains binary dll's and the
3239 ;; deprecated visualc directory.
3240 (for-each delete-file-recursively '("win32" "visualc"))
3241 (substitute* "Makefile"
3242 ;; Do not rely on $(GPERF) being an absolute file name
3243 (("\\[ -x \\$\\(GPERF\\) \\]")
3244 "$(GPERF) --version >/dev/null 2>&1"))
3245 #t))
3246 (patches (search-patches "tuxpaint-stamps-path.patch"))))
3247 (build-system gnu-build-system)
3248 (native-inputs
3249 `(("gperf" ,gperf)
3250 ("pkg-config" ,pkg-config)))
3251 (inputs
3252 `(("cairo" ,cairo)
3253 ("fribidi" ,fribidi)
3254 ("gettext" ,gettext-minimal)
3255 ("libpng" ,libpng)
3256 ("librsvg" ,librsvg)
3257 ("libpaper" ,libpaper)
3258 ("netpbm" ,netpbm)
3259 ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-ttf sdl-image)))))
3260 ;; TODO: Use system fonts rather than those in data/fonts
3261 (arguments
3262 `(#:make-flags `("VER_DATE=2018-09-02"
3263 "GPERF=gperf" "CC=gcc"
3264 "SDL_PCNAME=sdl SDL_image SDL_mixer SDL_ttf"
3265 ,(string-append "PREFIX=" %output)
3266 "KDE_PREFIX=$(PREFIX)/share/applications"
3267 "KDE_ICON_PREFIX=$(PREFIX)/share/icons/"
3268 "COMPLETIONDIR=$(PREFIX)/etc/bash_completion.d")
3269 #:parallel-build? #f ;fails on some systems
3270 #:tests? #f ;No tests
3271 #:phases (modify-phases %standard-phases
3272 (delete 'configure) ;no configure phase
3273 (add-before 'install 'no-sys-cache
3274 (lambda _ ;do not rebuild system conf cache
3275 (substitute* "Makefile"
3276 (("kbuildsycoca4") ""))
3277 #t))
3278 (add-after 'install 'fix-import
3279 (lambda* (#:key inputs outputs #:allow-other-keys)
3280 (let* ((out (assoc-ref outputs "out"))
3281 (net (assoc-ref inputs "netpbm"))
3282 (tpi (string-append out "/bin/tuxpaint-import")))
3283 (substitute* tpi
3284 ;; Point to installation prefix so that the default
3285 ;; configure file is found.
3286 (("/usr/local") out))
3287 ;; tuxpaint-import uses a bunch of programs from
3288 ;; netpbm, so make sure it knows where those are
3289 (wrap-program tpi
3290 `("PATH" ":" prefix
3291 (,(string-append net "/bin"))))))))))
3292 (native-search-paths
3293 (list (search-path-specification
3294 (variable "TUXPAINT_STAMPS_PATH")
3295 (files '("share/tuxpaint/stamps")))))
3296 (home-page "http://www.tuxpaint.org")
3297 (synopsis "Drawing software for children")
3298 (description
3299 "Tux Paint is a free drawing program designed for young children (kids
3300 ages 3 and up). It has a simple, easy-to-use interface; fun sound effects;
3301 and an encouraging cartoon mascot who helps guide children as they use the
3302 program. It provides a blank canvas and a variety of drawing tools to help
3303 your child be creative.")
3304 (license license:gpl2+)))
3305
3306 (define-public tuxpaint-stamps
3307 (package
3308 (name "tuxpaint-stamps")
3309 (version "2018.09.01")
3310 (source
3311 (origin
3312 (method url-fetch)
3313 (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint-stamps/"
3314 (string-map (λ (x) (if (eq? x #\.) #\- x)) version)
3315 "/tuxpaint-stamps-" version ".tar.gz"))
3316 (sha256
3317 (base32
3318 "1skr23k27yj3vgwfazpzxp90lb2a278gxrkr3bxw7az6zpkmb3yp"))))
3319 (build-system trivial-build-system)
3320 (native-inputs
3321 `(("tar" ,tar)
3322 ("gzip" ,gzip)))
3323 (arguments
3324 `(#:modules ((guix build utils))
3325 #:builder (begin
3326 (use-modules (guix build utils))
3327 (setenv "PATH"
3328 (string-append
3329 (assoc-ref %build-inputs "tar") "/bin" ":"
3330 (assoc-ref %build-inputs "gzip") "/bin"))
3331 (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
3332 (chdir (string-append ,name "-" ,version))
3333 (let ((dir (string-append %output "/share/tuxpaint/stamps")))
3334 (mkdir-p dir)
3335 (copy-recursively "stamps" dir))
3336 #t)))
3337 (home-page (package-home-page tuxpaint))
3338 (synopsis "Stamp images for Tux Paint")
3339 (description
3340 "This package contains a set of \"Rubber Stamp\" images which can be used
3341 with the \"Stamp\" tool within Tux Paint.")
3342 (license license:gpl2+)))
3343
3344 (define-public tuxpaint-config
3345 (package
3346 (name "tuxpaint-config")
3347 (version "0.0.14") ;keep VER_DATE below in sync
3348 (source
3349 (origin
3350 (method url-fetch)
3351 (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint-config/"
3352 version "/tuxpaint-config-" version ".tar.gz"))
3353 (sha256
3354 (base32
3355 "0zkgxk436nqcp43zghkfmh397c7dvh5bwn2as7gwvv208bzyij6g"))))
3356 (build-system gnu-build-system)
3357 (native-inputs
3358 `(("gettext" ,gettext-minimal)))
3359 (inputs
3360 `(("fltk" ,fltk)
3361 ("libpaper" ,libpaper)
3362 ;; TODO: Should the following be propagated by fltk?
3363 ("libx11" ,libx11)
3364 ("libxft" ,libxft)
3365 ("mesa" ,mesa)))
3366 (arguments
3367 `(#:make-flags `("VER_DATE=2018-09-01"
3368 "CONFDIR=/etc/tuxpaint" ;don't write to store
3369 ,(string-append "PREFIX=" %output)
3370 "GNOME_PREFIX=$(PREFIX)")
3371 #:parallel-build? #f ;race conditions
3372 #:tests? #f ;no tests
3373 #:phases (modify-phases %standard-phases
3374 (delete 'configure) ;no configure phase
3375 (add-before 'install 'gzip-no-name
3376 (lambda* _
3377 (substitute* "Makefile"
3378 ;; tuxpaint-config compresses its own documentation;
3379 ;; make sure it uses flags for reproducibility.
3380 (("gzip") "gzip --no-name"))))
3381 (add-before 'install 'make-install-dirs
3382 (lambda* (#:key outputs #:allow-other-keys)
3383 (let ((out (assoc-ref outputs "out")))
3384 (mkdir-p (string-append out "/bin"))
3385 #t))))))
3386 (home-page (package-home-page tuxpaint))
3387 (synopsis "Configure Tux Paint")
3388 (description
3389 "Tux Paint Config is a graphical configuration editor for Tux Paint.")
3390 (license license:gpl2))) ;no "or later" present
3391
3392 (define-public supertux
3393 (package
3394 (name "supertux")
3395 (version "0.5.1")
3396 (source (origin
3397 (method url-fetch)
3398 (uri (string-append "https://github.com/SuperTux/supertux/"
3399 "releases/download/v" version "/SuperTux-v"
3400 version "-Source.tar.gz"))
3401 (sha256
3402 (base32
3403 "1i8avad7w7ikj870z519j383ldy29r6f956bs38cbr8wk513pp69"))))
3404 (arguments
3405 '(#:tests? #f
3406 #:configure-flags '("-DINSTALL_SUBDIR_BIN=bin"
3407 "-DENABLE_BOOST_STATIC_LIBS=OFF")))
3408 (build-system cmake-build-system)
3409 (inputs `(("sdl2" ,sdl2)
3410 ("sdl2-image" ,sdl2-image)
3411 ("sdl2-mixer" ,sdl2-mixer)
3412 ("openal" ,openal)
3413 ("mesa" ,mesa)
3414 ("glew" ,glew)
3415 ("libvorbis" ,libvorbis)
3416 ("libogg" ,libogg)
3417 ("physfs" ,physfs)
3418 ("curl" ,curl)
3419 ("boost" ,boost)))
3420 (native-inputs `(("pkg-config" ,pkg-config)))
3421 (synopsis "2D platformer game")
3422 (description "SuperTux is a free classic 2D jump'n run sidescroller game
3423 in a style similar to the original Super Mario games covered under
3424 the GNU GPL.")
3425 (home-page "https://supertuxproject.org/")
3426 (license license:gpl3+)))
3427
3428 (define-public tintin++
3429 (package
3430 (name "tintin++")
3431 (version "2.01.7")
3432 (source
3433 (origin
3434 (method url-fetch)
3435 (uri (string-append "mirror://sourceforge/tintin/TinTin++ Source Code/"
3436 (version-major+minor version)
3437 "/tintin-" version ".tar.gz"))
3438 (sha256
3439 (base32
3440 "033n84pyxml3n3gd4dq0497n9w331bnrr1gppwipz9ashmq8jz7v"))))
3441 (inputs
3442 `(("gnutls" ,gnutls)
3443 ("pcre" ,pcre)
3444 ("readline" ,readline)
3445 ("zlib" ,zlib)))
3446 (arguments
3447 '(#:tests? #f ; no test suite
3448 #:phases
3449 (modify-phases %standard-phases
3450 ;; The source is in tt/src.
3451 (add-before 'configure 'chdir
3452 (lambda _
3453 (chdir "src")
3454 #t)))))
3455 (build-system gnu-build-system)
3456 (home-page "http://tintin.sourceforge.net/")
3457 (synopsis "MUD client")
3458 (description
3459 "TinTin++ is a MUD client which supports MCCP (Mud Client Compression
3460 Protocol), MMCP (Mud Master Chat Protocol), xterm 256 colors, most TELNET
3461 options used by MUDs, as well as those required to login via telnet on
3462 Linux / Mac OS X servers, and an auto mapper with a VT100 map display.")
3463 (license license:gpl2+)))
3464
3465 (define-public laby
3466 (package
3467 (name "laby")
3468 (version "0.6.4")
3469 (source
3470 (origin (method url-fetch)
3471 (uri (string-append
3472 "https://github.com/sgimenez/laby/archive/"
3473 name "-" version ".tar.gz"))
3474 (sha256
3475 (base32
3476 "0gyrfa95l1qka7gbjf7l6mk7mbfvph00l0c995ia272qdw7rjhyf"))
3477 (patches (search-patches "laby-make-install.patch"))))
3478 (build-system gnu-build-system)
3479 (inputs
3480 `(("lablgtk" ,lablgtk)
3481 ("ocaml" ,ocaml)
3482 ("ocaml-findlib" ,ocaml-findlib)))
3483 (arguments
3484 '(#:phases
3485 (modify-phases %standard-phases
3486 (delete 'configure)
3487 (add-before 'build 'setenv
3488 (lambda* (#:key inputs #:allow-other-keys)
3489 (let ((lablgtk (assoc-ref inputs "lablgtk")))
3490 (setenv "LD_LIBRARY_PATH"
3491 (string-append lablgtk "/lib/ocaml/stublibs"))))))
3492 #:tests? #f ; no 'check' target
3493 #:make-flags
3494 (list (string-append "PREFIX=" (assoc-ref %outputs "out")) "all")))
3495 (home-page "https://sgimenez.github.io/laby/")
3496 (synopsis "Programming game")
3497 (description "Learn programming, playing with ants and spider webs ;-)
3498 Your robot ant can be programmed in many languages: OCaml, Python, C, C++,
3499 Java, Ruby, Lua, JavaScript, Pascal, Perl, Scheme, Vala, Prolog. Experienced
3500 programmers may also add their own favorite language.")
3501 (license license:gpl3+)))
3502
3503 (define-public bambam
3504 (package
3505 (name "bambam")
3506 (version "0.6")
3507 (source
3508 (origin
3509 (method git-fetch)
3510 (uri (git-reference
3511 (url "https://github.com/porridge/bambam")
3512 (commit version)))
3513 (file-name (git-file-name name version))
3514 (sha256
3515 (base32
3516 "08hcd0gzia3pz7fzk4pqc5kbq1074j4q0jcmbpgvr7n623nj2xa5"))))
3517 (build-system python-build-system)
3518 (arguments
3519 `(#:python ,python-2
3520 #:tests? #f ; no tests
3521 #:phases
3522 (modify-phases %standard-phases
3523 (delete 'build)
3524 (add-before 'install 'patch-data-dir-location
3525 (lambda _
3526 (substitute* "bambam.py"
3527 (("'data'") "'../share/bambam/data'"))
3528 #t))
3529 (replace 'install
3530 (lambda* (#:key outputs #:allow-other-keys)
3531 (let* ((out (assoc-ref outputs "out"))
3532 (bin (string-append out "/bin"))
3533 (share (string-append out "/share")))
3534 (mkdir-p bin)
3535 (copy-file "bambam.py" (string-append bin "/bambam"))
3536 (install-file "bambam.6" (string-append share "/man/man6"))
3537 (copy-recursively "data" (string-append share "/bambam/data")))
3538 #t)))))
3539 (inputs
3540 `(("python-pygame" ,python-pygame)))
3541 (home-page "https://github.com/porridge/bambam")
3542 (synopsis "Keyboard mashing and doodling game for babies")
3543 (description "Bambam is a simple baby keyboard (and gamepad) masher
3544 application that locks the keyboard and mouse and instead displays bright
3545 colors, pictures, and sounds.")
3546 (license license:gpl3+)))
3547
3548 (define-public mrrescue
3549 (package
3550 (name "mrrescue")
3551 (version "1.02e")
3552 (source (origin
3553 (method url-fetch)
3554 (uri (string-append
3555 "https://github.com/SimonLarsen/mrrescue/releases/"
3556 "download/" version "/" name version ".love"))
3557 (file-name (string-append name "-" version ".love"))
3558 (sha256
3559 (base32
3560 "0jwzbwkgp1l5ia6c7s760gmdirbsncp6nfqp7vqdqsfb63la9gl2"))))
3561 (build-system trivial-build-system)
3562 (arguments
3563 `(#:modules ((guix build utils))
3564 #:builder
3565 (begin
3566 (use-modules (guix build utils))
3567 (let* ((out (assoc-ref %outputs "out"))
3568 (script (string-append out "/bin/" ,name))
3569 (data (string-append out "/share/" ,name))
3570 (source (assoc-ref %build-inputs "source"))
3571 (unzip (string-append (assoc-ref %build-inputs "unzip")
3572 "/bin/unzip"))
3573 (patch (string-append (assoc-ref %build-inputs "patch")
3574 "/bin/patch"))
3575 (bash (string-append (assoc-ref %build-inputs "bash")
3576 "/bin/bash"))
3577 (love (string-append (assoc-ref %build-inputs "love")
3578 "/bin/love")))
3579
3580 (mkdir-p (dirname script))
3581 (with-output-to-file script
3582 (lambda ()
3583 (format #t "#!~a~%" bash)
3584 (format #t "exec -a ~a \"~a\" \"~a\"~%" ,name love data)))
3585 (chmod script #o755)
3586
3587 ;; The better way to package this game would be to install *only* the
3588 ;; script above, pointing to the unextracted .love file in the store.
3589 ;; However, mrrescue 1.02e needs to be patched to work with Love 11.
3590 ;; Instead of extracting the .love file, patching it, and re-zipping
3591 ;; it to the store, simply point the script to the extracted patched
3592 ;; data directory directly.
3593 (mkdir-p data)
3594 (with-directory-excursion data
3595 (invoke unzip source)
3596 (invoke patch "-p1" "-i"
3597 (assoc-ref %build-inputs "love-11.patch")))
3598 #t))))
3599 (native-inputs
3600 `(("unzip" ,unzip)
3601 ("patch" ,patch)
3602 ("love-11.patch" ,(search-patch "mrrescue-support-love-11.patch"))))
3603 (inputs
3604 `(("bash" ,bash)
3605 ("love" ,love)))
3606 (home-page "http://tangramgames.dk/games/mrrescue")
3607 (synopsis "Arcade-style fire fighting game")
3608 (description
3609 "Mr. Rescue is an arcade styled 2d action game centered around evacuating
3610 civilians from burning buildings. The game features fast-paced fire
3611 extinguishing action, intense boss battles, a catchy soundtrack, and lots of
3612 throwing people around in pseudo-randomly generated buildings.")
3613 (license (list license:zlib ; for source code
3614 license:cc-by-sa3.0)))) ; for graphics and music assets
3615
3616 (define-public hyperrogue
3617 (package
3618 (name "hyperrogue")
3619 (version "10.5d")
3620 ;; When updating this package, be sure to update the "hyperrogue-data"
3621 ;; origin in native-inputs.
3622 (source (origin
3623 (method url-fetch)
3624 (uri (string-append
3625 "https://www.roguetemple.com/z/hyper/"
3626 name (string-join (string-split version #\.) "")
3627 "-src.tgz"))
3628 (sha256
3629 (base32
3630 "1ls055v4pv2xmn2a8lav7wl370zn0wsd91q41bk0amxd168kcndy"))))
3631 (build-system gnu-build-system)
3632 (arguments
3633 `(#:tests? #f ; no check target
3634 #:make-flags '("HYPERROGUE_USE_GLEW=1"
3635 "HYPERROGUE_USE_PNG=1")
3636 #:phases
3637 (modify-phases %standard-phases
3638 (add-after 'set-paths 'set-sdl-paths
3639 (lambda* (#:key inputs #:allow-other-keys)
3640 (setenv "CPATH"
3641 (string-append (assoc-ref inputs "sdl-union")
3642 "/include/SDL"))))
3643 (replace 'configure
3644 (lambda* (#:key inputs outputs #:allow-other-keys)
3645 (let* ((out (assoc-ref outputs "out"))
3646 (share-dir (string-append out "/share/hyperrogue"))
3647 (dejavu-dir (string-append
3648 (assoc-ref inputs "font-dejavu")
3649 "/share/fonts/truetype"))
3650 (dejavu-font "DejaVuSans-Bold.ttf")
3651 (music-file "hyperrogue-music.txt"))
3652 ;; Fix font and music paths.
3653 (substitute* "basegraph.cpp"
3654 ((dejavu-font)
3655 (string-append dejavu-dir "/" dejavu-font)))
3656 (substitute* music-file
3657 (("\\*/")
3658 (string-append share-dir "/sounds/")))
3659 (substitute* "sound.cpp"
3660 (("musicfile = \"\"")
3661 (string-append "musicfile = \""
3662 share-dir "/" music-file "\"")))
3663 ;; Disable build machine CPU optimizations and warnings treated
3664 ;; as errors.
3665 (substitute* "Makefile"
3666 (("-march=native") "")
3667 (("-Werror") "")))
3668 #t))
3669 (replace 'install
3670 (lambda* (#:key inputs outputs #:allow-other-keys)
3671 (let* ((out (assoc-ref outputs "out"))
3672 (bin (string-append out "/bin"))
3673 (share-dir (string-append out "/share/hyperrogue")))
3674 (mkdir-p bin)
3675 (install-file "hyperrogue" bin)
3676 (install-file "hyperrogue-music.txt" share-dir))
3677 #t))
3678 (add-after 'install 'install-data
3679 (lambda* (#:key inputs outputs #:allow-other-keys)
3680 (let* ((data (assoc-ref inputs "hyperrogue-data"))
3681 (out (assoc-ref outputs "out"))
3682 (sounds (string-append out "/share/hyperrogue/sounds"))
3683 (unzip (string-append (assoc-ref inputs "unzip") "/bin/unzip")))
3684 ;; Extract media license information into sounds directory.
3685 (invoke unzip "-j" data
3686 (string-append
3687 "hyperrogue"
3688 (string-join (string-split ,version #\.) "")
3689 "/sounds/credits.txt") "-d" sounds)
3690 ;; Extract sounds and music into sounds directory.
3691 (invoke "unzip" "-j" data
3692 (string-append
3693 "hyperrogue"
3694 (string-join (string-split ,version #\.) "")
3695 "/*.ogg") "-d" sounds)))))))
3696 (native-inputs
3697 `(("hyperrogue-data"
3698 ,(origin
3699 (method url-fetch)
3700 (uri
3701 (string-append
3702 "https://www.roguetemple.com/z/hyper/" name
3703 (string-join (string-split version #\.) "")
3704 "-win.zip"))
3705 (sha256
3706 (base32
3707 "13n9hcvf9yv7kjghm5jhjpwq1kh94i4bgvcczky9kvdvw1y9278n"))))
3708 ("unzip" ,unzip)))
3709 (inputs
3710 `(("font-dejavu" ,font-dejavu)
3711 ("glew" ,glew)
3712 ("libpng" ,libpng)
3713 ("sdl-union" ,(sdl-union (list sdl
3714 sdl-gfx
3715 sdl-mixer
3716 sdl-ttf)))))
3717 (home-page "https://www.roguetemple.com/z/hyper/")
3718 (synopsis "Non-euclidean graphical rogue-like game")
3719 (description
3720 "HyperRogue is a game in which the player collects treasures and fights
3721 monsters -- rogue-like but for the fact that it is played on the hyperbolic
3722 plane and not in euclidean space.
3723
3724 In HyperRogue, the player can move through different parts of the world, which
3725 are home to particular creatures and may be subject to their own rules of
3726 \"physics\".
3727
3728 While the game can use ASCII characters to display the the classical rogue
3729 symbols, it still needs graphics to render the non-euclidean world.")
3730 (license (list license:bsd-3 ; glew.c, mtrand.*
3731 license:cc-by-sa3.0 ; music
3732 license:cc-by-sa4.0 ; sounds
3733 license:cc0
3734 license:public-domain ; direntx.*, some sounds
3735 license:zlib ; savepng.*
3736 license:gpl2+)))) ; remaining files
3737
3738 (define-public kobodeluxe
3739 (package
3740 (name "kobodeluxe")
3741 (version "0.5.1")
3742 (source (origin
3743 (method url-fetch)
3744 (uri (string-append "http://olofson.net/kobodl/download/KoboDeluxe-"
3745 version ".tar.bz2"))
3746 (sha256
3747 (base32
3748 "0b2wvdpnmaibsy419c16dfwj5kvd3pccby2aaqvm964x74592yqg"))
3749 (patches (search-patches
3750 "kobodeluxe-const-charp-conversion.patch"
3751 "kobodeluxe-enemies-pipe-decl.patch"
3752 "kobodeluxe-graphics-window-signed-char.patch"
3753 "kobodeluxe-manpage-minus-not-hyphen.patch"
3754 "kobodeluxe-midicon-segmentation-fault.patch"
3755 "kobodeluxe-paths.patch"))))
3756 (build-system gnu-build-system)
3757 (arguments
3758 '(#:configure-flags
3759 (list (string-append "CPPFLAGS=-I"
3760 (assoc-ref %build-inputs "sdl-union")
3761 "/include/SDL"))))
3762 (inputs `(("sdl-union" ,(sdl-union (list sdl sdl-image)))))
3763 (synopsis "Shooter with space station destruction")
3764 (description
3765 "Kobo Deluxe is an enhanced version of Akira Higuchi's XKobo graphical game
3766 for Un*x systems with X11.")
3767 (home-page "http://olofson.net/kobodl/")
3768 (license license:gpl2+)))
3769
3770 (define-public freeciv
3771 (package
3772 (name "freeciv")
3773 (version "2.6.0")
3774 (source
3775 (origin
3776 (method url-fetch)
3777 (uri (list (string-append
3778 "http://files.freeciv.org/stable/freeciv-"
3779 version ".tar.bz2")
3780 (string-append
3781 "mirror://sourceforge/freeciv/Freeciv%20"
3782 (version-major+minor version) "/" version
3783 "/freeciv-" version ".tar.bz2")))
3784 (sha256
3785 (base32
3786 "16f9wsnn7073s6chzbm3819swd0iw019p9nrzr3diiynk28kj83w"))))
3787 (build-system gnu-build-system)
3788 (inputs
3789 `(("curl" ,curl)
3790 ("cyrus-sasl" ,cyrus-sasl)
3791 ("gtk+" ,gtk+)
3792 ("sdl-mixer" ,sdl-mixer)
3793 ("zlib" ,zlib)))
3794 (native-inputs
3795 `(("pkg-config" ,pkg-config)))
3796 (home-page "http://www.freeciv.org/")
3797 (synopsis "Turn based empire building strategy game")
3798 (description "Freeciv is a turn based empire building strategy game
3799 inspired by the history of human civilization. The game commences in
3800 prehistory and your mission is to lead your tribe from the Stone Age
3801 to the Space Age.")
3802 (license license:gpl2+)))
3803
3804 (define-public no-more-secrets
3805 (package
3806 (name "no-more-secrets")
3807 (version "0.3.3")
3808 (source
3809 (origin
3810 (method url-fetch)
3811 (uri (string-append "https://github.com/bartobri/no-more-secrets/"
3812 "archive/v" version ".tar.gz"))
3813 (file-name (string-append name "-" version ".tar.gz"))
3814 (sha256
3815 (base32
3816 "1kpx1rirc3i7fb4lymp0hx5rqr0s2ay4za261rw3bcy6d23l1kyg"))))
3817 (build-system gnu-build-system)
3818 (arguments
3819 `(#:tests? #f
3820 #:make-flags (list "CC=gcc" "all-ncurses"
3821 (string-append "prefix="
3822 (assoc-ref %outputs "out")))
3823 #:phases
3824 (modify-phases %standard-phases
3825 (delete 'configure))))
3826 (inputs
3827 `(("ncurses" ,ncurses)))
3828 (home-page "https://github.com/bartobri/no-more-secrets")
3829 (synopsis "Recreation of data decryption effect in \"Sneakers\"")
3830 (description
3831 "@code{No More Secrets} provides a command line tool called \"nms\"
3832 that recreates the famous data decryption effect seen on screen in the 1992
3833 movie \"Sneakers\".
3834
3835 This command works on piped data. Pipe any ASCII or UTF-8 text to nms, and
3836 it will apply the hollywood effect, initially showing encrypted data, then
3837 starting a decryption sequence to reveal the original plaintext characters.")
3838 (license license:expat)))
3839
3840 (define-public megaglest-data
3841 (package
3842 (name "megaglest-data")
3843 (version "3.13.0")
3844 (source
3845 (origin
3846 (method url-fetch)
3847 (uri (string-append
3848 "https://github.com/MegaGlest/megaglest-data"
3849 "/releases/download/" version "/megaglest-data-"
3850 version ".tar.xz"))
3851 (sha256
3852 (base32
3853 "0ipgza33z89fw3si32iafm981f3fvm0zldvbxj29whghd2k3rpj3"))))
3854 (build-system cmake-build-system)
3855 (arguments
3856 `(#:tests? #f))
3857 (home-page "https://megaglest.org/")
3858 (synopsis "Data files for MegaGlest")
3859 (description "This package contains the data files required for MegaGlest.")
3860 (license license:cc-by-sa3.0)))
3861
3862 (define-public megaglest
3863 (package
3864 (name "megaglest")
3865 (version "3.13.0")
3866 (source
3867 (origin
3868 (method url-fetch)
3869 (uri (string-append
3870 "https://github.com/MegaGlest/megaglest-source"
3871 "/releases/download/" version "/megaglest-source-"
3872 version ".tar.xz"))
3873 (sha256
3874 (base32
3875 "1ffck3ii1wp5k3nn5p0ga06jgp7pzk4zw0xln3xim2w7qrxzdzh9"))))
3876 (build-system cmake-build-system)
3877 (inputs
3878 `(("curl" ,curl)
3879 ("fontconfig" ,fontconfig)
3880 ("ftgl" ,ftgl)
3881 ("glew" ,glew)
3882 ("libjpeg-turbo" ,libjpeg-turbo)
3883 ("megaglest-data" ,megaglest-data)
3884 ("mesa" ,mesa)
3885 ("miniupnpc" ,miniupnpc)
3886 ("openal" ,openal)
3887 ("libircclient" ,libircclient)
3888 ("libpng" ,libpng)
3889 ("libvorbis" ,libvorbis)
3890 ("lua" ,lua)
3891 ("sdl2" ,sdl2)
3892 ("wxwidgets" ,wxwidgets)))
3893 (native-inputs
3894 `(("cppunit" ,cppunit)
3895 ("pkg-config" ,pkg-config)))
3896 (arguments
3897 `(#:configure-flags
3898 (list (string-append "-DCUSTOM_DATA_INSTALL_PATH="
3899 (assoc-ref %build-inputs "megaglest-data")
3900 "/share/megaglest")
3901 "-DBUILD_MEGAGLEST_TESTS=ON")
3902 #:phases
3903 (modify-phases %standard-phases
3904 (add-after 'unpack 'fix-ini-search-path
3905 (lambda* (#:key outputs #:allow-other-keys)
3906 (substitute* "source/glest_game/global/config.cpp"
3907 (("/usr/share/megaglest/")
3908 (string-append (assoc-ref outputs "out")
3909 "/share/megaglest/"))))))
3910 #:test-target "megaglest_tests"))
3911 (home-page "https://megaglest.org/")
3912 (synopsis "3D real-time strategy (RTS) game")
3913 (description "MegaGlest is a cross-platform 3D real-time strategy (RTS)
3914 game, where you control the armies of one of seven different factions: Tech,
3915 Magic, Egypt, Indians, Norsemen, Persian or Romans.")
3916 (license license:gpl2+)))
3917
3918 (define-public freegish
3919 (let ((commit "8795cd7adc95957883f2d3465eb9036a774667a7")
3920 (revision "1"))
3921 (package
3922 (name "freegish")
3923 (version (string-append "0-" revision "." (string-take commit 9)))
3924 (source (origin
3925 (method git-fetch)
3926 (uri (git-reference
3927 (url "https://github.com/freegish/freegish.git")
3928 (commit commit)))
3929 (file-name (git-file-name name version))
3930 (sha256
3931 (base32
3932 "1p1zf5qqagmcpi1db2bs02cnalpy3qiymp6yzan7k1bhmv859gsx"))
3933 (modules '((guix build utils)))
3934 ;; The audio files in the "music" directory are licensed under
3935 ;; CC-BY-NC, so we delete them.
3936 (snippet
3937 '(begin
3938 (delete-file-recursively "music")
3939 #t))))
3940 (build-system cmake-build-system)
3941 (arguments
3942 `(#:tests? #f ; no tests included
3943 #:configure-flags
3944 (list "-DCMAKE_INSTALL_FHS=ON")
3945 #:phases
3946 (modify-phases %standard-phases
3947 (add-after 'unpack 'set-DATAPATH
3948 (lambda* (#:key outputs #:allow-other-keys)
3949 (substitute* "CMakeLists.txt"
3950 (("^option\\(INSTALL_FHS" line)
3951 (string-append "add_definitions(-DDATAPATH=\""
3952 (assoc-ref outputs "out") "/share/freegish\")\n"
3953 line)))
3954 #t)))))
3955 (inputs
3956 `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))
3957 ("openal" ,openal)
3958 ("libvorbis" ,libvorbis)
3959 ("libogg" ,libogg)
3960 ("mesa" ,mesa)
3961 ("libpng" ,libpng)
3962 ("zlib" ,zlib)))
3963 (home-page "https://github.com/freegish/freegish")
3964 (synopsis "Side-scrolling physics platformer with a ball of tar")
3965 (description "In FreeGish you control Gish, a ball of tar who lives
3966 happily with his girlfriend Brea, until one day a mysterious dark creature
3967 emerges from a sewer hole and pulls her below ground.")
3968 ;; The textures are available under the Expat license. All other assets
3969 ;; (including levels) are covered under CC-BY-SA or public domain. The
3970 ;; source code is under GPLv2+.
3971 (license (list license:gpl2+
3972 license:expat
3973 license:public-domain
3974 license:cc-by-sa3.0)))))
3975
3976 (define-public cdogs-sdl
3977 (package
3978 (name "cdogs-sdl")
3979 (version "0.6.9")
3980 (source (origin
3981 (method git-fetch)
3982 (uri (git-reference
3983 (url "https://github.com/cxong/cdogs-sdl.git")
3984 (commit version)))
3985 (file-name (git-file-name name version))
3986 (sha256
3987 (base32
3988 "13gyv2hzk43za1n3lsjnd5v64xlzfzq7n10scd1rcbsnk1n007zr"))))
3989 (build-system cmake-build-system)
3990 (arguments
3991 `(#:configure-flags
3992 (list (string-append "-DCDOGS_DATA_DIR="
3993 (assoc-ref %outputs "out")
3994 "/share/cdogs-sdl/"))))
3995 (inputs
3996 `(("mesa" ,mesa)
3997 ("sdl2" ,sdl2)
3998 ("sdl2-image" ,sdl2-image)
3999 ("sdl2-mixer" ,sdl2-mixer)))
4000 (home-page "https://cxong.github.io/cdogs-sdl/")
4001 (synopsis "Classic overhead run-and-gun game")
4002 (description "C-Dogs SDL is a classic overhead run-and-gun game,
4003 supporting up to 4 players in co-op and deathmatch modes. Customize your
4004 player, choose from many weapons, and blast, slide and slash your way through
4005 over 100 user-created campaigns.")
4006 ;; GPLv2+ for code (includes files under BSD-2 and BSD-3),
4007 ;; CC0/CC-BY/CC-BY-SA for assets.
4008 (license (list license:gpl2+
4009 license:bsd-2
4010 license:bsd-3
4011 license:cc0
4012 license:cc-by3.0
4013 license:cc-by-sa3.0))))
4014
4015 (define-public kiki
4016 (package
4017 (name "kiki")
4018 (version "1.0.2")
4019 (source (origin
4020 (method url-fetch)
4021 (uri (string-append "mirror://sourceforge/kiki/kiki-src/"
4022 version "/kiki-" version "-src.tgz"))
4023 (sha256
4024 (base32
4025 "0ihjdsxbn8z3cz0gpcprafiipcqaiskgdnh1rhmw4qff8dszalbn"))
4026 (modules '((guix build utils)))
4027 (snippet
4028 '(begin
4029 (for-each delete-file (find-files "." "\\.dll$"))
4030 #t))
4031 (patches
4032 (search-patches "kiki-level-selection-crash.patch"
4033 "kiki-makefile.patch"
4034 "kiki-missing-includes.patch"
4035 "kiki-portability-64bit.patch"))))
4036 (build-system gnu-build-system)
4037 (arguments
4038 `(#:tests? #f ; there are no tests
4039 #:make-flags '("CXX=g++")
4040 #:phases
4041 (modify-phases %standard-phases
4042 (replace 'configure
4043 (lambda* (#:key inputs outputs #:allow-other-keys)
4044 (setenv "CPLUS_INCLUDE_PATH"
4045 (string-append (assoc-ref inputs "sdl-union")
4046 "/include/SDL:"
4047 (assoc-ref inputs "python")
4048 "/include/python2.7:"
4049 (getenv "CPLUS_INCLUDE_PATH")))
4050 (substitute* "src/main/main.cpp"
4051 (("#include <SDL.h>" line)
4052 (string-append line "
4053 #define K_INCLUDE_GLUT
4054 #include \"KIncludeTools.h\""))
4055 (("// initialize SDL" line)
4056 (string-append "glutInit(&argc,argv);\n" line)))
4057 (substitute* "src/main/KikiController.cpp"
4058 (("getenv\\(\"KIKI_HOME\"\\)")
4059 (string-append "\"" (assoc-ref outputs "out") "/share/kiki/\"")))
4060 (substitute* "linux/Makefile"
4061 (("CXXOPTS =" line)
4062 (string-append line " -fpermissive"))
4063 (("PYTHON_VERSION=.*") "PYTHON_VERSION=2.7")
4064 (("PYTHONHOME =.*")
4065 (string-append "PYTHONHOME = "
4066 (assoc-ref inputs "python")
4067 "/lib/python2.7/"))
4068 (("\\$\\(GLLIBS\\)" line)
4069 (string-append line " -lm -lpython2.7")))
4070 (substitute* "src/main/KikiPythonWidget.h"
4071 (("#define __KikiPythonWidget" line)
4072 (string-append line "\n#include \"KikiPython.h\"")))
4073 #t))
4074 (add-before 'build 'build-kodilib
4075 (lambda* (#:key make-flags #:allow-other-keys)
4076 (with-directory-excursion "kodilib/linux"
4077 (apply invoke "make" make-flags))))
4078 (add-after 'build-kodilib 'chdir
4079 (lambda _ (chdir "linux") #t))
4080 (replace 'install
4081 (lambda* (#:key outputs #:allow-other-keys)
4082 (let* ((out (assoc-ref outputs "out"))
4083 (bin (string-append out "/bin"))
4084 (share (string-append out "/share/kiki")))
4085 (mkdir-p bin)
4086 (mkdir-p share)
4087 (install-file "kiki" bin)
4088 (copy-recursively "../py" (string-append share "/py"))
4089 (copy-recursively "../sound" (string-append share "/sound"))
4090 #t))))))
4091 (inputs
4092 `(("glu" ,glu)
4093 ;; Kiki builds fine with freeglut 3.0.0 but segfaults on start.
4094 ("freeglut" ,freeglut-2.8)
4095 ("sdl-union" ,(sdl-union (list sdl
4096 sdl-mixer
4097 sdl-image)))
4098 ("python" ,python-2)))
4099 (native-inputs
4100 `(("swig" ,swig)))
4101 (home-page "http://kiki.sourceforge.net/")
4102 (synopsis "3D puzzle game")
4103 (description "Kiki the nano bot is a 3D puzzle game. It is basically a
4104 mixture of the games Sokoban and Kula-World. Your task is to help Kiki, a
4105 small robot living in the nano world, repair its maker.")
4106 ;; See <http://metadata.ftp-master.debian.org/changelogs/main/k/
4107 ;; kiki-the-nano-bot/kiki-the-nano-bot_1.0.2+dfsg1-4_copyright>
4108 ;; for a statement from the author.
4109 (license license:public-domain)))
4110
4111 (define-public teeworlds
4112 (package
4113 (name "teeworlds")
4114 (version "0.7.2")
4115 (source (origin
4116 (method git-fetch)
4117 (uri (git-reference
4118 (url "https://github.com/teeworlds/teeworlds.git")
4119 (commit version)))
4120 (file-name (git-file-name name version))
4121 (sha256
4122 (base32
4123 "15l988qcsqgb6rjais0qd5sd2rjanm2708jmzvkariqzz0d6pb93"))
4124 (modules '((guix build utils)
4125 (ice-9 ftw)
4126 (ice-9 regex)
4127 (srfi srfi-1)
4128 (srfi srfi-26)))
4129 (snippet ; remove bundled libraries except md5
4130 '(let ((base-dir "src/engine/external/"))
4131 (for-each (compose (cut delete-file-recursively <>)
4132 (cut string-append base-dir <>))
4133 (remove (cut string-match "(^.)|(^md5$)" <>)
4134 (scandir base-dir)))
4135 #t))
4136 (patches
4137 (search-patches "teeworlds-use-latest-wavpack.patch"))))
4138 (build-system gnu-build-system)
4139 (arguments
4140 `(#:tests? #f ; no tests included
4141 #:modules ((guix build gnu-build-system)
4142 (guix build utils)
4143 (srfi srfi-26))
4144 #:phases
4145 (modify-phases %standard-phases
4146 (replace 'configure
4147 (lambda* (#:key outputs #:allow-other-keys)
4148 ;; The bundled json-parser uses an old API.
4149 ;; To use the latest non-bundled version, we need to pass the
4150 ;; length of the data in all 'json_parse_ex' calls.
4151 (define (use-latest-json-parser file)
4152 (substitute* file
4153 (("engine/external/json-parser/json\\.h")
4154 "json-parser/json.h")
4155 (("json_parse_ex\\(&JsonSettings, pFileData, aError\\);")
4156 "json_parse_ex(&JsonSettings,
4157 pFileData,
4158 strlen(pFileData),
4159 aError);")))
4160
4161 ;; Embed path to assets.
4162 (substitute* "src/engine/shared/storage.cpp"
4163 (("#define DATA_DIR.*")
4164 (string-append "#define DATA_DIR \""
4165 (assoc-ref outputs "out")
4166 "/share/teeworlds/data"
4167 "\"")))
4168
4169 ;; Bam expects all files to have a recent time stamp.
4170 (for-each (cut utime <> 1 1)
4171 (find-files "."))
4172
4173 ;; Do not use bundled libraries.
4174 (substitute* "bam.lua"
4175 (("local json = Compile.+$")
4176 "local json = nil
4177 settings.link.libs:Add(\"jsonparser\")")
4178 (("local png = Compile.+$")
4179 "local png = nil
4180 settings.link.libs:Add(\"pnglite\")")
4181 (("local wavpack = Compile.+$")
4182 "local wavpack = nil
4183 settings.link.libs:Add(\"wavpack\")")
4184 (("if config\\.zlib\\.value == 1")
4185 "if config.zlib.value"))
4186 (substitute* "src/engine/client/graphics_threaded.cpp"
4187 (("engine/external/pnglite/pnglite\\.h")
4188 "pnglite.h"))
4189 (substitute* "src/engine/client/sound.cpp"
4190 (("engine/external/wavpack/wavpack\\.h")
4191 "wavpack/wavpack.h"))
4192 (for-each use-latest-json-parser
4193 '("src/game/client/components/countryflags.cpp"
4194 "src/game/client/components/menus_settings.cpp"
4195 "src/game/client/components/skins.cpp"
4196 "src/game/client/localization.cpp"
4197 "src/game/editor/auto_map.h"
4198 "src/game/editor/editor.cpp"))
4199 #t))
4200 (replace 'build
4201 (lambda _
4202 (invoke "bam" "-a" "-v" "conf=release")))
4203 (replace 'install
4204 (lambda* (#:key outputs #:allow-other-keys)
4205 (let* ((arch ,(system->linux-architecture
4206 (or (%current-target-system)
4207 (%current-system))))
4208 (build (string-append "build/" arch "/release/"))
4209 (data-built (string-append build "data/"))
4210 (out (assoc-ref outputs "out"))
4211 (bin (string-append out "/bin/"))
4212 (data (string-append out "/share/teeworlds/data/")))
4213 (for-each (cut install-file <> bin)
4214 (map (cut string-append build <>)
4215 '("teeworlds" "teeworlds_srv")))
4216 (copy-recursively data-built data)
4217 #t))))))
4218 (inputs
4219 `(("freetype" ,freetype)
4220 ("glu" ,glu)
4221 ("json-parser" ,json-parser)
4222 ("mesa" ,mesa)
4223 ("pnglite" ,pnglite)
4224 ("sdl2" ,sdl2)
4225 ("sdl2-image" ,sdl2-image)
4226 ("sdl2-mixer" ,sdl2-mixer)
4227 ("wavpack" ,wavpack)
4228 ("zlib" ,zlib)))
4229 (native-inputs
4230 `(("bam" ,bam)
4231 ("python" ,python-wrapper)
4232 ("pkg-config" ,pkg-config)))
4233 (home-page "https://www.teeworlds.com")
4234 (synopsis "2D retro multiplayer shooter game")
4235 (description "Teeworlds is an online multiplayer game. Battle with up to
4236 16 players in a variety of game modes, including Team Deathmatch and Capture
4237 The Flag. You can even design your own maps!")
4238 (license license:bsd-3)))
4239
4240 (define-public enigma
4241 (package
4242 (name "enigma")
4243 (version "1.21")
4244 (source (origin
4245 (method url-fetch)
4246 (uri (string-append "mirror://sourceforge/enigma-game/"
4247 "Release%20" version "/enigma-"
4248 version ".tar.gz"))
4249 (sha256
4250 (base32
4251 "00ffh9pypj1948pg3q9sjp1nmiabh52p5c8wpg9n1dcfgl3cywnq"))))
4252 (build-system gnu-build-system)
4253 (arguments
4254 `(#:configure-flags
4255 (list "--with-system-enet")
4256 #:phases
4257 (modify-phases %standard-phases
4258 (add-after 'unpack 'find-sdl
4259 (lambda _
4260 (substitute* "configure"
4261 (("SDL_ttf.h") "SDL/SDL_ttf.h"))
4262 (substitute* '("tools/ttf2bmf.cc"
4263 "lib-src/enigma-core/ecl_font.cc"
4264 "lib-src/enigma-core/ecl_video.cc"
4265 "lib-src/enigma-core/ecl_buffer.hh"
4266 "src/SoundEngine.cc"
4267 "src/SoundEngine.hh"
4268 "src/MusicManager.cc"
4269 "src/MusicManager.hh"
4270 "src/d_models.cc"
4271 "src/main.cc"
4272 "src/network.cc")
4273 (("#include \"SDL_(image|ttf|mixer|types|syswm|mutex).h\"" line header)
4274 (string-append "#include \"SDL/SDL_" header ".h\"")))
4275 (substitute* "src/main.cc"
4276 (("#include <SDL_(image|ttf|mixer).h>" line header)
4277 (string-append "#include \"SDL/SDL_" header ".h\"")))
4278 #t)))))
4279 (inputs
4280 `(("xerces-c" ,xerces-c)
4281 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
4282 ("curl" ,curl)
4283 ("enet" ,enet)))
4284 (native-inputs
4285 `(("pkg-config" ,pkg-config)
4286 ("imagemagick" ,imagemagick)))
4287 (home-page "https://www.nongnu.org/enigma")
4288 (synopsis "Puzzle game with a dexterity component")
4289 (description "Enigma is a puzzle game with 550 unique levels. The object
4290 of the game is to find and uncover pairs of identically colored ‘Oxyd’ stones.
4291 Simple? Yes. Easy? Certainly not! Hidden traps, vast mazes, laser beams,
4292 and most of all, countless hairy puzzles usually block your direct way to the
4293 Oxyd stones. Enigma’s game objects (and there are hundreds of them, lest you
4294 get bored) interact in many unexpected ways, and since many of them follow the
4295 laws of physics (Enigma’s special laws of physics, that is), controlling them
4296 with the mouse isn’t always trivial.")
4297 (license license:gpl2+)))
4298
4299 (define-public chroma
4300 (package
4301 (name "chroma")
4302 (version "1.16")
4303 (source (origin
4304 (method url-fetch)
4305 (uri (string-append "http://level7.org.uk/chroma/download/chroma-"
4306 version ".tar.bz2"))
4307 (sha256
4308 (base32
4309 "1gfaw1kf7cxf5ibr61n6dxjihi49gmysn4cvawx1pqvy52ljpk0p"))))
4310 (build-system gnu-build-system)
4311 (arguments
4312 `(#:tests? #f)) ; no tests included
4313 (inputs
4314 `(("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
4315 ("freetype" ,freetype)
4316 ("ncurses" ,ncurses)
4317 ("fontconfig" ,fontconfig)
4318 ("libxft" ,libxft)))
4319 (native-inputs
4320 `(("pkg-config" ,pkg-config)))
4321 (home-page "http://level7.org.uk/chroma/")
4322 (synopsis "Abstract puzzle game")
4323 (description "Chroma is an abstract puzzle game. A variety of colourful
4324 shapes are arranged in a series of increasingly complex patterns, forming
4325 fiendish traps that must be disarmed and mysterious puzzles that must be
4326 manipulated in order to give up their subtle secrets. Initially so
4327 straightforward that anyone can pick it up and begin to play, yet gradually
4328 becoming difficult enough to tax even the brightest of minds.")
4329 (license license:gpl2+)))
4330
4331 (define-public fillets-ng
4332 (package
4333 (name "fillets-ng")
4334 (version "1.0.1")
4335 (source (origin
4336 (method url-fetch)
4337 (uri (string-append "mirror://sourceforge/fillets/"
4338 "Fish%20Fillets%20-%20Next%20Generation/"
4339 version "/fillets-ng-" version ".tar.gz"))
4340 (sha256
4341 (base32
4342 "1nljp75aqqb35qq3x7abhs2kp69vjcj0h1vxcpdyn2yn2nalv6ij"))))
4343 (build-system gnu-build-system)
4344 (arguments
4345 `(#:configure-flags
4346 (list (string-append "--with-lua="
4347 (assoc-ref %build-inputs "lua")))
4348 #:make-flags
4349 (list (string-append "CFLAGS=-I"
4350 (assoc-ref %build-inputs "sdl-union")
4351 "/include/SDL")
4352 (string-append "CXXFLAGS=-I"
4353 (assoc-ref %build-inputs "sdl-union")
4354 "/include/SDL"))
4355 #:phases
4356 (modify-phases %standard-phases
4357 ;; Lua 5.1 does not provide it.
4358 (add-after 'unpack 'do-not-link-with-lualib
4359 (lambda _
4360 (substitute* "configure"
4361 (("-llualib") ""))
4362 #t))
4363 (add-after 'install 'install-data
4364 (lambda* (#:key inputs outputs #:allow-other-keys)
4365 (let ((data (string-append (assoc-ref outputs "out")
4366 "/share/games/fillets-ng")))
4367 (mkdir-p data)
4368 (invoke "tar" "-xvf"
4369 (assoc-ref inputs "fillets-ng-data")
4370 "--strip-components=1"
4371 "-C" data)))))))
4372 (inputs
4373 `(("sdl-union" ,(sdl-union (list sdl
4374 sdl-mixer
4375 sdl-image
4376 sdl-ttf)))
4377 ("fribidi" ,fribidi)
4378 ("libx11" ,libx11)
4379 ("lua" ,lua-5.1)))
4380 (native-inputs
4381 `(("pkg-config" ,pkg-config)
4382 ("fillets-ng-data"
4383 ,(origin
4384 (method url-fetch)
4385 (uri (string-append "mirror://sourceforge/fillets/"
4386 "Fish%20Fillets%20-%20Next%20Generation/"
4387 version "/fillets-ng-data-" version ".tar.gz"))
4388 (sha256
4389 (base32
4390 "169p0yqh2gxvhdilvjc2ld8aap7lv2nhkhkg4i1hlmgc6pxpkjgh"))))))
4391 (home-page "http://fillets.sourceforge.net/")
4392 (synopsis "Puzzle game")
4393 (description "Fish Fillets NG is strictly a puzzle game. The goal in
4394 every of the seventy levels is always the same: find a safe way out. The fish
4395 utter witty remarks about their surroundings, the various inhabitants of their
4396 underwater realm quarrel among themselves or comment on the efforts of your
4397 fish. The whole game is accompanied by quiet, comforting music.")
4398 (license license:gpl2+)))
4399
4400 (define-public crawl
4401 (package
4402 (name "crawl")
4403 (version "0.22.1")
4404 (source
4405 (origin
4406 (method url-fetch)
4407 (uri (list
4408 ;; Older releases get moved into a versioned directory
4409 (string-append "http://crawl.develz.org/release/"
4410 (version-major+minor version) "/stone_soup-"
4411 version "-nodeps.tar.xz")
4412 ;; Only the latest release is in this directory
4413 (string-append "http://crawl.develz.org/release/stone_soup-"
4414 version "-nodeps.tar.xz")))
4415 (sha256
4416 (base32
4417 "1qc90wwbxvjzqq66n8kfr0a2ny7sfvv2n84si67jiv2887d0ws6k"))
4418 (patches (search-patches "crawl-upgrade-saves.patch"))))
4419 (build-system gnu-build-system)
4420 (inputs
4421 `(("lua51" ,lua-5.1)
4422 ("ncurses" ,ncurses)
4423 ("sqlite" ,sqlite)
4424 ("zlib" ,zlib)))
4425 (native-inputs
4426 `(("bison" ,bison)
4427 ("flex" ,flex)
4428 ("perl" ,perl)
4429 ("pkg-config" ,pkg-config)))
4430 (arguments
4431 '(#:make-flags
4432 (let* ((sqlite (assoc-ref %build-inputs "sqlite"))
4433 (out (assoc-ref %outputs "out")))
4434 (list (string-append "SQLITE_INCLUDE_DIR=" sqlite "/include")
4435 (string-append "prefix=" out)
4436 "SAVEDIR=~/.crawl"
4437 ;; don't build any bundled dependencies
4438 "BUILD_LUA="
4439 "BUILD_SQLITE="
4440 "BUILD_ZLIB="
4441 "-Csource"))
4442 #:phases
4443 (modify-phases %standard-phases
4444 (delete 'configure)
4445 (delete 'check)
4446 ;; Test cases require the source to be rebuild with the -DDEBUG define.
4447 ;; Do 'check before 'build to avoid a 3rd build on make install.
4448 (add-before 'build 'check
4449 (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
4450 (setenv "HOME" (getcwd))
4451 ;; Fake a terminal for the test cases.
4452 (setenv "TERM" "xterm-256color")
4453 (apply invoke "make" "debug" "test"
4454 (format #f "-j~d" (parallel-job-count))
4455 ;; Force command line build for test cases.
4456 (append make-flags '("GAME=crawl" "TILES="))))))))
4457 (synopsis "Roguelike dungeon crawler game")
4458 (description "Dungeon Crawl Stone Soup is a roguelike adventure through
4459 dungeons filled with dangerous monsters in a quest to find the mystifyingly
4460 fabulous Orb of Zot.")
4461 (home-page "https://crawl.develz.org")
4462 (license (list license:gpl2+
4463 license:bsd-2
4464 license:bsd-3
4465 license:cc0
4466 license:expat
4467 license:zlib
4468 license:asl2.0))))
4469
4470 ;; The linter here claims that patch file names should start with the package
4471 ;; name. But, in this case, the patches are inherited from crawl with the
4472 ;; "crawl-" prefix instead of "crawl-tiles-".
4473 (define-public crawl-tiles
4474 (package
4475 (inherit crawl)
4476 (name "crawl-tiles")
4477 (arguments
4478 (substitute-keyword-arguments
4479 (package-arguments crawl)
4480 ((#:make-flags flags)
4481 `(let ((dejavu (assoc-ref %build-inputs "font-dejavu")))
4482 (cons*
4483 (string-append "PROPORTIONAL_FONT=" dejavu
4484 "/share/fonts/truetype/DejaVuSans.ttf")
4485 (string-append "MONOSPACED_FONT=" dejavu
4486 "/share/fonts/truetype/DejaVuSansMono.ttf")
4487 "TILES=y"
4488 ;; Rename the executable to allow parallel installation with crawl.
4489 "GAME=crawl-tiles"
4490 ,flags)))))
4491 (inputs
4492 `(,@(package-inputs crawl)
4493 ("font-dejavu" ,font-dejavu)
4494 ("freetype6" ,freetype)
4495 ("glu" ,glu)
4496 ("libpng" ,libpng)
4497 ("sdl2" ,sdl2)
4498 ("sdl2-image" ,sdl2-image)
4499 ("sdl2-mixer" ,sdl2-mixer)))
4500 (native-inputs
4501 `(,@(package-native-inputs crawl)
4502 ("pngcrush" ,pngcrush)
4503 ("which" ,which)))
4504 (synopsis "Graphical roguelike dungeon crawler game")))
4505
4506 (define-public lugaru
4507 (package
4508 (name "lugaru")
4509 (version "1.2")
4510 (source (origin
4511 (method url-fetch)
4512 (uri (string-append "https://bitbucket.org/osslugaru/lugaru/downloads/"
4513 name "-" version ".tar.xz"))
4514 (sha256
4515 (base32
4516 "15zgcshy22q51rm72zi6y9z7qlgnz5iw3gczjdlir4bqmxy4gspk"))))
4517 (build-system cmake-build-system)
4518 (arguments
4519 `(#:configure-flags
4520 (list "-DSYSTEM_INSTALL=ON")
4521 ;; no test target
4522 #:tests? #f))
4523 (native-inputs
4524 `(("pkg-config" ,pkg-config)))
4525 (inputs
4526 `(("sdl2" ,sdl2)
4527 ("glu" ,glu)
4528 ("libjpeg" ,libjpeg-turbo)
4529 ("libpng" ,libpng)
4530 ("openal" ,openal)
4531 ("vorbis" ,libvorbis)
4532 ("zlib" ,zlib)))
4533 (home-page "https://osslugaru.gitlab.io")
4534 (synopsis "Cross-platform third-person action game")
4535 (description "Lugaru is a third-person action game. The main character,
4536 Turner, is an anthropomorphic rebel bunny rabbit with impressive combat skills.
4537 In his quest to find those responsible for slaughtering his village, he uncovers
4538 a far-reaching conspiracy involving the corrupt leaders of the rabbit republic
4539 and the starving wolves from a nearby den. Turner takes it upon himself to
4540 fight against their plot and save his fellow rabbits from slavery.")
4541 (license (list license:gpl2+ ; code
4542 ;; assets:
4543 license:cc-by-sa3.0
4544 license:cc-by-sa4.0))))
4545
4546 (define-public 0ad-data
4547 (package
4548 (name "0ad-data")
4549 (version "0.0.23b-alpha")
4550 (source
4551 (origin
4552 (method url-fetch)
4553 (uri (string-append "https://releases.wildfiregames.com/0ad-"
4554 version "-unix-data.tar.xz"))
4555 (file-name (string-append name "-" version ".tar.xz"))
4556 (sha256
4557 (base32
4558 "04x7729hk6zw1xj3n4s4lvaviijsnbjf5rhzvjxlr5fygvg4l6z1"))
4559 (modules '((guix build utils)))
4560 (snippet
4561 #~(begin
4562 (for-each (lambda (name)
4563 (let* ((dir (string-append "binaries/data/mods/" name))
4564 (file (string-append dir "/" name ".zip"))
4565 (unzip #$(file-append unzip "/bin/unzip")))
4566 (invoke unzip "-d" dir file)
4567 (delete-file file)))
4568 '("mod" "public"))
4569 #t))))
4570 (build-system trivial-build-system)
4571 (native-inputs `(("tar" ,tar)
4572 ("xz" ,xz)))
4573 (arguments
4574 `(#:modules ((guix build utils))
4575 #:builder
4576 (begin
4577 (use-modules (guix build utils))
4578 (let ((out (assoc-ref %outputs "out"))
4579 (source (assoc-ref %build-inputs "source"))
4580 (tar (string-append (assoc-ref %build-inputs "tar") "/bin/tar"))
4581 (xz-path (string-append (assoc-ref %build-inputs "xz") "/bin")))
4582 (setenv "PATH" xz-path)
4583 (mkdir out)
4584 (invoke tar "xvf" source "-C" out "--strip=3")))))
4585 (synopsis "Data files for 0ad")
4586 (description "0ad-data provides the data files required by the game 0ad.")
4587 (home-page "https://play0ad.com")
4588 (license (list (license:fsdg-compatible
4589 "http://tavmjong.free.fr/FONTS/ArevCopyright.txt"
4590 (license:license-comment
4591 (package-license font-bitstream-vera)))
4592 (package-license font-bitstream-vera)
4593 license:cc-by-sa3.0
4594 license:expat
4595 license:gfl1.0
4596 license:gpl2+
4597 license:gpl3+))))
4598
4599 (define-public 0ad
4600 (package
4601 (name "0ad")
4602 (version "0.0.23b-alpha")
4603 (source
4604 (origin
4605 (method url-fetch)
4606 (uri (string-append "https://releases.wildfiregames.com/0ad-"
4607 version "-unix-build.tar.xz"))
4608 (file-name (string-append name "-" version ".tar.xz"))
4609 (sha256
4610 (base32
4611 "0draa53xg69i5qhqym85658m45xhwkbiimaldj4sr3703rjgggq1"))))
4612 ;; A snippet here would cause a build failure because of timestamps
4613 ;; reset. See https://bugs.gnu.org/26734.
4614 (inputs
4615 `(("0ad-data" ,0ad-data)
4616 ("curl" ,curl)
4617 ("enet" ,enet)
4618 ("gloox" ,gloox)
4619 ("icu4c" ,icu4c)
4620 ("libpng" ,libpng)
4621 ("libsodium" ,libsodium)
4622 ("libvorbis" ,libvorbis)
4623 ("libxcursor" ,libxcursor)
4624 ("libxml2" ,libxml2)
4625 ("miniupnpc" ,miniupnpc)
4626 ("mozjs-38" ,mozjs-38)
4627 ("openal" ,openal)
4628 ("sdl2" ,sdl2)
4629 ("wxwidgets" ,wxwidgets)
4630 ("zlib" ,zlib)))
4631 (native-inputs
4632 `(("boost" ,boost)
4633 ("cmake" ,cmake)
4634 ("mesa" ,mesa)
4635 ("pkg-config" ,pkg-config)
4636 ("python-2" ,python-2)))
4637 (build-system gnu-build-system)
4638 (arguments
4639 `(#:make-flags '("config=release" "verbose=1" "-C" "build/workspaces/gcc")
4640 #:phases
4641 (modify-phases %standard-phases
4642 (add-after 'unpack 'delete-bundles
4643 (lambda _
4644 (delete-file-recursively "libraries/source/spidermonkey")
4645 #t))
4646 (add-after 'unpack 'fix-x11-includes
4647 (lambda _
4648 (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
4649 (("<Xlib.h>") "<X11/Xlib.h>"))
4650 (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
4651 (("<Xatom.h>") "<X11/Xatom.h>"))
4652 (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
4653 (("<Xcursor/Xcursor.h>") "<X11/Xcursor/Xcursor.h>"))
4654 #t))
4655 (replace 'configure
4656 (lambda* (#:key inputs outputs #:allow-other-keys)
4657 (let* ((jobs (number->string (parallel-job-count)))
4658 (out (assoc-ref outputs "out"))
4659 (lib (string-append out "/lib"))
4660 (data (string-append out "/share/0ad")))
4661 (setenv "JOBS" (string-append "-j" jobs))
4662 (setenv "CC" "gcc")
4663 (with-directory-excursion "build/workspaces"
4664 (zero? (system* "./update-workspaces.sh"
4665 (string-append "--libdir=" lib)
4666 (string-append "--datadir=" data)
4667 ;; TODO: "--with-system-nvtt"
4668 "--with-system-mozjs38"))))))
4669 (delete 'check)
4670 (replace 'install
4671 (lambda* (#:key inputs outputs #:allow-other-keys)
4672 (chdir "binaries")
4673 (let* ((out (assoc-ref outputs "out"))
4674 (bin (string-append out "/bin"))
4675 (lib (string-append out "/lib"))
4676 (data (string-append out "/share/0ad"))
4677 (applications (string-append out "/share/applications"))
4678 (pixmaps (string-append out "/share/pixmaps"))
4679 (0ad-data (assoc-ref inputs "0ad-data")))
4680 ;; data
4681 (copy-recursively "data" data)
4682 (for-each (lambda (file)
4683 (symlink (string-append 0ad-data "/" file)
4684 (string-append data "/" file)))
4685 '("config" "mods/mod" "mods/public" "tools"))
4686 ;; libraries
4687 (for-each (lambda (file)
4688 (install-file file lib))
4689 (find-files "system" "\\.so$"))
4690 ;; binaries
4691 (install-file "system/pyrogenesis" bin)
4692 (with-directory-excursion bin
4693 (symlink "pyrogenesis" "0ad"))
4694 ;; resources
4695 (with-directory-excursion "../build/resources"
4696 (install-file "0ad.desktop" applications)
4697 (install-file "0ad.png" pixmaps))
4698 #t)))
4699 (add-after 'install 'check
4700 (lambda _
4701 (with-directory-excursion "system"
4702 (zero? (system* "./test"))))))))
4703 (home-page "https://play0ad.com")
4704 (synopsis "3D real-time strategy game of ancient warfare")
4705 (description "0 A.D. is a real-time strategy (RTS) game of ancient
4706 warfare. It's a historically-based war/economy game that allows players to
4707 relive or rewrite the history of twelve ancient civilizations, each depicted
4708 at their peak of economic growth and military prowess.
4709
4710 0ad needs a window manager that supports 'Extended Window Manager Hints'.")
4711 (license (list license:bsd-2
4712 license:bsd-3
4713 license:expat
4714 license:gpl2+
4715 license:ibmpl1.0
4716 license:isc
4717 license:lgpl2.1
4718 license:lgpl3
4719 license:mpl2.0
4720 license:zlib))))
4721
4722 ;; There have been no official releases.
4723 (define-public open-adventure
4724 (let* ((commit "d43854f0f6bb8e9eea7fbce80348150e7e7fc34d")
4725 (revision "2"))
4726 (package
4727 (name "open-adventure")
4728 (version (string-append "2.5-" revision "." (string-take commit 7)))
4729 (source (origin
4730 (method git-fetch)
4731 (uri (git-reference
4732 (url "https://gitlab.com/esr/open-adventure")
4733 (commit commit)))
4734 (file-name (string-append name "-" version "-checkout"))
4735 (sha256
4736 (base32
4737 "08bwrvf4axb1rsfd6ia1fddsky9pc1p350vjskhaakg2czc6dsk0"))))
4738 (build-system gnu-build-system)
4739 (arguments
4740 `(#:make-flags (list "CC=gcc")
4741 #:parallel-build? #f ; not supported
4742 #:phases
4743 (modify-phases %standard-phases
4744 (replace 'configure
4745 (lambda* (#:key inputs outputs #:allow-other-keys)
4746 ;; Linenoise is meant to be included, so we have to
4747 ;; copy it into the working directory.
4748 (let* ((linenoise (assoc-ref inputs "linenoise"))
4749 (noisepath (string-append linenoise "/include/linenoise"))
4750 (out (assoc-ref outputs "out")))
4751 (copy-recursively noisepath "linenoise"))
4752 #t))
4753 (add-before 'build 'use-echo
4754 (lambda _
4755 (substitute* "tests/Makefile"
4756 (("/bin/echo") (which "echo")))
4757 #t))
4758 (add-after 'build 'build-manpage
4759 (lambda _
4760 ;; This target is missing a dependency
4761 (substitute* "Makefile"
4762 ((".adoc.6:" line)
4763 (string-append line " advent.adoc")))
4764 (zero? (system* "make" ".adoc.6"))))
4765 ;; There is no install target
4766 (replace 'install
4767 (lambda* (#:key outputs #:allow-other-keys)
4768 (let* ((out (assoc-ref outputs "out"))
4769 (bin (string-append out "/bin"))
4770 (man (string-append out "/share/man/man6")))
4771 (install-file "advent" bin)
4772 (install-file "advent.6" man))
4773 #t)))))
4774 (native-inputs
4775 `(("asciidoc" ,asciidoc)
4776 ("linenoise" ,linenoise)
4777 ("python" ,python)
4778 ("python-pyyaml" ,python-pyyaml)))
4779 (home-page "https://gitlab.com/esr/open-adventure")
4780 (synopsis "Colossal Cave Adventure")
4781 (description "The original Colossal Cave Adventure from 1976 was the
4782 origin of all text adventures, dungeon-crawl (computer) games, and
4783 computer-hosted roleplaying games. This is the last version released by
4784 Crowther & Woods, its original authors, in 1995. It has been known as
4785 \"adventure 2.5\" and \"430-point adventure\".")
4786 (license license:bsd-2))))
4787
4788 (define-public tome4
4789 (package
4790 (name "tome4")
4791 (version "1.5.10")
4792 (synopsis "Single-player, RPG roguelike game set in the world of Eyal")
4793 (source
4794 (origin
4795 (method url-fetch)
4796 (uri (string-append "https://te4.org/dl/t-engine/t-engine4-src-"
4797 version ".tar.bz2"))
4798 (sha256
4799 (base32
4800 "0mc5dgh2x9nbili7gy6srjhb23ckalf08wqq2amyjr5rq392jvd7"))
4801 (modules '((guix build utils)))
4802 (snippet
4803 '(begin
4804 (substitute* '("src/music.h" "src/tSDL.h")
4805 (("#elif defined(__FreeBSD__)" line)
4806 (string-append
4807 line " || defined(__GNUC__)")))
4808 #t))))
4809 (build-system gnu-build-system)
4810 (native-inputs
4811 `(("unzip" ,unzip)))
4812 (inputs
4813 `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
4814 ("glu" ,glu)
4815 ("premake4" ,premake4)
4816 ("openal" ,openal)
4817 ("vorbis" ,libvorbis)
4818 ("luajit" ,luajit)))
4819 (arguments
4820 `(#:make-flags '("CC=gcc" "config=release")
4821 #:phases (modify-phases %standard-phases
4822 (delete 'bootstrap)
4823 (replace 'configure
4824 (lambda _
4825 (invoke "premake4" "gmake")
4826 #t))
4827 (add-after 'set-paths 'set-sdl-paths
4828 (lambda* (#:key inputs #:allow-other-keys)
4829 (setenv "CPATH"
4830 (string-append (assoc-ref inputs "sdl-union")
4831 "/include/SDL2"))
4832 #t))
4833 (delete 'check)
4834 ;; premake doesn't provide install target
4835 (replace 'install
4836 (lambda* (#:key inputs outputs #:allow-other-keys)
4837 (let* ((out (assoc-ref outputs "out"))
4838 (usr (string-append out "/usr"))
4839 (bin (string-append out "/bin"))
4840 (licenses (string-append out "/share/licenses"))
4841 (documents (string-append out "/share/doc"))
4842 (pixmaps (string-append out "/share/pixmaps"))
4843 (icon "te4-icon.png")
4844 (data (string-append out "/share/" ,name))
4845 (applications (string-append
4846 out "/share/applications"))
4847 (unzip (string-append
4848 (assoc-ref inputs "unzip") "/bin/unzip"))
4849 (wrapper (string-append bin "/" ,name)))
4850 ;; icon
4851 (mkdir-p pixmaps)
4852 (system* unzip "-j"
4853 (string-append
4854 "game/engines/te4-" ,version ".teae")
4855 (string-append
4856 "data/gfx/" icon) "-d" pixmaps)
4857 ;; game executable
4858 (install-file "t-engine" data)
4859 (mkdir-p bin)
4860 (with-output-to-file wrapper
4861 (lambda ()
4862 (display
4863 (string-append
4864 "#!/bin/sh\n"
4865 ;; No bootstrap code found,
4866 ;; defaulting to working directory
4867 ;; for engine code!
4868 "cd " data "\n"
4869 "exec -a tome4 ./t-engine \"$@\"\n"))))
4870 (chmod wrapper #o555)
4871 ;; licenses
4872 (for-each (lambda (file)
4873 (install-file file licenses))
4874 '("COPYING" "COPYING-MEDIA"))
4875 ;; documents
4876 (for-each (lambda (file)
4877 (install-file file documents))
4878 '("CONTRIBUTING" "CREDITS"))
4879 ;; data
4880 (copy-recursively "bootstrap" (string-append
4881 data "/bootstrap"))
4882 (copy-recursively "game" (string-append data "/game"))
4883 ;; launcher
4884 (mkdir-p applications)
4885 (with-output-to-file (string-append applications "/"
4886 ,name ".desktop")
4887 (lambda ()
4888 (display
4889 (string-append
4890 "[Desktop Entry]
4891 Name=ToME4
4892 Comment=" ,synopsis "\n"
4893 "Exec=" ,name "\n"
4894 "Icon=" icon "\n"
4895 "Terminal=false
4896 Type=Application
4897 Categories=Game;RolePlaying;\n")))))
4898 #t)))))
4899 (home-page "https://te4.org")
4900 (description "Tales of Maj’Eyal (ToME) RPG, featuring tactical turn-based
4901 combat and advanced character building. Play as one of many unique races and
4902 classes in the lore-filled world of Eyal, exploring random dungeons, facing
4903 challenging battles, and developing characters with your own tailored mix of
4904 abilities and powers. With a modern graphical and customisable interface,
4905 intuitive mouse control, streamlined mechanics and deep, challenging combat,
4906 Tales of Maj’Eyal offers engaging roguelike gameplay for the 21st century.")
4907 (license license:gpl3+)))
4908
4909 (define-public quakespasm
4910 (package
4911 (name "quakespasm")
4912 (version "0.93.1")
4913 (source
4914 (origin
4915 (method url-fetch)
4916 (uri (string-append "mirror://sourceforge/quakespasm/Source/quakespasm-"
4917 version ".tgz"))
4918 (sha256
4919 (base32
4920 "1bimv18f6rzhyjz78yvw2vqr5n0kdqbcqmq7cb3m951xgsxfcgpd"))))
4921 (arguments
4922 `(#:tests? #f
4923 #:make-flags '("CC=gcc"
4924 "MP3LIB=mpg123"
4925 "USE_CODEC_FLAC=1"
4926 "USE_CODEC_MIKMOD=1"
4927 "USE_SDL2=1"
4928 "-CQuake")
4929 #:phases (modify-phases %standard-phases
4930 (delete 'configure)
4931 (add-after 'unpack 'fix-makefile-paths
4932 (lambda* (#:key outputs #:allow-other-keys)
4933 (let ((out (assoc-ref outputs "out")))
4934 (mkdir-p (string-append out "/bin"))
4935 (substitute* "Quake/Makefile"
4936 (("/usr/local/games")
4937 (string-append out "/bin")))
4938 #t))))))
4939 (build-system gnu-build-system)
4940 (inputs `(("libmikmod" ,libmikmod)
4941 ("libvorbis" ,libvorbis)
4942 ("flac" ,flac)
4943 ("mesa" ,mesa)
4944 ("mpg123" ,mpg123)
4945 ("sdl2" ,sdl2)))
4946 (synopsis "First person shooter engine for Quake 1")
4947 (description "Quakespasm is a modern engine for id software's Quake 1.
4948 It includes support for 64 bit CPUs, custom music playback, a new sound driver,
4949 some graphical niceities, and numerous bug-fixes and other improvements.")
4950 (home-page "http://quakespasm.sourceforge.net/")
4951 (license license:gpl2+)))
4952
4953 (define-public vkquake
4954 (package
4955 (inherit quakespasm)
4956 (name "vkquake")
4957 (version "1.01.0")
4958 (source
4959 (origin
4960 (method git-fetch)
4961 (uri (git-reference
4962 (url "https://github.com/Novum/vkQuake.git")
4963 (commit version)))
4964 (file-name (git-file-name name version))
4965 (sha256
4966 (base32 "1iwin8j5kbyrknbkhjgpy8nmm7pxqzr0daa9gn7p38qhg2mh0a39"))))
4967 (arguments
4968 `(#:make-flags
4969 (let ((vulkanlib (string-append (assoc-ref %build-inputs
4970 "vulkan-loader") "/lib")))
4971 (list "CC=gcc"
4972 "MP3LIB=mpg123"
4973 "USE_CODEC_FLAC=1"
4974 "USE_CODEC_MIKMOD=1"
4975 "USE_SDL2=1"
4976 (string-append "LDFLAGS=-Wl,-rpath=" vulkanlib)
4977 "-CQuake"))
4978 #:phases (modify-phases %standard-phases
4979 (delete 'configure)
4980 (add-after 'unpack 'fix-makefile-paths
4981 (lambda* (#:key outputs #:allow-other-keys)
4982 (let ((vulkan (assoc-ref %build-inputs
4983 "vulkan-loader"))
4984 (out (assoc-ref outputs "out")))
4985 (mkdir-p (string-append out "/bin"))
4986 (substitute* "Quake/Makefile" ((" /usr")
4987 (string-append " " out)))
4988 (substitute* "Quake/Makefile" (("/games")
4989 (string-append "/bin")))
4990 (substitute* "Quake/Makefile" (("..VULKAN_SDK.") vulkan))
4991 #t))))
4992 ,@(strip-keyword-arguments '(#:make-flags #:phases)
4993 (package-arguments quakespasm))))
4994 (inputs `(("vulkan-headers" ,vulkan-headers)
4995 ("vulkan-loader" ,vulkan-loader)
4996 ,@(package-inputs quakespasm)))
4997 (description "vkquake is a modern engine for id software's Quake 1.
4998 It includes support for 64 bit CPUs, custom music playback, a new sound driver,
4999 some graphical niceities, and numerous bug-fixes and other improvements.")
5000 (home-page "https://github.com/Novum/vkQuake")))
5001
5002 (define-public yamagi-quake2
5003 (package
5004 (name "yamagi-quake2")
5005 (version "7.10")
5006 (source
5007 (origin
5008 (method url-fetch)
5009 (uri (string-append "https://deponie.yamagi.org/quake2/quake2-"
5010 version ".tar.xz"))
5011 (sha256
5012 (base32
5013 "0psinbg25mysd58k99s1n34w31w5hj1vppb39gdjb0zqi6sl6cps"))))
5014 (build-system gnu-build-system)
5015 (arguments
5016 `(#:tests? #f
5017 #:make-flags
5018 (list "CC=gcc"
5019 ;; link openAL instead of using dlopen at runtime
5020 "DLOPEN_OPENAL=\"no\""
5021 ;; an optional directory where it will look for quake2 data files
5022 ;; in addition to the current working directory
5023 "WITH_SYSTEMWIDE=yes"
5024 "WITH_SYSTEMDIR=\"/opt/quake2\"")
5025 #:phases
5026 (modify-phases %standard-phases
5027 (delete 'configure)
5028 (replace 'install
5029 (lambda* (#:key outputs #:allow-other-keys)
5030 (let ((out (assoc-ref outputs "out")))
5031 (mkdir-p (string-append out "/lib"))
5032 (mkdir-p (string-append out "/bin"))
5033 ;; The yamagi-quake2 binary must be in the same directory
5034 ;; as it's engine libraries, but symlinking it to /bin is okay
5035 ;; https://github.com/yquake2/yquake2/blob/master/stuff/packaging.md
5036 (copy-recursively "release"
5037 (string-append out "/lib/yamagi-quake2"))
5038 (symlink (string-append out "/lib/yamagi-quake2/quake2")
5039 (string-append out "/bin/yamagi-quake2"))
5040 (symlink (string-append out "/lib/yamagi-quake2/q2ded")
5041 (string-append out "/bin/yamagi-q2ded"))))))))
5042 (inputs `(("sdl2" ,sdl2)
5043 ("mesa" ,mesa)
5044 ("libvorbis" ,libvorbis)
5045 ("zlib" ,zlib)
5046 ("openal" ,openal)))
5047 (native-inputs `(("pkg-config" ,pkg-config)))
5048 (synopsis "First person shooter engine based on quake2")
5049 (description "Yamagi Quake II is an enhanced client for id Software's Quake II.
5050 The main focus is an unchanged single player experience like back in 1997,
5051 thus the gameplay and the graphics are unaltered. However the user may use one
5052 of the unofficial retexturing packs. In comparison with the official client,
5053 over 1000 bugs were fixed and an extensive code audit done,
5054 making Yamagi Quake II one of the most solid Quake II implementations available.")
5055 (home-page "https://www.yamagi.org/quake2/")
5056 (license (list license:gpl2+ ; game and server
5057 (license:non-copyleft ; info-zip
5058 "file://LICENSE"
5059 "See Info-Zip section.")
5060 license:public-domain)))) ; stb
5061
5062 (define-public nudoku
5063 (package
5064 (name "nudoku")
5065 (version "1.0.0")
5066 (source (origin
5067 (method url-fetch)
5068 (uri (string-append "https://github.com/jubalh/nudoku/"
5069 "releases/download/" version
5070 "/nudoku-" version ".tar.xz"))
5071 (sha256
5072 (base32
5073 "0nr2j2z07nxk70s8xnmmpzccxicf7kn5mbwby2kg6aq8paarjm8k"))))
5074 (build-system gnu-build-system)
5075 (inputs `(("ncurses" ,ncurses)))
5076 (home-page "https://jubalh.github.io/nudoku/")
5077 (synopsis "Sudoku for your terminal")
5078 (description "Nudoku is a ncurses-based Sudoku game for your terminal.")
5079 (license license:gpl3+)))
5080
5081 (define-public the-butterfly-effect
5082 (package
5083 (name "the-butterfly-effect")
5084 (version "0.9.3.1")
5085 (source
5086 (origin
5087 (method url-fetch)
5088 (uri (string-append
5089 "https://github.com/the-butterfly-effect/tbe/archive/"
5090 "v" version ".tar.gz"))
5091 (file-name (string-append name "-" version ".tar.gz"))
5092 (sha256
5093 (base32
5094 "18qkp7fgdvyl3haqqa693mgyic7afsznsxgz98z9wn4csaqxsnby"))))
5095 (build-system gnu-build-system)
5096 (arguments
5097 `(#:phases
5098 (modify-phases %standard-phases
5099 (delete 'configure)
5100 ;; There is no "install" phase. By default, tbe is installed
5101 ;; in the build directory. Provide our own installation.
5102 (replace 'install
5103 (lambda* (#:key outputs #:allow-other-keys)
5104 (let* ((out (assoc-ref outputs "out"))
5105 (bin (string-append out "/bin"))
5106 (share (string-append out "/share")))
5107 (install-file "usr/games/tbe" bin)
5108 (mkdir-p share)
5109 (copy-recursively "usr/share" share)
5110 #t))))
5111 ;; Test suite requires a running Xorg server. Even when
5112 ;; provided, it fails with "D-Bus library appears to be
5113 ;; incorrectly set up; failed to read machine uuid: Failed to
5114 ;; open "/etc/machine-id": No such file or directory" along
5115 ;; with multiple "QPainter:: ... Painter not active" warnings.
5116 #:tests? #f))
5117 (inputs
5118 `(("qtbase" ,qtbase)
5119 ("qtsvg" ,qtsvg)))
5120 (native-inputs
5121 `(("cmake" ,cmake)
5122 ("gettext-minimal" ,gettext-minimal)
5123 ("qttools" ,qttools)))
5124 (synopsis "Realistic physics puzzle game")
5125 (description "The Butterfly Effect (tbe) is a game that uses
5126 realistic physics simulations to combine lots of simple mechanical
5127 elements to achieve a simple goal in the most complex way possible.")
5128 (home-page "http://the-butterfly-effect.org/")
5129 ;; Main license is GPL2-only. However, artwork is distributed
5130 ;; under various licenses, listed here.
5131 (license (list license:gpl2 license:public-domain license:expat
5132 license:cc-by-sa3.0 license:gpl3+ license:wtfpl2))))
5133
5134 (define-public pioneer
5135 (package
5136 (name "pioneer")
5137 (version "20180203")
5138 (source (origin
5139 (method git-fetch)
5140 (uri (git-reference
5141 (url "https://github.com/pioneerspacesim/pioneer.git")
5142 (commit version)))
5143 (file-name (git-file-name name version))
5144 (sha256
5145 (base32
5146 "0hp2mf36kj2v93hka8m8lxw2qhmnjc62wjlpw7c7ix0r8xa01i6h"))))
5147 (build-system gnu-build-system)
5148 (native-inputs
5149 `(("autoconf" ,autoconf)
5150 ("automake" ,automake)
5151 ("pkg-config" ,pkg-config)))
5152 (inputs
5153 `(("assimp" ,assimp)
5154 ("curl" ,curl)
5155 ("freetype" ,freetype)
5156 ("glu" ,glu)
5157 ("libpng" ,libpng)
5158 ("libsigc++" ,libsigc++)
5159 ("libvorbis" ,libvorbis)
5160 ("lua" ,lua-5.2) ;not compatible with 5.3
5161 ("mesa" ,mesa)
5162 ("sdl" ,(sdl-union (list sdl2 sdl2-image)))))
5163 (arguments
5164 `(#:tests? #f ;tests are broken
5165 #:configure-flags (list "--with-external-liblua"
5166 (string-append "PIONEER_DATA_DIR="
5167 %output "/share/games/pioneer"))
5168 #:phases (modify-phases %standard-phases
5169 (add-before 'bootstrap 'fix-lua-check
5170 (lambda _
5171 (substitute* "configure.ac"
5172 (("lua5.2")
5173 (string-append "lua-" ,(version-major+minor
5174 (package-version lua-5.2))))))))))
5175 (home-page "http://pioneerspacesim.net")
5176 (synopsis "Game of lonely space adventure")
5177 (description
5178 "Pioneer is a space adventure game set in our galaxy at the turn of the
5179 31st century. The game is open-ended, and you are free to eke out whatever
5180 kind of space-faring existence you can think of. Look for fame or fortune by
5181 exploring the millions of star systems. Turn to a life of crime as a pirate,
5182 smuggler or bounty hunter. Forge and break alliances with the various
5183 factions fighting for power, freedom or self-determination. The universe is
5184 whatever you make of it.")
5185 (license license:gpl3)))
5186
5187 (define-public badass
5188 (let ((commit "3c3cd669b4fc8f73a102e3702788f7b28dc47dbb")
5189 (revision "0"))
5190 (package
5191 (name "badass")
5192 (version (git-version "0.0" revision commit))
5193 (source (origin
5194 (method git-fetch)
5195 (uri (git-reference
5196 (url "https://github.com/umayr/badass.git")
5197 (commit commit)))
5198 (file-name (git-file-name name version))
5199 (sha256
5200 (base32
5201 "05c9vdcb5ym3z0n5ll3v39mw4yl9jcjnlydmn0yl89ai9pv71zb6"))))
5202 (build-system go-build-system)
5203 (arguments
5204 '(#:import-path "github.com/umayr/badass"))
5205 (synopsis "Hacking contribution graphs in git")
5206 (description
5207 "Badass generates false commits for a range of dates, essentially
5208 hacking the gamification of contribution graphs on platforms such as
5209 Github or Gitlab.")
5210 (home-page "https://github.com/umayr/badass")
5211 (license license:expat))))
5212
5213 (define-public colobot
5214 (package
5215 (name "colobot")
5216 (version "0.1.11.1-alpha")
5217 (source
5218 (origin
5219 (method url-fetch)
5220 (uri (string-append "https://github.com/colobot/colobot/archive/"
5221 "colobot-gold-" version ".tar.gz"))
5222 (sha256
5223 (base32
5224 "0h6f4icarramhjkxxbzz6siv3v11z5r8ghqisgr1rscw217vhmwf"))))
5225 (build-system cmake-build-system)
5226 (arguments
5227 `(#:tests? #f ;no test
5228 #:phases
5229 (modify-phases %standard-phases
5230 (add-after 'unpack 'unpack-data
5231 (lambda* (#:key inputs #:allow-other-keys)
5232 (let ((data (assoc-ref inputs "colobot-data")))
5233 (invoke "tar" "-xvf" data "-Cdata" "--strip-components=1")
5234 #t)))
5235 (add-after 'unpack-data 'install-music
5236 (lambda* (#:key inputs #:allow-other-keys)
5237 ;; Installation process tries to download music files using
5238 ;; "wget" if not already present. Since we are going to install
5239 ;; them, skip "wget" command check.
5240 (substitute* "data/music/CMakeLists.txt"
5241 (("find_program\\(WGET wget\\)") ""))
5242 ;; Effectively install music.
5243 (let ((data (assoc-ref inputs "colobot-music")))
5244 (invoke "tar" "-xvf" data "-Cdata/music")
5245 #t)))
5246 (add-after 'install 'fix-install-directory
5247 ;; Move binary from "games/" to "bin/".
5248 (lambda* (#:key outputs #:allow-other-keys)
5249 (let ((out (assoc-ref outputs "out")))
5250 (rename-file (string-append out "/games")
5251 (string-append out "/bin"))
5252 #t))))))
5253 (native-inputs
5254 `(("colobot-data"
5255 ,(origin
5256 (method url-fetch)
5257 (uri (string-append
5258 "https://github.com/colobot/colobot-data/archive/"
5259 "colobot-gold-" version ".tar.gz"))
5260 (sha256
5261 (base32
5262 "0riznycx2jbxmg4m9nn3mcpqws2c0s7cn2m9skz9zj1w39r5qpjy"))))
5263 ("colobot-music"
5264 ,(origin
5265 (method url-fetch)
5266 (uri (string-append "https://colobot.info/files/music/"
5267 "colobot-music_ogg_" version ".tar.gz"))
5268 (sha256
5269 (base32
5270 "1s86cd36rwkff329mb1ay1wi5qqyi35564ppgr3f4qqz9wj9vs2m"))))
5271 ("gettext" ,gettext-minimal)
5272 ("librsvg" ,librsvg)
5273 ("po4a" ,po4a)
5274 ("python" ,python-wrapper)))
5275 (inputs
5276 `(("boost" ,boost)
5277 ("glew" ,glew)
5278 ("libogg" ,libogg)
5279 ("libpng" ,libpng)
5280 ("libsndfile" ,libsndfile)
5281 ("libvorbis" ,libvorbis)
5282 ("openal" ,openal)
5283 ("physfs" ,physfs)
5284 ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-ttf)))))
5285 (synopsis "Educational programming strategy game")
5286 (description "Colobot: Gold Edition is a real-time strategy game, where
5287 you can program your units (bots) in a language called CBOT, which is similar
5288 to C++ and Java. Your mission is to find a new planet to live and survive.
5289 You can save humanity and get programming skills!")
5290 (home-page "https://colobot.info")
5291 (license license:gpl3+)))
5292
5293 (define-public gzdoom
5294 (package
5295 (name "gzdoom")
5296 (version "3.3.0")
5297 (source (origin
5298 (method url-fetch)
5299 (uri
5300 (string-append "https://zdoom.org/files/gzdoom/src/gzdoom-g"
5301 version ".zip"))
5302 (sha256
5303 (base32
5304 "09a4kx3ry8pc9r578m7yprwa7zsdqxjpn10lyc92r5g9sx4l1m1a"))
5305 (patches (search-patches "gzdoom-search-in-installed-share.patch"))
5306 (modules '((guix build utils)))
5307 (snippet
5308 '(begin
5309 (delete-file-recursively "bzip2")
5310 (delete-file-recursively "game-music-emu")
5311 (delete-file-recursively "jpeg-6b")
5312 (delete-file-recursively "zlib")
5313 #t))))
5314 (arguments
5315 '(#:tests? #f
5316 #:configure-flags
5317 (let ((out (assoc-ref %outputs "out")))
5318 (list
5319 (string-append
5320 "-DCMAKE_CXX_FLAGS:="
5321 "-DSHARE_DIR=\\\"" out "/share/\\\" "
5322 "-DGUIX_OUT_PK3=\\\"" out "/share/games/doom\\\"")
5323 ;; look for libraries at buildtime instead of
5324 ;; dynamically finding them at runtime
5325 "-DDYN_OPENAL=OFF"
5326 "-DDYN_FLUIDSYNTH=OFF"
5327 "-DDYN_GTK=OFF"
5328 "-DDYN_MPG123=OFF"
5329 "-DDYN_SNDFILE=OFF"))
5330 #:phases
5331 (modify-phases %standard-phases
5332 (add-before 'configure 'fix-referenced-paths
5333 (lambda* (#:key inputs outputs #:allow-other-keys)
5334 (let ((fluid-3 (assoc-ref inputs "fluid-3"))
5335 (timidity++ (assoc-ref inputs "timidity++"))
5336 (out (assoc-ref outputs "out")))
5337
5338 (substitute*
5339 "src/CMakeLists.txt"
5340 (("COMMAND /bin/sh")
5341 (string-append "COMMAND " (which "sh"))))
5342
5343 (substitute*
5344 "src/sound/mididevices/music_fluidsynth_mididevice.cpp"
5345 (("/usr/share/sounds/sf2/FluidR3_GM.sf2")
5346 (string-append fluid-3 "/share/soundfonts/FluidR3Mono_GM.sf3")))
5347
5348 (substitute*
5349 "src/sound/mididevices/music_timiditypp_mididevice.cpp"
5350 (("exename = \"timidity\"")
5351 (string-append "exename = \"" timidity++ "/bin/timidity\"")))
5352 #t))))))
5353 (build-system cmake-build-system)
5354 (inputs `(("bzip2" ,bzip2)
5355 ("fluid-3" ,fluid-3)
5356 ("fluidsynth" ,fluidsynth-1) ;XXX: try using 2.x when updating
5357 ("gtk+3" ,gtk+)
5358 ("libgme" ,libgme)
5359 ("libjpeg" ,libjpeg)
5360 ("libsndfile" ,libsndfile)
5361 ("mesa" ,mesa)
5362 ("mpg123" ,mpg123)
5363 ("openal" ,openal)
5364 ("sdl2" ,sdl2)
5365 ("timidity++" ,timidity++)
5366 ("zlib" ,zlib)))
5367 (native-inputs `(("pkg-config" ,pkg-config)
5368 ("unzip" ,unzip)))
5369 (synopsis "Modern Doom 2 source port")
5370 (description "GZdoom is a port of the Doom 2 game engine, with a modern
5371 renderer. It improves modding support with ZDoom's advanced mapping features
5372 and the new ZScript language. In addition to Doom, it supports Heretic, Hexen,
5373 Strife, Chex Quest, and fan-created games like Harmony, Hacx and Freedoom.")
5374 (home-page "https://zdoom.org/index")
5375 (license (list license:gpl3+ ; gzdoom game
5376 license:lgpl3+ ; gzdoom renderer
5377 license:expat ; gdtoa
5378 (license:non-copyleft ; modified dumb
5379 "file://dumb/licence.txt"
5380 "Dumb license, explicitly GPL compatible.")))))
5381
5382 (define-public fortune-mod
5383 (package
5384 (name "fortune-mod")
5385 (version "2.6.2")
5386 (source
5387 (origin
5388 (method git-fetch)
5389 (uri (git-reference
5390 (url "https://github.com/shlomif/fortune-mod")
5391 (commit (string-append name "-" version))))
5392 (file-name (git-file-name name version))
5393 (sha256
5394 (base32
5395 "11xff87s8ifw2dqs90n0rjq0psv4i7ykybygmibsqjj7id3xxw4c"))))
5396 (build-system cmake-build-system)
5397 (arguments
5398 `(#:test-target "check"
5399 #:phases
5400 (modify-phases %standard-phases
5401 (add-after 'unpack 'fix-build-env
5402 (lambda* (#:key inputs #:allow-other-keys)
5403 (use-modules (guix build utils))
5404 (let* ((cmake-rules (assoc-ref inputs "cmake-rules")))
5405 (copy-file cmake-rules
5406 (string-append "fortune-mod/cmake/"
5407 (strip-store-file-name cmake-rules)))
5408 (chdir "fortune-mod")
5409 ;; TODO: Valgrind tests fail for some reason.
5410 ;; Similar issue: https://github.com/shlomif/fortune-mod/issues/21 (?)
5411 (delete-file "tests/t/valgrind.t")
5412 #t)))
5413 (add-after 'install 'fix-install-directory
5414 (lambda* (#:key outputs #:allow-other-keys)
5415 ;; Move binary from "games/" to "bin/" and remove the latter. This
5416 ;; is easier than patching CMakeLists.txt since the tests hard-code
5417 ;; the location as well.
5418 (let* ((out (assoc-ref outputs "out"))
5419 (bin (string-append out "/bin"))
5420 (games (string-append out "/games")))
5421 (rename-file (string-append games "/fortune")
5422 (string-append bin "/fortune"))
5423 (rmdir games)
5424 #t))))))
5425 (inputs `(("recode" ,recode)))
5426 (native-inputs
5427 `(("perl" ,perl)
5428 ;; The following is only needed for tests.
5429 ("perl-file-find-object" ,perl-file-find-object)
5430 ("perl-test-differences" ,perl-test-differences)
5431 ("perl-class-xsaccessor" ,perl-class-xsaccessor)
5432 ("perl-io-all" ,perl-io-all)
5433 ("perl-test-runvalgrind" ,perl-test-runvalgrind)
5434 ("cmake-rules"
5435 ,(origin
5436 (method url-fetch)
5437 (uri (string-append "https://bitbucket.org/shlomif/shlomif-cmake-modules/"
5438 "raw/c505713d7a7cda608f97f01577e5868a711b883e/"
5439 "shlomif-cmake-modules/Shlomif_Common.cmake"))
5440 (sha256
5441 (base32 "0kx9s1qqhhzprp1w3b67xmsns0n0v506bg5hgrshxaxpy6lqiwb2"))))))
5442 (home-page "http://www.shlomifish.org/open-source/projects/fortune-mod/")
5443 (synopsis "The Fortune Cookie program from BSD games")
5444 (description "Fortune is a command-line utility which displays a random
5445 quotation from a collection of quotes.")
5446 (license license:bsd-4)))
5447
5448 (define xonotic-data
5449 (package
5450 (name "xonotic-data")
5451 (version "0.8.2")
5452 (source
5453 (origin
5454 (method url-fetch)
5455 (uri (string-append "http://dl.xonotic.org/xonotic-"
5456 version ".zip"))
5457 (file-name (string-append name "-" version ".zip"))
5458 (sha256
5459 (base32
5460 "1mcs6l4clvn7ibfq3q69k2p0z6ww75rxvnngamdq5ic6yhq74bx2"))))
5461 (build-system trivial-build-system)
5462 (native-inputs
5463 `(("unzip" ,unzip)))
5464 (arguments
5465 `(#:modules ((guix build utils))
5466 #:builder
5467 (begin
5468 (use-modules (guix build utils))
5469 (let* ((out (assoc-ref %outputs "out"))
5470 (xonotic (string-append out "/share/xonotic"))
5471 (source (assoc-ref %build-inputs "source"))
5472 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
5473 (copy-file source (string-append ,name "-" ,version ".zip"))
5474 (invoke unzip (string-append ,name "-" ,version ".zip"))
5475 (mkdir-p out)
5476 (mkdir-p xonotic)
5477 (chdir "Xonotic")
5478 (copy-recursively "data"
5479 (string-append xonotic "/data"))
5480 (copy-recursively "server"
5481 (string-append xonotic "/server"))
5482 (install-file "key_0.d0pk" xonotic)))))
5483 (home-page "http://xonotic.org")
5484 (synopsis "Data files for Xonotic")
5485 (description
5486 "Xonotic-data provides the data files required by the game Xonotic.")
5487 (license (list license:gpl2+
5488 (license:x11-style "file://server/rcon.pl")))))
5489
5490 (define-public xonotic
5491 (package
5492 (name "xonotic")
5493 (version "0.8.2")
5494 (source
5495 (origin
5496 (method url-fetch)
5497 (uri (string-append "http://dl.xonotic.org/xonotic-"
5498 version "-source.zip"))
5499 (file-name (string-append name "-" version ".zip"))
5500 (sha256
5501 (base32
5502 "0axxw04fyz6jlfqd0kp7hdrqa0li31sx1pbipf2j5qp9wvqicsay"))))
5503 (build-system gnu-build-system)
5504 (arguments
5505 `(#:configure-flags (list (string-append "--prefix="
5506 (assoc-ref %outputs "out"))
5507 "--disable-rijndael")
5508 #:phases
5509 (modify-phases %standard-phases
5510 (add-before 'configure 'make-darkplaces
5511 (lambda* (#:key outputs #:allow-other-keys)
5512 (let* ((out (assoc-ref outputs "out"))
5513 (sharedir (string-append out "/share/xonotic/")))
5514 (invoke "make" "-C" "source/darkplaces"
5515 (string-append "DP_FS_BASEDIR="
5516 sharedir)
5517 "DP_LINK_TO_LIBJPEG=1"
5518 "DP_SOUND_API=ALSA"
5519 "CC=gcc"
5520 "-f" "makefile"
5521 "cl-release")
5522 (invoke "make" "-C" "source/darkplaces"
5523 (string-append "DP_FS_BASEDIR="
5524 sharedir)
5525 "DP_LINK_TO_LIBJPEG=1"
5526 "DP_SOUND_API=ALSA"
5527 "CC=gcc"
5528 "-f" "makefile"
5529 "sdl-release")
5530 (invoke "make" "-C" "source/darkplaces"
5531 (string-append "DP_FS_BASEDIR="
5532 sharedir)
5533 "DP_LINK_TO_LIBJPEG=1"
5534 "DP_SOUND_API=ALSA"
5535 "CC=gcc"
5536 "-f" "makefile"
5537 "sv-release"))))
5538 (add-before 'configure 'bootstrap
5539 (lambda _
5540 (chdir "source/d0_blind_id")
5541 (invoke "sh" "autogen.sh")))
5542 (add-after 'build 'install-desktop-entry
5543 (lambda* (#:key outputs #:allow-other-keys)
5544 ;; Add .desktop files for the 2 variants and the symlink
5545 (let* ((output (assoc-ref outputs "out"))
5546 (apps (string-append output "/share/applications")))
5547 (mkdir-p apps)
5548 (with-output-to-file
5549 (string-append apps "/xonotic-glx.desktop")
5550 (lambda _
5551 (format #t
5552 "[Desktop Entry]~@
5553 Name=xonotic-glx~@
5554 Comment=Xonotic glx~@
5555 Exec=~a/bin/xonotic-glx~@
5556 TryExec=~@*~a/bin/xonotic-glx~@
5557 Icon=xonotic~@
5558 Categories=Game~@
5559 Type=Application~%"
5560 output)))
5561 (with-output-to-file
5562 (string-append apps "/xonotic-sdl.desktop")
5563 (lambda _
5564 (format #t
5565 "[Desktop Entry]~@
5566 Name=xonotic-sdl~@
5567 Comment=Xonotic sdl~@
5568 Exec=~a/bin/xonotic-sdl~@
5569 TryExec=~@*~a/bin/xonotic-sdl~@
5570 Icon=xonotic~@
5571 Categories=Game~@
5572 Type=Application~%"
5573 output)))
5574 (with-output-to-file
5575 (string-append apps "/xonotic.desktop")
5576 (lambda _
5577 (format #t
5578 "[Desktop Entry]~@
5579 Name=xonotic~@
5580 Comment=Xonotic~@
5581 Exec=~a/bin/xonotic-glx~@
5582 TryExec=~@*~a/bin/xonotic~@
5583 Icon=xonotic~@
5584 Categories=Game~@
5585 Type=Application~%"
5586 output)))
5587 #t)))
5588 (add-after 'install-desktop-entry 'install-icons
5589 (lambda* (#:key outputs #:allow-other-keys)
5590 (let ((out (assoc-ref outputs "out")))
5591 (with-directory-excursion "../../misc/logos/icons_png/"
5592 (for-each
5593 (lambda (file)
5594 (let* ((size (string-filter char-numeric? file))
5595 (icons (string-append out "/share/icons/hicolor/"
5596 size "x" size "/apps")))
5597 (mkdir-p icons)
5598 (copy-file file (string-append icons "/xonotic.png"))))
5599 '("xonotic_16.png" "xonotic_22.png" "xonotic_24.png"
5600 "xonotic_32.png" "xonotic_48.png" "xonotic_64.png"
5601 "xonotic_128.png" "xonotic_256.png" "xonotic_512.png"))))))
5602 (add-after 'install-icons 'install-binaries
5603 (lambda* (#:key outputs #:allow-other-keys)
5604 (let ((out (assoc-ref outputs "out")))
5605 (define (install src dst)
5606 (let ((dst (string-append out dst)))
5607 (mkdir-p (dirname dst))
5608 (copy-file src dst)))
5609 (mkdir-p (string-append out "/bin"))
5610 (install "../darkplaces/darkplaces-dedicated"
5611 "/bin/xonotic-dedicated")
5612 (install "../darkplaces/darkplaces-glx"
5613 "/bin/xonotic-glx")
5614 (install "../darkplaces/darkplaces-sdl"
5615 "/bin/xonotic-sdl")
5616 ;; Provide a default xonotic executable, defaulting to SDL.
5617 (symlink (string-append out "/bin/xonotic-sdl")
5618 (string-append out "/bin/xonotic"))
5619 #t)))
5620 (add-after 'install-binaries 'install-data
5621 (lambda* (#:key outputs inputs #:allow-other-keys)
5622 (let* ((out (assoc-ref outputs "out"))
5623 (data (assoc-ref inputs "xonotic-data")))
5624 (symlink (string-append data "/share/xonotic")
5625 (string-append out "/share/xonotic"))
5626 #t)))
5627 (add-after 'install-binaries 'wrap-binaries
5628 (lambda* (#:key outputs inputs #:allow-other-keys)
5629 ;; Curl and libvorbis need to be wrapped so that we get
5630 ;; sound and networking.
5631 (let* ((out (assoc-ref outputs "out"))
5632 (bin (string-append out "/bin/xonotic"))
5633 (bin-sdl (string-append out "/bin/xonotic-sdl"))
5634 (bin-glx (string-append out "/bin/xonotic-glx"))
5635 (bin-dedicated (string-append out "/bin/xonotic-dedicated"))
5636 (curl (assoc-ref inputs "curl"))
5637 (vorbis (assoc-ref inputs "libvorbis")))
5638 (wrap-program bin
5639 `("LD_LIBRARY_PATH" ":" prefix
5640 (,(string-append curl "/lib:" vorbis "/lib"))))
5641 (wrap-program bin-sdl
5642 `("LD_LIBRARY_PATH" ":" prefix
5643 (,(string-append curl "/lib:" vorbis "/lib"))))
5644 (wrap-program bin-glx
5645 `("LD_LIBRARY_PATH" ":" prefix
5646 (,(string-append curl "/lib:" vorbis "/lib"))))
5647 (wrap-program bin-dedicated
5648 `("LD_LIBRARY_PATH" ":" prefix
5649 (,(string-append curl "/lib:" vorbis "/lib"))))
5650 #t))))))
5651 (inputs
5652 `(("xonotic-data" ,xonotic-data)
5653 ("alsa-lib" ,alsa-lib)
5654 ("curl" ,curl)
5655 ("libjpeg" ,libjpeg)
5656 ("libmodplug" ,libmodplug)
5657 ("libvorbis" ,libvorbis)
5658 ("libogg" ,libogg)
5659 ("libxpm" ,libxpm)
5660 ("libxxf86dga" ,libxxf86dga)
5661 ("libxxf86vm" ,libxxf86vm)
5662 ("libx11" ,libx11)
5663 ("libxext" ,libxext)
5664 ("libxau" ,libxau)
5665 ("libxdmcp" ,libxdmcp)
5666 ("mesa" ,mesa)
5667 ("glu" ,glu)
5668 ("freetype" ,freetype)
5669 ("sdl2" ,sdl2)
5670 ("libpng" ,libpng)
5671 ("hicolor-icon-theme" ,hicolor-icon-theme)))
5672 (native-inputs
5673 `(("unzip" ,unzip)
5674 ("autoconf" ,autoconf)
5675 ("automake" ,automake)
5676 ("pkg-config" ,pkg-config)
5677 ("libtool" ,libtool)
5678 ("gmp" ,gmp)))
5679 (home-page "http://xonotic.org")
5680 (synopsis "Fast-paced first-person shooter game")
5681 (description
5682 "Xonotic is a free, fast-paced first-person shooter.
5683 The project is geared towards providing addictive arena shooter
5684 gameplay which is all spawned and driven by the community itself.
5685 Xonotic is a direct successor of the Nexuiz project with years of
5686 development between them, and it aims to become the best possible
5687 open-source FPS of its kind.")
5688 (license (list license:gpl2+
5689 license:bsd-3 ; /source/d0_blind_id folder and others
5690 (license:x11-style "" "See file rcon.pl.")))))
5691
5692 (define-public frotz
5693 (package
5694 (name "frotz")
5695 (version "2.44")
5696 (source (origin
5697 (method url-fetch)
5698 (uri (list (string-append
5699 "http://www.ifarchive.org/if-archive/infocom/interpreters/"
5700 name "/" name "-" version ".tar.gz")
5701 (string-append
5702 "ftp://ftp.ifarchive.org/if-archive/infocom/interpreters/"
5703 name "/" name "-" version ".tar.gz")))
5704 (sha256
5705 (base32
5706 "1v735xr3blznac8fnwa27s1vhllx4jpz7kw7qdw1bsfj6kq21v3k"))))
5707 (build-system gnu-build-system)
5708 (arguments
5709 `(#:tests? #f ; there are no tests
5710 #:phases
5711 (modify-phases %standard-phases
5712 (delete 'configure)
5713 (add-before 'build 'curses
5714 (lambda _
5715 (substitute* "Makefile"
5716 (("lcurses") "lncurses"))
5717 #t))
5718 (replace 'install
5719 (lambda* (#:key outputs #:allow-other-keys)
5720 (let* ((out (assoc-ref outputs "out"))
5721 (bin (string-append out "/bin"))
5722 (man (string-append out "/share/man/man6")))
5723 (install-file "frotz" bin)
5724 (mkdir-p man)
5725 (install-file "doc/frotz.6" man)
5726 #t))))))
5727 (inputs `(("libmodplug" ,libmodplug)
5728 ("libsamplerate" ,libsamplerate)
5729 ("libsndfile" ,libsndfile)
5730 ("libvorbis" ,libvorbis)
5731 ("ncurses" ,ncurses)))
5732 (synopsis "Portable Z-machine interpreter (ncurses version) for text adventure games")
5733 (description "Frotz is an interpreter for Infocom games and other Z-machine
5734 games in the text adventure/interactive fiction genre. This version of Frotz
5735 complies with standard 1.0 of Graham Nelson's specification. It plays all
5736 Z-code games V1-V8, including V6, with sound support through libao, and uses
5737 ncurses for text display.")
5738 (home-page "http://frotz.sourceforge.net")
5739 (license license:gpl2+)))
5740
5741 (define-public frotz-dumb-terminal
5742 (package
5743 (name "frotz-dumb-terminal")
5744 (version "2.44")
5745 (source (origin
5746 (method url-fetch)
5747 (uri (list (string-append
5748 "http://www.ifarchive.org/if-archive/infocom/interpreters/"
5749 "frotz" "/" "frotz" "-" version ".tar.gz")
5750 (string-append
5751 "ftp://ftp.ifarchive.org/if-archive/infocom/interpreters/"
5752 "frotz" "/" "frotz" "-" version ".tar.gz")))
5753 (sha256
5754 (base32
5755 "1v735xr3blznac8fnwa27s1vhllx4jpz7kw7qdw1bsfj6kq21v3k"))))
5756 (build-system gnu-build-system)
5757 (arguments
5758 `(#:tests? #f ; there are no tests
5759 #:phases
5760 (modify-phases %standard-phases
5761 (delete 'configure)
5762 (replace 'build
5763 (lambda _
5764 (invoke "make" "dumb")))
5765 (replace 'install
5766 (lambda* (#:key outputs #:allow-other-keys)
5767 (let* ((out (assoc-ref outputs "out"))
5768 (bin (string-append out "/bin"))
5769 (man (string-append out "/share/man/man6")))
5770 (install-file "dfrotz" bin)
5771 (mkdir-p man)
5772 (install-file "doc/dfrotz.6" man)
5773 #t))))))
5774 (synopsis "Portable Z-machine dumb interpreter for text adventure games")
5775 (description "Frotz is an interpreter for Infocom games and
5776 other Z-machine games in the text adventure/interactive fiction genre.
5777 dfrotz is the dumb interface version. You get no screen control; everything
5778 is just printed to the terminal line by line. The terminal handles all the
5779 scrolling. Maybe you'd like to experience what it's like to play Adventure on
5780 a teletype. A much cooler use for compiling Frotz with the dumb interface is
5781 that it can be wrapped in CGI scripting, PHP, and the like to allow people
5782 to play games on webpages. It can also be made into a chat bot.")
5783 (home-page "http://frotz.sourceforge.net")
5784 (license license:gpl2+)))
5785
5786 (define-public frotz-sdl
5787 (let* ((commit "4de8c34f2116fff554af6216c30ec9d41bf50b24"))
5788 (package
5789 (name "frotz-sdl")
5790 (version "2.45pre")
5791 (source (origin
5792 (method git-fetch)
5793 (uri (git-reference
5794 (url "https://gitlab.com/DavidGriffith/frotz")
5795 (commit commit)))
5796 (sha256
5797 (base32
5798 "18ms21pcrl7ipcnyqnf8janamkryzx78frsgd9kfk67jvbj0z2k8"))
5799 (file-name (git-file-name name version))))
5800 (build-system gnu-build-system)
5801 (arguments
5802 `(#:tests? #f ; there are no tests
5803 #:phases
5804 (modify-phases %standard-phases
5805 (delete 'configure)
5806 (add-before 'build 'patch-makefile
5807 (lambda _
5808 (substitute* "Makefile"
5809 (("lcurses") "lncurses")
5810 (("^BUILD_DATE_TIME =.*$")
5811 "BUILD_DATE_TIME = \"2.45pre-20180907.00000\"\n"))
5812 #t))
5813 (replace 'build
5814 (lambda _
5815 (invoke "make" "sdl")))
5816 (replace 'install
5817 (lambda* (#:key outputs #:allow-other-keys)
5818 (let* ((out (assoc-ref outputs "out"))
5819 (bin (string-append out "/bin"))
5820 (man (string-append out "/share/man/man6")))
5821 (install-file "sfrotz" bin)
5822 (mkdir-p man)
5823 (install-file "doc/sfrotz.6" man)
5824 #t))))))
5825 (native-inputs
5826 `(("pkg-config" ,pkg-config)
5827 ("which" ,which)
5828 ("perl" ,perl)))
5829 (inputs `(("sdl2" ,sdl2)
5830 ("sdl2-mixer" ,sdl2-mixer)
5831 ("libmodplug" ,libmodplug)
5832 ("libsamplerate" ,libsamplerate)
5833 ("libsndfile" ,libsndfile)
5834 ("libvorbis" ,libvorbis)
5835 ("ncurses" ,ncurses)
5836 ("freetype" ,freetype)
5837 ("libjpeg-turbo" ,libjpeg-turbo)))
5838 (synopsis "Portable Z-machine interpreter (SDL port) for text adventure games")
5839 (description "Frotz is an interpreter for Infocom games and other Z-machine
5840 games in the text adventure/interactive fiction genre. This version of Frotz
5841 using SDL fully supports all these versions of the Z-Machine including the
5842 graphical version 6. Graphics and sound are created through the use of the SDL
5843 libraries. AIFF sound effects and music in MOD and OGG formats are supported
5844 when packaged in Blorb container files or optionally from individual files.")
5845 (home-page "http://frotz.sourceforge.net")
5846 (license license:gpl2+))))
5847
5848 (define-public libmanette
5849 (package
5850 (name "libmanette")
5851 (version "0.2.1")
5852 (source (origin
5853 (method url-fetch)
5854 (uri (string-append "mirror://gnome/sources/" name "/"
5855 (version-major+minor version) "/"
5856 name "-" version ".tar.xz"))
5857 (sha256
5858 (base32
5859 "14vqz30p4693yy3yxs0gj858x25sl2kawib1g9lj8g5frgl0hd82"))))
5860 (build-system meson-build-system)
5861 (native-inputs
5862 `(("glib" ,glib "bin") ; for glib-compile-resources
5863 ("gobject-introspection" ,gobject-introspection)
5864 ("pkg-config" ,pkg-config)
5865 ("vala" ,vala)))
5866 (inputs
5867 `(("libevdev" ,libevdev)
5868 ("libgudev" ,libgudev)))
5869 (home-page "https://wiki.gnome.org/Apps/Games")
5870 (synopsis "Game controller library")
5871 (description "Libmanette is a small GObject library giving you simple
5872 access to game controllers. It supports the de-facto standard gamepads as
5873 defined by the W3C standard Gamepad specification or as implemented by the SDL
5874 GameController.")
5875 (license license:lgpl2.1+)))
5876
5877 (define-public quadrapassel
5878 (package
5879 (name "quadrapassel")
5880 (version "3.31.3")
5881 (source (origin
5882 (method url-fetch)
5883 (uri (string-append "mirror://gnome/sources/" name "/"
5884 (version-major+minor version) "/"
5885 name "-" version ".tar.xz"))
5886 (sha256
5887 (base32
5888 "08i01nsgfb502xzzrrcxxbs7awb0j1h4c08vmj0j18ipa1sz8vb8"))))
5889 (build-system glib-or-gtk-build-system)
5890 (native-inputs
5891 `(("desktop-file-utils" ,desktop-file-utils) ;for desktop-file-validate
5892 ("gettext" ,gnu-gettext)
5893 ("glib" ,glib "bin") ;for glib-compile-resources
5894 ("itstool" ,itstool)
5895 ("libxml2" ,libxml2) ;for xmllint
5896 ("pkg-config" ,pkg-config)
5897 ("vala" ,vala)))
5898 (inputs
5899 `(("clutter" ,clutter)
5900 ("clutter-gtk" ,clutter-gtk)
5901 ("gtk+" ,gtk+)
5902 ("libcanberra" ,libcanberra)
5903 ("libmanette" ,libmanette)
5904 ("librsvg" ,librsvg)))
5905 (home-page "https://wiki.gnome.org/Apps/Quadrapassel")
5906 (synopsis "GNOME version of Tetris")
5907 (description "Quadrapassel comes from the classic falling-block game,
5908 Tetris. The goal of the game is to create complete horizontal lines of
5909 blocks, which will disappear. The blocks come in seven different shapes made
5910 from four blocks each: one straight, two L-shaped, one square, and two
5911 S-shaped. The blocks fall from the top center of the screen in a random
5912 order. You rotate the blocks and move them across the screen to drop them in
5913 complete lines. You score by dropping blocks fast and completing lines. As
5914 your score gets higher, you level up and the blocks fall faster.")
5915 (license license:gpl2+)))
5916
5917 (define-public endless-sky
5918 (package
5919 (name "endless-sky")
5920 (version "0.9.8")
5921 (source
5922 (origin
5923 (method git-fetch)
5924 (uri (git-reference
5925 (url "https://github.com/endless-sky/endless-sky")
5926 (commit (string-append "v" version))))
5927 (file-name (git-file-name name version))
5928 (sha256
5929 (base32
5930 "0i36lawypikbq8vvzfis1dn7yf6q0d2s1cllshfn7kmjb6pqfi6c"))))
5931 (build-system scons-build-system)
5932 (arguments
5933 `(#:scons ,scons-python2
5934 #:scons-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
5935 #:tests? #f ; no tests
5936 #:phases
5937 (modify-phases %standard-phases
5938 (add-after 'unpack 'patch-resource-locations
5939 (lambda* (#:key outputs #:allow-other-keys)
5940 (substitute* "source/Files.cpp"
5941 (("/usr/local/")
5942 (string-append (assoc-ref outputs "out") "/")))
5943 #t))
5944 (add-after 'unpack 'patch-scons
5945 (lambda _
5946 (substitute* "SConstruct"
5947 ;; Keep environmental variables
5948 (("Environment\\(\\)")
5949 "Environment(ENV = os.environ)")
5950 ;; Install into %out/bin
5951 (("games\"") "bin\""))
5952 #t)))))
5953 (inputs
5954 `(("glew" ,glew)
5955 ("libjpeg" ,libjpeg-turbo)
5956 ("libmad" ,libmad)
5957 ("libpng" ,libpng)
5958 ("openal" ,openal)
5959 ("sdl2" ,sdl2)))
5960 (home-page "https://endless-sky.github.io/")
5961 (synopsis "2D space trading and combat game")
5962 (description "Endless Sky is a 2D space trading and combat game. Explore
5963 other star systems. Earn money by trading, carrying passengers, or completing
5964 missions. Use your earnings to buy a better ship or to upgrade the weapons and
5965 engines on your current one. Blow up pirates. Take sides in a civil war. Or
5966 leave human space behind and hope to find friendly aliens whose culture is more
5967 civilized than your own.")
5968 (license (list license:gpl3+
5969 license:cc-by-sa3.0
5970 license:cc-by-sa4.0
5971 license:public-domain))))
5972
5973 (define-public stepmania
5974 (package
5975 (name "stepmania")
5976 (version "5.1.0-b2")
5977 (source
5978 (origin
5979 (method git-fetch)
5980 (uri (git-reference
5981 (url "https://github.com/stepmania/stepmania.git")
5982 (commit (string-append "v" version))))
5983 (file-name (git-file-name name version))
5984 (sha256
5985 (base32
5986 "0a7y9l7xm510vgnpmj1is7p9m6d6yd0fcaxrjcickz295k5w3rdn"))
5987 (modules '((guix build utils)))
5988 (snippet
5989 '(begin
5990 ;; Remove song files, which are licensed under a non-commercial
5991 ;; clause, and a course pointing to them.
5992 (for-each delete-file-recursively
5993 '("Songs/StepMania 5/Goin' Under"
5994 "Songs/StepMania 5/MechaTribe Assault"
5995 "Songs/StepMania 5/Springtime"))
5996 (for-each delete-file '("Courses/Default/Jupiter.crs"
5997 "Courses/Default/Jupiter.png"))
5998 ;; Unbundle libpng.
5999 (substitute* "extern/CMakeLists.txt"
6000 (("include\\(CMakeProject-png.cmake\\)") ""))
6001 (delete-file-recursively "extern/libpng")
6002 #t))))
6003 (build-system cmake-build-system)
6004 (arguments
6005 `(#:tests? #f ;FIXME: couldn't find how to run tests
6006 #:build-type "Release"
6007 #:out-of-source? #f ;for the 'install-desktop' phase
6008 #:configure-flags
6009 (list "-DWITH_SYSTEM_FFMPEG=1"
6010 ;; SSE instructions are available on Intel systems only.
6011 ,@(if (any (cute string-prefix? <> (or (%current-target-system)
6012 (%current-system)))
6013 '("x64_64" "i686"))
6014 '()
6015 '("-DWITH_SSE2=NO"))
6016 ;; Configuration cannot find GTK2 without the two following
6017 ;; flags.
6018 (string-append "-DGTK2_GDKCONFIG_INCLUDE_DIR="
6019 (assoc-ref %build-inputs "gtk+")
6020 "/lib/gtk-2.0/include")
6021 (string-append "-DGTK2_GLIBCONFIG_INCLUDE_DIR="
6022 (assoc-ref %build-inputs "glib")
6023 "/lib/glib-2.0/include"))
6024 #:phases
6025 (modify-phases %standard-phases
6026 (add-after 'unpack 'fix-install-subdir
6027 ;; Installation would be done in "%out/stepmania-X.Y", but we
6028 ;; prefer the more common layout "%out/share/stepmania".
6029 (lambda _
6030 (substitute* "src/CMakeLists.txt"
6031 (("\"stepmania-.*?\"") "\"share/stepmania\""))
6032 #t))
6033 (add-after 'unpack 'unbundle-libpng
6034 (lambda* (#:key inputs #:allow-other-keys)
6035 (substitute* "src/CMakeLists.txt"
6036 (("\\$\\{SM_EXTERN_DIR\\}/libpng/include")
6037 (string-append (assoc-ref inputs "libpng") "/include")))
6038 #t))
6039 (add-after 'install 'install-executable
6040 (lambda* (#:key outputs #:allow-other-keys)
6041 (let* ((out (assoc-ref outputs "out"))
6042 (bin (string-append out "/bin"))
6043 (exe (string-append out "/share/stepmania/stepmania")))
6044 (mkdir-p bin)
6045 (symlink exe (string-append bin "/stepmania"))
6046 #t)))
6047 (add-after 'install-executable 'install-desktop
6048 (lambda* (#:key outputs #:allow-other-keys)
6049 (let* ((out (assoc-ref outputs "out"))
6050 (share (string-append out "/share"))
6051 (applications (string-append share "/applications"))
6052 (icons (string-append share "/icons")))
6053 (install-file "stepmania.desktop" applications)
6054 (mkdir-p icons)
6055 (copy-recursively "icons" icons)
6056 #t)))
6057 ;; Move documentation in a more usual place, i.e.,
6058 ;; "%out/share/doc/stepmania/".
6059 (add-after 'install-desktop 'install-doc
6060 (lambda* (#:key outputs #:allow-other-keys)
6061 (let* ((out (assoc-ref outputs "out"))
6062 (share (string-append out "/share")))
6063 (with-directory-excursion share
6064 (mkdir-p "doc")
6065 (symlink "../stepmania/Docs" "doc/stepmania"))
6066 #t))))))
6067 (native-inputs
6068 `(("pkg-config" ,pkg-config)
6069 ("yasm" ,yasm)))
6070 (inputs
6071 `(("alsa-lib" ,alsa-lib)
6072 ;; Per upstream, StepMania is only guaranteed to work with a very
6073 ;; specific FFmpeg version, which is included in the repository as
6074 ;; a Git submodule. This particular version requirement usually
6075 ;; changes every few years.
6076 ("ffmpeg" ,ffmpeg-for-stepmania)
6077 ("glib" ,glib)
6078 ("glew" ,glew)
6079 ("gtk+" ,gtk+-2)
6080 ("jsoncpp" ,jsoncpp)
6081 ("libpng" ,libpng)
6082 ("libjpeg" ,libjpeg-8)
6083 ("libmad" ,libmad)
6084 ("libogg" ,libogg)
6085 ("libva" ,libva)
6086 ("libvorbis" ,libvorbis)
6087 ("libxinerama" ,libxinerama)
6088 ("libxrandr" ,libxrandr)
6089 ("mesa" ,mesa)
6090 ("pcre" ,pcre)
6091 ("pulseaudio" ,pulseaudio)
6092 ("sdl" ,sdl2)
6093 ("udev" ,eudev)
6094 ("zlib" ,zlib)))
6095 (synopsis "Advanced rhythm game designed for both home and arcade use")
6096 (description "StepMania is a dance and rhythm game. It features 3D
6097 graphics, keyboard and dance pad support, and an editor for creating your own
6098 steps.
6099
6100 This package provides the core application, but no song is shipped. You need
6101 to download and install them in @file{$HOME/.stepmania-X.Y/Songs} directory.")
6102 (home-page "https://www.stepmania.com")
6103 (license license:expat)))
6104