gnu: crawl: Update to 0.26.0.
[jackhill/guix/guix.git] / gnu / packages / games.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 John Darrington <jmd@gnu.org>
3 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
4 ;;; Copyright © 2014, 2016 David Thompson <dthompson2@worcester.edu>
5 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Eric Bavier <bavier@posteo.net>
6 ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
7 ;;; Copyright © 2014 Sylvain Beucler <beuc@beuc.net>
8 ;;; Copyright © 2014, 2015, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
9 ;;; Copyright © 2014, 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
10 ;;; Copyright © 2014, 2015, 2019 Mark H Weaver <mhw@netris.org>
11 ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr>
12 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
13 ;;; Copyright © 2015, 2017, 2018 Christopher Lemmer Webber <cwebber@dustycloud.org>
14 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
15 ;;; Copyright © 2015, 2016, 2017 Alex Kost <alezost@gmail.com>
16 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
17 ;;; Copyright © 2016, 2017 Rodger Fox <thylakoid@openmailbox.org>
18 ;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
19 ;;; Copyright © 2016 Albin Söderqvist <albin@fripost.org>
20 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Kei Kebreau <kkebreau@posteo.net>
21 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
22 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
23 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
24 ;;; Copyright © 2016 Steve Webber <webber.sl@gmail.com>
25 ;;; Copyright © 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@hyperbola.info>
26 ;;; Copyright © 2017, 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
27 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
28 ;;; Copyright © 2017, 2019 nee <nee-git@hidamari.blue>
29 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
30 ;;; Copyright © 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
31 ;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com>
32 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
33 ;;; Copyright © 2017, 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
34 ;;; Copyright © 2018 okapi <okapi@firemail.cc>
35 ;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
36 ;;; Copyright © 2018 Madalin Ionel-Patrascu <madalinionel.patrascu@mdc-berlin.de>
37 ;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net>
38 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
39 ;;; Copyright © 2019, 2020 Pierre Neidhardt <mail@ambrevar.xyz>
40 ;;; Copyright © 2019, 2020 Oleg Pykhalov <go.wigust@gmail.com>
41 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
42 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
43 ;;; Copyright © 2019, 2020 Jesse Gibbons <jgibbons2357+guix@gmail.com>
44 ;;; Copyright © 2019 Dan Frumin <dfrumin@cs.ru.nl>
45 ;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
46 ;;; Copyright © 2019, 2020 Timotej Lazar <timotej.lazar@araneo.si>
47 ;;; Copyright © 2019 Josh Holland <josh@inv.alid.pw>
48 ;;; Copyright © 2017, 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
49 ;;; Copyright © 2020 Alberto Eleuterio Flores Guerrero <barbanegra+guix@posteo.mx>
50 ;;; Copyright © 2020 Naga Malleswari <nagamalli@riseup.net>
51 ;;; Copyright © 2020 Vitaliy Shatrov <D0dyBo0D0dyBo0@protonmail.com>
52 ;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
53 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
54 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
55 ;;; Copyright © 2020 Trevor Hass <thass@okstate.edu>
56 ;;; Copyright © 2020 Leo Prikler <leo.prikler@student.tugraz.at>
57 ;;; Copyright © 2020 Lu hux <luhux@outlook.com>
58 ;;; Copyright © 2020 Tomás Ortín Fernández <tomasortin@mailbox.org>
59 ;;;
60 ;;; This file is part of GNU Guix.
61 ;;;
62 ;;; GNU Guix is free software; you can redistribute it and/or modify it
63 ;;; under the terms of the GNU General Public License as published by
64 ;;; the Free Software Foundation; either version 3 of the License, or (at
65 ;;; your option) any later version.
66 ;;;
67 ;;; GNU Guix is distributed in the hope that it will be useful, but
68 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
69 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
70 ;;; GNU General Public License for more details.
71 ;;;
72 ;;; You should have received a copy of the GNU General Public License
73 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
74
75 (define-module (gnu packages games)
76 #:use-module (ice-9 match)
77 #:use-module ((guix licenses) #:prefix license:)
78 #:use-module (guix utils)
79 #:use-module (guix packages)
80 #:use-module (guix download)
81 #:use-module (guix git-download)
82 #:use-module (guix svn-download)
83 #:use-module (guix gexp)
84 #:use-module (gnu packages)
85 #:use-module (gnu packages adns)
86 #:use-module (gnu packages algebra)
87 #:use-module (gnu packages autotools)
88 #:use-module (gnu packages backup)
89 #:use-module (gnu packages base)
90 #:use-module (gnu packages build-tools)
91 #:use-module (gnu packages admin)
92 #:use-module (gnu packages audio)
93 #:use-module (gnu packages avahi)
94 #:use-module (gnu packages assembly)
95 #:use-module (gnu packages bash)
96 #:use-module (gnu packages bison)
97 #:use-module (gnu packages boost)
98 #:use-module (gnu packages check)
99 #:use-module (gnu packages cmake)
100 #:use-module (gnu packages compression)
101 #:use-module (gnu packages cpp)
102 #:use-module (gnu packages curl)
103 #:use-module (gnu packages crypto)
104 #:use-module (gnu packages cyrus-sasl)
105 #:use-module (gnu packages documentation)
106 #:use-module (gnu packages docbook)
107 #:use-module (gnu packages emulators)
108 #:use-module (gnu packages flex)
109 #:use-module (gnu packages fltk)
110 #:use-module (gnu packages fonts)
111 #:use-module (gnu packages fontutils)
112 #:use-module (gnu packages freedesktop)
113 #:use-module (gnu packages fribidi)
114 #:use-module (gnu packages game-development)
115 #:use-module (gnu packages gcc)
116 #:use-module (gnu packages gettext)
117 #:use-module (gnu packages ghostscript)
118 #:use-module (gnu packages gimp)
119 #:use-module (gnu packages gl)
120 #:use-module (gnu packages glib)
121 #:use-module (gnu packages gnome)
122 #:use-module (gnu packages gnu-doc)
123 #:use-module (gnu packages gnupg)
124 #:use-module (gnu packages gnuzilla)
125 #:use-module (gnu packages gperf)
126 #:use-module (gnu packages graphics)
127 #:use-module (gnu packages gsasl)
128 #:use-module (gnu packages gstreamer)
129 #:use-module (gnu packages gtk)
130 #:use-module (gnu packages guile)
131 #:use-module (gnu packages haskell)
132 #:use-module (gnu packages haskell-crypto)
133 #:use-module (gnu packages haskell-xyz)
134 #:use-module (gnu packages icu4c)
135 #:use-module (gnu packages image)
136 #:use-module (gnu packages imagemagick)
137 #:use-module (gnu packages javascript)
138 #:use-module (gnu packages kde)
139 #:use-module (gnu packages kde-frameworks)
140 #:use-module (gnu packages less)
141 #:use-module (gnu packages libcanberra)
142 #:use-module (gnu packages libedit)
143 #:use-module (gnu packages libunwind)
144 #:use-module (gnu packages linux)
145 #:use-module (gnu packages llvm)
146 #:use-module (gnu packages lua)
147 #:use-module (gnu packages man)
148 #:use-module (gnu packages maths)
149 #:use-module (gnu packages messaging)
150 #:use-module (gnu packages mp3)
151 #:use-module (gnu packages music)
152 #:use-module (gnu packages multiprecision)
153 #:use-module (gnu packages ncurses)
154 #:use-module (gnu packages netpbm)
155 #:use-module (gnu packages networking)
156 #:use-module (gnu packages ocaml)
157 #:use-module (gnu packages opencl)
158 #:use-module (gnu packages pcre)
159 #:use-module (gnu packages perl)
160 #:use-module (gnu packages perl-check)
161 #:use-module (gnu packages perl-compression)
162 #:use-module (gnu packages pkg-config)
163 #:use-module (gnu packages protobuf)
164 #:use-module (gnu packages pulseaudio)
165 #:use-module (gnu packages python)
166 #:use-module (gnu packages python-xyz)
167 #:use-module (gnu packages qt)
168 #:use-module (gnu packages readline)
169 #:use-module (gnu packages ruby)
170 #:use-module (gnu packages shells)
171 #:use-module (gnu packages sdl)
172 #:use-module (gnu packages serialization)
173 #:use-module (gnu packages sqlite)
174 #:use-module (gnu packages squirrel)
175 #:use-module (gnu packages swig)
176 #:use-module (gnu packages tcl)
177 #:use-module (gnu packages terminals)
178 #:use-module (gnu packages texinfo)
179 #:use-module (gnu packages textutils)
180 #:use-module (gnu packages tls)
181 #:use-module (gnu packages upnp)
182 #:use-module (gnu packages video)
183 #:use-module (gnu packages vulkan)
184 #:use-module (gnu packages web)
185 #:use-module (gnu packages wget)
186 #:use-module (gnu packages wxwidgets)
187 #:use-module (gnu packages xdisorg)
188 #:use-module (gnu packages xorg)
189 #:use-module (gnu packages xiph)
190 #:use-module (gnu packages xml)
191 #:use-module (guix build-system copy)
192 #:use-module (guix build-system cmake)
193 #:use-module (guix build-system glib-or-gtk)
194 #:use-module (guix build-system gnu)
195 #:use-module (guix build-system go)
196 #:use-module (guix build-system meson)
197 #:use-module (guix build-system perl)
198 #:use-module (guix build-system python)
199 #:use-module (guix build-system qt)
200 #:use-module (guix build-system scons)
201 #:use-module (guix build-system trivial)
202 #:use-module ((srfi srfi-1) #:hide (zip))
203 #:use-module (srfi srfi-26))
204
205 (define-public abe
206 (package
207 (name "abe")
208 (version "1.1")
209 (source
210 (origin
211 (method url-fetch)
212 (uri (string-append "mirror://sourceforge/abe/abe/abe-" version
213 "/abe-" version ".tar.gz"))
214 (sha256
215 (base32 "1xvpnq1y6y48fn3pvn2lk0h1ilmalv7nb7awpid1g4jcq1sfmi6z"))))
216 (build-system gnu-build-system)
217 (arguments
218 `(#:configure-flags
219 (list (string-append "--with-data-dir="
220 (assoc-ref %outputs "out")
221 "/share/abe"))
222 #:phases
223 (modify-phases %standard-phases
224 (replace 'bootstrap
225 (lambda _ (invoke "sh" "autogen.sh")))
226 (add-before 'build 'set-SDL
227 ;; Set correct environment for SDL.
228 (lambda* (#:key inputs #:allow-other-keys)
229 (setenv "CPATH"
230 (string-append
231 (assoc-ref inputs "sdl") "/include/SDL:"
232 (or (getenv "CPATH") "")))
233 #t))
234 (add-after 'install 'finalize-install
235 (lambda* (#:key outputs #:allow-other-keys)
236 (let ((share (string-append (assoc-ref outputs "out") "/share")))
237 ;; Installation script does not copy game data files.
238 (let ((data (string-append share "/abe")))
239 (for-each (lambda (dir)
240 (let ((target (string-append data "/" dir)))
241 (mkdir-p target)
242 (copy-recursively dir target)))
243 '("images" "maps" "sounds")))
244 ;; Create desktop file.
245 (let ((apps (string-append share "/applications")))
246 (mkdir-p apps)
247 (make-desktop-entry-file
248 (string-append apps "/abe.desktop")
249 #:name "Abe's Amazing Adventure"
250 #:exec ,name
251 #:categories '("AdventureGame" "Game")
252 #:keywords
253 '("side-scrolling" "adventure" "pyramid" "singleplayer")
254 #:comment
255 '(("de" "Ein sich seitwärts bewegendes Abenteuerspiel")
256 (#f "Side-scrolling game")))))
257 #t)))))
258 (native-inputs
259 `(("autoconf" ,autoconf)
260 ("automake" ,automake)))
261 (inputs
262 `(("libxi" ,libxi)
263 ("libxmu" ,libxmu)
264 ("libxt" ,libxt)
265 ("sdl" ,(sdl-union (list sdl sdl-mixer)))))
266 (home-page "http://abe.sourceforge.net")
267 (synopsis "Scrolling, platform-jumping, ancient pyramid exploring game")
268 (description
269 "Abe's Amazing Adventure is a scrolling,
270 platform-jumping, key-collecting, ancient pyramid exploring game, vaguely in
271 the style of similar games for the Commodore+4.")
272 (license license:gpl2+)))
273
274 ;; Data package for adanaxisgpl.
275 (define adanaxis-mush
276 (let ((version "1.1.0"))
277 (origin
278 (method url-fetch)
279 (uri (string-append "http://www.mushware.com/files/adanaxis-mush-"
280 version ".tar.gz"))
281 (sha256
282 (base32 "0mk9ibis5nkdcalcg1lkgnsdxxbw4g5w2i3icjzy667hqirsng03")))))
283
284 (define-public adanaxisgpl
285 (package
286 (name "adanaxisgpl")
287 (version "1.2.5")
288 (source
289 (origin
290 (method url-fetch)
291 (uri (string-append "http://www.mushware.com/files/adanaxisgpl-"
292 version ".tar.gz"))
293 (sha256
294 (base32 "0jkn637jaabvlhd6hpvzb57vvjph94l6fbf7qxbjlw9zpr19dw1f"))
295 (modules '((guix build utils)))
296 (snippet
297 '(begin
298 ;; Necessary for building with gcc >=4.7.
299 (substitute* "src/Mushcore/MushcoreSingleton.h"
300 (("SingletonPtrSet\\(new SingletonType\\);")
301 "MushcoreSingleton::SingletonPtrSet(new SingletonType);"))
302 ;; Avoid an "invalid conversion from const char* to char*" error.
303 (substitute* "src/Platform/X11/PlatformMiscUtils.cpp"
304 (("char \\*end, \\*result;")
305 (string-append "const char *end;"
306 "\n"
307 "char *result;")))
308 #t))))
309 (build-system gnu-build-system)
310 (arguments
311 `(#:tests? #f ; no check target
312 #:phases
313 (modify-phases %standard-phases
314 (add-after 'install 'install-data
315 (lambda* (#:key inputs outputs #:allow-other-keys)
316 (let ((data (assoc-ref inputs "adanaxis-mush"))
317 (share (string-append (assoc-ref outputs "out")
318 "/share/" ,name "-" ,version)))
319 (mkdir-p share)
320 (invoke "tar" "xvf" data "-C" share)))))))
321 (native-inputs
322 `(("adanaxis-mush" ,adanaxis-mush))) ; game data
323 (inputs
324 `(("expat" ,expat)
325 ("freeglut" ,freeglut)
326 ("glu" ,glu)
327 ("libjpeg" ,libjpeg-turbo)
328 ("libogg" ,libogg)
329 ("libtiff" ,libtiff)
330 ("libvorbis" ,libvorbis)
331 ("libx11" ,libx11)
332 ("libxext" ,libxext)
333 ("pcre" ,pcre)
334 ("sdl" ,sdl)
335 ("sdl-mixer" ,sdl-mixer)))
336 (home-page "https://www.mushware.com")
337 (synopsis "Action game in four spatial dimensions")
338 (description
339 "Adanaxis is a fast-moving first person shooter set in deep space, where
340 the fundamentals of space itself are changed. By adding another dimension to
341 space this game provides an environment with movement in four directions and
342 six planes of rotation. Initially the game explains the 4D control system via
343 a graphical sequence, before moving on to 30 levels of gameplay with numerous
344 enemy, ally, weapon and mission types. Features include simulated 4D texturing,
345 mouse and joystick control, and original music.")
346 (license license:gpl2)))
347
348 (define-public alex4
349 (package
350 (name "alex4")
351 (version "1.2.1")
352 (source
353 (origin
354 (method git-fetch)
355 (uri (git-reference
356 (url "https://github.com/carstene1ns/alex4")
357 (commit version)))
358 (file-name (git-file-name name version))
359 (sha256
360 (base32 "098wy72mh4lsvq3gm0rhamjssf9l1hp6hhkpzrv7klpb97cwwc3h"))))
361 (build-system gnu-build-system)
362 (arguments
363 `(#:tests? #f ; no check target
364 #:make-flags
365 (list "CC=gcc"
366 "CFLAGS=-D_FILE_OFFSET_BITS=64"
367 (string-append "PREFIX=" (assoc-ref %outputs "out")))
368 #:phases
369 (modify-phases %standard-phases
370 (delete 'configure) ; no configure script
371 (add-after 'install 'install-data
372 (lambda* (#:key outputs #:allow-other-keys)
373 (let ((share (string-append (assoc-ref outputs "out")
374 "/share/" ,name)))
375 (install-file "alex4.ini" share)
376 #t))))))
377 (inputs
378 `(("allegro" ,allegro-4)
379 ("dumb" ,dumb-allegro4)))
380 (home-page "http://allegator.sourceforge.net/")
381 (synopsis "Retro platform game")
382 (description
383 "Guide Alex the Allegator through the jungle in order to save his
384 girlfriend Lola from evil humans who want to make a pair of shoes out of her.
385 Plenty of classic platforming in four nice colors guaranteed!
386
387 The game includes a built-in editor so you can design and share your own maps.")
388 (license license:gpl2+)))
389
390 (define-public armagetronad
391 (package
392 (name "armagetronad")
393 (version "0.2.9.0.1")
394 (source (origin
395 (method url-fetch)
396 (uri (string-append "mirror://sourceforge/armagetronad/stable/"
397 version "/armagetronad-" version ".tbz"))
398 (sha256
399 (base32
400 "19rfhlg4gp0r7k1j8v4iw20325ciy156nmzax4xikmw22c6nmxcz"))))
401 (build-system gnu-build-system)
402 (native-inputs
403 `(("pkg-config" ,pkg-config)))
404 (inputs
405 `(("libxml2" ,libxml2)
406 ("sdl" ,sdl)
407 ("sdl-image" ,sdl-image)
408 ("freeglut" ,freeglut)
409 ("libpng" ,libpng)
410 ("libjpeg-turbo" ,libjpeg-turbo)))
411 (home-page "http://www.armagetronad.org")
412 (synopsis "Tron clone in 3D")
413 (description "Armagetron Advanced is a multiplayer game in 3d that
414 attempts to emulate and expand on the lightcycle sequence from the movie Tron.
415 It's an old school arcade game slung into the 21st century. Highlights
416 include a customizable playing arena, HUD, unique graphics, and AI bots. For
417 the more advanced player there are new game modes and a wide variety of
418 physics settings to tweak as well.")
419 (license license:gpl2+)))
420
421 (define-public astromenace
422 (package
423 (name "astromenace")
424 (version "1.4.1")
425 (source
426 (origin
427 (method git-fetch)
428 (uri (git-reference
429 (url "https://github.com/viewizard/astromenace")
430 (commit (string-append "v" version))))
431 (file-name (git-file-name name version))
432 (sha256
433 (base32 "1ad6l887jxqv8xspwc2rvy8ym9sdlmkqdqhsh0pi076kjarxsyws"))))
434 (build-system cmake-build-system)
435 (arguments
436 `(#:tests? #f ;no test
437 #:configure-flags (list (string-append "-DDATADIR="
438 (assoc-ref %outputs "out")
439 "/share/astromenace"))
440 #:phases
441 (modify-phases %standard-phases
442 (replace 'install
443 ;; Upstream provides no install phase.
444 (lambda* (#:key inputs outputs #:allow-other-keys)
445 (let* ((out (assoc-ref outputs "out"))
446 (bin (string-append out "/bin"))
447 (share (string-append out "/share"))
448 (apps (string-append share "/applications"))
449 (data (string-append share "/astromenace"))
450 (icons (string-append share "/icons/hicolor/64x64/apps")))
451 (install-file "astromenace" bin)
452 (install-file "gamedata.vfs" data)
453 (let ((source (assoc-ref inputs "source")))
454 (with-directory-excursion (string-append source "/share")
455 (install-file "astromenace.desktop" apps)
456 (mkdir-p icons)
457 (copy-file "astromenace_64.png"
458 (string-append icons "/astromenace.png")))))
459 #t)))))
460 (inputs
461 `(("freealut" ,freealut)
462 ("freetype" ,freetype)
463 ("glu" ,glu)
464 ("libogg" ,libogg)
465 ("libvorbis" ,libvorbis)
466 ("openal" ,openal)
467 ("sdl2" ,sdl2)))
468 (home-page "https://www.viewizard.com/")
469 (synopsis "3D space shooter with spaceship upgrade possibilities")
470 (description
471 "Space is a vast area, an unbounded territory where it seems there is
472 a room for everybody, but reversal of fortune put things differently. The
473 hordes of hostile creatures crawled out from the dark corners of the universe,
474 craving to conquer your homeland. Their force is compelling, their legions
475 are interminable. However, humans didn't give up without a final showdown and
476 put their best pilot to fight back. These malicious invaders chose the wrong
477 galaxy to conquer and you are to prove it! Go ahead and make alien aggressors
478 regret their insolence.")
479 ;; Game is released under GPL3+ terms. Artwork is subject to CC
480 ;; BY-SA 4.0, and fonts to OFL1.1.
481 (license (list license:gpl3+ license:cc-by-sa4.0 license:silofl1.1))))
482
483 (define-public bastet
484 (package
485 (name "bastet")
486 (version "0.43.2")
487 (source
488 (origin
489 (method git-fetch)
490 (uri (git-reference
491 (url "https://github.com/fph/bastet")
492 (commit version)))
493 (file-name (git-file-name name version))
494 (sha256
495 (base32 "09kamxapm9jw9przpsgjfg33n9k94bccv65w95dakj0br33a75wn"))
496 (patches
497 (search-patches "bastet-change-source-of-unordered_set.patch"))))
498 (build-system gnu-build-system)
499 (arguments
500 `(#:make-flags
501 (list (string-append "CXXFLAGS=-I"
502 (assoc-ref %build-inputs "boost") "/include"))
503 #:phases
504 (modify-phases %standard-phases
505 (delete 'configure) ; no configure script
506 (replace 'check
507 ;; The 'Test' target builds the tests, but doesn't actually run them.
508 (lambda* (#:key make-flags #:allow-other-keys)
509 (apply invoke "make" "Test" make-flags)
510 (setenv "HOME" ".")
511 (invoke "./Test")))
512 (replace 'install
513 (lambda* (#:key outputs #:allow-other-keys)
514 (let* ((out (assoc-ref outputs "out"))
515 (share (string-append out "/share"))
516 (hicolor (string-append share "/icons/hicolor")))
517 (install-file "bastet"
518 (string-append out "/bin"))
519
520 (install-file "bastet.desktop"
521 (string-append share "/applications"))
522 (install-file "bastet.svg"
523 (string-append hicolor "/scalable/apps"))
524
525 (install-file "bastet.appdata.xml"
526 (string-append share "/appdata"))
527
528 (install-file "bastet.6"
529 (string-append out "/share/man/man6"))
530 #t))))))
531 (native-inputs
532 `(("hicolor-icon-theme" ,hicolor-icon-theme)))
533 (inputs
534 `(("boost" ,boost)
535 ("ncurses" ,ncurses)))
536 (home-page "https://fph.altervista.org/prog/bastet.html")
537 (synopsis "Antagonistic Tetris-style falling brick game for text terminals")
538 (description
539 "Bastet (short for Bastard Tetris) is a simple ncurses-based falling brick
540 game. Unlike normal Tetris, Bastet does not choose the next brick at random.
541 Instead, it uses a special algorithm to choose the worst brick possible.
542
543 Playing bastet can be a painful experience, especially if you usually make
544 canyons and wait for the long I-shaped block to clear four rows at a time.")
545 (license license:gpl3+)))
546
547 (define-public blobwars
548 (package
549 (name "blobwars")
550 (version "2.00")
551 (source
552 (origin
553 (method url-fetch)
554 (uri (string-append "mirror://sourceforge/blobwars/"
555 "blobwars-" version ".tar.gz"))
556 (sha256
557 (base32 "16aagvkx6azf75gm5kaa94bh5npydvhqp3fvdqyfsanzdjgjf1n4"))))
558 (build-system gnu-build-system)
559 (arguments
560 `(#:tests? #f ;no test
561 #:make-flags
562 (let ((out (assoc-ref %outputs "out")))
563 (list (string-append "PREFIX=" out)
564 (string-append "BINDIR=" out "/bin/")
565 "USEPAK=1"
566 "RELEASE=1"))
567 #:phases
568 (modify-phases %standard-phases
569 (add-after 'unpack 'werror-begone
570 (lambda _
571 (substitute* "Makefile" (("-Werror") ""))
572 #t))
573 (delete 'configure)))) ;no configure script
574 (native-inputs
575 `(("gettext" ,gettext-minimal)
576 ("pkg-config" ,pkg-config)))
577 (inputs
578 `(("hicolor-icon-theme" ,hicolor-icon-theme)
579 ("sdl" ,(sdl-union (list sdl2
580 sdl2-image
581 sdl2-mixer
582 sdl2-ttf
583 sdl2-net)))))
584 (home-page "https://sourceforge.net/projects/blobwars/")
585 (synopsis "Platform action game featuring a blob with a lot of weapons")
586 (description "Blobwars: Metal Blob Solid is a 2D platform game, the first
587 in the Blobwars series. You take on the role of a fearless Blob agent. Your
588 mission is to infiltrate various enemy bases and rescue as many MIAs as
589 possible, while battling many vicious aliens.")
590 (license (list license:gpl2 ; For code and graphics
591 license:cc0 ; Music and sounds have specific licenses
592 license:cc-by3.0 ; see /doc/readme
593 license:cc-by-sa3.0
594 license:lgpl2.1+
595 license:bsd-2))))
596
597 (define-public bsd-games
598 (package
599 (name "bsd-games")
600 (version "2.17.0")
601 (source
602 (origin
603 (method url-fetch)
604 (uri "https://ibiblio.org/pub/linux/games/bsd-games-2.17.tar.gz")
605 (sha256
606 (base32 "0q7zdyyfvn15y0w4g54kq3gza89h61py727m8slmw73cxx594vq6"))
607 (patches
608 (search-patches
609 ;; thanks Arch, and Debian
610 "bsd-games-2.17-64bit.patch"
611 "bsd-games-bad-ntohl-cast.patch"
612 "bsd-games-gamescreen.h.patch"
613 "bsd-games-getline.patch"
614 "bsd-games-null-check.patch"
615 "bsd-games-number.c-and-test.patch"
616 "bsd-games-stdio.h.patch"
617 "bsd-games-prevent-name-collisions.patch"
618 ;; Guix customizations
619 "bsd-games-add-configure-config.patch"
620 "bsd-games-dont-install-empty-files.patch"
621 "bsd-games-add-wrapper.patch"))))
622 (build-system gnu-build-system)
623 (native-inputs
624 `(("flex" ,flex)
625 ("bison" ,bison)))
626 (inputs
627 `(("curses" ,ncurses)
628 ("pager" ,less)
629 ("miscfiles" ,miscfiles)
630 ("openssl" ,openssl))) ;used only by 'factor'
631 (arguments
632 `(#:phases
633 (modify-phases %standard-phases
634 (replace 'configure
635 (lambda* (#:key outputs inputs #:allow-other-keys)
636 (let* ((out (assoc-ref outputs "out"))
637 (bin (string-append out "/bin"))
638 (doc (string-append out "/share/doc/bsd-games-" ,version))
639 (man (string-append out "/share/man"))
640 (word-list (string-append (assoc-ref inputs "miscfiles")
641 "/share/web2"))
642 (static-data (string-append out "/share/games/bsd-games"))
643 ;; Not a "./" because of substitute* in 'patch-install
644 ;; below. The .// allow us not to mess with the games'
645 ;; code any further: we just use a wrapper script that
646 ;; cd's to a BSD_GAMES_DIR. :]
647 (save-files ".//"))
648 (substitute* "configure"
649 (("/usr/share/man") man)
650 (("/usr/share/doc/bsd-games") doc)
651 (("/usr/share/[^\n/]*") static-data)
652 (("/var/games") save-files)
653 (("/usr/bin/less") (which "less"))
654 (("(/usr/bin|/usr/games)") bin))
655 (substitute* "config.params" (("WORD_LIST") word-list))
656 (substitute* "wrapper" (("STATIC_DATA") static-data))
657 (invoke "./configure"))
658 #t))
659 (add-before 'install 'patch-install
660 ;; Some games need a writable directory containing pre-maded files.
661 ;; The files get installed to the Store. Then the wrapper kicks in.
662 (lambda* (#:key outputs #:allow-other-keys)
663 (let* ((out (assoc-ref outputs "out"))
664 (static-data (string-append out "/share/games/bsd-games"))
665 (save-files ".//"))
666 (substitute* "Makeconfig" ((save-files) static-data)))
667 #t))
668 (add-after 'install 'install-documents
669 (lambda* (#:key outputs #:allow-other-keys)
670 (let* ((out (assoc-ref outputs "out"))
671 (doc (string-append out "/share/doc/bsd-games-" ,version)))
672 (rename-file "phantasia/COPYRIGHT" "phantasia-COPYRIGHT")
673 (for-each
674 (lambda(file) (install-file file doc))
675 '("AUTHORS" "BUGS" "README" "SECURITY" "THANKS"
676 "phantasia-COPYRIGHT")))
677 #t)))))
678 (home-page "https://github.com/vattam/BSDGames")
679 (synopsis "Collection of the old text-based games and amusements")
680 (description
681 "These are the BSD games. See the fortune-mod package for fortunes.
682
683 Action: atc (keep the airplanes safe), hack (explore the dangerous Dungeon),
684 hunt (kill the others for the Pair of Boots, multi-player only), robots (avoid
685 the evil robots), sail (game of naval warfare with wooden ships), snake (steal
686 the $$ from the cave, anger the snake, and get out alive), tetris (game of
687 lining up the falling bricks of different shapes), and worm (eat, grow big,
688 and neither bite your tail, nor ram the wall).
689
690 Amusements: banner (prints a large banner), bcd & morse & ppt (print a punch
691 card, or paper tape, or Morse codes), caesar & rot13 (ciphers and deciphers
692 the input), factor (factorizes a number), number (translates numbers into
693 text), pig (translates from English to Pig Latin), pom (should print the
694 Moon's phase), primes (generates primes), rain & worms (plays an screen-saver
695 in terminal), random (prints randomly chosen lines from files, or returns a
696 random exit-code), and wtf (explains what do some acronyms mean).
697
698 Board: backgammon (lead the men out of board faster than the friend do),
699 boggle (find the words in the square of letters), dab (game of dots and
700 boxes), gomoku (game of five in a row), hangman (guess a word before man is
701 hanged), and monop (game of monopoly, hot-seat only). Also the card-games:
702 canfield, cribbage, fish (juniors game), and mille.
703
704 Quests: adventure (search for treasures with the help of wizard),
705 battlestar (explore the world around, starting from dying spaceship),
706 phantasia (role-play as an rogue), trek (hunt the Klingons, and save the
707 Federation), and wump (hunt the big smelly Wumpus in a dark cave).
708
709 Quizes: arithmetic, and quiz.")
710 ;; "Auxiliary and data files, distributed with the games in NetBSD, but
711 ;; not bearing copyright notices, probably fall under the terms of the UCB
712 ;; or NetBSD copyrights and licences. The file "fortune/Notes" contains a
713 ;; warning in regard to the fortune databases."
714 (license (list
715 ;; Most games. Files: countmail/countmail.6, dab/dab.6,
716 ;; lib/strlcpy.c, wargames/wargames.6
717 license:bsd-3
718 ;; dab and hunt. Files: adventure/extern.h,
719 ;; backgammon/backgammon/backlocal.h, caesar/rot13.in,
720 ;; countmail/countmail, dm/utmpentry.c, dm/utmpentry.h,
721 ;; hack/extern.h, robots/auto.c, sail/display.h,
722 ;; sail/restart.h, wargames/wargames
723 license:bsd-4
724 ;; wtf (the game)
725 license:public-domain
726 ;; phantasia (all but phantasia/pathnames.h.in, which is bsd-3)
727 (license:fsf-free "file:///phantasia/COPYRIGHT")))))
728
729
730 (define-public bzflag
731 (package
732 (name "bzflag")
733 (version "2.4.20")
734 (source
735 (origin
736 (method url-fetch)
737 (uri (string-append "https://download.bzflag.org/bzflag/source/"
738 version "/bzflag-" version ".tar.bz2"))
739 (sha256
740 (base32 "16brxqmfiyz4j4lb8ihzjcbwqmpsms6vm3ijbp34lnw0blbwdjb2"))))
741 (build-system gnu-build-system)
742 (arguments
743 `(#:phases
744 (modify-phases %standard-phases
745 (add-after 'install 'install-desktop-file-and-icons
746 (lambda* (#:key outputs #:allow-other-keys)
747 (let* ((share (string-append (assoc-ref outputs "out") "/share"))
748 (data (string-append share "/bzflag"))
749 (hicolor (string-append share "/icons/hicolor"))
750 (applications (string-append share "/applications")))
751 ;; Move desktop file.
752 (install-file (string-append data "/bzflag.desktop")
753 applications)
754 ;; Install icons.
755 (for-each (lambda (size)
756 (let* ((dim (string-append size "x" size))
757 (dir (string-append hicolor "/" dim "/apps")))
758 (mkdir-p dir)
759 (copy-file
760 (string-append data "/bzflag-" dim ".png")
761 (string-append dir "/bzflag.png"))))
762 '("48" "256")))
763 #t)))))
764 (native-inputs
765 `(("pkg-config" ,pkg-config)))
766 (inputs
767 `(("c-ares" ,c-ares)
768 ("curl" ,curl)
769 ("glew" ,glew)
770 ("glu" ,glu)
771 ("sdl2" ,sdl2)
772 ("zlib" ,zlib)))
773 (home-page "https://www.bzflag.org/")
774 (synopsis "3D first person tank battle game")
775 (description
776 "BZFlag is a 3D multi-player multiplatform tank battle game that
777 allows users to play against each other in a network environment.
778 There are five teams: red, green, blue, purple and rogue (rogue tanks
779 are black). Destroying a player on another team scores a win, while
780 being destroyed or destroying a teammate scores a loss. Rogues have
781 no teammates (not even other rogues), so they cannot shoot teammates
782 and they do not have a team score.
783
784 There are two main styles of play: capture-the-flag and free-for-all.
785 In capture-the-flag, each team (except rogues) has a team base and
786 each team with at least one player has a team flag. The object is to
787 capture an enemy team's flag by bringing it to your team's base. This
788 destroys every player on the captured team, subtracts one from that
789 team's score, and adds one to your team's score. In free-for-all,
790 there are no team flags or team bases. The object is simply to get as
791 high a score as possible.")
792 ;; The game is dual-licensed.
793 (license (list license:lgpl2.1 license:mpl2.0))))
794
795 (define-public cataclysm-dda
796 (package
797 (name "cataclysm-dda")
798 (version "0.E-3")
799 (source
800 (origin
801 (method git-fetch)
802 (uri (git-reference
803 (url "https://github.com/CleverRaven/Cataclysm-DDA")
804 (commit version)))
805 (sha256
806 (base32 "108cs6vp99qmqqfnmczad0xjgcl82bypm5xszwnlfcswdsrfs4da"))
807 (file-name (git-file-name name version))))
808 (build-system gnu-build-system)
809 (arguments
810 '(#:make-flags
811 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
812 "USE_HOME_DIR=1" "DYNAMIC_LINKING=1" "RELEASE=1"
813 "LOCALIZE=1" "LANGUAGES=all")
814 #:phases
815 (modify-phases %standard-phases
816 (delete 'configure)
817 (add-after 'build 'build-tiles
818 (lambda* (#:key make-flags outputs #:allow-other-keys)
819 ;; Change prefix directory and enable tile graphics and sound.
820 (apply invoke "make" "TILES=1" "SOUND=1"
821 (string-append "PREFIX="
822 (assoc-ref outputs "tiles"))
823 (cdr make-flags))))
824 (add-after 'install 'install-tiles
825 (lambda* (#:key make-flags outputs #:allow-other-keys)
826 (apply invoke "make" "install" "TILES=1" "SOUND=1"
827 (string-append "PREFIX="
828 (assoc-ref outputs "tiles"))
829 (cdr make-flags)))))
830 ;; TODO: Add libtap++ from https://github.com/cbab/libtappp as a native
831 ;; input in order to support tests.
832 #:tests? #f))
833 (outputs '("out"
834 "tiles")) ;for tile graphics and sound support
835 (native-inputs
836 `(("gettext" ,gettext-minimal)
837 ("pkg-config" ,pkg-config)))
838 (inputs
839 `(("freetype" ,freetype)
840 ("libogg" ,libogg)
841 ("libvorbis" ,libvorbis)
842 ("ncurses" ,ncurses)
843 ("sdl2" ,sdl2)
844 ("sdl2-image" ,sdl2-image)
845 ("sdl2-ttf" ,sdl2-ttf)
846 ("sdl2-mixer" ,sdl2-mixer)))
847 (home-page "https://cataclysmdda.org/")
848 (synopsis "Survival horror roguelike video game")
849 (description
850 "Cataclysm: Dark Days Ahead (or \"DDA\" for short) is a roguelike set
851 in a post-apocalyptic world. Struggle to survive in a harsh, persistent,
852 procedurally generated world. Scavenge the remnants of a dead civilization
853 for food, equipment, or, if you are lucky, a vehicle with a full tank of gas
854 to get you out of Dodge. Fight to defeat or escape from a wide variety of
855 powerful monstrosities, from zombies to giant insects to killer robots and
856 things far stranger and deadlier, and against the others like yourself, that
857 want what you have.")
858 (license license:cc-by-sa3.0)))
859
860 (define-public corsix-th
861 (package
862 (name "corsix-th")
863 (version "0.64")
864 (source
865 (origin
866 (method git-fetch)
867 (uri (git-reference
868 (url "https://github.com/CorsixTH/CorsixTH")
869 (commit (string-append "v" version))))
870 (file-name (git-file-name name version))
871 (sha256
872 (base32 "0chh9cv2kdc39sr0x8hclcyzd8dz2y6grgagqzkvr7j570wa5cqh"))))
873 (build-system cmake-build-system)
874 (arguments
875 `(#:phases
876 (modify-phases %standard-phases
877 (add-after 'install 'wrap-binary
878 (lambda _
879 ;; Set Lua module paths and default MIDI soundfont on startup.
880 (let* ((out (assoc-ref %outputs "out"))
881 (fluid (assoc-ref %build-inputs "fluid-3"))
882 (lua-version ,(version-major+minor (package-version lua)))
883 (lua-cpath
884 (map (lambda (lib)
885 (string-append
886 (assoc-ref %build-inputs (string-append "lua-" lib))
887 "/lib/lua/" lua-version "/?.so"))
888 '("filesystem" "lpeg"))))
889 (wrap-program (string-append out "/bin/corsix-th")
890 `("LUA_CPATH" ";" = ,lua-cpath)
891 `("SDL_SOUNDFONTS" ":" suffix
892 (,(string-append fluid "/share/soundfonts/FluidR3Mono_GM.sf3")))))
893 #t)))
894 #:tests? #f)) ; TODO need busted package to run tests
895 ;; Omit Lua-Socket dependency to disable automatic updates.
896 (inputs
897 `(("ffmpeg" ,ffmpeg)
898 ("fluid-3" ,fluid-3)
899 ("freetype" ,freetype)
900 ("lua" ,lua)
901 ("lua-filesystem" ,lua-filesystem)
902 ("lua-lpeg" ,lua-lpeg)
903 ("sdl2" ,sdl2)
904 ("sdl2-mixer" ,sdl2-mixer)))
905 (home-page "https://corsixth.com")
906 (synopsis "Implementation of the @i{Theme Hospital} game engine")
907 (description
908 "This package provides a reimplementation of the 1997 Bullfrog business
909 simulation game @i{Theme Hospital}. As well as faithfully recreating the
910 original engine, CorsixTH adds support for high resolutions, custom levels and
911 more. This package does @emph{not} provide the game assets.")
912 (license (list
913 license:expat ; main license
914 license:bsd-3)))) ; CorsixTH/Src/random.c
915
916 (define-public cowsay
917 (package
918 (name "cowsay")
919 (version "3.04")
920 (source (origin
921 (method git-fetch)
922 (uri (git-reference
923 (url "https://github.com/tnalpgge/rank-amateur-cowsay")
924 (commit (string-append name "-" version))))
925 (file-name (git-file-name name version))
926 (sha256
927 (base32
928 "06455kq37hvq1xb7adyiwrx0djs50arsxvjgixyxks16lm1rlc7n"))))
929 (build-system gnu-build-system)
930 (arguments
931 `(#:phases
932 (modify-phases %standard-phases
933 (delete 'configure) ; no configure script
934 (delete 'build) ; nothing to be built
935 (replace 'install
936 (lambda* (#:key outputs #:allow-other-keys)
937 (invoke "sh" "install.sh"
938 (assoc-ref outputs "out"))))
939 (delete 'check)
940 (add-after 'install 'check
941 (lambda* (#:key outputs #:allow-other-keys)
942 (invoke (string-append (assoc-ref outputs "out")
943 "/bin/cowsay")
944 "We're done!"))))))
945 (inputs
946 `(("perl" ,perl)))
947 (home-page (string-append "https://web.archive.org/web/20071026043648/"
948 "http://www.nog.net:80/~tony/warez/cowsay.shtml"))
949 (synopsis "Speaking cow text filter")
950 (description "Cowsay is basically a text filter. Send some text into it,
951 and you get a cow saying your text. If you think a talking cow isn't enough,
952 cows can think too: all you have to do is run @command{cowthink}. If you're
953 tired of cows, a variety of other ASCII-art messengers are available.")
954 (license license:gpl3+)))
955
956 (define-public lolcat
957 (let ((commit "35dca3d0a381496d7195cd78f5b24aa7b62f2154")
958 (revision "0"))
959 (package
960 (name "lolcat")
961 (version (git-version "1.0" revision commit))
962 (source
963 (origin
964 (method git-fetch)
965 (uri (git-reference
966 (url "https://github.com/jaseg/lolcat")
967 (commit commit)))
968 (sha256
969 (base32
970 "0jjbkqcc2ikjxd1xgdyv4rb0vsw218181h89f2ywg29ffs3ypd8g"))
971 (file-name (git-file-name name version))))
972 (build-system gnu-build-system)
973 (arguments
974 `(#:tests? #f ; no check target
975 #:make-flags
976 (list ,(string-append "CC=" (cc-for-target)))
977 #:phases
978 (modify-phases %standard-phases
979 (delete 'bootstrap)
980 (delete 'configure)
981 (replace 'install
982 (lambda* (#:key outputs #:allow-other-keys)
983 (let* ((out (assoc-ref outputs "out"))
984 (dest (string-append out "/bin")))
985 (mkdir-p dest)
986 (install-file "lolcat" dest)
987 (install-file "censor" dest)
988 #t))))))
989 (home-page "https://github.com/jaseg/lolcat")
990 (synopsis "Rainbow coloring effect for text console display")
991 (description "@command{lolcat} concatenates files and streams like
992 regular @command{cat}, but it also adds terminal escape codes between
993 characters and lines resulting in a rainbow effect.")
994 (license license:wtfpl2))))
995
996 (define-public foobillard++
997 ;; Even though this latest revision is old already, stable release is
998 ;; lagging way behind it, and has issues with textures rendering.
999 (let ((svn-revision 170))
1000 (package
1001 (name "foobillard++")
1002 (version (string-append "3.43-r" (number->string svn-revision)))
1003 (source
1004 (origin
1005 (method svn-fetch)
1006 (uri (svn-reference
1007 (url "svn://svn.code.sf.net/p/foobillardplus/code/")
1008 (revision svn-revision)))
1009 (file-name (git-file-name name version))
1010 (sha256
1011 (base32 "00b693ys5zvzjbjzzj3dqfzm5xw64gwjf9m8qv6bkmf0klbhmayk"))
1012 (patches
1013 (search-patches "foobillard++-pkg-config.patch"))
1014 (modules '((guix build utils)))
1015 (snippet
1016 '(begin
1017 ;; Unfortunately, the game includes background music with
1018 ;; a non-commercial clause. Delete it.
1019 (for-each delete-file (find-files "data/music" "\\.ogg$"))
1020 #t))))
1021 (build-system gnu-build-system)
1022 (arguments
1023 `(#:configure-flags
1024 (list
1025 ;; Install data in a less exotic location.
1026 (string-append "--prefix=" (assoc-ref %outputs "out") "/share")
1027 ;; Prevent a build error about undefined trigonometric functions.
1028 "--enable-fastmath=no")
1029 #:phases
1030 (modify-phases %standard-phases
1031 (add-after 'unpack 'fix-makefile
1032 ;; Remove hard-coded directories. Also fix installation
1033 ;; rule: it tries to move around non-existent files or
1034 ;; files already moved.
1035 (lambda* (#:key outputs #:allow-other-keys)
1036 (substitute* "Makefile.am"
1037 (("/usr") (assoc-ref outputs "out"))
1038 (("cp .*?/foobillardplus\\.desktop.*") "")
1039 (("cp .*?/foobillardplus\\.(png|xbm) \\$\\(datarootdir\\).*")
1040 ""))
1041 #t))
1042 (add-after 'unpack 'unbundle-font
1043 ;; XXX: The package ships with LinBiolinum_aSB.ttf and
1044 ;; LinBiolinum_aS.ttf, which are not provided by
1045 ;; `font-linuxlibertine' package. Therefore, we cannot replace
1046 ;; them yet.
1047 (lambda* (#:key inputs #:allow-other-keys)
1048 (let ((dejavu (string-append (assoc-ref inputs "font-dejavu")
1049 "/share/fonts/truetype/")))
1050 (with-directory-excursion "data"
1051 (for-each (lambda (f)
1052 (delete-file f)
1053 (symlink (string-append dejavu f) f))
1054 '("DejaVuSans-Bold.ttf" "DejaVuSans.ttf"))))
1055 #t))
1056 (replace 'bootstrap
1057 (lambda _
1058 (invoke "aclocal" "--force")
1059 (invoke "autoconf" "-f")
1060 (invoke "autoheader" "-f")
1061 (invoke "automake" "-a" "-c" "-f")))
1062 (add-before 'build 'prepare-build
1063 ;; Set correct environment for SDL.
1064 (lambda* (#:key inputs #:allow-other-keys)
1065 (setenv "CPATH"
1066 (string-append (assoc-ref inputs "sdl")
1067 "/include/SDL:"
1068 (or (getenv "CPATH") "")))
1069 #t))
1070 (add-before 'build 'fix-settings-directory
1071 ;; Hide foobillardplus settings directory in $HOME.
1072 (lambda _
1073 (substitute* "src/history.c"
1074 (("/foobillardplus-data") "/.foobillardplus"))
1075 #t))
1076 (add-before 'install 'create-directories
1077 ;; Install process does not create directories before
1078 ;; trying to move file in it.
1079 (lambda* (#:key outputs #:allow-other-keys)
1080 (let ((out (assoc-ref outputs "out")))
1081 (mkdir-p (string-append out "/share/icons"))
1082 (mkdir-p (string-append out "/share/applications")))
1083 #t))
1084 (add-after 'install 'symlink-executable
1085 ;; Symlink executable to $out/bin.
1086 (lambda* (#:key outputs #:allow-other-keys)
1087 (let* ((out (assoc-ref outputs "out"))
1088 (bin (string-append out "/bin")))
1089 (mkdir-p bin)
1090 (with-directory-excursion bin
1091 (symlink "../share/foobillardplus/bin/foobillardplus"
1092 "foobillardplus"))
1093 #t))))))
1094 (native-inputs
1095 `(("autoconf" ,autoconf)
1096 ("automake" ,automake)
1097 ("pkg-config" ,pkg-config)))
1098 (inputs
1099 `(("font-dejavu" ,font-dejavu)
1100 ("freetype" ,freetype)
1101 ("glu" ,glu)
1102 ("libpng" ,libpng)
1103 ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-net)))))
1104 (home-page "http://foobillardplus.sourceforge.net/")
1105 (synopsis "3D billiard game")
1106 (description "FooBillard++ is an advanced 3D OpenGL billiard game
1107 based on the original foobillard 3.0a sources from Florian Berger.
1108 You can play it with one or two players or against the computer.
1109
1110 The game features:
1111
1112 @itemize
1113 @item Wood paneled table with gold covers and gold diamonds.
1114 @item Reflections on balls.
1115 @item Zoom in and out, rotation, different angles and bird's eye view.
1116 @item Different game modes: 8 or 9-ball, Snooker or Carambole.
1117 @item Tournaments. Compete against other players.
1118 @item Animated cue with strength and eccentric hit adjustment.
1119 @item Jump shots and snipping.
1120 @item Realistic gameplay and billiard sounds.
1121 @item Red-Green stereo.
1122 @item And much more.
1123 @end itemize")
1124 (license (list license:gpl2 license:silofl1.1)))))
1125
1126 (define-public freedoom
1127 (package
1128 (name "freedoom")
1129 (version "0.12.1")
1130 (source
1131 (origin
1132 (method git-fetch)
1133 (uri (git-reference
1134 (url "https://github.com/freedoom/freedoom")
1135 (commit (string-append "v" version))))
1136 (file-name (git-file-name name version))
1137 (sha256
1138 (base32 "1mq60lfwaaxmch7hsz8403pwafnlsmsd5z2df2j77ppwndwcrypb"))))
1139 (build-system gnu-build-system)
1140 (arguments
1141 '(#:make-flags
1142 (list (string-append "prefix=" (assoc-ref %outputs "out")))
1143 #:tests? #f ; no check target
1144 #:phases
1145 (modify-phases %standard-phases
1146 (delete 'bootstrap)
1147 (replace 'configure
1148 (lambda* (#:key inputs outputs #:allow-other-keys)
1149 (let* ((freedoom (assoc-ref outputs "out"))
1150 (wad-dir (string-append freedoom "/share/games/doom")))
1151 ;; Make sure that the install scripts know where to find
1152 ;; the appropriate WAD files.
1153 (substitute* "dist/freedoom"
1154 (("IWAD=freedm.wad")
1155 (string-append "IWAD=" wad-dir "/freedm.wad"))
1156 (("IWAD=freedoom1.wad")
1157 (string-append "IWAD=" wad-dir "/freedoom1.wad"))
1158 (("IWAD=freedoom2.wad")
1159 (string-append "IWAD=" wad-dir "/freedoom2.wad")))
1160 #t))))))
1161 (native-inputs
1162 `(("asciidoc" ,asciidoc)
1163 ("deutex" ,deutex)
1164 ("python" ,python)
1165 ("python-pillow" ,python-pillow)))
1166 (home-page "https://freedoom.github.io/")
1167 (synopsis "Free content game based on the Doom engine")
1168 (native-search-paths
1169 (list (search-path-specification
1170 (variable "DOOMWADDIR")
1171 (files '("share/games/doom")))
1172 (search-path-specification
1173 (variable "DOOMWADPATH")
1174 (files '("share/games/doom")))))
1175 (description
1176 "The Freedoom project aims to create a complete free content first person
1177 shooter game. Freedoom by itself is just the raw material for a game: it must
1178 be paired with a compatible game engine (such as @code{prboom-plus}) to be
1179 played. Freedoom complements the Doom engine with free levels, artwork, sound
1180 effects and music to make a completely free game.")
1181 (license license:bsd-3)))
1182
1183 (define-public freedroidrpg
1184 (package
1185 (name "freedroidrpg")
1186 (version "0.16.1")
1187 (source
1188 (origin
1189 (method url-fetch)
1190 (uri (string-append "http://ftp.osuosl.org/pub/freedroid/"
1191 "freedroidRPG-" (version-major+minor version) "/"
1192 "freedroidRPG-" version ".tar.gz"))
1193 (sha256
1194 (base32 "0n4kn38ncmcy3lrxmq8fjry6c1z50z4q1zcqfig0j4jb0dsz2va2"))))
1195 (build-system gnu-build-system)
1196 (arguments
1197 `(#:configure-flags
1198 (list
1199 (string-append "CFLAGS="
1200 "-I" (assoc-ref %build-inputs "sdl-gfx") "/include/SDL "
1201 "-I" (assoc-ref %build-inputs "sdl-image") "/include/SDL "
1202 "-I" (assoc-ref %build-inputs "sdl-mixer") "/include/SDL")
1203 "--enable-opengl")
1204 ;; FIXME: the test suite fails with the following error output:
1205 ;; 4586 Segmentation fault env SDL_VIDEODRIVER=dummy \
1206 ;; SDL_AUDIODRIVER=dummy ./src/freedroidRPG -nb text
1207 #:tests? #f))
1208 (native-inputs
1209 `(("pkg-config" ,pkg-config)))
1210 (inputs
1211 `(("glu" ,glu)
1212 ("libjpeg" ,libjpeg-turbo)
1213 ("libogg" ,libogg)
1214 ("libpng" ,libpng)
1215 ("libvorbis" ,libvorbis)
1216 ("mesa" ,mesa)
1217 ("python" ,python-wrapper)
1218 ("sdl" ,sdl)
1219 ("sdl-gfx" ,sdl-gfx)
1220 ("sdl-image" ,sdl-image)
1221 ("sdl-mixer" ,sdl-mixer)
1222 ("zlib" ,zlib)))
1223 (home-page "https://www.freedroid.org/")
1224 (synopsis "Isometric role-playing game against killer robots")
1225 (description
1226 "Freedroid RPG is an @dfn{RPG} (Role-Playing Game) with isometric graphics.
1227 The game tells the story of a world destroyed by a conflict between robots and
1228 their human masters. To restore peace to humankind, the player must complete
1229 numerous quests while fighting off rebelling robots---either by taking control
1230 of them, or by simply blasting them to pieces with melee and ranged weapons in
1231 real-time combat.")
1232 (license (list license:expat ; lua/
1233 license:gpl3 ; src/gen_savestruct.py
1234 license:gpl2+)))) ; the rest
1235
1236 (define-public golly
1237 (package
1238 (name "golly")
1239 (version "3.3")
1240 (source (origin
1241 (method url-fetch)
1242 (uri (string-append "mirror://sourceforge/golly/golly/golly-"
1243 version "/golly-" version
1244 "-src.tar.gz"))
1245 (sha256
1246 (base32
1247 "1j3ksnar4rdam4xiyspgyrs1pifbvxfxkrn65brkwxpx39mpgzc8"))))
1248 (build-system gnu-build-system)
1249 (arguments
1250 '(#:make-flags (list "CC=gcc"
1251 (string-append "GOLLYDIR="
1252 (assoc-ref %outputs "out")
1253 "/share/golly"))
1254 #:tests? #f ; no check target
1255 #:phases
1256 (modify-phases %standard-phases
1257 (replace 'configure
1258 (lambda* (#:key inputs #:allow-other-keys)
1259 ;; For some reason, setting the PYTHON_SHLIB make flag doesn't
1260 ;; properly set the path to the Python shared library. This
1261 ;; substitution acheives the same end by different means.
1262 (substitute* "gui-wx/wxprefs.cpp"
1263 (("pythonlib = wxT\\(STRINGIFY\\(PYTHON_SHLIB\\)\\)")
1264 (string-append "pythonlib = \""
1265 (assoc-ref inputs "python")
1266 "/lib/libpython-2.7.so\"")))
1267 #t))
1268 (replace 'build
1269 (lambda* (#:key make-flags outputs #:allow-other-keys)
1270 (with-directory-excursion "gui-wx"
1271 (apply invoke `("make" ,@make-flags "-f" "makefile-gtk")))))
1272 (replace 'install
1273 (lambda* (#:key outputs #:allow-other-keys)
1274 (let* ((out (assoc-ref outputs "out"))
1275 (bin (string-append out "/bin"))
1276 (doc (string-append out "/share/doc/golly"))
1277 (pixmaps (string-append out "/share/pixmaps"))
1278 (share (string-append out "/share/golly")))
1279 (for-each (lambda (binary)
1280 (install-file binary bin))
1281 '("bgolly" "golly"))
1282 (for-each (lambda (document)
1283 (install-file
1284 (string-append "docs/" document ".html")
1285 doc))
1286 '("License" "ReadMe" "ToDo"))
1287 (install-file "gui-wx/icons/appicon.xpm" pixmaps)
1288 (for-each (lambda (folder)
1289 (copy-recursively
1290 folder
1291 (string-append share "/" folder)))
1292 '("Help" "Patterns" "Rules" "Scripts")))
1293 #t)))))
1294 (native-inputs
1295 `(("lua" ,lua)))
1296 (inputs
1297 `(("glu" ,glu)
1298 ("mesa" ,mesa)
1299 ("python" ,python-2)
1300 ("wxwidgets" ,wxwidgets-gtk2)
1301 ("zlib" ,zlib)))
1302 (home-page "http://golly.sourceforge.net/")
1303 (synopsis "Software for exploring cellular automata")
1304 (description
1305 "Golly simulates Conway's Game of Life and many other types of cellular
1306 automata. The following features are available:
1307 @enumerate
1308 @item Support for bounded and unbounded universes, with cells of up to 256
1309 states.
1310 @item Support for multiple algorithms, including Bill Gosper's Hashlife
1311 algorithm.
1312 @item Loading patterns from BMP, PNG, GIF and TIFF image files.
1313 @item Reading RLE, macrocell, Life 1.05/1.06, dblife and MCell files.
1314 @item Scriptable via Lua or Python.
1315 @item Extracting patterns, rules and scripts from zip files.
1316 @item Downloading patterns, rules and scripts from online archives.
1317 @item Pasting patterns from the clipboard.
1318 @item Unlimited undo/redo.
1319 @item Configurable keyboard shortcuts.
1320 @item Auto fit option to keep patterns within the view.
1321 @end enumerate")
1322 (license license:gpl2+)))
1323
1324 (define-public julius
1325 (package
1326 (name "julius")
1327 (version "1.6.0")
1328 (source
1329 (origin
1330 (method git-fetch)
1331 (uri (git-reference
1332 (url "https://github.com/bvschaik/julius")
1333 (commit (string-append "v" version))))
1334 (file-name (git-file-name name version))
1335 (sha256
1336 (base32 "0nfdn8n6ywhm69ckz9a1chl5xxiqyaj3l337wadsbppnpscjihrc"))
1337 ;; Remove unused bundled libraries.
1338 (modules '((guix build utils)))
1339 (snippet
1340 '(begin
1341 (with-directory-excursion "ext"
1342 (for-each delete-file-recursively '("dirent" "png" "SDL2" "zlib")))
1343 #t))))
1344 (build-system cmake-build-system)
1345 (inputs
1346 `(("libpng" ,libpng)
1347 ("sdl2" ,sdl2)
1348 ("sdl2-mixer" ,sdl2-mixer)))
1349 (home-page "https://github.com/bvschaik/julius")
1350 (synopsis "Re-implementation of Caesar III game engine")
1351 (description
1352 "Engine for Caesar III, a city-building real-time strategy game.
1353 Julius includes some UI enhancements while preserving the logic (including
1354 bugs) of the original game, so that saved games are compatible. This package
1355 does not include game data.")
1356 (license (list license:agpl3
1357 license:zlib)))) ; ext/tinyfiledialogs
1358
1359 (define-public augustus
1360 (package
1361 (inherit julius)
1362 (name "augustus")
1363 (version "2.0.1")
1364 (source
1365 (origin
1366 (method git-fetch)
1367 (uri (git-reference
1368 (url "https://github.com/Keriew/augustus")
1369 (commit (string-append "v" version))))
1370 (file-name (git-file-name name version))
1371 (sha256
1372 (base32 "0czazw8mc3fbvdazs2nzvgxd1dpzjc8z5fwiv89vv4nd7laz3jkj"))
1373 ;; Remove unused bundled libraries.
1374 (modules '((guix build utils)))
1375 (snippet
1376 '(begin
1377 (with-directory-excursion "ext"
1378 (for-each delete-file-recursively '("dirent" "png" "SDL2" "zlib")))
1379 #t))))
1380 (arguments
1381 ;; No tests. See https://github.com/Keriew/augustus/issues/82.
1382 `(#:tests? #f))
1383 (home-page "https://github.com/Keriew/augustus")
1384 (synopsis "Re-implementation of Caesar III game engine with gameplay changes")
1385 (description
1386 "Fork of Julius, an engine for the a city-building real-time strategy
1387 game Caesar III. Gameplay enhancements include:
1388
1389 @itemize
1390 @item roadblocks;
1391 @item market special orders;
1392 @item global labour pool;
1393 @item partial warehouse storage;
1394 @item increased game limits;
1395 @item zoom controls.
1396 @end itemize\n")))
1397
1398 (define-public meandmyshadow
1399 (package
1400 (name "meandmyshadow")
1401 (version "0.5a")
1402 (source (origin
1403 (method url-fetch)
1404 (uri (string-append "mirror://sourceforge/meandmyshadow/"
1405 version "/meandmyshadow-" version
1406 "-src.tar.gz"))
1407 (sha256
1408 (base32
1409 "0i98v6cgmpsxy7mbb0s2y6f6qq6mkwzk2nrv1nz39ncf948aky2h"))))
1410 (build-system cmake-build-system)
1411 (arguments
1412 `(#:tests? #f)) ; there are no tests
1413 (native-inputs
1414 `(("pkg-config" ,pkg-config)))
1415 (inputs
1416 `(("curl" ,curl)
1417 ("libarchive" ,libarchive)
1418 ("lua" ,lua)
1419 ("sdl" ,(sdl-union (list sdl2
1420 sdl2-image
1421 sdl2-mixer
1422 sdl2-ttf)))))
1423 (home-page "https://acmepjz.github.io/meandmyshadow/")
1424 (synopsis "Puzzle/platform game")
1425 (description "Me and My Shadow is a puzzle/platform game in which you try
1426 to reach the exit by solving puzzles. Spikes, moving blocks, fragile blocks
1427 and much more stand between you and the exit. Record your moves and let your
1428 shadow mimic them to reach blocks you couldn't reach alone.")
1429 (license license:gpl3+)))
1430
1431 (define-public opensurge
1432 (package
1433 (name "opensurge")
1434 (version "0.5.1.2")
1435 (source
1436 (origin
1437 (method git-fetch)
1438 (uri (git-reference
1439 (url "https://github.com/alemart/opensurge")
1440 (commit (string-append "v" version))))
1441 (file-name (git-file-name name version))
1442 (sha256
1443 (base32 "0ih7hlqjnp9rv0m4lqf7c0s1ai532way5i4pk45jq1gqm8325dbv"))))
1444 (build-system cmake-build-system)
1445 (arguments
1446 `(#:tests? #f ;there are no tests
1447 #:configure-flags
1448 (let* ((out (assoc-ref %outputs "out"))
1449 (share (string-append out "/share")))
1450 (list (string-append "-DCMAKE_INSTALL_PREFIX=" out "/bin")
1451 (string-append "-DGAME_DATADIR=" share "/" ,name)
1452 (string-append "-DDESKTOP_ENTRY_PATH=" share "/applications")
1453 (string-append "-DDESKTOP_ICON_PATH=" share "/pixmaps")
1454 (string-append "-DDESKTOP_METAINFO_PATH=" share "/metainfo")))
1455 #:phases
1456 (modify-phases %standard-phases
1457 (add-after 'unpack 'fix-xdg-open-path
1458 (lambda* (#:key inputs #:allow-other-keys)
1459 ;; Look for xdg-open in the store.
1460 (substitute* "src/core/web.c"
1461 (("/usr(/bin/xdg-open)" _ bin)
1462 (string-append (assoc-ref inputs "xdg-utils") bin)))
1463 #t))
1464 (add-after 'unpack 'unbundle-fonts
1465 (lambda* (#:key inputs #:allow-other-keys)
1466 ;; Replace bundled Roboto fonts with links to the store.
1467 (with-directory-excursion "fonts"
1468 (let ((roboto-dir (string-append
1469 (assoc-ref inputs "font-google-roboto")
1470 "/share/fonts/truetype/")))
1471 (for-each
1472 (lambda (font)
1473 (delete-file font)
1474 (symlink (string-append roboto-dir font) font))
1475 '("Roboto-Black.ttf" "Roboto-Bold.ttf" "Roboto-Medium.ttf")))
1476 #t))))))
1477 (inputs
1478 `(("allegro" ,allegro)
1479 ("font-google-roboto" ,font-google-roboto)
1480 ("surgescript" ,surgescript)
1481 ("xdg-utils" ,xdg-utils)))
1482 (home-page "https://opensurge2d.org")
1483 (synopsis "2D retro side-scrolling game")
1484 (description "@code{Open Surge} is a 2D retro side-scrolling platformer
1485 inspired by the Sonic games. The player runs at high speeds through each
1486 level while collecting items and avoiding obstacles. The game includes a
1487 built-in level editor.")
1488 (license
1489 ;; Code is under GPL 3+, assets are under various licenses.
1490 ;; See src/misc/credits.c for details.
1491 (list license:gpl3+
1492 license:cc0
1493 license:cc-by3.0
1494 license:cc-by-sa3.0
1495 license:expat
1496 license:public-domain
1497 license:silofl1.1))))
1498
1499 (define-public knights
1500 (package
1501 (name "knights")
1502 (version "025")
1503 (source (origin
1504 (method url-fetch)
1505 (uri (string-append "http://www.knightsgame.org.uk/files/knights_"
1506 version "_src.tar.gz"))
1507 (sha256
1508 (base32
1509 "18vp2ygvn0s0jz8rm585jqf6hjqkam1ximq81k0r9hpmfj7wb88f"))))
1510 (build-system gnu-build-system)
1511 (arguments
1512 '(#:make-flags
1513 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
1514 "CXXFLAGS=-lpthread")
1515 #:phases
1516 (modify-phases %standard-phases
1517 ;; No configure script.
1518 (delete 'configure))
1519 #:tests? #f)) ;; No check target.
1520 (inputs
1521 `(("boost" ,boost)
1522 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
1523 ("freetype" ,freetype)
1524 ("fontconfig" ,fontconfig)
1525 ("curl" ,curl)))
1526 (native-inputs
1527 `(("pkg-config" ,pkg-config)))
1528 (home-page "http://www.knightsgame.org.uk/")
1529 (synopsis "Multiplayer dungeon game involving knights and quests")
1530 (description "Knights is a multiplayer game involving several knights who
1531 must run around a dungeon and complete various quests. Each game revolves
1532 around a quest – for example, you might have to find some items and carry them
1533 back to your starting point. This may sound easy, but as there are only
1534 enough items in the dungeon for one player to win, you may end up having to
1535 kill your opponents to get their stuff! Other quests involve escaping from
1536 the dungeon, fighting a duel to the death against the enemy knights, or
1537 destroying an ancient book using a special wand.")
1538 ;; This package includes modified sources of lua (X11), enet (Expat), and
1539 ;; guichan (BSD-3). The "Coercri" library is released under the Boost
1540 ;; license. The whole package is released under GPLv3+.
1541 (license license:gpl3+)))
1542
1543 (define-public gnome-chess
1544 (package
1545 (name "gnome-chess")
1546 (version "3.37.3")
1547 (source (origin
1548 (method url-fetch)
1549 (uri (string-append "mirror://gnome/sources/gnome-chess/"
1550 (version-major+minor version) "/"
1551 "gnome-chess-" version ".tar.xz"))
1552 (sha256
1553 (base32
1554 "09axf0q1mp13sv8cs0syfg8ahcd9r2qb26278r09j6s4njxmkfv4"))))
1555 (build-system meson-build-system)
1556 (arguments
1557 '(#:glib-or-gtk? #t
1558 #:phases
1559 (modify-phases %standard-phases
1560 (add-after 'unpack 'skip-gtk-update-icon-cache
1561 ;; Don't create 'icon-theme.cache'.
1562 (lambda _
1563 (substitute* "meson_post_install.py"
1564 (("gtk-update-icon-cache") "true"))
1565 #t)))))
1566 (inputs
1567 `(("gtk+" ,gtk+)
1568 ("librsvg" ,librsvg)))
1569 (native-inputs
1570 `(("gettext" ,gettext-minimal)
1571 ("glib:bin" ,glib "bin") ; for desktop-file-validate and appstream-util
1572 ("itstool" ,itstool)
1573 ("pkg-config" ,pkg-config)
1574 ("vala" ,vala)))
1575 (home-page "https://wiki.gnome.org/Apps/Chess")
1576 (synopsis "Chess board for GNOME")
1577 (description "GNOME Chess provides a 2D board for playing chess games
1578 against human or computer players. It supports loading and saving games in
1579 Portable Game Notation. To play against a computer, install a chess engine
1580 such as chess or stockfish.")
1581 (license license:gpl3+)))
1582
1583 (define-public gnubg
1584 (package
1585 (name "gnubg")
1586 (version "1.06.002")
1587 (source
1588 (origin
1589 (method url-fetch)
1590 (uri (string-append "mirror://gnu/gnubg/gnubg-release-"
1591 version "-sources.tar.gz"))
1592 (sha256
1593 (base32
1594 "11xwhcli1h12k6rnhhyq4jphzrhfik7i8ah3k32pqw803460n6yf"))))
1595 (build-system gnu-build-system)
1596 (inputs `(;; XXX: Build with an older Pango for 'pango_font_get_hb_font' and
1597 ;; 'pango_coverage_get_type'. Try removing this for versions > 1.06.002.
1598 ("pango" ,pango-1.42)
1599
1600 ("glib" ,glib)
1601 ("readline" ,readline)
1602 ("gtk+" ,gtk+-2)
1603 ("mesa" ,mesa)
1604 ("glu" ,glu)
1605 ("gtkglext" ,gtkglext)
1606 ("sqlite" ,sqlite)
1607 ("libcanberra" ,libcanberra)))
1608 (native-inputs `(("python-2" ,python-2)
1609 ("pkg-config" ,pkg-config)))
1610 (arguments
1611 `(#:configure-flags
1612 ;; SSE instructions are available on Intel systems only.
1613 (list ,@(if (any (cute string-prefix? <> (or (%current-target-system)
1614 (%current-system)))
1615 '("x86_64" "i686"))
1616 '("--enable-simd=sse2") ; prevent avx instructions
1617 '()))
1618 #:phases
1619 (modify-phases %standard-phases
1620 (add-after 'install 'install-desktop-file
1621 (lambda* (#:key outputs #:allow-other-keys)
1622 (let* ((out (assoc-ref outputs "out"))
1623 (apps (string-append out "/share/applications")))
1624 (mkdir-p apps)
1625 (with-output-to-file (string-append apps "/gnubg.desktop")
1626 (lambda _
1627 (format #t
1628 "[Desktop Entry]~@
1629 Name=GNU Backgammon~@
1630 Exec=~a/bin/gnubg -w~@
1631 Icon=gnubg~@
1632 Categories=Game;~@
1633 Terminal=false~@
1634 Type=Application~%"
1635 out))))
1636 #t)))))
1637 (home-page "https://www.gnu.org/software/gnubg/")
1638 (synopsis "Backgammon game")
1639 (description "The GNU backgammon application (also known as \"gnubg\") can
1640 be used for playing, analyzing and teaching the game. It has an advanced
1641 evaluation engine based on artificial neural networks suitable for both
1642 beginners and advanced players. In addition to a command-line interface, it
1643 also features an attractive, 3D representation of the playing board.")
1644 (license license:gpl3+)))
1645
1646 (define-public gnubik
1647 (package
1648 (name "gnubik")
1649 (version "2.4.3")
1650 (source
1651 (origin
1652 (method url-fetch)
1653 (uri (string-append "mirror://gnu/gnubik/gnubik-"
1654 version ".tar.gz"))
1655 (sha256
1656 (base32
1657 "1vlf924mq8hg93bsjj0rzvs0crc6psmlxyc6zn0fr7msnmpx6gib"))))
1658 (build-system gnu-build-system)
1659 (arguments
1660 '(#:phases (modify-phases %standard-phases
1661 (add-after 'unpack 'skip-gtk-update-icon-cache
1662 (lambda _
1663 ;; Do not attempt to run 'gtk-update-icon-cache', which is
1664 ;; unnecessary and causes a needless dependency on glib.
1665 (substitute* "Makefile.in"
1666 (("gtk-update-icon-cache")
1667 "true"))
1668 #t)))))
1669 (inputs `(("gtk+" ,gtk+-2)
1670 ("mesa" ,mesa)
1671 ("glu" ,glu)
1672 ("libx11" ,libx11)
1673 ("guile" ,guile-2.0)
1674 ("gtkglext" ,gtkglext)))
1675 (native-inputs `(("gettext" ,gettext-minimal)
1676 ("pkg-config" ,pkg-config)))
1677 (home-page "https://www.gnu.org/software/gnubik/")
1678 (synopsis "3d Rubik's cube game")
1679 (description
1680 "GNUbik is a puzzle game in which you must manipulate a cube to make
1681 each of its faces have a uniform color. The game is customizable, allowing
1682 you to set the size of the cube (the default is 3x3) or to change the colors.
1683 You may even apply photos to the faces instead of colors. The game is
1684 scriptable with Guile.")
1685 (license license:gpl3+)))
1686
1687 (define-public gnushogi
1688 (package
1689 (name "gnushogi")
1690 (version "1.4.2")
1691 (source
1692 (origin
1693 (method url-fetch)
1694 (uri (string-append "mirror://gnu/gnushogi/gnushogi-"
1695 version ".tar.gz"))
1696 (sha256
1697 (base32
1698 "0a9bsl2nbnb138lq0h14jfc5xvz7hpb2bcsj4mjn6g1hcsl4ik0y"))))
1699 (arguments `(#:tests? #f)) ;; No check target.
1700 (build-system gnu-build-system)
1701 (home-page "https://www.gnu.org/software/gnushogi/")
1702 (synopsis "The game of Shogi (Japanese chess)")
1703 (description "GNU Shogi is a program that plays the game Shogi (Japanese
1704 Chess). It is similar to standard chess but this variant is far more complicated.")
1705 (license license:gpl3+)))
1706
1707 (define-public ltris
1708 (package
1709 (name "ltris")
1710 (version "1.2.1")
1711 (source
1712 (origin
1713 (method url-fetch)
1714 (uri (string-append "mirror://sourceforge/lgames/ltris/"
1715 "ltris-" version ".tar.gz"))
1716 (sha256
1717 (base32 "0959vvxh5xnxzpdv7i67lpd2b6ghx69z65ldnclj1z6llyfzfs7q"))))
1718 (build-system gnu-build-system)
1719 (arguments
1720 '(;; The code in LTris uses traditional GNU semantics for inline functions
1721 #:configure-flags '("CFLAGS=-fgnu89-inline")
1722 #:phases
1723 (modify-phases %standard-phases
1724 (add-after 'set-paths 'set-sdl-paths
1725 (lambda* (#:key inputs #:allow-other-keys)
1726 (setenv "CPATH"
1727 (string-append (assoc-ref inputs "sdl-union")
1728 "/include/SDL:"
1729 (or (getenv "CPATH") "")))
1730 #t)))))
1731 (inputs
1732 `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))))
1733 (home-page "http://lgames.sourceforge.net/LTris/")
1734 (synopsis "Tetris clone based on the SDL library")
1735 (description
1736 "LTris is a tetris clone: differently shaped blocks are falling down the
1737 rectangular playing field and can be moved sideways or rotated by 90 degree
1738 units with the aim of building lines without gaps which then disappear (causing
1739 any block above the deleted line to fall down). LTris has three game modes: In
1740 Classic you play until the stack of blocks reaches the top of the playing field
1741 and no new blocks can enter. In Figures the playing field is reset to a new
1742 figure each level and later on tiles and lines suddenly appear. In Multiplayer
1743 up to three players (either human or CPU) compete with each other sending
1744 removed lines to all opponents. There is also a Demo mode in which you can
1745 watch your CPU playing while enjoying a cup of tea!")
1746 (license license:gpl2+)))
1747
1748 (define-public nethack
1749 (package
1750 (name "nethack")
1751 (version "3.6.6")
1752 (source
1753 (origin
1754 (method url-fetch)
1755 (uri
1756 (string-append "https://www.nethack.org/download/" version "/nethack-"
1757 (string-join (string-split version #\.) "") "-src.tgz"))
1758 (sha256
1759 (base32 "1liyckjp34j354qnxc1zn9730lh1p2dabrg1hap24z6xnqx0rpng"))))
1760 (native-inputs
1761 `(("bison" ,bison)
1762 ("flex" ,flex)))
1763 (inputs
1764 `(("ncurses" ,ncurses)
1765 ("less" ,less)))
1766 (build-system gnu-build-system)
1767 (arguments
1768 '(#:make-flags
1769 `(,(string-append "PREFIX=" (assoc-ref %outputs "out")))
1770 #:phases
1771 (modify-phases %standard-phases
1772 (add-before 'configure 'patch-paths
1773 (lambda _
1774 (substitute* "sys/unix/nethack.sh"
1775 (("^ *cd .*$") ""))
1776 (substitute* "sys/unix/Makefile.utl"
1777 (("^YACC *=.*$") "YACC = bison -y\n")
1778 (("^LEX *=.*$") "LEX = flex\n")
1779 (("^# CC = gcc") "CC = gcc"))
1780 (substitute* "sys/unix/hints/linux"
1781 (("/bin/gzip") (string-append
1782 (assoc-ref %build-inputs "gzip")
1783 "/bin/gzip"))
1784 (("^WINTTYLIB=.*") "WINTTYLIB=-lncurses"))
1785 (substitute* "include/config.h"
1786 (("^.*define CHDIR.*$") "")
1787 (("^/\\* *#*define *REPRODUCIBLE_BUILD *\\*/")
1788 ;; Honor SOURCE_DATE_EPOCH.
1789 "#define REPRODUCIBLE_BUILD"))
1790
1791 ;; Note: 'makedefs' rejects and ignores dates that are too old
1792 ;; or too new, so we must choose something reasonable here.
1793 (setenv "SOURCE_DATE_EPOCH" "1531865062")
1794
1795 (substitute* "sys/unix/Makefile.src"
1796 (("^# CC = gcc") "CC = gcc"))
1797 #t))
1798 (replace 'configure
1799 (lambda _
1800 (let ((bash (string-append
1801 (assoc-ref %build-inputs "bash")
1802 "/bin/bash")))
1803 (with-directory-excursion "sys/unix"
1804 (substitute* "setup.sh" (("/bin/sh") bash))
1805 (invoke bash "setup.sh" "hints/linux"))
1806 #t)))
1807 (add-after 'install 'fixup-paths
1808 (lambda _
1809 (let* ((output (assoc-ref %outputs "out"))
1810 (nethack-script (string-append output "/bin/nethack")))
1811 (mkdir-p (string-append output "/games/lib/nethackuserdir"))
1812 (for-each
1813 (lambda (file)
1814 (rename-file
1815 (string-append output "/games/lib/nethackdir/" file)
1816 (string-append output "/games/lib/nethackuserdir/"
1817 file)))
1818 '("xlogfile" "logfile" "perm" "record" "save"))
1819 (mkdir-p (string-append output "/bin"))
1820 (call-with-output-file nethack-script
1821 (lambda (port)
1822 (format port "#!~a/bin/sh
1823 PATH=~a:$PATH
1824 if [ ! -d ~~/.config/nethack ]; then
1825 mkdir -p ~~/.config/nethack
1826 cp -r ~a/games/lib/nethackuserdir/* ~~/.config/nethack
1827 chmod -R +w ~~/.config/nethack
1828 fi
1829
1830 RUNDIR=$(mktemp -d)
1831
1832 cleanup() {
1833 rm -rf $RUNDIR
1834 }
1835 trap cleanup EXIT
1836
1837 cd $RUNDIR
1838 for i in ~~/.config/nethack/*; do
1839 ln -s $i $(basename $i)
1840 done
1841 for i in ~a/games/lib/nethackdir/*; do
1842 ln -s $i $(basename $i)
1843 done
1844 ~a/games/nethack"
1845 (assoc-ref %build-inputs "bash")
1846 (list->search-path-as-string
1847 (list
1848 (string-append
1849 (assoc-ref %build-inputs "coreutils") "/bin")
1850 (string-append
1851 (assoc-ref %build-inputs "less") "/bin"))
1852 ":")
1853 output
1854 output
1855 output)))
1856 (chmod nethack-script #o555)
1857 #t)))
1858 (delete 'check))))
1859 (home-page "https://nethack.org")
1860 (synopsis "Classic dungeon crawl game")
1861 (description "NetHack is a single player dungeon exploration game that runs
1862 on a wide variety of computer systems, with a variety of graphical and text
1863 interfaces all using the same game engine. Unlike many other Dungeons &
1864 Dragons-inspired games, the emphasis in NetHack is on discovering the detail of
1865 the dungeon and not simply killing everything in sight - in fact, killing
1866 everything in sight is a good way to die quickly. Each game presents a
1867 different landscape - the random number generator provides an essentially
1868 unlimited number of variations of the dungeon and its denizens to be discovered
1869 by the player in one of a number of characters: you can pick your race, your
1870 role, and your gender.")
1871 (license
1872 (license:fsdg-compatible
1873 "https://nethack.org/common/license.html"))))
1874
1875 (define-public pipewalker
1876 (package
1877 (name "pipewalker")
1878 (version "0.9.4")
1879 (source
1880 (origin
1881 (method url-fetch)
1882 (uri (string-append "mirror://sourceforge/pipewalker/pipewalker/"
1883 version "/pipewalker-" version ".tar.gz"))
1884 (sha256
1885 (base32 "1x46wgk0s55562pd96cxagxkn6wpgglq779f9b64ff1k3xzp3myn"))))
1886 (build-system gnu-build-system)
1887 (arguments
1888 `(#:configure-flags
1889 (list (string-append "--docdir=" (assoc-ref %outputs "out")
1890 "/share/doc/" ,name "-" ,version))
1891 #:phases
1892 (modify-phases %standard-phases
1893 (add-after 'configure 'patch-docdir
1894 ;; Makefile.in ignores configure's ‘--docdir=...’ option. Fix that.
1895 (lambda _
1896 (substitute* "Makefile"
1897 (("(pkgdocdatadir = ).*" _ assignment)
1898 (string-append assignment "$(docdir)\n")))
1899 #t)))))
1900 (inputs
1901 `(("libpng" ,libpng)
1902 ("mesa" ,mesa)
1903 ("sdl" ,sdl)))
1904 (home-page "http://pipewalker.sourceforge.net/")
1905 (synopsis "Logical tile puzzle")
1906 (description
1907 "PipeWalker is a simple puzzle game with many diffent themes: connect all
1908 computers to one network server, bring water from a source to the taps, etc.
1909 The underlying mechanism is always the same: you must turn each tile in the
1910 grid in the right direction to combine all components into a single circuit.
1911 Every puzzle has a complete solution, although there may be more than one.")
1912 (license license:gpl3+)))
1913
1914 (define-public prboom-plus
1915 (package
1916 (name "prboom-plus")
1917 (version "2.5.1.4")
1918 (source (origin
1919 (method url-fetch)
1920 (uri (string-append "mirror://sourceforge/prboom-plus/prboom-plus/"
1921 version "/prboom-plus-" version ".tar.gz"))
1922 (sha256
1923 (base32 "151v6nign86m1a2vqz27krsccpc9m4d1jax4y43v2fa82wfj9qp0"))
1924 (modules '((guix build utils)))
1925 (snippet
1926 '(begin
1927 (substitute* "src/version.c"
1928 (("__DATE__") "")
1929 (("__TIME__") ""))
1930 #t))))
1931 (build-system gnu-build-system)
1932 (arguments
1933 '(#:configure-flags '("--disable-cpu-opt")
1934 #:make-flags `(,(string-append "gamesdir="
1935 (assoc-ref %outputs "out") "/bin"))
1936 #:phases
1937 (modify-phases %standard-phases
1938 (add-after 'set-paths 'set-sdl'paths
1939 (lambda* (#:key inputs #:allow-other-keys)
1940 (setenv "CPATH"
1941 (string-append (assoc-ref inputs "sdl-union")
1942 "/include/SDL:"
1943 (or (getenv "CPATH") "")))
1944 #t)))))
1945 (inputs
1946 `(("fluidsynth" ,fluidsynth)
1947 ("glu" ,glu)
1948 ("libmad" ,libmad)
1949 ("libpng" ,libpng)
1950 ("libvorbis" ,libvorbis)
1951 ("pcre" ,pcre)
1952 ("portmidi" ,portmidi)
1953 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net)))))
1954 (home-page "http://prboom-plus.sourceforge.net/")
1955 (synopsis "Version of the classic 3D shoot'em'up game Doom")
1956 (description
1957 "PrBoom+ is a Doom source port developed from the original PrBoom project.")
1958 (license license:gpl2+)))
1959
1960 (define-public retux
1961 (let ((release "1.4.1")
1962 (revision 1))
1963 (package
1964 (name "retux")
1965 (version (if (zero? revision)
1966 release
1967 (string-append release "-"
1968 (number->string revision))))
1969 (source (origin
1970 (method url-fetch)
1971 (uri (string-append "https://github.com/retux-game/retux/"
1972 "releases/download/v"
1973 version "/retux-"
1974 release "-src.tar.gz"))
1975 (sha256
1976 (base32
1977 "1vrldg2qh2gqfswj7vkpc589ldrrjd903j6cnfdik9zh0jhlq4h2"))))
1978 (build-system python-build-system)
1979 (arguments
1980 `(#:tests? #f ; no check target
1981 #:phases
1982 (modify-phases %standard-phases
1983 ;; no setup.py script
1984 (delete 'build)
1985 (replace 'install
1986 (lambda* (#:key outputs #:allow-other-keys)
1987 (let* ((out (assoc-ref outputs "out"))
1988 (bin (string-append out "/bin"))
1989 (data (string-append out "/share/retux")))
1990 (mkdir-p bin)
1991
1992 (substitute* "retux.py"
1993 ;; Use the correct data directory.
1994 (("os\\.path\\.join\\(os\\.path\\.dirname\\(__file__\\), \"data\"\\),")
1995 (string-append "\"" data "\",")))
1996
1997 (copy-file "retux.py" (string-append bin "/retux"))
1998 (copy-recursively "data" data)
1999 #t))))))
2000 (inputs
2001 `(("python-sge-pygame" ,python-sge-pygame)
2002 ("python-six" ,python-six)
2003 ("python-xsge" ,python-xsge)))
2004 (home-page "https://retux-game.github.io/")
2005 (synopsis "Action platformer game")
2006 (description
2007 "ReTux is an action platformer loosely inspired by the Mario games,
2008 utilizing the art assets from the @code{SuperTux} project.")
2009 ;; GPL version 3 or later is the license for the code and some art.
2010 ;; The rest of the licenses are for the art exclusively, as listed in
2011 ;; data/LICENSES.
2012 (license (list license:cc0
2013 license:cc-by3.0
2014 license:cc-by-sa3.0
2015 license:cc-by-sa4.0
2016 license:gpl2+
2017 license:gpl3+)))))
2018
2019 (define-public roguebox-adventures
2020 (package
2021 (name "roguebox-adventures")
2022 (version "3.0.1")
2023 (source
2024 (origin
2025 (method url-fetch)
2026 (uri (string-append
2027 "http://download.tuxfamily.org/rba/RogueBoxAdventures_v"
2028 (string-join (string-split version #\.) "_") "_Source.zip"))
2029 (file-name (string-append name "-" version ".zip"))
2030 (sha256
2031 (base32
2032 "05zd03s5w9kcpklfgcggbaa6rwf59nm0q9vcj6gh9v2lh402k067"))))
2033 (build-system python-build-system)
2034 (arguments
2035 `(#:tests? #f ; no check target
2036 #:phases
2037 (modify-phases %standard-phases
2038 (replace 'unpack
2039 (lambda* (#:key source #:allow-other-keys)
2040 (and (invoke "unzip" source)
2041 ;; The actual source is buried a few directories deep.
2042 (chdir (string-append "RogueBoxAdventures_v"
2043 (string-join
2044 (string-split ,version #\.) "_")
2045 "_Source")))))
2046 ;; no setup.py script
2047 (replace 'build
2048 (lambda* (#:key outputs #:allow-other-keys)
2049 (let* ((out (assoc-ref outputs "out"))
2050 (data (string-append
2051 out "/share/games/roguebox-adventures")))
2052 ;; Use the correct data directory.
2053 (substitute* '("main.py" "LIB/getch.py" "LIB/getch_gcwz.py")
2054 (("basic_path + os\\.sep + 'DATA'")
2055 (string-append "'" data "'"))
2056 (("^basic_path.*$")
2057 (string-append "basic_path ='" data "'\n")))
2058 (substitute* "LIB/dialog.py"
2059 (("d_path = os\\.path\\.dirname\\(.*\\)\\)")
2060 (string-append "d_path = '" data "'")))
2061 (substitute* "LIB/gra_files.py"
2062 (("basic_path = b_path\\.replace\\('/LIB',''\\)")
2063 (string-append "basic_path ='" data "'\n")))
2064
2065 ;; The game must save in the user's home directory because
2066 ;; the store is read-only.
2067 (substitute* "main.py"
2068 (("home_save = False") "home_save = True")
2069 (("'icon_small.png'")
2070 (string-append "'" data "/icon_small.png'"))))
2071 #t))
2072 (replace 'install
2073 (lambda* (#:key outputs #:allow-other-keys)
2074 (let* ((out (assoc-ref outputs "out"))
2075 (bin (string-append out "/bin"))
2076 (roguebox-adventures
2077 (string-append bin "/roguebox-adventures"))
2078 (data (string-append
2079 out "/share/games/roguebox-adventures"))
2080 (lib (string-append data "/LIB"))
2081 (doc (string-append
2082 out "/share/doc/roguebox-adventures")))
2083 (mkdir-p bin)
2084 (mkdir-p doc)
2085
2086 (for-each (lambda (file)
2087 (copy-recursively file
2088 (string-append data "/" file)))
2089 '("AUDIO" "FONT" "GRAPHIC" "LIB" "LICENSE"
2090 "icon_big.png" "icon_small.png"))
2091 (for-each (lambda (file)
2092 (chmod file #o555)
2093 (install-file file lib))
2094 '("main.py" "run.py"))
2095
2096 (copy-recursively "DOC" doc)
2097
2098 (call-with-output-file
2099 roguebox-adventures
2100 (lambda (p)
2101 (format p "\
2102 #!~a
2103 export PYTHONPATH=~a/LIB:~a
2104 exec -a \"~a\" ~a \"$@\"\n"
2105 (which "bash") data (getenv "PYTHONPATH")
2106 (which "python3")
2107 (string-append lib "/main.py"))))
2108 (chmod roguebox-adventures #o555))
2109 #t)))))
2110 (native-inputs
2111 `(("unzip" ,unzip)))
2112 (inputs
2113 `(("python-pygame" ,python-pygame)
2114 ("python-tmx" ,python-tmx)))
2115 (home-page "https://rogueboxadventures.tuxfamily.org")
2116 (synopsis "A classical roguelike/sandbox game")
2117 (description
2118 "RogueBox Adventures is a graphical roguelike with strong influences
2119 from sandbox games like Minecraft or Terraria. The main idea of RogueBox
2120 Adventures is to offer the player a kind of roguelike toy-world. This world
2121 can be explored and changed freely.")
2122 ;; The GPL3+ is for code, the rest are for art.
2123 (license (list license:cc0
2124 license:cc-by3.0
2125 license:gpl3+
2126 license:silofl1.1))))
2127
2128 (define-public seahorse-adventures
2129 (package
2130 (name "seahorse-adventures")
2131 (version "1.3")
2132 (source
2133 (origin
2134 (method git-fetch)
2135 (uri (git-reference
2136 (url "https://github.com/dulsi/seahorse-adventures")
2137 (commit (string-append "release-" version))))
2138 (file-name (git-file-name name version))
2139 (sha256
2140 (base32 "0m53jh2gchzr7rs35hml6lbvc5kb5hp229wlfqa09098b7hhl15a"))
2141 (modules '((guix build utils)
2142 (ice-9 ftw)
2143 (srfi srfi-1)))
2144 ;; Remove non-free (non-commercial) font.
2145 (snippet
2146 `(begin
2147 (for-each delete-file (find-files "data/fonts" "."))
2148 #t))))
2149 (build-system python-build-system)
2150 (arguments
2151 `(#:tests? #f ;no test
2152 #:phases
2153 (modify-phases %standard-phases
2154 (delete 'build) ;pure Python
2155 (replace 'install ;no install script
2156 (lambda* (#:key outputs #:allow-other-keys)
2157 (let* ((out (assoc-ref outputs "out"))
2158 (bin (string-append out "/bin"))
2159 (share (string-append out "/share"))
2160 (applications (string-append share "/applications"))
2161 (data (string-append share "/seahorse-adventures")))
2162 ;; Install data.
2163 (for-each (lambda (f)
2164 (chmod f #o555)
2165 (install-file f data))
2166 '("leveledit.py" "run_game.py" "tileedit.py"))
2167 (for-each (lambda (dir)
2168 (let ((target (string-append data "/" dir)))
2169 (mkdir-p target)
2170 (copy-recursively dir target)))
2171 '("data" "lib"))
2172 ;; Create executable.
2173 (mkdir-p bin)
2174 (let ((executable (string-append bin "/seahorse-adventures")))
2175 (call-with-output-file executable
2176 (lambda (p)
2177 (format p
2178 "#!~a~@
2179 export PYTHONPATH=~a:~a~@
2180 exec -a \"~a\" ~a \"$@\"~%"
2181 (which "bash") data (getenv "PYTHONPATH")
2182 (which "python3")
2183 (string-append data "/run_game.py"))))
2184 (chmod executable #o555))
2185 ;; Add desktop file.
2186 (mkdir-p applications)
2187 (make-desktop-entry-file
2188 (string-append applications "/seahorse-adventures.desktop")
2189 #:name "Seahorse Adventures"
2190 #:comment
2191 '((#f "Help Barbie the seahorse float on bubbles to the moon"))
2192 #:exec ,name
2193 #:icon ,name
2194 #:categories '("Game" "ActionGame")
2195 #:keywords '("game" "retro" "platform"))
2196 ;; Add icons.
2197 (for-each
2198 (lambda (size)
2199 (let ((dir (string-append share "/icons/hicolor/"
2200 size "x" size "/apps")))
2201 (mkdir-p dir)
2202 (copy-file
2203 (string-append "icon" size ".png")
2204 (string-append dir "/searhorse-adventures.png"))))
2205 '("32" "64" "128")))
2206 #t))
2207 (add-after 'install 'unbundle-fonts
2208 ;; Unbundle Bitstream Vera font and replace deleted one.
2209 (lambda* (#:key outputs inputs #:allow-other-keys)
2210 (let* ((out (assoc-ref outputs "out"))
2211 (data (string-append out "/share/seahorse-adventures"))
2212 (vera (string-append (assoc-ref inputs "font-bitstream-vera")
2213 "/share/fonts/truetype/Vera.ttf")))
2214 (let ((themes-dir (string-append data "/data/themes/")))
2215 (for-each
2216 (lambda (theme)
2217 (let ((target (string-append themes-dir theme "/Vera.ttf")))
2218 (delete-file target)
2219 (symlink vera target)))
2220 '("default" "gray")))
2221 (symlink vera (string-append data "/data/fonts/04B_20__.TTF"))
2222 (substitute* (string-append data "/lib/main.py")
2223 (("f_scale = 0.35") "f_scale = 0.47")))
2224 #t)))))
2225 (inputs
2226 `(("font-bitstream-vera" ,font-bitstream-vera)
2227 ("python-pygame" ,python-pygame)))
2228 (home-page "http://www.imitationpickles.org/barbie/")
2229 (synopsis "Help Barbie the seahorse float on bubbles to the moon")
2230 (description
2231 "Barbie Seahorse Adventures is a retro style platform arcade game.
2232 You are Barbie the seahorse who travels through the jungle, up to the
2233 volcano until you float on bubbles to the moon. On the way to your
2234 final destination you will encounter various enemies, servants of the
2235 evil overlord who has stolen the galaxy crystal. Avoid getting hit
2236 and defeat them with your bubbles!")
2237 ;; GPL2+ is for code, CC0 is for art.
2238 (license (list license:gpl2+ license:cc0))))
2239
2240 (define-public superstarfighter
2241 (package
2242 (name "superstarfighter")
2243 (version "0.6.4")
2244 (source
2245 (origin
2246 (method git-fetch)
2247 (uri (git-reference
2248 (url "https://github.com/notapixelstudio/superstarfighter")
2249 (commit (string-append "v" version))))
2250 (file-name (git-file-name name version))
2251 (sha256
2252 (base32 "1fly63yf5ls1xwm15if4lxwy67wi84k4gvjllljpykrl18vw2y0y"))))
2253 (build-system gnu-build-system)
2254 (arguments
2255 `(#:tests? #f ;there are no tests
2256 #:phases
2257 (modify-phases %standard-phases
2258 (replace 'configure
2259 (lambda _
2260 (chdir "godot")
2261 (setenv "HOME" (getcwd))
2262 (with-output-to-file "export_presets.cfg"
2263 (lambda ()
2264 (display
2265 "[preset.0]
2266 name=\"Guix\"
2267 platform=\"Linux/X11\"
2268 runnable=true
2269 [preset.0.options]")))
2270 #t))
2271 (replace 'build
2272 (lambda _
2273 (let ((godot (assoc-ref %build-inputs "godot-headless")))
2274 (invoke (string-append godot "/bin/godot_server")
2275 "--export-pack" "Guix"
2276 "superstarfighter.pck" "project.godot"))
2277 #t))
2278 (replace 'install
2279 (lambda* (#:key inputs outputs #:allow-other-keys)
2280 (let* ((out (assoc-ref outputs "out"))
2281 (bin (string-append out "/bin"))
2282 (share (string-append out "/share"))
2283 (data (string-append share "/superstarfighter"))
2284 (icons (string-append share "/icons/hicolor/256x256/apps")))
2285 (install-file "superstarfighter.pck" data)
2286 (mkdir-p bin)
2287 (call-with-output-file (string-append bin "/superstarfighter")
2288 (lambda (port)
2289 (format port
2290 "#!/bin/sh~@
2291 exec ~a/bin/godot --main-pack ~a/superstarfighter.pck~%"
2292 (assoc-ref inputs "godot")
2293 data)
2294 (chmod port #o755)))
2295 (mkdir-p icons)
2296 (copy-file "icon.png" (string-append icons "/" ,name ".png"))
2297 (make-desktop-entry-file
2298 (string-append share "/applications/" ,name ".desktop")
2299 #:name "SuperStarfighter"
2300 #:comment "Fast-paced arcade combat game"
2301 #:exec ,name
2302 #:icon ,name
2303 #:categories '("Game" "ArcadeGame")))
2304 #t)))))
2305 (native-inputs
2306 `(("godot-headless" ,godot "headless")))
2307 (inputs
2308 `(("godot" ,godot)))
2309 (home-page "https://notapixel.itch.io/superstarfighter")
2310 (synopsis "Fast-paced local multiplayer arcade game")
2311 (description "In SuperStarfighter, up to four local players compete in a
2312 2D arena with fast-moving ships and missiles. Different game types are
2313 available, as well as a single-player mode with AI-controlled ships.")
2314 (license (list license:expat ; game
2315 license:silofl1.1)))) ; fonts
2316
2317 (define %ufoai-commit "a542a87a891f96b1ab2c44d35b2f6f16859a5019")
2318 (define %ufoai-revision "0")
2319 (define %ufoai-version (git-version "2.6.0_dev" %ufoai-revision %ufoai-commit))
2320 (define ufoai-source
2321 (origin
2322 (method git-fetch)
2323 (uri (git-reference
2324 (url "git://git.code.sf.net/p/ufoai/code") ;HTTPS fails mid-clone
2325 (commit %ufoai-commit)))
2326 (file-name (string-append "ufoai-" %ufoai-version "-checkout"))
2327 (sha256
2328 (base32
2329 "024s7b9rcg7iw8i2p72gwnvabk23ljlq0nldws0y4b6hpwzyn1wz"))
2330 (modules '((guix build utils)
2331 (srfi srfi-1)
2332 (ice-9 ftw)))
2333 (snippet
2334 '(begin
2335 ;; Delete ~32MiB of bundled dependencies.
2336 (with-directory-excursion "src/libs"
2337 (for-each delete-file-recursively
2338 (lset-difference equal? (scandir ".")
2339 '("." ".." "gtest" "mumble"))))
2340
2341 ;; Use relative path to Lua headers.
2342 (substitute* "src/common/scripts_lua.h"
2343 (("\\.\\./libs/lua/") ""))
2344
2345 ;; Adjust Makefile targets to not depend on 'ufo2map', since we build
2346 ;; it as a separate package. This way we don't need to make the same
2347 ;; adjustments for 'ufoai-data' and 'ufoai' below.
2348 (substitute* "build/maps.mk"
2349 (("\\./ufo2map") "ufo2map")
2350 (("maps: ufo2map") "maps:"))
2351 (substitute* "build/modules/testall.mk"
2352 (("testall: ufo2map") "testall:"))
2353
2354 ;; If no cURL headers are found, the build system will try to include
2355 ;; the bundled version, even when not required. Prevent that.
2356 (substitute* "build/default.mk"
2357 (("^include src/libs/curl/lib/Makefile\\.inc")
2358 ""))
2359
2360 ;; While here, improve reproducibility by adding the '-X' flag to the
2361 ;; zip command used to create the map files, in order to prevent time
2362 ;; stamps from making it into the generated archives.
2363 (substitute* "build/data.mk"
2364 (("\\$\\(call ZIP\\)")
2365 "$(call ZIP) -X"))
2366 #t))))
2367
2368 (define-public ufo2map
2369 (package
2370 (name "ufo2map")
2371 (version %ufoai-version)
2372 (home-page "https://ufoai.org/")
2373 (source ufoai-source)
2374 (build-system gnu-build-system)
2375 (arguments
2376 '(#:configure-flags '("CC=gcc" "CXX=g++"
2377 "--enable-release"
2378 "--enable-ufo2map"
2379 "--disable-uforadiant"
2380 "--disable-cgame-campaign"
2381 "--disable-cgame-multiplayer"
2382 "--disable-cgame-skirmish"
2383 "--disable-game"
2384 "--disable-memory"
2385 "--disable-testall"
2386 "--disable-ufoded"
2387 "--disable-ufo"
2388 "--disable-ufomodel"
2389 "--disable-ufoslicer")
2390 #:tests? #f ;no tests
2391 #:phases (modify-phases %standard-phases
2392 (replace 'configure
2393 (lambda* (#:key (configure-flags '()) #:allow-other-keys)
2394 ;; The home-made configure script does not understand
2395 ;; some of the default flags of gnu-build-system.
2396 (apply invoke "./configure" configure-flags)))
2397 (replace 'install
2398 (lambda* (#:key outputs #:allow-other-keys)
2399 (let ((out (assoc-ref outputs "out")))
2400 (install-file "ufo2map" (string-append out "/bin"))
2401 (install-file "debian/ufo2map.6"
2402 (string-append out "/share/man/man6"))
2403 #t))))))
2404 (native-inputs
2405 `(("pkg-config" ,pkg-config)))
2406 (inputs
2407 `(("libjpeg" ,libjpeg-turbo)
2408 ("libpng" ,libpng)
2409 ("lua" ,lua-5.1)
2410 ("sdl-union" ,(sdl-union (list sdl2 sdl2-mixer sdl2-ttf)))))
2411 (synopsis "UFO: AI map generator")
2412 (description
2413 "This package provides @command{ufo2map}, a program used to generate
2414 maps for the UFO: Alien Invasion strategy game.")
2415 (license license:gpl2+)))
2416
2417 (define ufoai-data
2418 (package
2419 (name "ufoai-data")
2420 (version %ufoai-version)
2421 (home-page "https://ufoai.org/")
2422 (source ufoai-source)
2423 (build-system gnu-build-system)
2424 (arguments
2425 '(#:tests? #f
2426 #:configure-flags '("CC=gcc" "CXX=g++")
2427 #:phases (modify-phases %standard-phases
2428 (replace 'configure
2429 (lambda* (#:key outputs (configure-flags '()) #:allow-other-keys)
2430 (apply invoke "./configure" configure-flags)))
2431 (replace 'build
2432 (lambda* (#:key (parallel-build? #t) #:allow-other-keys)
2433 (invoke "make"
2434 "-j" (if parallel-build?
2435 (number->string (parallel-job-count))
2436 "1")
2437 "maps")))
2438 (add-after 'build 'pack
2439 (lambda _
2440 (invoke "make" "pk3")))
2441 (replace 'install
2442 (lambda* (#:key outputs #:allow-other-keys)
2443 (let ((out (assoc-ref outputs "out")))
2444 (for-each (lambda (file)
2445 (install-file file out))
2446 (find-files "base" "\\.pk3$"))
2447 #t))))))
2448 (native-inputs
2449 `(("python" ,python-2)
2450 ("ufo2map" ,ufo2map)
2451 ("which" ,which)
2452 ("zip" ,zip)))
2453 (synopsis "UFO: AI data files")
2454 (description
2455 "This package contains maps and other assets for UFO: Alien Invasion.")
2456 ;; Most assets are available under either GPL2 or GPL2+. Some use other
2457 ;; licenses, see LICENSES for details.
2458 (license (list license:gpl2+ license:gpl2 license:cc-by3.0
2459 license:cc-by-sa3.0 license:public-domain))))
2460
2461 (define-public ufoai
2462 (package
2463 (name "ufoai")
2464 (version %ufoai-version)
2465 (home-page "https://ufoai.org/")
2466 (source ufoai-source)
2467 (build-system gnu-build-system)
2468 (arguments
2469 `(#:configure-flags
2470 (list (string-append "--prefix=" (assoc-ref %outputs "out"))
2471 (string-append "--datadir=" (assoc-ref %outputs "out")
2472 "/share/games/ufo")
2473 "CC=gcc" "CXX=g++"
2474 "--enable-release"
2475 "--enable-game"
2476 "--disable-ufo2map"
2477 "--disable-dependency-tracking"
2478
2479 ;; Disable hard links to prevent huge NARs.
2480 "--disable-hardlinkedgame"
2481 "--disable-hardlinkedcgame")
2482 #:phases (modify-phases %standard-phases
2483 (add-after 'unpack 'symlink-data-files
2484 (lambda* (#:key inputs #:allow-other-keys)
2485 (let ((data (assoc-ref inputs "ufoai-data")))
2486 ;; Symlink the data files to where the build system
2487 ;; expects to find them. Ultimately these files are
2488 ;; copied to $out/share/games/ufoai/base, losing the
2489 ;; symlinks; we could fix that after install, but it
2490 ;; does not make a big difference in practice due to
2491 ;; deduplication.
2492 (with-directory-excursion "base"
2493 (for-each (lambda (file)
2494 (symlink file (basename file)))
2495 (find-files data "\\.pk3$")))
2496 #t)))
2497 (add-before 'configure 'create-language-files
2498 (lambda _
2499 (invoke "make" "lang")))
2500 (replace 'configure
2501 (lambda* (#:key outputs (configure-flags '()) #:allow-other-keys)
2502 (apply invoke "./configure" configure-flags)))
2503 (replace 'check
2504 (lambda* (#:key tests? #:allow-other-keys)
2505 (if tests?
2506 (invoke "./testall")
2507 (format #t "test suite not run~%"))
2508 #t))
2509 (add-after 'install 'install-man-pages
2510 (lambda* (#:key outputs #:allow-other-keys)
2511 (let* ((out (assoc-ref outputs "out"))
2512 (man6 (string-append out "/share/man/man6")))
2513 (install-file "debian/ufo.6" man6)
2514 (install-file "debian/ufoded.6" man6)
2515 #t))))
2516
2517 ;; TODO: Some map tests occasionally fail because of randomness issues,
2518 ;; e.g. not enough generated aliens. The test runner also fails early
2519 ;; in the build container with 'failed to shutdown server'?
2520 #:tests? #f))
2521 (native-inputs
2522 `(("gettext" ,gettext-minimal)
2523 ("pkg-config" ,pkg-config)
2524 ("python" ,python-2)
2525 ("ufo2map" ,ufo2map)
2526 ("ufoai-data" ,ufoai-data)))
2527 (inputs
2528 `(("curl" ,curl)
2529 ("libjpeg" ,libjpeg-turbo)
2530 ("libogg" ,libogg)
2531 ("libpng" ,libpng)
2532 ("libtheora" ,libtheora)
2533 ("libvorbis" ,libvorbis)
2534 ("libxml2" ,libxml2)
2535 ("lua" ,lua-5.1)
2536 ("mesa" ,mesa)
2537 ("minixml" ,minixml)
2538 ("sdl-union" ,(sdl-union (list sdl2 sdl2-mixer sdl2-ttf)))
2539 ("zlib" ,zlib)))
2540 (synopsis "Turn-based tactical strategy game")
2541 (description
2542 "UFO: Alien Invasion is a tactical strategy game set in the year 2084.
2543 You control a secret organisation charged with defending Earth from a brutal
2544 alien enemy. Build up your bases, prepare your team, and dive head-first into
2545 the fast and flowing turn-based combat.
2546
2547 Over the long term you will need to conduct research into the alien threat to
2548 figure out their mysterious goals and use their powerful weapons for your own
2549 ends. You will produce unique items and use them in combat against your
2550 enemies.
2551
2552 You can also use them against your friends with the multiplayer functionality.
2553
2554 Warning: This is a pre-release version of UFO: AI! Some things may not work
2555 properly.")
2556
2557 ;; The game code and most assets are GPL2+, but we use GPL2 only here
2558 ;; because some assets do not use the "or later" clause. Many individual
2559 ;; assets use Creative Commons or Public Domain; see the LICENSE file.
2560 (license (delete license:gpl2+ (package-license ufoai-data)))))
2561
2562 (define-public xshogi
2563 (package
2564 (name "xshogi")
2565 (version "1.4.2")
2566 (source
2567 (origin
2568 (method url-fetch)
2569 (uri (string-append "mirror://gnu/gnushogi/xshogi-"
2570 version ".tar.gz"))
2571 (sha256
2572 (base32
2573 "1dns0nhymak44by18sv48m4xb2skiwbi2i3nb9hl6w9iwd2i2brf"))))
2574 (build-system gnu-build-system)
2575 (inputs
2576 `(("libxaw" ,libxaw)
2577 ("libxt" ,libxt)))
2578 (home-page "https://www.gnu.org/software/gnushogi/")
2579 (synopsis "User interface for gnushogi")
2580 (description "A graphical user interface for the package @code{gnushogi}.")
2581 ;; Contains a copy of GPLv3 but the licence notices simply
2582 ;; state "GNU General Public Licence" without specifying a version.
2583 (license license:gpl1+)))
2584
2585 (define-public abbaye
2586 (package
2587 (name "abbaye")
2588 (version "2.0.1")
2589 (source
2590 (origin
2591 (method git-fetch)
2592 (uri (git-reference
2593 (url "https://github.com/nevat/abbayedesmorts-gpl")
2594 (commit (string-append "v" version))))
2595 (file-name (git-file-name name version))
2596 (sha256
2597 (base32 "1pwqf7r9bqb2p3xrw9i7y8pgr1401fy3mnnqpb1qkhmdl3gqi9hb"))
2598 (modules '((guix build utils)))
2599 (snippet
2600 ;; Unbundle fonts.
2601 '(begin
2602 (delete-file-recursively "fonts")
2603 #t))))
2604 (build-system gnu-build-system)
2605 (arguments
2606 '(#:make-flags '("CC=gcc")
2607 #:phases (modify-phases %standard-phases
2608 (add-after 'set-paths 'set-sdl-paths
2609 (lambda* (#:key inputs #:allow-other-keys)
2610 (setenv "CPATH"
2611 (string-append (assoc-ref inputs "sdl-union")
2612 "/include/SDL:"
2613 (or (getenv "CPATH") "")))))
2614 (add-after 'patch-source-shebangs 'patch-makefile
2615 (lambda* (#:key outputs #:allow-other-keys)
2616 ;; Replace /usr with package output directory.
2617 (substitute* "Makefile"
2618 (("/usr") (assoc-ref outputs "out")))))
2619 (add-before 'install 'make-install-dirs
2620 (lambda* (#:key outputs #:allow-other-keys)
2621 (let ((prefix (assoc-ref outputs "out")))
2622 ;; Create directories that the makefile assumes exist.
2623 (mkdir-p (string-append prefix "/bin"))
2624 (mkdir-p (string-append prefix "/share/applications"))
2625 (mkdir-p (string-append prefix "/share/pixmaps")))))
2626 ;; No configure script.
2627 (delete 'configure))
2628 #:tests? #f)) ;; No check target.
2629 (native-inputs `(("pkg-config" ,pkg-config)))
2630 (inputs `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer)))))
2631 (home-page "https://github.com/nevat/abbayedesmorts-gpl")
2632 (synopsis "GNU/Linux port of the indie game \"l'Abbaye des Morts\"")
2633 (description "L'Abbaye des Morts is a 2D platform game set in 13th century
2634 France. The Cathars, who preach about good Christian beliefs, were being
2635 expelled by the Catholic Church out of the Languedoc region in France. One of
2636 them, called Jean Raymond, found an old church in which to hide, not knowing
2637 that beneath its ruins lay buried an ancient evil.")
2638 (license license:gpl3)))
2639
2640 (define-public angband
2641 (package
2642 (name "angband")
2643 (version "4.2.1")
2644 (source
2645 (origin
2646 (method url-fetch)
2647 (uri (string-append "https://rephial.org/downloads/"
2648 (version-major+minor version)
2649 "/angband-" version ".tar.gz"))
2650 (sha256
2651 (base32 "03qdavkj2ik02mqjxmlm5bn17ba3yxb1rirp8ghnxy3bsk4kbmxc"))
2652 (modules '((guix build utils)))
2653 (snippet
2654 ;; So, some of the sounds/graphics/tilesets are under different
2655 ;; licenses... some of them even nonfree! This is a console-only
2656 ;; version of this package so we just remove them.
2657 ;; In the future, if someone tries to make a graphical variant of
2658 ;; this package, they can deal with that mess themselves. :)
2659 '(begin
2660 (for-each (lambda (subdir)
2661 (let ((lib-subdir (string-append "lib/" subdir)))
2662 (delete-file-recursively lib-subdir)))
2663 '("fonts" "icons" "sounds" "tiles"))
2664 (substitute* "lib/Makefile"
2665 ;; And don't try to invoke makefiles in the directories we removed.
2666 (("gamedata customize help screens fonts tiles sounds icons user")
2667 "gamedata customize help screens user"))
2668 #t))))
2669 (build-system gnu-build-system)
2670 (arguments
2671 `(#:tests? #f ; no check target
2672 #:configure-flags (list (string-append "--bindir=" %output "/bin"))
2673 #:phases
2674 (modify-phases %standard-phases
2675 (replace 'bootstrap
2676 (lambda _
2677 (substitute* "acinclude.m4"
2678 (("ncursesw5-config") "ncursesw6-config"))
2679 (invoke "sh" "autogen.sh"))))))
2680 (native-inputs
2681 `(("autoconf" ,autoconf)
2682 ("automake" ,automake)))
2683 (inputs `(("ncurses" ,ncurses)))
2684 (home-page "https://rephial.org/")
2685 (synopsis "Dungeon exploration roguelike")
2686 (description "Angband is a Classic dungeon exploration roguelike. Explore
2687 the depths below Angband, seeking riches, fighting monsters, and preparing to
2688 fight Morgoth, the Lord of Darkness.")
2689 (license license:gpl2)))
2690
2691 (define-public pingus
2692 (package
2693 (name "pingus")
2694 (version "0.7.6")
2695 (source
2696 (origin
2697 (method git-fetch)
2698 (uri (git-reference
2699 (url "https://gitlab.com/pingus/pingus.git")
2700 (commit (string-append "v" version))))
2701 (file-name (git-file-name name version))
2702 (sha256
2703 (base32
2704 "0wp06kcmknsnxz7bjnsndb8x062z7r23fb3yrnbfnj68qhz18y74"))
2705 (patches (search-patches "pingus-boost-headers.patch"
2706 "pingus-sdl-libs-config.patch"))
2707 (modules '((guix build utils)))
2708 (snippet
2709 '(begin
2710 (substitute* "src/pingus/screens/demo_session.cpp"
2711 (("#include <iostream>")
2712 ;; std::function moved to <functional> with C++ 11.
2713 ;; Remove this for versions newer than 0.7.6.
2714 "#include <iostream>\n#include <functional>"))
2715 #t))))
2716 (build-system gnu-build-system)
2717 (native-inputs `(("pkg-config" ,pkg-config)
2718 ("scons-python2" ,scons-python2)))
2719 (inputs `(("sdl" ,sdl)
2720 ("sdl-image" ,sdl-image)
2721 ("sdl-mixer" ,sdl-mixer)
2722 ("mesa" ,mesa)
2723 ("glu" ,glu)
2724 ("libpng" ,libpng)
2725 ("boost" ,boost)))
2726 (arguments
2727 '(#:make-flags (list (string-append "PREFIX=" %output))
2728 #:tests? #f ; no check target
2729 #:phases
2730 (modify-phases %standard-phases
2731 (delete 'configure)))) ; no configure script
2732 (home-page "https://pingus.seul.org/")
2733 (synopsis "Lemmings clone")
2734 (description
2735 "Pingus is a free Lemmings-like puzzle game in which the player takes
2736 command of a bunch of small animals and has to guide them through levels.
2737 Since the animals walk on their own, the player can only influence them by
2738 giving them commands, like build a bridge, dig a hole, or redirect all animals
2739 in the other direction. Multiple such commands are necessary to reach the
2740 level's exit. The game is presented in a 2D side view.")
2741 ;; Some source files are under bsd-3 and gpl2+ licenses.
2742 (license license:gpl3+)))
2743
2744 (define-public talkfilters
2745 (package
2746 (name "talkfilters")
2747 (version "2.3.8")
2748 (source
2749 (origin
2750 (method url-fetch)
2751 (uri (string-append "http://www.hyperrealm.com/talkfilters/"
2752 "talkfilters-" version ".tar.gz"))
2753 (sha256
2754 (base32 "19nc5vq4bnkjvhk8srqddzhcs93jyvpm9r6lzjzwc1mgf08yg0a6"))))
2755 (build-system gnu-build-system)
2756 (home-page "https://www.gnu.org/software/talkfilters/")
2757 (synopsis "Convert English text to humorous dialects")
2758 (description "The GNU Talk Filters are programs that convert English text
2759 into stereotyped or otherwise humorous dialects. The filters are provided as
2760 a C library, so they can easily be integrated into other programs.")
2761 (license license:gpl2+)))
2762
2763 (define-public taisei
2764 (package
2765 (name "taisei")
2766 (version "1.3.1")
2767 (source
2768 (origin
2769 (method url-fetch)
2770 (uri (string-append "https://github.com/taisei-project/"
2771 "taisei/releases/download/v" version
2772 "/taisei-v" version ".tar.xz"))
2773 (sha256
2774 (base32 "11f9mlqmzy1lszwcc1nsbar9q1hs4ml6pbm52hqfd4q0f4x3ln46"))))
2775 (build-system meson-build-system)
2776 (arguments
2777 `(#:build-type "release" ;comment out for bug-reporting (and cheats)
2778 #:configure-flags
2779 (list "-Dr_default=gles30"
2780 "-Dr_gles20=true"
2781 "-Dr_gles30=true"
2782 "-Dshader_transpiler=true")))
2783 (native-inputs
2784 `(("pkg-config" ,pkg-config)
2785 ("python" ,python)
2786 ("python-docutils" ,python-docutils)
2787 ("python-pygments" ,python-pygments)))
2788 (inputs
2789 `(("freetype" ,freetype)
2790 ("libpng" ,libpng)
2791 ("libwebp" ,libwebp)
2792 ("libzip" ,libzip)
2793 ("mesa" ,mesa)
2794 ("openssl" ,openssl)
2795 ("opusfile" ,opusfile)
2796 ("sdl2" ,sdl2)
2797 ("sdl2-mixer" ,sdl2-mixer)
2798 ("shaderc" ,shaderc)
2799 ("spirv-cross" ,spirv-cross)
2800 ("zlib" ,zlib)))
2801 (home-page "https://taisei-project.org/")
2802 (synopsis "Shoot'em up fangame and libre clone of Touhou Project")
2803 (description
2804 "The player controls a character (one of three: Good, Bad, and Dead),
2805 dodges the missiles (lots of it cover the screen, but the character's hitbox
2806 is very small), and shoot at the adversaries that keep appear on the screen.")
2807 (license (list ;;game
2808 license:expat
2809 ;;resources/00-taisei.pkgdir/bgm/
2810 ;;atlas/portraits/
2811 license:cc-by4.0
2812 ;;miscellaneous
2813 license:cc0
2814 license:public-domain))))
2815
2816 (define-public cmatrix
2817 (package
2818 (name "cmatrix")
2819 (version "2.0")
2820 (source
2821 (origin
2822 (method git-fetch)
2823 (uri (git-reference
2824 (url "https://github.com/abishekvashok/cmatrix")
2825 (commit (string-append "v" version))))
2826 (file-name (git-file-name name version))
2827 (sha256
2828 (base32
2829 "1h9jz4m4s5l8c3figaq46ja0km1gimrkfxm4dg7mf4s84icmasbm"))))
2830 (build-system gnu-build-system)
2831 (native-inputs
2832 `(("autoconf" ,autoconf)
2833 ("automake" ,automake)))
2834 (arguments
2835 '(#:phases
2836 (modify-phases %standard-phases
2837 (replace 'configure
2838 (lambda* (#:key outputs #:allow-other-keys)
2839 ;; This old ‘configure’ script doesn't support
2840 ;; variables passed as arguments.
2841 (let ((out (assoc-ref outputs "out")))
2842 (setenv "CONFIG_SHELL" (which "bash"))
2843 (invoke "./configure"
2844 (string-append "--prefix=" out))))))))
2845 (inputs `(("ncurses" ,ncurses)))
2846 (home-page "http://www.asty.org/cmatrix")
2847 (synopsis "Simulate the display from \"The Matrix\"")
2848 (description "CMatrix simulates the display from \"The Matrix\" and is
2849 based on the screensaver from the movie's website. It works with terminal
2850 settings up to 132x300 and can scroll lines all at the same rate or
2851 asynchronously and at a user-defined speed.")
2852 (license license:gpl2+)))
2853
2854 (define-public chess
2855 (package
2856 (name "chess")
2857 (version "6.2.7")
2858 (source
2859 (origin
2860 (method url-fetch)
2861 (uri (string-append "mirror://gnu/chess/gnuchess-" version
2862 ".tar.gz"))
2863 (sha256
2864 (base32
2865 "0ilq4bfl0lwyzf11q7n2skydjhalfn3bgxhrp5hjxs5bc5d6fdp5"))))
2866 (build-system gnu-build-system)
2867 (home-page "https://www.gnu.org/software/chess/")
2868 (synopsis "Full chess implementation")
2869 (description "GNU Chess is a chess engine. It allows you to compete
2870 against the computer in a game of chess, either through the default terminal
2871 interface or via an external visual interface such as GNU XBoard.")
2872 (properties '((upstream-name . "gnuchess")
2873 (ftp-directory . "/chess")))
2874 (license license:gpl3+)))
2875
2876 (define-public freedink-engine
2877 (package
2878 (name "freedink-engine")
2879 (version "109.6")
2880 (source (origin
2881 (method url-fetch)
2882 (uri (string-append "mirror://gnu/freedink/freedink-" version
2883 ".tar.gz"))
2884 (patches (search-patches "freedink-engine-fix-sdl-hints.patch"))
2885 (sha256
2886 (base32
2887 "00hhk1bjdrc1np2qz44sa5n1mb62qzwxbvsnws3vpms6iyn3a2sy"))))
2888 (build-system gnu-build-system)
2889 (arguments
2890 `(#:configure-flags '("--disable-embedded-resources")
2891 #:phases
2892 (modify-phases %standard-phases
2893 (add-after 'unpack 'disable-graphical-tests
2894 (lambda _
2895 ;; These tests require a graphical interface.
2896 (substitute* "src/Makefile.am"
2897 (("test_gfx_fonts TestIOGfxDisplay") ""))
2898 #t))
2899 (add-before 'bootstrap 'autoreconf
2900 (lambda _
2901 ;; automake is out of date in the source
2902 ;; autoreconf updates the automake scripts
2903 (invoke "autoreconf")
2904 ;; Build fails when autom4te.cache exists.
2905 (delete-file-recursively "autom4te.cache")
2906 #t))
2907 (add-after 'install 'delete-freedinkedit-desktop
2908 (lambda* (#:key outputs #:allow-other-keys)
2909 (let ((out (assoc-ref outputs "out")))
2910 ;; freedinkedit does not know where to find freedink data
2911 ;; freedink data is read-only, so it cannot be edited anyway.
2912 ;; TODO: fix freedink.desktop
2913 (delete-file-recursively (string-append
2914 out "/share/applications"))
2915 #t))))))
2916 (native-inputs `(("autoconf" ,autoconf)
2917 ("automake" ,automake)
2918 ("cxxtest" ,cxxtest)
2919 ("gettext" ,gettext-minimal)
2920 ("help2man" ,help2man)
2921 ("pkg-config" ,pkg-config)))
2922 (inputs `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer
2923 sdl2-ttf sdl2-gfx)))
2924 ("fontconfig" ,fontconfig)
2925 ("glm" ,glm)))
2926 (properties '((ftp-directory . "/freedink")
2927 (upstream-name . "freedink")))
2928 (home-page "https://www.gnu.org/software/freedink/")
2929 (synopsis "Twisted adventures of young pig farmer Dink Smallwood")
2930 (description
2931 "GNU FreeDink is a free and portable re-implementation of the engine
2932 for the role-playing game Dink Smallwood. It supports not only the original
2933 game data files but it also supports user-produced game mods or \"D-Mods\".
2934 To that extent, it also includes a front-end for managing all of your D-Mods.")
2935 (license license:gpl3+)))
2936
2937 (define-public freedink-data
2938 (package
2939 (name "freedink-data")
2940 (version "1.08.20190120")
2941 (source (origin
2942 (method url-fetch)
2943 (uri (string-append "mirror://gnu/freedink/freedink-data-"
2944 version ".tar.gz"))
2945 (sha256
2946 (base32
2947 "17gvryadlxk172mblbsil7hina1z5wahwaxnr6g3mdq57dvl8pvi"))))
2948 (build-system gnu-build-system)
2949 (arguments
2950 `(#:phases
2951 (modify-phases %standard-phases
2952 (delete 'configure) ; no configure script
2953 (delete 'check)) ; no tests
2954 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))))
2955 (properties '((ftp-directory . "/freedink")))
2956 (home-page "https://www.gnu.org/software/freedink/")
2957 (synopsis "Game data for GNU Freedink")
2958 (description
2959 "This package contains the game data of GNU Freedink.")
2960 (license license:gpl3+)))
2961
2962 (define-public freedink-dfarc
2963 (package
2964 (name "freedink-dfarc")
2965 (version "3.14")
2966 (source (origin
2967 (method url-fetch)
2968 (uri (string-append "mirror://gnu/freedink/dfarc-"
2969 version ".tar.gz"))
2970 (sha256
2971 (base32
2972 "1yp8n3w426xnlp10xk06vfi2y3k9xrcfyck7s7qs1v0ys7n284d5"))))
2973 (build-system gnu-build-system)
2974 (native-inputs
2975 `(("intltool" ,intltool)))
2976 (inputs
2977 `(("bzip2" ,bzip2)
2978 ("wxwidgets" ,wxwidgets)))
2979 (properties '((ftp-directory . "/freedink")
2980 (upstream-name . "dfarc")))
2981 (home-page "https://www.gnu.org/software/freedink/")
2982 (synopsis "Front-end for managing and playing Dink Modules")
2983 (description "DFArc makes it easy to play and manage the GNU FreeDink game
2984 and its numerous D-Mods.")
2985 (license license:gpl3+)))
2986
2987 (define-public freedink
2988 ;; This is a wrapper that tells the engine where to find the data.
2989 (package (inherit freedink-engine)
2990 (name "freedink")
2991 (build-system trivial-build-system)
2992 (arguments
2993 '(#:builder (begin
2994 (use-modules (guix build utils))
2995
2996 (let* ((output (assoc-ref %outputs "out"))
2997 (bin (string-append output "/bin"))
2998 (executable (string-append bin "/freedink")))
2999 (mkdir-p bin)
3000 (call-with-output-file executable
3001 (lambda (port)
3002 (format port "#!~a/bin/sh
3003 exec ~a/bin/freedink -refdir ~a/share/dink\n"
3004 (assoc-ref %build-inputs "bash")
3005 (assoc-ref %build-inputs "engine")
3006 (assoc-ref %build-inputs "data"))
3007 (chmod port #o777)))
3008 #t))
3009 #:modules ((guix build utils))))
3010 (inputs `(("engine" ,freedink-engine)
3011 ("data" ,freedink-data)
3012 ("bash" ,bash)))
3013 (native-inputs '())))
3014
3015 (define-public xboard
3016 (package
3017 (name "xboard")
3018 (version "4.9.1")
3019 (source
3020 (origin
3021 (method url-fetch)
3022 (uri (string-append "mirror://gnu/xboard/xboard-" version
3023 ".tar.gz"))
3024 (sha256
3025 (base32
3026 "1mkh36xnnacnz9r00b5f9ld9309k32jv6mcavklbdnca8bl56bib"))))
3027 (build-system gnu-build-system)
3028 (inputs
3029 `(("gtk+" ,gtk+-2)
3030 ("librsvg" ,librsvg)))
3031 (native-inputs
3032 `(("texinfo" ,texinfo)
3033 ("pkg-config" ,pkg-config)))
3034 (home-page "https://www.gnu.org/software/xboard/")
3035 (synopsis "Graphical user interface for chess programs")
3036 (description "GNU XBoard is a graphical board for all varieties of chess,
3037 including international chess, xiangqi (Chinese chess), shogi (Japanese chess)
3038 and Makruk. Several lesser-known variants are also supported. It presents a
3039 fully interactive graphical interface and it can load and save games in the
3040 Portable Game Notation.")
3041 (license license:gpl3+)))
3042
3043 (define-public gtypist
3044 (package
3045 (name "gtypist")
3046 (version "2.9.5")
3047 (source (origin
3048 (method url-fetch)
3049 (uri (string-append "mirror://gnu/gtypist/gtypist-"
3050 version ".tar.xz"))
3051 (sha256
3052 (base32
3053 "0xzrkkmj0b1dw3yr0m9hml2y634cc4h61im6zwcq57s7285z8fn1"))
3054 (modules '((guix build utils)))
3055 (snippet
3056 ;; We do not provide `ncurses.h' within an `ncursesw'
3057 ;; sub-directory, so patch the source accordingly. See
3058 ;; <http://bugs.gnu.org/19018>.
3059 '(begin
3060 (for-each (lambda (file)
3061 (substitute* file
3062 (("ncursesw/ncurses.h")
3063 "ncurses.h")))
3064 (find-files "." "configure$|\\.c$"))
3065 #t))))
3066 (build-system gnu-build-system)
3067 (inputs `(("ncurses" ,ncurses)
3068 ("perl" ,perl)))
3069 (home-page "https://www.gnu.org/software/gtypist/")
3070 (synopsis "Typing tutor")
3071 (description
3072 "GNU Typist is a universal typing tutor. It can be used to learn and
3073 practice touch-typing. Several tutorials are included; in addition to
3074 tutorials for the standard QWERTY layout, there are also tutorials for the
3075 alternative layouts Dvorak and Colemak, as well as for the numpad. Tutorials
3076 are primarily in English, however some in other languages are provided.")
3077 (license license:gpl3+)))
3078
3079 (define-public irrlicht
3080 (package
3081 (name "irrlicht")
3082 (version "1.8.4")
3083 (source (origin
3084 (method url-fetch)
3085 (uri (string-append
3086 "mirror://sourceforge/irrlicht/Irrlicht%20SDK/"
3087 (version-major+minor version)
3088 "/" version "/irrlicht-" version ".zip"))
3089 (sha256
3090 (base32
3091 "0cz4z4dwrv5ypl19ll67wl6jjpy5k6ly4vr042w4br88qq5jhazl"))
3092 (patches (search-patches "irrlicht-use-system-libs.patch"))
3093 (modules '((guix build utils)))
3094 (snippet
3095 '(begin
3096 (for-each delete-file-recursively
3097 '("bin" ; bundled compiled Windows binaries"
3098 "source/Irrlicht/MacOSX"
3099 "source/Irrlicht/bzip2"
3100 "source/Irrlicht/jpeglib"
3101 "source/Irrlicht/libpng"
3102 "source/Irrlicht/lzma"
3103 "source/Irrlicht/zlib"))
3104 (delete-file "source/Irrlicht/glext.h")
3105 (delete-file "source/Irrlicht/glxext.h")
3106 (delete-file "source/Irrlicht/wglext.h")
3107 #t))))
3108 (build-system gnu-build-system)
3109 (arguments
3110 `(#:phases
3111 (modify-phases %standard-phases
3112 (add-after 'unpack 'chdir-to-source
3113 (lambda _
3114 ;; The actual source is buried a few directories deep.
3115 (chdir "source/Irrlicht/")
3116 #t))
3117 (add-after 'chdir-to-source 'fix-build-env
3118 (lambda* (#:key outputs #:allow-other-keys)
3119 (let ((out (assoc-ref outputs "out")))
3120 (substitute* "Makefile"
3121 (("INSTALL_DIR = /usr/local/lib")
3122 (string-append "INSTALL_DIR = " out "/lib"))
3123 ;; Add '-fpermissive' to the CXXFLAGS
3124 (("-Wall") "-Wall -fpermissive")) ; CImageLoaderJPG.cpp
3125 ;; The Makefile assumes these directories exist.
3126 (mkdir-p (string-append out "/lib"))
3127 (mkdir-p (string-append out "/include")))))
3128 (delete 'configure)) ; no configure script
3129 #:tests? #f ; no check target
3130 #:make-flags '("CC=gcc" "sharedlib")))
3131 (inputs
3132 `(("bzip2" ,bzip2)
3133 ("libjpeg" ,libjpeg-turbo)
3134 ("libpng" ,libpng)
3135 ("libx11" ,libx11)
3136 ("libxxf86vm" ,libxxf86vm)
3137 ("mesa" ,mesa)))
3138 (synopsis "3D game engine written in C++")
3139 (description
3140 "The Irrlicht Engine is a high performance realtime 3D engine written in
3141 C++. Features include an OpenGL renderer, extensible materials, scene graph
3142 management, character animation, particle and other special effects, support
3143 for common mesh file formats, and collision detection.")
3144 (home-page "http://irrlicht.sourceforge.net/")
3145 (license license:zlib)))
3146
3147 (define-public mars
3148 ;; The latest release on SourceForge relies on an unreleased version of SFML
3149 ;; with a different API, so we take the latest version from the official
3150 ;; repository on Github.
3151 (let ((commit "c855d044094a1d92317e38935d81ba938946132e")
3152 (revision "1"))
3153 (package
3154 (name "mars")
3155 (version (string-append "0.7.5." revision "." (string-take commit 7) ))
3156 (source (origin
3157 (method git-fetch)
3158 (uri (git-reference
3159 (url "https://github.com/thelaui/M.A.R.S.")
3160 (commit commit)))
3161 (file-name (git-file-name name version))
3162 (sha256
3163 (base32
3164 "1r4c5gap1z2zsv4yjd34qriqkxaq4lb4rykapyzkkdf4g36lc3nh"))
3165 (patches (search-patches "mars-sfml-2.3.patch"
3166 "mars-install.patch"))))
3167 (build-system cmake-build-system)
3168 (arguments
3169 `(#:tests? #f ; There are no tests
3170 #:phases
3171 (modify-phases %standard-phases
3172 (add-after 'unpack 'fix-install-path
3173 (lambda _
3174 (substitute* "src/CMakeLists.txt"
3175 (("\\$\\{CMAKE_INSTALL_PREFIX\\}/games")
3176 "${CMAKE_INSTALL_PREFIX}/bin"))
3177 #t))
3178 (add-after 'unpack 'fix-data-path
3179 (lambda* (#:key outputs #:allow-other-keys)
3180 (substitute* "src/System/settings.cpp"
3181 (("C_dataPath = \"./data/\";")
3182 (string-append "C_dataPath = \""
3183 (assoc-ref outputs "out")
3184 "/share/games/marsshooter/\";")))
3185 #t)))))
3186 (inputs
3187 `(("mesa" ,mesa)
3188 ("fribidi" ,fribidi)
3189 ("taglib" ,taglib)
3190 ("sfml" ,sfml)))
3191 (home-page "http://mars-game.sourceforge.net/")
3192 (synopsis "2D space shooter")
3193 (description
3194 "M.A.R.S. is a 2D space shooter with pretty visual effects and
3195 attractive physics. Players can battle each other or computer controlled
3196 enemies in different game modes such as space ball, death match, team death
3197 match, cannon keep, and grave-itation pit.")
3198 (license license:gpl3+))))
3199
3200 (define-public minetest
3201 (package
3202 (name "minetest")
3203 (version "5.3.0")
3204 (source (origin
3205 (method git-fetch)
3206 (uri (git-reference
3207 (url "https://github.com/minetest/minetest")
3208 (commit version)))
3209 (file-name (git-file-name name version))
3210 (sha256
3211 (base32
3212 "03ga3j3cg38w4lg4d4qxasmnjdl8n3lbizidrinanvyfdyvznyh6"))
3213 (modules '((guix build utils)))
3214 (snippet
3215 '(begin
3216 ;; Delete bundled libraries.
3217 (delete-file-recursively "lib")
3218 #t))))
3219 (build-system cmake-build-system)
3220 (arguments
3221 '(#:configure-flags
3222 (list "-DRUN_IN_PLACE=0"
3223 "-DENABLE_FREETYPE=1"
3224 "-DENABLE_GETTEXT=1"
3225 "-DENABLE_SYSTEM_JSONCPP=TRUE"
3226 (string-append "-DIRRLICHT_INCLUDE_DIR="
3227 (assoc-ref %build-inputs "irrlicht")
3228 "/include/irrlicht")
3229 (string-append "-DCURL_INCLUDE_DIR="
3230 (assoc-ref %build-inputs "curl")
3231 "/include/curl"))
3232 #:tests? #f)) ;no check target
3233 (native-search-paths
3234 (list (search-path-specification
3235 (variable "MINETEST_SUBGAME_PATH")
3236 (files '("share/minetest/games")))))
3237 (native-inputs
3238 `(("pkg-config" ,pkg-config)))
3239 (inputs
3240 `(("curl" ,curl)
3241 ("freetype" ,freetype)
3242 ("gettext" ,gettext-minimal)
3243 ("gmp" ,gmp)
3244 ("irrlicht" ,irrlicht)
3245 ("jsoncpp" ,jsoncpp)
3246 ("libjpeg" ,libjpeg-turbo)
3247 ("libpng" ,libpng)
3248 ("libogg" ,libogg)
3249 ("libvorbis" ,libvorbis)
3250 ("libxxf86vm" ,libxxf86vm)
3251 ("luajit" ,luajit)
3252 ("mesa" ,mesa)
3253 ("ncurses" ,ncurses)
3254 ("openal" ,openal)
3255 ("sqlite" ,sqlite)))
3256 (propagated-inputs
3257 `(("minetest-data" ,minetest-data)))
3258 (synopsis "Infinite-world block sandbox game")
3259 (description
3260 "Minetest is a sandbox construction game. Players can create and destroy
3261 various types of blocks in a three-dimensional open world. This allows
3262 forming structures in every possible creation, on multiplayer servers or as a
3263 single player. Mods and texture packs allow players to personalize the game
3264 in different ways.")
3265 (home-page "https://www.minetest.net/")
3266 (license license:lgpl2.1+)))
3267
3268 (define minetest-data
3269 (package
3270 (name "minetest-data")
3271 (version (package-version minetest))
3272 (source (origin
3273 (method git-fetch)
3274 (uri (git-reference
3275 (url "https://github.com/minetest/minetest_game")
3276 (commit version)))
3277 (file-name (git-file-name name version))
3278 (sha256
3279 (base32
3280 "1liciwlh013z5h08ib0psjbwn5wkvlr937ir7kslfk4vly984cjx"))))
3281 (build-system trivial-build-system)
3282 (native-inputs
3283 `(("source" ,source)))
3284 (arguments
3285 `(#:modules ((guix build utils))
3286 #:builder (begin
3287 (use-modules (guix build utils))
3288 (let ((install-dir (string-append
3289 %output
3290 "/share/minetest/games/minetest_game")))
3291 (mkdir-p install-dir)
3292 (copy-recursively
3293 (assoc-ref %build-inputs "source")
3294 install-dir)
3295 #t))))
3296 (synopsis "Main game data for the Minetest game engine")
3297 (description
3298 "Game data for the Minetest infinite-world block sandbox game.")
3299 (home-page "https://www.minetest.net/")
3300 (license license:lgpl2.1+)))
3301
3302 (define-public minetest-mineclone
3303 (package
3304 (name "minetest-mineclone")
3305 (version "0.66.2")
3306 (source (origin
3307 (method git-fetch)
3308 (uri (git-reference
3309 (url "https://git.minetest.land/Wuzzy/MineClone2")
3310 (commit version)))
3311 (file-name (git-file-name name version))
3312 (sha256
3313 (base32
3314 "0miszzlzplpvaj0j1yii9867ydr42wsaqa9g6grxdrci75p05g00"))))
3315 (build-system copy-build-system)
3316 (arguments
3317 `(#:install-plan
3318 '(("." "share/minetest/games/mineclone"))))
3319 (synopsis "Minecraft clone based on Minetest engine")
3320 (description
3321 "MineClone is a Minetest subgame, that aims to recreate Minecraft as
3322 closely as the engine allows.")
3323 (home-page "https://content.minetest.net/packages/Wuzzy/mineclone2/")
3324 (license license:gpl3+)))
3325
3326 (define glkterm
3327 (package
3328 (name "glkterm")
3329 (version "1.0.4")
3330 (source
3331 (origin
3332 (method url-fetch)
3333 (uri (string-append "http://www.ifarchive.org/if-archive/programming/"
3334 "glk/implementations/glkterm-104.tar.gz"))
3335 (sha256
3336 (base32
3337 "0zlj9nlnkdlvgbiliczinirqygiq8ikg5hzh5vgcmnpg9pvnwga7"))))
3338 (build-system gnu-build-system)
3339 (propagated-inputs `(("ncurses" ,ncurses))) ; required by Make.glkterm
3340 (arguments
3341 '(#:tests? #f ; no check target
3342 #:phases
3343 (modify-phases %standard-phases
3344 (replace 'install
3345 (lambda* (#:key outputs #:allow-other-keys)
3346 (let* ((out (assoc-ref outputs "out"))
3347 (inc (string-append out "/include"))
3348 (lib (string-append out "/lib")))
3349 (for-each
3350 (lambda (file)
3351 (install-file file inc))
3352 '("glk.h" "glkstart.h" "gi_blorb.h" "gi_dispa.h" "Make.glkterm"))
3353 (install-file "libglkterm.a" lib))
3354 #t))
3355 (delete 'configure)))) ; no configure script
3356 (home-page "http://www.eblong.com/zarf/glk/")
3357 (synopsis "Curses Implementation of the Glk API")
3358 (description
3359 "Glk defines a portable API for applications with text UIs. It was
3360 primarily designed for interactive fiction, but it should be suitable for many
3361 interactive text utilities, particularly those based on a command line.
3362 This is an implementation of the Glk library which runs in a terminal window,
3363 using the @code{curses.h} library for screen control.")
3364 (license (license:fsf-free "file://README"))))
3365
3366 (define-public glulxe
3367 (package
3368 (name "glulxe")
3369 (version "0.5.4")
3370 (source
3371 (origin
3372 (method url-fetch)
3373 (uri (string-append "http://www.ifarchive.org/if-archive/programming/"
3374 "glulx/interpreters/glulxe/glulxe-054.tar.gz"))
3375 (sha256
3376 (base32
3377 "0vipydg6ra90yf9b3ipgppwxyb2xdhcxwvirgjy0v20wlf56zhhz"))))
3378 (build-system gnu-build-system)
3379 (inputs `(("glk" ,glkterm)))
3380 (arguments
3381 '(#:tests? #f ; no check target
3382 #:make-flags
3383 (let* ((glk (assoc-ref %build-inputs "glk")))
3384 (list (string-append "GLKINCLUDEDIR=" glk "/include")
3385 (string-append "GLKLIBDIR=" glk "/lib")
3386 (string-append "GLKMAKEFILE=" "Make.glkterm")))
3387 #:phases
3388 (modify-phases %standard-phases
3389 (replace 'install
3390 (lambda* (#:key outputs #:allow-other-keys)
3391 (let* ((out (assoc-ref outputs "out"))
3392 (bin (string-append out "/bin")))
3393 (install-file "glulxe" bin))
3394 #t))
3395 (delete 'configure)))) ; no configure script
3396 (home-page "https://www.eblong.com/zarf/glulx/")
3397 (synopsis "Interpreter for Glulx VM")
3398 (description
3399 "Glulx is a 32-bit portable virtual machine intended for writing and
3400 playing interactive fiction. It was designed by Andrew Plotkin to relieve
3401 some of the restrictions in the venerable Z-machine format. This is the
3402 reference interpreter, using the Glk API.")
3403 (license license:expat)))
3404
3405 (define-public fifechan
3406 (package
3407 (name "fifechan")
3408 (version "0.1.5")
3409 (source (origin
3410 (method url-fetch)
3411 (uri (string-append "https://codeload.github.com/fifengine/"
3412 "fifechan/tar.gz/" version))
3413 (file-name (string-append name "-" version ".tar.gz"))
3414 (sha256
3415 (base32
3416 "0wxs9vz5x9y8chghd8vp7vfk089lfb0qnzggi17zrqkrngs5zgi9"))))
3417 (build-system cmake-build-system)
3418 (inputs
3419 `(("sdl2" ,sdl2)
3420 ("sdl2-image" ,sdl2-image)
3421 ("mesa" ,mesa)))
3422 (arguments
3423 '(#:tests? #f)) ; No included tests
3424 (home-page "https://fifengine.github.io/fifechan/")
3425 (synopsis "Cross platform GUI library specifically for games")
3426 (description
3427 "Fifechan is a lightweight cross platform GUI library written in C++
3428 specifically designed for games. It has a built in set of extendable GUI
3429 Widgets, and allows users to create more.")
3430 (license license:lgpl2.1+)))
3431
3432 (define-public fifengine
3433 (package
3434 (name "fifengine")
3435 (version "0.4.2")
3436 (source (origin
3437 (method url-fetch)
3438 (uri (string-append "https://codeload.github.com/fifengine/"
3439 "fifengine/tar.gz/" version))
3440 (file-name (string-append name "-" version ".tar.gz"))
3441 (patches (search-patches "fifengine-swig-compat.patch"))
3442 (sha256
3443 (base32
3444 "1y4grw25cq5iqlg05rnbyxw1njl11ypidnlsm3qy4sm3xxdvb0p8"))))
3445 (build-system cmake-build-system)
3446 (arguments
3447 `(#:tests? #f ; TODO The test running fails to run some tests.
3448 #:modules ((srfi srfi-1)
3449 (guix build cmake-build-system)
3450 (guix build utils))
3451 #:configure-flags
3452 (list
3453 (string-append "-DOPENALSOFT_INCLUDE_DIR="
3454 (assoc-ref %build-inputs "openal")
3455 "/include/AL")
3456 (string-append "-DPYTHON_SITE_PACKAGES="
3457 (assoc-ref %outputs "out")
3458 "/lib/python"
3459 ,(version-major+minor (package-version python))
3460 "/site-packages"))
3461 #:phases
3462 (modify-phases %standard-phases
3463 (add-after 'unpack 'patch-run_tests.py
3464 (lambda _
3465 ;; Patch the test runner to exit with a status of 1 if any test
3466 ;; fails, to allow detecting failures.
3467 (substitute* "run_tests.py"
3468 (("ERROR\\. One or more tests failed!'\\)")
3469 "ERROR. One or more tests failed!')
3470 \t\texit(1)"))
3471 #t))
3472 ;; Run tests after installation so that we can make use of the built
3473 ;; python modules.
3474 (delete 'check)
3475 (add-after 'install 'check
3476 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3477 (define python-version
3478 (let* ((version (last (string-split
3479 (assoc-ref inputs "python")
3480 #\-)))
3481 (components (string-split version #\.))
3482 (major+minor (take components 2)))
3483 (string-join major+minor ".")))
3484
3485 (when tests?
3486 ;; Set PYTHONPATH so that python finds the installed modules.
3487 (setenv "PYTHONPATH"
3488 (string-append (getenv "PYTHONPATH") ":"
3489 (assoc-ref outputs "out")
3490 "/lib/python"
3491 python-version
3492 "/site-packages"))
3493 ;; The tests require an X server.
3494 (system "Xvfb :1 &")
3495 (setenv "DISPLAY" ":1")
3496 (setenv "XDG_RUNTIME_DIR" "/tmp")
3497 ;; Run tests
3498 (chdir ,(string-append "../" name "-" version))
3499 (invoke "python3" "run_tests.py" "-a"))
3500 #t)))))
3501 (inputs
3502 `(("sdl2" ,sdl2)
3503 ("sdl2-image" ,sdl2-image)
3504 ("sdl2-ttf" ,sdl2-ttf)
3505 ("tinyxml" ,tinyxml)
3506 ("openal" ,openal)
3507 ("libogg" ,libogg)
3508 ("glew" ,glew)
3509 ("libvorbis" ,libvorbis)
3510 ("boost" ,boost)
3511 ("fifechan" ,fifechan)
3512 ("swig" ,swig)
3513 ("python" ,python)))
3514 (native-inputs
3515 `(("python" ,python)
3516 ("swig" ,swig)
3517 ("xvfb" ,xorg-server)))
3518 (propagated-inputs
3519 `(("python-future" ,python-future)))
3520 (home-page "https://www.fifengine.net/")
3521 (synopsis "FIFE is a multi-platform isometric game engine written in C++")
3522 (description
3523 "@acronym{FIFE, Flexible Isometric Free Engine} is a multi-platform
3524 isometric game engine. Python bindings are included allowing users to create
3525 games using Python as well as C++.")
3526 (license license:lgpl2.1+)))
3527
3528 (define-public fizmo
3529 (package
3530 (name "fizmo")
3531 (version "0.8.5")
3532 (source (origin
3533 (method url-fetch)
3534 (uri (string-append "https://fizmo.spellbreaker.org/source/"
3535 "fizmo-" version ".tar.gz"))
3536 (sha256
3537 (base32
3538 "1amyc4n41jf08kxmdgkk30bzzx54miaxa97w28f417qwn8lrl98w"))))
3539 (build-system gnu-build-system)
3540 (arguments
3541 '(#:configure-flags
3542 (let ((libjpeg (assoc-ref %build-inputs "libjpeg"))
3543 (ncurses (assoc-ref %build-inputs "ncurses")))
3544 (list (string-append "--with-jpeg-includedir=" libjpeg "/include")))))
3545 (native-inputs
3546 `(("pkg-config" ,pkg-config)))
3547 (inputs
3548 `(("freetype" ,freetype)
3549 ("libjpeg" ,libjpeg-turbo)
3550 ("libpng" ,libpng)
3551 ("libsndfile" ,libsndfile)
3552 ("libxml2" ,libxml2)
3553 ("ncurses" ,ncurses)
3554 ("sdl2" ,sdl2)))
3555 (home-page "https://fizmo.spellbreaker.org/")
3556 (synopsis "Z-machine interpreter")
3557 (description
3558 "Fizmo is a console-based Z-machine interpreter. It is used to play
3559 interactive fiction, also known as text adventures, which were implemented
3560 either by Infocom or created using the Inform compiler.")
3561 (license license:bsd-3)))
3562
3563 (define-public gnugo
3564 (package
3565 (name "gnugo")
3566 (version "3.8")
3567 (source (origin
3568 (method url-fetch)
3569 (uri (string-append "mirror://gnu/gnugo/gnugo-" version
3570 ".tar.gz"))
3571 (sha256
3572 (base32
3573 "0wkahvqpzq6lzl5r49a4sd4p52frdmphnqsfdv7gdp24bykdfs6s"))))
3574 (build-system gnu-build-system)
3575 (inputs `(("readline" ,readline)))
3576 (synopsis "Play the game of Go")
3577 (description
3578 "GNU Go is a program that plays the game of Go, in which players
3579 place stones on a grid to form territory or capture other stones. While
3580 it can be played directly from the terminal, rendered in ASCII characters,
3581 it is also possible to play GNU Go with 3rd party graphical interfaces or
3582 even in Emacs. It supports the standard game storage format (SGF, Smart
3583 Game Format) and inter-process communication format (GMP, Go Modem
3584 Protocol).")
3585 (home-page "https://www.gnu.org/software/gnugo/")
3586 (license license:gpl3+)))
3587
3588 (define-public extremetuxracer
3589 (package
3590 (name "extremetuxracer")
3591 (version "0.8.0")
3592 (source (origin
3593 (method url-fetch)
3594 (uri (string-append
3595 "mirror://sourceforge/extremetuxracer/releases/"
3596 version "/etr-" version ".tar.xz"))
3597 (sha256
3598 (base32
3599 "05ysaxvsgps9fxc421kdifsxmc1sn6n79cjaa0k0i3fs9qqrja2b"))))
3600 (build-system gnu-build-system)
3601 (native-inputs
3602 `(("pkg-config" ,pkg-config)))
3603 (inputs
3604 `(("glu" ,glu)
3605 ("sfml" ,sfml)))
3606 (synopsis "High-speed arctic racing game based on Tux Racer")
3607 ;; Snarfed straight from Debian.
3608 (description "Extreme Tux Racer, or etracer as it is called for short, is
3609 a simple OpenGL racing game featuring Tux, the Linux mascot. The goal of the
3610 game is to slide down a snow- and ice-covered mountain as quickly as possible,
3611 avoiding the trees and rocks that will slow you down.
3612
3613 Collect herrings and other goodies while sliding down the hill, but avoid fish
3614 bones.
3615
3616 This game is based on the GPL version of the famous game TuxRacer.")
3617 (home-page "https://sourceforge.net/projects/extremetuxracer/")
3618 (license license:gpl2+)))
3619
3620 (define-public supertuxkart
3621 (package
3622 (name "supertuxkart")
3623 (version "1.2")
3624 (source
3625 (origin
3626 (method url-fetch)
3627 (uri (string-append "mirror://sourceforge/supertuxkart/SuperTuxKart/"
3628 version "/SuperTuxKart-" version "-src.tar.xz"))
3629 (sha256
3630 (base32
3631 "0dvx56hmy6wdhl7m9dw8zc1n3jqfp05gnxl6zs1rbfdyzl5dybh5"))
3632 (modules '((guix build utils)))
3633 (snippet
3634 ;; Delete bundled library sources
3635 '(begin
3636 ;; Supertuxkart uses modified versions of the Irrlicht engine
3637 ;; and the bullet library. The developers gave an explanation
3638 ;; here: http://forum.freegamedev.net/viewtopic.php?f=17&t=3906
3639 ;; FIXME: try to unbundle angelscript, libmcpp and libraqm
3640 (for-each delete-file-recursively
3641 '("lib/glew"
3642 "lib/wiiuse"
3643 "lib/enet"))
3644 #t))))
3645 (build-system cmake-build-system)
3646 (arguments
3647 `(#:tests? #f ; no check target
3648 #:configure-flags
3649 (list "-DUSE_WIIUSE=0"
3650 "-DUSE_SYSTEM_GLEW=TRUE"
3651 "-DUSE_SYSTEM_ENET=TRUE"
3652 ;; In order to use the system ENet library, IPv6 support (added in
3653 ;; SuperTuxKart version 1.1) must be disabled.
3654 "-DUSE_IPV6=FALSE"
3655 ;; FIXME: needs libopenglrecorder
3656 "-DBUILD_RECORDER=0")))
3657 (inputs
3658 `(("curl" ,curl)
3659 ("freetype" ,freetype)
3660 ("fribidi" ,fribidi)
3661 ("glew" ,glew)
3662 ("harfbuzz" ,harfbuzz)
3663 ("libvorbis" ,libvorbis)
3664 ("libx11" ,libx11)
3665 ("libxrandr" ,libxrandr)
3666 ("mesa" ,mesa)
3667 ("openal" ,openal)
3668 ("sdl2" ,sdl2)
3669 ("zlib" ,zlib)
3670 ;; The following input is needed to build the bundled and modified
3671 ;; version of irrlicht.
3672 ("enet" ,enet)
3673 ("libjpeg" ,libjpeg-turbo)
3674 ("openssl" ,openssl)))
3675 (native-inputs
3676 `(("pkg-config" ,pkg-config)))
3677 (home-page "https://supertuxkart.net/Main_Page")
3678 (synopsis "3D kart racing game")
3679 (description "SuperTuxKart is a 3D kart racing game, with a focus on
3680 having fun over realism. You can play with up to 4 friends on one PC, racing
3681 against each other or just trying to beat the computer; single-player mode is
3682 also available.")
3683 (license license:gpl3+)))
3684
3685 (define-public unknown-horizons
3686 (package
3687 (name "unknown-horizons")
3688 (version "2019.1")
3689 (source (origin
3690 (method url-fetch)
3691 (uri (string-append "https://codeload.github.com/unknown-horizons/"
3692 "unknown-horizons/tar.gz/" version))
3693 (file-name (string-append name "-" version ".tar.gz"))
3694 (sha256
3695 (base32
3696 "1n747p7h0qp48szgp262swg0xh8kxy1bw8ag1qczs4i26hyzs5x4"))
3697 (patches (search-patches "unknown-horizons-python-3.8-distro.patch"))))
3698 (build-system python-build-system)
3699 (arguments
3700 '(#:phases
3701 (modify-phases %standard-phases
3702 (add-before 'build 'set-HOME
3703 (lambda _
3704 (setenv "HOME" "/tmp")
3705 #t))
3706 (add-after 'build 'build-extra
3707 (lambda _
3708 (invoke "python3" "./setup.py" "build_i18n")
3709 (invoke "python3" "horizons/engine/generate_atlases.py" "2048")
3710 #t))
3711 (add-after 'install 'patch
3712 (lambda* (#:key outputs #:allow-other-keys)
3713 (let ((out (assoc-ref outputs "out")))
3714 (substitute* (string-append out "/bin/unknown-horizons")
3715 (("os\\.chdir\\(get\\_content\\_dir\\_parent_path\\(\\)\\)")
3716 (string-append "os.chdir(\""
3717 (assoc-ref outputs "out")
3718 "/share/unknown-horizons\")"))))
3719 #t))
3720 (add-before 'check 'fix-tests-with-pytest>=4
3721 (lambda _
3722 (substitute* "tests/conftest.py"
3723 (("pytest_namespace")
3724 "pytest_configure")
3725 (("get_marker")
3726 "get_closest_marker"))
3727 #t))
3728 ;; TODO: Run GUI tests as well
3729 (replace 'check
3730 (lambda _
3731 (substitute* "horizons/constants.py"
3732 (("IS_DEV_VERSION = False")
3733 "IS_DEV_VERSION = True"))
3734 (invoke "pytest" "tests")
3735 (substitute* "horizons/constants.py"
3736 (("IS_DEV_VERSION = True")
3737 "IS_DEV_VERSION = False"))
3738 #t)))))
3739 (inputs
3740 `(("fifengine" ,fifengine)
3741 ("python:tk" ,python "tk")
3742 ("python-pillow" ,python-pillow)
3743 ("python-pyyaml" ,python-pyyaml)))
3744 (native-inputs
3745 `(("intltool" ,intltool)
3746 ("python-distro" ,python-distro)
3747
3748 ;; Required for tests
3749 ("python-greenlet" ,python-greenlet)
3750 ("python-polib" ,python-polib)
3751 ("python-pytest" ,python-pytest)
3752 ("python-pytest-mock" ,python-pytest-mock)))
3753 (home-page "http://unknown-horizons.org/")
3754 (synopsis "Isometric realtime strategy, economy and city building simulation")
3755 (description
3756 "Unknown Horizons is a 2D realtime strategy simulation with an emphasis
3757 on economy and city building. Expand your small settlement to a strong and
3758 wealthy colony, collect taxes and supply your inhabitants with valuable
3759 goods. Increase your power with a well balanced economy and with strategic
3760 trade and diplomacy.")
3761 (license (list
3762 license:gpl2+ ; Covers code
3763 license:expat ; tests/dummy.py, ext/polib.py
3764 license:cc-by-sa3.0 ; Covers some media content
3765 license:cc-by3.0 ; Covers some media content
3766 license:bsd-3)))) ; horizons/ext/speaklater.py
3767
3768 (define-public gnujump
3769 (package
3770 (name "gnujump")
3771 (version "1.0.8")
3772 (source (origin
3773 (method url-fetch)
3774 (uri (string-append "mirror://gnu/gnujump/gnujump-"
3775 version ".tar.gz"))
3776 (sha256
3777 (base32
3778 "05syy9mzbyqcfnm0hrswlmhwlwx54f0l6zhcaq8c1c0f8dgzxhqk"))))
3779 (build-system gnu-build-system)
3780 (arguments
3781 '(#:phases
3782 (modify-phases %standard-phases
3783 (add-before
3784 'configure 'link-libm
3785 (lambda _ (setenv "LIBS" "-lm")))
3786 (add-after 'install 'create-desktop-entry
3787 (lambda* (#:key outputs #:allow-other-keys)
3788 (let* ((out (assoc-ref outputs "out"))
3789 (apps (string-append out "/share/applications")))
3790 (mkdir-p apps)
3791 (with-output-to-file
3792 (string-append apps "/gnujump.desktop")
3793 (lambda _
3794 (format #t
3795 "[Desktop Entry]~@
3796 Name=GNUjump~@
3797 Comment=Jump up the tower to survive~@
3798 Exec=~a/bin/gnujump~@
3799 Terminal=false~@
3800 Type=Application~@
3801 Categories=Game;ArcadeGame~%"
3802 out)))))))))
3803 (inputs
3804 `(("glu" ,glu)
3805 ("mesa" ,mesa)
3806 ("sdl" ,sdl)
3807 ("sdl-image" ,sdl-image)
3808 ("sdl-mixer" ,sdl-mixer)))
3809 (home-page "http://gnujump.es.gnu.org/")
3810 (synopsis
3811 "Game of jumping to the next floor, trying not to fall")
3812 (description
3813 "GNUjump is a simple, yet addictive game in which you must jump from
3814 platform to platform to avoid falling, while the platforms drop at faster rates
3815 the higher you go. The game features multiplayer, unlimited FPS, smooth floor
3816 falling, themeable graphics and sounds, and replays.")
3817 (license license:gpl3+)))
3818
3819 (define-public wesnoth
3820 (package
3821 (name "wesnoth")
3822 (version "1.14.15")
3823 (source (origin
3824 (method url-fetch)
3825 (uri (string-append "mirror://sourceforge/wesnoth/wesnoth-"
3826 (version-major+minor version)
3827 "/wesnoth-" version "/"
3828 "wesnoth-" version ".tar.bz2"))
3829 (sha256
3830 (base32
3831 "05iapxj3nzaqh10y42yq1jf7spxgm4iwjw4qj1c4lnb25xp4mc2h"))))
3832 (build-system cmake-build-system)
3833 (arguments
3834 `(#:tests? #f)) ;no check target
3835 (native-inputs
3836 `(("gettext" ,gettext-minimal)
3837 ("pkg-config" ,pkg-config)))
3838 (inputs
3839 `(("boost" ,boost)
3840 ("dbus" ,dbus)
3841 ("fribidi" ,fribidi)
3842 ("libvorbis" ,libvorbis)
3843 ("openssl" ,openssl)
3844 ("pango" ,pango)
3845 ("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
3846 (home-page "https://www.wesnoth.org/")
3847 (synopsis "Turn-based strategy game")
3848 (description
3849 "The Battle for Wesnoth is a fantasy, turn based tactical strategy game,
3850 with several single player campaigns, and multiplayer games (both networked and
3851 local).
3852
3853 Battle for control on a range of maps, using variety of units which have
3854 advantages and disadvantages against different types of attacks. Units gain
3855 experience and advance levels, and are carried over from one scenario to the
3856 next campaign.")
3857 (license license:gpl2+)))
3858
3859 (define-public wesnoth-server
3860 (package
3861 (inherit wesnoth)
3862 (name "wesnoth-server")
3863 (inputs
3864 `(("boost" ,boost)
3865 ("icu4c" ,icu4c)
3866 ("openssl" ,openssl)
3867 ("sdl2" ,sdl2)))
3868 (arguments
3869 `(#:configure-flags '("-DENABLE_GAME=OFF")
3870 ,@(package-arguments wesnoth)))
3871 (synopsis "Dedicated @emph{Battle for Wesnoth} server")
3872 (description "This package contains a dedicated server for @emph{The
3873 Battle for Wesnoth}.")))
3874
3875 (define-public gamine
3876 (package
3877 (name "gamine")
3878 (version "1.6")
3879 (source (origin
3880 (method url-fetch)
3881 (uri (string-append "mirror://sourceforge/gamine-game/"
3882 "gamine-" version ".tar.gz"))
3883 (sha256
3884 (base32
3885 "1sc6f4445ciigd6yw0ri92746k4hk6ps0bvj9fm1gbp3c3fslk5n"))))
3886 (build-system gnu-build-system)
3887 (native-inputs
3888 `(("pkg-config" ,pkg-config)
3889 ("intltool" ,intltool)))
3890 (inputs
3891 `(("gstreamer" ,gstreamer)
3892 ("gst-plugins-base" ,gst-plugins-base) ; playbin plugin
3893 ("gst-plugins-good" ,gst-plugins-good) ; for wav playback
3894 ("gtk+" ,gtk+)))
3895 (arguments
3896 `(#:tests? #f
3897 #:make-flags
3898 (let ((out (assoc-ref %outputs "out")))
3899 (list (string-append "PREFIX=" out)
3900 (string-append "SYSCONFDIR=" out "/etc")))
3901 #:phases
3902 (modify-phases %standard-phases
3903 (delete 'configure)
3904 (add-after
3905 'install 'wrap-gamine
3906 (lambda* (#:key outputs #:allow-other-keys)
3907 (let ((out (assoc-ref outputs "out"))
3908 (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
3909 (wrap-program (string-append out "/bin/gamine")
3910 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))
3911 #t)))))
3912 (home-page "http://gamine-game.sourceforge.net/")
3913 (synopsis "Mouse and keyboard discovery for children")
3914 (description
3915 "Gamine is a game designed for young children who are learning to use the
3916 mouse and keyboard. The child uses the mouse to draw colored dots and lines
3917 on the screen and keyboard to display letters.")
3918 ;; Most files under gpl2+ or gpl3+, but eat.wav under gpl3
3919 (license license:gpl3)))
3920
3921 (define-public manaplus
3922 (package
3923 (name "manaplus")
3924 (version "1.9.3.23")
3925 (source (origin
3926 (method url-fetch)
3927 (uri (string-append
3928 "https://repo.manaplus.org/manaplus/download/"
3929 version "/manaplus-" version ".tar.xz"))
3930 (sha256
3931 (base32
3932 "1ky182p4svwdqm6cf7jbns85hidkhkhq4s17cs2p381f0klapfjz"))))
3933 (build-system gnu-build-system)
3934 (arguments
3935 '(#:configure-flags
3936 (list (string-append "CPPFLAGS=-I"
3937 (assoc-ref %build-inputs "sdl-union")
3938 "/include/SDL"))))
3939 (native-inputs
3940 `(("pkg-config" ,pkg-config)))
3941 (inputs
3942 `(("glu" ,glu)
3943 ("curl" ,curl)
3944 ("libxml2" ,libxml2)
3945 ("mesa" ,mesa)
3946 ("sdl-union" ,(sdl-union))))
3947 (home-page "https://manaplus.org")
3948 (synopsis "Client for 'The Mana World' and similar games")
3949 (description
3950 "ManaPlus is a 2D MMORPG client for game servers. It is the only
3951 fully supported client for @uref{http://www.themanaworld.org, The mana
3952 world}, @uref{http://evolonline.org, Evol Online} and
3953 @uref{http://landoffire.org, Land of fire}.")
3954 ;; "src/debug/*" and "src/sdl2gfx/*" are under Zlib.
3955 ;; "data/themes/{golden-delicious,jewelry}/*" are under CC-BY-SA.
3956 ;; The rest is under GPL2+.
3957 (license (list license:gpl2+ license:zlib license:cc-by-sa4.0))))
3958
3959 (define openttd-engine
3960 (package
3961 (name "openttd-engine")
3962 (version "1.10.3")
3963 (source
3964 (origin (method url-fetch)
3965 (uri (string-append "https://cdn.openttd.org/openttd-releases/"
3966 version "/openttd-" version "-source.tar.xz"))
3967 (sha256
3968 (base32
3969 "0fxmfz1mm95a2x0rnzfff9wb8q57w0cvsdd0z7agdcbyakph25n1"))))
3970 (build-system gnu-build-system)
3971 (arguments
3972 `(#:tests? #f ; no "check" target
3973 #:phases
3974 (modify-phases %standard-phases
3975 ;; The build process fails if the configure script is passed the
3976 ;; option "--enable-fast-install".
3977 (replace 'configure
3978 (lambda* (#:key inputs outputs (configure-flags '())
3979 #:allow-other-keys)
3980 (let ((out (assoc-ref outputs "out"))
3981 (lzo (assoc-ref inputs "lzo")))
3982 (apply invoke "./configure"
3983 (string-append "--prefix=" out)
3984 ;; Provide the "lzo" path.
3985 (string-append "--with-liblzo2="
3986 lzo "/lib/liblzo2.a")
3987 ;; Put the binary in 'bin' instead of 'games'.
3988 "--binary-dir=bin"
3989 configure-flags)))))))
3990 (native-inputs `(("pkg-config" ,pkg-config)))
3991 (inputs
3992 `(("allegro" ,allegro)
3993 ("fontconfig" ,fontconfig)
3994 ("freetype" ,freetype)
3995 ("icu4c" ,icu4c)
3996 ("libpng" ,libpng)
3997 ("lzo" ,lzo)
3998 ("sdl" ,sdl)
3999 ("xz" ,xz)
4000 ("zlib" ,zlib)))
4001 (synopsis "Transportation economics simulator game")
4002 (description "OpenTTD is a game in which you transport goods and
4003 passengers by land, water and air. It is a re-implementation of Transport
4004 Tycoon Deluxe with many enhancements including multiplayer mode,
4005 internationalization support, conditional orders and the ability to clone,
4006 autoreplace and autoupdate vehicles. This package only includes the game
4007 engine. When you start it you will be prompted to download a graphics set.")
4008 (home-page "https://www.openttd.org/")
4009 ;; This package is GPLv2, except for a few files located in
4010 ;; "src/3rdparty/" which are under the 3-clause BSD, LGPLv2.1+ and Zlib
4011 ;; licenses. In addition, this software contains an in-game downloader
4012 ;; from which the user may find non-functional data licensed under
4013 ;; different terms.
4014 (license (list license:bsd-3 license:gpl2 license:lgpl2.1+ license:zlib))))
4015
4016 (define openttd-opengfx
4017 (package
4018 (name "openttd-opengfx")
4019 (version "0.6.0")
4020 (source
4021 (origin
4022 (method url-fetch)
4023 (uri (string-append "https://cdn.openttd.org/opengfx-releases/"
4024 version "/opengfx-" version "-source.tar.xz"))
4025 (sha256
4026 (base32
4027 "0qxc6gl2gxcrn1np88dnjgbaaakkkx96b13rcmy1spryc8c09hyr"))))
4028 (build-system gnu-build-system)
4029 (arguments
4030 '(#:make-flags (list "CC=gcc"
4031 (string-append "INSTALL_DIR="
4032 (assoc-ref %outputs "out")
4033 "/share/games/openttd/baseset/opengfx"))
4034 #:phases
4035 (modify-phases %standard-phases
4036 (replace 'configure
4037 (lambda _
4038 ;; Make sure HOME is writable for GIMP.
4039 (setenv "HOME" (getcwd))
4040
4041 ;; Redirect stdout, not stderr, to /dev/null. This prevents
4042 ;; dos2unix from receiving its version information as a flag.
4043 (substitute* "Makefile"
4044 (("\\$\\(UNIX2DOS\\) -q --version 2>/dev/null")
4045 "$(UNIX2DOS) -q --version 1>/dev/null")))))
4046 ;; The check phase for this package only checks the md5sums of the built
4047 ;; GRF files against the md5sums of the release versions. Because we use
4048 ;; different software versions than upstream does, some of the md5sums
4049 ;; are different. However, the package is still reproducible, it's safe
4050 ;; to disable this test.
4051 #:tests? #f
4052 #:parallel-build? #f))
4053 (native-inputs `(("dos2unix" ,dos2unix)
4054 ("gimp" ,gimp)
4055 ("grfcodec" ,grfcodec)
4056 ("nml" ,nml)
4057 ("which" ,which)
4058 ("python" ,python-2)))
4059 (home-page "http://dev.openttdcoop.org/projects/opengfx")
4060 (synopsis "Base graphics set for OpenTTD")
4061 (description
4062 "The OpenGFX project is an implementation of the OpenTTD base graphics
4063 set that aims to ensure the best possible out-of-the-box experience.
4064
4065 OpenGFX provides you with...
4066 @enumerate
4067 @item All graphics you need to enjoy OpenTTD.
4068 @item Uniquely drawn rail vehicles for every climate.
4069 @item Completely snow-aware rivers.
4070 @item Different river and sea water.
4071 @item Snow-aware buoys.
4072 @end enumerate")
4073 (license license:gpl2)))
4074
4075 (define openttd-opensfx
4076 (package
4077 (name "openttd-opensfx")
4078 (version "0.2.3")
4079 (source
4080 (origin
4081 (method url-fetch)
4082 (uri (string-append
4083 "https://binaries.openttd.org/extra/opensfx/"
4084 version "/opensfx-" version "-source.tar.gz"))
4085 (sha256
4086 (base32
4087 "03jxgp02ks31hmsdh4xh0xcpkb70ds8jakc9pfc1y9vdrdavh4p5"))))
4088 (build-system gnu-build-system)
4089 (native-inputs
4090 `(("catcodec" ,catcodec)
4091 ("python" ,python-2)))
4092 (arguments
4093 `(#:make-flags
4094 (list (string-append "INSTALL_DIR=" %output
4095 "/share/games/openttd/baseset/opensfx"))
4096 #:phases
4097 (modify-phases %standard-phases
4098 (add-after 'unpack 'make-reproducible
4099 (lambda _
4100 ;; Remove the time dependency of the installed tarball by setting
4101 ;; the modification times if its members to 0.
4102 (substitute* "scripts/Makefile.def"
4103 (("-cf") " --mtime=@0 -cf"))
4104 #t))
4105 (delete 'configure))))
4106 (home-page "http://dev.openttdcoop.org/projects/opensfx")
4107 (synopsis "Base sounds for OpenTTD")
4108 (description "OpenSFX is a set of free base sounds for OpenTTD which make
4109 it possible to play OpenTTD without requiring the proprietary sound files from
4110 the original Transport Tycoon Deluxe.")
4111 (license license:cc-sampling-plus-1.0)))
4112
4113 (define openttd-openmsx
4114 (package
4115 (name "openttd-openmsx")
4116 (version "0.3.1")
4117 (source
4118 (origin
4119 (method url-fetch)
4120 (uri (string-append
4121 "https://binaries.openttd.org/extra/openmsx/"
4122 version "/openmsx-" version "-source.tar.gz"))
4123 (sha256
4124 (base32
4125 "0nskq97a6fsv1v6d62zf3yb8whzhqnlh3lap3va3nzvj7csjgf7c"))))
4126 (build-system gnu-build-system)
4127 (native-inputs
4128 `(("python" ,python-2)))
4129 (arguments
4130 `(#:make-flags
4131 (list (string-append "INSTALL_DIR=" %output
4132 "/share/games/openttd/baseset"))
4133 #:phases
4134 (modify-phases %standard-phases
4135 (delete 'configure)
4136 (add-after 'install 'post-install
4137 ;; Rename openmsx-version to openmsx
4138 (lambda* (#:key outputs #:allow-other-keys)
4139 (let ((install-directory (string-append (assoc-ref outputs "out")
4140 "/share/games/openttd/baseset")))
4141 (rename-file (string-append install-directory "/openmsx-" ,version)
4142 (string-append install-directory "/openmsx"))
4143 #t))))))
4144 (home-page "http://dev.openttdcoop.org/projects/openmsx")
4145 (synopsis "Music set for OpenTTD")
4146 (description "OpenMSX is a music set for OpenTTD which makes it possible
4147 to play OpenTTD without requiring the proprietary music from the original
4148 Transport Tycoon Deluxe.")
4149 (license license:gpl2)))
4150
4151 (define-public openttd
4152 (package
4153 (inherit openttd-engine)
4154 (name "openttd")
4155 (arguments
4156 `(#:configure-flags
4157 (list (string-append "--with-midi=" (assoc-ref %build-inputs "timidity++")
4158 "/bin/timidity"))
4159 ,@(substitute-keyword-arguments (package-arguments openttd-engine)
4160 ((#:phases phases)
4161 `(modify-phases ,phases
4162 (add-after 'install 'install-data
4163 (lambda* (#:key inputs outputs #:allow-other-keys)
4164 (for-each
4165 (lambda (input)
4166 (copy-recursively (assoc-ref inputs input)
4167 (assoc-ref outputs "out")))
4168 (list "opengfx" "openmsx" "opensfx"))
4169 #t)))))))
4170 (inputs
4171 `(("timidity++" ,timidity++)
4172 ,@(package-inputs openttd-engine)))
4173 (native-inputs
4174 `(("opengfx" ,openttd-opengfx)
4175 ("openmsx" ,openttd-openmsx)
4176 ("opensfx" ,openttd-opensfx)
4177 ,@(package-native-inputs openttd-engine)))))
4178
4179 (define openrct2-title-sequences
4180 (package
4181 (name "openrct2-title-sequences")
4182 (version "0.1.2")
4183 (source
4184 (origin
4185 (method url-fetch)
4186 (uri (string-append "https://github.com/OpenRCT2/title-sequences/releases/download/v"
4187 version "/title-sequence-v" version ".zip"))
4188 (file-name (string-append name "-" version ".zip"))
4189 (sha256
4190 (base32
4191 "0qbyxrsw8hlgaq0r5d7lx7an3idy4qbfv7yiw9byhldk763n9cfw"))))
4192 (build-system trivial-build-system)
4193 (native-inputs
4194 `(("bash" ,bash)
4195 ("coreutils" ,coreutils)
4196 ("unzip" ,unzip)))
4197 (arguments
4198 `(#:modules ((guix build utils))
4199 #:builder
4200 (begin
4201 (use-modules (guix build utils))
4202 (let* ((out (assoc-ref %outputs "out"))
4203 (openrct2-title-sequences (string-append out
4204 "/share/openrct2/title-sequences"))
4205 (source (assoc-ref %build-inputs "source"))
4206 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
4207 (copy-file source (string-append ,name "-" ,version ".zip"))
4208 (invoke unzip (string-append ,name "-" ,version ".zip"))
4209 (delete-file (string-append ,name "-" ,version ".zip"))
4210 (mkdir-p openrct2-title-sequences)
4211 (copy-recursively "."
4212 openrct2-title-sequences)
4213 #t))))
4214 (home-page "https://github.com/OpenRCT2/OpenRCT2")
4215 (synopsis "Title sequences for OpenRCT2")
4216 (description
4217 "openrct2-title-sequences is a set of title sequences for OpenRCT2.")
4218 (license license:gpl3+)))
4219
4220 (define openrct2-objects
4221 (package
4222 (name "openrct2-objects")
4223 (version "1.0.20")
4224 (source
4225 (origin
4226 (method url-fetch)
4227 (uri (string-append "https://github.com/OpenRCT2/objects/releases/download/v"
4228 version "/objects.zip"))
4229 (file-name (string-append name "-" version ".zip"))
4230 (sha256
4231 (base32 "1q7a38kcwrfijav6app1gf253yfv8b0rljbkah8040y6i7snw9mw"))))
4232 (build-system trivial-build-system)
4233 (native-inputs
4234 `(("bash" ,bash)
4235 ("coreutils" ,coreutils)
4236 ("unzip" ,unzip)))
4237 (arguments
4238 `(#:modules ((guix build utils))
4239 #:builder
4240 (begin
4241 (use-modules (guix build utils))
4242 (let* ((out (assoc-ref %outputs "out"))
4243 (openrct2-objects (string-append out
4244 "/share/openrct2/objects"))
4245 (source (assoc-ref %build-inputs "source"))
4246 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
4247 (copy-file source (string-append ,name "-" ,version ".zip"))
4248 (invoke unzip (string-append ,name "-" ,version ".zip"))
4249 (delete-file (string-append ,name "-" ,version ".zip"))
4250 (mkdir-p openrct2-objects)
4251 (copy-recursively "."
4252 openrct2-objects)
4253 #t))))
4254 (home-page "https://github.com/OpenRCT2/OpenRCT2")
4255 (synopsis "Objects for OpenRCT2")
4256 (description
4257 "openrct2-objects is a set of objects for OpenRCT2.")
4258 (license license:gpl3+)))
4259
4260 (define-public openrct2
4261 (package
4262 (name "openrct2")
4263 (version "0.3.2")
4264 (source
4265 (origin
4266 (method git-fetch)
4267 (uri (git-reference
4268 (url "https://github.com/OpenRCT2/OpenRCT2")
4269 (commit (string-append "v" version))))
4270 (file-name (git-file-name name version))
4271 (sha256
4272 (base32 "1fd32wniiy6qz2046ppqfj2sb3rf2qf086rf9v1bdhyj254d0b1z"))))
4273 (build-system cmake-build-system)
4274 (arguments
4275 `(#:configure-flags (list "-DDOWNLOAD_OBJECTS=OFF"
4276 "-DDOWNLOAD_TITLE_SEQUENCES=OFF")
4277 #:tests? #f ; tests require network access
4278 #:phases
4279 (modify-phases %standard-phases
4280 (add-after 'unpack 'fix-usr-share-paths&add-data
4281 (lambda* (#:key inputs outputs #:allow-other-keys)
4282 (let ((titles (assoc-ref inputs "openrct2-title-sequences"))
4283 (objects (assoc-ref inputs "openrct2-objects")))
4284 ;; Fix some references to /usr/share.
4285 (substitute* "src/openrct2/platform/Platform.Linux.cpp"
4286 (("/usr/share")
4287 (string-append (assoc-ref %outputs "out") "/share")))
4288 (copy-recursively
4289 (string-append titles "/share/openrct2/title-sequences")
4290 "data/title")
4291 (copy-recursively
4292 (string-append objects "/share/openrct2/objects")
4293 "data/object"))))
4294 (add-before 'configure 'get-rid-of-errors
4295 (lambda _
4296 ;; Don't treat warnings as errors.
4297 (substitute* "CMakeLists.txt"
4298 (("-Werror") ""))
4299 #t)))))
4300 (inputs `(("curl" ,curl)
4301 ("duktape" ,duktape)
4302 ("fontconfig" ,fontconfig)
4303 ("freetype" ,freetype)
4304 ("icu4c" ,icu4c)
4305 ("jansson" ,jansson)
4306 ("libpng" ,libpng)
4307 ("libzip" ,libzip)
4308 ("mesa" ,mesa)
4309 ("nlohmann-json-cpp" ,nlohmann-json-cpp)
4310 ("openrct2-objects" ,openrct2-objects)
4311 ("openrct2-title-sequences" ,openrct2-title-sequences)
4312 ("openssl" ,openssl)
4313 ("sdl2" ,sdl2)
4314 ("speexdsp" ,speexdsp)
4315 ("zlib" ,zlib)))
4316 (native-inputs
4317 `(("pkg-config" ,pkg-config)))
4318 (home-page "https://github.com/OpenRCT2/OpenRCT2")
4319 (synopsis "Free software re-implementation of RollerCoaster Tycoon 2")
4320 (description "OpenRCT2 is a free software re-implementation of
4321 RollerCoaster Tycoon 2 (RCT2). The gameplay revolves around building and
4322 maintaining an amusement park containing attractions, shops and facilities.
4323
4324 Note that this package does @emph{not} provide the game assets (sounds,
4325 images, etc.)")
4326 ;; See <https://github.com/OpenRCT2/OpenRCT2/wiki/Required-RCT2-files>
4327 ;; regarding assets.
4328 (license license:gpl3+)))
4329
4330 (define-public pinball
4331 (package
4332 (name "pinball")
4333 (version "0.3.1")
4334 (source
4335 (origin (method url-fetch)
4336 (uri (string-append "mirror://sourceforge/pinball/pinball/"
4337 "pinball-" version "/"
4338 "pinball-" version ".tar.gz"))
4339 (sha256
4340 (base32
4341 "1f2whlrfidwfh8lvr8cspcyirc6840r5d1ajm7x99qmngygrhixs"))
4342 (patches (search-patches "pinball-const-fix.patch"
4343 "pinball-cstddef.patch"
4344 "pinball-missing-separators.patch"
4345 "pinball-src-deps.patch"
4346 "pinball-system-ltdl.patch"))))
4347 (build-system gnu-build-system)
4348 (inputs
4349 `(("glu" ,glu)
4350 ("mesa" ,mesa)
4351 ("sdl" ,sdl)
4352 ("sdl-image" ,sdl-image)
4353 ("sdl-mixer" ,sdl-mixer)))
4354 (arguments
4355 '(#:configure-flags
4356 (list (string-append "CPPFLAGS=-I"
4357 (assoc-ref %build-inputs "sdl-image")
4358 "/include/SDL -I"
4359 (assoc-ref %build-inputs "sdl-mixer")
4360 "/include/SDL"))))
4361 (home-page "http://pinball.sourceforge.net")
4362 (synopsis "Pinball simulator")
4363 (description "The Emilia Pinball Project is a pinball simulator. There
4364 are only two levels to play with, but they are very addictive.")
4365 (license license:gpl2)))
4366
4367 (define-public pioneers
4368 (package
4369 (name "pioneers")
4370 (version "15.6")
4371 (source (origin
4372 (method url-fetch)
4373 (uri (string-append "https://downloads.sourceforge.net/pio/"
4374 "pioneers-" version ".tar.gz"))
4375 (sha256
4376 (base32
4377 "07b3xdd81n8ybsb4fzc5lx0813y9crzp1hj69khncf4faj48sdcs"))))
4378 (build-system gnu-build-system)
4379 (inputs `(("avahi" ,avahi)
4380 ("gtk+" ,gtk+)
4381 ("librsvg" ,librsvg)))
4382 (native-inputs `(("intltool" ,intltool)
4383 ("itstool" ,itstool)
4384 ("libxml2" ,libxml2)
4385 ("pkg-config" ,pkg-config)))
4386 (synopsis "Board game inspired by The Settlers of Catan")
4387 (description "Pioneers is an emulation of the board game The Settlers of
4388 Catan. It can be played on a local network, on the internet, and with AI
4389 players.")
4390 (home-page "http://pio.sourceforge.net/")
4391 (license license:gpl2+)))
4392
4393 (define-public einstein
4394 (package
4395 (name "einstein")
4396 (version "2.0")
4397 (source (origin
4398 (method url-fetch)
4399 (uri (string-append "mirror://debian/pool/main/e/"
4400 "einstein/einstein_2.0.dfsg.2.orig.tar.gz"))
4401 (sha256
4402 (base32
4403 "1hxrlv6n8py48j487i6wbb4n4vd55w0na69r7ccmmr9vmrsw5mlk"))
4404 (patches (search-patches "einstein-build.patch"))))
4405 (build-system gnu-build-system)
4406 (inputs
4407 `(("freetype" ,freetype)
4408 ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-ttf)))
4409 ("zlib" ,zlib)))
4410 (native-inputs
4411 `(("font-dejavu" ,font-dejavu)))
4412 (arguments
4413 `(#:tests? #f ; no check target
4414 #:phases
4415 (modify-phases %standard-phases
4416 (replace 'configure
4417 (lambda* (#:key outputs inputs #:allow-other-keys)
4418 (let ((out (assoc-ref outputs "out"))
4419 (dejavu (string-append (assoc-ref inputs "font-dejavu")
4420 "/share/fonts/truetype/DejaVuSans.ttf")))
4421 (substitute* "Makefile"
4422 (("PREFIX=/usr/local") (string-append "PREFIX=" out)))
4423 ;; The patch above registers a free font for use by the binary,
4424 ;; but the font is copied during the compile phase into a
4425 ;; resources file, so we need to make the ttf file available.
4426 (symlink dejavu "res/DejaVuSans.ttf")
4427 #t))))))
4428 (synopsis "Logic puzzle game")
4429 (description "The goal of this logic game is to open all cards in a 6x6
4430 grid, using a number of hints as to their relative position. The game idea
4431 is attributed to Albert Einstein.")
4432 ;; The original home page has disappeared.
4433 (home-page (string-append "http://web.archive.org/web/20120521062745/"
4434 "http://games.flowix.com/en/index.html"))
4435 ;; License according to
4436 ;; http://web.archive.org/web/20150222180355/http://www.babichev.info/en/projects/index.html
4437 ;; The source code is a DFSG-sanitized tarball and does not contain any
4438 ;; license information.
4439 (license license:gpl3+)))
4440
4441 (define-public powwow
4442 (package
4443 (name "powwow")
4444 (version "1.2.22")
4445 (source (origin
4446 (method url-fetch)
4447 (uri (string-append
4448 "https://www.hoopajoo.net/static/projects/powwow-"
4449 version ".tar.gz"))
4450 (sha256
4451 (base32
4452 "12i11b8zxg8vdb9d6ims8qy2lmwwr42rcqbwq3vsa1x94s51bcbp"))))
4453 (inputs
4454 `(("ncurses" ,ncurses)))
4455 (build-system gnu-build-system)
4456 (home-page "https://www.hoopajoo.net/projects/powwow.html")
4457 (synopsis "MUD and telnet client")
4458 (description
4459 "POWWOW is a client software which can be used for telnet as well as for
4460 @dfn{Multi-User Dungeon} (MUD). Additionally it can serve as a nice client for
4461 the chat server psyced with the specific config located at
4462 http://lavachat.symlynx.com/unix/")
4463 (license license:gpl2+)))
4464
4465 (define-public red-eclipse
4466 (let ((release "2.0.0")
4467 (revision 0))
4468 (package
4469 (name "red-eclipse")
4470 (version (if (zero? revision)
4471 release
4472 (string-append release "-"
4473 (number->string revision))))
4474 (source
4475 (origin
4476 (method git-fetch)
4477 (uri (git-reference
4478 (url "https://github.com/redeclipse/base")
4479 (commit (string-append "v" release))
4480 (recursive? #t))) ; for game data
4481 (file-name (git-file-name name version))
4482 (sha256
4483 (base32 "0sz0mqhwx8r9n4mk3qrxw420nlsm3y0n48gd0lazgd64lfqjh3ab"))
4484 (modules '((guix build utils)))
4485 (snippet
4486 ;; Remove proprietary libraries and other pre-compiled binaries.
4487 '(begin
4488 (delete-file-recursively "bin")
4489 #t))))
4490 (build-system gnu-build-system)
4491 (arguments
4492 `(#:tests? #f ; no check target
4493 #:make-flags (list "CC=gcc" "-Csrc"
4494 (string-append "INSTDIR="
4495 (assoc-ref %outputs "out") "/bin")
4496 (string-append "prefix="
4497 (assoc-ref %outputs "out")))
4498 #:phases
4499 (modify-phases %standard-phases
4500 (add-after 'unpack 'add-store-data-package-path-as-default
4501 (lambda* (#:key outputs #:allow-other-keys)
4502 (substitute* "src/engine/server.cpp"
4503 (("data = \"data\"")
4504 (string-append "data = \""
4505 (assoc-ref outputs "out")
4506 "/share/redeclipse/data\"")))
4507 #t))
4508 (delete 'configure) ; no configure script
4509 (add-after 'set-paths 'set-sdl-paths
4510 (lambda* (#:key inputs #:allow-other-keys)
4511 (setenv "CPATH"
4512 (string-append (assoc-ref inputs "sdl-union")
4513 "/include/SDL2:"
4514 (or (getenv "CPATH") "")))
4515 #t))
4516 (add-after 'install 'copy-data
4517 (lambda* (#:key outputs #:allow-other-keys)
4518 (let ((out (assoc-ref outputs "out")))
4519 (copy-recursively "config"
4520 (string-append out "/config"))
4521 (copy-file "doc/examples/servinit.cfg"
4522 (string-append out "/config/servinit.cfg"))
4523 (copy-recursively "data"
4524 (string-append out "/share/redeclipse/data"))
4525 (mkdir-p (string-append out "/lib/redeclipse"))
4526 (symlink (string-append out "/share/redeclipse/data")
4527 (string-append out "/lib/redeclipse/data")))
4528 #t))
4529 (add-after 'copy-data 'wrap-program
4530 (lambda* (#:key inputs outputs #:allow-other-keys)
4531 (let* ((out (assoc-ref outputs "out"))
4532 (bin (string-append out "/bin")))
4533 (with-directory-excursion bin
4534 (rename-file "redeclipse_linux"
4535 ".redeclipse_linux-real")
4536 (rename-file "redeclipse_server_linux"
4537 ".redeclipse_server_linux-real")
4538 (call-with-output-file "redeclipse_linux"
4539 (lambda (port)
4540 (format port "#!~a/bin/sh
4541 # Run the thing from its home, otherwise it just bails out.
4542 cd \"~a\"
4543 exec -a \"$0\" ~a/.redeclipse_linux-real~%"
4544 (assoc-ref inputs "bash") ;implicit input
4545 (string-append out)
4546 (string-append bin))))
4547 (call-with-output-file "redeclipse_server_linux"
4548 (lambda (port)
4549 (format port "#!~a/bin/sh
4550 # Run the thing from its home, otherwise it just bails out.
4551 cd \"~a\"
4552 exec -a \"$0\" ~a/.redeclipse_server_linux-real~%"
4553 (assoc-ref inputs "bash") ;implicit input
4554 (string-append out)
4555 (string-append bin))))
4556 (chmod "redeclipse_linux" #o555)
4557 (chmod "redeclipse_server_linux" #o555)))
4558 #t)))))
4559 (native-inputs
4560 `(("pkg-config" ,pkg-config)))
4561 (inputs
4562 `(("curl" ,curl)
4563 ("freetype" ,freetype)
4564 ("glu" ,glu)
4565 ("sdl-union" ,(sdl-union (list sdl2
4566 sdl2-image
4567 sdl2-mixer)))))
4568 (home-page "https://redeclipse.net/")
4569 (synopsis "Arena shooter derived from the Cube 2 engine")
4570 (description
4571 "Red Eclipse is an arena shooter, created from the Cube2 engine.
4572 Offering an innovative parkour system and distinct but all potent weapons,
4573 Red Eclipse provides fast paced and accessible gameplay.")
4574 ;; The engine is under Zlib; data files are covered by the other
4575 ;; licenses. More details at file:///doc/all-licenses.txt.
4576 (license (list license:expat
4577 license:zlib
4578 license:cc-by-sa4.0
4579 license:cc-by-sa3.0
4580 license:cc-by3.0
4581 license:cc0
4582 license:public-domain
4583 license:silofl1.1)))))
4584
4585 (define-public grue-hunter
4586 (package
4587 (name "grue-hunter")
4588 (version "1.0")
4589 (source (origin
4590 (method url-fetch)
4591 (uri (string-append "https://jxself.org/grue-hunter.tar.gz"))
4592 (sha256
4593 (base32
4594 "1hjcpy5439qs3v2zykis7hsi0i17zjs62gks3zd8mnfw9ni4i2h3"))))
4595 (build-system trivial-build-system) ; no Makefile.PL
4596 (arguments `(#:modules ((guix build utils))
4597 #:builder
4598 (begin
4599 (use-modules (guix build utils))
4600 (use-modules (srfi srfi-1))
4601
4602 (let* ((tarball (assoc-ref %build-inputs "tarball"))
4603 (perl (string-append (assoc-ref %build-inputs
4604 "perl")
4605 "/bin"))
4606 (gzip (string-append (assoc-ref %build-inputs
4607 "gzip")
4608 "/bin/gzip"))
4609 (tar (string-append (assoc-ref %build-inputs
4610 "tar")
4611 "/bin/tar"))
4612 (out (assoc-ref %outputs "out"))
4613 (bin (string-append out "/bin"))
4614 (doc (string-append out
4615 "/share/doc/grue-hunter")))
4616 (copy-file tarball "grue-hunter.tar.gz")
4617 (invoke gzip "-d" "grue-hunter.tar.gz")
4618 (invoke tar "xvf" "grue-hunter.tar")
4619
4620 (mkdir-p bin)
4621 (copy-file "grue-hunter/gh.pl"
4622 (string-append bin "/grue-hunter"))
4623 (patch-shebang (string-append bin "/grue-hunter")
4624 (list perl))
4625
4626 (install-file "grue-hunter/AGPLv3.txt" doc)
4627
4628 #t))))
4629 (inputs `(("perl" ,perl)
4630 ("tar" ,tar)
4631 ("gzip" ,gzip)
4632 ("tarball" ,source)))
4633 (home-page "https://jxself.org/grue-hunter.shtml")
4634 (synopsis "Text adventure game")
4635 (description
4636 "Grue Hunter is a text adventure game written in Perl. You must make
4637 your way through an underground cave system in search of the Grue. Can you
4638 capture it and get out alive?")
4639 (license license:agpl3+)))
4640
4641 (define-public lierolibre
4642 (package
4643 (name "lierolibre")
4644 (version "0.5")
4645 (source (origin
4646 (method url-fetch)
4647 (uri (string-append "https://launchpad.net/lierolibre/trunk/"
4648 version "/+download/lierolibre-"
4649 version ".tar.xz"))
4650 (sha256
4651 (base32
4652 "1cf1gvsn4qq190lrf9k5bpjnqwlcfw7pajvdnh7z5r4jqw0rsbl9"))
4653 (patches
4654 (search-patches "lierolibre-check-unaligned-access.patch"
4655 "lierolibre-try-building-other-arch.patch"
4656 "lierolibre-remove-arch-warning.patch"
4657 "lierolibre-newer-libconfig.patch"
4658 "lierolibre-is-free-software.patch"))
4659 (modules '((guix build utils)))
4660 (snippet
4661 '(begin
4662 ;; Delete pre-compiled files.
4663 (delete-file "data/LIERO.CHR")
4664 (delete-file "data/LIERO.SND")
4665 #t))))
4666 (build-system gnu-build-system)
4667 (native-inputs
4668 `(("imagemagick" ,imagemagick)
4669 ("pkg-config" ,pkg-config)
4670 ("util-linux" ,util-linux)
4671 ("sox" ,sox)))
4672 (inputs
4673 `(("boost" ,boost)
4674 ("libconfig" ,libconfig)
4675 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
4676 ("zlib" ,zlib)))
4677 (home-page "https://gitlab.com/lierolibre/lierolibre")
4678 (synopsis "Old-school earthworm action game")
4679 (description
4680 "lierolibre is an earthworm action game where you fight another player
4681 (or the computer) underground using a wide array of weapons.
4682
4683 Features:
4684 @itemize
4685 @item 2 worms, 40 weapons, great playability, two game modes: Kill'em All
4686 and Game of Tag, plus AI-players without true intelligence!
4687 @item Dat nostalgia.
4688 @item Extensions via a hidden F1 menu:
4689 @itemize
4690 @item Replays
4691 @item Game controller support
4692 @item Powerlevel palettes
4693 @end itemize
4694 @item Ability to write game variables to plain text files.
4695 @item Ability to load game variables from both EXE and plain text files.
4696 @item Scripts to extract and repack graphics, sounds and levels.
4697 @end itemize
4698
4699 To switch between different window sizes, use F6, F7 and F8, to switch to
4700 fullscreen, use F5 or Alt+Enter.")
4701 ;; Code mainly BSD-2, some parts under Boost 1.0. All assets are WTFPL2.
4702 (license (list license:bsd-2 license:boost1.0 license:wtfpl2))))
4703
4704 (define-public tennix
4705 (package
4706 (name "tennix")
4707 (version "1.3.1")
4708 (source
4709 (origin
4710 (method git-fetch)
4711 (uri (git-reference
4712 (url "https://repo.or.cz/tennix.git")
4713 (commit (string-append "tennix-" version))))
4714 (file-name (git-file-name name version))
4715 (sha256
4716 (base32 "02cj4lrdrisal5s9pnbf2smx7qz9czczjzndfkhfx0qy67b957sk"))
4717 ;; Remove non-free images.
4718 (modules '((guix build utils)))
4719 (snippet
4720 '(begin
4721 (for-each delete-file
4722 '("data/loc_training_camp.png"
4723 "data/loc_austrian_open.png"
4724 "data/loc_olympic_green_tennis.png"))
4725 #t))))
4726 (build-system gnu-build-system)
4727 (arguments
4728 `(#:tests? #f ;no test
4729 #:phases
4730 (modify-phases %standard-phases
4731 (add-after 'unpack 'fix-include
4732 (lambda _
4733 (substitute* '("src/graphics.h" "src/sound.h")
4734 (("#include \"(SDL_(image|ttf|mixer)\\.h)\"" _ header)
4735 (string-append "#include \"SDL/" header "\"")))
4736 (substitute* '("src/tennix.h" "src/network.h" "src/SDL_rotozoom.h")
4737 (("#include <SDL.h>") "#include <SDL/SDL.h>")
4738 (("#include <SDL_net.h>") "#include <SDL/SDL_net.h>"))
4739 #t))
4740 (add-after 'unpack 'locate-install
4741 ;; Build process cannot expand "$(INSTALL)" in Makefile.
4742 (lambda _
4743 (substitute* "makefile"
4744 (("^CONFIGURE_OUTPUT :=.*" all)
4745 (string-append "INSTALL := install -c\n" all)))
4746 #t))
4747 (replace 'configure
4748 ;; The "configure" script is picky about the arguments it
4749 ;; gets. Call it ourselves.
4750 (lambda _
4751 (invoke "./configure" "--prefix" (assoc-ref %outputs "out")))))))
4752 (native-inputs
4753 `(("which" ,which)))
4754 (inputs
4755 `(("python" ,python-wrapper)
4756 ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf sdl-net)))))
4757 (home-page "http://icculus.org/tennix/")
4758 (synopsis "Play tennis against the computer or a friend")
4759 (description "Tennix is a 2D tennis game. You can play against the
4760 computer or against another player using the keyboard. The game runs
4761 in-window at 640x480 resolution or fullscreen.")
4762 ;; Project is licensed under GPL2+ terms. It includes images
4763 ;; released under Public Domain terms, and SDL_rotozoom, released
4764 ;; under LGPL2.1 terms.
4765 (license (list license:gpl2+ license:public-domain license:lgpl2.1))))
4766
4767 (define-public warzone2100
4768 (package
4769 (name "warzone2100")
4770 (version "3.4.1")
4771 (source
4772 (origin
4773 (method url-fetch)
4774 (uri (string-append "mirror://sourceforge/warzone2100/releases/"
4775 version
4776 "/warzone2100_src.tar.xz"))
4777 (sha256
4778 (base32 "0savalmw1kp1sf8vg5aqrl5hc77p4jacxy5y9qj8k2hi2vqdfb7a"))
4779 (modules '((guix build utils)))
4780 (snippet
4781 '(begin
4782 (with-directory-excursion "3rdparty"
4783 (for-each
4784 delete-file-recursively
4785 '("discord-rpc"
4786 "miniupnp"
4787 "utfcpp")))
4788 #t))))
4789 (build-system cmake-build-system)
4790 (arguments
4791 `(#:configure-flags '("-DWZ_DISTRIBUTOR=Guix"
4792 "-DENABLE_DISCORD=off")
4793 #:tests? #f ; TODO: Tests seem to be broken, configure.ac is missing.
4794 #:phases
4795 (modify-phases %standard-phases
4796 (add-after 'unpack 'fix-utfcpp-include
4797 (lambda _
4798 (substitute* "lib/framework/wzstring.cpp"
4799 (("<utfcpp/source/utf8.h>") "<utf8.h>"))
4800 #t))
4801 (add-after 'unpack 'link-tests-with-qt
4802 (lambda _
4803 (substitute* "tests/Makefile.am"
4804 (("(framework_linktest_LDADD|maptest_LDADD) = " prefix)
4805 (string-append prefix "$(QT5_LIBS) ")))
4806 #t))
4807 (add-after 'unpack 'fix-ivis-linktest
4808 (lambda _
4809 (substitute* "tests/ivis_linktest.cpp"
4810 (("iV_DrawTextRotated.*;")
4811 (string-append "iV_DrawTextRotated(\"Press ESC to exit.\", "
4812 "100, 100, 0.0f, font_regular);")))
4813 #t)))))
4814 (native-inputs `(("asciidoc" ,asciidoc)
4815 ("asciidoctor" ,ruby-asciidoctor)
4816 ("gettext" ,gettext-minimal)
4817 ("pkg-config" ,pkg-config)
4818 ("unzip" ,unzip)
4819 ;; 7z is used to create .zip archive, not `zip' as in version 3.2.*.
4820 ("p7zip" ,p7zip)))
4821 (inputs `(("curl" ,curl)
4822 ("fontconfig" ,fontconfig)
4823 ("freetype" ,freetype)
4824 ("glew" ,glew)
4825 ("harfbuzz" ,harfbuzz)
4826 ("libtheora" ,libtheora)
4827 ("libvorbis" ,libvorbis)
4828 ("libxrandr" ,libxrandr)
4829 ("libsodium" ,libsodium)
4830 ("miniupnpc" ,miniupnpc)
4831 ("openal" ,openal)
4832 ("physfs" ,physfs)
4833 ("qtbase" ,qtbase)
4834 ("qtscript" ,qtscript)
4835 ("openssl" ,openssl)
4836 ("sdl2" ,sdl2)
4837 ("utfcpp" ,utfcpp)))
4838 (home-page "https://wz2100.net")
4839 (synopsis "3D Real-time strategy and real-time tactics game")
4840 (description
4841 "Warzone 2100 offers campaign, multi-player, and single-player skirmish
4842 modes. An extensive tech tree with over 400 different technologies, combined
4843 with the unit design system, allows for a wide variety of possible units and
4844 tactics.")
4845 ;; Everything is GPLv2+ unless otherwise specified in COPYING.NONGPL
4846 (license (list license:bsd-3
4847 license:cc0
4848 license:cc-by-sa3.0
4849 license:expat
4850 license:gpl2+
4851 license:lgpl2.1+))))
4852
4853 (define-public widelands
4854 (package
4855 (name "widelands")
4856 (version "21")
4857 (source
4858 (origin
4859 (method url-fetch)
4860 (uri (string-append "https://launchpad.net/widelands/"
4861 "build" version "/build" version "/+download/"
4862 "widelands-build" version "-source.tar.gz"))
4863 (sha256
4864 (base32 "0mz3jily0w1zxxqbnkqrp6hl88xhrwzbil9crq7gpcwidx60w7k0"))
4865 (modules '((guix build utils)))
4866 (snippet
4867 '(begin
4868 (delete-file-recursively "src/third_party/minizip")
4869 #t))
4870 (patches
4871 ;; Use system Minizip. Patch is provided by Debian, and discussed
4872 ;; upstream at <https://github.com/widelands/widelands/issues/399>.
4873 (search-patches "widelands-system-wide_minizip.patch"))))
4874 (build-system cmake-build-system)
4875 (arguments
4876 `(#:configure-flags
4877 (let* ((out (assoc-ref %outputs "out"))
4878 (share (string-append out "/share")))
4879 (list (string-append "-DCMAKE_INSTALL_PREFIX=" out "/bin")
4880 (string-append "-DWL_INSTALL_BASEDIR=" share "/widelands")
4881 (string-append "-DWL_INSTALL_DATADIR=" share "/widelands")
4882 "-DOPTION_BUILD_WEBSITE_TOOLS=OFF"
4883 ;; CMakeLists.txt does not handle properly RelWithDebInfo build
4884 ;; type. When used, no game data is installed!
4885 "-DCMAKE_BUILD_TYPE=Release"))
4886 #:phases
4887 (modify-phases %standard-phases
4888 (add-after 'unpack 'unbundle-fonts
4889 ;; Unbundle fonts already packaged in Guix. XXX: missing fonts are
4890 ;; amiri, Culmus, mmrCensus, Nakula, and Sinhala.
4891 (lambda* (#:key inputs #:allow-other-keys)
4892 (with-directory-excursion "data/i18n/fonts"
4893 (for-each (lambda (font)
4894 (delete-file-recursively font)
4895 (symlink (string-append (assoc-ref inputs font)
4896 "/share/fonts/truetype")
4897 font))
4898 '("DejaVu" "MicroHei")))
4899 #t)))))
4900 (native-inputs
4901 `(("gettext" ,gettext-minimal)
4902 ("python" ,python-wrapper)))
4903 (inputs
4904 `(("boost" ,boost)
4905 ("glew" ,glew)
4906 ("icu4c" ,icu4c)
4907 ("libpng" ,libpng)
4908 ("minizip" ,minizip)
4909 ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
4910 ("zlib" ,zlib)
4911 ;; Fonts for the ‘unbundle-fonts’ phase. Case matters in name!
4912 ("DejaVu" ,font-dejavu)
4913 ("MicroHei" ,font-wqy-microhei)))
4914 (home-page "https://www.widelands.org/")
4915 (synopsis "Fantasy real-time strategy game")
4916 (description
4917 "In Widelands, you are the regent of a small clan. You start out with
4918 nothing but your headquarters, where all your resources are stored.
4919
4920 In the course of the game, you will build an ever growing settlement. Every
4921 member of your clan will do his or her part to produce more resources---wood,
4922 food, iron, gold and more---to further this growth. The economic network is
4923 complex and different in the four tribes (Barbarians, Empire, Atlanteans, and
4924 Frisians).
4925
4926 As you are not alone in the world, you will meet other clans sooner or later.
4927 Some of them may be friendly and you may eventually trade with them. However,
4928 if you want to rule the world, you will have to train soldiers and fight.
4929
4930 Widelands offers single-player mode with different campaigns; the campaigns
4931 all tell stories of tribes and their struggle in the Widelands universe!
4932 However, settling really starts when you unite with friends over the Internet
4933 or LAN to build up new empires together---or to crush each other in the dusts
4934 of war. Widelands also offers an Artificial Intelligence to challenge you.")
4935 ;; Game is released as GPL2+. Some parts, e.g., art, are released under
4936 ;; different licenses.
4937 (license (list license:gpl2+
4938 license:expat ;src/third_party/eris
4939 license:silofl1.1 ;Widelands.ttf
4940 license:cc-by-sa3.0)))) ;some music files
4941
4942 (define-public starfighter
4943 (package
4944 (name "starfighter")
4945 (version "2.4")
4946 (source (origin
4947 (method url-fetch)
4948 (uri (string-append
4949 "https://github.com/pr-starfighter/starfighter/releases"
4950 "/download/v" version "/starfighter-"
4951 version "-src.tar.gz"))
4952 (sha256
4953 (base32
4954 "0ips79j3sdy8wa64jqka0skbbqkzqiln9bbiiilh4z717q7vz9r5"))))
4955 (build-system gnu-build-system)
4956 (native-inputs
4957 `(("pkg-config" ,pkg-config)))
4958 (inputs
4959 `(("pango" ,pango)
4960 ("sdl2" ,sdl2)
4961 ("sdl2-image" ,sdl2-image)
4962 ("sdl2-mixer" ,sdl2-mixer)
4963 ("sdl2-ttf" ,sdl2-ttf)))
4964 (home-page "https://pr-starfighter.github.io/")
4965 (synopsis "2D scrolling shooter game")
4966 (description
4967 "In the year 2579, the intergalactic weapons corporation, WEAPCO, has
4968 dominated the galaxy. Guide Chris Bainfield and his friend Sid Wilson on
4969 their quest to liberate the galaxy from the clutches of WEAPCO. Along the
4970 way, you will encounter new foes, make new allies, and assist local rebels
4971 in strikes against the evil corporation.")
4972 ;; gfx and music are under CC-BY 3.0, CC-BY-SA 3.0, CC0 or Public Domain.
4973 (license (list license:gpl3+
4974 license:cc-by3.0
4975 license:cc-by-sa3.0
4976 license:cc0
4977 license:public-domain))))
4978
4979 (define-public chromium-bsu
4980 (package
4981 (name "chromium-bsu")
4982 (version "0.9.16.1")
4983 (source (origin
4984 (method url-fetch)
4985 (uri (string-append "mirror://sourceforge/chromium-bsu"
4986 "/Chromium B.S.U. source code/"
4987 "chromium-bsu-" version ".tar.gz"))
4988 (sha256
4989 (base32
4990 "0jk2w5b6s6nkzri585bbz16cif2fhqcnl5l1mq3rd98r9nil3hd1"))))
4991 (build-system gnu-build-system)
4992 (native-inputs `(("pkg-config" ,pkg-config)))
4993 (inputs `(("gettext" ,gettext-minimal)
4994 ("glu" ,glu)
4995 ("quesoglc" ,quesoglc)
4996 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))))
4997 (home-page "http://chromium-bsu.sourceforge.net/")
4998 (synopsis "Fast-paced, arcade-style, top-scrolling space shooter")
4999 (description
5000 "In this game you are the captain of the cargo ship Chromium B.S.U. and
5001 are responsible for delivering supplies to the troops on the front line. Your
5002 ship has a small fleet of robotic fighters which you control from the relative
5003 safety of the Chromium vessel.")
5004 ;; Clarified Artistic License for everything but sound, which is covered
5005 ;; by the Expat License.
5006 (license (list license:clarified-artistic license:expat))))
5007
5008 (define-public tuxpaint
5009 (package
5010 (name "tuxpaint")
5011 (version "0.9.23") ;keep VER_DATE below in sync
5012 (source
5013 (origin
5014 (method url-fetch)
5015 (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint/"
5016 version "/tuxpaint-" version ".tar.gz"))
5017 (sha256
5018 (base32
5019 "09k9pxi88r3dx6dyjwf9h85d4qpva4i29qz63dc558hg9v21k69l"))
5020 (modules '((guix build utils)))
5021 (snippet
5022 '(begin
5023 ;; Remove win32 directory which contains binary dll's and the
5024 ;; deprecated visualc directory.
5025 (for-each delete-file-recursively '("win32" "visualc"))
5026 (substitute* "Makefile"
5027 ;; Do not rely on $(GPERF) being an absolute file name
5028 (("\\[ -x \\$\\(GPERF\\) \\]")
5029 "$(GPERF) --version >/dev/null 2>&1"))
5030 #t))
5031 (patches (search-patches "tuxpaint-stamps-path.patch"))))
5032 (build-system gnu-build-system)
5033 (native-inputs
5034 `(("gperf" ,gperf)
5035 ("pkg-config" ,pkg-config)))
5036 (inputs
5037 `(("cairo" ,cairo)
5038 ("fribidi" ,fribidi)
5039 ("gettext" ,gettext-minimal)
5040 ("libpng" ,libpng)
5041 ("librsvg" ,librsvg)
5042 ("libpaper" ,libpaper)
5043 ("netpbm" ,netpbm)
5044 ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-ttf sdl-image)))))
5045 ;; TODO: Use system fonts rather than those in data/fonts
5046 (arguments
5047 `(#:make-flags `("VER_DATE=2018-09-02"
5048 "GPERF=gperf" "CC=gcc"
5049 "SDL_PCNAME=sdl SDL_image SDL_mixer SDL_ttf"
5050 ,(string-append "PREFIX=" %output)
5051 "KDE_PREFIX=$(PREFIX)/share/applications"
5052 "KDE_ICON_PREFIX=$(PREFIX)/share/icons/"
5053 "COMPLETIONDIR=$(PREFIX)/etc/bash_completion.d")
5054 #:parallel-build? #f ;fails on some systems
5055 #:tests? #f ;No tests
5056 #:phases (modify-phases %standard-phases
5057 (delete 'configure) ;no configure phase
5058 (add-before 'install 'no-sys-cache
5059 (lambda _ ;do not rebuild system conf cache
5060 (substitute* "Makefile"
5061 (("kbuildsycoca4") ""))
5062 #t))
5063 (add-after 'install 'fix-import
5064 (lambda* (#:key inputs outputs #:allow-other-keys)
5065 (let* ((out (assoc-ref outputs "out"))
5066 (net (assoc-ref inputs "netpbm"))
5067 (tpi (string-append out "/bin/tuxpaint-import")))
5068 (substitute* tpi
5069 ;; Point to installation prefix so that the default
5070 ;; configure file is found.
5071 (("/usr/local") out))
5072 ;; tuxpaint-import uses a bunch of programs from
5073 ;; netpbm, so make sure it knows where those are
5074 (wrap-program tpi
5075 `("PATH" ":" prefix
5076 (,(string-append net "/bin"))))))))))
5077 (native-search-paths
5078 (list (search-path-specification
5079 (variable "TUXPAINT_STAMPS_PATH")
5080 (files '("share/tuxpaint/stamps")))))
5081 (home-page "http://www.tuxpaint.org")
5082 (synopsis "Drawing software for children")
5083 (description
5084 "Tux Paint is a free drawing program designed for young children (kids
5085 ages 3 and up). It has a simple, easy-to-use interface; fun sound effects;
5086 and an encouraging cartoon mascot who helps guide children as they use the
5087 program. It provides a blank canvas and a variety of drawing tools to help
5088 your child be creative.")
5089 (license license:gpl2+)))
5090
5091 (define-public tuxpaint-stamps
5092 (package
5093 (name "tuxpaint-stamps")
5094 (version "2018.09.01")
5095 (source
5096 (origin
5097 (method url-fetch)
5098 (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint-stamps/"
5099 (string-map (λ (x) (if (eq? x #\.) #\- x)) version)
5100 "/tuxpaint-stamps-" version ".tar.gz"))
5101 (sha256
5102 (base32
5103 "1skr23k27yj3vgwfazpzxp90lb2a278gxrkr3bxw7az6zpkmb3yp"))))
5104 (build-system trivial-build-system)
5105 (native-inputs
5106 `(("tar" ,tar)
5107 ("gzip" ,gzip)))
5108 (arguments
5109 `(#:modules ((guix build utils))
5110 #:builder (begin
5111 (use-modules (guix build utils))
5112 (setenv "PATH"
5113 (string-append
5114 (assoc-ref %build-inputs "tar") "/bin" ":"
5115 (assoc-ref %build-inputs "gzip") "/bin"))
5116 (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
5117 (chdir (string-append ,name "-" ,version))
5118 (let ((dir (string-append %output "/share/tuxpaint/stamps")))
5119 (mkdir-p dir)
5120 (copy-recursively "stamps" dir))
5121 #t)))
5122 (home-page (package-home-page tuxpaint))
5123 (synopsis "Stamp images for Tux Paint")
5124 (description
5125 "This package contains a set of \"Rubber Stamp\" images which can be used
5126 with the \"Stamp\" tool within Tux Paint.")
5127 (license license:gpl2+)))
5128
5129 (define-public tuxpaint-config
5130 (package
5131 (name "tuxpaint-config")
5132 (version "0.0.14") ;keep VER_DATE below in sync
5133 (source
5134 (origin
5135 (method url-fetch)
5136 (uri (string-append "mirror://sourceforge/tuxpaint/tuxpaint-config/"
5137 version "/tuxpaint-config-" version ".tar.gz"))
5138 (sha256
5139 (base32
5140 "0zkgxk436nqcp43zghkfmh397c7dvh5bwn2as7gwvv208bzyij6g"))))
5141 (build-system gnu-build-system)
5142 (native-inputs
5143 `(("gettext" ,gettext-minimal)))
5144 (inputs
5145 `(("fltk" ,fltk)
5146 ("libpaper" ,libpaper)
5147 ;; TODO: Should the following be propagated by fltk?
5148 ("libx11" ,libx11)
5149 ("libxft" ,libxft)
5150 ("mesa" ,mesa)))
5151 (arguments
5152 `(#:make-flags `("VER_DATE=2018-09-01"
5153 "CONFDIR=/etc/tuxpaint" ;don't write to store
5154 ,(string-append "PREFIX=" %output)
5155 "GNOME_PREFIX=$(PREFIX)")
5156 #:parallel-build? #f ;race conditions
5157 #:tests? #f ;no tests
5158 #:phases (modify-phases %standard-phases
5159 (delete 'configure) ;no configure phase
5160 (add-before 'install 'gzip-no-name
5161 (lambda* _
5162 (substitute* "Makefile"
5163 ;; tuxpaint-config compresses its own documentation;
5164 ;; make sure it uses flags for reproducibility.
5165 (("gzip") "gzip --no-name"))))
5166 (add-before 'install 'make-install-dirs
5167 (lambda* (#:key outputs #:allow-other-keys)
5168 (let ((out (assoc-ref outputs "out")))
5169 (mkdir-p (string-append out "/bin"))
5170 #t))))))
5171 (home-page (package-home-page tuxpaint))
5172 (synopsis "Configure Tux Paint")
5173 (description
5174 "Tux Paint Config is a graphical configuration editor for Tux Paint.")
5175 (license license:gpl2))) ;no "or later" present
5176
5177 (define-public supertux
5178 (package
5179 (name "supertux")
5180 (version "0.6.2")
5181 (source (origin
5182 (method url-fetch)
5183 (uri (string-append "https://github.com/SuperTux/supertux/"
5184 "releases/download/v" version "/SuperTux-v"
5185 version "-Source.tar.gz"))
5186 (file-name (string-append name "-" version ".tar.gz"))
5187 (sha256
5188 (base32
5189 "167m3z4m8n76dvbv42m1fnvabpbpsxvr28zk9641916jl9pfba96"))
5190 (patches
5191 (search-patches "supertux-unbundle-squirrel.patch"))))
5192 (arguments
5193 '(#:tests? #f
5194 #:configure-flags '("-DINSTALL_SUBDIR_BIN=bin"
5195 "-DUSE_SYSTEM_PHYSFS=ON")
5196 #:phases
5197 (modify-phases %standard-phases
5198 (add-after 'unpack 'patch-squirrel-path
5199 (lambda* (#:key inputs #:allow-other-keys)
5200 (let ((squirrel (assoc-ref inputs "squirrel")))
5201 (substitute* "CMakeLists.txt"
5202 (("set\\(SQUIRREL_PREFIX.*")
5203 (string-append "set(SQUIRREL_PREFIX " squirrel ")"))
5204 (("add_dependencies\\(supertux2_lib squirrel\\)") "")
5205 (("\\$\\{SQUIRREL_PREFIX\\}/include")
5206 (string-append "${SQUIRREL_PREFIX}/include/squirrel"))))
5207 #t)))))
5208 (build-system cmake-build-system)
5209 (inputs `(("sdl2" ,sdl2)
5210 ("sdl2-image" ,sdl2-image)
5211 ("sdl2-mixer" ,sdl2-mixer)
5212 ("openal" ,openal)
5213 ("mesa" ,mesa)
5214 ("glew" ,glew)
5215 ("libvorbis" ,libvorbis)
5216 ("libogg" ,libogg)
5217 ("physfs" ,physfs)
5218 ("curl" ,curl)
5219 ("boost" ,boost)
5220 ("freetype" ,freetype)
5221 ("squirrel" ,squirrel)))
5222 (native-inputs
5223 `(("pkg-config" ,pkg-config)))
5224 (synopsis "2D platformer game")
5225 (description "SuperTux is a classic 2D jump'n run sidescroller game in
5226 a style similar to the original Super Mario games.")
5227 (home-page "https://supertux.org/")
5228 (license license:gpl3+)))
5229
5230 (define-public tintin++
5231 (package
5232 (name "tintin++")
5233 (version "2.02.05")
5234 (source
5235 (origin
5236 (method url-fetch)
5237 (uri (string-append "mirror://sourceforge/tintin/TinTin++ Source Code/"
5238 (string-drop-right version 1)
5239 "/tintin-" version ".tar.gz"))
5240 (sha256
5241 (base32 "18fm9ga08mxqmblahmnlzwnl387i8mbkj4n0gffxc91d299019v3"))))
5242 (inputs
5243 `(("gnutls" ,gnutls)
5244 ("pcre" ,pcre)
5245 ("readline" ,readline)
5246 ("zlib" ,zlib)))
5247 (arguments
5248 '(#:tests? #f ; no test suite
5249 #:phases
5250 (modify-phases %standard-phases
5251 ;; The source is in tt/src.
5252 (add-before 'configure 'chdir
5253 (lambda _
5254 (chdir "src")
5255 #t)))))
5256 (build-system gnu-build-system)
5257 (home-page "https://tintin.mudhalla.net/")
5258 (synopsis "MUD client")
5259 (description
5260 "TinTin++ is a MUD client which supports MCCP (Mud Client Compression
5261 Protocol), MMCP (Mud Master Chat Protocol), xterm 256 colors, most TELNET
5262 options used by MUDs, as well as those required to login via telnet on
5263 Linux / Mac OS X servers, and an auto mapper with a VT100 map display.")
5264 (license license:gpl3+)))
5265
5266 (define-public laby
5267 (package
5268 (name "laby")
5269 (version "0.7.0")
5270 (source
5271 (origin (method git-fetch)
5272 (uri (git-reference
5273 (url "https://github.com/sgimenez/laby")
5274 (commit (string-append name "-" version))))
5275 (file-name (git-file-name name version))
5276 (sha256
5277 (base32
5278 "1y6nfxcjhqg9bb81hs0wijg7kcwk5kff81rgd8bsv5ps7ia9nj6b"))
5279 (patches (search-patches "laby-make-install.patch"))))
5280 (build-system gnu-build-system)
5281 (inputs
5282 `(("lablgtk" ,lablgtk)
5283 ("ocaml" ,ocaml)
5284 ("ocaml-findlib" ,ocaml-findlib)
5285 ("ocamlbuild" ,ocamlbuild)))
5286 (arguments
5287 '(#:phases
5288 (modify-phases %standard-phases
5289 (delete 'configure)
5290 (add-before 'build 'allow-unsafe-strings
5291 ;; Fix a build failure with ocaml >=4.06.0.
5292 ;; See <https://github.com/sgimenez/laby/issues/53>.
5293 (lambda _
5294 (setenv "OCAMLPARAM" "safe-string=0,_")
5295 #t))
5296 (add-before 'build 'set-library-path
5297 (lambda* (#:key inputs #:allow-other-keys)
5298 (let ((lablgtk (assoc-ref inputs "lablgtk")))
5299 (setenv "LD_LIBRARY_PATH"
5300 (string-append lablgtk "/lib/ocaml/stublibs"))))))
5301 #:tests? #f ; no 'check' target
5302 #:make-flags
5303 (list (string-append "PREFIX=" (assoc-ref %outputs "out")) "all")))
5304 (home-page "https://sgimenez.github.io/laby/")
5305 (synopsis "Programming game")
5306 (description "Learn programming, playing with ants and spider webs ;-)
5307 Your robot ant can be programmed in many languages: OCaml, Python, C, C++,
5308 Java, Ruby, Lua, JavaScript, Pascal, Perl, Scheme, Vala, Prolog. Experienced
5309 programmers may also add their own favorite language.")
5310 (license license:gpl3+)))
5311
5312 (define-public bambam
5313 (package
5314 (name "bambam")
5315 (version "1.0.0")
5316 (source
5317 (origin
5318 (method git-fetch)
5319 (uri (git-reference
5320 (url "https://github.com/porridge/bambam")
5321 (commit (string-append "v" version))))
5322 (file-name (git-file-name name version))
5323 (sha256
5324 (base32 "18cwd1wpyyx8y61cags9bkdhx9x858xicc4y1c9c2s0xjmgzhl3i"))))
5325 (build-system python-build-system)
5326 (arguments
5327 `(#:tests? #f ; no tests
5328 #:phases
5329 (modify-phases %standard-phases
5330 (delete 'build) ; nothing to build
5331 (replace 'install
5332 (lambda* (#:key outputs #:allow-other-keys)
5333 (let* ((out (assoc-ref outputs "out"))
5334 (bin (string-append out "/bin"))
5335 (share (string-append out "/share")))
5336 (mkdir-p bin)
5337 (copy-file "bambam.py" (string-append bin "/bambam"))
5338 (install-file "bambam.6" (string-append share "/man/man6"))
5339 (copy-recursively "data" (string-append share "/bambam/data")))
5340 #t)))))
5341 (inputs
5342 `(("python-pygame" ,python-pygame)))
5343 (home-page "https://github.com/porridge/bambam")
5344 (synopsis "Keyboard mashing and doodling game for babies")
5345 (description "Bambam is a simple baby keyboard (and gamepad) masher
5346 application that locks the keyboard and mouse and instead displays bright
5347 colors, pictures, and sounds.")
5348 (license license:gpl3+)))
5349
5350 (define-public mrrescue
5351 (package
5352 (name "mrrescue")
5353 (version "1.02e")
5354 (source (origin
5355 (method url-fetch)
5356 (uri (string-append
5357 "https://github.com/SimonLarsen/mrrescue/releases/"
5358 "download/" version "/mrrescue" version ".love"))
5359 (file-name (string-append name "-" version ".love"))
5360 (sha256
5361 (base32
5362 "0jwzbwkgp1l5ia6c7s760gmdirbsncp6nfqp7vqdqsfb63la9gl2"))))
5363 (build-system trivial-build-system)
5364 (arguments
5365 `(#:modules ((guix build utils))
5366 #:builder
5367 (begin
5368 (use-modules (guix build utils))
5369 (let* ((out (assoc-ref %outputs "out"))
5370 (script (string-append out "/bin/" ,name))
5371 (data (string-append out "/share/" ,name))
5372 (source (assoc-ref %build-inputs "source"))
5373 (unzip (string-append (assoc-ref %build-inputs "unzip")
5374 "/bin/unzip"))
5375 (patch (string-append (assoc-ref %build-inputs "patch")
5376 "/bin/patch"))
5377 (bash (string-append (assoc-ref %build-inputs "bash")
5378 "/bin/bash"))
5379 (love (string-append (assoc-ref %build-inputs "love")
5380 "/bin/love")))
5381
5382 (mkdir-p (dirname script))
5383 (with-output-to-file script
5384 (lambda ()
5385 (format #t "#!~a~%" bash)
5386 (format #t "exec -a ~a \"~a\" \"~a\"~%" ,name love data)))
5387 (chmod script #o755)
5388
5389 ;; The better way to package this game would be to install *only* the
5390 ;; script above, pointing to the unextracted .love file in the store.
5391 ;; However, mrrescue 1.02e needs to be patched to work with Love 11.
5392 ;; Instead of extracting the .love file, patching it, and re-zipping
5393 ;; it to the store, simply point the script to the extracted patched
5394 ;; data directory directly.
5395 (mkdir-p data)
5396 (with-directory-excursion data
5397 (invoke unzip source)
5398 (invoke patch "-p1" "-i"
5399 (assoc-ref %build-inputs "love-11.patch")))
5400 #t))))
5401 (native-inputs
5402 `(("unzip" ,unzip)
5403 ("patch" ,patch)
5404 ("love-11.patch" ,(search-patch "mrrescue-support-love-11.patch"))))
5405 (inputs
5406 `(("bash" ,bash)
5407 ("love" ,love)))
5408 (home-page "https://tangramgames.dk/games/mrrescue")
5409 (synopsis "Arcade-style fire fighting game")
5410 (description
5411 "Mr. Rescue is an arcade styled 2d action game centered around evacuating
5412 civilians from burning buildings. The game features fast-paced fire
5413 extinguishing action, intense boss battles, a catchy soundtrack, and lots of
5414 throwing people around in pseudo-randomly generated buildings.")
5415 (license (list license:zlib ; for source code
5416 license:cc-by-sa3.0)))) ; for graphics and music assets
5417
5418 (define-public hyperrogue
5419 (package
5420 (name "hyperrogue")
5421 (version "11.3a")
5422 ;; When updating this package, be sure to update the "hyperrogue-data"
5423 ;; origin in native-inputs.
5424 (source (origin
5425 (method url-fetch)
5426 (uri (string-append
5427 "https://www.roguetemple.com/z/hyper/hyperrogue"
5428 (string-join (string-split version #\.) "")
5429 "-src.tgz"))
5430 (sha256
5431 (base32
5432 "1yxabbswq02fc5frigvs43f83m5vlxybc7n5mynkwzj2c70lfp2k"))))
5433 (build-system gnu-build-system)
5434 (arguments
5435 `(#:tests? #f ; no check target
5436 #:make-flags '("HYPERROGUE_USE_GLEW=1"
5437 "HYPERROGUE_USE_PNG=1")
5438 #:phases
5439 (modify-phases %standard-phases
5440 (add-after 'set-paths 'set-sdl-paths
5441 (lambda* (#:key inputs #:allow-other-keys)
5442 (setenv "CPATH"
5443 (string-append (or (getenv "CPATH") "") ":"
5444 (assoc-ref inputs "sdl-union")
5445 "/include/SDL"))))
5446 (replace 'configure
5447 (lambda* (#:key inputs outputs #:allow-other-keys)
5448 (let* ((out (assoc-ref outputs "out"))
5449 (share-dir (string-append out "/share/hyperrogue"))
5450 (dejavu-dir (string-append
5451 (assoc-ref inputs "font-dejavu")
5452 "/share/fonts/truetype"))
5453 (dejavu-font "DejaVuSans-Bold.ttf")
5454 (music-file "hyperrogue-music.txt"))
5455 ;; Fix font and music paths.
5456 (substitute* "basegraph.cpp"
5457 ((dejavu-font)
5458 (string-append dejavu-dir "/" dejavu-font)))
5459 (substitute* music-file
5460 (("\\*/")
5461 (string-append share-dir "/sounds/")))
5462 (substitute* "sound.cpp"
5463 (("musicfile = \"\"")
5464 (string-append "musicfile = \""
5465 share-dir "/" music-file "\"")))
5466 ;; Disable build machine CPU optimizations and warnings treated
5467 ;; as errors.
5468 (substitute* "Makefile"
5469 (("-march=native") "")
5470 (("-Werror") "")))
5471 #t))
5472 (replace 'install
5473 (lambda* (#:key inputs outputs #:allow-other-keys)
5474 (let* ((out (assoc-ref outputs "out"))
5475 (bin (string-append out "/bin"))
5476 (share-dir (string-append out "/share/hyperrogue")))
5477 (mkdir-p bin)
5478 (install-file "hyperrogue" bin)
5479 (install-file "hyperrogue-music.txt" share-dir))
5480 #t))
5481 (add-after 'install 'install-data
5482 (lambda* (#:key inputs outputs #:allow-other-keys)
5483 (let* ((data (assoc-ref inputs "hyperrogue-data"))
5484 (out (assoc-ref outputs "out"))
5485 (sounds (string-append out "/share/hyperrogue/sounds"))
5486 (unzip (string-append (assoc-ref inputs "unzip") "/bin/unzip")))
5487 ;; Extract media license information into sounds directory.
5488 (invoke unzip "-j" data
5489 (string-append
5490 "hyperrogue"
5491 (string-join (string-split ,version #\.) "")
5492 "/sounds/credits.txt") "-d" sounds)
5493 ;; Extract sounds and music into sounds directory.
5494 (invoke "unzip" "-j" data
5495 (string-append
5496 "hyperrogue"
5497 (string-join (string-split ,version #\.) "")
5498 "/*.ogg") "-d" sounds)))))))
5499 (native-inputs
5500 `(("hyperrogue-data"
5501 ,(origin
5502 (method url-fetch)
5503 (uri
5504 (string-append
5505 "https://www.roguetemple.com/z/hyper/hyperrogue"
5506 (string-join (string-split version #\.) "")
5507 "-win.zip"))
5508 (sha256
5509 (base32
5510 "11yhbia45f1w9z0j67h9nynwjqmvakr9l6rnrmdrdkzin6lvzzj4"))))
5511 ("unzip" ,unzip)))
5512 (inputs
5513 `(("font-dejavu" ,font-dejavu)
5514 ("glew" ,glew)
5515 ("libpng" ,libpng)
5516 ("sdl-union" ,(sdl-union (list sdl
5517 sdl-gfx
5518 sdl-mixer
5519 sdl-ttf)))))
5520 (home-page "https://www.roguetemple.com/z/hyper/")
5521 (synopsis "Non-euclidean graphical rogue-like game")
5522 (description
5523 "HyperRogue is a game in which the player collects treasures and fights
5524 monsters -- rogue-like but for the fact that it is played on the hyperbolic
5525 plane and not in euclidean space.
5526
5527 In HyperRogue, the player can move through different parts of the world, which
5528 are home to particular creatures and may be subject to their own rules of
5529 \"physics\".
5530
5531 While the game can use ASCII characters to display the the classical rogue
5532 symbols, it still needs graphics to render the non-euclidean world.")
5533 (license (list license:bsd-3 ; glew.c, mtrand.*
5534 license:cc-by-sa3.0 ; music
5535 license:cc-by-sa4.0 ; sounds
5536 license:cc0
5537 license:public-domain ; direntx.*, some sounds
5538 license:zlib ; savepng.*
5539 license:gpl2+)))) ; remaining files
5540
5541 (define-public kobodeluxe
5542 (package
5543 (name "kobodeluxe")
5544 (version "0.5.1")
5545 (source (origin
5546 (method url-fetch)
5547 (uri (string-append "http://olofson.net/kobodl/download/KoboDeluxe-"
5548 version ".tar.bz2"))
5549 (sha256
5550 (base32
5551 "0b2wvdpnmaibsy419c16dfwj5kvd3pccby2aaqvm964x74592yqg"))
5552 (patches (search-patches
5553 "kobodeluxe-const-charp-conversion.patch"
5554 "kobodeluxe-enemies-pipe-decl.patch"
5555 "kobodeluxe-graphics-window-signed-char.patch"
5556 "kobodeluxe-manpage-minus-not-hyphen.patch"
5557 "kobodeluxe-midicon-segmentation-fault.patch"
5558 "kobodeluxe-paths.patch"))))
5559 (build-system gnu-build-system)
5560 (arguments
5561 '(#:configure-flags
5562 (list (string-append "CPPFLAGS=-I"
5563 (assoc-ref %build-inputs "sdl-union")
5564 "/include/SDL"))))
5565 (inputs
5566 `(("glu" ,glu)
5567 ("sdl-union" ,(sdl-union (list sdl sdl-image)))))
5568 (synopsis "Shooter with space station destruction")
5569 (description
5570 "Kobo Deluxe is an enhanced version of Akira Higuchi's XKobo graphical game
5571 for Un*x systems with X11.")
5572 (home-page "http://olofson.net/kobodl/")
5573 (license license:gpl2+)))
5574
5575 (define-public freeciv
5576 (package
5577 (name "freeciv")
5578 (version "2.6.3")
5579 (source
5580 (origin
5581 (method url-fetch)
5582 (uri (list (string-append
5583 "http://files.freeciv.org/stable/freeciv-"
5584 version ".tar.bz2")
5585 (string-append
5586 "mirror://sourceforge/freeciv/Freeciv%20"
5587 (version-major+minor version) "/" version
5588 "/freeciv-" version ".tar.bz2")))
5589 (sha256
5590 (base32 "1lgq7wcbhwpy2yqdw4biwfmp5q8fh7lhlwxcgm0fpaapfl12whvp"))))
5591 (build-system gnu-build-system)
5592 (inputs
5593 `(("curl" ,curl)
5594 ("cyrus-sasl" ,cyrus-sasl)
5595 ("gtk+" ,gtk+)
5596 ("sdl-mixer" ,sdl-mixer)
5597 ("zlib" ,zlib)))
5598 (native-inputs
5599 `(("pkg-config" ,pkg-config)))
5600 (home-page "http://www.freeciv.org/")
5601 (synopsis "Turn-based empire building strategy game")
5602 (description "Freeciv is a turn-based empire building strategy game
5603 inspired by the history of human civilization. The game commences in
5604 prehistory and your mission is to lead your tribe from the Stone Age
5605 into the Space Age.")
5606 (license license:gpl2+)))
5607
5608 (define-public no-more-secrets
5609 (package
5610 (name "no-more-secrets")
5611 (version "0.3.3")
5612 (source
5613 (origin
5614 (method git-fetch)
5615 (uri (git-reference
5616 (url "https://github.com/bartobri/no-more-secrets")
5617 (commit (string-append "v" version))))
5618 (file-name (git-file-name name version))
5619 (sha256
5620 (base32 "1zfv4qabikf8w9winsr4brxrdvs3f0d7xvydksyx8bydadsm2v2h"))))
5621 (build-system gnu-build-system)
5622 (arguments
5623 `(#:tests? #f
5624 #:make-flags (list "CC=gcc" "all-ncurses"
5625 (string-append "prefix="
5626 (assoc-ref %outputs "out")))
5627 #:phases
5628 (modify-phases %standard-phases
5629 (delete 'configure))))
5630 (inputs
5631 `(("ncurses" ,ncurses)))
5632 (home-page "https://github.com/bartobri/no-more-secrets")
5633 (synopsis "Recreation of data decryption effect in \"Sneakers\"")
5634 (description
5635 "@code{No More Secrets} provides a command line tool called \"nms\"
5636 that recreates the famous data decryption effect seen on screen in the 1992
5637 movie \"Sneakers\".
5638
5639 This command works on piped data. Pipe any ASCII or UTF-8 text to nms, and
5640 it will apply the hollywood effect, initially showing encrypted data, then
5641 starting a decryption sequence to reveal the original plaintext characters.")
5642 (license license:expat)))
5643
5644 (define-public megaglest-data
5645 (package
5646 (name "megaglest-data")
5647 (version "3.13.0")
5648 (source
5649 (origin
5650 (method url-fetch)
5651 (uri (string-append
5652 "https://github.com/MegaGlest/megaglest-data"
5653 "/releases/download/" version "/megaglest-data-"
5654 version ".tar.xz"))
5655 (sha256
5656 (base32
5657 "0ipgza33z89fw3si32iafm981f3fvm0zldvbxj29whghd2k3rpj3"))))
5658 (build-system cmake-build-system)
5659 (arguments
5660 `(#:tests? #f))
5661 (home-page "https://megaglest.org/")
5662 (synopsis "Data files for MegaGlest")
5663 (description "This package contains the data files required for MegaGlest.")
5664 (license license:cc-by-sa3.0)))
5665
5666 (define-public megaglest
5667 (package
5668 (name "megaglest")
5669 (version "3.13.0")
5670 (source
5671 (origin
5672 (method url-fetch)
5673 (uri (string-append
5674 "https://github.com/MegaGlest/megaglest-source"
5675 "/releases/download/" version "/megaglest-source-"
5676 version ".tar.xz"))
5677 (sha256
5678 (base32
5679 "1ffck3ii1wp5k3nn5p0ga06jgp7pzk4zw0xln3xim2w7qrxzdzh9"))))
5680 (build-system cmake-build-system)
5681 (inputs
5682 `(("curl" ,curl)
5683 ("fontconfig" ,fontconfig)
5684 ("ftgl" ,ftgl)
5685 ("glew" ,glew)
5686 ("libjpeg-turbo" ,libjpeg-turbo)
5687 ("megaglest-data" ,megaglest-data)
5688 ("mesa" ,mesa)
5689 ("miniupnpc" ,miniupnpc)
5690 ("openal" ,openal)
5691 ("libircclient" ,libircclient)
5692 ("libpng" ,libpng)
5693 ("libvorbis" ,libvorbis)
5694 ("lua" ,lua)
5695 ("sdl2" ,sdl2)
5696 ("wxwidgets" ,wxwidgets)))
5697 (native-inputs
5698 `(("cppunit" ,cppunit)
5699 ("pkg-config" ,pkg-config)))
5700 (arguments
5701 `(#:configure-flags
5702 (list (string-append "-DCUSTOM_DATA_INSTALL_PATH="
5703 (assoc-ref %build-inputs "megaglest-data")
5704 "/share/megaglest")
5705 "-DBUILD_MEGAGLEST_TESTS=ON")
5706 #:phases
5707 (modify-phases %standard-phases
5708 (add-after 'unpack 'fix-ini-search-path
5709 (lambda* (#:key outputs #:allow-other-keys)
5710 (substitute* "source/glest_game/global/config.cpp"
5711 (("/usr/share/megaglest/")
5712 (string-append (assoc-ref outputs "out")
5713 "/share/megaglest/"))))))
5714 #:test-target "megaglest_tests"))
5715 (home-page "https://megaglest.org/")
5716 (synopsis "3D real-time strategy (RTS) game")
5717 (description "MegaGlest is a cross-platform 3D real-time strategy (RTS)
5718 game, where you control the armies of one of seven different factions: Tech,
5719 Magic, Egypt, Indians, Norsemen, Persian or Romans.")
5720 (license license:gpl2+)))
5721
5722 (define-public freegish
5723 (let ((commit "8795cd7adc95957883f2d3465eb9036a774667a7")
5724 (revision "1"))
5725 (package
5726 (name "freegish")
5727 (version (string-append "0-" revision "." (string-take commit 9)))
5728 (source (origin
5729 (method git-fetch)
5730 (uri (git-reference
5731 (url "https://github.com/freegish/freegish")
5732 (commit commit)))
5733 (file-name (git-file-name name version))
5734 (sha256
5735 (base32
5736 "1p1zf5qqagmcpi1db2bs02cnalpy3qiymp6yzan7k1bhmv859gsx"))
5737 (modules '((guix build utils)))
5738 ;; The audio files in the "music" directory are licensed under
5739 ;; CC-BY-NC, so we delete them.
5740 (snippet
5741 '(begin
5742 (delete-file-recursively "music")
5743 #t))))
5744 (build-system cmake-build-system)
5745 (arguments
5746 `(#:tests? #f ; no tests included
5747 #:configure-flags
5748 (list "-DCMAKE_INSTALL_FHS=ON")
5749 #:phases
5750 (modify-phases %standard-phases
5751 (add-after 'unpack 'set-DATAPATH
5752 (lambda* (#:key outputs #:allow-other-keys)
5753 (substitute* "CMakeLists.txt"
5754 (("^option\\(INSTALL_FHS" line)
5755 (string-append "add_definitions(-DDATAPATH=\""
5756 (assoc-ref outputs "out") "/share/freegish\")\n"
5757 line)))
5758 #t)))))
5759 (inputs
5760 `(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))
5761 ("openal" ,openal)
5762 ("libvorbis" ,libvorbis)
5763 ("libogg" ,libogg)
5764 ("mesa" ,mesa)
5765 ("libpng" ,libpng)
5766 ("zlib" ,zlib)))
5767 (home-page "https://github.com/freegish/freegish")
5768 (synopsis "Side-scrolling physics platformer with a ball of tar")
5769 (description "In FreeGish you control Gish, a ball of tar who lives
5770 happily with his girlfriend Brea, until one day a mysterious dark creature
5771 emerges from a sewer hole and pulls her below ground.")
5772 ;; The textures are available under the Expat license. All other assets
5773 ;; (including levels) are covered under CC-BY-SA or public domain. The
5774 ;; source code is under GPLv2+.
5775 (license (list license:gpl2+
5776 license:expat
5777 license:public-domain
5778 license:cc-by-sa3.0)))))
5779
5780 (define-public cdogs-sdl
5781 (package
5782 (name "cdogs-sdl")
5783 (version "0.8.0")
5784 (source
5785 (origin
5786 (method git-fetch)
5787 (uri (git-reference
5788 (url "https://github.com/cxong/cdogs-sdl")
5789 (commit version)))
5790 (file-name (git-file-name name version))
5791 (sha256
5792 (base32 "0vx37zb2iw7sfw5a2bs97ydlmb301nvy485ybdm8g46c5hn9s13c"))))
5793 (build-system cmake-build-system)
5794 (arguments
5795 `(#:configure-flags
5796 (list (string-append "-DCDOGS_DATA_DIR="
5797 (assoc-ref %outputs "out")
5798 "/share/cdogs-sdl/"))))
5799 (native-inputs
5800 `(("pkg-config" ,pkg-config)))
5801 (inputs
5802 `(("gtk+" ,gtk+)
5803 ("mesa" ,mesa)
5804 ("sdl2" ,sdl2)
5805 ("sdl2-image" ,sdl2-image)
5806 ("sdl2-mixer" ,sdl2-mixer)))
5807 (home-page "https://cxong.github.io/cdogs-sdl/")
5808 (synopsis "Classic overhead run-and-gun game")
5809 (description "C-Dogs SDL is a classic overhead run-and-gun game,
5810 supporting up to 4 players in co-op and deathmatch modes. Customize your
5811 player, choose from many weapons, and blast, slide and slash your way through
5812 over 100 user-created campaigns.")
5813 ;; GPLv2+ for code (includes files under BSD-2 and BSD-3),
5814 ;; CC0/CC-BY/CC-BY-SA for assets.
5815 (license (list license:gpl2+
5816 license:bsd-2
5817 license:bsd-3
5818 license:cc0
5819 license:cc-by3.0
5820 license:cc-by-sa3.0))))
5821
5822 (define-public kiki
5823 (package
5824 (name "kiki")
5825 (version "1.0.2")
5826 (source (origin
5827 (method url-fetch)
5828 (uri (string-append "mirror://sourceforge/kiki/kiki-src/"
5829 version "/kiki-" version "-src.tgz"))
5830 (sha256
5831 (base32
5832 "0ihjdsxbn8z3cz0gpcprafiipcqaiskgdnh1rhmw4qff8dszalbn"))
5833 (modules '((guix build utils)))
5834 (snippet
5835 '(begin
5836 (for-each delete-file (find-files "." "\\.dll$"))
5837 #t))
5838 (patches
5839 (search-patches "kiki-level-selection-crash.patch"
5840 "kiki-makefile.patch"
5841 "kiki-missing-includes.patch"
5842 "kiki-portability-64bit.patch"))))
5843 (build-system gnu-build-system)
5844 (arguments
5845 `(#:tests? #f ; there are no tests
5846 #:make-flags '("CXX=g++")
5847 #:phases
5848 (modify-phases %standard-phases
5849 (replace 'configure
5850 (lambda* (#:key inputs outputs #:allow-other-keys)
5851 (setenv "CPLUS_INCLUDE_PATH"
5852 (string-append (assoc-ref inputs "sdl-union")
5853 "/include/SDL:"
5854 (assoc-ref inputs "python")
5855 "/include/python2.7:"
5856 (or (getenv "CPLUS_INCLUDE_PATH") "")))
5857 (substitute* "src/main/main.cpp"
5858 (("#include <SDL.h>" line)
5859 (string-append line "
5860 #define K_INCLUDE_GLUT
5861 #include \"KIncludeTools.h\""))
5862 (("// initialize SDL" line)
5863 (string-append "glutInit(&argc,argv);\n" line)))
5864 (substitute* "src/main/KikiController.cpp"
5865 (("getenv\\(\"KIKI_HOME\"\\)")
5866 (string-append "\"" (assoc-ref outputs "out") "/share/kiki/\"")))
5867 (substitute* "linux/Makefile"
5868 (("CXXOPTS =" line)
5869 (string-append line " -fpermissive"))
5870 (("PYTHON_VERSION=.*") "PYTHON_VERSION=2.7")
5871 (("PYTHONHOME =.*")
5872 (string-append "PYTHONHOME = "
5873 (assoc-ref inputs "python")
5874 "/lib/python2.7/"))
5875 (("\\$\\(GLLIBS\\)" line)
5876 (string-append line " -lm -lpython2.7")))
5877 (substitute* "src/main/KikiPythonWidget.h"
5878 (("#define __KikiPythonWidget" line)
5879 (string-append line "\n#include \"KikiPython.h\"")))
5880 #t))
5881 (add-before 'build 'build-kodilib
5882 (lambda* (#:key make-flags #:allow-other-keys)
5883 (with-directory-excursion "kodilib/linux"
5884 (apply invoke "make" make-flags))))
5885 (add-after 'build-kodilib 'chdir
5886 (lambda _ (chdir "linux") #t))
5887 (replace 'install
5888 (lambda* (#:key outputs #:allow-other-keys)
5889 (let* ((out (assoc-ref outputs "out"))
5890 (bin (string-append out "/bin"))
5891 (share (string-append out "/share/kiki")))
5892 (mkdir-p bin)
5893 (mkdir-p share)
5894 (install-file "kiki" bin)
5895 (copy-recursively "../py" (string-append share "/py"))
5896 (copy-recursively "../sound" (string-append share "/sound"))
5897 #t))))))
5898 (inputs
5899 `(("glu" ,glu)
5900 ;; Kiki builds fine with freeglut 3.0.0 but segfaults on start.
5901 ("freeglut" ,freeglut-2.8)
5902 ("sdl-union" ,(sdl-union (list sdl
5903 sdl-mixer
5904 sdl-image)))
5905 ("python" ,python-2)))
5906 (native-inputs
5907 `(("swig" ,swig)))
5908 (home-page "http://kiki.sourceforge.net/")
5909 (synopsis "3D puzzle game")
5910 (description "Kiki the nano bot is a 3D puzzle game. It is basically a
5911 mixture of the games Sokoban and Kula-World. Your task is to help Kiki, a
5912 small robot living in the nano world, repair its maker.")
5913 ;; See <http://metadata.ftp-master.debian.org/changelogs/main/k/
5914 ;; kiki-the-nano-bot/kiki-the-nano-bot_1.0.2+dfsg1-4_copyright>
5915 ;; for a statement from the author.
5916 (license license:public-domain)))
5917
5918 (define-public teeworlds
5919 (package
5920 (name "teeworlds")
5921 (version "0.7.5")
5922 (source (origin
5923 (method git-fetch)
5924 (uri (git-reference
5925 (url "https://github.com/teeworlds/teeworlds")
5926 (commit version)))
5927 (file-name (git-file-name name version))
5928 (sha256
5929 (base32
5930 "169dl83q08zl4h813az8hjs4rs3dms9yjn6bnsld4fjcj0imvvc6"))
5931 (modules '((guix build utils)
5932 (ice-9 ftw)
5933 (ice-9 regex)
5934 (srfi srfi-1)
5935 (srfi srfi-26)))
5936 (snippet ; remove bundled libraries except md5
5937 '(let ((base-dir "src/engine/external/"))
5938 (for-each (compose (cut delete-file-recursively <>)
5939 (cut string-append base-dir <>))
5940 (remove (cut string-match "(^.)|(^md5$)" <>)
5941 (scandir base-dir)))
5942 #t))))
5943 (build-system gnu-build-system)
5944 (arguments
5945 `(#:tests? #f ; no tests included
5946 #:modules ((guix build gnu-build-system)
5947 (guix build utils)
5948 (srfi srfi-26))
5949 #:phases
5950 (modify-phases %standard-phases
5951 (replace 'configure
5952 (lambda* (#:key outputs #:allow-other-keys)
5953 ;; Embed path to assets.
5954 (substitute* "src/engine/shared/storage.cpp"
5955 (("#define DATA_DIR.*")
5956 (string-append "#define DATA_DIR \""
5957 (assoc-ref outputs "out")
5958 "/share/teeworlds/data"
5959 "\"")))
5960
5961 ;; Bam expects all files to have a recent time stamp.
5962 (for-each (cut utime <> 1 1)
5963 (find-files "."))
5964
5965 ;; Do not use bundled libraries.
5966 (substitute* "bam.lua"
5967 (("local json = Compile.+$")
5968 "local json = nil
5969 settings.link.libs:Add(\"jsonparser\")")
5970 (("local png = Compile.+$")
5971 "local png = nil
5972 settings.link.libs:Add(\"pnglite\")")
5973 (("local wavpack = Compile.+$")
5974 "local wavpack = nil
5975 settings.link.libs:Add(\"wavpack\")")
5976 (("if config\\.zlib\\.value == 1")
5977 "if config.zlib.value"))
5978 (substitute* "src/engine/client/graphics_threaded.cpp"
5979 (("engine/external/pnglite/pnglite\\.h")
5980 "pnglite.h"))
5981 (substitute* "src/engine/client/sound.cpp"
5982 (("engine/external/wavpack/wavpack\\.h")
5983 "wavpack/wavpack.h"))
5984 #t))
5985 (replace 'build
5986 (lambda _
5987 (invoke "bam" "-a" "-v" "conf=release")))
5988 (replace 'install
5989 (lambda* (#:key outputs #:allow-other-keys)
5990 (let* ((arch ,(system->linux-architecture
5991 (or (%current-target-system)
5992 (%current-system))))
5993 (build (string-append "build/" (if (string=? arch "i386")
5994 "x86" arch)
5995 "/release/"))
5996 (data-built (string-append build "data/"))
5997 (out (assoc-ref outputs "out"))
5998 (bin (string-append out "/bin/"))
5999 (data (string-append out "/share/teeworlds/data/")))
6000 (for-each (cut install-file <> bin)
6001 (map (cut string-append build <>)
6002 '("teeworlds" "teeworlds_srv")))
6003 (copy-recursively data-built data)
6004 #t))))))
6005 (inputs
6006 `(("freetype" ,freetype)
6007 ("glu" ,glu)
6008 ("json-parser" ,json-parser)
6009 ("mesa" ,mesa)
6010 ("pnglite" ,pnglite)
6011 ("sdl2" ,sdl2)
6012 ("sdl2-image" ,sdl2-image)
6013 ("sdl2-mixer" ,sdl2-mixer)
6014 ("wavpack" ,wavpack)
6015 ("zlib" ,zlib)))
6016 (native-inputs
6017 `(("bam" ,bam)
6018 ("python" ,python-wrapper)
6019 ("pkg-config" ,pkg-config)))
6020 (home-page "https://www.teeworlds.com")
6021 (synopsis "2D retro multiplayer shooter game")
6022 (description "Teeworlds is an online multiplayer game. Battle with up to
6023 16 players in a variety of game modes, including Team Deathmatch and Capture
6024 The Flag. You can even design your own maps!")
6025 (license license:bsd-3)))
6026
6027 (define-public enigma
6028 (package
6029 (name "enigma")
6030 (version "1.21")
6031 (source (origin
6032 (method url-fetch)
6033 (uri (string-append "mirror://sourceforge/enigma-game/"
6034 "Release%20" version "/enigma-"
6035 version ".tar.gz"))
6036 (sha256
6037 (base32
6038 "00ffh9pypj1948pg3q9sjp1nmiabh52p5c8wpg9n1dcfgl3cywnq"))))
6039 (build-system gnu-build-system)
6040 (arguments
6041 `(#:configure-flags
6042 (list "--with-system-enet")
6043 #:phases
6044 (modify-phases %standard-phases
6045 (add-after 'unpack 'fix-build-with-new-gcc
6046 (lambda _
6047 ;; Fix build with GCC6 and later by avoiding comparing ifstream
6048 ;; to NULL. Can be removed for versions > 1.21.
6049 (substitute* "src/lev/Proxy.cc"
6050 (("ifs != NULL")
6051 "ifs"))
6052 #t))
6053 (add-after 'unpack 'find-sdl
6054 (lambda _
6055 (substitute* "configure"
6056 (("SDL_ttf.h") "SDL/SDL_ttf.h"))
6057 (substitute* '("tools/ttf2bmf.cc"
6058 "lib-src/enigma-core/ecl_font.cc"
6059 "lib-src/enigma-core/ecl_video.cc"
6060 "lib-src/enigma-core/ecl_buffer.hh"
6061 "src/SoundEngine.cc"
6062 "src/SoundEngine.hh"
6063 "src/MusicManager.cc"
6064 "src/MusicManager.hh"
6065 "src/d_models.cc"
6066 "src/main.cc"
6067 "src/network.cc")
6068 (("#include \"SDL_(image|ttf|mixer|types|syswm|mutex).h\"" line header)
6069 (string-append "#include \"SDL/SDL_" header ".h\"")))
6070 (substitute* "src/main.cc"
6071 (("#include <SDL_(image|ttf|mixer).h>" line header)
6072 (string-append "#include \"SDL/SDL_" header ".h\"")))
6073 #t)))))
6074 (inputs
6075 `(("xerces-c" ,xerces-c)
6076 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
6077 ("curl" ,curl)
6078 ("enet" ,enet)))
6079 (native-inputs
6080 `(("pkg-config" ,pkg-config)
6081 ("imagemagick" ,imagemagick)))
6082 (home-page "https://www.nongnu.org/enigma")
6083 (synopsis "Puzzle game with a dexterity component")
6084 (description "Enigma is a puzzle game with 550 unique levels. The object
6085 of the game is to find and uncover pairs of identically colored ‘Oxyd’ stones.
6086 Simple? Yes. Easy? Certainly not! Hidden traps, vast mazes, laser beams,
6087 and most of all, countless hairy puzzles usually block your direct way to the
6088 Oxyd stones. Enigma’s game objects (and there are hundreds of them, lest you
6089 get bored) interact in many unexpected ways, and since many of them follow the
6090 laws of physics (Enigma’s special laws of physics, that is), controlling them
6091 with the mouse isn’t always trivial.")
6092 (license license:gpl2+)))
6093
6094 (define-public chroma
6095 (package
6096 (name "chroma")
6097 (version "1.17")
6098 (source (origin
6099 (method url-fetch)
6100 (uri (string-append "http://level7.org.uk/chroma/download/chroma-"
6101 version ".tar.bz2"))
6102 (sha256
6103 (base32
6104 "047sf00x71xbmi8bqrhfbmr9bk89l2gbykkqsfpw4wz6yfjscs6y"))))
6105 (build-system gnu-build-system)
6106 (arguments
6107 `(#:tests? #f ; no tests included
6108 #:configure-flags '("CFLAGS=-fgnu89-inline"))) ; fix inlines
6109 (inputs
6110 `(("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-ttf)))
6111 ("freetype" ,freetype)
6112 ("ncurses" ,ncurses)
6113 ("fontconfig" ,fontconfig)
6114 ("libxft" ,libxft)))
6115 (native-inputs
6116 `(("pkg-config" ,pkg-config)))
6117 (home-page "http://level7.org.uk/chroma/")
6118 (synopsis "Abstract puzzle game")
6119 (description "Chroma is an abstract puzzle game. A variety of colourful
6120 shapes are arranged in a series of increasingly complex patterns, forming
6121 fiendish traps that must be disarmed and mysterious puzzles that must be
6122 manipulated in order to give up their subtle secrets. Initially so
6123 straightforward that anyone can pick it up and begin to play, yet gradually
6124 becoming difficult enough to tax even the brightest of minds.")
6125 (license license:gpl2+)))
6126
6127 (define-public fillets-ng
6128 (package
6129 (name "fillets-ng")
6130 (version "1.0.1")
6131 (source (origin
6132 (method url-fetch)
6133 (uri (string-append "mirror://sourceforge/fillets/"
6134 "Fish%20Fillets%20-%20Next%20Generation/"
6135 version "/fillets-ng-" version ".tar.gz"))
6136 (sha256
6137 (base32
6138 "1nljp75aqqb35qq3x7abhs2kp69vjcj0h1vxcpdyn2yn2nalv6ij"))))
6139 (build-system gnu-build-system)
6140 (arguments
6141 `(#:configure-flags
6142 (list (string-append "--with-lua="
6143 (assoc-ref %build-inputs "lua")))
6144 #:make-flags
6145 (list (string-append "CFLAGS=-I"
6146 (assoc-ref %build-inputs "sdl-union")
6147 "/include/SDL")
6148 (string-append "CXXFLAGS=-I"
6149 (assoc-ref %build-inputs "sdl-union")
6150 "/include/SDL"))
6151 #:phases
6152 (modify-phases %standard-phases
6153 ;; Lua 5.1 does not provide it.
6154 (add-after 'unpack 'do-not-link-with-lualib
6155 (lambda _
6156 (substitute* "configure"
6157 (("-llualib") ""))
6158 #t))
6159 (add-after 'install 'install-data
6160 (lambda* (#:key inputs outputs #:allow-other-keys)
6161 (let ((data (string-append (assoc-ref outputs "out")
6162 "/share/games/fillets-ng")))
6163 (mkdir-p data)
6164 (invoke "tar" "-xvf"
6165 (assoc-ref inputs "fillets-ng-data")
6166 "--strip-components=1"
6167 "-C" data)))))))
6168 (inputs
6169 `(("sdl-union" ,(sdl-union (list sdl
6170 sdl-mixer
6171 sdl-image
6172 sdl-ttf)))
6173 ("fribidi" ,fribidi)
6174 ("libx11" ,libx11)
6175 ("lua" ,lua-5.1)))
6176 (native-inputs
6177 `(("pkg-config" ,pkg-config)
6178 ("fillets-ng-data"
6179 ,(origin
6180 (method url-fetch)
6181 (uri (string-append "mirror://sourceforge/fillets/"
6182 "Fish%20Fillets%20-%20Next%20Generation/"
6183 version "/fillets-ng-data-" version ".tar.gz"))
6184 (sha256
6185 (base32
6186 "169p0yqh2gxvhdilvjc2ld8aap7lv2nhkhkg4i1hlmgc6pxpkjgh"))))))
6187 (home-page "http://fillets.sourceforge.net/")
6188 (synopsis "Puzzle game")
6189 (description "Fish Fillets NG is strictly a puzzle game. The goal in
6190 every of the seventy levels is always the same: find a safe way out. The fish
6191 utter witty remarks about their surroundings, the various inhabitants of their
6192 underwater realm quarrel among themselves or comment on the efforts of your
6193 fish. The whole game is accompanied by quiet, comforting music.")
6194 (license license:gpl2+)))
6195
6196 (define-public crawl
6197 (package
6198 (name "crawl")
6199 (version "0.26.0")
6200 (source
6201 (origin
6202 (method url-fetch)
6203 (uri (string-append "https://github.com/crawl/crawl/releases/download/"
6204 version "/stone_soup-" version "-nodeps.tar.xz"))
6205 (sha256
6206 (base32 "1m81x1sp6p2ka5w2nib3pcw5w5iv58z41c8aqn0dayi1lb3yslfb"))
6207 (patches (search-patches "crawl-upgrade-saves.patch"))))
6208 (build-system gnu-build-system)
6209 (inputs
6210 `(("lua51" ,lua-5.1)
6211 ("ncurses" ,ncurses)
6212 ("sqlite" ,sqlite)
6213 ("zlib" ,zlib)))
6214 (native-inputs
6215 `(("bison" ,bison)
6216 ("flex" ,flex)
6217 ("perl" ,perl)
6218 ("python" ,python-wrapper)
6219 ("python-pyyaml" ,python-pyyaml)
6220 ("pkg-config" ,pkg-config)))
6221 (arguments
6222 `(#:make-flags
6223 (let* ((sqlite (assoc-ref %build-inputs "sqlite"))
6224 (out (assoc-ref %outputs "out")))
6225 (list (string-append "SQLITE_INCLUDE_DIR=" sqlite "/include")
6226 (string-append "prefix=" out)
6227 "SAVEDIR=~/.crawl"
6228 ;; Don't compile with SSE on systems which don't have it.
6229 ,@(match (%current-system)
6230 ((or "i686-linux" "x86_64-linux")
6231 '())
6232 (_ '("NOSSE=TRUE")))
6233 ;; don't build any bundled dependencies
6234 "BUILD_LUA="
6235 "BUILD_SQLITE="
6236 "BUILD_ZLIB="
6237 "-Csource"))
6238 #:phases
6239 (modify-phases %standard-phases
6240 (add-after 'unpack 'find-SDL-image
6241 (lambda _
6242 (substitute* "source/windowmanager-sdl.cc"
6243 (("SDL_image.h") "SDL2/SDL_image.h"))
6244 #t))
6245 (delete 'configure)
6246 (replace 'check
6247 (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
6248 (setenv "HOME" (getcwd))
6249 ;; Fake a terminal for the test cases.
6250 (setenv "TERM" "xterm-256color")
6251 ;; Run the tests that don't require a debug build.
6252 (apply invoke "make" "nondebugtest"
6253 (format #f "-j~d" (parallel-job-count))
6254 ;; Force command line build for test cases.
6255 (append make-flags '("GAME=crawl" "TILES="))))))))
6256 (synopsis "Roguelike dungeon crawler game")
6257 (description "Dungeon Crawl Stone Soup (also known as \"Crawl\" or DCSS
6258 for short) is a roguelike adventure through dungeons filled with dangerous
6259 monsters in a quest to find the mystifyingly fabulous Orb of Zot.")
6260 (home-page "https://crawl.develz.org")
6261 (license (list license:gpl2+
6262 license:bsd-2
6263 license:bsd-3
6264 license:cc0
6265 license:expat
6266 license:zlib
6267 license:asl2.0))))
6268
6269 ;; The linter here claims that patch file names should start with the package
6270 ;; name. But, in this case, the patches are inherited from crawl with the
6271 ;; "crawl-" prefix instead of "crawl-tiles-".
6272 (define-public crawl-tiles
6273 (package
6274 (inherit crawl)
6275 (name "crawl-tiles")
6276 (arguments
6277 (substitute-keyword-arguments
6278 (package-arguments crawl)
6279 ((#:make-flags flags)
6280 `(let ((dejavu (assoc-ref %build-inputs "font-dejavu")))
6281 (cons*
6282 (string-append "PROPORTIONAL_FONT=" dejavu
6283 "/share/fonts/truetype/DejaVuSans.ttf")
6284 (string-append "MONOSPACED_FONT=" dejavu
6285 "/share/fonts/truetype/DejaVuSansMono.ttf")
6286 "TILES=y"
6287 ;; Rename the executable to allow parallel installation with crawl.
6288 "GAME=crawl-tiles"
6289 ,flags)))))
6290 (inputs
6291 `(,@(package-inputs crawl)
6292 ("font-dejavu" ,font-dejavu)
6293 ("freetype6" ,freetype)
6294 ("glu" ,glu)
6295 ("libpng" ,libpng)
6296 ("sdl2" ,sdl2)
6297 ("sdl2-image" ,sdl2-image)
6298 ("sdl2-mixer" ,sdl2-mixer)))
6299 (native-inputs
6300 `(,@(package-native-inputs crawl)
6301 ("pngcrush" ,pngcrush)
6302 ("which" ,which)))
6303 (synopsis "Graphical roguelike dungeon crawler game")))
6304
6305 (define-public lugaru
6306 (package
6307 (name "lugaru")
6308 (version "1.2")
6309 (source (origin
6310 (method url-fetch)
6311 (uri (string-append "https://bitbucket.org/osslugaru/lugaru/downloads/"
6312 "lugaru-" version ".tar.xz"))
6313 (sha256
6314 (base32
6315 "15zgcshy22q51rm72zi6y9z7qlgnz5iw3gczjdlir4bqmxy4gspk"))))
6316 (build-system cmake-build-system)
6317 (arguments
6318 `(#:configure-flags
6319 (list "-DSYSTEM_INSTALL=ON")
6320 ;; no test target
6321 #:tests? #f))
6322 (native-inputs
6323 `(("pkg-config" ,pkg-config)))
6324 (inputs
6325 `(("sdl2" ,sdl2)
6326 ("glu" ,glu)
6327 ("libjpeg" ,libjpeg-turbo)
6328 ("libpng" ,libpng)
6329 ("openal" ,openal)
6330 ("vorbis" ,libvorbis)
6331 ("zlib" ,zlib)))
6332 (home-page "https://osslugaru.gitlab.io")
6333 (synopsis "Cross-platform third-person action game")
6334 (description "Lugaru is a third-person action game. The main character,
6335 Turner, is an anthropomorphic rebel bunny rabbit with impressive combat skills.
6336 In his quest to find those responsible for slaughtering his village, he uncovers
6337 a far-reaching conspiracy involving the corrupt leaders of the rabbit republic
6338 and the starving wolves from a nearby den. Turner takes it upon himself to
6339 fight against their plot and save his fellow rabbits from slavery.")
6340 (license (list license:gpl2+ ; code
6341 ;; assets:
6342 license:cc-by-sa3.0
6343 license:cc-by-sa4.0))))
6344
6345 (define-public 0ad-data
6346 (package
6347 (name "0ad-data")
6348 (version "0.0.23b-alpha")
6349 (source
6350 (origin
6351 (method url-fetch)
6352 (uri (string-append "https://releases.wildfiregames.com/0ad-"
6353 version "-unix-data.tar.xz"))
6354 (file-name (string-append name "-" version ".tar.xz"))
6355 (sha256
6356 (base32
6357 "04x7729hk6zw1xj3n4s4lvaviijsnbjf5rhzvjxlr5fygvg4l6z1"))
6358 (modules '((guix build utils)))
6359 (snippet
6360 #~(begin
6361 (for-each (lambda (name)
6362 (let* ((dir (string-append "binaries/data/mods/" name))
6363 (file (string-append dir "/" name ".zip"))
6364 (unzip #$(file-append unzip "/bin/unzip")))
6365 (invoke unzip "-d" dir file)
6366 (delete-file file)))
6367 '("mod" "public"))
6368 #t))))
6369 (build-system trivial-build-system)
6370 (native-inputs `(("tar" ,tar)
6371 ("xz" ,xz)))
6372 (arguments
6373 `(#:modules ((guix build utils))
6374 #:builder
6375 (begin
6376 (use-modules (guix build utils))
6377 (let ((out (assoc-ref %outputs "out"))
6378 (source (assoc-ref %build-inputs "source"))
6379 (tar (string-append (assoc-ref %build-inputs "tar") "/bin/tar"))
6380 (xz-path (string-append (assoc-ref %build-inputs "xz") "/bin")))
6381 (setenv "PATH" xz-path)
6382 (mkdir out)
6383 (invoke tar "xvf" source "-C" out "--strip=3")))))
6384 (synopsis "Data files for 0ad")
6385 (description "0ad-data provides the data files required by the game 0ad.")
6386 (home-page "https://play0ad.com")
6387 (license (list (license:fsdg-compatible
6388 "http://tavmjong.free.fr/FONTS/ArevCopyright.txt"
6389 "Similar to the license of the Bitstream Vera fonts.")
6390 (license:fsdg-compatible
6391 "https://www.gnome.org/fonts/#Final_Bitstream_Vera_Fonts")
6392 license:cc-by-sa3.0
6393 license:expat
6394 license:gfl1.0
6395 license:gpl2+
6396 license:gpl3+))))
6397
6398 (define-public 0ad
6399 (package
6400 (name "0ad")
6401 (version "0.0.23b-alpha")
6402 (source
6403 (origin
6404 (method url-fetch)
6405 (uri (string-append "https://releases.wildfiregames.com/0ad-"
6406 version "-unix-build.tar.xz"))
6407 (file-name (string-append name "-" version ".tar.xz"))
6408 (sha256
6409 (base32
6410 "0draa53xg69i5qhqym85658m45xhwkbiimaldj4sr3703rjgggq1"))))
6411 ;; A snippet here would cause a build failure because of timestamps
6412 ;; reset. See https://bugs.gnu.org/26734.
6413 (inputs
6414 `(("0ad-data" ,0ad-data)
6415 ("curl" ,curl)
6416 ("enet" ,enet)
6417 ("gloox" ,gloox)
6418 ("icu4c" ,icu4c)
6419 ("libpng" ,libpng)
6420 ("libsodium" ,libsodium)
6421 ("libvorbis" ,libvorbis)
6422 ("libxcursor" ,libxcursor)
6423 ("libxml2" ,libxml2)
6424 ("miniupnpc" ,miniupnpc)
6425 ("mozjs-38" ,mozjs-38)
6426 ("openal" ,openal)
6427 ("sdl2" ,sdl2)
6428 ("wxwidgets" ,wxwidgets)
6429 ("zlib" ,zlib)))
6430 (native-inputs
6431 `(("boost" ,boost)
6432 ("cmake" ,cmake-minimal)
6433 ("mesa" ,mesa)
6434 ("pkg-config" ,pkg-config)
6435 ("python-2" ,python-2)))
6436 (build-system gnu-build-system)
6437 (arguments
6438 `(#:make-flags '("config=release" "verbose=1" "-C" "build/workspaces/gcc")
6439 #:phases
6440 (modify-phases %standard-phases
6441 (add-after 'unpack 'delete-bundles
6442 (lambda _
6443 (delete-file-recursively "libraries/source/spidermonkey")
6444 #t))
6445 (add-after 'unpack 'fix-x11-includes
6446 (lambda _
6447 (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
6448 (("<Xlib.h>") "<X11/Xlib.h>"))
6449 (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
6450 (("<Xatom.h>") "<X11/Xatom.h>"))
6451 (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
6452 (("<Xcursor/Xcursor.h>") "<X11/Xcursor/Xcursor.h>"))
6453 #t))
6454 (replace 'configure
6455 (lambda* (#:key inputs outputs #:allow-other-keys)
6456 (let* ((jobs (number->string (parallel-job-count)))
6457 (out (assoc-ref outputs "out"))
6458 (lib (string-append out "/lib"))
6459 (data (string-append out "/share/0ad")))
6460 (setenv "JOBS" (string-append "-j" jobs))
6461 (setenv "CC" "gcc")
6462 (with-directory-excursion "build/workspaces"
6463 (invoke "./update-workspaces.sh"
6464 (string-append "--libdir=" lib)
6465 (string-append "--datadir=" data)
6466 ;; TODO: "--with-system-nvtt"
6467 "--with-system-mozjs38")))))
6468 (delete 'check)
6469 (replace 'install
6470 (lambda* (#:key inputs outputs #:allow-other-keys)
6471 (chdir "binaries")
6472 (let* ((out (assoc-ref outputs "out"))
6473 (bin (string-append out "/bin"))
6474 (lib (string-append out "/lib"))
6475 (data (string-append out "/share/0ad"))
6476 (applications (string-append out "/share/applications"))
6477 (pixmaps (string-append out "/share/pixmaps"))
6478 (0ad-data (assoc-ref inputs "0ad-data")))
6479 ;; data
6480 (copy-recursively "data" data)
6481 (for-each (lambda (file)
6482 (symlink (string-append 0ad-data "/" file)
6483 (string-append data "/" file)))
6484 '("config" "mods/mod" "mods/public" "tools"))
6485 ;; libraries
6486 (for-each (lambda (file)
6487 (install-file file lib))
6488 (find-files "system" "\\.so$"))
6489 ;; binaries
6490 (install-file "system/pyrogenesis" bin)
6491 (with-directory-excursion bin
6492 (symlink "pyrogenesis" "0ad"))
6493 ;; resources
6494 (with-directory-excursion "../build/resources"
6495 (install-file "0ad.desktop" applications)
6496 (install-file "0ad.png" pixmaps))
6497 #t)))
6498 (add-after 'install 'check
6499 (lambda _
6500 (with-directory-excursion "system"
6501 (invoke "./test")))))))
6502 (home-page "https://play0ad.com")
6503 (synopsis "3D real-time strategy game of ancient warfare")
6504 (description "0 A.D. is a real-time strategy (RTS) game of ancient
6505 warfare. It's a historically-based war/economy game that allows players to
6506 relive or rewrite the history of twelve ancient civilizations, each depicted
6507 at their peak of economic growth and military prowess.
6508
6509 0ad needs a window manager that supports 'Extended Window Manager Hints'.")
6510 (license (list license:bsd-2
6511 license:bsd-3
6512 license:expat
6513 license:gpl2+
6514 license:ibmpl1.0
6515 license:isc
6516 license:lgpl2.1
6517 license:lgpl3
6518 license:mpl2.0
6519 license:zlib))))
6520
6521 (define-public open-adventure
6522 (package
6523 (name "open-adventure")
6524 (version "1.9")
6525 (source
6526 (origin
6527 (method git-fetch)
6528 (uri (git-reference
6529 (url "https://gitlab.com/esr/open-adventure")
6530 (commit version)))
6531 (file-name (git-file-name name version))
6532 (sha256
6533 (base32 "123svzy7xczdklx6plbafp22yv9bcvwfibjk0jv2c9i22dfsr07f"))))
6534 (build-system gnu-build-system)
6535 (arguments
6536 `(#:make-flags (list "CC=gcc")
6537 #:phases
6538 (modify-phases %standard-phases
6539 (delete 'configure) ;no configure script
6540 (add-before 'build 'use-echo
6541 (lambda _
6542 (substitute* "tests/Makefile"
6543 (("/bin/echo") (which "echo")))
6544 #t))
6545 (add-after 'build 'build-manpage
6546 (lambda _
6547 ;; This target is missing a dependency
6548 (substitute* "Makefile"
6549 ((".adoc.6:" line)
6550 (string-append line " advent.adoc")))
6551 (invoke "make" ".adoc.6")))
6552 ;; There is no install target.
6553 (replace 'install
6554 (lambda* (#:key outputs #:allow-other-keys)
6555 (let* ((out (assoc-ref outputs "out"))
6556 (bin (string-append out "/bin"))
6557 (man (string-append out "/share/man/man6")))
6558 (install-file "advent" bin)
6559 (install-file "advent.6" man))
6560 #t)))))
6561 (native-inputs
6562 `(("asciidoc" ,asciidoc)
6563 ("libedit" ,libedit)
6564 ("pkg-config" ,pkg-config)
6565 ("python" ,python-wrapper)
6566 ("python-pyyaml" ,python-pyyaml)))
6567 (home-page "https://gitlab.com/esr/open-adventure")
6568 (synopsis "Colossal Cave Adventure")
6569 (description
6570 "The original Colossal Cave Adventure from 1976 was the origin of all
6571 text adventures, dungeon-crawl (computer) games, and computer-hosted
6572 roleplaying games. This is a forward port of the last version released by
6573 Crowther & Woods, its original authors, in 1995. It has been known as
6574 ``adventure 2.5'' and ``430-point adventure''.")
6575 (license license:bsd-2)))
6576
6577 (define-public open-adventure-2.5
6578 (package
6579 (inherit open-adventure)
6580 (version "2.5")
6581 (properties `((superseded . ,open-adventure)))))
6582
6583 (define-public tome4
6584 (package
6585 (name "tome4")
6586 (version "1.7.2")
6587 (synopsis "Single-player, RPG roguelike game set in the world of Eyal")
6588 (source
6589 (origin
6590 (method url-fetch)
6591 (uri (string-append "https://te4.org/dl/t-engine/t-engine4-src-"
6592 version ".tar.bz2"))
6593 (sha256
6594 (base32 "1xa0pdn9pggwf7hnqb87ya2qxqhjahkdjwf8cr2y01gixgrkj9lv"))
6595 (modules '((guix build utils)))
6596 (snippet
6597 '(begin
6598 (substitute* '("src/music.h" "src/tSDL.h")
6599 (("#elif defined(__FreeBSD__)" line)
6600 (string-append
6601 line " || defined(__GNUC__)")))
6602 (substitute* '("src/tgl.h")
6603 (("#include <GL/glext.h>") ""))
6604 #t))))
6605 (build-system gnu-build-system)
6606 (native-inputs
6607 `(("unzip" ,unzip)))
6608 (inputs
6609 `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
6610 ("glu" ,glu)
6611 ("premake4" ,premake4)
6612 ("openal" ,openal)
6613 ("vorbis" ,libvorbis)
6614 ("luajit" ,luajit)))
6615 (arguments
6616 `(#:make-flags
6617 (list (string-append "CC=" ,(cc-for-target))
6618 "config=release")
6619 ;; XXX: Building in parallel occasionally causes this build failure:
6620 ;; ../src/luajit2/src/host/buildvm.c:73:10: fatal error: buildvm_arch.h:
6621 ;; No such file or directory
6622 #:parallel-build? #f
6623 #:phases (modify-phases %standard-phases
6624 (delete 'bootstrap)
6625 (replace 'configure
6626 (lambda _
6627 (invoke "premake4" "gmake")
6628 #t))
6629 (add-after 'set-paths 'set-sdl-paths
6630 (lambda* (#:key inputs #:allow-other-keys)
6631 (setenv "CPATH"
6632 (string-append (assoc-ref inputs "sdl-union")
6633 "/include/SDL2:"
6634 (or (getenv "CPATH") "")))
6635 #t))
6636 (delete 'check)
6637 ;; premake doesn't provide install target
6638 (replace 'install
6639 (lambda* (#:key inputs outputs #:allow-other-keys)
6640 (let* ((out (assoc-ref outputs "out"))
6641 (usr (string-append out "/usr"))
6642 (bin (string-append out "/bin"))
6643 (licenses (string-append out "/share/licenses"))
6644 (documents (string-append out "/share/doc"))
6645 (pixmaps (string-append out "/share/pixmaps"))
6646 (icon "te4-icon.png")
6647 (data (string-append out "/share/" ,name))
6648 (applications (string-append
6649 out "/share/applications"))
6650 (unzip (string-append
6651 (assoc-ref inputs "unzip") "/bin/unzip"))
6652 (wrapper (string-append bin "/" ,name)))
6653 ;; icon
6654 (mkdir-p pixmaps)
6655 (invoke unzip "-j"
6656 (string-append
6657 "game/engines/te4-" ,version ".teae")
6658 (string-append
6659 "data/gfx/" icon) "-d" pixmaps)
6660 ;; game executable
6661 (install-file "t-engine" data)
6662 (mkdir-p bin)
6663 (with-output-to-file wrapper
6664 (lambda ()
6665 (display
6666 (string-append
6667 "#!/bin/sh\n"
6668 ;; No bootstrap code found,
6669 ;; defaulting to working directory
6670 ;; for engine code!
6671 "cd " data "\n"
6672 "exec -a tome4 ./t-engine \"$@\"\n"))))
6673 (chmod wrapper #o555)
6674 ;; licenses
6675 (for-each (lambda (file)
6676 (install-file file licenses))
6677 '("COPYING" "COPYING-MEDIA"))
6678 ;; documents
6679 (for-each (lambda (file)
6680 (install-file file documents))
6681 '("CONTRIBUTING" "CREDITS"))
6682 ;; data
6683 (copy-recursively "bootstrap" (string-append
6684 data "/bootstrap"))
6685 (copy-recursively "game" (string-append data "/game"))
6686 ;; launcher
6687 (mkdir-p applications)
6688 (make-desktop-entry-file
6689 (string-append applications "/" ,name ".desktop")
6690 #:name "ToME4"
6691 #:comment ,synopsis
6692 #:exec ,name
6693 #:icon icon
6694 #:categories '("Game" "RolePlaying")))
6695 #t)))))
6696 (home-page "https://te4.org")
6697 (description "Tales of Maj’Eyal (ToME) RPG, featuring tactical turn-based
6698 combat and advanced character building. Play as one of many unique races and
6699 classes in the lore-filled world of Eyal, exploring random dungeons, facing
6700 challenging battles, and developing characters with your own tailored mix of
6701 abilities and powers. With a modern graphical and customisable interface,
6702 intuitive mouse control, streamlined mechanics and deep, challenging combat,
6703 Tales of Maj’Eyal offers engaging roguelike gameplay for the 21st century.")
6704 (license license:gpl3+)))
6705
6706 (define-public quakespasm
6707 (package
6708 (name "quakespasm")
6709 (version "0.93.2")
6710 (source
6711 (origin
6712 (method url-fetch)
6713 (uri (string-append "mirror://sourceforge/quakespasm/Source/quakespasm-"
6714 version ".tgz"))
6715 (sha256
6716 (base32 "0qm0j5drybvvq8xadfyppkpk3rxqsxbywzm6iwsjwdf0iia3gss5"))))
6717 (arguments
6718 `(#:tests? #f
6719 #:make-flags '("CC=gcc"
6720 "MP3LIB=mpg123"
6721 "USE_CODEC_FLAC=1"
6722 "USE_CODEC_MIKMOD=1"
6723 "USE_SDL2=1"
6724 "-CQuake")
6725 #:phases (modify-phases %standard-phases
6726 (delete 'configure)
6727 (add-after 'unpack 'fix-makefile-paths
6728 (lambda* (#:key outputs #:allow-other-keys)
6729 (let ((out (assoc-ref outputs "out")))
6730 (mkdir-p (string-append out "/bin"))
6731 (substitute* "Quake/Makefile"
6732 (("/usr/local/games")
6733 (string-append out "/bin")))
6734 #t))))))
6735 (build-system gnu-build-system)
6736 (inputs `(("libmikmod" ,libmikmod)
6737 ("libvorbis" ,libvorbis)
6738 ("flac" ,flac)
6739 ("mesa" ,mesa)
6740 ("mpg123" ,mpg123)
6741 ("sdl2" ,sdl2)))
6742 (synopsis "First person shooter engine for Quake 1")
6743 (description "Quakespasm is a modern engine for id software's Quake 1.
6744 It includes support for 64 bit CPUs, custom music playback, a new sound driver,
6745 some graphical niceities, and numerous bug-fixes and other improvements.")
6746 (home-page "http://quakespasm.sourceforge.net/")
6747 (license license:gpl2+)))
6748
6749 (define-public vkquake
6750 (package
6751 (inherit quakespasm)
6752 (name "vkquake")
6753 (version "1.01.0")
6754 (source
6755 (origin
6756 (method git-fetch)
6757 (uri (git-reference
6758 (url "https://github.com/Novum/vkQuake")
6759 (commit version)))
6760 (file-name (git-file-name name version))
6761 (sha256
6762 (base32 "1iwin8j5kbyrknbkhjgpy8nmm7pxqzr0daa9gn7p38qhg2mh0a39"))))
6763 (arguments
6764 `(#:make-flags
6765 (let ((vulkanlib (string-append (assoc-ref %build-inputs
6766 "vulkan-loader") "/lib")))
6767 (list "CC=gcc"
6768 "MP3LIB=mpg123"
6769 "USE_CODEC_FLAC=1"
6770 "USE_CODEC_MIKMOD=1"
6771 "USE_SDL2=1"
6772 (string-append "LDFLAGS=-Wl,-rpath=" vulkanlib)
6773 "-CQuake"))
6774 #:phases (modify-phases %standard-phases
6775 (add-after 'unpack 'patch-for-new-vulkan
6776 (lambda _
6777 ;; Mimic upstream commit a869a22d9b51c68e for
6778 ;; compatibility with newer vulkan-headers.
6779 (substitute* "Quake/gl_rmisc.c"
6780 (("VK_DYNAMIC_STATE_RANGE_SIZE")
6781 "3"))
6782 #t))
6783 (delete 'configure)
6784 (add-after 'unpack 'fix-makefile-paths
6785 (lambda* (#:key outputs #:allow-other-keys)
6786 (let ((vulkan (assoc-ref %build-inputs
6787 "vulkan-loader"))
6788 (out (assoc-ref outputs "out")))
6789 (mkdir-p (string-append out "/bin"))
6790 (substitute* "Quake/Makefile" ((" /usr")
6791 (string-append " " out)))
6792 (substitute* "Quake/Makefile" (("/games")
6793 (string-append "/bin")))
6794 (substitute* "Quake/Makefile" (("..VULKAN_SDK.") vulkan))
6795 #t))))
6796 ,@(strip-keyword-arguments '(#:make-flags #:phases)
6797 (package-arguments quakespasm))))
6798 (inputs `(("vulkan-headers" ,vulkan-headers)
6799 ("vulkan-loader" ,vulkan-loader)
6800 ,@(package-inputs quakespasm)))
6801 (description "vkquake is a modern engine for id software's Quake 1.
6802 It includes support for 64 bit CPUs, custom music playback, a new sound driver,
6803 some graphical niceities, and numerous bug-fixes and other improvements.")
6804 (home-page "https://github.com/Novum/vkQuake")))
6805
6806 (define-public yamagi-quake2
6807 (package
6808 (name "yamagi-quake2")
6809 (version "7.45")
6810 (source
6811 (origin
6812 (method url-fetch)
6813 (uri (string-append "https://deponie.yamagi.org/quake2/quake2-"
6814 version ".tar.xz"))
6815 (sha256
6816 (base32 "0rgz8x7lzd0zb0xqd0gvnf2641nr9xpfm6v14mgh99hspxklaln7"))))
6817 (build-system gnu-build-system)
6818 (arguments
6819 `(#:tests? #f
6820 #:make-flags
6821 (list "CC=gcc"
6822 ;; link openAL instead of using dlopen at runtime
6823 "DLOPEN_OPENAL=\"no\""
6824 ;; an optional directory where it will look for quake2 data files
6825 ;; in addition to the current working directory
6826 "WITH_SYSTEMWIDE=yes"
6827 "WITH_SYSTEMDIR=\"/opt/quake2\"")
6828 #:phases
6829 (modify-phases %standard-phases
6830 (delete 'configure)
6831 (replace 'install
6832 (lambda* (#:key outputs #:allow-other-keys)
6833 (let ((out (assoc-ref outputs "out")))
6834 (mkdir-p (string-append out "/lib"))
6835 (mkdir-p (string-append out "/bin"))
6836 ;; The yamagi-quake2 binary must be in the same directory
6837 ;; as it's engine libraries, but symlinking it to /bin is okay
6838 ;; https://github.com/yquake2/yquake2/blob/master/stuff/packaging.md
6839 (copy-recursively "release"
6840 (string-append out "/lib/yamagi-quake2"))
6841 (symlink (string-append out "/lib/yamagi-quake2/quake2")
6842 (string-append out "/bin/yamagi-quake2"))
6843 (symlink (string-append out "/lib/yamagi-quake2/q2ded")
6844 (string-append out "/bin/yamagi-q2ded"))))))))
6845 (native-inputs
6846 `(("pkg-config" ,pkg-config)))
6847 (inputs
6848 `(("curl" ,curl-minimal)
6849 ("libvorbis" ,libvorbis)
6850 ("mesa" ,mesa)
6851 ("openal" ,openal)
6852 ("sdl2" ,sdl2)
6853 ("zlib" ,zlib)))
6854 (synopsis "First person shooter engine based on quake2")
6855 (description "Yamagi Quake II is an enhanced client for id Software's Quake II.
6856 The main focus is an unchanged single player experience like back in 1997,
6857 thus the gameplay and the graphics are unaltered. However the user may use one
6858 of the unofficial retexturing packs. In comparison with the official client,
6859 over 1000 bugs were fixed and an extensive code audit done,
6860 making Yamagi Quake II one of the most solid Quake II implementations available.")
6861 (home-page "https://www.yamagi.org/quake2/")
6862 (license (list license:gpl2+ ; game and server
6863 (license:non-copyleft ; info-zip
6864 "file://LICENSE"
6865 "See Info-Zip section.")
6866 license:public-domain)))) ; stb
6867
6868 (define-public nudoku
6869 (package
6870 (name "nudoku")
6871 (version "2.1.0")
6872 (source
6873 (origin
6874 (method git-fetch)
6875 (uri (git-reference
6876 (url "https://github.com/jubalh/nudoku")
6877 (commit version)))
6878 (file-name (git-file-name name version))
6879 (sha256
6880 (base32 "12v00z3p0ymi8f3w4b4bgl4c76irawn3kmd147r0ap6s9ssx2q6m"))))
6881 (build-system gnu-build-system)
6882 (native-inputs
6883 `(("autoconf" ,autoconf)
6884 ("automake" ,automake)
6885 ("gettext" ,gettext-minimal)
6886 ("pkg-config" ,pkg-config)))
6887 (inputs
6888 `(("ncurses" ,ncurses)))
6889 (home-page "https://jubalh.github.io/nudoku/")
6890 (synopsis "Sudoku for your terminal")
6891 (description "Nudoku is a ncurses-based Sudoku game for your terminal.")
6892 (license license:gpl3+)))
6893
6894 (define-public the-butterfly-effect
6895 (package
6896 (name "the-butterfly-effect")
6897 (version "0.9.3.1")
6898 (source
6899 (origin
6900 (method git-fetch)
6901 (uri (git-reference
6902 (url "https://github.com/the-butterfly-effect/tbe")
6903 (commit (string-append "v" version))))
6904 (file-name (git-file-name name version))
6905 (sha256
6906 (base32
6907 "1ag2cp346f9bz9qy6za6q54id44d2ypvkyhvnjha14qzzapwaysj"))))
6908 (build-system gnu-build-system)
6909 (arguments
6910 `(#:phases
6911 (modify-phases %standard-phases
6912 (delete 'configure)
6913 ;; There is no "install" phase. By default, tbe is installed
6914 ;; in the build directory. Provide our own installation.
6915 (replace 'install
6916 (lambda* (#:key outputs #:allow-other-keys)
6917 (let* ((out (assoc-ref outputs "out"))
6918 (bin (string-append out "/bin"))
6919 (share (string-append out "/share")))
6920 (install-file "usr/games/tbe" bin)
6921 (mkdir-p share)
6922 (copy-recursively "usr/share" share)
6923 #t))))
6924 ;; Test suite requires a running Xorg server. Even when
6925 ;; provided, it fails with "D-Bus library appears to be
6926 ;; incorrectly set up; failed to read machine uuid: Failed to
6927 ;; open "/etc/machine-id": No such file or directory" along
6928 ;; with multiple "QPainter:: ... Painter not active" warnings.
6929 #:tests? #f))
6930 (inputs
6931 `(("qtbase" ,qtbase)
6932 ("qtsvg" ,qtsvg)))
6933 (native-inputs
6934 `(("cmake" ,cmake-minimal)
6935 ("gettext-minimal" ,gettext-minimal)
6936 ("qttools" ,qttools)))
6937 (synopsis "Realistic physics puzzle game")
6938 (description "The Butterfly Effect (tbe) is a game that uses
6939 realistic physics simulations to combine lots of simple mechanical
6940 elements to achieve a simple goal in the most complex way possible.")
6941 (home-page "http://the-butterfly-effect.org/")
6942 ;; Main license is GPL2-only. However, artwork is distributed
6943 ;; under various licenses, listed here.
6944 (license (list license:gpl2 license:public-domain license:expat
6945 license:cc-by-sa3.0 license:gpl3+ license:wtfpl2))))
6946
6947 (define-public pioneer
6948 (package
6949 (name "pioneer")
6950 (version "20200203")
6951 (source (origin
6952 (method git-fetch)
6953 (uri (git-reference
6954 (url "https://github.com/pioneerspacesim/pioneer")
6955 (commit version)))
6956 (file-name (git-file-name name version))
6957 (sha256
6958 (base32
6959 "1011xsi94jhw98mhm8kryq8ajig0qfbrdx5xdasi92bd4nk7lcp8"))))
6960 (build-system cmake-build-system)
6961 (native-inputs
6962 `(("pkg-config" ,pkg-config)))
6963 (inputs
6964 `(("assimp" ,assimp)
6965 ("curl" ,curl)
6966 ("freetype" ,freetype)
6967 ("glew" ,glew)
6968 ("glu" ,glu)
6969 ("libpng" ,libpng)
6970 ("libsigc++" ,libsigc++)
6971 ("libvorbis" ,libvorbis)
6972 ("lua" ,lua-5.2) ;not compatible with 5.3
6973 ("mesa" ,mesa)
6974 ("sdl" ,(sdl-union (list sdl2 sdl2-image)))))
6975 (arguments
6976 `(#:tests? #f ;tests are broken
6977 #:configure-flags (list "-DUSE_SYSTEM_LIBLUA:BOOL=YES"
6978 (string-append "-DPIONEER_DATA_DIR="
6979 %output "/share/games/pioneer"))))
6980 (home-page "https://pioneerspacesim.net")
6981 (synopsis "Game of lonely space adventure")
6982 (description
6983 "Pioneer is a space adventure game set in our galaxy at the turn of the
6984 31st century. The game is open-ended, and you are free to eke out whatever
6985 kind of space-faring existence you can think of. Look for fame or fortune by
6986 exploring the millions of star systems. Turn to a life of crime as a pirate,
6987 smuggler or bounty hunter. Forge and break alliances with the various
6988 factions fighting for power, freedom or self-determination. The universe is
6989 whatever you make of it.")
6990 (license license:gpl3)))
6991
6992 (define-public badass
6993 (let ((commit "3c3cd669b4fc8f73a102e3702788f7b28dc47dbb")
6994 (revision "0"))
6995 (package
6996 (name "badass")
6997 (version (git-version "0.0" revision commit))
6998 (source (origin
6999 (method git-fetch)
7000 (uri (git-reference
7001 (url "https://github.com/umayr/badass")
7002 (commit commit)))
7003 (file-name (git-file-name name version))
7004 (sha256
7005 (base32
7006 "05c9vdcb5ym3z0n5ll3v39mw4yl9jcjnlydmn0yl89ai9pv71zb6"))))
7007 (build-system go-build-system)
7008 (arguments
7009 '(#:import-path "github.com/umayr/badass"))
7010 (synopsis "Hacking contribution graphs in git")
7011 (description
7012 "Badass generates false commits for a range of dates, essentially
7013 hacking the gamification of contribution graphs on platforms such as
7014 Github or Gitlab.")
7015 (home-page "https://github.com/umayr/badass")
7016 (license license:expat))))
7017
7018 (define-public colobot
7019 (package
7020 (name "colobot")
7021 (version "0.1.12-alpha")
7022 (source
7023 (origin
7024 (method git-fetch)
7025 (uri (git-reference
7026 (url "https://github.com/colobot/colobot")
7027 (commit (string-append "colobot-gold-" version))
7028 (recursive? #t))) ;for "data/" subdir
7029 (file-name (git-file-name name version))
7030 (sha256
7031 (base32
7032 "1c181cclkrnspgs07lvndg2c81cjq3smkv7qim8c470cj88rcrp2"))))
7033 (build-system cmake-build-system)
7034 (arguments
7035 `(#:tests? #f ;no test
7036 #:phases
7037 (modify-phases %standard-phases
7038 (add-after 'unpack 'make-git-checkout-writable
7039 (lambda _
7040 (for-each make-file-writable (find-files "."))
7041 #t))
7042 (add-after 'unpack 'fix-directories
7043 (lambda _
7044 (substitute* "CMakeLists.txt"
7045 (("(\\$\\{CMAKE_INSTALL_PREFIX\\})/games" _ prefix)
7046 (string-append prefix "/bin"))
7047 (("(\\$\\{CMAKE_INSTALL_PREFIX\\}/share)/games/colobot" _ prefix)
7048 (string-append prefix "/colobot")))
7049 #t))
7050 (add-after 'fix-directories 'install-music
7051 ;; Retrieve and install music files.
7052 (lambda* (#:key inputs #:allow-other-keys)
7053 ;; Installation process tries to download music files using
7054 ;; "wget" if not already present. Since we are going another
7055 ;; route, skip "wget" command check.
7056 (substitute* "data/music/CMakeLists.txt"
7057 (("find_program\\(WGET wget\\)") ""))
7058 ;; Populate "music/" directory.
7059 (let ((data (assoc-ref inputs "colobot-music")))
7060 (invoke "tar" "-xvf" data "-Cdata/music"))
7061 #t)))))
7062 (native-inputs
7063 `(("colobot-music"
7064 ,(origin
7065 (method url-fetch)
7066 (uri (string-append "https://colobot.info/files/music/"
7067 "colobot-music_ogg_" version ".tar.gz"))
7068 (sha256
7069 (base32
7070 "1s86cd36rwkff329mb1ay1wi5qqyi35564ppgr3f4qqz9wj9vs2m"))))
7071 ("gettext" ,gettext-minimal)
7072 ("librsvg" ,librsvg)
7073 ("po4a" ,po4a)
7074 ("python" ,python-wrapper)))
7075 (inputs
7076 `(("boost" ,boost)
7077 ("glew" ,glew)
7078 ("libogg" ,libogg)
7079 ("libpng" ,libpng)
7080 ("libsndfile" ,libsndfile)
7081 ("libvorbis" ,libvorbis)
7082 ("openal" ,openal)
7083 ("physfs" ,physfs)
7084 ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-ttf)))))
7085 (synopsis "Educational programming strategy game")
7086 (description "Colobot: Gold Edition is a real-time strategy game, where
7087 you can program your units (bots) in a language called CBOT, which is similar
7088 to C++ and Java. Your mission is to find a new planet to live and survive.
7089 You can save humanity and get programming skills!")
7090 (home-page "https://colobot.info")
7091 (license license:gpl3+)))
7092
7093 (define-public gzdoom
7094 (package
7095 (name "gzdoom")
7096 (version "4.3.2")
7097 (source
7098 (origin
7099 (method git-fetch)
7100 (uri (git-reference
7101 (url "https://github.com/coelckers/gzdoom")
7102 (commit (string-append "g" version))))
7103 (file-name (git-file-name name version))
7104 (sha256
7105 (base32 "0i4hyg72z84fc6ca2ic9q82q5cbgrbd7bynl3kpkypxvyasq08wz"))
7106 (patches (search-patches "gzdoom-search-in-installed-share.patch"
7107 "gzdoom-find-system-libgme.patch"))
7108 (modules '((guix build utils)))
7109 (snippet
7110 '(begin
7111 ;; Remove some bundled libraries. XXX There are more, but removing
7112 ;; them would require, at least, patching the build system.
7113 (with-directory-excursion "libraries"
7114 (delete-file-recursively "bzip2")
7115 (delete-file-recursively "game-music-emu")
7116 (delete-file-recursively "jpeg")
7117 (delete-file-recursively "zlib"))
7118 #t))))
7119 (arguments
7120 '(#:tests? #f
7121 #:configure-flags
7122 (let ((out (assoc-ref %outputs "out")))
7123 (list
7124 (string-append
7125 "-DCMAKE_CXX_FLAGS:="
7126 "-DSHARE_DIR=\\\"" out "/share/\\\" "
7127 "-DGUIX_OUT_PK3=\\\"" out "/share/games/doom\\\"")
7128
7129 ;; The build requires some extra convincing not to use the bundled
7130 ;; libgme previously deleted in the soure snippet.
7131 "-DFORCE_INTERNAL_GME=OFF"
7132
7133 ;; Link libraries at build time instead of loading them at run time.
7134 "-DDYN_OPENAL=OFF"
7135 "-DDYN_FLUIDSYNTH=OFF"
7136 "-DDYN_GTK=OFF"
7137 "-DDYN_MPG123=OFF"
7138 "-DDYN_SNDFILE=OFF"))
7139 #:phases
7140 (modify-phases %standard-phases
7141 (add-before 'configure 'fix-referenced-paths
7142 (lambda* (#:key inputs outputs #:allow-other-keys)
7143 (let ((fluid-3 (assoc-ref inputs "fluid-3"))
7144 (timidity++ (assoc-ref inputs "timidity++"))
7145 (out (assoc-ref outputs "out")))
7146
7147 (substitute*
7148 "src/CMakeLists.txt"
7149 (("COMMAND /bin/sh")
7150 (string-append "COMMAND " (which "sh"))))
7151
7152 (substitute*
7153 "libraries/zmusic/mididevices/music_fluidsynth_mididevice.cpp"
7154 (("/usr/share/sounds/sf2/FluidR3_GM.sf2")
7155 (string-append fluid-3 "/share/soundfonts/FluidR3Mono_GM.sf3")))
7156
7157 (substitute*
7158 "libraries/zmusic/mididevices/music_timiditypp_mididevice.cpp"
7159 (("exename = \"timidity\"")
7160 (string-append "exename = \"" timidity++ "/bin/timidity\"")))
7161 #t))))))
7162 (build-system cmake-build-system)
7163 (inputs `(("bzip2" ,bzip2)
7164 ("fluid-3" ,fluid-3)
7165 ("fluidsynth" ,fluidsynth)
7166 ("gtk+3" ,gtk+)
7167 ("libgme" ,libgme)
7168 ("libjpeg" ,libjpeg-turbo)
7169 ("libsndfile" ,libsndfile)
7170 ("mesa" ,mesa)
7171 ("mpg123" ,mpg123)
7172 ("openal" ,openal)
7173 ("sdl2" ,sdl2)
7174 ("timidity++" ,timidity++)
7175 ("zlib" ,zlib)))
7176 (native-inputs `(("pkg-config" ,pkg-config)
7177 ("unzip" ,unzip)))
7178 (synopsis "Modern Doom 2 source port")
7179 (description "GZdoom is a port of the Doom 2 game engine, with a modern
7180 renderer. It improves modding support with ZDoom's advanced mapping features
7181 and the new ZScript language. In addition to Doom, it supports Heretic, Hexen,
7182 Strife, Chex Quest, and fan-created games like Harmony, Hacx and Freedoom.")
7183 (home-page "https://zdoom.org/index")
7184 ;; The source uses x86 assembly
7185 (supported-systems '("x86_64-linux" "i686-linux"))
7186 (license (list license:gpl3+ ; gzdoom game
7187 license:lgpl3+ ; gzdoom renderer
7188 license:expat ; gdtoa
7189 (license:non-copyleft ; modified dumb
7190 "file://dumb/licence.txt"
7191 "Dumb license, explicitly GPL compatible.")))))
7192
7193 (define-public odamex
7194 (package
7195 (name "odamex")
7196 (version "0.8.3")
7197 (source
7198 (origin
7199 (method url-fetch)
7200 (uri (string-append
7201 "mirror://sourceforge/odamex/Odamex/" version "/"
7202 "odamex-src-" version ".tar.gz"))
7203 (sha256
7204 (base32 "0f887g87bmcq4dpcga7xc2mpxs947dkbc934ir9xs55gz6z13q96"))))
7205 (build-system cmake-build-system)
7206 (arguments `(#:tests? #f)) ; no tests
7207 (inputs
7208 `(("sdl" ,sdl)
7209 ("sdl-mixer" ,sdl-mixer)
7210 ("zlib" ,zlib)
7211 ("libpng" ,libpng)
7212 ("alsa-lib" ,alsa-lib)))
7213 (home-page "https://odamex.net/")
7214 (synopsis "Multiplayer Doom port")
7215 (description "Odamex is a modification of the Doom engine that
7216 allows players to easily join servers dedicated to playing Doom
7217 online.")
7218 (license license:gpl2+)))
7219
7220 (define-public chocolate-doom
7221 (package
7222 (name "chocolate-doom")
7223 (version "3.0.1")
7224 (source (origin
7225 (method url-fetch)
7226 (uri (string-append "https://www.chocolate-doom.org/downloads/"
7227 version
7228 "/chocolate-doom-"
7229 version
7230 ".tar.gz"))
7231 (sha256
7232 (base32
7233 "1iy8rx7kjvi1zjiw4zh77szzmd1sgpqajvbhprh1sj93fhbxcdfl"))))
7234 (build-system gnu-build-system)
7235 (inputs `(("sdl2-net" ,sdl2-net)
7236 ("sdl2-mixer" , sdl2-mixer)
7237 ("sdl2" ,sdl2)))
7238 (native-inputs
7239 `(("pkg-config" ,pkg-config)))
7240 (synopsis "Doom source port preserving the look, feel, and bugs of vanilla
7241 Doom")
7242 (description
7243 "Chocolate Doom takes a different approach to other source ports. Its
7244 aim is to accurately reproduce the experience of playing Vanilla Doom. It is
7245 a conservative, historically accurate Doom source port, which is compatible
7246 with the thousands of mods and levels that were made before the Doom source
7247 code was released. Rather than flashy new graphics, Chocolate Doom's main
7248 features are its accurate reproduction of the game as it was played in the
7249 1990s. The project is developed around a carefully-considered philosophy that
7250 intentionally restricts which features may be added (and rejects any that
7251 affect gameplay).")
7252 (home-page "https://www.chocolate-doom.org/wiki/index.php/Chocolate_Doom")
7253 (license license:gpl2)))
7254
7255 (define-public crispy-doom
7256 (package
7257 (inherit chocolate-doom)
7258 (name "crispy-doom")
7259 (version "5.8.0")
7260 (source (origin
7261 (method git-fetch)
7262 (uri (git-reference
7263 (url "https://github.com/fabiangreffrath/crispy-doom")
7264 (commit (string-append "crispy-doom-" version))))
7265 (file-name (git-file-name name version))
7266 (sha256
7267 (base32 "1b6gn0dysv631jynh769whww9xcss1gms78sz3nrn855q1dsvcb4"))))
7268 (native-inputs
7269 (append
7270 (package-native-inputs chocolate-doom)
7271 `(("automake" ,automake)
7272 ("autoreconf" ,autoconf))))
7273 (arguments
7274 `(#:phases
7275 (modify-phases %standard-phases
7276 (replace 'bootstrap
7277 ;; The bundled autogen.sh script unconditionally runs ./configure.
7278 (lambda _ (invoke "autoreconf" "-vif"))))))
7279 (synopsis "Limit-removing enhanced-resolution Doom source port based on
7280 Chocolate Doom")
7281 (description
7282 "Crispy Doom is a friendly fork of Chocolate Doom that provides a higher
7283 display resolution, removes the static limits of the Doom engine and offers
7284 further optional visual, tactical and physical enhancements while remaining
7285 entirely config file, savegame, netplay and demo compatible with the
7286 original.")
7287 (home-page "https://www.chocolate-doom.org/wiki/index.php/Crispy_Doom")))
7288
7289 (define shlomif-cmake-modules
7290 (origin
7291 (method url-fetch)
7292 (uri (string-append "https://bitbucket.org/shlomif/shlomif-cmake-modules/"
7293 "raw/c505713d7a7cda608f97f01577e5868a711b883e/"
7294 "shlomif-cmake-modules/Shlomif_Common.cmake"))
7295 (sha256
7296 (base32 "0kx9s1qqhhzprp1w3b67xmsns0n0v506bg5hgrshxaxpy6lqiwb2"))))
7297
7298 (define-public rinutils
7299 (package
7300 (name "rinutils")
7301 (version "0.2.0")
7302 (source (origin
7303 (method git-fetch)
7304 (uri (git-reference
7305 (url "https://github.com/shlomif/rinutils")
7306 (commit version)))
7307 (file-name (git-file-name name version))
7308 (sha256
7309 (base32
7310 "1fpxyg86ggv0h7j8aarjjxrvwlj7jycd3bw066c0dwkq2fszxsf2"))))
7311 (native-inputs
7312 `(("perl" ,perl)
7313 ;; The following is only needed for tests.
7314 ("perl-file-find-object" ,perl-file-find-object)
7315 ("perl-test-differences" ,perl-test-differences)
7316 ("perl-class-xsaccessor" ,perl-class-xsaccessor)
7317 ("perl-io-all" ,perl-io-all)
7318 ("perl-test-runvalgrind" ,perl-test-runvalgrind)
7319 ("cmake-rules" ,shlomif-cmake-modules)
7320 ("pkg-config" ,pkg-config)))
7321 (inputs
7322 `(("cmocka" ,cmocka)
7323 ("perl-env-path" ,perl-env-path)
7324 ("perl-inline" ,perl-inline)
7325 ("perl-inline-c" ,perl-inline-c)
7326 ("perl-string-shellquote" ,perl-string-shellquote)
7327 ("perl-test-trailingspace" ,perl-test-trailingspace)
7328 ("perl-file-find-object-rule" ,perl-file-find-object-rule)
7329 ("perl-text-glob" ,perl-text-glob)
7330 ("perl-number-compare" ,perl-number-compare)
7331 ("perl-moo" ,perl-moo)))
7332 (arguments
7333 `(#:phases
7334 (modify-phases %standard-phases
7335 (add-after 'unpack 'fix-build-env
7336 (lambda* (#:key inputs #:allow-other-keys)
7337 (use-modules (guix build utils))
7338 (let* ((cmake-rules (assoc-ref inputs "cmake-rules")))
7339 (copy-file cmake-rules
7340 (string-append "cmake/"
7341 (strip-store-file-name cmake-rules)))
7342 #t)))
7343 (replace 'check
7344 (lambda _
7345 (with-directory-excursion "../source"
7346 (setenv "FCS_TEST_BUILD" "1")
7347 (setenv "RINUTILS_TEST_BUILD" "1")
7348 ;; TODO: Run tests after setting RINUTILS_TEST_TIDY to `1',
7349 ;; which requires tidy-all.
7350 ;; (setenv "RINUTILS_TEST_TIDY" "1")
7351 (invoke "perl" "CI-testing/continuous-integration-testing.pl")))))))
7352 (build-system cmake-build-system)
7353 (home-page "https://www.shlomifish.org/open-source/projects/")
7354 (synopsis "C11 / gnu11 utilities C library")
7355 (description "This package provides C11 / gnu11 utilities C library")
7356 (license license:expat)))
7357
7358 (define-public fortune-mod
7359 (package
7360 (name "fortune-mod")
7361 (version "2.28.0")
7362 (source
7363 (origin
7364 (method git-fetch)
7365 (uri (git-reference
7366 (url "https://github.com/shlomif/fortune-mod")
7367 (commit (string-append "fortune-mod-" version))))
7368 (file-name (git-file-name name version))
7369 (sha256
7370 (base32 "1ppzgnffgdcmq6fq4gmdq2ig10ip2bnfgklkb3i8nc6bdxm7pb89"))))
7371 (build-system cmake-build-system)
7372 (arguments
7373 `(#:test-target "check"
7374 #:phases
7375 (modify-phases %standard-phases
7376 (add-after 'unpack 'fix-build-env
7377 (lambda* (#:key inputs #:allow-other-keys)
7378 (use-modules (guix build utils))
7379 (let* ((cmake-rules (assoc-ref inputs "cmake-rules")))
7380 (copy-file cmake-rules
7381 (string-append "fortune-mod/cmake/"
7382 (strip-store-file-name cmake-rules)))
7383 (chdir "fortune-mod")
7384 ;; TODO: Valgrind tests fail for some reason.
7385 ;; Similar issue: https://github.com/shlomif/fortune-mod/issues/21 (?)
7386 (delete-file "tests/t/valgrind.t")
7387 #t)))
7388 (add-after 'install 'fix-install-directory
7389 (lambda* (#:key outputs #:allow-other-keys)
7390 ;; Move binary from "games/" to "bin/" and remove the latter. This
7391 ;; is easier than patching CMakeLists.txt since the tests hard-code
7392 ;; the location as well.
7393 (let* ((out (assoc-ref outputs "out"))
7394 (bin (string-append out "/bin"))
7395 (games (string-append out "/games")))
7396 (rename-file (string-append games "/fortune")
7397 (string-append bin "/fortune"))
7398 (rmdir games)
7399 #t))))))
7400 (inputs `(("recode" ,recode)))
7401 (native-inputs
7402 `(("perl" ,perl)
7403 ;; The following is only needed for tests.
7404 ("perl-file-find-object" ,perl-file-find-object)
7405 ("perl-test-differences" ,perl-test-differences)
7406 ("perl-class-xsaccessor" ,perl-class-xsaccessor)
7407 ("perl-io-all" ,perl-io-all)
7408 ("perl-test-runvalgrind" ,perl-test-runvalgrind)
7409 ("cmake-rules" ,shlomif-cmake-modules)
7410 ("rinutils" ,rinutils)))
7411 (home-page "https://www.shlomifish.org/open-source/projects/fortune-mod/")
7412 (synopsis "The Fortune Cookie program from BSD games")
7413 (description "Fortune is a command-line utility which displays a random
7414 quotation from a collection of quotes.")
7415 (license license:bsd-4)))
7416
7417 (define xonotic-data
7418 (package
7419 (name "xonotic-data")
7420 (version "0.8.2")
7421 (source
7422 (origin
7423 (method url-fetch)
7424 (uri (string-append "http://dl.xonotic.org/xonotic-"
7425 version ".zip"))
7426 (file-name (string-append name "-" version ".zip"))
7427 (sha256
7428 (base32
7429 "1mcs6l4clvn7ibfq3q69k2p0z6ww75rxvnngamdq5ic6yhq74bx2"))))
7430 (build-system trivial-build-system)
7431 (native-inputs
7432 `(("unzip" ,unzip)))
7433 (arguments
7434 `(#:modules ((guix build utils))
7435 #:builder
7436 (begin
7437 (use-modules (guix build utils))
7438 (let* ((out (assoc-ref %outputs "out"))
7439 (xonotic (string-append out "/share/xonotic"))
7440 (source (assoc-ref %build-inputs "source"))
7441 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
7442 (copy-file source (string-append ,name "-" ,version ".zip"))
7443 (invoke unzip (string-append ,name "-" ,version ".zip"))
7444 (mkdir-p out)
7445 (mkdir-p xonotic)
7446 (chdir "Xonotic")
7447 (copy-recursively "data"
7448 (string-append xonotic "/data"))
7449 (copy-recursively "server"
7450 (string-append xonotic "/server"))
7451 (install-file "key_0.d0pk" xonotic)))))
7452 (home-page "http://xonotic.org")
7453 (synopsis "Data files for Xonotic")
7454 (description
7455 "Xonotic-data provides the data files required by the game Xonotic.")
7456 (license (list license:gpl2+
7457 (license:x11-style "file://server/rcon.pl")))))
7458
7459 (define-public xonotic
7460 (package
7461 (name "xonotic")
7462 (version "0.8.2")
7463 (source
7464 (origin
7465 (method url-fetch)
7466 (uri (string-append "http://dl.xonotic.org/xonotic-"
7467 version "-source.zip"))
7468 (file-name (string-append name "-" version ".zip"))
7469 (sha256
7470 (base32
7471 "0axxw04fyz6jlfqd0kp7hdrqa0li31sx1pbipf2j5qp9wvqicsay"))))
7472 (build-system gnu-build-system)
7473 (arguments
7474 `(#:configure-flags (list (string-append "--prefix="
7475 (assoc-ref %outputs "out"))
7476 "--disable-rijndael")
7477 #:phases
7478 (modify-phases %standard-phases
7479 (add-before 'configure 'make-darkplaces
7480 (lambda* (#:key outputs #:allow-other-keys)
7481 (let* ((out (assoc-ref outputs "out"))
7482 (sharedir (string-append out "/share/xonotic/")))
7483 (invoke "make" "-C" "source/darkplaces"
7484 (string-append "DP_FS_BASEDIR="
7485 sharedir)
7486 "DP_LINK_TO_LIBJPEG=1"
7487 "DP_SOUND_API=ALSA"
7488 "CC=gcc"
7489 "-f" "makefile"
7490 "cl-release")
7491 (invoke "make" "-C" "source/darkplaces"
7492 (string-append "DP_FS_BASEDIR="
7493 sharedir)
7494 "DP_LINK_TO_LIBJPEG=1"
7495 "DP_SOUND_API=ALSA"
7496 "CC=gcc"
7497 "-f" "makefile"
7498 "sdl-release")
7499 (invoke "make" "-C" "source/darkplaces"
7500 (string-append "DP_FS_BASEDIR="
7501 sharedir)
7502 "DP_LINK_TO_LIBJPEG=1"
7503 "DP_SOUND_API=ALSA"
7504 "CC=gcc"
7505 "-f" "makefile"
7506 "sv-release"))))
7507 (add-before 'configure 'bootstrap
7508 (lambda _
7509 (chdir "source/d0_blind_id")
7510 (invoke "sh" "autogen.sh")))
7511 (add-after 'build 'install-desktop-entry
7512 (lambda* (#:key outputs #:allow-other-keys)
7513 ;; Add .desktop files for the 2 variants and the symlink
7514 (let* ((output (assoc-ref outputs "out"))
7515 (apps (string-append output "/share/applications")))
7516 (mkdir-p apps)
7517 (with-output-to-file
7518 (string-append apps "/xonotic-glx.desktop")
7519 (lambda _
7520 (format #t
7521 "[Desktop Entry]~@
7522 Name=xonotic-glx~@
7523 Comment=Xonotic glx~@
7524 Exec=~a/bin/xonotic-glx~@
7525 TryExec=~@*~a/bin/xonotic-glx~@
7526 Icon=xonotic~@
7527 Categories=Game~@
7528 Type=Application~%"
7529 output)))
7530 (with-output-to-file
7531 (string-append apps "/xonotic-sdl.desktop")
7532 (lambda _
7533 (format #t
7534 "[Desktop Entry]~@
7535 Name=xonotic-sdl~@
7536 Comment=Xonotic sdl~@
7537 Exec=~a/bin/xonotic-sdl~@
7538 TryExec=~@*~a/bin/xonotic-sdl~@
7539 Icon=xonotic~@
7540 Categories=Game~@
7541 Type=Application~%"
7542 output)))
7543 (with-output-to-file
7544 (string-append apps "/xonotic.desktop")
7545 (lambda _
7546 (format #t
7547 "[Desktop Entry]~@
7548 Name=xonotic~@
7549 Comment=Xonotic~@
7550 Exec=~a/bin/xonotic-glx~@
7551 TryExec=~@*~a/bin/xonotic~@
7552 Icon=xonotic~@
7553 Categories=Game~@
7554 Type=Application~%"
7555 output)))
7556 #t)))
7557 (add-after 'install-desktop-entry 'install-icons
7558 (lambda* (#:key outputs #:allow-other-keys)
7559 (let ((out (assoc-ref outputs "out")))
7560 (with-directory-excursion "../../misc/logos/icons_png/"
7561 (for-each
7562 (lambda (file)
7563 (let* ((size (string-filter char-numeric? file))
7564 (icons (string-append out "/share/icons/hicolor/"
7565 size "x" size "/apps")))
7566 (mkdir-p icons)
7567 (copy-file file (string-append icons "/xonotic.png"))))
7568 '("xonotic_16.png" "xonotic_22.png" "xonotic_24.png"
7569 "xonotic_32.png" "xonotic_48.png" "xonotic_64.png"
7570 "xonotic_128.png" "xonotic_256.png" "xonotic_512.png"))))))
7571 (add-after 'install-icons 'install-binaries
7572 (lambda* (#:key outputs #:allow-other-keys)
7573 (let ((out (assoc-ref outputs "out")))
7574 (define (install src dst)
7575 (let ((dst (string-append out dst)))
7576 (mkdir-p (dirname dst))
7577 (copy-file src dst)))
7578 (mkdir-p (string-append out "/bin"))
7579 (install "../darkplaces/darkplaces-dedicated"
7580 "/bin/xonotic-dedicated")
7581 (install "../darkplaces/darkplaces-glx"
7582 "/bin/xonotic-glx")
7583 (install "../darkplaces/darkplaces-sdl"
7584 "/bin/xonotic-sdl")
7585 ;; Provide a default xonotic executable, defaulting to SDL.
7586 (symlink (string-append out "/bin/xonotic-sdl")
7587 (string-append out "/bin/xonotic"))
7588 #t)))
7589 (add-after 'install-binaries 'install-data
7590 (lambda* (#:key outputs inputs #:allow-other-keys)
7591 (let* ((out (assoc-ref outputs "out"))
7592 (data (assoc-ref inputs "xonotic-data")))
7593 (symlink (string-append data "/share/xonotic")
7594 (string-append out "/share/xonotic"))
7595 #t)))
7596 (add-after 'install-binaries 'wrap-binaries
7597 (lambda* (#:key outputs inputs #:allow-other-keys)
7598 ;; Curl and libvorbis need to be wrapped so that we get
7599 ;; sound and networking.
7600 (let* ((out (assoc-ref outputs "out"))
7601 (bin (string-append out "/bin/xonotic"))
7602 (bin-sdl (string-append out "/bin/xonotic-sdl"))
7603 (bin-glx (string-append out "/bin/xonotic-glx"))
7604 (bin-dedicated (string-append out "/bin/xonotic-dedicated"))
7605 (curl (assoc-ref inputs "curl"))
7606 (vorbis (assoc-ref inputs "libvorbis")))
7607 (wrap-program bin
7608 `("LD_LIBRARY_PATH" ":" prefix
7609 (,(string-append curl "/lib:" vorbis "/lib"))))
7610 (wrap-program bin-sdl
7611 `("LD_LIBRARY_PATH" ":" prefix
7612 (,(string-append curl "/lib:" vorbis "/lib"))))
7613 (wrap-program bin-glx
7614 `("LD_LIBRARY_PATH" ":" prefix
7615 (,(string-append curl "/lib:" vorbis "/lib"))))
7616 (wrap-program bin-dedicated
7617 `("LD_LIBRARY_PATH" ":" prefix
7618 (,(string-append curl "/lib:" vorbis "/lib"))))
7619 #t))))))
7620 (inputs
7621 `(("xonotic-data" ,xonotic-data)
7622 ("alsa-lib" ,alsa-lib)
7623 ("curl" ,curl)
7624 ("libjpeg" ,libjpeg-turbo)
7625 ("libmodplug" ,libmodplug)
7626 ("libvorbis" ,libvorbis)
7627 ("libogg" ,libogg)
7628 ("libxpm" ,libxpm)
7629 ("libxxf86dga" ,libxxf86dga)
7630 ("libxxf86vm" ,libxxf86vm)
7631 ("libx11" ,libx11)
7632 ("libxext" ,libxext)
7633 ("libxau" ,libxau)
7634 ("libxdmcp" ,libxdmcp)
7635 ("mesa" ,mesa)
7636 ("glu" ,glu)
7637 ("freetype" ,freetype)
7638 ("sdl2" ,sdl2)
7639 ("libpng" ,libpng)
7640 ("hicolor-icon-theme" ,hicolor-icon-theme)))
7641 (native-inputs
7642 `(("unzip" ,unzip)
7643 ("autoconf" ,autoconf)
7644 ("automake" ,automake)
7645 ("pkg-config" ,pkg-config)
7646 ("libtool" ,libtool)
7647 ("gmp" ,gmp)))
7648 (home-page "https://xonotic.org")
7649 (synopsis "Fast-paced first-person shooter game")
7650 (description
7651 "Xonotic is a free, fast-paced first-person shooter.
7652 The project is geared towards providing addictive arena shooter
7653 gameplay which is all spawned and driven by the community itself.
7654 Xonotic is a direct successor of the Nexuiz project with years of
7655 development between them, and it aims to become the best possible
7656 open-source FPS of its kind.")
7657 (license (list license:gpl2+
7658 license:bsd-3 ; /source/d0_blind_id folder and others
7659 (license:x11-style "" "See file rcon.pl.")))))
7660
7661 (define-public frotz
7662 (package
7663 (name "frotz")
7664 (version "2.44")
7665 (source (origin
7666 (method url-fetch)
7667 (uri (list (string-append
7668 "http://www.ifarchive.org/if-archive/infocom/interpreters/"
7669 "frotz/frotz-" version ".tar.gz")
7670 (string-append
7671 "ftp://ftp.ifarchive.org/if-archive/infocom/interpreters/"
7672 "frotz/frotz-" version ".tar.gz")))
7673 (sha256
7674 (base32
7675 "1v735xr3blznac8fnwa27s1vhllx4jpz7kw7qdw1bsfj6kq21v3k"))))
7676 (build-system gnu-build-system)
7677 (arguments
7678 `(#:tests? #f ; there are no tests
7679 #:phases
7680 (modify-phases %standard-phases
7681 (delete 'configure)
7682 (add-before 'build 'curses
7683 (lambda _
7684 (substitute* "Makefile"
7685 (("lcurses") "lncurses"))
7686 #t))
7687 (replace 'install
7688 (lambda* (#:key outputs #:allow-other-keys)
7689 (let* ((out (assoc-ref outputs "out"))
7690 (bin (string-append out "/bin"))
7691 (man (string-append out "/share/man/man6")))
7692 (install-file "frotz" bin)
7693 (mkdir-p man)
7694 (install-file "doc/frotz.6" man)
7695 #t))))))
7696 (inputs `(("libmodplug" ,libmodplug)
7697 ("libsamplerate" ,libsamplerate)
7698 ("libsndfile" ,libsndfile)
7699 ("libvorbis" ,libvorbis)
7700 ("ncurses" ,ncurses)))
7701 (synopsis "Portable Z-machine interpreter (ncurses version) for text adventure games")
7702 (description "Frotz is an interpreter for Infocom games and other Z-machine
7703 games in the text adventure/interactive fiction genre. This version of Frotz
7704 complies with standard 1.0 of Graham Nelson's specification. It plays all
7705 Z-code games V1-V8, including V6, with sound support through libao, and uses
7706 ncurses for text display.")
7707 (home-page "http://frotz.sourceforge.net")
7708 (license license:gpl2+)))
7709
7710 (define-public frotz-dumb-terminal
7711 (package
7712 (name "frotz-dumb-terminal")
7713 (version "2.44")
7714 (source (origin
7715 (method url-fetch)
7716 (uri (list (string-append
7717 "http://www.ifarchive.org/if-archive/infocom/interpreters/"
7718 "frotz/frotz-" version ".tar.gz")
7719 (string-append
7720 "ftp://ftp.ifarchive.org/if-archive/infocom/interpreters/"
7721 "frotz/frotz-" version ".tar.gz")))
7722 (sha256
7723 (base32
7724 "1v735xr3blznac8fnwa27s1vhllx4jpz7kw7qdw1bsfj6kq21v3k"))))
7725 (build-system gnu-build-system)
7726 (arguments
7727 `(#:tests? #f ; there are no tests
7728 #:phases
7729 (modify-phases %standard-phases
7730 (delete 'configure)
7731 (replace 'build
7732 (lambda _
7733 (invoke "make" "dumb")))
7734 (replace 'install
7735 (lambda* (#:key outputs #:allow-other-keys)
7736 (let* ((out (assoc-ref outputs "out"))
7737 (bin (string-append out "/bin"))
7738 (man (string-append out "/share/man/man6")))
7739 (install-file "dfrotz" bin)
7740 (mkdir-p man)
7741 (install-file "doc/dfrotz.6" man)
7742 #t))))))
7743 (synopsis "Portable Z-machine dumb interpreter for text adventure games")
7744 (description "Frotz is an interpreter for Infocom games and
7745 other Z-machine games in the text adventure/interactive fiction genre.
7746 dfrotz is the dumb interface version. You get no screen control; everything
7747 is just printed to the terminal line by line. The terminal handles all the
7748 scrolling. Maybe you'd like to experience what it's like to play Adventure on
7749 a teletype. A much cooler use for compiling Frotz with the dumb interface is
7750 that it can be wrapped in CGI scripting, PHP, and the like to allow people
7751 to play games on webpages. It can also be made into a chat bot.")
7752 (home-page "http://frotz.sourceforge.net")
7753 (license license:gpl2+)))
7754
7755 (define-public frotz-sdl
7756 (let* ((commit "4de8c34f2116fff554af6216c30ec9d41bf50b24"))
7757 (package
7758 (name "frotz-sdl")
7759 (version "2.45pre")
7760 (source (origin
7761 (method git-fetch)
7762 (uri (git-reference
7763 (url "https://gitlab.com/DavidGriffith/frotz")
7764 (commit commit)))
7765 (sha256
7766 (base32
7767 "18ms21pcrl7ipcnyqnf8janamkryzx78frsgd9kfk67jvbj0z2k8"))
7768 (file-name (git-file-name name version))))
7769 (build-system gnu-build-system)
7770 (arguments
7771 `(#:tests? #f ; there are no tests
7772 #:phases
7773 (modify-phases %standard-phases
7774 (delete 'configure)
7775 (add-before 'build 'patch-makefile
7776 (lambda _
7777 (substitute* "Makefile"
7778 (("lcurses") "lncurses")
7779 (("^BUILD_DATE_TIME =.*$")
7780 "BUILD_DATE_TIME = \"2.45pre-20180907.00000\"\n"))
7781 #t))
7782 (replace 'build
7783 (lambda _
7784 (invoke "make" "sdl")))
7785 (replace 'install
7786 (lambda* (#:key outputs #:allow-other-keys)
7787 (let* ((out (assoc-ref outputs "out"))
7788 (bin (string-append out "/bin"))
7789 (man (string-append out "/share/man/man6")))
7790 (install-file "sfrotz" bin)
7791 (mkdir-p man)
7792 (install-file "doc/sfrotz.6" man)
7793 #t))))))
7794 (native-inputs
7795 `(("pkg-config" ,pkg-config)
7796 ("which" ,which)
7797 ("perl" ,perl)))
7798 (inputs `(("sdl2" ,sdl2)
7799 ("sdl2-mixer" ,sdl2-mixer)
7800 ("libmodplug" ,libmodplug)
7801 ("libsamplerate" ,libsamplerate)
7802 ("libsndfile" ,libsndfile)
7803 ("libvorbis" ,libvorbis)
7804 ("ncurses" ,ncurses)
7805 ("freetype" ,freetype)
7806 ("libjpeg-turbo" ,libjpeg-turbo)))
7807 (synopsis "Portable Z-machine interpreter (SDL port) for text adventure games")
7808 (description "Frotz is an interpreter for Infocom games and other Z-machine
7809 games in the text adventure/interactive fiction genre. This version of Frotz
7810 using SDL fully supports all these versions of the Z-Machine including the
7811 graphical version 6. Graphics and sound are created through the use of the SDL
7812 libraries. AIFF sound effects and music in MOD and OGG formats are supported
7813 when packaged in Blorb container files or optionally from individual files.")
7814 (home-page "http://frotz.sourceforge.net")
7815 (license license:gpl2+))))
7816
7817 (define-public frozen-bubble
7818 ;; Last official release is very outdated (2010). Use latest commit (2017).
7819 (let ((commit "d6a029110ad6ab9e4960052e175addc98807fb7e")
7820 (revision "1"))
7821 (package
7822 (name "frozen-bubble")
7823 (version (git-version "2.2.1" revision commit))
7824 (source
7825 (origin
7826 (method git-fetch)
7827 (uri (git-reference
7828 (url "https://github.com/kthakore/frozen-bubble")
7829 (commit commit)))
7830 (file-name (git-file-name name version))
7831 (sha256
7832 (base32 "1rfrcym5lf4qac2qdklikb1ywijyxypq298azzxahy461dadl6cx"))))
7833 (build-system perl-build-system)
7834 (arguments
7835 `(#:phases
7836 (modify-phases %standard-phases
7837 ;; Build process needs to create files in the "server"
7838 ;; directory.
7839 (add-after 'unpack 'fix-permissions
7840 (lambda _
7841 (for-each make-file-writable
7842 (find-files "server" "." #:directories? #t))))
7843 ;; By default, build stops at warnings.
7844 (add-after 'unpack 'prevent-build-error
7845 (lambda _
7846 (substitute* "inc/My/Builder.pm"
7847 (("-Werror") ""))
7848 #t))
7849 (add-after 'install 'install-desktop-file-and-icons
7850 (lambda* (#:key outputs #:allow-other-keys)
7851 (let* ((share (string-append (assoc-ref outputs "out") "/share"))
7852 (hicolor (string-append share "/icons/hicolor")))
7853 ;; Create desktop entry.
7854 (make-desktop-entry-file
7855 (string-append share "/applications/" ,name ".desktop")
7856 #:name "Frozen Bubble"
7857 #:comment "Frozen Bubble arcade game"
7858 #:exec ,name
7859 #:icon ,name
7860 #:categories '("Game" "ArcadeGame"))
7861 ;; Add icons.
7862 (with-directory-excursion "share/icons"
7863 (for-each
7864 (lambda (size)
7865 (let* ((dim (string-append size "x" size))
7866 (dir (string-append hicolor "/" dim "/apps")))
7867 (mkdir-p dir)
7868 (copy-file
7869 (string-append "frozen-bubble-icon-" dim ".png")
7870 (string-append dir "/frozen-bubble.png"))))
7871 '("16" "32" "48" "64"))))
7872 #t))
7873 (add-after 'install 'wrap-perl-libs
7874 (lambda* (#:key outputs #:allow-other-keys)
7875 (let ((out (assoc-ref outputs "out"))
7876 (perl5lib (getenv "PERL5LIB")))
7877 (for-each (lambda (prog)
7878 (wrap-program (string-append out "/" prog)
7879 `("PERL5LIB" ":" prefix
7880 (,(string-append perl5lib ":" out
7881 "/lib/perl5/site_perl")))))
7882 (find-files "bin" ".")))
7883 #t)))))
7884 (native-inputs
7885 `(("perl-alien-sdl" ,perl-alien-sdl)
7886 ("perl-capture-tiny" ,perl-capture-tiny)
7887 ("perl-locale-maketext-lexicon" ,perl-locale-maketext-lexicon)
7888 ("perl-module-build" ,perl-module-build)
7889 ("pkg-config" ,pkg-config)))
7890 (inputs
7891 `(("glib" ,glib)
7892 ("perl-compress-bzip2" ,perl-compress-bzip2)
7893 ("perl-file-sharedir" ,perl-file-sharedir)
7894 ("perl-file-slurp" ,perl-file-slurp)
7895 ("perl-file-which" ,perl-file-which)
7896 ("perl-ipc-system-simple" ,perl-ipc-system-simple)
7897 ("perl-sdl" ,perl-sdl)
7898 ("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-pango sdl-ttf)))))
7899 (home-page "http://frozen-bubble.org/")
7900 (synopsis "Puzzle with bubbles")
7901 (description
7902 "Frozen-Bubble is a clone of the popular Puzzle Bobble game, in which
7903 you attempt to shoot bubbles into groups of the same color to cause them to
7904 pop.
7905
7906 Players compete as penguins and must use the arrow keys to aim a colored
7907 bubble at groups of bubbles. The objective is to clear all the bubbles off
7908 the screen before a bubble passes below a line at the bottom.
7909
7910 It features 100 single-player levels, a two-player mode, music and striking
7911 graphics. A level editor is also included to allow players to create and play
7912 their own levels.")
7913 (license license:gpl2))))
7914
7915 (define-public libmanette
7916 (package
7917 (name "libmanette")
7918 (version "0.2.6")
7919 (source (origin
7920 (method url-fetch)
7921 (uri (string-append "mirror://gnome/sources/libmanette/"
7922 (version-major+minor version) "/"
7923 "libmanette-" version ".tar.xz"))
7924 (sha256
7925 (base32
7926 "1b3bcdkk5xd5asq797cch9id8692grsjxrc1ss87vv11m1ck4rb3"))))
7927 (build-system meson-build-system)
7928 (native-inputs
7929 `(("glib" ,glib "bin") ; for glib-compile-resources
7930 ("gobject-introspection" ,gobject-introspection)
7931 ("pkg-config" ,pkg-config)
7932 ("vala" ,vala)))
7933 (inputs
7934 `(("libevdev" ,libevdev)
7935 ("libgudev" ,libgudev)))
7936 (home-page "https://wiki.gnome.org/Apps/Games")
7937 (synopsis "Game controller library")
7938 (description "Libmanette is a small GObject library giving you simple
7939 access to game controllers. It supports the de-facto standard gamepads as
7940 defined by the W3C standard Gamepad specification or as implemented by the SDL
7941 GameController.")
7942 (license license:lgpl2.1+)))
7943
7944 (define-public quadrapassel
7945 (package
7946 (name "quadrapassel")
7947 (version "3.36.05")
7948 (source (origin
7949 (method url-fetch)
7950 (uri (string-append "mirror://gnome/sources/quadrapassel/"
7951 (version-major+minor version) "/"
7952 "quadrapassel-" version ".tar.xz"))
7953 (sha256
7954 (base32
7955 "04abxmimh5npw8rhz1sfi6wxilgc6i1wka9mlnfwp8v1p1cb00cv"))))
7956 (build-system meson-build-system)
7957 (arguments
7958 '(#:glib-or-gtk? #t
7959 #:phases
7960 (modify-phases %standard-phases
7961 (add-after 'unpack 'skip-gtk-update-icon-cache
7962 ;; Don't create 'icon-theme.cache'.
7963 (lambda _
7964 (substitute* "build-aux/meson_post_install.py"
7965 (("gtk-update-icon-cache") (which "true")))
7966 #t)))))
7967 (native-inputs
7968 `(("desktop-file-utils" ,desktop-file-utils) ;for desktop-file-validate
7969 ("gettext" ,gettext-minimal)
7970 ("glib" ,glib "bin") ;for glib-compile-resources
7971 ("itstool" ,itstool)
7972 ("libxml2" ,libxml2) ;for xmllint
7973 ("pkg-config" ,pkg-config)
7974 ("vala" ,vala)))
7975 (inputs
7976 `(("clutter" ,clutter)
7977 ("clutter-gtk" ,clutter-gtk)
7978 ("gsound" ,gsound)
7979 ("gtk+" ,gtk+)
7980 ("libcanberra" ,libcanberra)
7981 ("libmanette" ,libmanette)
7982 ("librsvg" ,librsvg)))
7983 (home-page "https://wiki.gnome.org/Apps/Quadrapassel")
7984 (synopsis "GNOME version of Tetris")
7985 (description "Quadrapassel comes from the classic falling-block game,
7986 Tetris. The goal of the game is to create complete horizontal lines of
7987 blocks, which will disappear. The blocks come in seven different shapes made
7988 from four blocks each: one straight, two L-shaped, one square, and two
7989 S-shaped. The blocks fall from the top center of the screen in a random
7990 order. You rotate the blocks and move them across the screen to drop them in
7991 complete lines. You score by dropping blocks fast and completing lines. As
7992 your score gets higher, you level up and the blocks fall faster.")
7993 (license license:gpl2+)))
7994
7995 (define-public endless-sky
7996 (package
7997 (name "endless-sky")
7998 (version "0.9.12")
7999 (source
8000 (origin
8001 (method git-fetch)
8002 (uri (git-reference
8003 (url "https://github.com/endless-sky/endless-sky")
8004 (commit (string-append "v" version))))
8005 (file-name (git-file-name name version))
8006 (sha256
8007 (base32 "18nkl4s3r5sy3sd9lhbdg9160c7fggklklprx0d5azifc8g6k0wj"))))
8008 (build-system scons-build-system)
8009 (arguments
8010 `(#:scons ,scons-python2
8011 #:scons-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
8012 #:tests? #f ; no tests
8013 #:phases
8014 (modify-phases %standard-phases
8015 (add-after 'unpack 'patch-resource-locations
8016 (lambda* (#:key outputs #:allow-other-keys)
8017 (substitute* "source/Files.cpp"
8018 (("/usr/local/")
8019 (string-append (assoc-ref outputs "out") "/")))
8020 #t))
8021 (add-after 'unpack 'patch-scons
8022 (lambda _
8023 (substitute* "SConstruct"
8024 ;; Keep environmental variables
8025 (("Environment\\(\\)")
8026 "Environment(ENV = os.environ)")
8027 ;; Install into %out/bin
8028 (("games\"") "bin\""))
8029 #t)))))
8030 (inputs
8031 `(("glew" ,glew)
8032 ("libjpeg" ,libjpeg-turbo)
8033 ("libmad" ,libmad)
8034 ("libpng" ,libpng)
8035 ("openal" ,openal)
8036 ("sdl2" ,sdl2)))
8037 (home-page "https://endless-sky.github.io/")
8038 (synopsis "2D space trading and combat game")
8039 (description "Endless Sky is a 2D space trading and combat game. Explore
8040 other star systems. Earn money by trading, carrying passengers, or completing
8041 missions. Use your earnings to buy a better ship or to upgrade the weapons and
8042 engines on your current one. Blow up pirates. Take sides in a civil war. Or
8043 leave human space behind and hope to find friendly aliens whose culture is more
8044 civilized than your own.")
8045 (license (list license:gpl3+
8046 license:cc-by-sa3.0
8047 license:cc-by-sa4.0
8048 license:public-domain))))
8049
8050 (define-public stepmania
8051 (package
8052 (name "stepmania")
8053 (version "5.1.0-b2")
8054 (source
8055 (origin
8056 (method git-fetch)
8057 (uri (git-reference
8058 (url "https://github.com/stepmania/stepmania")
8059 (commit (string-append "v" version))))
8060 (file-name (git-file-name name version))
8061 (sha256
8062 (base32
8063 "0a7y9l7xm510vgnpmj1is7p9m6d6yd0fcaxrjcickz295k5w3rdn"))
8064 (modules '((guix build utils)))
8065 (snippet
8066 '(begin
8067 ;; Remove song files, which are licensed under a non-commercial
8068 ;; clause, and a course pointing to them.
8069 (for-each delete-file-recursively
8070 '("Songs/StepMania 5/Goin' Under"
8071 "Songs/StepMania 5/MechaTribe Assault"
8072 "Songs/StepMania 5/Springtime"))
8073 (for-each delete-file '("Courses/Default/Jupiter.crs"
8074 "Courses/Default/Jupiter.png"))
8075 ;; Unbundle libpng.
8076 (substitute* "extern/CMakeLists.txt"
8077 (("include\\(CMakeProject-png.cmake\\)") ""))
8078 (delete-file-recursively "extern/libpng")
8079 #t))))
8080 (build-system cmake-build-system)
8081 (arguments
8082 `(#:tests? #f ;FIXME: couldn't find how to run tests
8083 #:build-type "Release"
8084 #:out-of-source? #f ;for the 'install-desktop' phase
8085 #:configure-flags
8086 (list "-DWITH_SYSTEM_FFMPEG=1"
8087 ;; SSE instructions are available on Intel systems only.
8088 ,@(if (any (cute string-prefix? <> (or (%current-target-system)
8089 (%current-system)))
8090 '("x86_64" "i686"))
8091 '()
8092 '("-DWITH_SSE2=NO"))
8093 ;; Configuration cannot find GTK2 without the two following
8094 ;; flags.
8095 (string-append "-DGTK2_GDKCONFIG_INCLUDE_DIR="
8096 (assoc-ref %build-inputs "gtk+")
8097 "/lib/gtk-2.0/include")
8098 (string-append "-DGTK2_GLIBCONFIG_INCLUDE_DIR="
8099 (assoc-ref %build-inputs "glib")
8100 "/lib/glib-2.0/include"))
8101 #:phases
8102 (modify-phases %standard-phases
8103 (add-after 'unpack 'ensure-application-files-can-be-found
8104 (lambda* (#:key outputs #:allow-other-keys)
8105 (let ((out (assoc-ref outputs "out")))
8106 (substitute* "src/arch/LoadingWindow/LoadingWindow_Gtk.cpp"
8107 (("RageFileManagerUtil::sDirOfExecutable \\+ \"/\" \\+ \"GtkModule.so\"")
8108 (string-append "\"" out
8109 "/share/stepmania/GtkModule.so\"")))
8110 (substitute* "src/arch/ArchHooks/ArchHooks_Unix.cpp"
8111 (("Root = sDirOfExecutable")
8112 (string-append "Root = \"" out "/share/stepmania/\""))
8113 (("sDirOfExecutable \\+ \"/(Packages|Songs)\"" _ dir)
8114 (string-append "\"" out "/share/stepmania/" dir "\"")))
8115 (substitute* "src/RageFileManager.cpp"
8116 (("RageFileManagerUtil::sDirOfExecutable \\+ \"/\"")
8117 (string-append "\"" out "/share/stepmania/\""))))
8118 #t))
8119 (add-after 'unpack 'fix-install-subdir
8120 ;; Installation would be done in "%out/stepmania-X.Y", but we
8121 ;; prefer the more common layout "%out/share/stepmania".
8122 (lambda _
8123 (substitute* "src/CMakeLists.txt"
8124 (("\"stepmania-.*?\"") "\"share/stepmania\""))
8125 #t))
8126 (add-after 'unpack 'unbundle-libpng
8127 (lambda* (#:key inputs #:allow-other-keys)
8128 (substitute* "src/CMakeLists.txt"
8129 (("\\$\\{SM_EXTERN_DIR\\}/libpng/include")
8130 (string-append (assoc-ref inputs "libpng") "/include")))
8131 #t))
8132 (add-after 'install 'install-executable
8133 (lambda* (#:key outputs #:allow-other-keys)
8134 (let* ((out (assoc-ref outputs "out"))
8135 (bin (string-append out "/bin"))
8136 (exe (string-append out "/share/stepmania/stepmania")))
8137 (mkdir-p bin)
8138 (symlink exe (string-append bin "/stepmania"))
8139 #t)))
8140 (add-after 'install-executable 'install-desktop
8141 (lambda* (#:key outputs #:allow-other-keys)
8142 (let* ((out (assoc-ref outputs "out"))
8143 (share (string-append out "/share"))
8144 (applications (string-append share "/applications"))
8145 (icons (string-append share "/icons")))
8146 (install-file "stepmania.desktop" applications)
8147 (mkdir-p icons)
8148 (copy-recursively "icons" icons)
8149 #t)))
8150 ;; Move documentation in a more usual place, i.e.,
8151 ;; "%out/share/doc/stepmania/".
8152 (add-after 'install-desktop 'install-doc
8153 (lambda* (#:key outputs #:allow-other-keys)
8154 (let* ((out (assoc-ref outputs "out"))
8155 (share (string-append out "/share")))
8156 (with-directory-excursion share
8157 (mkdir-p "doc")
8158 (symlink "../stepmania/Docs" "doc/stepmania"))
8159 #t))))))
8160 (native-inputs
8161 `(("pkg-config" ,pkg-config)
8162 ("yasm" ,yasm)))
8163 (inputs
8164 `(("alsa-lib" ,alsa-lib)
8165 ;; Per upstream, StepMania is only guaranteed to work with a very
8166 ;; specific FFmpeg version, which is included in the repository as
8167 ;; a Git submodule. This particular version requirement usually
8168 ;; changes every few years.
8169 ("ffmpeg" ,ffmpeg-for-stepmania)
8170 ("glib" ,glib)
8171 ("glew" ,glew)
8172 ("gtk+" ,gtk+-2)
8173 ("jsoncpp" ,jsoncpp)
8174 ("libpng" ,libpng)
8175 ("libjpeg" ,libjpeg-turbo)
8176 ("libmad" ,libmad)
8177 ("libogg" ,libogg)
8178 ("libva" ,libva)
8179 ("libvorbis" ,libvorbis)
8180 ("libxinerama" ,libxinerama)
8181 ("libxrandr" ,libxrandr)
8182 ("mesa" ,mesa)
8183 ("pcre" ,pcre)
8184 ("pulseaudio" ,pulseaudio)
8185 ("sdl" ,sdl2)
8186 ("udev" ,eudev)
8187 ("zlib" ,zlib)))
8188 (synopsis "Advanced rhythm game designed for both home and arcade use")
8189 (description "StepMania is a dance and rhythm game. It features 3D
8190 graphics, keyboard and dance pad support, and an editor for creating your own
8191 steps.
8192
8193 This package provides the core application, but no song is shipped. You need
8194 to download and install them in @file{$HOME/.stepmania-X.Y/Songs} directory.")
8195 (home-page "https://www.stepmania.com")
8196 (license license:expat)))
8197
8198 (define-public btanks
8199 (package
8200 (name "btanks")
8201 (version "0.9.8083")
8202 (source
8203 (origin
8204 (method url-fetch)
8205 (uri (string-append "mirror://sourceforge/btanks/btanks-source/"
8206 "btanks-" version ".tar.bz2"))
8207 (sha256
8208 (base32
8209 "0ha35kxc8xlbg74wsrbapfgxvcrwy6psjkqi7c6adxs55dmcxliz"))))
8210 (build-system scons-build-system)
8211 (arguments
8212 `(#:tests? #f ; there are none
8213 #:scons ,scons-python2
8214 #:scons-flags (list (string-append "prefix=" (assoc-ref %outputs "out")))
8215 #:phases
8216 (modify-phases %standard-phases
8217 (add-after 'unpack 'replace-removed-scons-syntax
8218 (lambda _
8219 (substitute* "SConstruct"
8220 (("Options") "Variables")
8221 (("opts.Add\\(BoolOption.*") "opts.Add('gcc_visibility', 'gcc visibility', 'true')")
8222 (("opts.Add\\(EnumOption.*") "opts.Add('mode', 'build mode', 'release')"))
8223 #t))
8224 (add-after 'set-paths 'set-sdl-paths
8225 (lambda* (#:key inputs #:allow-other-keys)
8226 (setenv "CPATH"
8227 (string-append (assoc-ref inputs "sdl")
8228 "/include/SDL:"
8229 (or (getenv "CPATH") "")))
8230 #t))
8231 (add-after 'unpack 'fix-compilation-errors
8232 (lambda _
8233 (substitute* "mrt/base_file.h"
8234 (("#include <string>" m)
8235 (string-append m "\n#include <sys/types.h>")))
8236 (substitute* '("engine/sl08/sl08.h"
8237 "engine/sl08/sl08.py")
8238 (("signal = NULL") "signal = 0")
8239 (("object\\(NULL\\)") "object(0)")
8240 (("func\\(NULL\\)") "func(0)")
8241 ((" connect\\(signal_ref\\)")
8242 " this->connect(signal_ref)"))
8243 (substitute* "math/range_list.h"
8244 ((" lower_bound\\(value\\)")
8245 " this->lower_bound(value)")
8246 ((" erase\\(i\\)")
8247 " this->erase(i)"))
8248 (substitute* "clunk/source.cpp"
8249 (("using namespace clunk" m)
8250 (string-append "# define pow10f(x) exp10f(x)\n" m)))
8251 #t))
8252 (add-after 'unpack 'find-lua
8253 (lambda _
8254 (substitute* "engine/SConscript"
8255 (("lua5.1") "lua-5.1")
8256 (("bt_libs.append\\(lua\\)")
8257 "bt_libs.append(\"lua\")"))
8258 #t)))))
8259 (inputs
8260 `(("expat" ,expat)
8261 ("glu" ,glu)
8262 ("libsmpeg" ,libsmpeg-with-sdl1)
8263 ("libvorbis" ,libvorbis)
8264 ("lua51" ,lua-5.1)
8265 ("sdl" ,(sdl-union (list sdl
8266 sdl-mixer
8267 sdl-image
8268 sdl-ttf)))
8269 ("zlib" ,zlib)))
8270 (native-inputs
8271 `(("pkg-config" ,pkg-config)
8272 ("zip" ,zip)))
8273 (home-page "http://btanks.sourceforge.net")
8274 (synopsis "Multiplayer tank battle game")
8275 (description "Battle Tanks (also known as \"btanks\") is a funny battle
8276 game, where you can choose one of three vehicles and eliminate your enemy
8277 using the whole arsenal of weapons. It has original cartoon-like graphics and
8278 cool music, it’s fun and dynamic, it has several network modes for deathmatch
8279 and cooperative.")
8280 ;; Some parts (e.g. mrt/b64.cpp) are LGPLv2.1+, but the whole package is
8281 ;; released under GPLv2 or later. It comes with extra exceptions for the
8282 ;; developers.
8283 (license (list license:gpl2+ license:lgpl2.1+))))
8284
8285 (define-public slimevolley
8286 (package
8287 (name "slimevolley")
8288 (version "2.4.2")
8289 (source
8290 (origin
8291 (method url-fetch)
8292 (uri (string-append "https://download.tuxfamily.org/slime/"
8293 "slimevolley_" version ".tar.gz"))
8294 (sha256
8295 (base32 "1pi60zjpx95mfdkrbwf4cbzy5lv4v5qrljvgck46qca78i9g9g46"))))
8296 (build-system cmake-build-system)
8297 (arguments
8298 `(#:tests? #f ;no test
8299 ;; Work around build failure: "error adding symbols: DSO
8300 ;; missing from command line".
8301 #:configure-flags (list "-DCMAKE_EXE_LINKER_FLAGS=-lm")))
8302 (native-inputs
8303 `(("gettext" ,gettext-minimal)))
8304 (inputs
8305 `(("sdl" ,(sdl-union (list sdl sdl-image sdl-net sdl-ttf)))))
8306 (home-page "https://slime.tuxfamily.org/")
8307 (synopsis "Unrealistic 2D volleyball simulation")
8308 (description
8309 "Slime Volley is a 2D arcade-oriented volleyball simulation, in
8310 the spirit of some Java games of the same name.
8311
8312 Two teams, 1-3 players each, try to be the first to get 10 points.
8313 This happens when the one ball touches the floor on the other side of
8314 the net. There can be 1 to 8 balls in game. Once one ball touches
8315 the ground, the set ends and all balls are served again.")
8316 (license license:gpl3+)))
8317
8318 (define-public slingshot
8319 (package
8320 (name "slingshot")
8321 (version "0.9")
8322 (source
8323 (origin
8324 (method git-fetch)
8325 (uri (git-reference
8326 (url "https://github.com/ryanakca/slingshot")
8327 (commit version)))
8328 (file-name (git-file-name name version))
8329 (sha256
8330 (base32
8331 "19m8b6nsi786bc6gmkp185mwri3r5y249gjmqd5qsc23nnfhgrs1"))))
8332 (build-system python-build-system)
8333 (arguments
8334 `(#:python ,python-2))
8335 (inputs
8336 `(("python-pygame" ,python2-pygame)))
8337 (home-page "https://github.com/ryanakca/slingshot")
8338 (synopsis "Simple 2D shooting strategy game set in space")
8339 (description "Slingshot is a two-dimensional strategy game where two
8340 players attempt to shoot one another through a section of space populated by
8341 planets. The main feature of the game is that the shots, once fired, are
8342 affected by the gravity of the planets.")
8343 (license license:gpl2+)))
8344
8345 (define-public 4dtris
8346 (package
8347 (name "4dtris")
8348 (version "0.4.3")
8349 (source
8350 (origin
8351 (method url-fetch)
8352 (uri (string-append "https://launchpad.net/4dtris/"
8353 (version-major+minor version)
8354 "/" version "/+download/4dtris_"
8355 version ".orig.tar.gz"))
8356 (sha256
8357 (base32
8358 "1nfkhcm0l89jyw8yr65na97g4l385zhjf7whkyg47c3v5sdqq2g7"))))
8359 (build-system gnu-build-system)
8360 (arguments
8361 `(#:phases
8362 (modify-phases %standard-phases
8363 (add-after 'unpack 'fix-install-directories
8364 (lambda* (#:key outputs #:allow-other-keys)
8365 (let ((out (assoc-ref outputs "out")))
8366 (substitute* "Makefile.in"
8367 (("bindir = /usr/games")
8368 (string-append "bindir = " out "/bin"))
8369 (("/usr/share/applications")
8370 (string-append out "/share/applications"))
8371 (("/usr/share/games/4dtris")
8372 (string-append out "/share/4dtris"))))
8373 #t))
8374 (add-after 'set-paths 'set-sdl-paths
8375 (lambda* (#:key inputs #:allow-other-keys)
8376 (setenv "CPATH"
8377 (string-append (assoc-ref inputs "sdl")
8378 "/include/SDL:"
8379 (or (getenv "CPATH") "")))
8380 #t)))))
8381 (inputs
8382 `(("fontconfig" ,fontconfig)
8383 ("freeglut" ,freeglut)
8384 ("sdl" ,(sdl-union (list sdl sdl-ttf)))))
8385 (home-page "https://launchpad.net/4dtris/")
8386 (synopsis "4D Tetris")
8387 (description "4D-TRIS is an alteration of the well-known Tetris game. The
8388 game field is extended to 4D space, which has to filled up by the gamer with
8389 4D hyper cubes.")
8390 (license license:gpl3)))
8391
8392 (define-public arx-libertatis
8393 (package
8394 (name "arx-libertatis")
8395 (version "1.1.2")
8396 (source
8397 (origin
8398 (method url-fetch)
8399 (uri (string-append "http://arx-libertatis.org/files/arx-libertatis-"
8400 version ".tar.xz"))
8401 (sha256
8402 (base32
8403 "0hjfxlsmp8wwqr06snv2dlly2s79ra0d9aw49gkp6rn8m50b9bc2"))))
8404 (build-system cmake-build-system)
8405 (outputs '("out" "installer"))
8406 (arguments
8407 '(#:tests? #f ; No tests.
8408 #:phases
8409 (modify-phases %standard-phases
8410 (add-after 'unpack 'fix-install-helper-paths
8411 (lambda* (#:key inputs #:allow-other-keys)
8412 (let ((p7zip (assoc-ref inputs "p7zip"))
8413 (innoextract (assoc-ref inputs "innoextract"))
8414 (wget (assoc-ref inputs "wget"))
8415 (zenity (assoc-ref inputs "zenity")))
8416 (substitute* "scripts/arx-install-data"
8417 (("have innoextract")
8418 (string-append "have " innoextract "/bin/innoextract"))
8419 (("then innoextract")
8420 (string-append "then " innoextract "/bin/innoextract"))
8421 (("else innoextract")
8422 (string-append "else " innoextract "/bin/innoextract"))
8423 (("for _extract_zip_sz in 7za 7z")
8424 (string-append "for _extract_zip_sz in " p7zip "/bin/7za"))
8425 (("else if have 7z")
8426 (string-append "else if have " p7zip "/bin/7za"))
8427 (("7z x -tiso")
8428 (string-append p7zip "/bin/7z x -tiso"))
8429 (("if have wget")
8430 (string-append "if have " wget "/bin/wget"))
8431 (("wget -O")
8432 (string-append wget "/bin/wget -O"))
8433 (("for backend in \\$preferred zenity")
8434 (string-append "for backend in $preferred " zenity "/bin/zenity"))
8435 (("zenity +--title")
8436 (string-append zenity "/bin/zenity --title"))
8437 (("^zenity\\)")
8438 (string-append zenity "/bin/zenity)"))))
8439 #t))
8440 (add-after 'install 'move-installer
8441 (lambda* (#:key outputs #:allow-other-keys)
8442 (let ((out (assoc-ref outputs "out"))
8443 (installer (assoc-ref outputs "installer")))
8444 (mkdir-p (string-append installer "/bin"))
8445 (rename-file (string-append out "/bin/arx-install-data")
8446 (string-append installer "/bin/arx-install-data"))))))))
8447 (inputs
8448 `(("sdl" ,sdl) ; Switch to sdl2 in >1.1.2.
8449 ("mesa" ,mesa) ; Switch to libepoxy in >1.1.2.
8450 ("glew" ,glew)
8451 ("openal" ,openal)
8452 ("zlib" ,zlib)
8453 ("boost" ,boost)
8454 ("glm" ,glm)
8455 ("freetype" ,freetype)
8456 ;; The following are only needed by the arx-install-data script.
8457 ("p7zip" ,p7zip) ; Install-helper uses it to extract ISO and .cab archives.
8458 ("zenity" ,zenity) ; GUI for install-helper.
8459 ("wget" ,wget) ; Used by the install-helper to download the patch.
8460 ;; The install-helper needs it to extract the patch.
8461 ("innoextract" ,innoextract)))
8462 (home-page "https://arx-libertatis.org/")
8463 (synopsis "Port of Arx Fatalis, a first-person role-playing game")
8464 (description "Arx Libertatis is a cross-platform port of Arx Fatalis, a 2002
8465 first-person role-playing game / dungeon crawler developed by Arkane Studios.
8466 This port however does not include the game data, so you need to obtain a copy
8467 of the original Arx Fatalis or its demo to play Arx Libertatis. Arx Fatalis
8468 features crafting, melee and ranged combat, as well as a unique casting system
8469 where the player draws runes in real time to effect the desired spell.")
8470 (license license:gpl3+)))
8471
8472 (define-public edgar
8473 (package
8474 (name "edgar")
8475 (version "1.33")
8476 (source
8477 (origin
8478 (method url-fetch)
8479 (uri
8480 (string-append "https://github.com/riksweeney/edgar/releases/download/"
8481 version "/edgar-" version "-1.tar.gz"))
8482 (sha256
8483 (base32 "1mbx7dvizdca4g1blcv3bdh6yxd13k47rkya4rdzg0nvvz24m175"))))
8484 (build-system gnu-build-system)
8485 (arguments '(#:tests? #f ; there are no tests
8486 #:make-flags
8487 (list "CC=gcc"
8488 (string-append "PREFIX=" (assoc-ref %outputs "out"))
8489 (string-append "BIN_DIR=" (assoc-ref %outputs "out") "/bin/"))
8490 #:phases
8491 (modify-phases %standard-phases
8492 (delete 'configure)
8493 (add-before 'build 'fix-env
8494 (lambda* (#:key inputs #:allow-other-keys)
8495 (setenv "CPATH"
8496 (string-append (assoc-ref inputs "sdl2-union")
8497 "/include/SDL2:"
8498 (or (getenv "CPATH") "")))
8499 #t)))))
8500 (inputs
8501 `(("sdl2-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))
8502 ("zlib" ,zlib)))
8503 (native-inputs
8504 `(("pkg-config" ,pkg-config)
8505 ("autoconf" ,autoconf)
8506 ("automake" ,automake)
8507 ("gnu-gettext" ,gettext-minimal)
8508 ("libtool" ,libtool)
8509 ("which" ,which)))
8510 (synopsis "2d action platformer game")
8511 (description "The Legend of Edgar is a 2D platform game with a persistent world.
8512 When Edgar's father fails to return home after venturing out one dark and stormy night,
8513 Edgar fears the worst: he has been captured by the evil sorcerer who lives in
8514 a fortress beyond the forbidden swamp.")
8515 (home-page "https://www.parallelrealities.co.uk/games/edgar/")
8516 (license license:gpl2+)))
8517
8518 (define-public openclonk
8519 (package
8520 (name "openclonk")
8521 (version "8.1")
8522 (source (origin
8523 (method url-fetch)
8524 (uri (string-append
8525 "https://www.openclonk.org/builds/release/" version "/"
8526 "openclonk-" version "-src.tar.bz2"))
8527 (sha256
8528 (base32
8529 "0imkqjp8lww5p0cnqf4k4mb2v682mnsas63qmiz17rspakr7fxik"))))
8530 (build-system cmake-build-system)
8531 (arguments
8532 `(#:configure-flags '("-DAudio_TK=OpenAL")
8533 #:test-target "tests"
8534 #:phases
8535 (modify-phases %standard-phases
8536 (add-after 'unpack 'prepare-gmock
8537 (lambda* (#:key inputs #:allow-other-keys)
8538 (mkdir "gmock")
8539 (copy-recursively (assoc-ref inputs "googlemock") "gmock")
8540 (substitute* "tests/CMakeLists.txt"
8541 (("/usr/src/gmock")
8542 (string-append (getcwd) "/gmock/googlemock"))
8543 (("/usr/src/gtest")
8544 (string-append (getcwd) "/gmock/googletest"))
8545 (("PATH_SUFFIXES \"src\" \"gtest\"")
8546 "PATH_SUFFIXES \"src\""))
8547 #t))
8548 (add-after 'unpack 'adjust-backward-cpp-includes
8549 (lambda _
8550 ;; XXX: The bundled backward-cpp exports a CMake "interface"
8551 ;; that includes external libraries such as libdl from glibc.
8552 ;; By default, CMake interface includes are treated as "system
8553 ;; headers", and GCC behaves poorly when glibc is passed as a
8554 ;; system header (causing #include_next failures).
8555
8556 ;; Here we prevent targets that consume the Backward::Backward
8557 ;; interface from treating it as "system includes".
8558 (substitute* "CMakeLists.txt"
8559 (("target_link_libraries\\((.+) Backward::Backward\\)" all target)
8560 (string-append "set_property(TARGET " target " PROPERTY "
8561 "NO_SYSTEM_FROM_IMPORTED true)\n"
8562 all)))
8563 #t))
8564 (add-after 'unpack 'add-libiberty
8565 ;; Build fails upon linking executables without this.
8566 (lambda _
8567 (substitute* "thirdparty/backward-cpp/BackwardConfig.cmake"
8568 (("set\\(LIBBFD_LIBRARIES (.*?)\\)" _ libraries)
8569 (string-append "set(LIBBFD_LIBRARIES " libraries " iberty)")))
8570 #t))
8571 (add-after 'add-libiberty 'lax-freealut-requirement
8572 ;; TODO: We provide freealut 1.1.0, but pkg-config somehow detects
8573 ;; it as 1.0.1. Force minimal version.
8574 (lambda _
8575 (substitute* "cmake/FindAudio.cmake"
8576 (("freealut>=1.1.0") "freealut>=1.0.1"))
8577 #t))
8578 (add-after 'lax-freealut-requirement 'fix-directories
8579 ;; Prefer "$out/share/openclonk" over
8580 ;; "$out/share/games/openclonk". Also install "openclonk"
8581 ;; binary in "bin/", not "games/".
8582 (lambda _
8583 (substitute* "CMakeLists.txt"
8584 (("share/games/openclonk") "share/openclonk")
8585 (("TARGETS openclonk DESTINATION games")
8586 "TARGETS openclonk DESTINATION bin"))
8587 #t)))))
8588 (native-inputs
8589 `(("googlemock" ,(package-source googletest))
8590 ("googletest" ,googletest)
8591 ("pkg-config" ,pkg-config)))
8592 (inputs
8593 `(("freealut" ,freealut)
8594 ("freetype" ,freetype)
8595 ("glew" ,glew)
8596 ("libiberty" ,libiberty)
8597 ("libjpeg" ,libjpeg-turbo)
8598 ("libogg" ,libogg)
8599 ("libpng" ,libpng)
8600 ("libvorbis" ,libvorbis)
8601 ("libxrandr" ,libxrandr)
8602 ("mesa" ,mesa)
8603 ("miniupnpc" ,miniupnpc)
8604 ("openal" ,openal)
8605 ("qtbase" ,qtbase)
8606 ("readline" ,readline)
8607 ("sdl" ,sdl2)
8608 ("tinyxml" ,tinyxml)
8609 ("zlib" ,zlib)))
8610 (home-page "https://www.openclonk.org/")
8611 (synopsis
8612 "Multiplayer action game where you control small and nimble humanoids")
8613 (description "OpenClonk is a multiplayer action/tactics/skill game. It is
8614 often referred to as a mixture of The Settlers and Worms. In a simple 2D
8615 antfarm-style landscape, the player controls a crew of Clonks, small but
8616 robust humanoid beings. The game encourages free play but the normal goal is
8617 to either exploit valuable resources from the earth by building a mine or
8618 fight each other on an arena-like map.")
8619 ;; Software as a whole is licensed under ISC, artwork under CC-BY.
8620 (license (list license:isc license:cc-by3.0))))
8621
8622 (define-public flare-engine
8623 (package
8624 (name "flare-engine")
8625 (version "1.11")
8626 (source (origin
8627 (method git-fetch)
8628 (uri (git-reference
8629 (url "https://github.com/flareteam/flare-engine")
8630 (commit (string-append "v" version))))
8631 (file-name (git-file-name name version))
8632 (sha256
8633 (base32
8634 "1mqr1s72p5bdh4kq2a8hg72dk8lwnddicjnd2cdp1sbfa9lmjym8"))))
8635 (build-system cmake-build-system)
8636 (arguments
8637 `(#:tests? #f ;no test
8638 #:configure-flags '("-DBINDIR=bin" "-DDATADIR=share/flare")))
8639 (inputs
8640 `(("hicolor-icon-theme" ,hicolor-icon-theme)
8641 ("python" ,python-wrapper)
8642 ("sdl" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
8643 (home-page "http://www.flarerpg.org/")
8644 (synopsis "Action Roleplaying Engine")
8645 (description "Flare (Free Libre Action Roleplaying Engine) is a simple
8646 game engine built to handle a very specific kind of game: single-player 2D
8647 action RPGs.")
8648 (license license:gpl3+)))
8649
8650 (define-public flare-game
8651 (package
8652 (name "flare-game")
8653 (version "1.11")
8654 (source (origin
8655 (method git-fetch)
8656 (uri (git-reference
8657 (url "https://github.com/flareteam/flare-game")
8658 (commit (string-append "v" version))))
8659 (file-name (git-file-name name version))
8660 (sha256
8661 (base32
8662 "0bd5g7sd89a9176ilr408hdqzdfv4j7wj0idd685c1n6s01c3h6p"))))
8663 (build-system cmake-build-system)
8664 (arguments
8665 `(#:tests? #f ;no test
8666 #:configure-flags '("-DDATADIR=share/flare")
8667 #:phases
8668 (modify-phases %standard-phases
8669 ;; Flare expects the mods to be located in the same folder.
8670 ;; Yet, "default" mod is in the engine, whereas the others
8671 ;; are in the current package. Merge everything here with
8672 ;; a symlink.
8673 (add-after 'install 'add-default-mod
8674 (lambda* (#:key inputs outputs #:allow-other-keys)
8675 (let* ((out (assoc-ref outputs "out"))
8676 (mods (string-append out "/share/flare/mods")))
8677 (with-directory-excursion mods
8678 (symlink (string-append (assoc-ref inputs "flare-engine")
8679 "/share/flare/mods/default")
8680 "default")))
8681 #t))
8682 (add-after 'install 'install-executable
8683 ;; The package only provides assets for the game, the
8684 ;; executable coming from "flare-engine". Since more than
8685 ;; one game may use the engine, we create a new executable,
8686 ;; "flare-game", which launches the engine with appropriate
8687 ;; parameters.
8688 (lambda* (#:key inputs outputs #:allow-other-keys)
8689 (let* ((out (assoc-ref outputs "out"))
8690 (bash (string-append (assoc-ref inputs "bash")
8691 "/bin/bash"))
8692 (flare (string-append (assoc-ref inputs "flare-engine")
8693 "/bin/flare"))
8694 (script (string-append out "/bin/flare-game")))
8695 (mkdir-p (dirname script))
8696 (call-with-output-file script
8697 (lambda (port)
8698 (format port
8699 "#!~a
8700 exec ~a --data-path=~a/share/flare --mods=empyrean_campaign~%"
8701 bash
8702 flare
8703 out)))
8704 (chmod script #o755))
8705 #t)))))
8706 (inputs
8707 `(("flare-engine" ,flare-engine)))
8708 (home-page "http://www.flarerpg.org/")
8709 (synopsis "Fantasy action RPG using the FLARE engine")
8710 (description "Flare is a single-player 2D action RPG with
8711 fast-paced action and a dark fantasy style.")
8712 (license license:cc-by-sa3.0)))
8713
8714 (define-public meritous
8715 (package
8716 (name "meritous")
8717 (version "1.5")
8718 (source (origin
8719 (method git-fetch)
8720 (uri (git-reference
8721 (url "https://gitlab.com/meritous/meritous.git")
8722 (commit (string-append "v" version))))
8723 (file-name (git-file-name name version))
8724 (sha256
8725 (base32
8726 "0n5jm4g0arjllgqmd2crv8h02i6hs3hlh1zyc7ng7yfpg1mbd8p8"))))
8727 (build-system gnu-build-system)
8728 (arguments
8729 `(#:tests? #f ;no test
8730 #:make-flags
8731 (list "CC=gcc"
8732 (string-append "prefix=" (assoc-ref %outputs "out")))
8733 #:phases
8734 (modify-phases %standard-phases
8735 (delete 'configure)
8736 (add-after 'unpack 'fix-sdl-path
8737 ;; XXX: For some reason, `sdl-config' reports stand-alone SDL
8738 ;; directory, not SDL-union provided as an input to the package.
8739 ;; We force the latter with "--prefix=" option.
8740 (lambda* (#:key inputs #:allow-other-keys)
8741 (substitute* "Makefile"
8742 (("sdl-config" command)
8743 (string-append command " --prefix=" (assoc-ref inputs "sdl"))))
8744 #t))
8745 (add-after 'unpack 'fix-crash
8746 ;; XXX: Songs are not present in the repository, due to licensing
8747 ;; issues. Yet, the game tries to load them, and, since it cannot
8748 ;; find them, crashes. Users cannot add them back, the store being
8749 ;; read-only, so we turn off background music altogether.
8750 (lambda _
8751 (substitute* "src/audio.c"
8752 (("PlayBackgroundMusic\\(new_track\\);" all)
8753 (string-append "// " all)))
8754 #t)))))
8755 (native-inputs
8756 `(("intltool" ,intltool)))
8757 (inputs
8758 `(("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer)))
8759 ("zlib" ,zlib)))
8760 (home-page "https://gitlab.com/meritous/meritous")
8761 (synopsis "Action-adventure dungeon crawl game")
8762 (description "Far below the surface of the planet is a place of limitless
8763 power. Those that seek to control such a utopia will soon bring an end to
8764 themselves. Seeking an end to the troubles that plague him, PSI user Merit
8765 journeys into the hallowed Orcus Dome in search of answers.
8766
8767 Meritous is a action-adventure game with simple controls but a challenge to
8768 find a balance of power versus recovery time during real-time battles. Set in
8769 a procedurally generated world, the player can explore thousands of rooms in
8770 search of powerful artifacts, tools to help them, and to eventually free the
8771 Orcus Dome from evil.")
8772 (license license:gpl3+)))
8773
8774 (define-public marble-marcher
8775 (let ((commit "e580460a0c3826f9b28ab404607942a8ecb625d7")
8776 (revision "1"))
8777 (package
8778 (name "marble-marcher")
8779 (version (git-version "0" revision commit))
8780 (source (origin
8781 (method git-fetch)
8782 (uri (git-reference
8783 (url "https://github.com/HackerPoet/MarbleMarcher")
8784 (commit commit)))
8785 (file-name (git-file-name name version))
8786 (sha256
8787 (base32
8788 "0jjv832hl1v170n6gryp2sr3lgqndi9ab841qvgqk68bks8701mx"))))
8789 (build-system cmake-build-system)
8790 (arguments
8791 `(#:tests? #f ; there are none
8792 #:phases
8793 (modify-phases %standard-phases
8794 (add-after 'unpack 'embed-asset-directory
8795 (lambda* (#:key outputs #:allow-other-keys)
8796 (let ((assets (string-append (assoc-ref outputs "out")
8797 "/share/marble-marcher/assets/")))
8798 ;; Some of the files we're patching are
8799 ;; ISO-8859-1-encoded, so choose it as the default
8800 ;; encoding so the byte encoding is preserved.
8801 (with-fluids ((%default-port-encoding #f))
8802 (substitute* "src/Resource.rc"
8803 (("../assets/icon.ico")
8804 (string-append assets "icon.ico")))
8805 (substitute* "src/Res.h"
8806 (("assets/") assets))))
8807 #t))
8808 (replace 'install
8809 (lambda* (#:key outputs #:allow-other-keys)
8810 (let* ((out (assoc-ref outputs "out"))
8811 (assets (string-append out "/share/marble-marcher/assets"))
8812 (bin (string-append out "/bin/")))
8813 (mkdir-p bin)
8814 (mkdir-p assets)
8815 (copy-recursively "../source/assets" assets)
8816 (install-file "MarbleMarcher" bin))
8817 #t)))))
8818 (inputs
8819 `(("eigen" ,eigen)
8820 ("mesa" ,mesa)
8821 ("sfml" ,sfml)))
8822 (native-inputs
8823 `(("pkg-config" ,pkg-config)))
8824 (home-page "https://codeparade.itch.io/marblemarcher")
8825 (synopsis "Guide a marble across fractal landscapes")
8826 (description "Marble Marcher is a video game that uses a fractal physics
8827 engine and fully procedural rendering to produce beautiful and unique
8828 gameplay. The game is played on the surface of evolving fractals. The goal
8829 of the game is to get your marble to the flag as quickly as possible. But be
8830 careful not to fall off the level or get crushed by the fractal! There are 24
8831 levels to unlock.")
8832 ;; Code is under GPLv2+, assets are under CC-BY-SA 3.0 and OFL 1.1.
8833 (license (list license:gpl2+
8834 license:silofl1.1
8835 license:cc-by-sa3.0)))))
8836
8837 ;; This must be updated together with flightgear.
8838 (define simgear
8839 (package
8840 (name "simgear")
8841 (version "2018.3.5")
8842 (source
8843 (origin
8844 (method url-fetch)
8845 (uri (string-append "mirror://sourceforge/flightgear/release-"
8846 (version-major+minor version) "/"
8847 "simgear-" version ".tar.bz2"))
8848 (sha256
8849 (base32 "1vkqm66r1205k3hdjmx5wmx5kvmsb0dgfzrs8n5gqnxj8szs42dl"))))
8850 (build-system cmake-build-system)
8851 (arguments
8852 `(#:phases
8853 (modify-phases %standard-phases
8854 (replace 'check
8855 (lambda _
8856 ;; Skip tests that require internet access.
8857 (invoke "ctest" "-E" "(http|dns)"))))))
8858 (inputs
8859 `(("boost" ,boost-for-mysql) ; fails with 1.69
8860 ("curl" ,curl)
8861 ("expat" ,expat)
8862 ("mesa" ,mesa)
8863 ("openal" ,openal)
8864 ("openscenegraph" ,openscenegraph-3.4)
8865 ("zlib" ,zlib)))
8866 (home-page "https://home.flightgear.org/")
8867 (synopsis "Libraries for 3D simulations and games")
8868 (description "SimGear is a set of libraries designed to be used as
8869 building blocks for quickly assembling 3D simulations, games, and
8870 visualization applications. SimGear is developed by the FlightGear project
8871 and also provides the base for the FlightGear Flight Simulator.")
8872 (license license:lgpl2.0+)))
8873
8874 (define-public flightgear
8875 (package
8876 (name "flightgear")
8877 (version (package-version simgear))
8878 (source
8879 (origin
8880 (method url-fetch)
8881 (uri (string-append "mirror://sourceforge/flightgear/release-"
8882 (version-major+minor version) "/"
8883 "flightgear-" version ".tar.bz2"))
8884 (sha256
8885 (base32 "0ya3vb539kwi1qrifqhsj5j3k4w6s06hrllp2vdzxf6id7cgf0hc"))
8886 (modules '((guix build utils)))
8887 (snippet
8888 '(begin
8889 ;; There are some bundled libraries.
8890 (for-each delete-file-recursively
8891 '("3rdparty/sqlite3/"))
8892 #t))))
8893 (build-system cmake-build-system)
8894 (arguments
8895 `(#:configure-flags
8896 (list "-DSYSTEM_SQLITE=ON"
8897 (string-append "-DFG_DATA_DIR="
8898 (assoc-ref %outputs "out")
8899 "/share/flightgear"))
8900 ;; TODO: test cannot be run because the "run_test_suite" executable
8901 ;; does not seem to be built.
8902 #:tests? #f
8903 #:phases
8904 (modify-phases %standard-phases
8905 (add-after 'install 'wrap-executable
8906 (lambda* (#:key inputs outputs #:allow-other-keys)
8907 (let ((out (assoc-ref outputs "out")))
8908 (wrap-program (string-append out "/bin/fgfs")
8909 `("QT_PLUGIN_PATH" ":" prefix
8910 ,(map (lambda (label)
8911 (string-append (assoc-ref inputs label)
8912 "/lib/qt5/plugins"))
8913 '("qtbase" "qtdeclarative" "qtsvg")))
8914 `("QML2_IMPORT_PATH" ":" prefix
8915 ,(map (lambda (label)
8916 (string-append (assoc-ref inputs label)
8917 "/lib/qt5/qml"))
8918 '("qtdeclarative" "qtsvg"))))
8919 #t)))
8920 (add-after 'install 'install-data
8921 (lambda* (#:key inputs outputs #:allow-other-keys)
8922 (let ((share (string-append (assoc-ref outputs "out") "/share/flightgear")))
8923 (mkdir-p share)
8924 (with-directory-excursion share
8925 (invoke "tar" "xf" (assoc-ref inputs "flightgear-data")
8926 "--strip-components=1")))
8927 #t)))))
8928 (inputs
8929 `(("boost" ,boost-for-mysql) ; same as simgear
8930 ("dbus" ,dbus)
8931 ("eudev" ,eudev)
8932 ("freeglut" ,freeglut)
8933 ("freetype" ,freetype)
8934 ("glew" ,glew)
8935 ("libpng" ,libpng)
8936 ("openal" ,openal)
8937 ("openscenegraph" ,openscenegraph-3.4)
8938 ("plib" ,plib)
8939 ("qtbase" ,qtbase)
8940 ("qtdeclarative" ,qtdeclarative)
8941 ("qtsvg" ,qtsvg)
8942 ("simgear" ,simgear)
8943 ("speexdsp" ,speexdsp)
8944 ("sqlite" ,sqlite)
8945 ("zlib" ,zlib)))
8946 (native-inputs
8947 `(("cppunit" ,cppunit)
8948 ("pkg-config" ,pkg-config)
8949 ("qttools" ,qttools)
8950 ("flightgear-data"
8951 ,(origin
8952 (method url-fetch)
8953 (uri (string-append "mirror://sourceforge/flightgear/release-"
8954 (version-major+minor version) "/"
8955 "FlightGear-" version "-data.tar.bz2"))
8956 (sha256
8957 (base32
8958 "04fv9za5zlyxlyfh6jx78y42l3jazvzl9dq2y6rzxqlcc9g5swhk"))))))
8959 (home-page "https://home.flightgear.org/")
8960 (synopsis "Flight simulator")
8961 (description "The goal of the FlightGear project is to create a
8962 sophisticated flight simulator framework for use in research or academic
8963 environments, pilot training, as an industry engineering tool, for DIY-ers to
8964 pursue their favorite interesting flight simulation idea, and last but
8965 certainly not least as a fun, realistic, and challenging desktop flight
8966 simulator.")
8967 (license license:gpl2+)))
8968
8969 (define-public jumpnbump
8970 (package
8971 (name "jumpnbump")
8972 (version "1.61")
8973 (source (origin
8974 (method git-fetch)
8975 (uri (git-reference
8976 (url "https://gitlab.com/LibreGames/jumpnbump.git")
8977 (commit version)))
8978 (file-name (git-file-name name version))
8979 (sha256
8980 (base32
8981 "12lwl5sl5n009nb83r8l4lakb9286csqdf1ynpmwwydy17giqsdp"))))
8982 (build-system gnu-build-system)
8983 (arguments
8984 `(#:make-flags
8985 (list "CC=gcc"
8986 (string-append "PREFIX=" (assoc-ref %outputs "out")))
8987 #:tests? #f ;no test
8988 #:phases
8989 (modify-phases %standard-phases
8990 (delete 'configure) ;no configure script
8991 (add-after 'unpack 'fix-sdl-path
8992 ;; XXX: For some reason, `sdl2-config' reports stand-alone SDL
8993 ;; directory, not SDL-union provided as an input to the package.
8994 ;; We force the latter with "--prefix=" option.
8995 (lambda* (#:key inputs #:allow-other-keys)
8996 (substitute* "Makefile"
8997 (("sdl2-config" command)
8998 (string-append command " --prefix=" (assoc-ref inputs "sdl"))))
8999 #t)))))
9000 (inputs
9001 `(("bzip2" ,bzip2)
9002 ("sdl" ,(sdl-union (list sdl2 sdl2-mixer sdl2-net)))
9003 ("zlib" ,zlib)))
9004 (native-inputs
9005 `(("gettext" ,gettext-minimal))) ;for msgfmt
9006 (home-page "https://gitlab.com/LibreGames/jumpnbump")
9007 (synopsis "Multiplayer platform game with bunnies")
9008 (description "You, as a bunny, have to jump on your opponents to make them
9009 explode. It is a true multiplayer game; you cannot play this alone. You can
9010 play with up to four players simultaneously. It has network support.")
9011 (license license:gpl2+)))
9012
9013 (define-public hedgewars
9014 (package
9015 (name "hedgewars")
9016 (version "1.0.0")
9017 (source (origin
9018 (method url-fetch)
9019 (uri (string-append "https://www.hedgewars.org/download/releases/"
9020 "hedgewars-src-" version ".tar.bz2"))
9021 (sha256
9022 (base32
9023 "0nqm9w02m0xkndlsj6ys3wr0ik8zc14zgilq7k6fwjrf3zk385i1"))))
9024 (build-system cmake-build-system)
9025 (arguments
9026 ;; XXX: Engine is built as Pascal source code, requiring Free Pascal
9027 ;; Compiler, which we haven't packaged yet. With the flag below, we use
9028 ;; a Pascal to C translator and Clang instead.
9029 `(#:configure-flags (list "-DBUILD_ENGINE_C=ON"
9030 "-Dhaskell_flags=-dynamic;-fPIC")
9031 #:phases
9032 (modify-phases %standard-phases
9033 (replace 'check
9034 (lambda _ (invoke "ctest")))
9035 (add-after 'install 'install-icon
9036 (lambda _
9037 ;; Install icon for the desktop file.
9038 (let* ((out (assoc-ref %outputs "out"))
9039 (icons (string-append out "/share/icons/hicolor/512x512/apps")))
9040 (with-directory-excursion (string-append "../hedgewars-src-" ,version)
9041 (install-file "misc/hedgewars.png" icons)))
9042 #t)))))
9043 (inputs
9044 `(("ffmpeg" ,ffmpeg)
9045 ("freeglut" ,freeglut)
9046 ("ghc-entropy" ,ghc-entropy)
9047 ("ghc-hslogger" ,ghc-hslogger)
9048 ("ghc-network" ,ghc-network)
9049 ("ghc-random" ,ghc-random)
9050 ("ghc-regex-tdfa" ,ghc-regex-tdfa)
9051 ("ghc-sandi" ,ghc-sandi)
9052 ("ghc-sha" ,ghc-sha)
9053 ("ghc-utf8-string" ,ghc-utf8-string)
9054 ("ghc-vector" ,ghc-vector)
9055 ("ghc-zlib" ,ghc-zlib)
9056 ("glew" ,glew)
9057 ("libpng" ,libpng)
9058 ("lua" ,lua-5.1)
9059 ("physfs" ,physfs)
9060 ("qtbase" ,qtbase)
9061 ("sdl" ,(sdl-union
9062 (list sdl2 sdl2-mixer sdl2-net sdl2-ttf sdl2-image)))))
9063 (native-inputs
9064 `(("clang" ,clang)
9065 ("ghc" ,ghc)
9066 ("pkg-config" ,pkg-config)
9067 ("qttools" ,qttools)))
9068 (home-page "https://hedgewars.org/")
9069 (synopsis "Turn-based artillery game featuring fighting hedgehogs")
9070 (description
9071 "Hedgewars is a turn based strategy, artillery, action and comedy game,
9072 featuring the antics of pink hedgehogs with attitude as they battle from the
9073 depths of hell to the depths of space.
9074
9075 As commander, it's your job to assemble your crack team of hedgehog soldiers
9076 and bring the war to your enemy.")
9077 ;; Software as a whole is licensed under GPL-2 terms. Artwork and
9078 ;; scripts are distributed under various terms.
9079 (license (list license:gpl2
9080 license:bsd-2 license:bsd-3 license:cc-by3.0 license:cc0
9081 license:expat license:fdl1.3+ license:public-domain
9082 license:zlib))))
9083
9084 (define-public harmonist
9085 (package
9086 (name "harmonist")
9087 (version "0.3.0")
9088 (source (origin
9089 (method git-fetch)
9090 (uri (git-reference
9091 (url "https://git.tuxfamily.org/harmonist/harmonist.git")
9092 (commit (string-append "v" version))))
9093 (file-name (git-file-name name version))
9094 (sha256
9095 (base32
9096 "146wiyanag0zqj6fhyll2sw6sydnnll8mgxhhqf9sjqsl2rx4s5r"))))
9097 (build-system go-build-system)
9098 (arguments
9099 '(#:import-path "git.tuxfamily.org/harmonist/harmonist"))
9100 (inputs
9101 `(("go-github.com-nsf-termbox-go" ,go-github.com-nsf-termbox-go)))
9102 (home-page "https://harmonist.tuxfamily.org/")
9103 (synopsis "Stealth coffee-break roguelike game")
9104 (description "Harmonist: Dayoriah Clan Infiltration is a stealth
9105 coffee-break roguelike game. The game has a heavy focus on tactical
9106 positioning, light and noise mechanisms, making use of various terrain types
9107 and cones of view for monsters. Aiming for a replayable streamlined experience,
9108 the game avoids complex inventory management and character building, relying
9109 on items and player adaptability for character progression.")
9110 (license license:isc)))
9111
9112 (define-public harmonist-tk
9113 (package
9114 (inherit harmonist)
9115 (name "harmonist-tk")
9116 (arguments
9117 (append
9118 (package-arguments harmonist)
9119 `(#:phases
9120 (modify-phases %standard-phases
9121 (replace 'build
9122 (lambda _
9123 (invoke "go" "install" "-v" "-x" "--tags" "tk"
9124 "git.tuxfamily.org/harmonist/harmonist")))
9125 (replace 'check
9126 (lambda _
9127 (invoke "go" "test" "--tags" "tk"
9128 "git.tuxfamily.org/harmonist/harmonist")))))))
9129 (inputs
9130 `(("go-github.com-nsf-gothic" ,go-github.com-nsf-gothic)))))
9131
9132 (define-public drascula
9133 (package
9134 (name "drascula")
9135 (version "1.0")
9136 (source (origin
9137 (method url-fetch)
9138 (uri (string-append "mirror://sourceforge/scummvm/extras/"
9139 "Drascula_%20The%20Vampire%20Strikes%20Back/"
9140 "drascula-" version ".zip"))
9141 (sha256
9142 (base32
9143 "1pj29rpb754sn6a56f8brfv6f2m1p5qgaqik7d68pfi2bb5zccdp"))))
9144 (build-system trivial-build-system)
9145 (arguments
9146 `(#:modules ((guix build utils))
9147 #:builder
9148 (begin
9149 (use-modules (guix build utils)
9150 (ice-9 match))
9151 (let* ((out (assoc-ref %outputs "out"))
9152 (share (string-append out "/share/drascula"))
9153 (scummvm (assoc-ref %build-inputs "scummvm")))
9154 ;; Install data.
9155 (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
9156 "/bin/unzip"))
9157 (doc (string-append out "/share/doc/" ,name "-" ,version)))
9158 (for-each
9159 (lambda (input)
9160 (invoke unzip
9161 "-j"
9162 (assoc-ref %build-inputs input)
9163 "-x" "__MACOSX")
9164 ;; Every input provides "readme.txt", and we want to
9165 ;; preserve them all. Therefore we rename them first.
9166 (match input
9167 ("drascula-int"
9168 (rename-file "readme.txt" "readme-international.txt"))
9169 ("drascula-audio"
9170 (rename-file "readme.txt" "readme-audio.txt"))
9171 (_ #f))
9172 ;; Install documentation.
9173 (for-each (lambda (f) (install-file f doc))
9174 (find-files "." "\\.(txt|doc)$"))
9175 ;; Install data.
9176 (for-each (lambda (f) (install-file f share))
9177 (find-files "." "\\.(ogg|00[0-9])$")))
9178 '("drascula-audio" "drascula-int" "source")))
9179 ;; Create standalone executable.
9180 (let* ((bin (string-append out "/bin"))
9181 (executable (string-append bin "/drascula"))
9182 (bash (string-append (assoc-ref %build-inputs "bash")
9183 "/bin/bash")))
9184 (mkdir-p bin)
9185 (with-output-to-file executable
9186 (lambda ()
9187 (format #t "#!~a~%" bash)
9188 (format #t
9189 "exec ~a/bin/scummvm --path=~a drascula~%"
9190 scummvm share)))
9191 (chmod executable #o755))
9192 ;; Create desktop file. There is no dedicated icon for the
9193 ;; game, so we borrow SCUMMVM's.
9194 (let ((apps (string-append out "/share/applications")))
9195 (mkdir-p apps)
9196 (make-desktop-entry-file
9197 (string-append apps "/drascula.desktop")
9198 #:name "Drascula: The Vampire Strikes Back"
9199 #:generic-name "Drascula"
9200 #:exec (string-append out "/bin/drascula")
9201 #:icon (string-append scummvm "/share/icons/hicolor/scalable/apps/scummvm.svg")
9202 #:categories '("AdventureGame" "Game" "RolePlaying")
9203 #:keywords '("game" "adventure" "roleplaying" "2D" "fantasy")
9204 #:comment '((#f "Classic 2D point and click adventure game")
9205 ("de" "Klassisches 2D-Abenteuerspiel in Zeigen-und-Klicken-Manier")
9206 ("fr" "Jeu classique d'aventure pointer-et-cliquer en 2D")
9207 ("it" "Gioco classico di avventura punta e clicca 2D"))))
9208 #t))))
9209 (native-inputs
9210 `(("bash" ,bash)
9211 ("unzip" ,unzip)))
9212 (inputs
9213 `(("scummvm" ,scummvm)
9214 ("drascula-int"
9215 ,(let ((version "1.1"))
9216 (origin
9217 (method url-fetch)
9218 (uri (string-append "mirror://sourceforge/scummvm/extras/"
9219 "Drascula_%20The%20Vampire%20Strikes%20Back/"
9220 "drascula-int-" version ".zip"))
9221 (sha256
9222 (base32
9223 "12236i7blamal92p1i8dgp3nhp2yicics4whsl63v682bj999n14")))))
9224 ("drascula-audio"
9225 ,(let ((version "2.0"))
9226 (origin
9227 (method url-fetch)
9228 (uri (string-append "mirror://sourceforge/scummvm/extras/"
9229 "Drascula_%20The%20Vampire%20Strikes%20Back/"
9230 "drascula-audio-" version ".zip"))
9231 (sha256
9232 (base32
9233 "00g4izmsqzxb8ry1vhfx6jrygl58lvlij09nw01ds4zddsiznsky")))))))
9234 (home-page "https://www.scummvm.org")
9235 (synopsis "Classic 2D point and click adventure game")
9236 (description "Drascula: The Vampire Strikes Back is a classic humorous 2D
9237 point and click adventure game.
9238
9239 In Drascula you play the role of John Hacker, a British estate agent, that
9240 gets to meet a gorgeous blond girl who is kidnapped by the notorious vampire
9241 Count Drascula and embark on a fun yet dangerous quest to rescue her.
9242 Unfortunately, Hacker is not aware of Drascula's real ambitions: DOMINATING
9243 the World and demonstrating that he is even more evil than his brother Vlad.")
9244 ;; Drascula uses a BSD-like license.
9245 (license (license:non-copyleft "file:///readme.txt"))))
9246
9247 (define (make-lure-package name language hash)
9248 (package
9249 (name name)
9250 (version "1.1")
9251 (source
9252 (origin
9253 (method url-fetch)
9254 (uri (string-append
9255 "mirror://sourceforge/scummvm/extras/"
9256 "Lure%20of%20the%20Temptress/"
9257 name "-" version ".zip"))
9258 (sha256
9259 (base32 hash))))
9260 (build-system trivial-build-system)
9261 (arguments
9262 `(#:modules ((guix build utils))
9263 #:builder
9264 (begin
9265 (use-modules (guix build utils))
9266 (let* ((out (assoc-ref %outputs "out"))
9267 (share (string-append out "/share"))
9268 (data (string-append share "/" ,name "/" ,language))
9269 (apps (string-append share "/applications"))
9270 (bin (string-append out "/bin"))
9271 (executable (string-append bin "/" ,name))
9272 (scummvm (assoc-ref %build-inputs "scummvm")))
9273 (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
9274 "/bin/unzip")))
9275 (invoke unzip "-j" (assoc-ref %build-inputs "source")))
9276 (let ((doc (string-append share "/doc/" ,name "-" ,version)))
9277 (for-each (lambda (f) (install-file f doc))
9278 (find-files "." "\\.(txt|PDF|pdf)$")))
9279 (for-each (lambda (f) (install-file f data))
9280 (find-files "." "\\.(vga|VGA)$"))
9281 ;; Build the executable.
9282 (mkdir-p bin)
9283 (let ((bash (assoc-ref %build-inputs "bash")))
9284 (with-output-to-file executable
9285 (lambda ()
9286 (format #t "#!~a/bin/bash~%" bash)
9287 (format #t "exec ~a/bin/scummvm -q ~a -p ~a lure~%"
9288 scummvm ,language data))))
9289 (chmod executable #o755)
9290 ;; Create desktop file. There is no dedicated
9291 ;; icon for the game, so we borrow SCUMMVM's.
9292 (mkdir-p apps)
9293 (with-output-to-file (string-append apps "/" ,name ".desktop")
9294 (lambda _
9295 (format #t
9296 "[Desktop Entry]~@
9297 Name=Lure of the Temptress~@
9298 GenericName=Lure~@
9299 Exec=~a~@
9300 Icon=~a/share/icons/hicolor/scalable/apps/scummvm.svg~@
9301 Categories=AdventureGame;Game;RolePlaying;~@
9302 Keywords=game;adventure;roleplaying;2D,fantasy;~@
9303 Comment=Classic 2D point and click adventure game~@
9304 Comment[de]=klassisches 2D-Abenteuerspiel in Zeigen-und-Klicken-Manier~@
9305 Comment[fr]=Jeu classique d'aventure pointer-et-cliquer en 2D~@
9306 Comment[it]=Gioco classico di avventura punta e clicca 2D~@
9307 Type=Application~%"
9308 executable scummvm)))
9309 #t))))
9310 (native-inputs
9311 `(("unzip" ,unzip)))
9312 (inputs
9313 `(("bash" ,bash)
9314 ("scummvm" ,scummvm)))
9315 (home-page "https://www.scummvm.org")
9316 (synopsis "2D point and click fantasy adventure game")
9317 (description
9318 "Lure of the Temptress is a classic 2D point and click adventure game.
9319
9320 You are Diermot, an unwilling hero who'd prefer a quiet life, and are, to all
9321 intents and purposes, a good man. After decades of unrest the King has united
9322 the warring factions in his kingdom and all his lands are at peace, except
9323 a remote region around a town called Turnvale. A revolt has recently taken
9324 place in Turnvale, a revolt orchestrated by an apprentice sorceress called
9325 Selena, the titular temptress. The king calls together his finest horsemen
9326 and heads off (with you in tow) to Turnvale just to witness how hellish
9327 mercenary monsters called Skorl are invading the town.
9328
9329 The king's men are defeated, the king is killed and you fall of your horse and
9330 bang your head heavily on the ground. You have been *unconscious for a while
9331 when you realize that you are in a dingy cell guarded by a not so friendly
9332 Skorl. Maybe it would be an idea to try and escape...")
9333 (license (license:non-copyleft "file:///README"))))
9334
9335 (define-public lure
9336 (make-lure-package
9337 "lure" "en" "0201i70qcs1m797kvxjx3ygkhg6kcl5yf49sihba2ga8l52q45zk"))
9338
9339 (define-public lure-de
9340 (make-lure-package
9341 "lure-de" "de" "0sqq7h5llml6rv85x0bfv4bgzwhs4c82p4w4zmfcaab6cjlad0sy"))
9342
9343 (define-public lure-es
9344 (make-lure-package
9345 "lure-es" "es" "1dvv5znvlsakw6w5r16calv9jkgw27aymgybsf4q22lcmpxbj1lk"))
9346
9347 (define-public lure-fr
9348 (make-lure-package
9349 "lure-fr" "fr" "1y51jjb7f8023832g44vd1jsb6ni85586pi2n5hjg9qjk6gi90r9"))
9350
9351 (define-public lure-it
9352 (make-lure-package
9353 "lure-it" "it" "1ks6n39r1cllisrrh6pcr39swsdv7ng3gx5c47vaw71zzfr70hjj"))
9354
9355 (define (make-queen-package name file-prefix release language hash)
9356 (package
9357 (name name)
9358 (version release)
9359 (source
9360 (origin
9361 (method url-fetch)
9362 (uri (string-append "mirror://sourceforge/scummvm/extras/"
9363 "Flight%20of%20the%20Amazon%20Queen/"
9364 file-prefix release ".zip"))
9365 (sha256
9366 (base32 hash))))
9367 (build-system trivial-build-system)
9368 (arguments
9369 `(#:modules ((guix build utils))
9370 #:builder
9371 (begin
9372 (use-modules (guix build utils))
9373 (let* ((out (assoc-ref %outputs "out"))
9374 (share (string-append out "/share"))
9375 (data (string-append share "/" ,name))
9376 (apps (string-append share "/applications"))
9377 (bin (string-append out "/bin"))
9378 (executable (string-append bin "/" ,name))
9379 (scummvm (assoc-ref %build-inputs "scummvm")))
9380 (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
9381 "/bin/unzip")))
9382 (invoke unzip "-j" (assoc-ref %build-inputs "source")))
9383 (let ((doc (string-append share "/doc/" ,name "-" ,version)))
9384 (install-file "readme.txt" doc))
9385 (install-file "queen.1c" data)
9386 (mkdir-p bin)
9387 (let ((bash (assoc-ref %build-inputs "bash")))
9388 (with-output-to-file executable
9389 (lambda ()
9390 (format #t "#!~a/bin/bash~%" bash)
9391 (format #t "exec ~a/bin/scummvm -q fr -p ~a queen~%"
9392 scummvm data))))
9393 (chmod executable #o755)
9394 ;; Create desktop file. There is no dedicated
9395 ;; icon for the game, so we borrow SCUMMVM's.
9396 (mkdir-p apps)
9397 (with-output-to-file (string-append apps "/" ,name ".desktop")
9398 (lambda _
9399 (format #t
9400 "[Desktop Entry]~@
9401 Name=Flight of the Amazon Queen~@
9402 GenericName=Queen~@
9403 Comment=Embark on a quest to rescue a kidnapped princess and in the process, discover the true sinister intentions of a suspiciously located Lederhosen company~@
9404 Comment[de]=Begib dich auf ein Abenteuer, um eine entführte Prinzessin zu retten und entdecke die wahren, finsteren Absichten eines verdächtig erscheinenden Lederhosen-Unternehmens~@
9405 Type=Application~@
9406 Exec=~a~@
9407 Icon=~a/share/icons/hicolor/scalable/apps/scummvm.svg~@
9408 Categories=AdventureGame;Game;RolePlaying;~@
9409 Keywords=adventure;game;roleplaying;fantasy;~%"
9410 executable scummvm))))
9411 #t)))
9412 (native-inputs
9413 `(("unzip" ,unzip)))
9414 (inputs
9415 `(("bash" ,bash)
9416 ("scummvm" ,scummvm)))
9417 (home-page "https://www.scummvm.org/")
9418 (synopsis "Classic 2D point and click adventure game")
9419 (description "Flight of the Amazon Queen is a 2D point-and-click
9420 adventure game set in the 1940s.
9421
9422 You assume the role of Joe King, a pilot for hire who is given the job
9423 of flying Faye Russell (a famous movie star) into the Amazon jungle
9424 for a photo shoot. Of course, things never go according to plans.
9425 After an unfortunate turn of events they find themselves stranded in
9426 the heart of the Amazon jungle, where Joe will embark on a quest to
9427 rescue a kidnapped princess and in the process, discover the true
9428 sinister intentions of a suspiciously located Lederhosen company. In
9429 a rich 2D environment, Joe will cross paths with a variety of unlikely
9430 jungle inhabitants including, but not limited to, a tribe of Amazon
9431 women and 6-foot-tall pygmies.")
9432 (license (license:non-copyleft "file:///readme.txt"))))
9433
9434 (define-public queen
9435 (make-queen-package
9436 "queen" "FOTAQ_Talkie-" "1.1" "en"
9437 "1a6q71q1dl9vvw2qqsxk5h1sv0gaqy6236zr5905w2is01gdsp52"))
9438
9439 (define-public queen-de
9440 (make-queen-package
9441 "queen-de" "FOTAQ_Ger_talkie-" "1.0" "de"
9442 "13vn43x7214vyprlpqabvv71k890nff3d6fjscflr1ll7acjca3f"))
9443
9444 (define-public queen-fr
9445 (make-queen-package
9446 "queen-fr" "FOTAQ_Fr_Talkie_" "1.0" "fr"
9447 "0hq5g4qrkcwm2kn5i4kv4hijs9hi7bw9xl1vrwd1l69qqn30crwy"))
9448
9449 (define-public queen-it
9450 (make-queen-package
9451 "queen-it" "FOTAQ_It_Talkie_" "1.0" "it"
9452 "1h76y70lrpzfjkm53n4nr364nhyka54vbz9r7sadzyzl7c7ilv4d"))
9453
9454 (define-public sky
9455 (package
9456 (name "sky")
9457 (version "1.2") ;1.3 is floppy version
9458 (source
9459 (origin
9460 (method url-fetch)
9461 (uri (string-append "mirror://sourceforge/scummvm/extras/"
9462 "Beneath%20a%20Steel%20Sky/"
9463 "bass-cd-" version ".zip"))
9464 (sha256
9465 (base32 "14s5jz67kavm8l15gfm5xb7pbpn8azrv460mlxzzvdpa02a9n82k"))))
9466 (build-system trivial-build-system)
9467 (arguments
9468 `(#:modules ((guix build utils))
9469 #:builder
9470 (begin
9471 (use-modules (guix build utils))
9472 (let* ((out (assoc-ref %outputs "out"))
9473 (share (string-append out "/share"))
9474 (data (string-append share "/" ,name))
9475 (apps (string-append share "/applications"))
9476 (bin (string-append out "/bin"))
9477 (executable (string-append bin "/" ,name))
9478 (scummvm (assoc-ref %build-inputs "scummvm")))
9479 (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
9480 "/bin/unzip")))
9481 (invoke unzip "-j" (assoc-ref %build-inputs "source")))
9482 (let ((doc (string-append share "/doc/bass-" ,version)))
9483 (install-file "readme.txt" doc))
9484 (for-each (lambda (f) (install-file f data))
9485 (find-files "." "^sky\\."))
9486 ;; Build the executable.
9487 (mkdir-p bin)
9488 (let ((bash (assoc-ref %build-inputs "bash")))
9489 (with-output-to-file executable
9490 (lambda ()
9491 (format #t "#!~a/bin/bash~%" bash)
9492 (format #t "exec ~a/bin/scummvm -p ~a sky~%" scummvm data))))
9493 (chmod executable #o755)
9494 ;; Create desktop file. There is no dedicated
9495 ;; icon for the game, so we borrow SCUMMVM's.
9496 (mkdir-p apps)
9497 (with-output-to-file (string-append apps "/" ,name ".desktop")
9498 (lambda _
9499 (format #t
9500 "[Desktop Entry]~@
9501 Name=Beneath a Steel Sky~@
9502 GenericName=Bass~@
9503 Exec=~a~@
9504 Icon=~a/share/icons/hicolor/scalable/apps/scummvm.svg~@
9505 Categories=AdventureGame;Game;RolePlaying;~@
9506 Keywords=adventure;game;roleplaying;cyberpunk;~@
9507 Comment=A science-fiction adventure game set in a bleak post-apocalyptic vision of the future~@
9508 Comment[de]=Ein Science-Fiction-Abenteuerspiel \
9509 angesiedelt in einer düsteren, postapokalyptischen Vision der Zukunft~@
9510 Type=Application~%"
9511 executable scummvm)))
9512 #t))))
9513 (native-inputs
9514 `(("unzip" ,unzip)))
9515 (inputs
9516 `(("bash" ,bash)
9517 ("scummvm" ,scummvm)))
9518 (home-page "https://www.scummvm.org/")
9519 (synopsis "Classic 2D point and click science-fiction adventure game")
9520 (description
9521 "Beneath a Steel Sky is a science-fiction thriller set in a bleak
9522 post-apocalyptic vision of the future. It revolves around Union City,
9523 where selfishness, rivalry, and corruption by its citizens seems to be
9524 all too common, those who can afford it live underground, away from
9525 the pollution and social problems which are plaguing the city.
9526
9527 You take on the role of Robert Foster, an outcast of sorts from the
9528 city since a boy who was raised in a remote environment outside of
9529 Union City simply termed ``the gap''. Robert's mother took him away
9530 from Union City as a child on their way to ``Hobart'' but the
9531 helicopter crashed on its way. Unfortunately, Robert's mother died,
9532 but he survived and was left to be raised by a local tribe from the
9533 gap.
9534
9535 Years later, Union City security drops by and abducts Robert, killing
9536 his tribe in the process; upon reaching the city the helicopter taking
9537 him there crashes with him escaping, high upon a tower block in the
9538 middle of the city. He sets out to discover the truth about his past,
9539 and to seek vengeance for the killing of his tribe.")
9540 (license (license:non-copyleft "file:///readme.txt"))))
9541
9542 (define-public gnurobots
9543 (package
9544 (name "gnurobots")
9545 (version "1.2.0")
9546 (source
9547 (origin
9548 (method url-fetch)
9549 (uri (string-append "mirror://gnu/gnurobots/gnurobots-"
9550 version ".tar.gz"))
9551 (sha256
9552 (base32
9553 "07gi3lsmbzzsjambgixj6xy79lh22km84z7bnzgwzxdy806lyvwb"))))
9554 (build-system gnu-build-system)
9555 (inputs
9556 `(("glib" ,glib)
9557 ("gtk+" ,gtk+-2)
9558 ("vte" ,vte/gtk+-2)
9559 ("readline" ,readline)
9560 ("guile" ,guile-1.8)))
9561 (native-inputs
9562 `(("pkg-config" ,pkg-config)))
9563 (arguments
9564 `(#:make-flags
9565 (list
9566 ;; Do not abort build on "deprecated-declarations" warnings.
9567 "CFLAGS=-Wno-error=deprecated-declarations"
9568 ;; Find readline headers in sub-directory.
9569 (string-append "READLINE_CFLAGS=-I"
9570 (assoc-ref %build-inputs "readline")
9571 "/include/readline/"))
9572 #:phases
9573 (modify-phases %standard-phases
9574 (add-after 'install 'install-doc
9575 (lambda* (#:key outputs #:allow-other-keys)
9576 (install-file "doc/Robots-HOWTO"
9577 (string-append (assoc-ref outputs "out")
9578 "/share/doc/gnurobots-"
9579 ,version))
9580 #t)))))
9581 (home-page "https://www.gnu.org/software/gnurobots/")
9582 (synopsis "Program a little robot and watch it explore a world")
9583 (description
9584 "GNU Robots is a game in which you program a robot to explore a world
9585 full of enemies that can hurt it, obstacles and food to be eaten. The goal of
9586 the game is to stay alive and collect prizes. The robot program conveniently
9587 may be written in a plain text file in the Scheme programming language.")
9588 (license license:gpl3+)))
9589
9590 (define-public ri-li
9591 (package
9592 (name "ri-li")
9593 (version "2.0.1")
9594 (source (origin
9595 (method url-fetch)
9596 (uri (string-append "mirror://sourceforge/ri-li/"
9597 "Ri-li%20Linux_Unix/Ri-li%20V" version "/"
9598 "Ri-li-" version ".tar.bz2"))
9599 (sha256
9600 (base32
9601 "1gcdsgnnbbn1mb1hkpwniv3fhkaj1nn8gq33v5c16q3wqchcq77p"))
9602 ;; Taken from
9603 ;; <https://github.com/NixOS/nixpkgs/blob/master/pkgs/games/rili/moderinze_cpp.patch>.
9604 ;; It doesn't build otherwise.
9605 (patches (search-patches "ri-li-modernize_cpp.patch"))))
9606 (build-system gnu-build-system)
9607 (arguments
9608 `(#:phases
9609 (modify-phases %standard-phases
9610 ;; Remove "gentoo" subdirectory from Makefile, as it is
9611 ;; missing a make file and generates a build failure.
9612 (add-after 'configure 'fix-build
9613 (lambda _
9614 (substitute* "Makefile"
9615 ((" gentoo") ""))
9616 #t))
9617 (add-after 'install 'install-desktop-file
9618 (lambda* (#:key outputs #:allow-other-keys)
9619 (let* ((out (assoc-ref outputs "out"))
9620 (apps (string-append out "/share/applications"))
9621 (pixmaps (string-append out "/share/pixmaps")))
9622 (for-each (lambda (f) (install-file f pixmaps))
9623 (find-files "data" "\\.(png|ico)$"))
9624 (mkdir-p apps)
9625 (with-output-to-file (string-append apps "/ri-li.desktop")
9626 (lambda _
9627 (format #t
9628 "[Desktop Entry]~@
9629 Name=Ri-li~@
9630 Exec=~a/bin/Ri_li~@
9631 Icon=~a/Ri-li-icon-32x32.png~@
9632 Categories=Game;ArcadeGame;~@
9633 Keywords=toy;train;wooden;snake-like;engine;~@
9634 Comment=a toy simulator game~@
9635 Comment[de]=Ein Spiel mit einem kleinen Zug~@
9636 Comment[fr]=un jeu de petit train~@
9637 Comment[ro_RO]=un joc cu un tren de jucărie~@
9638 Terminal=false~@
9639 Type=Application~%"
9640 out pixmaps))))
9641 #t))
9642 (add-after 'install-desktop-file 'remove-spurious-files
9643 ;; Delete redundant files already installed somewhere else.
9644 (lambda* (#:key outputs #:allow-other-keys)
9645 (let ((out (assoc-ref outputs "out")))
9646 (for-each delete-file
9647 (find-files (string-append out "/share/Ri-li")
9648 "\\.(png|ico)|COPYING"))
9649 #t))))))
9650 (inputs
9651 `(("sdl" ,(sdl-union (list sdl sdl-mixer)))))
9652 (home-page "http://www.ri-li.org")
9653 (synopsis "Toy train simulation game")
9654 (description "Ri-li is a game in which you drive a wooden toy
9655 steam locomotive across many levels and collect all the coaches to
9656 win.")
9657 ;; The project is dual-licensed GPL2+ and GPL3+.
9658 (license (list license:gpl2+ license:gpl3+))))
9659
9660 (define-public freeorion
9661 (package
9662 (name "freeorion")
9663 (version "0.4.10")
9664 (source
9665 (origin
9666 (method url-fetch)
9667 (uri (string-append "https://github.com/freeorion/freeorion/releases/"
9668 "download/v" version "/FreeOrion_v" version
9669 "_2020-07-10.f3d403e_Source.tar.gz"))
9670 (sha256
9671 (base32 "12xspixrkx6mmmsdqjha0hg02r4y73pk229l0wjq9s0yp8nb8ap7"))
9672 (modules '((guix build utils)))
9673 (snippet
9674 '(begin
9675 ;; There are some bundled fonts.
9676 (for-each delete-file-recursively '("default/data/fonts"))
9677 #t))))
9678 (build-system cmake-build-system)
9679 (arguments
9680 '(#:tests? #f ;no test
9681 #:phases
9682 (modify-phases %standard-phases
9683 (add-after 'unpack 'unbundle-fonts
9684 (lambda* (#:key inputs #:allow-other-keys)
9685 (let ((roboto-dir (string-append (assoc-ref inputs "font-roboto")
9686 "/share/fonts/truetype/")))
9687 (substitute* "UI/ClientUI.cpp"
9688 (("\\(GetRootDataDir.*?Roboto-(Bold|Regular)\\.ttf\"\\)\\.string\\(\\)\\);"
9689 all type)
9690 (string-append "\"" roboto-dir "Roboto-" type ".ttf\");")))
9691 #t))))))
9692 (inputs
9693 `(("boost" ,boost)
9694 ("boost_signals" ,boost-signals2)
9695 ("font-dejavu" ,font-dejavu)
9696 ("font-roboto" ,font-google-roboto)
9697 ("freetype2" ,freetype)
9698 ("glew" ,glew)
9699 ("glu" ,glu)
9700 ("libogg" ,libogg)
9701 ("libpng" ,libpng)
9702 ("libvorbis" ,libvorbis)
9703 ("openal" ,openal)
9704 ("python" ,python)
9705 ("sdl2" ,sdl2)
9706 ("zlib" ,zlib)))
9707 (home-page "https://www.freeorion.org/index.php/Main_Page")
9708 (synopsis "Turn-based space empire and galactic conquest computer game")
9709 (description
9710 "FreeOrion is a turn-based space empire and galactic conquest (4X)
9711 computer game being designed and built by the FreeOrion project. Control an
9712 empire with the goal of exploring the galaxy, expanding your territory,
9713 exploiting the resources, and exterminating rival alien empires. FreeOrion is
9714 inspired by the tradition of the Master of Orion games, but is not a clone or
9715 remake of that series or any other game.")
9716 ;; Source code is released under gpl2. Artwork, music and sounds, and
9717 ;; in-game text are released under cc-by-sa3.0. Game content scripts are
9718 ;; released under both gpl2 and cc-by-sa3.0. Bundled Gigi library is
9719 ;; released under lgpl2.1+.
9720 (license (list license:gpl2 license:cc-by-sa3.0 license:lgpl2.1+))))
9721
9722 (define-public leela-zero
9723 (package
9724 (name "leela-zero")
9725 (version "0.17")
9726 (source
9727 (origin
9728 (method git-fetch)
9729 (uri (git-reference
9730 (url "https://github.com/leela-zero/leela-zero")
9731 (commit (string-append "v" version))))
9732 (file-name (git-file-name name version))
9733 (sha256
9734 (base32
9735 "17px5iny8mql5c01bymcli7zfssswkzvb2i8gnsmjcck6i2n8srl"))
9736 (patches (search-patches "leela-zero-gtest.patch"))))
9737 (build-system cmake-build-system)
9738 (native-inputs
9739 `(("googletest" ,googletest)))
9740 (inputs
9741 `(("boost" ,boost)
9742 ("ocl-icd" ,ocl-icd)
9743 ("openblas" ,openblas)
9744 ("opencl-headers" ,opencl-headers)
9745 ("qtbase" ,qtbase)
9746 ("zlib" ,zlib)))
9747 (arguments
9748 '(#:configure-flags '("-DUSE_BLAS=YES")
9749 #:phases (modify-phases %standard-phases
9750 (add-before 'configure 'fix-tests
9751 (lambda* (#:key outputs #:allow-other-keys)
9752 (let ((home (getcwd)))
9753 (setenv "HOME" home)
9754 (substitute* "src/tests/gtests.cpp"
9755 (("\\.\\./src/tests/0k\\.txt")
9756 (string-append home "/src/tests/0k.txt"))
9757 (("cfg_gtp_mode = true;")
9758 "cfg_gtp_mode = true; cfg_cpu_only = true;")))
9759 #t))
9760 (replace 'check
9761 (lambda _
9762 (invoke "./tests"))))))
9763 (home-page "https://github.com/leela-zero/leela-zero")
9764 (synopsis "Program playing the game of Go")
9765 (description
9766 "Leela-zero is a Go engine with no human-provided knowledge, modeled after
9767 the AlphaGo Zero paper. The current best network weights file for the engine
9768 can be downloaded from @url{https://zero.sjeng.org/best-network}.")
9769 (license license:gpl3+)))
9770
9771 (define-public q5go
9772 (package
9773 (name "q5go")
9774 (version "1.0")
9775 (source (origin
9776 (method git-fetch)
9777 (uri (git-reference
9778 (url "https://github.com/bernds/q5Go")
9779 (commit (string-append "q5go-" version))))
9780 (file-name (git-file-name name version))
9781 (sha256
9782 (base32
9783 "1gdlfqcqkqv7vph3qwq78d0qz6dhmdsranxq9bmixiisbzkqby31"))))
9784 (build-system gnu-build-system)
9785 (native-inputs
9786 `(("pkg-config" ,pkg-config)))
9787 (inputs
9788 `(("qtbase" ,qtbase)
9789 ("qtmultimedia" ,qtmultimedia)
9790 ("qtsvg" ,qtsvg)))
9791 (arguments
9792 '(#:phases
9793 (modify-phases %standard-phases
9794 (add-after 'unpack 'fix-configure-script
9795 (lambda _
9796 ;; Bypass the unavailable qtchooser program.
9797 (substitute* "configure"
9798 (("test -z \"QTCHOOSER\"")
9799 "false")
9800 (("qtchooser -run-tool=(.*) -qt=qt5" _ command)
9801 command))
9802 #t))
9803 (add-after 'unpack 'fix-paths
9804 (lambda _
9805 (substitute* '("src/pics/Makefile.in"
9806 "src/translations/Makefile.in")
9807 (("\\$\\(datadir\\)/qGo/")
9808 "$(datadir)/q5go/"))
9809 #t))
9810 (add-after 'install 'install-desktop-file
9811 (lambda* (#:key outputs #:allow-other-keys)
9812 (let* ((out (assoc-ref outputs "out"))
9813 (apps (string-append out "/share/applications"))
9814 (pics (string-append out "/share/q5go/pics")))
9815 (delete-file-recursively (string-append out "/share/applnk"))
9816 (delete-file-recursively (string-append out "/share/mimelnk"))
9817 (install-file "../source/src/pics/Bowl.ico" pics)
9818 (mkdir-p apps)
9819 (with-output-to-file (string-append apps "/q5go.desktop")
9820 (lambda _
9821 (format #t
9822 "[Desktop Entry]~@
9823 Name=q5go~@
9824 Exec=~a/bin/q5go~@
9825 Icon=~a/Bowl.ico~@
9826 Categories=Game;~@
9827 Comment=Game of Go~@
9828 Comment[de]=Spiel des Go~@
9829 Comment[eo]=Goo~@
9830 Comment[es]=Juego de Go~@
9831 Comment[fr]=Jeu de Go~@
9832 Comment[ja]=囲碁~@
9833 Comment[ko]=바둑~@
9834 Comment[zh]=围棋~@
9835 Terminal=false~@
9836 Type=Application~%"
9837 out pics))))
9838 #t)))))
9839 (synopsis "Qt GUI to play the game of Go")
9840 (description
9841 "This a tool for Go players which performs the following functions:
9842 @itemize
9843 @item SGF editor,
9844 @item Analysis frontend for Leela Zero (or compatible engines),
9845 @item GTP interface (to play against an engine),
9846 @item IGS client (to play on the internet),
9847 @item Export games to a variety of formats.
9848 @end itemize")
9849 (home-page "https://github.com/bernds/q5Go")
9850 (license license:gpl2+)))
9851
9852 (define-public ktuberling
9853 (package
9854 (name "ktuberling")
9855 (version "20.12.0")
9856 (source
9857 (origin
9858 (method url-fetch)
9859 (uri (string-append "mirror://kde/stable/release-service/" version
9860 "/src/ktuberling-" version ".tar.xz"))
9861 (sha256
9862 (base32 "0mlv9qllg70p26dbrcsr820c70d3ib88hapc1z6wgjhdpmc12ni1"))))
9863 (build-system qt-build-system)
9864 (native-inputs
9865 `(("extra-cmake-modules" ,extra-cmake-modules)
9866 ("kdoctools" ,kdoctools)
9867 ("perl" ,perl)))
9868 (inputs
9869 `(("kcompletion" ,kcompletion)
9870 ("kconfigwidgets" ,kconfigwidgets)
9871 ("kcoreaddons" ,kcoreaddons)
9872 ("kcrash" ,kcrash)
9873 ("kdbusaddons" ,kdbusaddons)
9874 ("ki18n" ,ki18n)
9875 ("kio" ,kio)
9876 ("kwidgetsaddons" ,kwidgetsaddons)
9877 ("kxmlgui" ,kxmlgui)
9878 ("libkdegames" ,libkdegames)
9879 ("python" ,python-wrapper)
9880 ("qtbase" ,qtbase)
9881 ("qtmultimedia" ,qtmultimedia)
9882 ("qtdeclarative" ,qtdeclarative)
9883 ("qtsvg" ,qtsvg)))
9884 (home-page "https://games.kde.org/")
9885 (synopsis "Stamp drawing toy")
9886 (description "KTuberling is a drawing toy intended for small children and
9887 adults who remain young at heart. The game has no winner; the only purpose is
9888 to make the funniest faces you can. Several activities are possible, e.g.:
9889
9890 @itemize
9891 @item Give the potato a funny face, clothes, and other goodies
9892 @item Build a small town, complete with school, zoo, and fire department
9893 @item Create a fantastic moonscape with spaceships and aliens
9894 @item Top a pizza
9895 @end itemize
9896
9897 KTuberling can speak the name of each the object in several languages,
9898 to assist in learning basic vocabulary.
9899
9900 This package is part of the KDE games module.")
9901 (license (list license:gpl2+ license:fdl1.2+))))
9902
9903 (define-public picmi
9904 (package
9905 (name "picmi")
9906 (version "20.12.0")
9907 (source
9908 (origin
9909 (method url-fetch)
9910 (uri (string-append "mirror://kde/stable/release-service/" version
9911 "/src/picmi-" version ".tar.xz"))
9912 (sha256
9913 (base32 "1dfq9m4njh0czz8zws46rkz6xq2n6xra5w223m3s2f5civiw5msz"))))
9914 (build-system qt-build-system)
9915 (native-inputs
9916 `(("extra-cmake-modules" ,extra-cmake-modules)
9917 ("kdoctools" ,kdoctools)))
9918 (inputs
9919 `(("kcoreaddons" ,kcoreaddons)
9920 ("kcrash" ,kcrash)
9921 ("kdbusaddons" ,kdbusaddons)
9922 ("kdeclarative" ,kdeclarative)
9923 ("ki18n" ,ki18n)
9924 ("kio" ,kio)
9925 ("knewstuff" ,knewstuff)
9926 ("kxmlgui" ,kxmlgui)
9927 ("libkdegames" ,libkdegames)
9928 ("qtbase" ,qtbase)
9929 ("qtdeclarative" ,qtdeclarative)
9930 ("qtsvg" ,qtsvg)))
9931 (home-page "https://games.kde.org/")
9932 (synopsis "Number logic game")
9933 (description "Picmi is a number logic game in which cells in a grid have
9934 to be colored or left blank according to numbers given at the side of the
9935 grid. The aim is to reveal a hidden picture.
9936
9937 This package is part of the KDE games module.")
9938 (license (list license:gpl2+ license:fdl1.2+))))
9939
9940 (define-public kolf
9941 (package
9942 (name "kolf")
9943 (version "20.12.0")
9944 (source
9945 (origin
9946 (method url-fetch)
9947 (uri (string-append "mirror://kde/stable/release-service/" version
9948 "/src/kolf-" version ".tar.xz"))
9949 (sha256
9950 (base32 "1lpp6pzr5dgd4si4a8c7hcvgxgqy0bgyhkx9m6jqb0zhll6dxj10"))))
9951 (build-system qt-build-system)
9952 (native-inputs
9953 `(("extra-cmake-modules" ,extra-cmake-modules)
9954 ("kdoctools" ,kdoctools)))
9955 (inputs
9956 `(("kcompletion" ,kcompletion)
9957 ("kconfigwidgets" ,kconfigwidgets)
9958 ("kcoreaddons" ,kcoreaddons)
9959 ("kcrash" ,kcrash)
9960 ("kdbusaddons" ,kdbusaddons)
9961 ("ki18n" ,ki18n)
9962 ("kio" ,kio)
9963 ("kwidgetsaddons" ,kwidgetsaddons)
9964 ("kxmlgui" ,kxmlgui)
9965 ("ktextwidgets" ,ktextwidgets)
9966 ("libkdegames" ,libkdegames)
9967 ("qtbase" ,qtbase)
9968 ("qtdeclarative" ,qtdeclarative)))
9969 (home-page "https://games.kde.org/")
9970 (synopsis "Miniature golf game")
9971 (description "Kolf is a miniature golf game for one to ten players. The
9972 game is played from an overhead view, with a short bar representing the golf
9973 club. Kolf features many different types of objects, such as water hazards,
9974 slopes, sand traps, and black holes (warps), among others.
9975
9976 Features are:
9977 @itemize
9978 @item Single and Multi-player (up to ten players) modes
9979 @item High scores table
9980 @item Dynamic courses
9981 @item Third-party courses
9982 @item Course editor
9983 @end itemize
9984
9985 This package is part of the KDE games module.")
9986 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
9987
9988 (define-public libkmahjongg
9989 (package
9990 (name "libkmahjongg")
9991 (version "20.12.0")
9992 (source
9993 (origin
9994 (method url-fetch)
9995 (uri (string-append "mirror://kde/stable/release-service/"
9996 version "/src/libkmahjongg-" version ".tar.xz"))
9997 (sha256
9998 (base32 "10ljzbf7qki5flydankrbksaihhkqpfyljb8c71fbwqwmkr7rgfq"))))
9999 (build-system qt-build-system)
10000 (native-inputs
10001 `(("extra-cmake-modules" ,extra-cmake-modules)))
10002 (inputs
10003 `(("kauth" ,kauth)
10004 ("kcompletion" ,kcompletion)
10005 ;("kconfig" ,kconfig)
10006 ("kcodecs" ,kcodecs)
10007 ("kconfigwidgets" ,kconfigwidgets)
10008 ("kcoreaddons" ,kcoreaddons)
10009 ("ki18n" ,ki18n)
10010 ("kwidgetsaddons" ,kwidgetsaddons)
10011 ("qtbase" ,qtbase)
10012 ("qtsvg" ,qtsvg)))
10013 (home-page "https://games.kde.org/")
10014 (synopsis "Shared library for kmahjongg and kshisen")
10015 (description "Shared library and common files for kmahjongg, kshisen and
10016 other Mah Jongg like games.")
10017 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
10018
10019 (define-public kmahjongg
10020 (package
10021 (name "kmahjongg")
10022 (version "20.12.0")
10023 (source
10024 (origin
10025 (method url-fetch)
10026 (uri (string-append "mirror://kde/stable/release-service/"
10027 version "/src/kmahjongg-" version ".tar.xz"))
10028 (sha256
10029 (base32 "1fcj4jb2zzbaxp7cp04w36y0c7lh77yzin66fmvrcxkl11xi2wwd"))))
10030 (build-system qt-build-system)
10031 (native-inputs
10032 `(("extra-cmake-modules" ,extra-cmake-modules)
10033 ("kdoctools" ,kdoctools)))
10034 (inputs
10035 `(("kcompletion" ,kcompletion)
10036 ("kcrash" ,kcrash)
10037 ("kdbusaddons" ,kdbusaddons)
10038 ("kdeclarative" ,kdeclarative)
10039 ("ki18n" ,ki18n)
10040 ("knewstuff" ,knewstuff)
10041 ("kxmlgui" ,kxmlgui)
10042 ("libkdegames" ,libkdegames)
10043 ("libkmahjongg" ,libkmahjongg)
10044 ("qtbase" ,qtbase)
10045 ("qtdeclarative" ,qtdeclarative)
10046 ("qtsvg" ,qtsvg)))
10047 (home-page "https://games.kde.org/")
10048 (synopsis "Tile laying patience")
10049 (description "In KMahjongg the tiles are scrambled and staked on top of
10050 each other to resemble a certain shape. The player is then expected to remove
10051 all the tiles off the game board by locating each tile's matching pair.
10052
10053 A variety of tile layouts are included, as well as an editor to create new
10054 layouts.
10055
10056 This package is part of the KDE games module.")
10057 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
10058
10059 (define-public kshisen
10060 (package
10061 (name "kshisen")
10062 (version "20.12.0")
10063 (source
10064 (origin
10065 (method url-fetch)
10066 (uri (string-append "mirror://kde/stable/release-service/"
10067 version "/src/kshisen-" version ".tar.xz"))
10068 (sha256
10069 (base32 "1hrwr0f1kidivsp8lnwdbqz3xxagjvjwh72r3gma8smfilybygfb"))))
10070 (build-system qt-build-system)
10071 (native-inputs
10072 `(("extra-cmake-modules" ,extra-cmake-modules)
10073 ;("perl" ,perl)
10074 ;("pkg-config" ,pkg-config)
10075 ("kdoctools" ,kdoctools)))
10076 (inputs
10077 `(("kauth" ,kauth)
10078 ("kcompletion" ,kcompletion)
10079 ("kconfigwidgets" ,kconfigwidgets)
10080 ("kcoreaddons" ,kcoreaddons)
10081 ("kcrash" ,kcrash)
10082 ("kdbusaddons" ,kdbusaddons)
10083 ("ki18n" ,ki18n)
10084 ("kxmlgui" ,kxmlgui)
10085 ("libkdegames" ,libkdegames)
10086 ("libkmahjongg" ,libkmahjongg)
10087 ("qtbase" ,qtbase)
10088 ("qtdeclarative" ,qtdeclarative)))
10089 (home-page "https://games.kde.org/")
10090 (synopsis "Shisen-Sho solitaire game")
10091 (description "KShisen is a solitaire-like game played using the standard
10092 set of Mahjong tiles. Unlike Mahjong however, KShisen has only one layer of
10093 scrambled tiles
10094
10095 This package is part of the KDE games module.")
10096 (license license:gpl2+)))
10097
10098 (define-public kajongg
10099 (package
10100 (name "kajongg")
10101 (version "20.12.0")
10102 (source
10103 (origin
10104 (method url-fetch)
10105 (uri (string-append "mirror://kde/stable/release-service/"
10106 version "/src/kajongg-" version ".tar.xz"))
10107 (sha256
10108 (base32 "03fdbnx7zx7vgcxvwd1h1098ks9gq162bwz35fhpyzpynr667m5r"))))
10109 (build-system qt-build-system)
10110 (arguments
10111 `(#:phases
10112 (modify-phases %standard-phases
10113 (add-after 'install 'wrap
10114 (lambda* (#:key outputs #:allow-other-keys)
10115 (let ((out (assoc-ref outputs "out")))
10116 (wrap-program (string-append out "/bin/kajongg")
10117 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
10118 #t))))))
10119 (native-inputs
10120 `(("extra-cmake-modules" ,extra-cmake-modules)
10121 ;("perl" ,perl)
10122 ("kdoctools" ,kdoctools)))
10123 (inputs
10124 `(("kconfig" ,kconfig)
10125 ("kconfigwidgets" ,kconfigwidgets)
10126 ("kcoreaddons" ,kcoreaddons)
10127 ("ki18n" ,ki18n)
10128 ("libkmahjongg" ,libkmahjongg)
10129 ("python" ,python)
10130 ("python-twisted" ,python-twisted)
10131 ("python-pyqt" ,python-pyqt)
10132 ("qtbase" ,qtbase)
10133 ("qtsvg" ,qtsvg)))
10134 (home-page "https://games.kde.org/")
10135 (synopsis "Classical Mah Jongg game for 4 players")
10136 (description "Kajongg is the ancient Chinese board game for 4 players.
10137
10138 If you are looking for the Mah Jongg solitaire please use the application
10139 kmahjongg.
10140
10141 Kajongg can be used in two different ways: Scoring a manual game where you
10142 play as always and use Kajongg for the computation of scores and for
10143 bookkeeping. Or you can use Kajongg to play against any combination of other
10144 human players or computer players.
10145
10146 This package is part of the KDE games module.")
10147 (license (list license:gpl2+ license:fdl1.2+))))
10148
10149 (define-public kbreakout
10150 (package
10151 (name "kbreakout")
10152 (version "20.12.0")
10153 (source
10154 (origin
10155 (method url-fetch)
10156 (uri (string-append "mirror://kde/stable/release-service/" version
10157 "/src/kbreakout-" version ".tar.xz"))
10158 (sha256
10159 (base32 "0kqj2cx0ny3qq65c6w5fpnzmrwl9irg8slzvpd3anck5cnvma3j4"))))
10160 (build-system qt-build-system)
10161 (native-inputs
10162 `(("extra-cmake-modules" ,extra-cmake-modules)
10163 ("kdoctools" ,kdoctools)))
10164 (inputs
10165 `(("kcompletion" ,kcompletion)
10166 ("kconfig" ,kconfig)
10167 ("kconfigwidgets" ,kconfigwidgets)
10168 ("kcoreaddons" ,kcoreaddons)
10169 ("kcrash" ,kcrash)
10170 ("kdbusaddons" ,kdbusaddons)
10171 ("ki18n" ,ki18n)
10172 ("kwidgetsaddons" ,kwidgetsaddons)
10173 ("kxmlgui" ,kxmlgui)
10174 ("libkdegames" ,libkdegames)
10175 ("qtbase" ,qtbase)
10176 ("qtdeclarative" ,qtdeclarative)))
10177 (home-page "https://games.kde.org/")
10178 (synopsis "Breakout like game")
10179 (description "KBreakout is similar to the classics breakout and xboing,
10180 featuring a number of added graphical enhancements and effects. You control a
10181 paddle at the bottom of the playing-field, and must destroy bricks at the top
10182 by bouncing balls against them.
10183
10184 This package is part of the KDE games module.")
10185 (license (list license:gpl2+ license:fdl1.2+))))
10186
10187 (define-public kmines
10188 (package
10189 (name "kmines")
10190 (version "20.12.0")
10191 (source
10192 (origin
10193 (method url-fetch)
10194 (uri (string-append "mirror://kde/stable/release-service/" version
10195 "/src/kmines-" version ".tar.xz"))
10196 (sha256
10197 (base32 "0hqjwh3jq2npqwkvh67fyn2xnq8swiasdw5jz8f0ikl0k28id775"))))
10198 (build-system qt-build-system)
10199 (native-inputs
10200 `(("extra-cmake-modules" ,extra-cmake-modules)
10201 ("kdoctools" ,kdoctools)))
10202 (inputs
10203 `(("kcompletion" ,kcompletion)
10204 ("kconfig" ,kconfig)
10205 ("kconfigwidgets" ,kconfigwidgets)
10206 ("kcoreaddons" ,kcoreaddons)
10207 ("kcrash" ,kcrash)
10208 ("kdbusaddons" ,kdbusaddons)
10209 ("ki18n" ,ki18n)
10210 ("ktextwidgets" ,ktextwidgets)
10211 ("kwidgetsaddons" ,kwidgetsaddons)
10212 ("kxmlgui" ,kxmlgui)
10213 ("libkdegames" ,libkdegames)
10214 ("qtbase" ,qtbase)
10215 ("qtdeclarative" ,qtdeclarative)))
10216 (home-page "https://games.kde.org/")
10217 (synopsis "Classical mine sweeper game")
10218 (description "KMines is a classic Minesweeper game. The idea is to
10219 uncover all the squares without blowing up any mines. When a mine is blown
10220 up, the game is over.
10221
10222 This package is part of the KDE games module.")
10223 (license (list license:gpl2+ license:fdl1.2+))))
10224
10225 (define-public konquest
10226 (package
10227 (name "konquest")
10228 (version "20.12.0")
10229 (source
10230 (origin
10231 (method url-fetch)
10232 (uri (string-append "mirror://kde/stable/release-service/"
10233 version "/src/konquest-" version ".tar.xz"))
10234 (sha256
10235 (base32 "0lnwj06vv4qx05hr8pzysnvrxh8y04asajrph0rsj37v8hs9g5lh"))))
10236 (build-system qt-build-system)
10237 (native-inputs
10238 `(("extra-cmake-modules" ,extra-cmake-modules)
10239 ("kdoctools" ,kdoctools)))
10240 (inputs
10241 `(("kcompletion" ,kcompletion)
10242 ("kconfig" ,kconfig)
10243 ("kcoreaddons" ,kcoreaddons)
10244 ("kcrash" ,kcrash)
10245 ("kdbusaddons" ,kdbusaddons)
10246 ("kguiaddons" ,kguiaddons)
10247 ("ki18n" ,ki18n)
10248 ("kwidgetsaddons" ,kwidgetsaddons)
10249 ("kxmlgui" ,kxmlgui)
10250 ("libkdegames" ,libkdegames)
10251 ("qtbase" ,qtbase)
10252 ("qtdeclarative" ,qtdeclarative)
10253 ("qtsvg" ,qtsvg)))
10254 (home-page "https://games.kde.org/")
10255 (synopsis "Simple turn-based strategy game")
10256 (description "Konquest is the KDE version of Gnu-Lactic Konquest. Players
10257 conquer other planets by sending ships to them. The goal is to build an
10258 interstellar empire and ultimately conquer all other player's planets. The
10259 game can be played with up to nine empires, commanded either by the computer
10260 or by puny earthlings.
10261
10262 This package is part of the KDE games module.")
10263 (license (list license:gpl2+ license:fdl1.2+))))
10264
10265 (define-public kbounce
10266 (package
10267 (name "kbounce")
10268 (version "20.12.0")
10269 (source
10270 (origin
10271 (method url-fetch)
10272 (uri (string-append "mirror://kde/stable/release-service/"
10273 version "/src/kbounce-" version ".tar.xz"))
10274 (sha256
10275 (base32 "0ymy0z1qlw3n653xs3dsa1xm78q4xaj09dnnci4km77rzis26vb6"))))
10276 (build-system qt-build-system)
10277 (native-inputs
10278 `(("extra-cmake-modules" ,extra-cmake-modules)
10279 ("kdoctools" ,kdoctools)))
10280 (inputs
10281 `(("kcompletion" ,kcompletion)
10282 ("kconfigwidgets" ,kconfigwidgets)
10283 ("kcoreaddons" ,kcoreaddons)
10284 ("kcrash" ,kcrash)
10285 ("kdbusaddons" ,kdbusaddons)
10286 ("ki18n" ,ki18n)
10287 ("kio" ,kio)
10288 ("kwidgetsaddons" ,kwidgetsaddons)
10289 ("kxmlgui" ,kxmlgui)
10290 ("libkdegames" ,libkdegames)
10291 ("qtbase" ,qtbase)
10292 ("qtdeclarative" ,qtdeclarative)
10293 ("qtsvg" ,qtsvg)))
10294 (home-page "https://games.kde.org/")
10295 (synopsis "Jezzball arcade game")
10296 (description "KBounce is a single player arcade game with the elements of
10297 puzzle. It is played on a field, surrounded by wall, with two or more balls
10298 bouncing around within the walls. The object of the game is to build new
10299 walls to decrease the size of the active field.
10300
10301 This package is part of the KDE games module.")
10302 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
10303
10304 (define-public kblocks
10305 (package
10306 (name "kblocks")
10307 (version "20.12.0")
10308 (source
10309 (origin
10310 (method url-fetch)
10311 (uri (string-append "mirror://kde/stable/release-service/"
10312 version "/src/kblocks-" version ".tar.xz"))
10313 (sha256
10314 (base32 "09yfm9mzbamp294cvc5finq6ilxvxr68i0dnb0m72pa4sfzmij32"))))
10315 (build-system qt-build-system)
10316 (native-inputs
10317 `(("extra-cmake-modules" ,extra-cmake-modules)
10318 ("kdoctools" ,kdoctools)))
10319 (inputs
10320 `(("kcompletion" ,kcompletion)
10321 ("kconfig" ,kconfig)
10322 ("kconfigwidgets" ,kconfigwidgets)
10323 ("kcoreaddons" ,kcoreaddons)
10324 ("kcrash" ,kcrash)
10325 ("kdbusaddons" ,kdbusaddons)
10326 ("ki18n" ,ki18n)
10327 ("kwidgetsaddons" ,kwidgetsaddons)
10328 ("kxmlgui" ,kxmlgui)
10329 ("libkdegames" ,libkdegames)
10330 ("qtbase" ,qtbase)
10331 ("qtdeclarative" ,qtdeclarative)
10332 ("qtsvg" ,qtsvg)))
10333 (home-page "https://games.kde.org/")
10334 (synopsis "Single player falling blocks puzzle game")
10335 (description "KBlocks is the classic Tetris-like falling blocks game.
10336
10337 The idea is to stack the falling blocks to create horizontal lines without any
10338 gaps. When a line is completed it is removed, and more space is available in
10339 the play area. When there is not enough space for blocks to fall, the game is
10340 over.
10341
10342 This package is part of the KDE games module.")
10343 (license (list license:gpl2+ license:fdl1.2+))))
10344
10345 (define-public ksudoku
10346 (package
10347 (name "ksudoku")
10348 (version "20.12.0")
10349 (source
10350 (origin
10351 (method url-fetch)
10352 (uri (string-append "mirror://kde/stable/release-service/"
10353 version "/src/ksudoku-" version ".tar.xz"))
10354 (sha256
10355 (base32 "0pj6ry7ak1rnpb93mqypaxrcbmrhwg9ir6zhb3ybzfkfcrh67g12"))))
10356 (build-system qt-build-system)
10357 (native-inputs
10358 `(("extra-cmake-modules" ,extra-cmake-modules)
10359 ("kdoctools" ,kdoctools)))
10360 (inputs
10361 `(("karchive" ,karchive)
10362 ("kconfig" ,kconfig)
10363 ("kconfigwidgets" ,kconfigwidgets)
10364 ("kcoreaddons" ,kcoreaddons)
10365 ("kcrash" ,kcrash)
10366 ("kguiaddons" ,kguiaddons)
10367 ("ki18n" ,ki18n)
10368 ("kiconthemes" ,kiconthemes)
10369 ("kio" ,kio)
10370 ("kwidgetsaddons" ,kwidgetsaddons)
10371 ("kxmlgui" ,kxmlgui)
10372 ("libkdegames" ,libkdegames)
10373 ("glu" ,glu)
10374 ("qtbase" ,qtbase)
10375 ("qtdeclarative" ,qtdeclarative)
10376 ("qtsvg" ,qtsvg)))
10377 (home-page "https://games.kde.org/")
10378 (synopsis "Sudoku puzzle game and solver")
10379 (description "KSudoku is a Sudoku game and solver, supporting a range of
10380 2D and 3D Sudoku variants. In addition to playing Sudoku, it can print Sudoku
10381 puzzle sheets and find the solution to any Sudoku puzzle.
10382
10383 The word Sudoku means \"single number in an allotted place\" in Japanese.
10384 These are the basic rules: Every Sudoku is a square divided into 3x3
10385 subsquares with 3x3 cells each.
10386
10387 Some cells are filled with a number at the beginning. The remaining ones are
10388 to be filled by the player using numbers from 1 to 9, without repeating a
10389 number twice on each column, row or subsquare (each of them must contain only
10390 one 1, one 2, one 3, and so on). The game requires logic and patience.
10391 Solving takes usually 10 to 30 minutes, depending on puzzle level, your skill
10392 and experience.
10393
10394 The numerals in Sudoku puzzles are used for convenience (for example in 16x16
10395 board we use letters): arithmetic relationships between numbers are
10396 irrelevant.
10397
10398 This program supports also 16x16 games with numbers from 1 to 16 and 256
10399 cells with 16 cols, rows and subsquares!
10400
10401 More information at http://en.wikipedia.org/wiki/Sudoku
10402
10403 This package is part of the KDE games module.")
10404 (license (list license:gpl2+ license:fdl1.2+))))
10405
10406 (define-public klines
10407 (package
10408 (name "klines")
10409 (version "20.12.0")
10410 (source
10411 (origin
10412 (method url-fetch)
10413 (uri (string-append "mirror://kde/stable/release-service/" version
10414 "/src/klines-" version ".tar.xz"))
10415 (sha256
10416 (base32 "0y8lnwawrkl4ixn7v4dg48k2zpr083krv7dv4d94b2dpkh7xfvih"))))
10417 (build-system qt-build-system)
10418 (native-inputs
10419 `(("extra-cmake-modules" ,extra-cmake-modules)
10420 ("kdoctools" ,kdoctools)))
10421 (inputs
10422 `(("kcompletion" ,kcompletion)
10423 ("kconfigwidgets" ,kconfigwidgets)
10424 ("kcoreaddons" ,kcoreaddons)
10425 ("kcrash" ,kcrash)
10426 ("kdbusaddons" ,kdbusaddons)
10427 ("ki18n" ,ki18n)
10428 ("kwidgetsaddons" ,kwidgetsaddons)
10429 ("kxmlgui" ,kxmlgui)
10430 ("libkdegames" ,libkdegames)
10431 ("qtbase" ,qtbase)
10432 ("qtdeclarative" ,qtdeclarative)))
10433 (home-page "https://games.kde.org/")
10434 (synopsis "Place 5 equal pieces together, but wait, there are 3 new ones")
10435 (description "KLines is a simple but highly addictive one player game.
10436
10437 The player has to move the colored balls around the game board, gathering them
10438 into the lines of the same color by five. Once the line is complete it is
10439 removed from the board, therefore freeing precious space. In the same time
10440 the new balls keep arriving by three after each move, filling up the game
10441 board.
10442
10443 KLines is a single-player game where the player removes colored balls from the
10444 board by arranging them into lines of five or more. However, every time the
10445 player moves a ball, three more balls are added to the board.
10446
10447 This package is part of the KDE games module.")
10448 (license (list license:gpl2+ license:fdl1.2+))))
10449
10450 (define-public kgoldrunner
10451 (package
10452 (name "kgoldrunner")
10453 (version "20.12.0")
10454 (source
10455 (origin
10456 (method url-fetch)
10457 (uri (string-append "mirror://kde/stable/release-service/" version
10458 "/src/kgoldrunner-" version ".tar.xz"))
10459 (sha256
10460 (base32 "17ra5d3r9ajy2inj17gwd5xphzhvbzx5kpvdwyj6msx4dd9wxgfi"))))
10461 (build-system qt-build-system)
10462 (native-inputs
10463 `(("extra-cmake-modules" ,extra-cmake-modules)
10464 ("kdoctools" ,kdoctools)))
10465 (inputs
10466 `(("kcompletion" ,kcompletion)
10467 ("kcoreaddons" ,kcoreaddons)
10468 ("kcrash" ,kcrash)
10469 ("kdbusaddons" ,kdbusaddons)
10470 ("ki18n" ,ki18n)
10471 ("kio" ,kio)
10472 ("kwidgetsaddons" ,kwidgetsaddons)
10473 ("kxmlgui" ,kxmlgui)
10474 ("libkdegames" ,libkdegames)
10475 ("qtbase" ,qtbase)
10476 ("qtdeclarative" ,qtdeclarative)))
10477 (home-page "https://games.kde.org/")
10478 (synopsis "Action and puzzle solving game")
10479 (description "KGoldrunner is an action game where the hero runs through a
10480 maze, climbs stairs, dig holes and dodges enemies in order to collect all the
10481 gold nuggets and escape to the next level. Your enemies are also after the
10482 gold. Worse still, they are after you!.
10483
10484 KGoldrunner is a fast-paced platform game where the player must navigate a
10485 maze while collecting gold nuggets and avoiding enemies. A variety of level
10486 packs are included, as well as an editor to create new levels.
10487
10488 This package is part of the KDE games module.")
10489 (license (list license:gpl2+ license:fdl1.2+))))
10490
10491 (define-public kdiamond
10492 (package
10493 (name "kdiamond")
10494 (version "20.12.0")
10495 (source
10496 (origin
10497 (method url-fetch)
10498 (uri (string-append "mirror://kde/stable/release-service/" version
10499 "/src/kdiamond-" version ".tar.xz"))
10500 (sha256
10501 (base32 "1iyxrx3422asa58kh0siwvi1svds5kccrym6gdfpdhlmhmciqlzi"))))
10502 (build-system qt-build-system)
10503 (native-inputs
10504 `(("extra-cmake-modules" ,extra-cmake-modules)
10505 ("kdoctools" ,kdoctools)))
10506 (inputs
10507 `(("kcompletion" ,kcompletion)
10508 ("kconfig" ,kconfig)
10509 ("kconfigwidgets" ,kconfigwidgets)
10510 ("kcoreaddons" ,kcoreaddons)
10511 ("kcrash" ,kcrash)
10512 ("kdbusaddons" ,kdbusaddons)
10513 ("ki18n" ,ki18n)
10514 ("knotifications" ,knotifications)
10515 ("knotifyconfig" ,knotifyconfig)
10516 ("kwidgetsaddons" ,kwidgetsaddons)
10517 ("kxmlgui" ,kxmlgui)
10518 ("libkdegames" ,libkdegames)
10519 ("qtbase" ,qtbase)
10520 ("qtdeclarative" ,qtdeclarative)))
10521 (home-page "https://games.kde.org/")
10522 (synopsis "Three-in-a-row game")
10523 (description "KDiamond is a three-in-a-row game like Bejeweled. It
10524 features unlimited fun with randomly generated games and five difficulty
10525 levels with varying number of diamond colors and board sizes.
10526
10527 This package is part of the KDE games module.")
10528 (license (list license:gpl2+ license:fdl1.2+))))
10529
10530 (define-public kfourinline
10531 (package
10532 (name "kfourinline")
10533 (version "20.12.0")
10534 (source
10535 (origin
10536 (method url-fetch)
10537 (uri (string-append "mirror://kde/stable/release-service/" version
10538 "/src/kfourinline-" version ".tar.xz"))
10539 (sha256
10540 (base32 "0plx3lv35fc8q9svbyl71mms3ji6zn58j306bvm1f8kkgg0x395b"))))
10541 (build-system qt-build-system)
10542 (native-inputs
10543 `(("extra-cmake-modules" ,extra-cmake-modules)
10544 ("kdoctools" ,kdoctools)))
10545 (inputs
10546 `(("kcompletion" ,kcompletion)
10547 ("kconfig" ,kconfig)
10548 ("kconfigwidgets" ,kconfigwidgets)
10549 ("kcoreaddons" ,kcoreaddons)
10550 ("kcrash" ,kcrash)
10551 ("kdnssd" ,kdnssd)
10552 ("ki18n" ,ki18n)
10553 ("kxmlgui" ,kxmlgui)
10554 ("libkdegames" ,libkdegames)
10555 ("qtbase" ,qtbase)
10556 ("qtdeclarative" ,qtdeclarative)
10557 ("qtsvg" ,qtsvg)))
10558 (home-page "https://games.kde.org/")
10559 (synopsis "Place 4 pieces in a row")
10560 (description "KFourInLine is a board game for two players based on the
10561 Connect-Four game.
10562
10563 KFourInLine is a game where two players take turns dropping pieces into a
10564 grid, the winner being the first to place four pieces in a line.
10565
10566 This package is part of the KDE games module.")
10567 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
10568
10569 (define-public kblackbox
10570 (package
10571 (name "kblackbox")
10572 (version "20.12.0")
10573 (source
10574 (origin
10575 (method url-fetch)
10576 (uri (string-append "mirror://kde/stable/release-service/" version
10577 "/src/kblackbox-" version ".tar.xz"))
10578 (sha256
10579 (base32 "0la5w44b0gl72g3wfp0pw8gwnm287lh7nd9k5ikpszw5nn49db0h"))))
10580 (build-system qt-build-system)
10581 (native-inputs
10582 `(("extra-cmake-modules" ,extra-cmake-modules)
10583 ("kdoctools" ,kdoctools)))
10584 (inputs
10585 `(("karchive" ,karchive)
10586 ("kcompletion" ,kcompletion)
10587 ("kconfig" ,kconfig)
10588 ("kcoreaddons" ,kcoreaddons)
10589 ("kcrash" ,kcrash)
10590 ("kdbusaddons" ,kdbusaddons)
10591 ("ki18n" ,ki18n)
10592 ("ktextwidgets" ,ktextwidgets)
10593 ("kxmlgui" ,kxmlgui)
10594 ("libkdegames" ,libkdegames)
10595 ("qtbase" ,qtbase)
10596 ("qtdeclarative" ,qtdeclarative)
10597 ("qtsvg" ,qtsvg)))
10598 (home-page "https://games.kde.org/")
10599 (synopsis "Find atoms in a grid by shooting electrons")
10600 (description "KBlackbox is a game of hide and seek played on a grid of
10601 boxes where the computer has hidden several balls. The position of the hidden
10602 balls can be deduced by shooting beams into the box
10603
10604 KBlackBox is a game of hide and seek played on an grid of boxes, where the
10605 player shoots rays into the grid to deduce the positions of hidden objects.
10606
10607 This package is part of the KDE games module.")
10608 (license (list license:gpl2+ license:fdl1.2+))))
10609
10610 (define-public knetwalk
10611 (package
10612 (name "knetwalk")
10613 (version "20.12.0")
10614 (source
10615 (origin
10616 (method url-fetch)
10617 (uri (string-append "mirror://kde/stable/release-service/" version
10618 "/src/knetwalk-" version ".tar.xz"))
10619 (sha256
10620 (base32 "060kj06vpigdy570izsjfgnmqqrpmb8bkr9arqc109hg3avl5wjz"))))
10621 (build-system qt-build-system)
10622 (native-inputs
10623 `(("extra-cmake-modules" ,extra-cmake-modules)
10624 ("kdoctools" ,kdoctools)))
10625 (inputs
10626 `(("kcompletion" ,kcompletion)
10627 ("kconfig" ,kconfig)
10628 ("kconfigwidgets" ,kconfigwidgets)
10629 ("kcoreaddons" ,kcoreaddons)
10630 ("kcrash" ,kcrash)
10631 ("kdbusaddons" ,kdbusaddons)
10632 ("ki18n" ,ki18n)
10633 ("ktextwidgets" ,ktextwidgets)
10634 ("kwidgetsaddons" ,kwidgetsaddons)
10635 ("kxmlgui" ,kxmlgui)
10636 ("libkdegames" ,libkdegames)
10637 ("qtbase" ,qtbase)
10638 ("qtdeclarative" ,qtdeclarative)))
10639 (home-page "https://games.kde.org/")
10640 (synopsis "Turn the board pieces to get all computers connected")
10641 (description "KNetWalk is a small game where you have to build up a
10642 computer network by rotating the wires to connect the terminals to the server.
10643 When the network is build, a highscore-list comes up where competitions can be
10644 fought out.
10645
10646 KNetwalk is a puzzle game where the player arranges sections of wire to
10647 connect all the computers on the board.
10648
10649 This package is part of the KDE games module.")
10650 (license (list license:gpl2+ license:fdl1.2+))))
10651
10652 (define-public bomber
10653 (package
10654 (name "bomber")
10655 (version "20.12.0")
10656 (source
10657 (origin
10658 (method url-fetch)
10659 (uri (string-append "mirror://kde/stable/release-service/" version
10660 "/src/bomber-" version ".tar.xz"))
10661 (sha256
10662 (base32 "1fjcwm591jgx3bgqpi0j5fnb2l2r2h3r6lav3vhaxz4rkf56pg2a"))))
10663 (build-system qt-build-system)
10664 (native-inputs
10665 `(("extra-cmake-modules" ,extra-cmake-modules)
10666 ("kdoctools" ,kdoctools)))
10667 (inputs
10668 `(("kcompletiom" ,kcompletion)
10669 ("kconfig" ,kconfig)
10670 ("kcoreaddons" ,kcoreaddons)
10671 ("kcrash" ,kcrash)
10672 ("kdbusaddons" ,kdbusaddons)
10673 ("ki18n" ,ki18n)
10674 ("kxmlgui" ,kxmlgui)
10675 ("libkdegames" ,libkdegames)
10676 ("qtbase" ,qtbase)
10677 ("qtdeclarative" ,qtdeclarative)))
10678 (home-page "https://games.kde.org/")
10679 (synopsis "Arcade bombing game")
10680 (description "Bomber is a single player arcade game.
10681
10682 The player is invading various cities in a plane that is decreasing in height.
10683 The goal of the game is to destroy all the buildings and advance to the next
10684 level. Each level gets a bit harder by increasing the speed of the plane and
10685 the height of the buildings.
10686
10687 Bomber is a game where you fly a spaceship and attempt to bomb the buildings
10688 below you. Each pass the spaceship makes, it gets lower and lower. If you've
10689 not destroyed a building in your path, you will crash into it.
10690
10691 This package is part of the KDE games module.")
10692 (license (list license:gpl2+ license:fdl1.2+))))
10693
10694 (define-public granatier
10695 (package
10696 (name "granatier")
10697 (version "20.12.0")
10698 (source
10699 (origin
10700 (method url-fetch)
10701 (uri (string-append "mirror://kde/stable/release-service/" version
10702 "/src/granatier-" version ".tar.xz"))
10703 (sha256
10704 (base32 "1fyh7zyacb3pnlfd29jw2jmyl8a7sjw354pi234nd5x5999xw5z6"))))
10705 (build-system qt-build-system)
10706 (native-inputs
10707 `(("extra-cmake-modules" ,extra-cmake-modules)
10708 ("kdoctools" ,kdoctools)))
10709 (inputs
10710 `(("kcompletion" ,kcompletion)
10711 ("kconfig" ,kconfig)
10712 ("kconfigwidgets" ,kconfigwidgets)
10713 ("kcoreaddons" ,kcoreaddons)
10714 ("kcrash" ,kcrash)
10715 ("kdbusaddons" ,kdbusaddons)
10716 ("ki18n" ,ki18n)
10717 ("knewstuff" ,knewstuff)
10718 ("kwidgetsaddons" ,kwidgetsaddons)
10719 ("kxmlgui" ,kxmlgui)
10720 ("libkdegames" ,libkdegames)
10721 ("qtbase" ,qtbase)
10722 ("qtdeclarative" ,qtdeclarative)
10723 ("qtsvg" ,qtsvg)))
10724 (home-page "https://games.kde.org/")
10725 (synopsis "Bomberman clone")
10726 (description "Granatier is a clone of the classic Bomberman game,
10727 inspired by the work of the Clanbomber clone.
10728
10729 This package is part of the KDE games module.")
10730 (license (list license:gpl2+ license:fdl1.2+))))
10731
10732 (define-public ksirk
10733 (package
10734 (name "ksirk")
10735 (version "20.12.0")
10736 (source
10737 (origin
10738 (method url-fetch)
10739 (uri (string-append "mirror://kde/stable/release-service/" version
10740 "/src/ksirk-" version ".tar.xz"))
10741 (sha256
10742 (base32 "10y7nm0x6zcc0gh3am69bbxyyb8azbbfyrdqsa023ggr7n04cn21"))))
10743 (build-system qt-build-system)
10744 (native-inputs
10745 `(("extra-cmake-modules" ,extra-cmake-modules)
10746 ("kdoctools" ,kdoctools)))
10747 (inputs
10748 `(("kcrash" ,kcrash)
10749 ("ki18n" ,ki18n)
10750 ("kiconthemes" ,kiconthemes)
10751 ("kio" ,kio)
10752 ("knewstuff" ,knewstuff)
10753 ("kwallet" ,kwallet)
10754 ("kxmlgui" ,kxmlgui)
10755 ("libkdegames" ,libkdegames)
10756 ("phonon" ,phonon)
10757 ("qca" ,qca)
10758 ("qtbase" ,qtbase)
10759 ("qtdeclarative" ,qtdeclarative)
10760 ("qtsvg" ,qtsvg)
10761 ("zlib" ,zlib)))
10762 (home-page "https://games.kde.org/")
10763 (synopsis "Computerized version of the well known strategy board game
10764 'Risk'")
10765 (description "KsirK is a multi-player network-enabled game. The goal of
10766 the game is simply to conquer the world by attacking your neighbors with your
10767 armies.
10768
10769 At the beginning of the game, countries are distributed to all the players.
10770 Each country contains one army represented by an infantryman. Each player has
10771 some armies to distribute to his countries. On each turn, each player can
10772 attack his neighbours, eventually conquering one or more countries. At the
10773 end of each turn, some bonus armies are distributed to the players in function
10774 of the number of countries they own. The winner is the player that conquered
10775 all the world.
10776
10777 Features:
10778 @itemize
10779 @item Support for 1-6 human or computer players
10780 @item Multi-player gaming over a network
10781 @item You can easily create new skins with SVG graphics and the skin editor
10782 @item Hot New Stuff support. You can easily download and install new skins
10783 @end itemize
10784
10785 This package is part of the KDE games module.")
10786 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
10787
10788 (define-public palapeli
10789 (package
10790 (name "palapeli")
10791 (version "20.12.0")
10792 (source
10793 (origin
10794 (method url-fetch)
10795 (uri (string-append "mirror://kde/stable/release-service/" version
10796 "/src/palapeli-" version ".tar.xz"))
10797 (sha256
10798 (base32 "0xxz9g4zxljlg20g88a5lkbwzzm9yg4vxnrfigk8m018cz0nqd5b"))))
10799 (build-system qt-build-system)
10800 (native-inputs
10801 `(("extra-cmake-modules" ,extra-cmake-modules)
10802 ("kdoctools" ,kdoctools)))
10803 (inputs
10804 `(("karchive" ,karchive)
10805 ("kcompletion" ,kcompletion)
10806 ("kconfig" ,kconfig)
10807 ("kconfigwidgets" ,kconfigwidgets)
10808 ("kcoreaddons" ,kcoreaddons)
10809 ("kcrash" ,kcrash)
10810 ("kcrash" ,kcrash)
10811 ("ki18n" ,ki18n)
10812 ("ki18n" ,ki18n)
10813 ("kio" ,kio)
10814 ("kitemviews" ,kitemviews)
10815 ("knotifications" ,knotifications)
10816 ("kservice" ,kservice)
10817 ("kwidgetsaddons" ,kwidgetsaddons)
10818 ("kxmlgui" ,kxmlgui)
10819 ("libkdegames" ,libkdegames)
10820 ("qtbase" ,qtbase)
10821 ("qtdeclarative" ,qtdeclarative)
10822 ("qtsvg" ,qtsvg)
10823 ("shared-mime-info" ,shared-mime-info)))
10824 (home-page "https://games.kde.org/")
10825 (synopsis "Jigsaw puzzle game")
10826 (description "Palapeli is a jigsaw puzzle game. Unlike other games in
10827 that genre, you are not limited to aligning pieces on imaginary grids. The
10828 pieces are freely moveable. Also, Palapeli features real persistency, i.e.
10829 everything you do is saved on your disk immediately.
10830
10831 Palapeli is the Finnish word for jigsaw puzzle.
10832
10833 This package is part of the KDE games module.")
10834 (license license:gpl2+)))
10835
10836 (define-public kiriki
10837 (package
10838 (name "kiriki")
10839 (version "20.12.0")
10840 (source
10841 (origin
10842 (method url-fetch)
10843 (uri (string-append "mirror://kde/stable/release-service/" version
10844 "/src/kiriki-" version ".tar.xz"))
10845 (sha256
10846 (base32 "0milc8fl1rj4yrwdvm60ampd47dyiys1xvqi5f0g7y6mgymgyk4x"))))
10847 (build-system qt-build-system)
10848 (native-inputs
10849 `(("extra-cmake-modules" ,extra-cmake-modules)
10850 ("kdoctools" ,kdoctools)))
10851 (inputs
10852 `(("kcompletion" ,kcompletion)
10853 ("kconfig" ,kconfig)
10854 ("kconfigwidgets" ,kconfigwidgets)
10855 ("kcoreaddons" ,kcoreaddons)
10856 ("kcrash" ,kcrash)
10857 ("kdbusaddons" ,kdbusaddons)
10858 ("ki18n" ,ki18n)
10859 ("kiconthemes" ,kiconthemes)
10860 ("kxmlgui" ,kxmlgui)
10861 ("libkdegames" ,libkdegames)
10862 ("qtbase" ,qtbase)
10863 ("qtdeclarative" ,qtdeclarative)))
10864 (home-page "https://games.kde.org/")
10865 (synopsis "Yahtzee dice game")
10866 (description "Kiriki is an addictive and fun dice game, designed to be
10867 played by as many as six players.
10868
10869 Participants have to collect points by rolling five dice for up to three times
10870 per single turn to make combinations with the highest score.
10871
10872 This package is part of the KDE games module.")
10873 (license (list license:gpl2+ license:fdl1.2+))))
10874
10875 (define-public kigo
10876 (package
10877 (name "kigo")
10878 (version "20.12.0")
10879 (source
10880 (origin
10881 (method url-fetch)
10882 (uri (string-append "mirror://kde/stable/release-service/" version
10883 "/src/kigo-" version ".tar.xz"))
10884 (sha256
10885 (base32 "088752yzmfsnppd27p8hld4x5s7sw5fagm08024l5ra1mlicdfz9"))))
10886 (build-system qt-build-system)
10887 (native-inputs
10888 `(("extra-cmake-modules" ,extra-cmake-modules)
10889 ("kdoctools" ,kdoctools)))
10890 (inputs
10891 `(("kconfig" ,kconfig)
10892 ("kconfigwidgets" ,kconfigwidgets)
10893 ("kcoreaddons" ,kcoreaddons)
10894 ("kcrash" ,kcrash)
10895 ("kdbusaddons" ,kdbusaddons)
10896 ("ki18n" ,ki18n)
10897 ("kio" ,kio)
10898 ("knewstuff" ,knewstuff)
10899 ("ktextwidgets" ,ktextwidgets)
10900 ("kxmlgui" ,kxmlgui)
10901 ("libkdegames" ,libkdegames)
10902 ("qtbase" ,qtbase)
10903 ("qtdeclarative" ,qtdeclarative)
10904 ("qtsvg" ,qtsvg)))
10905 (home-page "https://games.kde.org/")
10906 (synopsis "Go board game")
10907 (description "Kigo is an open-source implementation of the popular Go
10908 game.
10909
10910 Go is a strategic board game for two players. It is also known as
10911 igo (Japanese), weiqi or wei ch'i (Chinese) or baduk (Korean). Go is noted
10912 for being rich in strategic complexity despite its simple rules. The game is
10913 played by two players who alternately place black and white stones (playing
10914 pieces, now usually made of glass or plastic) on the vacant intersections of a
10915 grid of 19x19 lines (9x9 or 13x13 for easier games).
10916
10917 You also need to install a go engine, e.g. @code{gnugo}.
10918
10919 This package is part of the KDE games module.")
10920 (license license:gpl3+)))
10921
10922 (define-public kubrick
10923 (package
10924 (name "kubrick")
10925 (version "20.12.0")
10926 (source
10927 (origin
10928 (method url-fetch)
10929 (uri (string-append "mirror://kde/stable/release-service/" version
10930 "/src/kubrick-" version ".tar.xz"))
10931 (sha256
10932 (base32 "0h3mypwd67sss08j5vvrih5f5ss85m9kax6412y40xmsm51lz2pq"))))
10933 (build-system qt-build-system)
10934 (native-inputs
10935 `(("extra-cmake-modules" ,extra-cmake-modules)
10936 ("kdoctools" ,kdoctools)))
10937 (inputs
10938 `(("glu" ,glu)
10939 ("kconfig" ,kconfig)
10940 ("kconfigwidgets" ,kconfigwidgets)
10941 ("kcoreaddons" ,kcoreaddons)
10942 ("kcrash" ,kcrash)
10943 ("ki18n" ,ki18n)
10944 ("kio" ,kio)
10945 ("kwidgetsaddons" ,kwidgetsaddons)
10946 ("kxmlgui" ,kxmlgui)
10947 ("libkdegames" ,libkdegames)
10948 ("qtbase" ,qtbase)
10949 ("qtdeclarative" ,qtdeclarative)
10950 ("qtsvg" ,qtsvg)))
10951 (home-page "https://games.kde.org/")
10952 (synopsis "Game based on Rubik's Cube")
10953 (description "Kubrick is a game based on the Rubik's Cube puzzle.
10954
10955 The cube sizes range from 2x2x2 up to 6x6x6, or you can play with irregular
10956 \"bricks\" such as 5x3x2 or \"mats\" such as 6x4x1 or 2x2x1. The game has a
10957 selection of puzzles at several levels of difficulty, as well as demos of
10958 pretty patterns and solution moves, or you can make up your own puzzles. The
10959 game has unlimited undo, redo, save and reload capabilities.
10960
10961 This package is part of the KDE games module.")
10962 (license (list license:gpl2+ license:fdl1.2+))))
10963
10964 (define-public lskat
10965 (package
10966 (name "lskat")
10967 (version "20.12.0")
10968 (source
10969 (origin
10970 (method url-fetch)
10971 (uri (string-append "mirror://kde/stable/release-service/" version
10972 "/src/lskat-" version ".tar.xz"))
10973 (sha256
10974 (base32 "1wg9zxp64kwjxqs4qw0h7j8yhgffbmvh8j9d4dgmz45dscngnjli"))))
10975 (build-system qt-build-system)
10976 (native-inputs
10977 `(("extra-cmake-modules" ,extra-cmake-modules)
10978 ("kdoctools" ,kdoctools)))
10979 (inputs
10980 `(("kcompletion" ,kcompletion)
10981 ("kconfig" ,kconfig)
10982 ("kcoreaddons" ,kcoreaddons)
10983 ("kcrash" ,kcrash)
10984 ("kguiaddons" ,kguiaddons)
10985 ("ki18n" ,ki18n)
10986 ("kwidgetsaddons" ,kwidgetsaddons)
10987 ("kxmlgui" ,kxmlgui)
10988 ("libkdegames" ,libkdegames)
10989 ("qtbase" ,qtbase)
10990 ("qtdeclarative" ,qtdeclarative)
10991 ("qtsvg" ,qtsvg)))
10992 (home-page "https://games.kde.org/")
10993 (synopsis "Lieutnant Skat card game")
10994 (description "Lieutnant Skat (from German \"Offiziersskat\") is a fun and
10995 engaging card game for two players, where the second player is either live
10996 opponent, or a built in artificial intelligence.
10997
10998 Lieutnant Skat is a simplified variant of the Skat card game for two players.
10999
11000 This package is part of the KDE games module.")
11001 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
11002
11003 (define-public kapman
11004 (package
11005 (name "kapman")
11006 (version "20.12.0")
11007 (source
11008 (origin
11009 (method url-fetch)
11010 (uri (string-append "mirror://kde/stable/release-service/" version
11011 "/src/kapman-" version ".tar.xz"))
11012 (sha256
11013 (base32 "14x3v6li4r3gzzwfd6ar9saq2rhc7yxs0sp9ygalzq8vq4d7i1kh"))))
11014 (build-system qt-build-system)
11015 (native-inputs
11016 `(("extra-cmake-modules" ,extra-cmake-modules)
11017 ("kdoctools" ,kdoctools)))
11018 (inputs
11019 `(("kcompletion" ,kcompletion)
11020 ("kconfig" ,kconfig)
11021 ("kconfigwidgets" ,kconfigwidgets)
11022 ("kcoreaddons" ,kcoreaddons)
11023 ("kcrash" ,kcrash)
11024 ("kdbusaddons" ,kdbusaddons)
11025 ("ki18n" ,ki18n)
11026 ("kxmlgui" ,kxmlgui)
11027 ("libkdegames" ,libkdegames)
11028 ("qtbase" ,qtbase)
11029 ("qtdeclarative" ,qtdeclarative)
11030 ("qtsvg" ,qtsvg)))
11031 (home-page "https://games.kde.org/")
11032 (synopsis "Pac-Man clone")
11033 (description "Kapman is a clone of the well known game Pac-Man.
11034
11035 You must run through the maze to eat all pills without being captured by a
11036 ghost. By eating an energizer, Kapman gets the ability to eat ghosts for a
11037 few seconds. When a stage is cleared of pills and energizer the player is
11038 taken to the next stage with slightly increased game speed
11039
11040 This package is part of the KDE games module.")
11041 (license (list license:gpl2+ license:fdl1.2+))))
11042
11043 (define-public kspaceduel
11044 (package
11045 (name "kspaceduel")
11046 (version "20.12.0")
11047 (source
11048 (origin
11049 (method url-fetch)
11050 (uri (string-append "mirror://kde/stable/release-service/" version
11051 "/src/kspaceduel-" version ".tar.xz"))
11052 (sha256
11053 (base32 "1aixh6ygif2cm1a5g32sl5y6b5x68139pzihaxq4334c6avamdai"))))
11054 (build-system qt-build-system)
11055 (native-inputs
11056 `(("extra-cmake-modules" ,extra-cmake-modules)
11057 ("kdoctools" ,kdoctools)))
11058 (inputs
11059 `(("kcompletion" ,kcompletion)
11060 ("kconfig" ,kconfig)
11061 ("kconfigwidgets" ,kconfigwidgets)
11062 ("kcoreaddons" ,kcoreaddons)
11063 ("kcrash" ,kcrash)
11064 ("kdbusaddons" ,kdbusaddons)
11065 ("ki18n" ,ki18n)
11066 ("kxmlgui" ,kxmlgui)
11067 ("libkdegames" ,libkdegames)
11068 ("qtbase" ,qtbase)
11069 ("qtdeclarative" ,qtdeclarative)
11070 ("qtsvg" ,qtsvg)))
11071 (home-page "https://games.kde.org/")
11072 (synopsis "Two player game with shooting spaceships flying around a sun")
11073 (description "KSpaceduel is a space battle game for one or two players,
11074 where two ships fly around a star in a struggle to be the only survivor.
11075
11076 This package is part of the KDE games module.")
11077 (license (list license:gpl2+ license:fdl1.2+))))
11078
11079 (define-public bovo
11080 (package
11081 (name "bovo")
11082 (version "20.12.0")
11083 (source
11084 (origin
11085 (method url-fetch)
11086 (uri (string-append "mirror://kde/stable/release-service/" version
11087 "/src/bovo-" version ".tar.xz"))
11088 (sha256
11089 (base32 "18qbac366m0xma3ary11q9zxz0wgnysppcl7kpypl6ic3nf61wqz"))))
11090 (build-system qt-build-system)
11091 (native-inputs
11092 `(("extra-cmake-modules" ,extra-cmake-modules)
11093 ("kdoctools" ,kdoctools)))
11094 (inputs
11095 `(("kcompletion" ,kcompletion)
11096 ("kcoreaddons" ,kcoreaddons)
11097 ("kcrash" ,kcrash)
11098 ("kdbusaddons" ,kdbusaddons)
11099 ("ki18n" ,ki18n)
11100 ("kxmlgui" ,kxmlgui)
11101 ("libkdegames" ,libkdegames)
11102 ("qtbase" ,qtbase)
11103 ("qtdeclarative" ,qtdeclarative)
11104 ("qtsvg" ,qtsvg)))
11105 (home-page "https://games.kde.org/")
11106 (synopsis "Classic pen and paper game: five in a line")
11107 (description "Bovo is a Gomoku (from Japanese 五目並べ - lit. \"five
11108 points\") like game for two players, where the opponents alternate in placing
11109 their respective pictogram on the game board. The winner is the first to
11110 complete a line of five markers. (Also known as: Connect Five, Five in a row,
11111 X and O, Naughts and Crosses)
11112
11113 This package is part of the KDE games module.")
11114 (license (list license:gpl2+ license:fdl1.2+))))
11115
11116 (define-public killbots
11117 (package
11118 (name "killbots")
11119 (version "20.12.0")
11120 (source
11121 (origin
11122 (method url-fetch)
11123 (uri (string-append "mirror://kde/stable/release-service/" version
11124 "/src/killbots-" version ".tar.xz"))
11125 (sha256
11126 (base32 "1296gww42nwnai7y6m2qpjqpyc30p7z9chfv5rv0n48jvdhva88y"))))
11127 (build-system qt-build-system)
11128 (native-inputs
11129 `(("extra-cmake-modules" ,extra-cmake-modules)
11130 ("kdoctools" ,kdoctools)))
11131 (inputs
11132 `(("kcompletion" ,kcompletion)
11133 ("kconfig" ,kconfig)
11134 ("kconfigwidgets" ,kconfigwidgets)
11135 ("kcoreaddons" ,kcoreaddons)
11136 ("kcrash" ,kcrash)
11137 ("kdbusaddons" ,kdbusaddons)
11138 ("ki18n" ,ki18n)
11139 ("kwidgetsaddons" ,kwidgetsaddons)
11140 ("kxmlgui" ,kxmlgui)
11141 ("libkdegames" ,libkdegames)
11142 ("qtbase" ,qtbase)
11143 ("qtdeclarative" ,qtdeclarative)))
11144 (home-page "https://games.kde.org/")
11145 (synopsis "Port of the classic BSD console game robots")
11146 (description "Killbots is a simple game of evading killer robots.
11147
11148 Who created the robots and why they have been programmed to destroy, no one
11149 knows. All that is known is that the robots are numerous and their sole
11150 objective is to destroy you. Fortunately for you, their creator has focused
11151 on quantity rather than quality and as a result the robots are severely
11152 lacking in intelligence. Your superior wit and a fancy teleportation device
11153 are your only weapons against the never-ending stream of mindless automatons.
11154
11155 This package is part of the KDE games module.")
11156 (license (list license:gpl2+ license:fdl1.2+))))
11157
11158 (define-public ksnakeduel
11159 (package
11160 (name "ksnakeduel")
11161 (version "20.12.0")
11162 (source
11163 (origin
11164 (method url-fetch)
11165 (uri (string-append "mirror://kde/stable/release-service/" version
11166 "/src/ksnakeduel-" version ".tar.xz"))
11167 (sha256
11168 (base32 "0mp6g258n3xzvgf23jnhkw10xgwqwqdzqfdc6r9jq6a6m8v77swz"))))
11169 (build-system qt-build-system)
11170 (native-inputs
11171 `(("extra-cmake-modules" ,extra-cmake-modules)
11172 ("kdoctools" ,kdoctools)))
11173 (inputs
11174 `(("kcompletion" ,kcompletion)
11175 ("kconfig" ,kconfig)
11176 ("kconfigwidgets" ,kconfigwidgets)
11177 ("kcoreaddons" ,kcoreaddons)
11178 ("kcrash" ,kcrash)
11179 ("kdbusaddons" ,kdbusaddons)
11180 ("kguiaddons" ,kguiaddons)
11181 ("ki18n" ,ki18n)
11182 ("kxmlgui" ,kxmlgui)
11183 ("libkdegames" ,libkdegames)
11184 ("qtbase" ,qtbase)
11185 ("qtdeclarative" ,qtdeclarative)
11186 ("qtsvg" ,qtsvg)))
11187 (home-page "https://games.kde.org/")
11188 (synopsis "Snake race played against the computer")
11189 (description "KSnakeDuel is a fast action game where you steer a snake
11190 which has to eat food. While eating the snake grows. But once a player
11191 collides with the other snake or the wall the game is lost. This becomes of
11192 course more and more difficult the longer the snakes grow.
11193
11194 This package is part of the KDE games module.")
11195 (license (list license:gpl2+ license:fdl1.2+))))
11196
11197 (define-public kollision
11198 (package
11199 (name "kollision")
11200 (version "20.12.0")
11201 (source
11202 (origin
11203 (method url-fetch)
11204 (uri (string-append "mirror://kde/stable/release-service/" version
11205 "/src/kollision-" version ".tar.xz"))
11206 (sha256
11207 (base32 "180ybafizpwjsg80npy0l9142cjsnlyxwv9dz3bq6r8v4smn2g6b"))))
11208 (build-system qt-build-system)
11209 (native-inputs
11210 `(("extra-cmake-modules" ,extra-cmake-modules)
11211 ("kdoctools" ,kdoctools)))
11212 (inputs
11213 `(("kcompletion" ,kcompletion)
11214 ("kconfig" ,kconfig)
11215 ("kcoreaddons" ,kcoreaddons)
11216 ("kcrash" ,kcrash)
11217 ("kdbusaddons" ,kdbusaddons)
11218 ("ki18n" ,ki18n)
11219 ("kwidgetsaddons" ,kwidgetsaddons)
11220 ("kxmlgui" ,kxmlgui)
11221 ("libkdegames" ,libkdegames)
11222 ("qtbase" ,qtbase)
11223 ("qtdeclarative" ,qtdeclarative)))
11224 (home-page "https://games.kde.org/")
11225 (synopsis "Simple ball dodging game")
11226 (description "In Kollision you use mouse to control a small blue ball in a
11227 closed space environment filled with small red balls, which move about
11228 chaotically. Your goal is to avoid touching any of those red balls with your
11229 blue one, because the moment you do the game will be over. The longer you can
11230 stay in game the higher will your score be.
11231
11232 This package is part of the KDE games module.")
11233 (license (list license:gpl2+ license:fdl1.2+))))
11234
11235 (define-public knavalbattle
11236 (package
11237 (name "knavalbattle")
11238 (version "20.12.0")
11239 (source
11240 (origin
11241 (method url-fetch)
11242 (uri (string-append "mirror://kde/stable/release-service/" version
11243 "/src/knavalbattle-" version ".tar.xz"))
11244 (sha256
11245 (base32 "03rqf4avn61b0v340ymmzgp7s0axygjgxq1nlp5aaqbx70zcb4lq"))))
11246 (build-system qt-build-system)
11247 (native-inputs
11248 `(("extra-cmake-modules" ,extra-cmake-modules)
11249 ("kdoctools" ,kdoctools)))
11250 (inputs
11251 `(("kauth" ,kauth)
11252 ("kcompletion" ,kcompletion)
11253 ("kconfig" ,kconfig)
11254 ("kconfigwidgets" ,kconfigwidgets)
11255 ("kcoreaddons" ,kcoreaddons)
11256 ("kcrash" ,kcrash)
11257 ("kdbusaddons" ,kdbusaddons)
11258 ("kdnssd" ,kdnssd)
11259 ("ki18n" ,ki18n)
11260 ("ktextwidgets" ,ktextwidgets)
11261 ("kxmlgui" ,kxmlgui)
11262 ("libkdegames" ,libkdegames)
11263 ("qtbase" ,qtbase)
11264 ("qtdeclarative" ,qtdeclarative)))
11265 (home-page "https://games.kde.org/")
11266 (synopsis "Battleship board game with built-in game server")
11267 (description "KBattleship is a Battle Ship game for KDE.
11268
11269 Ships are placed on a board which represents the sea. Players try to hit each
11270 others ships in turns without knowing where they are placed. The first player
11271 to destroy all ships wins the game.
11272
11273 This package is part of the KDE games module.")
11274 (license (list license:gpl2+ license:fdl1.2+))))
11275
11276 (define-public kreversi
11277 (package
11278 (name "kreversi")
11279 (version "20.08.3")
11280 (source
11281 (origin
11282 (method url-fetch)
11283 (uri (string-append "mirror://kde/stable/release-service/" version
11284 "/src/kreversi-" version ".tar.xz"))
11285 (sha256
11286 (base32 "0d3y072q61xcik9lf0pz0c9njvarwlvf6hqv5fp5jyqaf2902pmi"))))
11287 (build-system qt-build-system)
11288 (native-inputs
11289 `(("extra-cmake-modules" ,extra-cmake-modules)
11290 ("kdoctools" ,kdoctools)))
11291 (inputs
11292 `(("kconfig" ,kconfig)
11293 ("kconfigwidgets" ,kconfigwidgets)
11294 ("kcoreaddons" ,kcoreaddons)
11295 ("kcrash" ,kcrash)
11296 ("kdbusaddons" ,kdbusaddons)
11297 ("kdeclarative" ,kdeclarative)
11298 ("ki18n" ,ki18n)
11299 ("kiconthemes" ,kiconthemes)
11300 ("kio" ,kio)
11301 ("kxmlgui" ,kxmlgui)
11302 ("libkdegames" ,libkdegames)
11303 ("qtbase" ,qtbase)
11304 ("qtdeclarative" ,qtdeclarative)
11305 ("qtsvg" ,qtsvg)))
11306 (home-page "https://games.kde.org/")
11307 (synopsis "Old reversi board game, also known as othello")
11308 (description "KReversi is a simple one player strategy game played
11309 against the computer.
11310
11311 If a player's piece is captured by an opposing player, that piece is turned
11312 over to reveal the color of that player. A winner is declared when one player
11313 has more pieces of his own color on the board and there are no more possible
11314 moves.
11315
11316 This package is part of the KDE games module.")
11317 (license (list license:gpl2+ license:fdl1.2+))))
11318
11319 (define-public ksquares
11320 (package
11321 (name "ksquares")
11322 (version "20.12.0")
11323 (source
11324 (origin
11325 (method url-fetch)
11326 (uri (string-append "mirror://kde/stable/release-service/" version
11327 "/src/ksquares-" version ".tar.xz"))
11328 (sha256
11329 (base32 "0chd30byl2kww1k699vkygrxq2wdyvi84m2bimk23q96fl8h831y"))))
11330 (build-system qt-build-system)
11331 (native-inputs
11332 `(("extra-cmake-modules" ,extra-cmake-modules)
11333 ("kdoctools" ,kdoctools)))
11334 (inputs
11335 `(("kcompletion" ,kcompletion)
11336 ("kconfig" ,kconfig)
11337 ("kconfigwidgets" ,kconfigwidgets)
11338 ("kcoreaddons" ,kcoreaddons)
11339 ("kcrash" ,kcrash)
11340 ("kdbusaddons" ,kdbusaddons)
11341 ("ki18n" ,ki18n)
11342 ("kwidgetsaddons" ,kwidgetsaddons)
11343 ("kxmlgui" ,kxmlgui)
11344 ("libkdegames" ,libkdegames)
11345 ("qtbase" ,qtbase)
11346 ("qtdeclarative" ,qtdeclarative)))
11347 (home-page "https://games.kde.org/")
11348 (synopsis "Dots and Boxes game")
11349 (description "KSquares is an implementation of the popular paper based
11350 game Squares. Two players take turns connecting dots on a grid to complete
11351 squares, the player with the most squares wins.
11352
11353 This package is part of the KDE games module.")
11354 (license (list license:gpl2+ license:lgpl2.0+ license:fdl1.2+))))
11355
11356 (define-public kjumpingcube
11357 (package
11358 (name "kjumpingcube")
11359 (version "20.12.0")
11360 (source
11361 (origin
11362 (method url-fetch)
11363 (uri (string-append "mirror://kde/stable/release-service/" version
11364 "/src/kjumpingcube-" version ".tar.xz"))
11365 (sha256
11366 (base32 "1mk73il4jh15z5pm3fp65hsyvmrga11c3h7w96yamy2n2bbniapq"))))
11367 (build-system qt-build-system)
11368 (native-inputs
11369 `(("extra-cmake-modules" ,extra-cmake-modules)
11370 ("kdoctools" ,kdoctools)))
11371 (inputs
11372 `(("kconfig" ,kconfig)
11373 ("kconfigwidgets" ,kconfigwidgets)
11374 ("kcoreaddons" ,kcoreaddons)
11375 ("kcrash" ,kcrash)
11376 ("kdbusaddons" ,kdbusaddons)
11377 ("ki18n" ,ki18n)
11378 ("kio" ,kio)
11379 ("kwidgetsaddons" ,kwidgetsaddons)
11380 ("kxmlgui" ,kxmlgui)
11381 ("libkdegames" ,libkdegames)
11382 ("qtbase" ,qtbase)
11383 ("qtdeclarative" ,qtdeclarative)
11384 ("qtsvg" ,qtsvg)))
11385 (home-page "https://games.kde.org/")
11386 (synopsis "Simple tactical game for number-crunchers")
11387 (description "KJumpingcube is a simple tactical game for one or two
11388 players, played on a grid of numbered squares. Each turn, players compete for
11389 control of the board by capturing or adding to one square.
11390
11391 This package is part of the KDE games module.")
11392 (license (list license:gpl2+ license:fdl1.2+))))
11393
11394 (define-public xmoto
11395 (package
11396 (name "xmoto")
11397 (version "0.6.1")
11398 (source
11399 (origin
11400 (method git-fetch)
11401 (uri (git-reference
11402 (url "https://github.com/xmoto/xmoto")
11403 (commit version)))
11404 (file-name (git-file-name name version))
11405 (sha256
11406 (base32 "00f5ha79lfa2iiaz66wl0hl5dapa1l15qdr7m7knzi0ll7j6z66n"))
11407 (modules '((guix build utils)
11408 (ice-9 ftw)
11409 (srfi srfi-1)))
11410 ;; XXX: Remove some bundled libraries. Guix provides Chipmunk, but
11411 ;; it appears to be incompatible with the (older) one bundled.
11412 (snippet
11413 `(begin
11414 (let ((keep '("chipmunk" "glad" "md5sum")))
11415 (with-directory-excursion "vendor"
11416 (for-each delete-file-recursively
11417 (lset-difference string=?
11418 (scandir ".")
11419 (cons* "." ".." keep))))
11420 (substitute* "src/CMakeLists.txt"
11421 (("add_subdirectory\\(.*?/vendor/(.+?)\".*" line library)
11422 (if (member library keep) line ""))))
11423 #t))))
11424 (build-system cmake-build-system)
11425 (arguments
11426 `(#:tests? #f ;no test
11427 #:phases
11428 (modify-phases %standard-phases
11429 (add-after 'unpack 'fix-hard-coded-directory
11430 (lambda* (#:key outputs #:allow-other-keys)
11431 (substitute* "src/common/VFileIO.cpp"
11432 (("/usr/share")
11433 (string-append (assoc-ref outputs "out") "/share")))
11434 #t))
11435 (add-before 'build 'set-SDL
11436 ;; Set correct environment for SDL.
11437 (lambda* (#:key inputs #:allow-other-keys)
11438 (setenv "CPATH"
11439 (string-append
11440 (assoc-ref inputs "sdl") "/include/SDL:"
11441 (or (getenv "CPATH") "")))
11442 #t))
11443 (add-after 'install 'unbundle-fonts
11444 ;; Unbundle DejaVuSans TTF files.
11445 (lambda* (#:key outputs inputs #:allow-other-keys)
11446 (let ((font-dir (string-append (assoc-ref inputs "font-dejavu")
11447 "/share/fonts/truetype/"))
11448 (target-dir (string-append (assoc-ref outputs "out")
11449 "/share/xmoto/Textures/Fonts/")))
11450 (for-each (lambda (f)
11451 (let ((font (string-append font-dir f))
11452 (target (string-append target-dir f)))
11453 (delete-file target)
11454 (symlink font target)))
11455 '("DejaVuSans.ttf" "DejaVuSansMono.ttf"))
11456 #t))))))
11457 (native-inputs
11458 `(("gettext" ,gettext-minimal)
11459 ("pkg-config" ,pkg-config)))
11460 (inputs
11461 `(("bzip2" ,bzip2)
11462 ("curl" ,curl)
11463 ("font-dejavu" ,font-dejavu)
11464 ("glu" ,glu)
11465 ("libjpeg" ,libjpeg-turbo)
11466 ("libpng" ,libpng)
11467 ("libxdg-basedir" ,libxdg-basedir)
11468 ("libxml2" ,libxml2)
11469 ("lua" ,lua-5.1)
11470 ("ode" ,ode)
11471 ("sdl" ,(sdl-union (list sdl sdl-mixer sdl-net sdl-ttf)))
11472 ("sqlite" ,sqlite)
11473 ("zlib" ,zlib)))
11474 (home-page "https://xmoto.tuxfamily.org/")
11475 (synopsis "2D motocross platform game")
11476 (description
11477 "X-Moto is a challenging 2D motocross platform game, where
11478 physics play an all important role in the gameplay. You need to
11479 control your bike to its limit, if you want to have a chance finishing
11480 the more difficult challenges.")
11481 (license (list license:gpl2+ ;whole project
11482 license:bsd-3 ;vendor/md5sum
11483 license:lgpl2.1+
11484 license:expat))))
11485
11486 (define-public eboard
11487 (package
11488 (name "eboard")
11489 (version "1.1.3")
11490 (source
11491 (origin
11492 (method git-fetch)
11493 (uri (git-reference
11494 (url "https://github.com/fbergo/eboard")
11495 (commit (string-append "v" version))))
11496 (file-name (git-file-name name version))
11497 (sha256
11498 (base32 "1z4pwpqyvxhlda99h6arh2rjk90fbms9q29fqizjblrdn01dlxn1"))))
11499 (build-system gnu-build-system)
11500 (native-inputs
11501 `(("perl" ,perl)
11502 ("pkg-config" ,pkg-config)))
11503 (inputs
11504 `(("gtk+" ,gtk+-2)
11505 ("libpng" ,libpng)
11506 ("gstreamer" ,gstreamer)))
11507 (arguments
11508 `(#:tests? #f
11509 #:phases
11510 (modify-phases %standard-phases
11511 (replace 'configure
11512 (lambda* (#:key outputs #:allow-other-keys)
11513 (make-file-writable "eboard-config")
11514 (setenv "CC" "gcc")
11515 (invoke "./configure"
11516 (string-append "--prefix=" (assoc-ref outputs "out")))
11517 #t))
11518 (add-before 'install 'make-required-directories
11519 (lambda* (#:key outputs #:allow-other-keys)
11520 (mkdir-p (string-append (assoc-ref outputs "out")
11521 "/share/eboard"))
11522 #t)))))
11523 (synopsis "Graphical user interface to play chess")
11524 (description
11525 "Eboard is a chess board interface for ICS (Internet Chess Servers)
11526 and chess engines.")
11527 (home-page "https://www.bergo.eng.br/eboard/")
11528 (license license:gpl2+)))
11529
11530 (define-public chessx
11531 (package
11532 (name "chessx")
11533 (version "1.5.4")
11534 (source
11535 (origin
11536 (method url-fetch)
11537 (uri (string-append "mirror://sourceforge/chessx/chessx/"
11538 version "/chessx-" version ".tgz"))
11539 (sha256
11540 (base32 "1a3541vl5hp6jllgx998w9kjh9kp3wrl80yfwkxmq1bc5bzsrnz2"))))
11541 (build-system qt-build-system)
11542 (native-inputs
11543 `(("qttools" ,qttools)))
11544 (inputs
11545 `(("qtbase" ,qtbase)
11546 ("qtmultimedia" ,qtmultimedia)
11547 ("qtspeech" ,qtspeech)
11548 ("qtsvg" ,qtsvg)
11549 ("zlib" ,zlib)))
11550 (arguments
11551 `(#:tests? #f
11552 #:phases
11553 (modify-phases %standard-phases
11554 (add-after 'unpack 'fix-paths
11555 (lambda* (#:key inputs #:allow-other-keys)
11556 (substitute* "chessx.pro"
11557 (("\\$\\$\\[QT_INSTALL_BINS\\]/lrelease")
11558 (string-append (assoc-ref inputs "qttools") "/bin/lrelease"))
11559 ;; Fix missing translations.
11560 (("TRANSLATIONS = i18n/chessx_de.ts")
11561 "TRANSLATIONS = i18n/chessx_de.ts i18n/chessx_da.ts \\
11562 i18n/chessx_fr.ts i18n/chessx_it.ts i18n/chessx_cz.ts i18n/chessx_ru.ts \\
11563 i18n/chessx_es.ts"))
11564 #t))
11565 (add-after 'fix-paths 'make-qt-deterministic
11566 (lambda _
11567 (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1")
11568 #t))
11569 (replace 'configure
11570 (lambda _
11571 (invoke "qmake")
11572 #t))
11573 (replace 'install
11574 (lambda* (#:key outputs #:allow-other-keys)
11575 (let ((out (assoc-ref outputs "out")))
11576 (install-file "release/chessx" (string-append out "/bin"))
11577 (install-file "unix/chessx.desktop"
11578 (string-append out "/share/applications")))
11579 #t)))))
11580 (synopsis "Chess game database")
11581 (description
11582 "ChessX is a chess database. With ChessX you can operate on your
11583 collection of chess games in many ways: browse, edit, add, organize, analyze,
11584 etc. You can also play games on FICS or against an engine.")
11585 (home-page "http://chessx.sourceforge.net/")
11586 (license license:gpl2+)))
11587
11588 (define-public stockfish
11589 (package
11590 (name "stockfish")
11591 (version "12")
11592 (source
11593 (origin
11594 (method git-fetch)
11595 (uri (git-reference
11596 (url "https://github.com/official-stockfish/Stockfish")
11597 (commit (string-append "sf_" version))))
11598 (file-name (git-file-name name version))
11599 (sha256
11600 (base32 "0vcymbwp5nf114pp3ax40s21ki5dckda15vmhr77d1mnq3fn0l32"))))
11601 (build-system gnu-build-system)
11602 (inputs
11603 `(("neural-network"
11604 ,(origin
11605 (method url-fetch)
11606 (uri "https://tests.stockfishchess.org/api/nn/nn-82215d0fd0df.nnue")
11607 (sha256
11608 (base32 "1r4yqrh4di05syyhl84hqcz84djpbd605b27zhbxwg6zs07ms8c2"))))))
11609 (arguments
11610 `(#:tests? #f
11611 #:make-flags (list "-C" "src"
11612 "build"
11613 (string-append "PREFIX="
11614 (assoc-ref %outputs "out"))
11615 (string-append "ARCH="
11616 ,(match (%current-system)
11617 ("x86_64-linux" "x86-64")
11618 ("i686-linux" "x86-32")
11619 ("aarch64-linux" "general-64")
11620 ("armhf-linux" "armv7")
11621 ("mips64el-linux" "general-64")
11622 (_ "general-32"))))
11623 #:phases (modify-phases %standard-phases
11624 (delete 'configure)
11625 ;; The official neural network file is needed for building
11626 ;; and is embedded in the resulting binary.
11627 (add-after 'unpack 'copy-net
11628 (lambda* (#:key inputs #:allow-other-keys)
11629 (copy-file (assoc-ref inputs "neural-network")
11630 "src/nn-82215d0fd0df.nnue")
11631 #t)))))
11632 (synopsis "Strong chess engine")
11633 (description
11634 "Stockfish is a very strong chess engine. It is much stronger than the
11635 best human chess grandmasters. It can be used with UCI-compatible GUIs like
11636 ChessX.")
11637 (home-page "https://stockfishchess.org/")
11638 (license license:gpl3+)))
11639
11640 (define-public barrage
11641 (package
11642 (name "barrage")
11643 (version "1.0.5")
11644 (source
11645 (origin
11646 (method url-fetch)
11647 (uri (string-append "mirror://sourceforge/lgames/barrage/"
11648 "barrage-" version ".tar.gz"))
11649 (sha256
11650 (base32 "0139wxyrir10cbkvkjn548xgmp84wax8mfwk80yxbxlcdamrg257"))))
11651 (build-system gnu-build-system)
11652 (inputs
11653 `(("hicolor-icon-theme" ,hicolor-icon-theme)
11654 ("sdl" ,sdl)
11655 ("sdl-mixer" ,sdl-mixer)))
11656 (arguments
11657 `(#:configure-flags
11658 (list
11659 (string-append "CFLAGS="
11660 "-I" (assoc-ref %build-inputs "sdl-mixer")
11661 "/include/SDL"))))
11662 (home-page "http://lgames.sourceforge.net/Barrage/")
11663 (synopsis "Violent point-and-click shooting game with nice effects")
11664 (description
11665 "Barrage is a rather destructive action game that puts you on a shooting
11666 range with the objective to hit as many dummy targets as possible within
11667 3 minutes. You control a gun that may either fire small or large grenades at
11668 soldiers, jeeps and tanks. The gameplay is simple but it is not that easy to
11669 get high scores.")
11670 (license license:gpl2+)))
11671
11672 (define-public burgerspace
11673 (package
11674 (name "burgerspace")
11675 (version "1.9.3")
11676 (source
11677 (origin
11678 (method url-fetch)
11679 (uri (string-append "http://perso.b2b2c.ca/~sarrazip/dev/"
11680 "burgerspace-" version ".tar.gz"))
11681 (sha256
11682 (base32 "1005a04rbn4lzjrpfg0m394k2mfaji63fm2qhdqdsxila8a6kjbv"))))
11683 (build-system gnu-build-system)
11684 (native-inputs
11685 `(("pkg-config" ,pkg-config)))
11686 (inputs
11687 `(("flatzebra" ,flatzebra)))
11688 (home-page "http://perso.b2b2c.ca/~sarrazip/dev/burgerspace.html")
11689 (synopsis "Avoid evil foodstuffs and make burgers")
11690 (description
11691 "This is a clone of the classic game BurgerTime. In it, you play
11692 the part of a chef who must create burgers by stepping repeatedly on
11693 the ingredients until they fall into place. And to make things more
11694 complicated, you also must avoid evil animate food items while
11695 performing this task, with nothing but your trusty pepper shaker to
11696 protect you.")
11697 (license license:gpl2+)))
11698
11699 (define-public 7kaa
11700 (package
11701 (name "7kaa")
11702 (version "2.15.4p1")
11703 (source
11704 (origin
11705 (method url-fetch)
11706 (uri (string-append "https://github.com/the3dfxdude/7kaa/"
11707 "releases/download/v" version "/"
11708 "7kaa-" version ".tar.xz"))
11709 (sha256
11710 (base32 "1y7v0jhp3apb619p7asikqr1dnwb2yxbh40wbx1ppmr5f03mq9ph"))))
11711 (build-system gnu-build-system)
11712 (native-inputs
11713 `(("gettext" ,gettext-minimal)
11714 ("pkg-config" ,pkg-config)))
11715 (inputs
11716 `(("curl" ,curl)
11717 ("enet" ,enet)
11718 ("openal" ,openal)
11719 ("sdl2" ,sdl2)))
11720 (home-page "https://7kfans.com/")
11721 (synopsis "Seven Kingdoms Ancient Adversaries: real-time strategy game")
11722 (description
11723 "Seven Kingdoms, designed by Trevor Chan, brings a blend of Real-Time
11724 Strategy with the addition of trade, diplomacy, and espionage. The game
11725 enables players to compete against up to six other kingdoms allowing players
11726 to conquer opponents by defeating them in war (with troops or machines),
11727 capturing their buildings with spies, or offering opponents money for their
11728 kingdom.")
11729 (license license:gpl2+)))
11730
11731 (define-public neverball
11732 ;; Git version is 6-years younger than latest release.
11733 (let ((commit "760a25d32a5fb0661b99426d4ddcb9ac9f3d1644")
11734 (revision "1"))
11735 (package
11736 (name "neverball")
11737 (version (git-version "1.6.0" revision commit))
11738 (source
11739 (origin
11740 (method git-fetch)
11741 (uri (git-reference
11742 (url "https://github.com/Neverball/neverball")
11743 (commit commit)))
11744 (sha256
11745 (base32
11746 "0bwh67df3lyf33bv710y25l3frjdd34j9b7gsjadwxviz6r1vpj5"))
11747 (file-name (git-file-name name version))
11748 (modules '((guix build utils)))
11749 (snippet
11750 '(begin
11751 ;; Octocat seems to be non-free. Oddly, Debian doesn't strip it.
11752 (delete-file-recursively "data/ball/octocat")
11753 #t))))
11754 (build-system copy-build-system)
11755 (arguments
11756 `(#:install-plan
11757 '(("neverball" "bin/")
11758 ("neverputt" "bin/")
11759 ("mapc" "bin/")
11760 ("data" "share/games/neverball/")
11761 ("locale" "share/")
11762 ("dist/" "share/games/neverball" #:include ("neverball_replay.png"
11763 "neverlogos.svg"
11764 "svg readme.txt"))
11765 ("dist/" "share/applications" #:include ("neverball.desktop"
11766 "neverputt.desktop"))
11767 ("dist/neverball_16.png"
11768 "/share/icons/hicolor/16x16/apps/neverball.png")
11769 ("dist/neverball_24.png"
11770 "/share/icons/hicolor/24x24/apps/neverball.png")
11771 ("dist/neverball_32.png"
11772 "/share/icons/hicolor/32x32/apps/neverball.png")
11773 ("dist/neverball_48.png"
11774 "/share/icons/hicolor/48x48/apps/neverball.png")
11775 ("dist/neverball_64.png"
11776 "/share/icons/hicolor/64x64/apps/neverball.png")
11777 ("dist/neverball_128.png"
11778 "/share/icons/hicolor/128x128/apps/neverball.png")
11779 ("dist/neverball_256.png"
11780 "/share/icons/hicolor/256x256/apps/neverball.png")
11781 ("dist/neverball_512.png"
11782 "/share/icons/hicolor/512x512/apps/neverball.png")
11783 ("dist/neverputt_16.png"
11784 "/share/icons/hicolor/16x16/apps/neverputt.png")
11785 ("dist/neverputt_24.png"
11786 "/share/icons/hicolor/24x24/apps/neverputt.png")
11787 ("dist/neverputt_32.png"
11788 "/share/icons/hicolor/32x32/apps/neverputt.png")
11789 ("dist/neverputt_48.png"
11790 "/share/icons/hicolor/48x48/apps/neverputt.png")
11791 ("dist/neverputt_64.png"
11792 "/share/icons/hicolor/64x64/apps/neverputt.png")
11793 ("dist/neverputt_128.png"
11794 "/share/icons/hicolor/128x128/apps/neverputt.png")
11795 ("dist/neverputt_256.png"
11796 "/share/icons/hicolor/256x256/apps/neverputt.png")
11797 ("dist/neverputt_512.png"
11798 "/share/icons/hicolor/512x512/apps/neverputt.png")
11799 ("dist/" "share/man/man1" #:include ("mapc.1"))
11800 ("dist/" "share/man/man6" #:include ("neverball.6" "neverputt.6"))
11801 ("doc/" "share/doc/neverball")
11802 ("README.md" "share/doc/neverball/"))
11803 #:phases
11804 (modify-phases %standard-phases
11805 (add-before 'install 'build
11806 (lambda* (#:key inputs outputs #:allow-other-keys)
11807 (let* ((out (assoc-ref outputs "out"))
11808 (sdl (assoc-ref inputs "sdl")))
11809 (invoke "make" "-j" (number->string (parallel-job-count))
11810 "--environment-overrides"
11811 "CC=gcc" "BUILD=release"
11812 (string-append "DATADIR="
11813 out
11814 "/share/games/neverball/data")
11815 (string-append "LOCALEDIR=" out "/share/locale")
11816 (string-append "SDL_CPPFLAGS=-I"
11817 sdl
11818 "/include/SDL2/")))
11819 #t))
11820 (add-after 'install 'fix-some-broken-fonts
11821 (lambda* (#:key outputs #:allow-other-keys)
11822 (let* ((out (assoc-ref outputs "out")))
11823 (wrap-program (string-append out "/bin/neverball")
11824 `("LANG" = ("en_US.utf8")))
11825 (wrap-program (string-append out "/bin/neverputt")
11826 `("LANG" = ("en_US.utf8"))))
11827 #t)))))
11828 (native-inputs
11829 `(("gettext" ,gettext-minimal))) ;for msgfmt
11830 (inputs
11831 `(("libjpeg" ,libjpeg-turbo)
11832 ("libpng" ,libpng)
11833 ("libvorbis" ,libvorbis)
11834 ("physfs" ,physfs)
11835 ("sdl" ,(sdl-union (list sdl2 sdl2-ttf)))))
11836 (home-page "https://neverball.org/")
11837 (synopsis "3D floor-tilting game")
11838 (description
11839 "In the grand tradition of Marble Madness and Super Monkey Ball,
11840 Neverball has you guide a rolling ball through dangerous territory. Balance
11841 on narrow bridges, navigate mazes, ride moving platforms, and dodge pushers
11842 and shovers to get to the goal. Race against the clock to collect coins to
11843 earn extra balls. Also included is Neverputt, which is a 3D miniature golf
11844 game.") ;thanks to Debian for description
11845 (license license:gpl2+))))
11846
11847 (define-public pokerth
11848 (package
11849 (name "pokerth")
11850 (version "1.1.2")
11851 (source
11852 (origin
11853 (method url-fetch)
11854 (uri (string-append "mirror://sourceforge/pokerth/pokerth/"
11855 version "/pokerth-" version ".tar.gz"))
11856 (sha256
11857 (base32 "0yi9bj3k8yc1gkwmaf14zbbvvn13n54n1dli8k6j1pkph3p3vjq2"))
11858 (modules '((guix build utils)))
11859 (snippet
11860 '(begin
11861 ;; Remove bundled websocketpp.
11862 (delete-file-recursively "src/third_party/websocketpp")
11863 (substitute* "pokerth_lib.pro"
11864 (("src/third_party/websocketpp")
11865 ""))
11866 #t))))
11867 (build-system qt-build-system)
11868 (inputs
11869 `(("boost" ,boost)
11870 ("curl" ,curl)
11871 ("gsasl" ,gsasl)
11872 ("libgcrypt" ,libgcrypt)
11873 ("libircclient" ,libircclient)
11874 ("protobuf" ,protobuf-2) ; remove package when no longer needed
11875 ("qtbase" ,qtbase)
11876 ("sdl" ,(sdl-union (list sdl sdl-mixer)))
11877 ("sqlite" ,sqlite)
11878 ("tinyxml" ,tinyxml)
11879 ("websocketpp" ,websocketpp)
11880 ("zlib" ,zlib)))
11881 (arguments
11882 `(#:tests? #f ; No test suite
11883 #:phases
11884 (modify-phases %standard-phases
11885 (add-after 'unpack 'fix-paths
11886 (lambda* (#:key inputs #:allow-other-keys)
11887 (substitute* (find-files "." "\\.pro$")
11888 (("/opt/gsasl")
11889 (assoc-ref inputs "gsasl"))
11890 (("\\$\\$\\{PREFIX\\}/include/libircclient")
11891 (string-append (assoc-ref inputs "libircclient")
11892 "/include/libircclient"))
11893 (("LIB_DIRS =")
11894 (string-append "LIB_DIRS = "
11895 (assoc-ref inputs "boost") "/lib")))
11896 #t))
11897 (add-after 'unpack 'fix-build
11898 (lambda _
11899 ;; Fixes for Boost versions >= 1.66.
11900 (substitute* '("src/net/common/clientthread.cpp"
11901 "src/net/serveraccepthelper.h")
11902 (("boost::asio::socket_base::non_blocking_io command\\(true\\);")
11903 "")
11904 (("newSock->io_control\\(command\\);")
11905 "newSock->non_blocking(true);")
11906 (("acceptedSocket->io_control\\(command\\);")
11907 "acceptedSocket->non_blocking(true);"))
11908 #t))
11909 (replace 'configure
11910 (lambda* (#:key outputs #:allow-other-keys)
11911 (invoke "qmake" "pokerth.pro" "CONFIG+=client"
11912 (string-append "PREFIX=" (assoc-ref outputs "out"))))))))
11913 (home-page "https://www.pokerth.net")
11914 (synopsis "Texas holdem poker game")
11915 (description
11916 "With PokerTH you can play the Texas holdem poker game, either against
11917 computer opponents or against real players online.")
11918 (license license:agpl3+)))
11919
11920 (define-public azimuth
11921 (package
11922 (name "azimuth")
11923 ;; Not marked as latest release, but it fixes a compiling issue
11924 ;; and adds the install target.
11925 (version "1.0.3")
11926 (source
11927 (origin
11928 (method git-fetch)
11929 (uri (git-reference
11930 (url "https://github.com/mdsteele/azimuth")
11931 (commit (string-append "v" version))))
11932 (file-name (git-file-name name version))
11933 (sha256
11934 (base32
11935 "1znfvpmqiixd977jv748glk5zc4cmhw5813zp81waj07r9b0828r"))))
11936 (build-system gnu-build-system)
11937 (arguments
11938 `(#:test-target "test"
11939 #:phases
11940 (modify-phases %standard-phases
11941 (delete 'configure) ; no configure script
11942 ;; Build release version instead of debug version.
11943 (add-after 'unpack 'set-release
11944 (lambda _
11945 (setenv "BUILDTYPE" "release") #t))
11946 (add-after 'unpack 'fix-install ; set install directory
11947 (lambda* (#:key outputs #:allow-other-keys)
11948 (substitute* "Makefile" (("/usr") (assoc-ref outputs "out"))) #t)))))
11949 (inputs `(("sdl" ,sdl)))
11950 (home-page "https://mdsteele.games/azimuth/")
11951 (synopsis "Metroidvania game with vector graphics")
11952 (description
11953 "Pilot your ship inside a planet to find and rescue the colonists trapped
11954 inside the Zenith Colony.")
11955 (license license:gpl3+)))
11956
11957 (define-public cgoban
11958 (package
11959 (name "cgoban")
11960 (version "1.9.14")
11961 (source
11962 (origin
11963 (method url-fetch)
11964 (uri (string-append "mirror://sourceforge/cgoban1/cgoban1/"
11965 version "/cgoban-" version ".tar.gz"))
11966 (sha256
11967 (base32 "0qlvkiaglqq0izfph3l04mp4rqqqm9ks6rcsrmzrggw9x706z2iv"))))
11968 (build-system gnu-build-system)
11969 (inputs
11970 `(("libx11" ,libx11)
11971 ("libxt" ,libxt)
11972 ("xorgproto" ,xorgproto)))
11973 (home-page "http://cgoban1.sourceforge.net/")
11974 (synopsis "Go client for X11")
11975 (description "Provides a large set of Go-related services for X11:
11976 @itemize
11977 @item Local games with precise implementation of the Chinese and Japanese rulesets
11978 @item Edition and visualization of SGF files-Connection to the NNGS or IGS Go servers
11979 @item Bridge to Go modem protocol, allowing to play against Go modem-capable AIs
11980 such as GnuGo.
11981 @end itemize")
11982 (license license:gpl2+)))
11983
11984 (define-public paperview
11985 (let ((commit "9f8538eb6734c76877b878b8f1e52587f2ae19e6")
11986 (revision "1"))
11987 (package
11988 (name "paperview")
11989 (version (git-version "0.0.1" revision commit)) ;no upstream release
11990 (source (origin
11991 (method git-fetch)
11992 (uri (git-reference
11993 (url "https://github.com/glouw/paperview")
11994 (commit commit)))
11995 (file-name (git-file-name name version))
11996 (sha256
11997 (base32
11998 "09sb9sg44fvkgfdyycrm1ndpx7cnkrglxhci41y8f3gpagnvi7jk"))))
11999 (build-system gnu-build-system)
12000 (inputs
12001 `(("sdl2" ,sdl2)))
12002 (arguments
12003 '(#:tests? #f ;no tests
12004 #:make-flags
12005 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
12006 #:phases
12007 (modify-phases %standard-phases
12008 (delete 'configure))))
12009 (home-page "https://github.com/glouw/paperview/")
12010 (synopsis "High performance X11 animated wallpaper setter")
12011 (description "High performance animated desktop background setter for
12012 X11 that won't set your CPU on fire, drain your laptop battery, or lower video
12013 game FPS.")
12014 (license license:unlicense))))
12015
12016 (define-public curseofwar
12017 (package
12018 (name "curseofwar")
12019 (version "1.3.0")
12020 (source
12021 (origin
12022 (method git-fetch)
12023 (uri (git-reference
12024 (url "https://github.com/a-nikolaev/curseofwar")
12025 (commit (string-append "v" version))))
12026 (file-name (git-file-name name version))
12027 (sha256
12028 (base32 "1wd71wdnj9izg5d95m81yx3684g4zdi7fsy0j5wwnbd9j34ilz1i"))))
12029 (build-system gnu-build-system)
12030 (arguments
12031 `(#:tests? #f ; no tests
12032 #:make-flags
12033 (list (string-append "CC=" ,(cc-for-target))
12034 (string-append "PREFIX=" (assoc-ref %outputs "out")))
12035 #:phases
12036 (modify-phases %standard-phases
12037 (delete 'configure))))
12038 (inputs `(("ncurses" ,ncurses)))
12039 (home-page "https://a-nikolaev.github.io/curseofwar/")
12040 (synopsis "Fast-paced action strategy game")
12041 (description "Curse of War is a fast-paced action strategy game originally
12042 implemented using ncurses user interface. An SDL graphical version is also
12043 available.")
12044 (license license:gpl3+)))