gnu: Remove "open source" from descriptions.
[jackhill/guix/guix.git] / gnu / packages / game-development.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2014 Tomáš Čech <sleep_walker@suse.cz>
3 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
4 ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
5 ;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
6 ;;; Copyright © 2015, 2016, 2017 David Thompson <davet@gnu.org>
7 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
8 ;;; Copyright © 2016, 2017 Kei Kebreau <kkebreau@posteo.net>
9 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
10 ;;; Copyright © 2016, 2017 Julian Graham <joolean@gmail.com>
11 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
12 ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
13 ;;; Copyright © 2017 Peter Mikkelsen <petermikkelsen10@gmail.com>
14 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
15 ;;;
16 ;;; This file is part of GNU Guix.
17 ;;;
18 ;;; GNU Guix is free software; you can redistribute it and/or modify it
19 ;;; under the terms of the GNU General Public License as published by
20 ;;; the Free Software Foundation; either version 3 of the License, or (at
21 ;;; your option) any later version.
22 ;;;
23 ;;; GNU Guix is distributed in the hope that it will be useful, but
24 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
25 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 ;;; GNU General Public License for more details.
27 ;;;
28 ;;; You should have received a copy of the GNU General Public License
29 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
30
31 (define-module (gnu packages game-development)
32 #:use-module ((guix licenses) #:prefix license:)
33 #:use-module (guix packages)
34 #:use-module (guix download)
35 #:use-module (guix git-download)
36 #:use-module (guix utils)
37 #:use-module (guix build-system cmake)
38 #:use-module (guix build-system gnu)
39 #:use-module (guix build-system python)
40 #:use-module (gnu packages)
41 #:use-module (gnu packages autotools)
42 #:use-module (gnu packages boost)
43 #:use-module (gnu packages curl)
44 #:use-module (gnu packages databases)
45 #:use-module (gnu packages documentation)
46 #:use-module (gnu packages fonts)
47 #:use-module (gnu packages fontutils)
48 #:use-module (gnu packages freedesktop)
49 #:use-module (gnu packages fribidi)
50 #:use-module (gnu packages glib)
51 #:use-module (gnu packages gnunet)
52 #:use-module (gnu packages graphics)
53 #:use-module (gnu packages graphviz)
54 #:use-module (gnu packages guile)
55 #:use-module (gnu packages m4)
56 #:use-module (gnu packages multiprecision)
57 #:use-module (gnu packages music)
58 #:use-module (gnu packages ncurses)
59 #:use-module (gnu packages python)
60 #:use-module (gnu packages qt)
61 #:use-module (gnu packages video)
62 #:use-module (gnu packages compression)
63 #:use-module (gnu packages gl)
64 #:use-module (gnu packages linux)
65 #:use-module (gnu packages xorg)
66 #:use-module (gnu packages xdisorg)
67 #:use-module (gnu packages fontutils)
68 #:use-module (gnu packages image)
69 #:use-module (gnu packages audio)
70 #:use-module (gnu packages pulseaudio)
71 #:use-module (gnu packages gnome)
72 #:use-module (gnu packages gtk)
73 #:use-module (gnu packages sdl)
74 #:use-module (gnu packages pkg-config)
75 #:use-module (gnu packages xiph)
76 #:use-module (gnu packages lua)
77 #:use-module (gnu packages mp3)
78 #:use-module (gnu packages xml)
79 #:use-module (gnu packages tls))
80
81 (define-public bullet
82 (package
83 (name "bullet")
84 (version "2.86.1")
85 (source (origin
86 (method url-fetch)
87 (uri (string-append "https://github.com/bulletphysics/bullet3/"
88 "archive/" version ".tar.gz"))
89 (file-name (string-append name "-" version ".tar.gz"))
90 (sha256
91 (base32
92 "0nghzcl84p8di215p7xj0gy1hyy072hw2xk9cnmav9hv6bjb4n60"))))
93 (build-system cmake-build-system)
94 (arguments
95 '(#:configure-flags (list (string-append
96 "-DBUILD_SHARED_LIBS=ON "
97 "-DCMAKE_CXX_FLAGS=-fPIC "
98 (or (getenv "CXXFLAGS") "")))))
99 (inputs
100 `(("glu" ,glu)
101 ("libx11" ,libx11)
102 ("mesa" ,mesa)))
103 (home-page "http://bulletphysics.org/")
104 (synopsis "3D physics engine library")
105 (description
106 "Bullet is a physics engine library usable for collision detection. It
107 is used in some video games and movies.")
108 (license license:zlib)))
109
110 (define-public deutex
111 (package
112 (name "deutex")
113 (version "5.0.0")
114 (source (origin
115 (method url-fetch)
116 (uri (string-append "https://github.com/Doom-Utils/" name
117 "/releases/download/v" version "/"
118 name "-" version ".tar.xz"))
119 (sha256
120 (base32
121 "1jvffcpq64hk3jysz4q6zi9hqkksy151ci9553h8q7wrrkbw0i9z"))))
122 (build-system gnu-build-system)
123 (native-inputs `(("asciidoc" ,asciidoc)))
124 (home-page "https://github.com/Doom-Utils/deutex")
125 (synopsis "WAD file composer for Doom and related games")
126 (description
127 "DeuTex is a wad composer for Doom, Heretic, Hexen and Strife. It can be
128 used to extract the lumps of a wad and save them as individual files.
129 Conversely, it can also build a wad from separate files. When extracting a
130 lump to a file, it does not just copy the raw data, it converts it to an
131 appropriate format (such as PPM for graphics, Sun audio for samples, etc.).
132 Conversely, when it reads files for inclusion in pwads, it does the necessary
133 conversions (for example, from PPM to Doom picture format). In addition,
134 DeuTex has functions such as merging wads, etc.")
135 (license license:gpl2+)))
136
137 (define-public grfcodec
138 (package
139 (name "grfcodec")
140 (version "6.0.6")
141 (source (origin
142 (method url-fetch)
143 (uri (string-append "http://binaries.openttd.org/extra/"
144 name "/" version "/" name "-" version
145 "-source.tar.xz"))
146 (sha256
147 (base32
148 "08admgnpqcsifpicbm56apgv360fxapqpbbsp10qyk8i22w1ivsk"))))
149 (build-system gnu-build-system)
150 (arguments
151 '(#:tests? #f ; no check target
152 #:phases
153 (modify-phases %standard-phases
154 (delete 'configure) ; no configure script
155 (replace 'install ; no install target
156 (lambda* (#:key outputs #:allow-other-keys)
157 (let* ((out (assoc-ref outputs "out"))
158 (bin (string-append out "/bin"))
159 (doc (string-append out "/share/doc"))
160 (man (string-append out "/share/man/man1")))
161 (for-each (lambda (file)
162 (install-file file bin))
163 '("grfcodec" "grfid" "grfstrip" "nforenum"))
164 (install-file "COPYING" doc)
165 (with-directory-excursion "docs"
166 (for-each (lambda (file)
167 (install-file (string-append file ".txt") doc))
168 '("auto_correct" "commands" "grf" "grfcodec" "grftut"
169 "readme" "readme.rpn"))
170 (for-each (lambda (file)
171 (install-file file man))
172 (find-files "." "\\.1"))))
173 #t)))))
174 (inputs
175 `(("boost" ,boost)
176 ("libpng" ,libpng)
177 ("zlib" ,zlib)))
178 (synopsis "GRF development tools")
179 (description
180 "The @dfn{Graphics Resource File} (GRF) development tools are a set of
181 tools for developing (New)GRFs. It includes a number of smaller programs, each
182 with a specific task:
183 @enumerate
184 @item @code{grfcodec} decodes and encodes GRF files for OpenTTD.
185 @item @code{grfid} extracts the so-called \"GRF ID\" from a GRF.
186 @item @code{grfstrip} strips all sprites from a GRF.
187 @item @code{nforenum} checks NFO code for errors, making corrections when
188 necessary.
189 @end enumerate")
190 (home-page "http://dev.openttdcoop.org/projects/grfcodec")
191 ;; GRFCodec, GRFID, and GRFStrip are exclusively under the GPL2.
192 ;; NFORenum is under the GPL2+.
193 ;; The MD5 implementation contained in GRFID is under the zlib license.
194 (license (list license:gpl2 license:gpl2+ license:zlib))))
195
196 (define-public catcodec
197 (package
198 (name "catcodec")
199 (version "1.0.5")
200 (source
201 (origin
202 (method url-fetch)
203 (uri (string-append "https://binaries.openttd.org/extra/catcodec/"
204 version "/catcodec-" version "-source.tar.xz"))
205 (sha256
206 (base32
207 "1qg0c2i4p29sxj0q6qp2jynlrzm5pphz2xhcjqlxa69ycrnlxzs7"))))
208 (build-system gnu-build-system)
209 (arguments
210 `(#:tests? #f ; no tests
211 #:make-flags (list (string-append "prefix=" %output))
212 #:phases (modify-phases %standard-phases
213 (delete 'configure))))
214 (home-page "http://dev.openttdcoop.org/projects/catcodec")
215 (synopsis "Encode/decode OpenTTD sounds")
216 (description "catcodec encodes and decodes sounds for OpenTTD. These
217 sounds are not much more than some metadata (description and filename) and raw
218 PCM data.")
219 (license license:gpl2)))
220
221 (define-public gzochi
222 (package
223 (name "gzochi")
224 (version "0.11.1")
225 (source (origin
226 (method url-fetch)
227 (uri (string-append "mirror://savannah/gzochi/gzochi-"
228 version ".tar.gz"))
229 (sha256
230 (base32
231 "13j1m92zhxwkaaja3lg5x0h0b28mrrawdzk9d3hd19031akfxwb3"))))
232 (build-system gnu-build-system)
233 (native-inputs `(("pkgconfig" ,pkg-config)))
234 (inputs `(("bdb" ,bdb)
235 ("glib" ,glib)
236 ("guile" ,guile-2.0)
237 ("libmicrohttpd" ,libmicrohttpd)
238 ("ncurses" ,ncurses)
239 ("sdl" ,sdl)
240 ("zlib" ,zlib)))
241 (home-page "http://www.nongnu.org/gzochi/")
242 (synopsis "Scalable middleware for multiplayer games")
243 (description
244 "gzochi is a framework for developing massively multiplayer online games.
245 A server container provides services to deployed games, which are written in
246 Guile Scheme, that abstract and simplify some of the most challenging and
247 error-prone aspects of online game development: Concurrency, data persistence,
248 and network communications. A very thin client library can be embedded to
249 provide connectivity for client applications written in any language.")
250 (license license:gpl3+)))
251
252 (define-public nml
253 (package
254 (name "nml")
255 (version "0.4.4")
256 (source
257 (origin
258 (method url-fetch)
259 (uri (string-append "http://bundles.openttdcoop.org/nml/releases/"
260 version "/nml-" version ".tar.gz"))
261 (sha256
262 (base32
263 "0wk9ls5qyjwkra54rkj1gg94xbwzi7b84a5fh1ma1q7pbimi8rmg"))))
264 (build-system python-build-system)
265 (propagated-inputs
266 `(("python-pillow" ,python-pillow)
267 ("python-ply" ,python-ply)))
268 (home-page "http://dev.openttdcoop.org/projects/nml")
269 (synopsis "NML compiler")
270 (description
271 "@dfn{NewGRF Meta Language} (NML) is a python-based compiler, capable of
272 compiling NML files (along with their associated language, sound and graphic
273 files) into @file{.grf} and/or @file{.nfo} files.")
274 (license license:gpl2+)))
275
276 (define-public python-sge-pygame
277 (package
278 (name "python-sge-pygame")
279 (version "1.5.1")
280 (source
281 (origin
282 (method url-fetch)
283 (uri (string-append "mirror://savannah/stellarengine/"
284 (version-major+minor version) "/sge-pygame-"
285 version ".tar.gz"))
286 (file-name (string-append name "-" version ".tar.gz"))
287 (sha256
288 (base32
289 "1rl3xjzh78sl0sq3xl8rl7cgp9v9v3h7s2pfwn7nj1vrmffzkcpd"))))
290 (build-system python-build-system)
291 (propagated-inputs
292 `(("python-pygame" ,python-pygame)
293 ("python-six" ,python-six)
294 ("python-uniseg" ,python-uniseg)))
295 (home-page "http://stellarengine.nongnu.org")
296 (synopsis "2D game engine for Python")
297 (description
298 "The SGE Game Engine (\"SGE\", pronounced like \"Sage\") is a
299 general-purpose 2D game engine. It takes care of several details fro you so
300 you can focus on the game itself. This makes more rapid game development
301 possible, and it also makes the SGE easy to learn.")
302 (license license:lgpl3+)))
303
304 (define-public python2-sge-pygame
305 (package-with-python2 python-sge-pygame))
306
307 (define-public python-tmx
308 (package
309 (name "python-tmx")
310 (version "1.10")
311 (source
312 (origin
313 (method url-fetch)
314 (uri (string-append "mirror://savannah/python-tmx/"
315 (version-major+minor version) "/tmx-"
316 version ".tar.gz"))
317 (sha256
318 (base32
319 "073q0prg1nzlkga2b45vhscz374206qh4x68ccg00mxxwagn64z0"))))
320 (build-system python-build-system)
321 (propagated-inputs
322 `(("python-six" ,python-six)))
323 (home-page "http://python-tmx.nongnu.org")
324 (synopsis "Python library for the @code{Tiled} TMX format")
325 (description
326 "Python TMX reads and writes the @code{Tiled} TMX format in a simple way.
327 This is useful for map editors or generic level editors, and it's also useful
328 for using a map editor or generic level editor like Tiled to edit your game's
329 levels.")
330 (license (list license:asl2.0
331 ;; Documentation (only available in the source tarball) is
332 ;; under the CC0 license.
333 license:cc0))))
334
335 (define-public python2-tmx
336 (let ((python2-tmx (package-with-python2 python-tmx)))
337 (package
338 (inherit python2-tmx)
339 (propagated-inputs
340 `(("python2-pathlib" ,python2-pathlib)
341 ,@(package-propagated-inputs python2-tmx))))))
342
343 (define-public python-xsge
344 (package
345 (name "python-xsge")
346 (version "2017.06.09")
347 (source (origin
348 (method url-fetch)
349 (uri (string-append "mirror://savannah/xsge/xsge/xsge-"
350 version ".tar.gz"))
351 (sha256
352 (base32
353 "1vy7c2y7ihvmggs93zgfv2h3049s384wid8a5snzrrba8bhbb89p"))))
354 (build-system python-build-system)
355 (arguments
356 '(#:phases
357 (modify-phases %standard-phases
358 ;; xSGE's setup.py script does not support one of the Python build
359 ;; system's default flags, "--single-version-externally-managed".
360 (replace 'install
361 (lambda* (#:key outputs #:allow-other-keys)
362 (zero?
363 (system* "python" "setup.py" "install"
364 (string-append "--prefix=" (assoc-ref outputs "out"))
365 "--root=/")))))
366 #:tests? #f)) ; no check target
367 (propagated-inputs
368 `(("python-sge-pygame" ,python-sge-pygame)
369 ("python-pygame" ,python-pygame)
370 ("python-six" ,python-six)
371 ("python-tmx" ,python-tmx)))
372 (home-page "http://xsge.nongnu.org")
373 (synopsis "Extensions for the SGE Game Engine")
374 (description
375 "xSGE is a collection of modules that make doing certain tasks with the SGE
376 Game Engine easier. In addition to SGE's conveniences, the user has access to a
377 GUI toolkit, lighting and physics frameworks and @code{Tiled} TMX format
378 support.")
379 (license license:gpl3+)))
380
381 (define-public python2-xsge
382 (package-with-python2 python-xsge))
383
384 (define-public tiled
385 (package
386 (name "tiled")
387 (version "1.0.3")
388 (source (origin
389 (method url-fetch)
390 (uri (string-append "https://github.com/bjorn/tiled/archive/v"
391 version ".tar.gz"))
392 (file-name (string-append name "-" version ".tar.gz"))
393 (sha256
394 (base32
395 "1qj7l34y5zv2iazmwbix8wdpp88zv7fswbc4arqpp1wak2yna1ix"))))
396 (build-system gnu-build-system)
397 (inputs
398 `(("qtbase" ,qtbase)
399 ("qtsvg" ,qtsvg)
400 ("zlib" ,zlib)))
401 (native-inputs
402 `(("qttools" ,qttools)))
403 (arguments
404 '(#:phases
405 (modify-phases %standard-phases
406 (replace 'configure
407 (lambda* (#:key inputs outputs #:allow-other-keys)
408 (substitute* "translations/translations.pro"
409 (("LRELEASE =.*")
410 (string-append "LRELEASE = "
411 (assoc-ref inputs "qttools")
412 "/bin/lrelease\n")))
413 (let ((out (assoc-ref outputs "out")))
414 (system* "qmake"
415 (string-append "PREFIX=" out))))))))
416 (home-page "http://www.mapeditor.org/")
417 (synopsis "Tile map editor")
418 (description
419 "Tiled is a general purpose tile map editor. It is meant to be used for
420 editing maps of any tile-based game, be it an RPG, a platformer or a Breakout
421 clone.")
422
423 ;; As noted in 'COPYING', part of it is under GPLv2+, while the rest is
424 ;; under BSD-2.
425 (license license:gpl2+)))
426
427 (define-public sfml
428 (package
429 (name "sfml")
430 (version "2.3.2")
431 (source (origin
432 (method url-fetch)
433 ;; Do not fetch the archives from
434 ;; http://mirror0.sfml-dev.org/files/ because files there seem
435 ;; to be changed in place.
436 (uri (string-append "https://github.com/SFML/SFML/archive/"
437 version ".tar.gz"))
438 (file-name (string-append name "-" version ".tar.gz"))
439 (sha256
440 (base32
441 "0k2fl5xk3ni2q8bsxl0551inx26ww3w6cp6hssvww0wfjdjcirsm"))))
442 (build-system cmake-build-system)
443 (arguments
444 '(#:configure-flags
445 (list "-DSFML_INSTALL_PKGCONFIG_FILES=TRUE")
446 #:tests? #f)) ; no tests
447 (inputs
448 `(("mesa" ,mesa)
449 ("glew" ,glew)
450 ("flac" ,flac)
451 ("libvorbis" ,libvorbis)
452 ("libx11" ,libx11)
453 ("xcb-util-image" ,xcb-util-image)
454 ("libxrandr" ,libxrandr)
455 ("eudev" ,eudev)
456 ("freetype" ,freetype)
457 ("libjpeg" ,libjpeg)
458 ("libsndfile" ,libsndfile)
459 ("openal" ,openal)))
460 (home-page "https://www.sfml-dev.org")
461 (synopsis "Simple and Fast Multimedia Library")
462 (description
463 "SFML provides a simple interface to the various computer components,
464 to ease the development of games and multimedia applications. It is composed
465 of five modules: system, window, graphics, audio and network.")
466 (license license:zlib)))
467
468 (define-public sfxr
469 (package
470 (name "sfxr")
471 (version "1.2.1")
472 (source (origin
473 (method url-fetch)
474 (uri (string-append "http://www.drpetter.se/files/sfxr-sdl-1.2.1.tar.gz"))
475 (sha256
476 (base32
477 "0dfqgid6wzzyyhc0ha94prxax59wx79hqr25r6if6by9cj4vx4ya"))))
478 (build-system gnu-build-system)
479 (arguments
480 `(#:phases (modify-phases %standard-phases
481 (delete 'configure) ; no configure script
482 (add-before 'build 'patch-makefile
483 (lambda* (#:key outputs #:allow-other-keys)
484 (let ((out (assoc-ref outputs "out")))
485 (substitute* "Makefile"
486 (("\\$\\(DESTDIR\\)/usr") out))
487 (substitute* "main.cpp"
488 (("/usr/share")
489 (string-append out "/share")))
490 #t))))
491 #:tests? #f)) ; no tests
492 (native-inputs
493 `(("pkg-config" ,pkg-config)
494 ("desktop-file-utils" ,desktop-file-utils)))
495 (inputs
496 `(("sdl" ,sdl)
497 ("gtk+" ,gtk+)))
498 (synopsis "Simple sound effect generator")
499 (description "Sfxr is a tool for quickly generating simple sound effects.
500 Originally created for use in video game prototypes, it can generate random
501 sounds from presets such as \"explosion\" or \"powerup\".")
502 (home-page "http://www.drpetter.se/project_sfxr.html")
503 (license license:expat)))
504
505 (define-public physfs
506 (package
507 (name "physfs")
508 (version "2.0.3")
509 (source (origin
510 (method url-fetch)
511 (uri (string-append
512 "https://icculus.org/physfs/downloads/physfs-"
513 version ".tar.bz2"))
514 (file-name (string-append name "-" version ".tar.gz"))
515 (sha256
516 (base32
517 "0sbbyqzqhyf0g68fcvvv20n3928j0x6ik1njmhn1yigvq2bj11na"))))
518 (build-system cmake-build-system)
519 (arguments
520 '(#:tests? #f)) ; no check target
521 (inputs
522 `(("zlib" ,zlib)))
523 (native-inputs
524 `(("doxygen" ,doxygen)))
525 (home-page "https://icculus.org/physfs")
526 (synopsis "File system abstraction library")
527 (description
528 "PhysicsFS is a library to provide abstract access to various archives.
529 It is intended for use in video games. For security, no file writing done
530 through the PhysicsFS API can leave a defined @emph{write directory}. For
531 file reading, a @emph{search path} with archives and directories is defined,
532 and it becomes a single, transparent hierarchical file system. So archive
533 files can be accessed in the same way as you access files directly on a disk,
534 and it makes it easy to ship a new archive that will override a previous
535 archive on a per-file basis.")
536 (license license:zlib)))
537
538 (define-public love
539 (package
540 (name "love")
541 (version "0.10.2")
542 (source (origin
543 (method url-fetch)
544 (uri (string-append "https://bitbucket.org/rude/love/downloads/"
545 "love-" version "-linux-src.tar.gz"))
546 (sha256
547 (base32
548 "11x346pw0gqad8nmkmywzx4xpcbfc3dslbrdw5x94n1i25mk0sxj"))))
549 (build-system gnu-build-system)
550 (native-inputs
551 `(("pkg-config" ,pkg-config)))
552 (inputs
553 `(("devil" ,devil)
554 ("freetype" ,freetype)
555 ("libmodplug" ,libmodplug)
556 ("libtheora" ,libtheora)
557 ("libvorbis" ,libvorbis)
558 ("luajit" ,luajit)
559 ("mesa" ,mesa)
560 ("mpg123" ,mpg123)
561 ("openal" ,openal)
562 ("physfs" ,physfs)
563 ("sdl2" ,sdl2)
564 ("zlib" ,zlib)))
565 (synopsis "2D game framework for Lua")
566 (description "LÖVE is a framework for making 2D games in the Lua
567 programming language.")
568 (home-page "https://love2d.org/")
569 (license license:zlib)))
570
571 (define-public allegro-4
572 (package
573 (name "allegro")
574 (version "4.4.2")
575 (source (origin
576 (method url-fetch)
577 (uri (string-append "https://github.com/liballeg/allegro5/"
578 "releases/download/" version "/allegro-"
579 version ".tar.gz"))
580 (sha256
581 (base32
582 "1p0ghkmpc4kwij1z9rzxfv7adnpy4ayi0ifahlns1bdzgmbyf88v"))))
583 (build-system cmake-build-system)
584 (arguments
585 '(#:phases
586 (modify-phases %standard-phases
587 (add-after 'unpack 'patch-build-system
588 (lambda _
589 ;; Build addons as shared libraries. Trying to set ADDON_LINKAGE
590 ;; via a command line option doesn't work because it is
591 ;; unconditionally clobbered in the build script.
592 (substitute* '("CMakeLists.txt")
593 (("ADDON_LINKAGE STATIC")
594 "ADDON_LINKAGE SHARED"))
595 #t)))))
596 (inputs
597 `(("glu" ,glu)
598 ("libpng" ,libpng)
599 ("libvorbis" ,libvorbis)
600 ("mesa" ,mesa)
601 ("zlib" ,zlib)))
602 (synopsis "Game programming library")
603 (description "Allegro is a library mainly aimed at video game and
604 multimedia programming. It handles common, low-level tasks such as creating
605 windows, accepting user input, loading data, drawing images, playing sounds,
606 etc.")
607 (home-page "http://liballeg.org")
608 (license license:giftware)))
609
610 (define-public allegro
611 (package
612 (name "allegro")
613 (version "5.2.2.0")
614 (source (origin
615 (method url-fetch)
616 (uri (string-append "https://github.com/liballeg/allegro5/releases"
617 "/download/" version "/allegro-"
618 (if (equal? "0" (string-take-right version 1))
619 (string-drop-right version 2)
620 version)
621 ".tar.gz"))
622 (sha256
623 (base32
624 "1z4lrrlmn471wb7vzbd9iw7g379vj0k964vy1s64hcvv5bhvk1g2"))))
625 (build-system cmake-build-system)
626 (arguments `(#:tests? #f)) ; there are no tests
627 (inputs
628 ;; FIXME: Add the following optional inputs: xinput2, opensl, dumb
629 `(("flac" ,flac)
630 ("freetype" ,freetype)
631 ("glu" ,glu)
632 ("gtk" ,gtk+-2)
633 ("libjpeg" ,libjpeg)
634 ("libpng" ,libpng)
635 ("libtheora" ,libtheora)
636 ("libvorbis" ,libvorbis)
637 ("libxcursor" ,libxcursor)
638 ("libxinerama" ,libxinerama)
639 ("libxrandr" ,libxrandr)
640 ("mesa" ,mesa)
641 ("openal" ,openal)
642 ("physfs" ,physfs)
643 ("zlib" ,zlib)))
644 (native-inputs
645 `(("pkg-config" ,pkg-config)))
646 (synopsis "Game programming library")
647 (description "Allegro is a library mainly aimed at video game and
648 multimedia programming. It handles common, low-level tasks such as creating
649 windows, accepting user input, loading data, drawing images, playing sounds,
650 etc.")
651 (home-page "http://liballeg.org")
652 (license license:bsd-3)))
653
654 (define-public allegro-5.0
655 (package (inherit allegro)
656 (name "allegro")
657 (version "5.0.11")
658 (source (origin
659 (method url-fetch)
660 (uri (string-append "https://github.com/liballeg/allegro5/releases"
661 "/download/" version "/allegro-"
662 (if (equal? "0" (string-take-right version 1))
663 (string-drop-right version 2)
664 version)
665 ".tar.gz"))
666 (sha256
667 (base32
668 "0cd51qrh97jrr0xdmnivqgwljpmizg8pixsgvc4blqqlaz4i9zj9"))))))
669
670 (define-public aseprite
671 (package
672 (name "aseprite")
673 (version "1.1.7") ; After 1.1.7 the source is no longer distributed under the GPL.
674 ;; TODO: Unbundle third party software.
675 (source (origin
676 (method url-fetch/zipbomb)
677 (uri (string-append "https://github.com/aseprite/aseprite"
678 "/releases/download/v" version
679 "/Aseprite-v" version "-Source.zip"))
680 (sha256
681 (base32
682 "1plss4i1lfxcznv9p0pip1bkhj7ipw7jlhsh5avd6dzw079l4nvv"))))
683 (build-system cmake-build-system)
684 (arguments
685 '(#:configure-flags
686 ;; Use shared libraries instead of building bundled source.
687 (list "-DWITH_WEBP_SUPPORT=1"
688 "-DUSE_SHARED_CURL=1"
689 "-DUSE_SHARED_GIFLIB=1"
690 "-DUSE_SHARED_JPEGLIB=1"
691 "-DUSE_SHARED_ZLIB=1"
692 "-DUSE_SHARED_LIBPNG=1"
693 "-DUSE_SHARED_LIBLOADPNG=1"
694 "-DUSE_SHARED_LIBWEBP=1"
695 "-DUSE_SHARED_TINYXML=1"
696 "-DUSE_SHARED_PIXMAN=1"
697 "-DUSE_SHARED_FREETYPE=1"
698 "-DUSE_SHARED_ALLEGRO4=1"
699 "-DENABLE_UPDATER=0" ; no auto-updates
700 (string-append "-DFREETYPE_INCLUDE_DIR="
701 (assoc-ref %build-inputs "freetype")
702 "/include/freetype2"))))
703 (native-inputs
704 `(("pkg-config" ,pkg-config)))
705 ;; TODO: Use a patched Allegro 4 that supports window resizing. This
706 ;; patched version is bundled with Aseprite, but the patches should be
707 ;; extracted and applied on top of a standalone Allegro 4 package.
708 (inputs
709 `(("allegro" ,allegro-4)
710 ("curl" ,curl)
711 ("freetype" ,freetype)
712 ("giflib" ,giflib)
713 ("libjpeg" ,libjpeg)
714 ("libpng" ,libpng)
715 ("libwebp" ,libwebp)
716 ("libx11" ,libx11)
717 ("libxext" ,libxext)
718 ("libxxf86vm" ,libxxf86vm)
719 ("pixman" ,pixman)
720 ("tinyxml" ,tinyxml)
721 ("zlib" ,zlib)))
722 (synopsis "Animated sprite editor and pixel art tool")
723 (description "Aseprite is a tool for creating 2D pixel art for video
724 games. In addition to basic pixel editing features, Aseprite can assist in
725 the creation of animations, tiled graphics, texture atlases, and more.")
726 (home-page "https://www.aseprite.org/")
727 (license license:gpl2+)))
728
729 (define-public qqwing
730 (package
731 (name "qqwing")
732 (version "1.3.4")
733 (source (origin
734 (method url-fetch)
735 (uri (string-append
736 "https://qqwing.com/"
737 name "-" version ".tar.gz"))
738 (sha256
739 (base32
740 "0bw0papyqjg22z6irf36gs54y8236wa37b6gyn2h1spy65n76lqp"))))
741 (build-system gnu-build-system)
742 (native-inputs
743 `(("pkg-config" ,pkg-config)))
744 (home-page "https://qqwing.com/")
745 (synopsis "Sudoku puzzle solver and generator")
746 (description
747 "QQWing is a Sudoku puzzle generator and solver.
748 It offers the following features:
749 @enumerate
750 @item Can solve 1000 puzzles in 1 second and generate 1000 puzzles in 25 seconds.
751 @item Uses logic. Uses as many solve techniques as possible when solving
752 puzzles rather than guessing.
753 @item Rates puzzles. Most generators don't give an indication of the difficulty
754 of a Sudoku puzzle. QQwing does.
755 @item Can print solve instructions for any puzzle.
756 @item Customizable output style, including a CSV style that is easy to
757 import into a database.
758 @end enumerate")
759 (license license:gpl2+)))
760
761 (define-public quesoglc
762 (package
763 (name "quesoglc")
764 (version "0.7.2")
765 (source (origin
766 (method url-fetch)
767 (uri (string-append "mirror://sourceforge/" name "/" version "/"
768 name "-" version "-free.tar.bz2"))
769 (sha256
770 (base32
771 "08ddhywdy2qg17m592ng3yr0p1ih96irg8wg729g75hsxxq9ipks"))))
772 (build-system gnu-build-system)
773 (native-inputs `(("pkg-config" ,pkg-config)))
774 (inputs `(("fontconfig" ,fontconfig)
775 ("freeglute" ,freeglut)
776 ("fribidi" ,fribidi)
777 ("glew" ,glew)))
778 (home-page "http://quesoglc.sourceforge.net")
779 (synopsis "Implementation of the OpenGL Character Renderer (GLC)")
780 (description
781 "The OpenGL Character Renderer (GLC) is a state machine that provides
782 OpenGL programs with character rendering services via an application programming
783 interface (API).")
784 (license (list license:expat license:lgpl2.1+))))
785
786 (define-public python-pygame
787 (package
788 (name "python-pygame")
789 (version "1.9.3")
790 (source (origin
791 (method url-fetch)
792 (uri (pypi-uri "pygame" version))
793 (sha256
794 (base32
795 "1hlydiyygl444bq5m5g8n3jsxsgrdyxlm42ipmfbw36wkf0j243m"))))
796 (build-system python-build-system)
797 (arguments
798 `(#:tests? #f ; Tests require pygame to be installed first.
799 #:phases
800 (modify-phases %standard-phases
801 ;; Set the paths to the dependencies manually because
802 ;; the configure script does not allow passing them as
803 ;; parameters. This also means we can skip the configure
804 ;; phase.
805 (add-before 'build 'set-library-paths
806 (lambda* (#:key inputs outputs #:allow-other-keys)
807 (let ((sdl-ref (assoc-ref inputs "sdl"))
808 (font-ref (assoc-ref inputs "sdl-ttf"))
809 (image-ref (assoc-ref inputs "sdl-image"))
810 (mixer-ref (assoc-ref inputs "sdl-mixer"))
811 (smpeg-ref (assoc-ref inputs "libsmpeg"))
812 (png-ref (assoc-ref inputs "libpng"))
813 (jpeg-ref (assoc-ref inputs "libjpeg"))
814 (freetype-ref (assoc-ref inputs "freetype"))
815 (v4l-ref (assoc-ref inputs "v4l-utils"))
816 (out-ref (assoc-ref outputs "out")))
817 (substitute* "Setup.in"
818 (("SDL = -I/usr/include/SDL")
819 (string-append "SDL = -I" sdl-ref "/include/SDL -I.")))
820 (substitute* "Setup.in"
821 (("FONT = -lSDL_ttf")
822 (string-append "FONT = -I" font-ref "/include/SDL -L"
823 font-ref "/lib -lSDL_ttf")))
824 (substitute* "Setup.in"
825 (("IMAGE = -lSDL_image")
826 (string-append "IMAGE = -I" image-ref "/include/SDL -L"
827 image-ref "/lib -lSDL_image")))
828 (substitute* "Setup.in"
829 (("MIXER = -lSDL_mixer")
830 (string-append "MIXER = -I" mixer-ref "/include/SDL -L"
831 mixer-ref "/lib -lSDL_mixer")))
832 (substitute* "Setup.in"
833 (("SMPEG = -lsmpeg")
834 (string-append "SMPEG = -I" smpeg-ref "/include/smpeg -L"
835 smpeg-ref "/lib -lsmpeg")))
836 (substitute* "Setup.in"
837 (("PNG = -lpng")
838 (string-append "PNG = -I" png-ref "/include -L"
839 png-ref "/lib -lpng")))
840 (substitute* "Setup.in"
841 (("JPEG = -ljpeg")
842 (string-append "JPEG = -I" jpeg-ref "/include -L"
843 jpeg-ref "/lib -ljpeg")))
844
845 (substitute* "Setup.in"
846 (("FREETYPE = -lfreetype")
847 (string-append "FREETYPE = -I" freetype-ref "/include/freetype2 -L"
848 freetype-ref "/lib -lfreetype")))
849
850 (substitute* "Setup.in"
851 (("^pypm") "#pypm"))
852 ;; Create a path to a header file provided by v4l-utils.
853 (system* "mkdir" "linux")
854 (system* "ln" "--symbolic"
855 (string-append v4l-ref "/include/libv4l1-videodev.h")
856 "linux/videodev.h")
857 (system* "ln" "--symbolic" "Setup.in" "Setup")))))))
858 (inputs
859 `(("freetype" ,freetype)
860 ("sdl" ,sdl)
861 ("sdl-image" ,sdl-image)
862 ("sdl-mixer" ,sdl-mixer)
863 ("sdl-ttf" ,sdl-ttf)
864 ("sdl-gfx" ,sdl-gfx)
865 ("libjpeg" ,libjpeg)
866 ("libpng" ,libpng)
867 ("libX11" ,libx11)
868 ("libsmpeg" ,libsmpeg)
869 ("portmidi" ,portmidi)
870 ("v4l-utils" ,v4l-utils)))
871 (home-page "https://www.pygame.org")
872 (synopsis "SDL wrapper for Python")
873 (description "Pygame is a set of Python modules designed for writing games.
874 Pygame adds functionality on top of the excellent SDL library. This allows you
875 to create fully featured games and multimedia programs in the python language.")
876 (license (list license:bsd-2
877 ;; python numeric license as listed by Debian looks like
878 ;; an Expat-style license with a warranty disclaimer for
879 ;; the U.S. government and the University of California.
880 license:expat
881 license:lgpl2.0+
882 license:lgpl2.1+
883 license:gpl3+
884 license:psfl
885 license:public-domain
886 license:lgpl2.1+))))
887
888 (define-public python2-pygame
889 (package-with-python2 python-pygame))
890
891 (define-public grafx2
892 (package
893 (name "grafx2")
894 (version "2.4")
895 (source (origin
896 (method url-fetch)
897 ;; XXX: There is no URL that contains the version. :(
898 (uri "http://pulkomandy.tk/projects/GrafX2/downloads/21")
899 (sha256
900 (base32
901 "0svsy6rqmdj11b400c242i2ixihyz0hds0dgicqz6g6dcgmcl62q"))))
902 (build-system gnu-build-system)
903 (arguments
904 '(#:phases
905 (modify-phases %standard-phases
906 (delete 'configure) ; no configure script
907 (add-before 'build 'change-to-src-directory
908 (lambda _
909 (chdir "src")
910 #t)))
911 #:make-flags
912 ;; SDL header files are referenced without the preceeding "SDL/".
913 (list (string-append "CFLAGS=-I"
914 (assoc-ref %build-inputs "sdl-union")
915 "/include/SDL")
916 (string-append "prefix="
917 (assoc-ref %outputs "out")))
918 #:tests? #f)) ; no check target
919 (native-inputs
920 `(("pkg-config" ,pkg-config)))
921 (inputs
922 `(("libpng" ,libpng)
923 ("lua" ,lua-5.1)
924 ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-ttf)))))
925 (synopsis "Bitmap paint program")
926 (description "GrafX2 is a bitmap paint program inspired by the Amiga
927 programs Deluxe Paint and Brilliance. Specializing in 256-color drawing, it
928 includes a very large number of tools and effects that make it particularly
929 suitable for pixel art, game graphics, and generally any detailed graphics
930 painted with a mouse.")
931 (home-page "http://pulkomandy.tk/projects/GrafX2")
932 (license license:gpl2))) ; GPLv2 only
933
934 (define-public ois
935 (package
936 (name "ois")
937 (version "1.3")
938 (source
939 (origin
940 ;; Development has moved to github and there are no recent tarball
941 ;; releases.
942 (method git-fetch)
943 (uri (git-reference
944 (url "https://github.com/wgois/OIS.git")
945 (commit "bb75ccc1aabc1c547195579963601ff6080ca2f2")))
946 (file-name (string-append name "-" version))
947 (sha256
948 (base32
949 "0w0pamjc3vj0jr718hysrw8x076fq6n9rd6wcb36sn2jd0lqvi98"))))
950 (build-system gnu-build-system)
951 (arguments
952 `(#:phases
953 (modify-phases %standard-phases
954 (add-after 'unpack 'bootstrap
955 (lambda _ (zero? (system* "sh" "bootstrap")))))))
956 (native-inputs
957 `(("autoconf" ,autoconf)
958 ("automake" ,automake)
959 ("libtool" ,libtool)
960 ("m4" ,m4)
961 ("pkg-config" ,pkg-config)))
962 (inputs
963 `(("libxaw" ,libxaw)))
964 (synopsis "Object Oriented Input System")
965 (description
966 "Cross Platform Object Oriented Input Lib System is a cross platform,
967 simple solution for using all kinds of Input Devices (Keyboards, Mice,
968 Joysticks, etc) and feedback devices (e.g. force feedback). Meant to be very
969 robust and compatible with many systems and operating systems.")
970 (home-page "https://github.com/wgois/OIS")
971 (license license:zlib)))
972
973 (define-public mygui
974 (package
975 (name "mygui")
976 (version "3.2.2")
977 (source
978 (origin
979 (method url-fetch)
980 (uri
981 (string-append "https://github.com/MyGUI/" name
982 "/archive/MyGUI" version ".tar.gz"))
983 (sha256
984 (base32
985 "13x7cydmj7gjmsg702sqjbfi53z265iv6j7binv3r6a7ibndfa0a"))))
986 (build-system cmake-build-system)
987 (arguments
988 '(#:tests? #f ; No test target
989 #:configure-flags
990 (list "-DMYGUI_INSTALL_DOCS=TRUE"
991 (string-append "-DOGRE_INCLUDE_DIR="
992 (assoc-ref %build-inputs "ogre")
993 "/include/OGRE"))))
994 (native-inputs
995 `(("boost" ,boost)
996 ("doxygen" ,doxygen)
997 ("pkg-config" ,pkg-config)))
998 (inputs
999 `(("font-dejavu" ,font-dejavu)
1000 ("freetype" ,freetype)
1001 ("graphviz" ,graphviz)
1002 ("libx11" ,libx11)
1003 ("ogre" ,ogre)
1004 ("ois" ,ois)))
1005 (synopsis "Fast, flexible and simple GUI")
1006 (description
1007 "MyGUI is a library for creating Graphical User Interfaces (GUIs) for games
1008 and 3D applications. The main goals of mygui are: speed, flexibility and ease
1009 of use.")
1010 (home-page "http://mygui.info/")
1011 (license license:expat)))
1012
1013 (define-public openmw
1014 (package
1015 (name "openmw")
1016 (version "0.42.0")
1017 (source
1018 (origin
1019 (method url-fetch)
1020 (uri
1021 (string-append "https://github.com/OpenMW/openmw/archive/"
1022 name "-" version ".tar.gz"))
1023 (sha256
1024 (base32
1025 "1pla8016lpbg8cgm9kia318a860f26dmiayc72p3zl35mqrc7g7w"))))
1026 (build-system cmake-build-system)
1027 (arguments
1028 `(#:tests? #f ; No test target
1029 #:configure-flags
1030 (list "-DDESIRED_QT_VERSION=5")))
1031 (native-inputs
1032 `(("boost" ,boost)
1033 ("doxygen" ,doxygen)
1034 ("pkg-config" ,pkg-config)))
1035 (inputs
1036 `(("bullet" ,bullet)
1037 ("ffmpeg" ,ffmpeg)
1038 ("libxt" ,libxt)
1039 ("mygui" ,mygui)
1040 ("openal" ,openal)
1041 ("openscenegraph" ,openscenegraph)
1042 ("qtbase" ,qtbase)
1043 ("sdl" ,sdl2)
1044 ("unshield" ,unshield)))
1045 (synopsis "Re-implementation of the RPG Morrowind engine")
1046 (description
1047 "OpenMW is a game engine which reimplements and extends the one that runs
1048 the 2002 open-world RPG Morrowind. The engine comes with its own editor,
1049 called OpenMW-CS which allows the user to edit or create their own original
1050 games.")
1051 (home-page "https://openmw.org")
1052 (license license:gpl3)))
1053
1054 (define-public godot
1055 (package
1056 (name "godot")
1057 (version "2.1.4")
1058 (source (origin
1059 (method url-fetch)
1060 (uri
1061 (string-append "https://github.com/godotengine/godot/archive/"
1062 version "-stable.tar.gz"))
1063 (file-name (string-append name "-" version))
1064 (sha256
1065 (base32 "1mz89nafc1m7srbqvy7iagxrxmqvf5hbqi7i0lwaapkx6q0kpkq7"))))
1066 (build-system gnu-build-system)
1067 (arguments
1068 `(#:tests? #f ; There are no tests
1069 #:phases
1070 (modify-phases %standard-phases
1071 (delete 'configure)
1072 (add-after 'unpack 'scons-use-env
1073 (lambda _
1074 ;; Scons does not use the environment variables by default,
1075 ;; but this substitution makes it do so.
1076 (substitute* "SConstruct"
1077 (("env_base = Environment\\(tools=custom_tools\\)")
1078 (string-append
1079 "env_base = Environment(tools=custom_tools)\n"
1080 "env_base = Environment(ENV=os.environ)")))
1081 #t))
1082 (replace 'build
1083 (lambda _
1084 (zero? (system*
1085 "scons"
1086 "platform=x11"
1087 ;; Avoid using many of the bundled libs.
1088 ;; Note: These options can be found in the SConstruct file.
1089 "builtin_freetype=no"
1090 "builtin_glew=no"
1091 "builtin_libmpdec=no"
1092 "builtin_libogg=no"
1093 "builtin_libpng=no"
1094 "builtin_libtheora=no"
1095 "builtin_libvorbis=no"
1096 "builtin_libwebp=no"
1097 "builtin_openssl=no"
1098 "builtin_opus=no"
1099 "builtin_zlib=no"))))
1100 (replace 'install
1101 (lambda* (#:key outputs #:allow-other-keys)
1102 (let* ((out (assoc-ref outputs "out"))
1103 (bin (string-append out "/bin")))
1104 (with-directory-excursion "bin"
1105 (if (file-exists? "godot.x11.tools.64")
1106 (rename-file "godot.x11.tools.64" "godot")
1107 (rename-file "godot.x11.tools.32" "godot"))
1108 (install-file "godot" bin)))))
1109 (add-after 'install 'install-godot-desktop
1110 (lambda* (#:key outputs #:allow-other-keys)
1111 (let* ((out (assoc-ref outputs "out"))
1112 (desktop (string-append out "/share/applications"))
1113 (icon-dir (string-append out "/share/pixmaps")))
1114 (mkdir-p desktop)
1115 (mkdir-p icon-dir)
1116 (rename-file "icon.png" "godot.png")
1117 (install-file "godot.png" icon-dir)
1118 (with-output-to-file
1119 (string-append desktop "/godot.desktop")
1120 (lambda _
1121 (format #t
1122 "[Desktop Entry]~@
1123 Name=godot~@
1124 Comment=The godot game engine~@
1125 Exec=~a/bin/godot~@
1126 TryExec=~@*~a/bin/godot~@
1127 Icon=godot~@
1128 Type=Application~%"
1129 out)))
1130 #t))))))
1131 (native-inputs `(("pkg-config" ,pkg-config)
1132 ("scons" ,scons)))
1133 (inputs `(("alsa-lib" ,alsa-lib)
1134 ("freetype" ,freetype)
1135 ("glew" ,glew)
1136 ("glu" ,glu)
1137 ("libtheora" ,libtheora)
1138 ("libvorbis" ,libvorbis)
1139 ("libwebp" ,libwebp)
1140 ("libx11" ,libx11)
1141 ("libxcursor" ,libxcursor)
1142 ("libxinerama" ,libxinerama)
1143 ("libxrandr" ,libxrandr)
1144 ("mesa" ,mesa)
1145 ("openssl" ,openssl)
1146 ("opusfile" ,opusfile)
1147 ("pulseaudio" ,pulseaudio)
1148 ("python2" ,python-2)))
1149 (home-page "https://godotengine.org/")
1150 (synopsis "Advanced 2D and 3D game engine")
1151 (description
1152 "Godot is an advanced multi-platform game engine written in C++. If
1153 features design tools such as a visual editor, can import 3D models and
1154 provide high-quality 3D rendering, it contains an animation editor, and can be
1155 scripted in a Python-like language.")
1156 (license license:expat)))