projects/guix·blob javascript-team · refs

4624 lines · 185.7 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2014 Tomáš Čech <[email protected]>
3;;; Copyright © 2015 Mark H Weaver <[email protected]>
4;;; Copyright © 2015, 2018, 2021 Ludovic Courtès <[email protected]>
5;;; Copyright © 2015, 2018 Alex Kost <[email protected]>
6;;; Copyright © 2015, 2016, 2017 David Thompson <[email protected]>
7;;; Copyright © 2016-2021, 2023, 2024 Efraim Flashner <[email protected]>
8;;; Copyright © 2016, 2017, 2020 Kei Kebreau <[email protected]>
9;;; Copyright © 2016, 2018, 2019, 2024, 2025 Ricardo Wurmus <[email protected]>
10;;; Copyright © 2016, 2017, 2018 Julian Graham <[email protected]>
11;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <[email protected]>
12;;; Copyright © 2017, 2026 Manolis Fragkiskos Ragkousis <[email protected]>
13;;; Copyright © 2017 Peter Mikkelsen <[email protected]>
14;;; Copyright © 2017 Arun Isaac <[email protected]>
15;;; Copyright © 2017, 2019 Rutger Helling <[email protected]>
16;;; Copyright © 2018, 2022 Marius Bakke <[email protected]>
17;;; Copyright © 2019 Pierre Neidhardt <[email protected]>
18;;; Copyright © 2019, 2020, 2021 Liliana Marie Prikler <[email protected]>
19;;; Copyright © 2019 Jethro Cao <[email protected]>
20;;; Copyright © 2020-2025 Nicolas Goaziou <[email protected]>
21;;; Copyright © 2020 Timotej Lazar <[email protected]>
22;;; Copyright © 2020 Giacomo Leidi <[email protected]>
23;;; Copyright © 2021 Alexandru-Sergiu Marton <[email protected]>
24;;; Copyright © 2021 Dmitry Polyakov <[email protected]>
25;;; Copyright © 2020-2022, 2024-2026 James Smith <[email protected]>
26;;; Copyright © 2021 Ekaitz Zarraga <[email protected]>
27;;; Copyright © 2021, 2026 Andy Tai <[email protected]>
28;;; Copyright © 2022 Felix Gruber <[email protected]>
29;;; Copyright © 2022 Jai Vetrivelan <[email protected]>
30;;; Copyright © 2022 dan <[email protected]>
31;;; Copyright © 2022 Cairn <[email protected]>
32;;; Copyright © 2023-2026 John Kehayias <[email protected]>
33;;; Copyright © 2022-2023, 2025 Adam Faiz <[email protected]>
34;;; Copyright © 2024 Nicolas Graves <[email protected]>
35;;; Copyright © 2024-2025 Maxim Cournoyer <[email protected]>
36;;; Copyright © 2025 Sharlatan Hellseher <[email protected]>
37;;; Copyright © 2025 宋文武 <[email protected]>
38;;; Copyright © 2025 Arnaud Lechevallier <[email protected]>
39;;; Copyright © 2025 Vinicius Monego <[email protected]>
40;;; Copyright © 2025 Simen Endsjø <[email protected]>
41;;; Copyright © 2025 gemmaro <[email protected]>
42;;; Copyright © 2026 bdunahu <[email protected]>
43;;;
44;;; This file is part of GNU Guix.
45;;;
46;;; GNU Guix is free software; you can redistribute it and/or modify it
47;;; under the terms of the GNU General Public License as published by
48;;; the Free Software Foundation; either version 3 of the License, or (at
49;;; your option) any later version.
50;;;
51;;; GNU Guix is distributed in the hope that it will be useful, but
52;;; WITHOUT ANY WARRANTY; without even the implied warranty of
53;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
54;;; GNU General Public License for more details.
55;;;
56;;; You should have received a copy of the GNU General Public License
57;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
58
59(define-module (gnu packages game-development)
60 #:use-module ((srfi srfi-1) #:hide (zip))
61 #:use-module (ice-9 match)
62 #:use-module ((guix licenses) #:prefix license:)
63 #:use-module (guix packages)
64 #:use-module (guix gexp)
65 #:use-module (guix download)
66 #:use-module (guix git-download)
67 #:use-module (guix svn-download)
68 #:use-module (guix utils)
69 #:use-module (guix build-system cmake)
70 #:use-module (guix build-system copy)
71 #:use-module (guix build-system gnu)
72 #:use-module (guix build-system go)
73 #:use-module (guix build-system pyproject)
74 #:use-module (guix build-system qt)
75 #:use-module (guix build-system renpy)
76 #:use-module (guix build-system scons)
77 #:use-module (gnu packages)
78 #:use-module (gnu packages algebra)
79 #:use-module (gnu packages assembly)
80 #:use-module (gnu packages audio)
81 #:use-module (gnu packages autotools)
82 #:use-module (gnu packages backup)
83 #:use-module (gnu packages base)
84 #:use-module (gnu packages bash)
85 #:use-module (gnu packages bison)
86 #:use-module (gnu packages boost)
87 #:use-module (gnu packages build-tools)
88 #:use-module (gnu packages c)
89 #:use-module (gnu packages cmake)
90 #:use-module (gnu packages compression)
91 #:use-module (gnu packages cpp)
92 #:use-module (gnu packages check)
93 #:use-module (gnu packages curl)
94 #:use-module (gnu packages documentation)
95 #:use-module (gnu packages games)
96 #:use-module (gnu packages golang-build)
97 #:use-module (gnu packages golang-xyz)
98 #:use-module (gnu packages toolkits)
99 #:use-module (gnu packages fonts)
100 #:use-module (gnu packages fontutils)
101 #:use-module (gnu packages freedesktop)
102 #:use-module (gnu packages fribidi)
103 #:use-module (gnu packages dbm)
104 #:use-module (gnu packages gawk)
105 #:use-module (gnu packages gettext)
106 #:use-module (gnu packages gl)
107 #:use-module (gnu packages glib)
108 #:use-module (gnu packages gnome)
109 #:use-module (gnu packages gnunet)
110 #:use-module (gnu packages graphics)
111 #:use-module (gnu packages graphviz)
112 #:use-module (gnu packages gtk)
113 #:use-module (gnu packages guile)
114 #:use-module (gnu packages haskell-xyz)
115 #:use-module (gnu packages icu4c)
116 #:use-module (gnu packages image)
117 #:use-module (gnu packages javascript)
118 #:use-module (gnu packages kde-frameworks)
119 #:use-module (gnu packages linux)
120 #:use-module (gnu packages lisp)
121 #:use-module (gnu packages llvm)
122 #:use-module (gnu packages lua)
123 #:use-module (gnu packages m4)
124 #:use-module (gnu packages maths)
125 #:use-module (gnu packages mp3)
126 #:use-module (gnu packages multiprecision)
127 #:use-module (gnu packages music)
128 #:use-module (gnu packages ncurses)
129 #:use-module (gnu packages networking)
130 #:use-module (gnu packages pcre)
131 #:use-module (gnu packages perl)
132 #:use-module (gnu packages pkg-config)
133 #:use-module (gnu packages pretty-print)
134 #:use-module (gnu packages pulseaudio)
135 #:use-module (gnu packages python)
136 #:use-module (gnu packages python-build)
137 #:use-module (gnu packages python-crypto)
138 #:use-module (gnu packages python-graphics)
139 #:use-module (gnu packages python-web)
140 #:use-module (gnu packages python-xyz)
141 #:use-module (gnu packages readline)
142 #:use-module (gnu packages ruby)
143 #:use-module (gnu packages ruby-xyz)
144 #:use-module (gnu packages qt)
145 #:use-module (gnu packages sdl)
146 #:use-module (gnu packages serialization)
147 #:use-module (gnu packages speech)
148 #:use-module (gnu packages sphinx)
149 #:use-module (gnu packages sqlite)
150 #:use-module (gnu packages squirrel)
151 #:use-module (gnu packages stb)
152 #:use-module (gnu packages swig)
153 #:use-module (gnu packages texinfo)
154 #:use-module (gnu packages textutils)
155 #:use-module (gnu packages tls)
156 #:use-module (gnu packages version-control)
157 #:use-module (gnu packages video)
158 #:use-module (gnu packages vim)
159 #:use-module (gnu packages vulkan)
160 #:use-module (gnu packages web)
161 #:use-module (gnu packages wxwidgets)
162 #:use-module (gnu packages xdisorg)
163 #:use-module (gnu packages xiph)
164 #:use-module (gnu packages xml)
165 #:use-module (gnu packages xorg))
166
167(define-public bullet
168 (package
169 (name "bullet")
170 (version "3.25")
171 (source (origin
172 (method git-fetch)
173 (uri (git-reference
174 (url "https://github.com/bulletphysics/bullet3/")
175 (commit version)))
176 (file-name (git-file-name name version))
177 (sha256
178 (base32
179 "08xq225zw6z4ic0whaf8xn697vv5lkrdzfkmjvm32biidbjg8qq0"))
180 (modules '((guix build utils)))
181 (snippet
182 '(begin
183 (for-each delete-file (find-files "build3" "premake*"))
184 (with-directory-excursion "examples/ThirdPartyLibs"
185 (for-each delete-file-recursively
186 '("Gwen" "clsocket" "enet" "glad" "imgui"
187 "lua-5.2.3" "midi" "minizip" "openvr"
188 "optionalX11" "serial" "zlib")))
189
190 ;; Tests fail on linking, cannot find -lBussIK.
191 (substitute* "test/CMakeLists.txt"
192 ((" InverseDynamics")
193 "../examples/ThirdPartyLibs/BussIK InverseDynamics"))))))
194 (build-system cmake-build-system)
195 (arguments
196 (list #:configure-flags
197 #~(list "-DBUILD_SHARED_LIBS=ON"
198 "-DBUILD_CPU_DEMOS=OFF"
199 "-DBUILD_OPENGL3_DEMOS=OFF"
200 "-DBUILD_BULLET2_DEMOS=OFF"
201 "-DBULLET2_MULTITHREADING=ON"
202 ;; openmw 0.47.0 requires bullet to be built with
203 ;; double precision.
204 ;; See <https://issues.guix.gnu.org/52953> for
205 ;; more information.
206 "-DUSE_DOUBLE_PRECISION=ON"
207 ;; Extras/BulletRoboticsGUI needs files from
208 ;; ThirdPartyLibs
209 "-DBUILD_BULLET_ROBOTICS_GUI_EXTRA=OFF"
210 ;; Extras/BulletRobotics needs files from
211 ;; ThirdPartyLibs
212 "-DBUILD_BULLET_ROBOTICS_EXTRA=OFF"
213 (string-append "-DCMAKE_CXX_FLAGS=-fPIC "
214 (or (getenv "CXXFLAGS") "")))
215 #:phases
216 #~(modify-phases %standard-phases
217 (add-after 'unpack 'remove-failing-tests
218 ;; These tests fail specifically after removing 3rd party code.
219 (lambda _
220 (substitute* "test/SharedMemory/CMakeLists.txt"
221 (("ADD_TEST") "# ADD_TEST"))
222 (substitute* "test/InverseDynamics/CMakeLists.txt"
223 (("ADD_TEST\\(Test_BulletInverseForward")
224 "# ADD_TEST(Test_BulletInverseForward")))))))
225 (inputs (list glu libx11 mesa))
226 (home-page "https://pybullet.org/wordpress/")
227 (synopsis "3D physics engine library")
228 (description
229 "Bullet is a physics engine library usable for collision detection. It
230is used in some video games and movies.")
231 (license license:zlib)))
232
233(define-public darkradiant
234 (package
235 (name "darkradiant")
236 (version "3.9.0")
237 (source
238 (origin
239 (method git-fetch)
240 (uri (git-reference (url "https://github.com/codereader/DarkRadiant")
241 (commit version)))
242 (sha256 (base32 "0xp2swxi9kdi8rvqwrwmzjcxmpr6x14phyrxp7ldia4mr67pnpxg"))
243 (file-name (git-file-name name version))
244 (modules '((guix build utils)))
245 (snippet
246 '(begin
247 (map (lambda (lib)
248 (delete-file-recursively (string-append "libs/" lib)))
249 (list "libfmt"
250 "pugixml"
251 "pybind"))
252 (delete-file-recursively "tools")
253 (substitute* "CMakeLists.txt"
254 (("libs/libfmt ") "")
255 (("\\# Locate wxWidgets" locate-wxwidgets)
256 (string-append "find_package(fmt REQUIRED)\n"
257 "\n"
258 locate-wxwidgets))
259 (("find_package\\(Python REQUIRED COMPONENTS Development\\)"
260 find-python)
261 (string-append find-python "\n"
262 "find_package(pybind11 REQUIRED)\n")))
263 (substitute* "plugins/script/CMakeLists.txt"
264 (("\\$\\{CMAKE_SOURCE_DIR\\}/libs/pybind") ""))))
265 (patches
266 (search-patches "darkradiant-use-packaged-pugixml.patch"))))
267 (build-system cmake-build-system)
268 (arguments
269 (list #:configure-flags
270 ;; Loads files from a relative path by default, causing
271 ;; validate-runpath phase to fail.
272 #~(list "-DENABLE_RELOCATION=NO")
273 ;; Running tests in parallel results in several test failures.
274 #:parallel-tests? #f
275 #:phases
276 #~(modify-phases %standard-phases
277 (add-after 'unpack 'fix-broken-header-path
278 ;; Fix the path for a header, odd that it only shows up after
279 ;; unbundling dependencies.
280 (lambda _
281 (substitute* "libs/scene/merge/MergeAction.h"
282 (("../scenelib.h") "../../scenelib.h"))))
283 (add-before 'check 'pre-check
284 (lambda* (#:key inputs native-inputs #:allow-other-keys)
285 ;; Create a home directory and set it to $HOME for tests.
286 (mkdir-p (string-append (getenv "TMPDIR") "/home"))
287 (setenv "HOME" (string-append (getenv "TMPDIR") "/home"))
288 ;; Most tests require an X server.
289 (setenv "DISPLAY" ":1")
290 (system "Xvfb :1 &")))
291 (replace 'check
292 (lambda* (#:key parallel-tests? tests? #:allow-other-keys)
293 (when tests?
294 ;; Some tests fail because they can't find SoundManager,
295 ;; so disable them.
296 (invoke "ctest"
297 "-j" (if parallel-tests?
298 (number->string (parallel-job-count))
299 "1")
300 "-E"
301 (string-join (list "EntityTest.*Speaker*"
302 "SoundManagerTest.*")
303 "|"))))))))
304 (inputs
305 (list boost
306 eigen
307 fmt
308 ftgl
309 glew
310 glib
311 libjpeg-turbo
312 libogg
313 libpng
314 libsigc++-2
315 libvorbis
316 openal
317 pugixml
318 pybind11
319 python
320 wxwidgets))
321 (native-inputs
322 (list googletest
323 pkg-config
324 ruby-asciidoctor
325 xorg-server-for-tests))
326 (home-page "https://www.darkradiant.net")
327 (synopsis "Map editor for games on idTech4 engine")
328 (description "Map editor designed for use with The Dark Mod, a
329Thief-inspired game utilizing the idTech4 game engine.")
330 (license license:gpl2)))
331
332(define-public dds
333 (let ((commit "d2bc4c2c703941664fc1d73e69caa5233cdeac18")
334 (revision "1"))
335 (package
336 (name "dds")
337 (version (git-version "2.9.0" revision commit))
338 (source
339 (origin
340 (method git-fetch)
341 (uri (git-reference
342 (url "https://github.com/dds-bridge/dds")
343 (commit commit)))
344 (file-name (git-file-name name version))
345 (sha256
346 (base32
347 "1ishbb69cvyv96xdxshnly0m5ydwljgdf8fwa1cr9rj2qj40q4rm"))))
348 (build-system gnu-build-system)
349 (arguments
350 (list #:phases
351 #~(modify-phases %standard-phases
352 (add-after 'unpack 'chdir
353 (lambda _
354 (chdir "src")))
355 (replace 'configure
356 ;; Configuration is done by copying the appropriate
357 ;; make file in the working directory. There is no
358 ;; configure script.
359 (lambda _
360 (copy-file "Makefiles/Makefile_linux_shared"
361 "Makefile")))
362 (replace 'check
363 ;; There is no "check" traget. We must compile
364 ;; a "dtest" program and apply it on a data set.
365 (lambda* (#:key tests? #:allow-other-keys)
366 (when tests?
367 (install-file "libdds.so" "../test")
368 (with-directory-excursion "../test"
369 (copy-file "Makefiles/Makefile_linux"
370 "Makefile")
371 (substitute* "Makefile"
372 (("-Werror") ""))
373 (invoke "make")
374 (invoke "./dtest" "-f" "../hands/list100.txt")))))
375 (replace 'install
376 ;; "install" target merely moves ".so" file around
377 ;; the source directory. We install it in the store,
378 ;; along with all shipped documentation (which cannot
379 ;; be built from source unfortunately).
380 (lambda _
381 (install-file "libdds.so"
382 (string-append #$output "/lib"))
383 (let ((inc (string-append #$output "/include")))
384 (copy-recursively "../include" inc))
385 (let ((doc (string-append #$output
386 "/share/doc/"
387 #$name "-" #$version)))
388 (install-file "../LICENSE" doc)
389 (copy-recursively "../doc" doc)))))))
390 (native-inputs
391 (list gawk procps))
392 (inputs
393 (list boost-1.83))
394 (home-page "https://privat.bahnhof.se/wb758135/")
395 (synopsis "Double dummy solver for the bridge card game")
396 (description "DDS is a double-dummy solver of bridge hands. It supports
397single-threading and multi-threading for improved performance. DDS
398offers a wide range of functions, including par-score calculations.")
399 (license license:asl2.0))))
400
401(define-public deutex
402 (package
403 (name "deutex")
404 (version "5.2.2")
405 (source
406 (origin
407 (method url-fetch)
408 (uri (string-append "https://github.com/Doom-Utils/deutex"
409 "/releases/download/v" version "/"
410 "deutex-" version ".tar.zst"))
411 (sha256
412 (base32 "0psb2za6ldrlak7s8pjvli98ij5yiwjx8j1ms2v7rj9yadx0xv8h"))))
413 (build-system gnu-build-system)
414 (inputs
415 (list libpng))
416 (native-inputs
417 (list asciidoc pkg-config zstd))
418 (home-page "https://github.com/Doom-Utils/deutex")
419 (synopsis "WAD file composer for Doom and related games")
420 (description
421 "DeuTex is a wad composer for Doom, Heretic, Hexen and Strife. It can be
422used to extract the lumps of a wad and save them as individual files.
423Conversely, it can also build a wad from separate files. When extracting a
424lump to a file, it does not just copy the raw data, it converts it to an
425appropriate format (such as PPM for graphics, Sun audio for samples, etc.).
426Conversely, when it reads files for inclusion in pwads, it does the necessary
427conversions (for example, from PPM to Doom picture format). In addition,
428DeuTex has functions such as merging wads, etc.")
429 (license license:gpl2+)))
430
431(define-public dialogc
432 (package
433 (name "dialogc")
434 (version "1a01-1.1.0")
435 (source
436 (origin
437 (method git-fetch)
438 (uri (git-reference
439 (url "https://github.com/Dialog-IF/dialog")
440 (commit (string-append "release-" version))))
441 (file-name (git-file-name name version))
442 (sha256
443 (base32 "1hqngza1vhb9796xxyyhswishnl5k0v2phrym3kh8skimaz5a3l8"))))
444 (build-system gnu-build-system)
445 (native-inputs (list frotz-dumb-terminal perl python))
446 (arguments
447 (list
448 #:test-target "test"
449 #:parallel-tests? #f
450 #:phases
451 #~(modify-phases %standard-phases
452 (delete 'configure)
453 (add-before 'build 'set-install-prefix
454 (lambda _
455 (setenv "PREFIX" #$output)))
456 (replace 'build
457 (lambda _
458 (with-directory-excursion "src"
459 (substitute* "Makefile"
460 (("cp dialogc" all)
461 (string-append "install -d ${PREFIX}/bin\n\t" all))
462 (("/usr/local") "${PREFIX}"))
463 (invoke "make"))))
464 (replace 'install
465 (lambda _
466 (let ((bin (string-append #$output "/bin")))
467 (install-file "src/dialogc" bin)
468 (install-file "src/dgdebug" bin)))))))
469 (synopsis "Dialog interactive fiction compiler")
470 (description
471 "Dialog is a domain-specific language for creating works
472of interactive fiction. It is heavily inspired by Inform 7 and Prolog.")
473 (home-page "https://github.com/Dialog-IF/dialog")
474 (license license:bsd-2)))
475
476(define-public go-codeberg-org-anaseto-gruid-sdl
477 (package
478 (name "go-codeberg-org-anaseto-gruid-sdl")
479 (version "0.10.1")
480 (source
481 (origin
482 (method git-fetch)
483 (uri (git-reference
484 (url "https://codeberg.org/anaseto/gruid-sdl")
485 (commit (string-append "v" version))))
486 (file-name (git-file-name name version))
487 (sha256
488 (base32 "1mm0wcxch5gyd021rfiparf0i7i9a1jwkn3pbhxh50w8x91hyn9k"))))
489 (build-system go-build-system)
490 (arguments
491 (list
492 #:skip-build? #t ; it needs to be built on final application side only
493 #:tests? #f ; no tests provided
494 #:import-path "codeberg.org/anaseto/gruid-sdl"))
495 (native-inputs
496 (list pkg-config)) ; for go-github-com-veandco-go-sdl2
497 (propagated-inputs
498 (list go-codeberg-org-anaseto-gruid
499 go-github-com-veandco-go-sdl2
500 go-golang-org-x-image))
501 (home-page "https://codeberg.org/anaseto/gruid-sdl")
502 (synopsis "Gruid Driver using the go-sdl2 SDL2 bindings")
503 (description
504 "Package sdl provides a Driver for making native graphical apps.")
505 (license license:isc)))
506
507(define-public go-github-com-veandco-go-sdl2
508 (package
509 (name "go-github-com-veandco-go-sdl2")
510 (version "0.4.40")
511 (source
512 (origin
513 (method git-fetch)
514 (uri (git-reference
515 (url "https://github.com/veandco/go-sdl2")
516 (commit (string-append "v" version))))
517 (file-name (git-file-name name version))
518 (sha256
519 (base32 "0wi74j32dj5bzlp85v2qlhxn03p9p3500vxmm3d2wj656nwjw3cg"))))
520 (build-system go-build-system)
521 (arguments
522 (list
523 #:skip-build? #t
524 #:import-path "github.com/veandco/go-sdl2"
525 #:test-flags
526 #~(list "-skip" (string-join
527 (list
528 ;; QuitSubSystem(32): subsystem still initialized.
529 "TestInitQuit"
530 ;; Field not found "lockData" and type size mismatch.
531 "TestStructABI"
532 ;; Parameter 'src' is invalid.
533 "TestSurface"
534 ;; Test examples is provided as git submodule
535 ;; <https://github.com/veandco/go-sdl2-examples>.
536 "TestTTF")
537 "|"))
538 #:phases
539 #~(modify-phases %standard-phases
540 (add-after 'unpack 'patch-sdl-wrapper-headers
541 (lambda* (#:key import-path #:allow-other-keys)
542 (with-directory-excursion (string-append "src/" import-path)
543 (substitute* (find-files "." "\\.h")
544 (("<SDL_image.h>") "<SDL2/SDL_image.h>")
545 (("<SDL_mixer.h>") "<SDL2/SDL_mixer.h>")
546 (("<SDL_ttf.h>") "<SDL2/SDL_ttf.h>")))))
547 (add-before 'check 'pre-check
548 (lambda _
549 (setenv "HOME" "/tmp")
550 (setenv "XDG_RUNTIME_DIR" (getcwd)))))))
551 (native-inputs
552 (list pkg-config))
553 (propagated-inputs
554 (list go-github-com-golang-freetype
555 sdl2
556 sdl2-gfx
557 sdl2-image
558 sdl2-mixer
559 sdl2-ttf))
560 (home-page "https://github.com/veandco/go-sdl2")
561 (synopsis "SDL2 binding for Go")
562 (description
563 "@code{go-sdl2} is SDL2 wrapped for Go users. It enables
564interoperability between Go and the SDL2 library which is written in C. That
565means the original SDL2 installation is required for this to work.")
566 (license license:bsd-3)))
567
568(define-public grfcodec
569 ;; Latest release 6.0.6 requires an older boost and does not build with our
570 ;; newer GCC.
571 (let ((commit "7ded8ebd1447bd2e7c0f4b587be0c0510397bdd0")
572 (revision "0"))
573 (package
574 (name "grfcodec")
575 (version (git-version "6.0.6" revision commit))
576 (source
577 (origin
578 (method git-fetch)
579 (uri (git-reference
580 (url "https://github.com/OpenTTD/grfcodec")
581 (commit commit)))
582 (file-name (git-file-name name version))
583 (sha256
584 (base32 "12bf5y7d83plrlssdlcj83w4yxmg5jp1w2p8570l92hy9mkcfmb9"))
585 (modules '((guix build utils)))
586 (snippet
587 `(begin
588 ;; The sources are not a git repository
589 (substitute* "generate_version.cmake"
590 (("\\$\\{GIT.*describe.*") (string-append "echo \"" ,version "\"\n"))
591 (("\\$\\{GIT.*show.*") "echo \"Not shown for reproducibility.\"\n"))
592 (substitute* "CMakeLists.txt"
593 (("find_package\\(Git REQUIRED\\)") ""))))))
594 (build-system cmake-build-system)
595 (arguments
596 '(#:tests? #f ;no check target
597 #:phases
598 (modify-phases %standard-phases
599 (replace 'install ;no install target
600 (lambda* (#:key outputs #:allow-other-keys)
601 (let* ((out (assoc-ref outputs "out"))
602 (bin (string-append out "/bin"))
603 (doc (string-append out "/share/doc"))
604 (man (string-append out "/share/man/man1")))
605 (for-each (lambda (file)
606 (install-file file bin))
607 '("grfcodec" "grfid" "grfstrip" "nforenum"))
608 (with-directory-excursion "../source"
609 (install-file "COPYING" doc)
610 (with-directory-excursion "docs"
611 (for-each (lambda (file)
612 (install-file (string-append file ".txt") doc))
613 '("auto_correct" "commands" "grf" "grfcodec" "grftut"
614 "readme" "readme.rpn"))
615 (for-each (lambda (file)
616 (install-file file man))
617 (find-files "." "\\.1"))))))))))
618 (inputs
619 (list boost libpng zlib))
620 (synopsis "GRF development tools")
621 (description
622 "The @dfn{Graphics Resource File} (GRF) development tools are a set of
623tools for developing (New)GRFs. It includes a number of smaller programs, each
624with a specific task:
625@enumerate
626@item @code{grfcodec} decodes and encodes GRF files for OpenTTD.
627@item @code{grfid} extracts the so-called \"GRF ID\" from a GRF.
628@item @code{grfstrip} strips all sprites from a GRF.
629@item @code{nforenum} checks NFO code for errors, making corrections when
630necessary.
631@end enumerate")
632 (home-page "https://dev.openttdcoop.org/projects/grfcodec")
633 ;; GRFCodec, GRFID, and GRFStrip are exclusively under the GPL2.
634 ;; NFORenum is under the GPL2+.
635 ;; The MD5 implementation contained in GRFID is under the zlib license.
636 (license (list license:gpl2 license:gpl2+ license:zlib)))))
637
638(define-public catcodec
639 (package
640 (name "catcodec")
641 (version "1.0.5")
642 (source
643 (origin
644 (method url-fetch)
645 (uri (string-append "https://binaries.openttd.org/extra/catcodec/"
646 version "/catcodec-" version "-source.tar.xz"))
647 (sha256
648 (base32 "1qg0c2i4p29sxj0q6qp2jynlrzm5pphz2xhcjqlxa69ycrnlxzs7"))))
649 (build-system gnu-build-system)
650 (arguments
651 `(#:tests? #f ; no tests
652 #:make-flags (list (string-append "prefix=" %output))
653 #:phases (modify-phases %standard-phases
654 (delete 'configure))))
655 (home-page "https://dev.openttdcoop.org/projects/catcodec")
656 (synopsis "Encode/decode OpenTTD sounds")
657 (description "catcodec encodes and decodes sounds for OpenTTD. These
658sounds are not much more than some metadata (description and filename) and raw
659PCM data.")
660 (license license:gpl2)))
661
662(define-public nml
663 (package
664 (name "nml")
665 (version "0.9.0")
666 (source
667 (origin
668 (method git-fetch)
669 (uri (git-reference
670 (url "https://github.com/OpenTTD/nml")
671 (commit version)))
672 (file-name (git-file-name name version))
673 (sha256
674 (base32 "1kn70sskwpl2wcjlkdvxqja04khjb0vwwkgnyr67df1q3mga6l8m"))))
675 (arguments
676 (list
677 #:phases
678 #~(modify-phases %standard-phases
679 (replace 'check
680 (lambda* (#:key tests? #:allow-other-keys)
681 (when tests?
682 (invoke "make" "-C" "regression")))))))
683 (build-system pyproject-build-system)
684 (native-inputs (list python-setuptools))
685 (propagated-inputs (list python-pillow python-ply))
686 (home-page "https://github.com/OpenTTD/nml")
687 (synopsis "NML compiler")
688 (description
689 "@dfn{NewGRF Meta Language} (NML) is a python-based compiler, capable of
690compiling NML files (along with their associated language, sound and graphic
691files) into @file{.grf} and/or @file{.nfo} files.")
692 (license license:gpl2+)))
693
694(define-public python-pybox2d
695 (package
696 (name "python-pybox2d")
697 (version "2.3.10")
698 (source
699 (origin
700 (method git-fetch)
701 (uri (git-reference
702 (url "https://github.com/pybox2d/pybox2d")
703 (commit version)))
704 (file-name (git-file-name name version))
705 (sha256
706 (base32
707 "0dha28yscr1lpyzy9ygqc01a8pyf7n9vavyxikqh469wr2zcacna"))))
708 (build-system pyproject-build-system)
709 (arguments
710 (list
711 ;; It is not clear how to run the tests
712 #:tests? #false
713 #:phases
714 '(modify-phases %standard-phases
715 (add-before 'build 'build-ext
716 (lambda _
717 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
718 (native-inputs (list swig-4.4 python-setuptools python-wheel))
719 (home-page "https://github.com/pybox2d/pybox2d")
720 (synopsis "2D game physics for Python")
721 (description
722 "Pybox2d is a 2D physics library for your games and simple simulations.
723It's based on the Box2D library, written in C++. It supports several shape
724types (circle, polygon, thin line segments), and quite a few joint
725types (revolute, prismatic, wheel, etc.).")
726 (license license:zlib)))
727
728(define-public python-anvil-parser
729 ;; Github project does not have tags.
730 (let ((commit "91a7eda55f0fb55a948d1072896430c29d906809")
731 (revision "0"))
732 (package
733 (name "python-anvil-parser")
734 (version (git-version "0.10.6" revision commit))
735 (source
736 (origin
737 (method git-fetch)
738 (uri (git-reference
739 (url "https://github.com/0xTiger/anvil-parser2")
740 (commit commit)))
741 (file-name (git-file-name name version))
742 (sha256
743 (base32 "16j7kv6v782nz1fafkxkb7v2vpwfhpi1a66ak04xawg9h1fz7vkc"))))
744 (build-system pyproject-build-system)
745 (native-inputs
746 (list python-pytest python-setuptools))
747 (propagated-inputs (list python-frozendict python-nbt))
748 (home-page "https://github.com/0xTiger/anvil-parser2")
749 (synopsis "Anvil file format parser")
750 (description "This package provides an Anvil file format parser.")
751 (license license:expat))))
752
753;;~4MiB of test files.
754(define python-nbt-testdata
755 (file-union
756 "python-nbt-testdata"
757 (list
758 (let ((file "Sample_World.tar.gz"))
759 `(,file
760 ,(origin
761 (method url-fetch)
762 (uri (string-append
763 "https://github.com/twoolie/NBT/files/13199373/"
764 file))
765 (sha256
766 (base32
767 "1s58g5zicx8ghdai2qix2aqq0fc675vfajica4h78c397crwjrl9"))))))))
768
769(define-public python-nbt
770 (package
771 (name "python-nbt")
772 (version "1.5.1")
773 (source
774 (origin
775 (method git-fetch)
776 (uri (git-reference
777 (url "https://github.com/twoolie/NBT")
778 (commit (string-append "version-" version))))
779 (file-name (git-file-name name version))
780 (sha256
781 (base32 "1a3mj7c18m1n5iqzwwvvlk7n65kxp3xbmccsqyap36apwpbbxyd9"))))
782 (build-system pyproject-build-system)
783 (arguments
784 (list
785 #:test-flags
786 #~(list "tests/regiontests.py" "tests/nbttests.py")
787 #:phases
788 #~(modify-phases %standard-phases
789 (add-before 'check 'fake-download
790 ;; Fake the download of the test tarball.
791 (lambda _
792 (substitute*
793 "tests/downloadsample.py"
794 (("tar_file = .*")
795 (string-append
796 "tar_file = '"
797 #+python-nbt-testdata
798 "/Sample_World.tar.gz'"))))))))
799 (native-inputs
800 (list python-pytest python-setuptools))
801 (home-page "https://github.com/twoolie/NBT")
802 (synopsis "Named Binary Tag reader and writer")
803 (description
804 "This library is a parser and writer for the NBT file format. It is suited
805to inspect and edit the Minecraft data files.")
806 (license license:expat)))
807
808(define-public python-sge
809 (package
810 (name "python-sge")
811 (version "2.0.2")
812 (source
813 (origin
814 (method url-fetch)
815 (uri (pypi-uri "sge" version))
816 (sha256
817 (base32
818 "1bp4spcjsmy6xv2j0ciaripfgd3pj5413hhhrj8v8mxcwhraw68p"))))
819 (build-system pyproject-build-system)
820 (arguments
821 (list #:tests? #f)) ; no tests
822 (native-inputs
823 (list python-setuptools python-wheel))
824 (propagated-inputs
825 (list python-pygame python-uniseg))
826 (home-page "https://python-sge.github.io/")
827 (synopsis "2D game engine for Python")
828 (description
829 "The SGE Game Engine (\"SGE\", pronounced like \"Sage\") is a
830general-purpose 2D game engine. It takes care of several details for you so
831you can focus on the game itself. This makes more rapid game development
832possible, and it also makes the SGE easy to learn.")
833 (license license:lgpl3+)))
834
835(define-public python-pyscroll
836 ;; No tags, no releases, not clear which commit corresponds to which PyPI
837 ;; release. But PyPI has no tests, so need to use git.
838 (let ((commit "31e1c282d09542ec89c6c1ac3ee6a1ff991ff5c2")
839 (revision "1"))
840 (package
841 (name "python-pyscroll")
842 (version (git-version "2.31" revision commit))
843 (source
844 (origin
845 (method git-fetch)
846 (uri (git-reference
847 (url "https://github.com/bitcraft/pyscroll")
848 (commit commit)))
849 (file-name (git-file-name name version))
850 (sha256
851 (base32
852 "1mqi8ccxi7vk63hw7klxjzd8jp6lnnw5q70nvrzmgq0jxpp61h7y"))))
853 (build-system pyproject-build-system)
854 (native-inputs (list python-pytest python-setuptools))
855 (propagated-inputs (list python-pygame))
856 (home-page "https://github.com/bitcraft/pyscroll")
857 (synopsis "Fast scrolling maps library for pygame")
858 (description "@code{pyscroll} is a simple and fast module
859for animated scrolling maps for your new or existing game.")
860 (license license:lgpl3+))))
861
862(define-public python-pytmx
863 (package
864 (name "python-pytmx")
865 (version "3.32")
866 (source
867 (origin
868 (method url-fetch)
869 (uri (pypi-uri "PyTMX" version))
870 (sha256
871 (base32 "1jh9b0pjqbjdv72v5047p5d769ic084g013njvky0zcfiwrxi3w5"))))
872 (build-system pyproject-build-system)
873 (arguments
874 (list
875 #:tests? #f)) ; XXX: no tests in PyPI, there are in Git
876 (native-inputs
877 (list python-setuptools
878 python-wheel))
879 (propagated-inputs
880 (list python-pygame
881 python-pysdl2
882 python-pyglet))
883 (home-page "https://github.com/bitcraft/PyTMX")
884 (synopsis "Python library to read Tiled Map Editor's TMX maps")
885 (description
886 "@code{pytmx} is a map loader for python/pygame designed for games.
887It provides smart tile loading with a fast and efficient storage base.")
888 (license license:lgpl3+)))
889
890;; XXX: Currently the pyproject build-system is unable to install multiple
891;; python modules in a single package. This package uses old-style 'build and
892;; 'install for this reason.
893(define-public python-xsge
894 (package
895 (name "python-xsge")
896 (version "2021.10.11")
897 (source (origin
898 (method url-fetch)
899 (uri (string-append "https://github.com/python-sge/xsge"
900 "/releases/download/v" version
901 "/xsge-" version ".tar.gz"))
902 (sha256
903 (base32
904 "0g86p5i9lflvblzy7977lmxbsma5hdlz63sk0k8c59vnhg8sij4i"))))
905 (build-system pyproject-build-system)
906 (arguments
907 (list
908 #:tests? #f ; No tests.
909 #:configure-flags
910 ;; Transformed format for #:phases convenience.
911 #~(map (lambda (pair)
912 (string-join (list (car pair) (cdr pair)) "="))
913 ;; Normal/expected pyproject format.
914 `(("--prefix" . ,#$output)))
915 #:phases
916 #~(modify-phases %standard-phases
917 ;; xSGE's setup.py script does not support one of the Python build
918 ;; system's default flags, "--single-version-externally-managed".
919 (replace 'build
920 (lambda* (#:key configure-flags #:allow-other-keys)
921 (apply invoke "python" "setup.py" "build"
922 configure-flags)))
923 (replace 'install
924 (lambda* (#:key configure-flags #:allow-other-keys)
925 (apply invoke "python" "setup.py" "install"
926 configure-flags))))))
927 (native-inputs (list python-setuptools))
928 (propagated-inputs (list python-sge))
929 (home-page "https://python-sge.github.io/")
930 (synopsis "Extensions for the SGE Game Engine")
931 (description
932 "xSGE is a collection of modules that make doing certain tasks with the SGE
933Game Engine easier. In addition to SGE's conveniences, the user has access to a
934GUI toolkit, lighting and physics frameworks and @code{Tiled} TMX format
935support.")
936 (license license:lgpl3+)))
937
938(define-public python-neteria
939 (package
940 (name "python-neteria")
941 (version "1.0.2")
942 (source
943 (origin
944 (method url-fetch)
945 (uri (pypi-uri "neteria" version))
946 (sha256
947 (base32 "1azlix80a6vns2i3z0bdbqk32kx8s2gjh2nvshab235fd9h85yv7"))))
948 (build-system pyproject-build-system)
949 (arguments
950 (list #:tests? #f)) ;No tests, also not on github
951 (native-inputs
952 (list python-setuptools))
953 (propagated-inputs
954 (list python-rsa))
955 (home-page "https://pypi.org/project/neteria/")
956 (synopsis "Simple game networking library")
957 (description
958 "This package provides a game networking framework for Python.")
959 (license license:gpl3+)))
960
961(define-public slade
962 (package
963 (name "slade")
964 (version "3.2.7")
965 (source
966 (origin
967 (method git-fetch)
968 (uri (git-reference
969 (url "https://github.com/sirjuddington/SLADE")
970 (commit version)))
971 (sha256
972 (base32 "0yxy9dpgb5bgq6cc7b1k7f1bvs72mhifi9xpjgysznnfxkm78bps"))
973 (file-name (git-file-name name version))))
974 (build-system cmake-build-system)
975 (arguments
976 (list #:configure-flags
977 #~(list "-DWX_GTK3=ON" "-DNO_WEBVIEW=ON"
978 "-DBUILD_PK3=ON"
979 (string-append "-DWITH_WXPATH="
980 #$(this-package-input "wxwidgets") "/bin")
981 (string-append "-DwxWidgets_LIBRARIES="
982 #$(this-package-input "wxwidgets") "/lib"))
983 #:phases
984 #~(modify-phases %standard-phases
985 (add-after 'install 'wrap-with-x11-gdk-backend
986 ;; Set GDK_BACKEND to x11 to prevent crash on Wayland.
987 ;; See https://github.com/sirjuddington/SLADE/issues/1097 for
988 ;; details.
989 (lambda _
990 (wrap-program (string-append #$output "/bin/slade")
991 '("GDK_BACKEND" = ("x11"))))))
992 #:tests? #f)) ;; No test suite.
993 (inputs
994 (list bash-minimal
995 curl
996 fluidsynth
997 freeimage
998 ftgl
999 glew
1000 gtk+
1001 libmpg123
1002 lua
1003 sfml
1004 wxwidgets))
1005 (native-inputs
1006 (list pkg-config which zip))
1007 (home-page "https://slade.mancubus.net")
1008 (synopsis "Doom game data editor")
1009 (description "SLADE3 is a modern editor for Doom-engine based games and
1010source ports. It has the ability to view, modify, and write many different game-
1011specific formats, and even convert between some of them, or from/to other generic
1012formats such as PNG.")
1013 (license license:gpl2+)))
1014
1015(define-public tiled
1016 (package
1017 (name "tiled")
1018 (version "1.8.6")
1019 (source (origin
1020 (method git-fetch)
1021 (uri (git-reference
1022 (url "https://github.com/mapeditor/tiled")
1023 (commit (string-append "v" version))))
1024 (file-name (git-file-name name version))
1025 (sha256
1026 (base32
1027 "0iimfj4kbhmjk94586fqz11bk4i7v0zsxby8agx7450cqlh2y3zi"))))
1028 (build-system gnu-build-system)
1029 (inputs
1030 (list qtbase-5 qtdeclarative-5 qtsvg-5 zlib))
1031 (native-inputs
1032 (list qttools-5))
1033 (arguments
1034 '(#:phases
1035 (modify-phases %standard-phases
1036 (replace 'configure
1037 (lambda* (#:key inputs outputs #:allow-other-keys)
1038 (substitute* "translations/translations.pro"
1039 (("LRELEASE =.*")
1040 (string-append "LRELEASE = "
1041 (search-input-file inputs "/bin/lrelease")
1042 "\n")))
1043 (let ((out (assoc-ref outputs "out")))
1044 (invoke "qmake"
1045 (string-append "PREFIX=" out))))))))
1046 (home-page "https://www.mapeditor.org/")
1047 (synopsis "Tile map editor")
1048 (description
1049 "Tiled is a general purpose tile map editor. It is meant to be used for
1050editing maps of any tile-based game, be it an RPG, a platformer or a Breakout
1051clone.")
1052
1053 ;; As noted in 'COPYING', part of it is under GPLv2+, while the rest is
1054 ;; under BSD-2.
1055 (license license:gpl2+)))
1056
1057(define-public trizbort-qt
1058 (package
1059 (name "trizbort-qt")
1060 (version "1.0")
1061 (source
1062 (origin
1063 (method git-fetch)
1064 (uri (git-reference
1065 (url "https://jxself.org/git/trizbort-qt.git")
1066 (commit (string-append "v" version))))
1067 (sha256
1068 (base32 "1nb0361snbj73kkh82y239vdja2w0rpcc2mnnndyykq26q212pm6"))
1069 (file-name (git-file-name name version))))
1070 (build-system qt-build-system)
1071 (inputs (list qtsvg))
1072 (arguments
1073 (list #:qtbase qtbase
1074 #:tests? #f)) ; no tests
1075 (home-page "https://jxself.org/trizbort-qt.shtml")
1076 (synopsis "Visual mapping tool for interactive fiction")
1077 (description "Trizbort-qt is a Qt port of Trizbort, a mapper for interactive fiction.
1078It draws rooms and the connections between them, annotates them with descriptions
1079and objects, and exports the map as source code for many interactive fiction systems
1080or as a PDF or image.")
1081 (license (list license:gpl3+
1082 license:expat)))) ; from original Trizbort
1083
1084(define-public trenchbroom
1085 (package
1086 (name "trenchbroom")
1087 ;; TODO: Required for removal of catch2-3.8, revert on next release.
1088 (properties '((commit . "ef7c7a473100116acabd6ed51f11dd40496cfae6")
1089 (revision . "0")))
1090 (version (git-version "2026.1"
1091 (assoc-ref properties 'revision)
1092 (assoc-ref properties 'commit)))
1093 (source
1094 (origin
1095 (method git-fetch)
1096 (uri (git-reference
1097 (url "https://github.com/TrenchBroom/TrenchBroom")
1098 (commit (assoc-ref properties 'commit))))
1099 (file-name (git-file-name name version))
1100 (sha256
1101 (base32 "0djr5mh6421k5xmlvp1fwnl9x0zz8z4flivr7clc0rkz9fmhcf30"))))
1102 (build-system cmake-build-system)
1103 (arguments
1104 (list #:configure-flags
1105 #~(list "-DCMAKE_BUILD_TYPE=Release" "-G" "Unix Makefiles"
1106 "-DCMAKE_PREFIX_PATH=cmake/packages"
1107 (string-append "-Dfreetype_INCLUDE_DIR="
1108 #$freetype "/include/freetype2")
1109 (string-append "-Dfreetype_LIBRARY="
1110 #$freetype "/lib/libfreetype.so"))
1111 #:phases
1112 #~(modify-phases %standard-phases
1113 (add-after 'unpack 'fix-build-system
1114 (lambda _
1115 (substitute* "lib/TbBaseLib/src/Uuid.cpp"
1116 (("include \"stduuid\\/uuid.h\"")
1117 "include <uuid.h>"))
1118 (substitute* "CMakeLists.txt"
1119 (("set\\(CMAKE_TOOLCHAIN_FILE")
1120 "#set(CMAKE_TOOLCHAIN_FILE"))))
1121 (add-before 'build 'set-environment-variables
1122 (lambda _
1123 ;; Set home so fontconfig can write cache.
1124 (setenv "HOME" (getenv "TEMP"))
1125 ;; Set QT platform for offscreen rendering.
1126 (setenv "QT_QPA_PLATFORM" "offscreen")
1127 (setenv "XDG_RUNTIME_DIR" (getenv "TEMP"))))
1128 (add-after 'install 'wrap-trenchbroom
1129 (lambda _
1130 (wrap-program (string-append #$output "/bin/trenchbroom")
1131 ;; TrenchBroom needs $XDG_DATA_DIRS set to find game
1132 ;; configs.
1133 `("XDG_DATA_DIRS" ":" prefix
1134 (,(string-append #$output "/share")))
1135 ;; TrenchBroom also doesn't work well with Wayland backend.
1136 '("QT_QPA_PLATFORM" = ("xcb")))))
1137 (add-after 'install 'install-desktop-file
1138 (lambda _
1139 (make-desktop-entry-file
1140 (string-append #$output "/share/applications/"
1141 #$(package-name this-package) ".desktop")
1142 #:name "TrenchBroom"
1143 #:comment #$(package-synopsis this-package)
1144 #:exec #$name
1145 #:icon #$name
1146 #:categories '("Development")
1147 #:keywords '("quake" "level" "editor")))))
1148 #:tests? #f)) ; No tests.
1149 (inputs
1150 (list assimp
1151 bash-minimal
1152 catch2
1153 cpptrace
1154 fmt
1155 freeglut
1156 freeimage
1157 freetype
1158 glew
1159 glm
1160 glu
1161 libxxf86vm
1162 mesa
1163 miniz
1164 qtbase
1165 qtsvg
1166 stduuid
1167 tinyxml2
1168 `(,zstd "lib")))
1169 (native-inputs (list git pandoc python p7zip))
1170 (home-page "https://kristianduske.com/trenchbroom/")
1171 (synopsis "Cross-platform level editor for Quake-engine based games")
1172 (description "TrenchBroom is a cross-platform level editor for
1173Quake-engine based games. It supports Quake, Quake 2, Hexen 2, as well as
1174other games. TrenchBroom provides many simple and advanced tools to create
1175complex and interesting levels.")
1176 (license (list license:gpl3+ ;trenchbroom
1177 license:expat)))) ;`lib/(KdLib|VmLib)
1178
1179(define-public tsukundere
1180 (package
1181 (name "tsukundere")
1182 (version "0.4.3")
1183 (source (origin
1184 (method git-fetch)
1185 (uri (git-reference
1186 (url "https://gitlab.com/lilyp/tsukundere")
1187 (commit version)))
1188 (file-name (git-file-name name version))
1189 (sha256
1190 (base32
1191 "1lq2rs33s6l6y0hwwkv8pppgq2ki0q5kzj11s90yivi8g8g201af"))))
1192 (build-system gnu-build-system)
1193 (arguments
1194 `(#:modules ((ice-9 match)
1195 (srfi srfi-1)
1196 ((guix build guile-build-system)
1197 #:select (target-guile-effective-version))
1198 ,@%default-gnu-modules)
1199 #:imported-modules ((guix build guile-build-system)
1200 ,@%default-gnu-imported-modules)
1201 #:phases
1202 (modify-phases %standard-phases
1203 (add-after 'unpack 'patch-command
1204 (lambda* (#:key inputs outputs #:allow-other-keys)
1205 (let* ((scm (lambda (in)
1206 (string-append in "/share/guile/site/"
1207 (target-guile-effective-version))))
1208 (ccache (lambda (in)
1209 (string-append in "/lib/guile/"
1210 (target-guile-effective-version)
1211 "/site-ccache")))
1212 (pkgs
1213 (cons
1214 (assoc-ref outputs "out")
1215 (filter-map
1216 (match-lambda
1217 (("guile" . pkg) pkg)
1218 ((label . pkg)
1219 (and (string-prefix? "guile-" label) pkg)))
1220 inputs))))
1221 (substitute* "tsukundere.scm"
1222 (("exec guile (.*)" _ args)
1223 (string-append
1224 ;; XXX: Prevent Guile-SDL2 from blowing up by not knowing
1225 ;; where the SDL2 libaries are.
1226 "unset LD_LIBRARY_PATH\n"
1227 (format #f "export GUILE_LOAD_PATH=\"~@?\"~%"
1228 "~{~a~^:~}" (map scm pkgs))
1229 (format #f "export GUILE_LOAD_COMPILED_PATH=\"~@?\"~%"
1230 "~{~a~^:~}" (map ccache pkgs))
1231 "exec "
1232 (assoc-ref inputs "guile")
1233 "/bin/guile " args)))
1234 #t))))))
1235 (native-inputs
1236 `(("autoconf" ,autoconf)
1237 ("automake" ,automake)
1238 ("gettext" ,gettext-minimal)
1239 ("guile" ,guile-3.0)
1240 ("libtool" ,libtool)
1241 ("pkg-config" ,pkg-config)
1242 ("texinfo" ,texinfo)))
1243 (inputs
1244 `(("guile-sdl2" ,guile-sdl2)
1245 ("guile" ,guile-3.0)
1246 ("pango" ,pango)
1247 ("sdl2" ,sdl2)))
1248 (home-page "https://gitlab.com/lilyp/tsukundere")
1249 (synopsis "Visual novel engine")
1250 (description "Tsukundere is a game engine geared heavily towards the
1251development of visual novels, written on top of Guile-SDL2. It is still
1252experimental.")
1253 (license license:lgpl3+)))
1254
1255(define-public scummc
1256 (package
1257 (name "scummc")
1258 (version "0.2.1")
1259 (source (origin
1260 (method git-fetch)
1261 (uri (git-reference
1262 (url "https://github.com/AlbanBedel/scummc")
1263 (commit (string-append "v" version))))
1264 (file-name (git-file-name name version))
1265 (sha256
1266 (base32
1267 "1yyq05kfmvgx5aa68kg1l5a4lpsky7hzxxcdvv2xbgf0jljdcl3k"))
1268 (modules '((guix build utils)))
1269 (snippet
1270 #~(begin
1271 (substitute* "configure"
1272 (("\\|alpha" all)
1273 (string-append all "|arm|aarch64|powerpc64le")))
1274 (substitute* "examples/example.mak"
1275 (("scost.*\n$") "scost\n")
1276 (("bmp \\$\\(.*\n$") "bmp\n")
1277 (("/%.scc.*\n$") "/%.scc\n")
1278 (("voc \\$\\(.*\n$") "voc\n"))
1279 (substitute* "Makefile.target"
1280 (("distrib-data:.*\n") "distrib-data:\n")
1281 (("cp.*/bin" all)
1282 (string-append all " || true")))))))
1283 (build-system gnu-build-system)
1284 (arguments
1285 (list #:test-target "test"
1286 #:tests? #f ; The only tests verify that game checksums match
1287 #:make-flags
1288 #~(list "SHOW_WARNINGS=no")
1289 #:phases
1290 #~(modify-phases %standard-phases
1291 (replace 'configure ; ScummC uses a non-standard configure
1292 (lambda* (#:key configure-flags #:allow-other-keys)
1293 (apply invoke "./configure" configure-flags)))
1294 (replace 'install ; install target is referred to as distrib
1295 (lambda _
1296 (invoke "make" "distrib"
1297 (string-append "DISTRIB=" #$output)))))))
1298 (inputs
1299 (list freetype gtk+-2 sdl))
1300 (native-inputs
1301 (list bison doxygen libxslt pkg-config))
1302 (synopsis "SCUMM Compiler")
1303 (description
1304 "ScummC is a set of tools allowing to create SCUMM games from scratch.
1305It is capable of creating games for SCUMM version 6 and partially version 7.")
1306 (home-page "https://github.com/AlbanBedel/scummc")
1307 (license license:gpl2+)))
1308
1309(define-public sfml
1310 (package
1311 (name "sfml")
1312 (version "3.0.1")
1313 (source
1314 (origin
1315 (method git-fetch)
1316 ;; Do not fetch the archives from
1317 ;; http://mirror0.sfml-dev.org/files/ because files there seem
1318 ;; to be changed in place.
1319 (uri (git-reference
1320 (url "https://github.com/SFML/SFML")
1321 (commit version)))
1322 (file-name (git-file-name name version))
1323 (sha256
1324 (base32
1325 "12f1d45995qf5sazjmmfdydllcd6alhqs1s4xwv3jiq1fw66hcy9"))
1326 (modules '((guix build utils)))
1327 (snippet
1328 '(begin
1329 (delete-all-but "extlibs/headers"
1330 "glad"))))) ;pre-generated headers
1331 (build-system cmake-build-system)
1332 (arguments
1333 (list #:tests? #f ;attempts to fetch catch2 from the internet
1334 #:configure-flags
1335 #~(list "-DBUILD_SHARED_LIBS=ON"
1336 (string-append "-DCMAKE_CXX_FLAGS=-I"
1337 (search-input-directory %build-inputs
1338 "include/vulkan")))))
1339 (native-inputs
1340 (list miniaudio ;header-only library
1341 minimp3 ;header-only library
1342 pkg-config))
1343 (inputs
1344 (list eudev
1345 glew
1346 libjpeg-turbo
1347 libsndfile
1348 libx11
1349 libxcursor
1350 libxi
1351 libxrandr
1352 mesa
1353 stb-image
1354 stb-image-write
1355 vulkan-headers
1356 xcb-util-image))
1357 (propagated-inputs
1358 ;; In Requires.private of pkg-config files.
1359 (list flac freetype libvorbis openal))
1360 (home-page "https://www.sfml-dev.org")
1361 (synopsis "Simple and Fast Multimedia Library")
1362 (description
1363 "SFML provides a simple interface to the various computer components,
1364to ease the development of games and multimedia applications. It is composed
1365of five modules: system, window, graphics, audio and network.")
1366 (license license:zlib)))
1367
1368(define-public sfml-2
1369 (package
1370 (inherit sfml)
1371 (name "sfml")
1372 (version "2.6.2")
1373 (source (origin
1374 (inherit (package-source sfml))
1375 (method git-fetch)
1376 ;; Do not fetch the archives from
1377 ;; http://mirror0.sfml-dev.org/files/ because files there seem
1378 ;; to be changed in place.
1379 (uri (git-reference
1380 (url "https://github.com/SFML/SFML")
1381 (commit version)))
1382 (file-name (git-file-name name version))
1383 (sha256
1384 (base32
1385 "04qjfp23db0ga4lckil9jqigmjr3253p190r568kpaksrrf5bhcv"))))))
1386
1387(define-public csfml
1388 (package
1389 (name "csfml")
1390 (version "2.6.1")
1391 (source (origin
1392 (method git-fetch)
1393 (uri (git-reference
1394 (url "https://github.com/SFML/CSFML")
1395 (commit version)))
1396 (file-name (git-file-name name version))
1397 (sha256
1398 (base32
1399 "19xxlan0yy9f92bmzkzqg3hjc18g6ds4mhg0rrs62qg9434p8aqh"))))
1400 (build-system cmake-build-system)
1401 (arguments
1402 (list #:configure-flags #~(list "-DCSFML_BUILD_DOC=TRUE")
1403 #:tests? #f)) ;no tests
1404 (native-inputs (list doxygen))
1405 (inputs (list sfml-2))
1406 (synopsis "C bindings for the SFML multimedia library")
1407 (description
1408 "CSFML is the official C binding to the SFML libraries. SFML provides a
1409simple interface to the various computer components, to ease the development of
1410games and multimedia applications. It is composed of five modules: system,
1411window, graphics, audio and network.")
1412 (home-page "https://www.sfml-dev.org/download/csfml/")
1413 (license license:zlib)))
1414
1415(define-public sfxr
1416 (package
1417 (name "sfxr")
1418 (version "1.2.1")
1419 (source (origin
1420 (method url-fetch)
1421 (uri (string-append "http://www.drpetter.se/files/sfxr-sdl-1.2.1.tar.gz"))
1422 (sha256
1423 (base32
1424 "0dfqgid6wzzyyhc0ha94prxax59wx79hqr25r6if6by9cj4vx4ya"))))
1425 (build-system gnu-build-system)
1426 (arguments
1427 `(#:phases (modify-phases %standard-phases
1428 (delete 'configure) ; no configure script
1429 (add-before 'build 'fix-undefined-no-return
1430 ;; The function is missing a return statement but
1431 ;; says it'll return bool...
1432 ;; Callees aren't expecting anything!
1433 (lambda _
1434 (substitute* "sdlkit.h"
1435 (("static bool ddkLock")
1436 "static void ddkLock"))))
1437 (add-before 'build 'patch-makefile
1438 (lambda* (#:key outputs #:allow-other-keys)
1439 (let ((out (assoc-ref outputs "out")))
1440 (substitute* "Makefile"
1441 (("\\$\\(DESTDIR\\)/usr") out))
1442 (substitute* "main.cpp"
1443 (("/usr/share")
1444 (string-append out "/share")))
1445 #t))))
1446 #:tests? #f)) ; no tests
1447 (native-inputs
1448 (list pkg-config desktop-file-utils))
1449 (inputs
1450 (list sdl gtk+))
1451 (synopsis "Simple sound effect generator")
1452 (description "Sfxr is a tool for quickly generating simple sound effects.
1453Originally created for use in video game prototypes, it can generate random
1454sounds from presets such as \"explosion\" or \"powerup\".")
1455 (home-page "https://www.drpetter.se/project_sfxr.html")
1456 (license license:expat)))
1457
1458(define-public sfxr-qt
1459 (package
1460 (name "sfxr-qt")
1461 (version "1.5.1")
1462 (source
1463 (origin
1464 (method git-fetch)
1465 (uri (git-reference
1466 (url "https://github.com/agateau/sfxr-qt")
1467 (commit version)))
1468 (file-name (git-file-name name version))
1469 (sha256
1470 (base32 "0ghmw8kvc5rd10kqaslbdmj7nrp8g9sslzhp18v32x4njwapavdc"))
1471 (modules '((guix build utils)))
1472 (snippet
1473 #~(begin
1474 ;; Unbundles qpropgen.
1475 (delete-file-recursively "3rdparty")
1476 (substitute* "CMakeLists.txt"
1477 (("include\\(3rdparty[^\n]+")
1478 "include(qpropgen)"))))))
1479 (build-system qt-build-system)
1480 (arguments
1481 (list
1482 #:configure-flags
1483 #~(list "-DUSE_SYSTEM_CATCH2=ON"
1484 (string-append "-DCMAKE_MODULE_PATH="
1485 #+qpropgen "/share/qpropgen/cmake"))))
1486 (inputs
1487 (list qtdeclarative-5
1488 qtquickcontrols-5 ;QtQuick.Dialogs
1489 qtquickcontrols2-5 ;QtQuick.Controls, QtQuick.Layouts
1490 sdl))
1491 (native-inputs (list catch2 extra-cmake-modules qpropgen))
1492 (home-page "https://github.com/agateau/sfxr-qt")
1493 (synopsis "Retro sound effect generator")
1494 (description "This package provides a QtQuick Controls 2 port of SFXR.
1495It has the same features as the original SFXR with a more modern user
1496interface.")
1497 (license license:expat)))
1498
1499(define-public surgescript
1500 (package
1501 (name "surgescript")
1502 (version "0.6.0")
1503 (source
1504 (origin
1505 (method git-fetch)
1506 (uri (git-reference
1507 (url "https://github.com/alemart/surgescript")
1508 (commit (string-append "v" version))))
1509 (file-name (git-file-name name version))
1510 (sha256
1511 (base32 "17k14108hvz329cqnr3g799ksmiv8d710slnghi2wmwswir8s0jd"))))
1512 (build-system cmake-build-system)
1513 (arguments
1514 (list #:tests? #f)) ; there are no tests
1515 (home-page "https://docs.opensurge2d.org")
1516 (synopsis "Scripting language for games")
1517 (description "@code{SurgeScript} is a dynamically typed object-oriented
1518scripting language designed for games. Each object is a state machine that
1519can be customized by attaching other objects. The language supports automatic
1520garbage collection and can be extended with plugins.")
1521 (license license:asl2.0)))
1522
1523(define-public physfs
1524 (package
1525 (name "physfs")
1526 (version "3.0.2")
1527 (source (origin
1528 (method url-fetch)
1529 (uri (string-append
1530 "https://icculus.org/physfs/downloads/physfs-"
1531 version ".tar.bz2"))
1532 (file-name (string-append name "-" version ".tar.gz"))
1533 (sha256
1534 (base32
1535 "0qzqz4r88gvd8m7sh2z5hvqcr0jfr4wb2f77c19xycyn0rigfk9h"))))
1536 (build-system cmake-build-system)
1537 (arguments
1538 '(#:tests? #f ; no check target
1539 #:configure-flags '("-DPHYSFS_BUILD_STATIC=OFF")
1540 #:phases (modify-phases %standard-phases
1541 (add-after 'unpack 'patch-CMakeLists.txt
1542 (lambda _
1543 (substitute* "CMakeLists.txt"
1544 ;; XXX: For some reason CMakeLists.txt disables
1545 ;; RUNPATH manipulation when the compiler is GCC.
1546 (("CMAKE_COMPILER_IS_GNUCC") "FALSE"))
1547 #t)))))
1548 (inputs
1549 (list zlib))
1550 (native-inputs
1551 (list doxygen))
1552 (home-page "https://icculus.org/physfs")
1553 (synopsis "File system abstraction library")
1554 (description
1555 "PhysicsFS is a library to provide abstract access to various archives.
1556It is intended for use in video games. For security, no file writing done
1557through the PhysicsFS API can leave a defined @emph{write directory}. For
1558file reading, a @emph{search path} with archives and directories is defined,
1559and it becomes a single, transparent hierarchical file system. So archive
1560files can be accessed in the same way as you access files directly on a disk,
1561and it makes it easy to ship a new archive that will override a previous
1562archive on a per-file basis.")
1563 (license license:zlib)))
1564
1565(define-public physfs-sdl3
1566 ;; 3.2.0 does not include SDL3 glue layer, use oldest compatible commit
1567 (let ((commit "49cfd5fdd46f38b4c2611556b44ee9b0d308e162")
1568 (revision "0"))
1569 (package
1570 (name "physfs-sdl3")
1571 (version (git-version "3.2.0" revision commit))
1572 (source
1573 (origin
1574 (method git-fetch)
1575 (uri (git-reference
1576 (url "https://github.com/icculus/physfs")
1577 (commit commit)))
1578 (file-name (git-file-name name version))
1579 (sha256
1580 (base32 "18i0dalg5w5c6y6fnalb87bxf2qgx4cbniq9a08rhsjwy8lwz8xz"))))
1581 (build-system gnu-build-system)
1582 (arguments
1583 (list
1584 #:tests? #f ;no tests
1585 #:phases
1586 #~(modify-phases %standard-phases
1587 (delete 'configure)
1588 (add-before 'build 'chdir-source
1589 (lambda _
1590 (chdir "extras")))
1591 (replace 'build
1592 (lambda -
1593 (invoke "gcc" "-shared" "-fPIC" "-O2"
1594 "-o" "libphysfssdl3.so" "physfssdl3.c")))
1595 (replace 'install
1596 (lambda _
1597 (let ((out #$output))
1598 (install-file "libphysfssdl3.so"
1599 (string-append #$output "/lib"))
1600 (install-file "physfssdl3.h"
1601 (string-append #$output "/include"))
1602 (with-output-to-file "physfs-sdl3.pc"
1603 (lambda ()
1604 (format #t "\
1605prefix=~a
1606libdir=${prefix}/lib
1607includedir=${prefix}/include
1608
1609Name: physfs-sdl3
1610Version: 3.2.0
1611Description: PhysicsFS SDL3 integration
1612Libs: -L${libdir} -lphysfssdl3
1613Cflags: -I${includedir}
1614" out)))
1615 (install-file "physfs-sdl3.pc"
1616 (string-append out "/lib/pkgconfig"))))))))
1617 (inputs (list physfs sdl3))
1618 (synopsis "PhysicsFS SDL3 I/O backend")
1619 (home-page "https://github.com/icculus/physfs")
1620 (description "This package provides @file{physfssdl3.c} and its header,
1621which implement SDL3's @code{SDL_IOStream} and @code{SDL_Storage}
1622interfaces using PhysicsFS as the backend. It enables SDL3 applications
1623to load assets from compressed archives and other PhysicsFS-supported
1624storage through the standard SDL3 API.")
1625 (license license:public-domain))))
1626
1627(define-public love
1628 (package
1629 (name "love")
1630 (version "11.5")
1631 (source
1632 (origin
1633 (method url-fetch)
1634 (uri (string-append "https://github.com/love2d/love/releases/download/"
1635 version "/love-" version "-linux-src.tar.gz"))
1636 (sha256
1637 (base32 "0fachzyfl26gwg13l5anfppzljxpmd0pvwpap0lgva8syx1hhvh6"))))
1638 (build-system gnu-build-system)
1639 (native-inputs
1640 (list pkg-config))
1641 (inputs
1642 (list freetype
1643 libmodplug
1644 libmpg123
1645 libtheora
1646 libvorbis
1647 luajit
1648 mesa
1649 openal
1650 sdl2
1651 zlib))
1652 (synopsis "2D game framework for Lua")
1653 (description "LÖVE is a framework for making 2D games in the Lua
1654programming language.")
1655 (home-page "https://love2d.org/")
1656 (license license:zlib)))
1657
1658(define-public love-nuklear
1659 (package
1660 (name "love-nuklear")
1661 (version "2.6.1")
1662 (source (origin
1663 (method git-fetch)
1664 (uri (git-reference
1665 (url "https://github.com/keharriso/love-nuklear/")
1666 (commit (string-append "v" version))
1667 (recursive? #t)))
1668 ;; NOTE: the HEAD of the Nuklear git-submodule is at commit
1669 ;; "adc52d710fe3c87194b99f540c53e82eb75c2521" of Oct 1 2019
1670 (file-name (git-file-name name version))
1671 (sha256
1672 (base32
1673 "090xp5c975155hd1pa7bdssdlawvygs5s6icdkwbyc8il5kg5kgv"))))
1674 (build-system cmake-build-system)
1675 (arguments
1676 `(#:build-type "Release"
1677 #:tests? #f
1678 #:phases
1679 (modify-phases %standard-phases
1680 (add-after 'unpack 'patch-cmake
1681 (lambda _
1682 (substitute* "CMakeLists.txt"
1683 (("DESTINATION .") "DESTINATION lib/love")))))))
1684 (inputs
1685 (list luajit))
1686 (synopsis "Lightweight immediate mode GUI for LÖVE games")
1687 (description "LÖVE is a Lua framework for making 2D games. Nuklear
1688is a minimal state immediate mode graphical user interface toolkit. This
1689package is the Nuklear bindings for LÖVE created by Kevin Harrison.")
1690 (home-page "https://github.com/keharriso/love-nuklear/")
1691 (license license:expat)))
1692
1693(define-public allegro
1694 (package
1695 (name "allegro")
1696 (version "5.2.7.0")
1697 (source (origin
1698 (method url-fetch)
1699 (uri (string-append "https://github.com/liballeg/allegro5/releases"
1700 "/download/" version "/allegro-"
1701 version ".tar.gz"))
1702 (sha256
1703 (base32
1704 "034pmbmbq6jagpp4lhnyjqmf8gcz5fx74d9rknrm7d4wv4cv7qy1"))))
1705 (build-system cmake-build-system)
1706 (arguments `(#:tests? #f)) ; there are no tests
1707 (inputs
1708 ;; FIXME: Add the following optional inputs: xinput2, opensl, dumb
1709 `(("flac" ,flac)
1710 ("freetype" ,freetype)
1711 ("glu" ,glu)
1712 ("gtk" ,gtk+)
1713 ("libjpeg" ,libjpeg-turbo)
1714 ("libpng" ,libpng)
1715 ("libtheora" ,libtheora)
1716 ("libvorbis" ,libvorbis)
1717 ("libxcursor" ,libxcursor)
1718 ("libxinerama" ,libxinerama)
1719 ("libxrandr" ,libxrandr)
1720 ("mesa" ,mesa)
1721 ("openal" ,openal)
1722 ("physfs" ,physfs)
1723 ("zlib" ,zlib)))
1724 (native-inputs
1725 (list pkg-config))
1726 (synopsis "Game programming library")
1727 (description "Allegro is a library mainly aimed at video game and
1728multimedia programming. It handles common, low-level tasks such as creating
1729windows, accepting user input, loading data, drawing images, playing sounds,
1730etc.")
1731 (home-page "https://liballeg.org")
1732 (license license:bsd-3)))
1733
1734(define-public libresprite
1735 (package
1736 (name "libresprite")
1737 (version "1.3")
1738 ;; TODO: Unbundle third party software: quickjs, simpleini, qoi, etc.
1739 (source (origin
1740 (method git-fetch)
1741 (uri (git-reference
1742 (url "https://github.com/LibreSprite/LibreSprite")
1743 (commit (string-append "v" version))
1744 (recursive? #t)))
1745 (file-name (git-file-name name version))
1746 (sha256
1747 (base32
1748 "0vq3bh5yj5g80q6f5k26d531dsqf19mcr9b5a3cgnfyv8n6w7l9d"))))
1749 (build-system cmake-build-system)
1750 (arguments
1751 (list #:configure-flags
1752 #~(list "-DWITH_WEBP_SUPPORT=1"
1753 "-DWITH_DESKTOP_INTEGRATION=1"
1754 "-DRELEASE_TAG=ON"
1755 (string-append "-DRELEASE_VERSION=" #$version))
1756 #:cmake cmake-minimal-4 ; cmake>=4.1 required
1757 ;; Tests are unmaintained
1758 #:tests? #f
1759 #:modules `((ice-9 match)
1760 (guix build cmake-build-system)
1761 (guix build utils))
1762 #:phases
1763 #~(modify-phases %standard-phases
1764 (add-after 'install 'replace-bundled-fonts
1765 (lambda* (#:key inputs outputs #:allow-other-keys)
1766 (with-directory-excursion
1767 (string-append (assoc-ref outputs "out")
1768 "/share/libresprite/data/fonts")
1769 (for-each
1770 (match-lambda
1771 ((font replacement)
1772 (delete-file font)
1773 (symlink
1774 (search-input-file
1775 inputs
1776 (string-append
1777 "share/fonts/opentype/" replacement))
1778 font)))
1779 ;; NotoSans-Regular needs to be 'full' for Hindi support.
1780 '(("font.ttf" "NotoSans-Regular.otf")
1781 ("font-ar.ttf" "NotoKufiArabic-Regular.otf")
1782 ("font-zh.ttf" "SourceHanSansCN-Regular.otf")
1783 ("font-jp.ttf" "SourceHanSansJP-Regular.otf")
1784 ("font-kr.ttf" "SourceHanSansKR-Regular.otf")))))))))
1785 (native-inputs (list pkg-config))
1786 (inputs
1787 (list curl
1788 font-google-noto
1789 (list font-adobe-source-han-sans "cn")
1790 (list font-adobe-source-han-sans "jp")
1791 (list font-adobe-source-han-sans "kr")
1792 freetype
1793 giflib
1794 googletest
1795 libarchive
1796 libjpeg-turbo
1797 libpng
1798 libwebp
1799 libx11
1800 libxext
1801 libxi
1802 libxxf86dga
1803 libxxf86vm
1804 lua ;optional
1805 pixman
1806 sdl2
1807 sdl2-image
1808 tinyxml2
1809 zlib))
1810 (synopsis "Animated sprite editor and pixel art tool")
1811 (description "LibreSprite is a tool for creating 2D pixel art for video
1812games. In addition to basic pixel editing features, it can assist in the
1813creation of animations, tiled graphics, texture atlases, and more.
1814LibreSprite is a fork of the latest GPLv2 commit of Aseprite.")
1815 (home-page "https://libresprite.github.io/")
1816 (license license:gpl2+)))
1817
1818(define-public qqwing
1819 (package
1820 (name "qqwing")
1821 (version "1.3.4")
1822 (source (origin
1823 (method url-fetch)
1824 (uri (string-append
1825 "https://qqwing.com/"
1826 name "-" version ".tar.gz"))
1827 (sha256
1828 (base32
1829 "0bw0papyqjg22z6irf36gs54y8236wa37b6gyn2h1spy65n76lqp"))))
1830 (build-system gnu-build-system)
1831 (native-inputs
1832 (list pkg-config))
1833 (home-page "https://qqwing.com/")
1834 (synopsis "Sudoku puzzle solver and generator")
1835 (description
1836 "QQWing is a Sudoku puzzle generator and solver.
1837It offers the following features:
1838@enumerate
1839@item Can solve 1000 puzzles in 1 second and generate 1000 puzzles in 25 seconds.
1840@item Uses logic. Uses as many solve techniques as possible when solving
1841 puzzles rather than guessing.
1842@item Rates puzzles. Most generators don't give an indication of the difficulty
1843 of a Sudoku puzzle. QQwing does.
1844@item Can print solve instructions for any puzzle.
1845@item Customizable output style, including a CSV style that is easy to
1846 import into a database.
1847@end enumerate")
1848 (license license:gpl2+)))
1849
1850(define-public quesoglc
1851 (package
1852 (name "quesoglc")
1853 (version "0.7.2")
1854 (source (origin
1855 (method url-fetch)
1856 (uri (string-append "mirror://sourceforge/" name "/" version "/"
1857 name "-" version "-free.tar.bz2"))
1858 (sha256
1859 (base32
1860 "08ddhywdy2qg17m592ng3yr0p1ih96irg8wg729g75hsxxq9ipks"))))
1861 (build-system gnu-build-system)
1862 (arguments
1863 `(#:configure-flags
1864 ;; Disable added pointer type checks (quesoglc no longer maintained)
1865 '("CFLAGS=-g -O2 -Wno-error=incompatible-pointer-types")))
1866 (native-inputs (list pkg-config))
1867 (inputs (list fontconfig freeglut fribidi glew))
1868 (home-page "https://quesoglc.sourceforge.net")
1869 (synopsis "Implementation of the OpenGL Character Renderer (GLC)")
1870 (description
1871 "The OpenGL Character Renderer (GLC) is a state machine that provides
1872OpenGL programs with character rendering services via an application programming
1873interface (API).")
1874 (license (list license:expat license:lgpl2.1+))))
1875
1876(define-public python-pygame
1877 (package
1878 (name "python-pygame")
1879 (version "2.6.1")
1880 (source (origin
1881 (method url-fetch)
1882 (uri (pypi-uri "pygame" version))
1883 (sha256
1884 (base32
1885 "07zbkyff0vk1pzlaiah9b5jhqy70fmzh0gjw846y1ki9spm05ysn"))))
1886 (build-system pyproject-build-system)
1887 (arguments
1888 (list
1889 #:test-flags
1890 #~(list
1891 ;; This fails collection as it fails to find a test file.
1892 "--ignore=test/run_tests__tests/run_tests__test.py"
1893 ;; Some display tests fail with a Python segmentation fault.
1894 "--ignore=test/display_test.py"
1895 "--ignore=test/mouse_test.py"
1896 ;; Those fail with ALSA: Couldn't open audio device.
1897 "--ignore=test/mixer_test.py"
1898 "--ignore=test/mixer_music_test.py"
1899 "--deselect=test/base_test.py::BaseModuleTest::test_init"
1900 "--deselect=test/base_test.py::BaseModuleTest::test_quit__and_init"
1901 ;; Flaky tests.
1902 "--ignore=test/surface_test.py"
1903 ;; Require clipboard access.
1904 "--ignore=test/scrap_test.py"
1905 ;; Tests in these files are hanging.
1906 "--ignore=test/font_test.py"
1907 "--ignore=test/ftfont_test.py"
1908 "--ignore=test/run_tests__tests/infinite_loop"
1909 ;; Pytest stdout/stderr issues
1910 "--deselect=test/controller_test.py::ControllerInteractiveTest::\
1911test__get_count_interactive"
1912 "--deselect=test/joystick_test.py::JoystickInteractiveTest::\
1913test_get_count_interactive"
1914 "--ignore-glob=test/run_tests__tests/print_std*/"
1915 "--ignore=test/run_tests__tests/failures1/fake_4_test.py"
1916 ;; Sysfont issues
1917 "--deselect=test/sysfont_test.py::SysfontModuleTest"
1918 "--deselect=test/freetype_test.py::FreeTypeFontTest::\
1919test_freetype_SysFont_name"
1920 "--deselect=test/image_test.py::test_magic")
1921 #:phases
1922 #~(modify-phases %standard-phases
1923 (add-after 'unpack 'fix-build-config
1924 (lambda _
1925 (substitute* "buildconfig/config_unix.py"
1926 (("origincdirs = \\[.*\\]")
1927 "origincdirs = os.environ['C_INCLUDE_PATH'].split(\":\")")
1928 (("ORIGLIBDIRS") "LIBRARY_PATH")
1929 (("incdirs = \\[\\]") "incdirs = origincdirs")
1930 (("libdirs = \\[\\]") "libdirs = origlibdirs"))))
1931 (add-after 'unpack 'fix-sdl2-headers
1932 (lambda _
1933 (substitute* "buildconfig/config_unix.py"
1934 (("SDL_ttf.h") "SDL2/SDL_ttf.h")
1935 (("SDL_image.h") "SDL2/SDL_image.h")
1936 (("SDL_mixer.h") "SDL2/SDL_mixer.h"))
1937 (substitute* "src_c/imageext.c"
1938 (("SDL_image.h") "SDL2/SDL_image.h"))
1939 (substitute* "src_c/font.h"
1940 (("SDL_ttf.h") "SDL2/SDL_ttf.h"))
1941 (substitute* "src_c/mixer.h"
1942 (("SDL_mixer.h") "SDL2/SDL_mixer.h"))
1943 (substitute* "src_c/_sdl2/mixer.c"
1944 (("SDL_mixer.h") "SDL2/SDL_mixer.h"))))
1945 (add-before 'check 'pre-check
1946 (lambda _
1947 (setenv "XDG_RUNTIME_DIR" (getcwd)))))))
1948 (native-inputs
1949 (list pkg-config python-numpy python-pytest python-setuptools))
1950 (inputs
1951 (list freetype
1952 sdl2
1953 sdl2-image
1954 sdl2-mixer
1955 sdl2-ttf
1956 sdl2-gfx
1957 libjpeg-turbo
1958 libpng
1959 libx11
1960 libsmpeg
1961 portmidi
1962 v4l-utils))
1963 (home-page "https://www.pygame.org")
1964 (synopsis "SDL wrapper for Python")
1965 (description "Pygame is a set of Python modules designed for writing games.
1966It adds functionality on top of the SDL library, allowing you to create games
1967and multimedia programs in the Python language.")
1968 (license (list license:bsd-2
1969 ;; python numeric license as listed by Debian looks like
1970 ;; an Expat-style license with a warranty disclaimer for
1971 ;; the U.S. government and the University of California.
1972 license:expat
1973 license:lgpl2.0+
1974 license:lgpl2.1+
1975 license:gpl3+
1976 license:psfl
1977 license:public-domain
1978 license:lgpl2.1+))))
1979
1980(define-public python-pygame-menu
1981 (package
1982 (name "python-pygame-menu")
1983 (version "4.5.4")
1984 (source
1985 ;; Tests not included in release.
1986 (origin
1987 (method git-fetch)
1988 (uri
1989 (git-reference
1990 (url "https://github.com/ppizarror/pygame-menu")
1991 (commit version)))
1992 (file-name (git-file-name name version))
1993 (sha256
1994 (base32 "1a474rvjkm9d45h0bhgaf9h21r3lcgqd27686fav8601395jgwrg"))))
1995 (build-system pyproject-build-system)
1996 (arguments
1997 (list
1998 #:test-flags
1999 ;; AssertionError: Tuples differ: (111, 110) != (110, 109)
2000 #~(list "--deselect=test/test_baseimage.py::BaseImageTest::test_invalid_image"
2001 ;; IndexError: list index out of range
2002 "--deselect=test/test_font.py::FontTest::test_font_argument"
2003 ;;IndexError: pop from empty list
2004 "--deselect=test/test_font.py::FontTest::test_system_load")
2005 #:phases
2006 #~(modify-phases %standard-phases
2007 (add-before 'check 'pre-check
2008 (lambda _
2009 (setenv "HOME" "/tmp"))))))
2010 (native-inputs
2011 (list python-pytest
2012 python-setuptools))
2013 (propagated-inputs
2014 (list python-pygame
2015 python-pyperclip
2016 python-typing-extensions))
2017 (home-page "https://pygame-menu.readthedocs.io")
2018 (synopsis "Menu for pygame")
2019 (description
2020 "Pygame-menu is a python-pygame library for creating menus and GUIs.
2021It supports several widgets, such as buttons, color inputs, clock objects,
2022drop selectors, frames, images, labels, selectors, tables, text inputs,
2023color switches, and many more, with multiple options to customize.")
2024 (license license:expat)))
2025
2026(define-public python-pygame-ce
2027 (package
2028 (name "python-pygame-ce")
2029 (version "2.5.7")
2030 (source
2031 (origin
2032 (method git-fetch)
2033 (uri (git-reference
2034 (url "https://github.com/pygame-community/pygame-ce")
2035 (commit version)))
2036 (file-name (git-file-name name version))
2037 (sha256
2038 (base32 "1awvs4wa9fgm8xldsxzdx1knijjpzz560lzj3rjvks3gcw8szhzx"))))
2039 (build-system pyproject-build-system)
2040 (arguments
2041 (list
2042 #:test-flags
2043 #~(list "-k" (string-join
2044 ;; Ignore interactive tests first.
2045 (list "not DisplayUpdateInteractiveTest"
2046 "DisplayInteractiveTest"
2047 "FullScreenToggleTestsInteractive"
2048 "MessageBoxInteractiveTest"
2049 "VisualTestsInteractive"
2050 "TouchInteractiveTest"
2051 ;; Pytest error reading from stdin
2052 "test__get_count_interactive"
2053 "test_get_count_interactive"
2054 "test_set_source_location"
2055 ;; Will not convert image with alpha channel to RGB
2056 "testSavePNG24"
2057 "testSavePNG8"
2058 "testSavePaletteAsPNG8"
2059 ;; Content could not be saved in clipboard
2060 "test_get__owned_empty_type"
2061 "test_init__reinit"
2062 "test_put"
2063 "test_put__bmp_image"
2064 "test_put__text"
2065 "test_issue_223"
2066 ;; AssertionError
2067 "test_palette_colorkey"
2068 "test_palette_colorkey_fill"
2069 "test_palette_colorkey_set_px"
2070 "test_create_aliases"
2071 ;; Possibly flaky tests
2072 "test_multiple_timers"
2073 "test_timer_common_reference")
2074 " and not "))
2075 #:phases #~(modify-phases %standard-phases
2076 (add-before 'check 'pre-check
2077 (lambda _
2078 (setenv "HOME" "/tmp")
2079 (setenv "SDL_VIDEODRIVER" "dummy")
2080 (setenv "SDL_AUDIODRIVER" "disk"))))))
2081 (native-inputs (list pkg-config
2082 python-meson
2083 python-numpy
2084 python-pytest
2085 python-setuptools))
2086 (inputs (list freetype portmidi sdl2 sdl2-image sdl2-mixer sdl2-ttf))
2087 (home-page "https://pyga.me/")
2088 (synopsis "Python Game Development")
2089 (description "Pygame-CE is a fork of the upstream pygame project by its
2090former core developers. It aims to offer more frequent releases, continuous
2091bugfixes and enhancements, and a new governance model.")
2092 (license license:lgpl2.1+)))
2093
2094(define-public python-renpy
2095 (package
2096 (name "python-renpy")
2097 (version "8.5.0")
2098 (source
2099 (origin
2100 (method url-fetch)
2101 (uri (string-append "https://www.renpy.org/dl/" version
2102 "/renpy-" version "-source.tar.bz2"))
2103 (sha256
2104 (base32
2105 "1dv856sb8mak21kkj0ys0k6zc6ly2k8102ahnfdrc04cwdrryw6b"))
2106 (modules '((guix build utils)))
2107 ;; TODO: Remove when updating Python to 3.12 or higher.
2108 (patches (search-patches "renpy-python-3.11-compat.patch"
2109 "renpy-fix-integer-slots.patch"))
2110 (snippet
2111 #~(begin
2112 ;; Build without sync service.
2113 ;; Encryption is only used for enabling this service and requires
2114 ;; libhydrogen, which doesn't have a public release, so drop it
2115 ;; as well
2116 (for-each delete-file
2117 '("renpy/encryption.pyx"
2118 "renpy/common/00sync.rpy"))
2119 (delete-file-recursively "src/libhydrogen")
2120 (substitute* "setup.py"
2121 (("cython\\(\"renpy\\.encryption\"\\)") "")
2122 (("version = .*") (string-append "version = \"" #$version "\"")))
2123 (substitute* "renpy/__init__.py"
2124 (("import renpy\\.encryption") ""))
2125 ;; Trust vc_version.py when it comes to detecting whether a
2126 ;; version is official.
2127 (substitute* "renpy/__init__.py"
2128 (("official = official and .*") ""))
2129
2130 ;; Make source compatible with Python 3.11.
2131 ;; Drop this part once a newer Python is used.
2132 (substitute* (find-files "renpy" "\\.py$")
2133 (("type ([A-Za-z0-9]+) =" all id)
2134 (string-append id " =")))
2135 (substitute* "renpy/minstore.py"
2136 ((", override") ""))
2137
2138 ;; Use SDL2/ prefix.
2139 (substitute* "src/pygame/sdl_image_compat.h"
2140 (("\"SDL_image.h\"") "<SDL2/SDL_image.h>"))))))
2141 (build-system pyproject-build-system)
2142 (arguments
2143 (list
2144 #:tests? #f ; Ren'py doesn't seem to package tests
2145 #:phases
2146 #~(modify-phases %standard-phases
2147 (add-after 'unpack 'fix-commands
2148 (lambda* (#:key inputs #:allow-other-keys)
2149 (substitute* "renpy/editor.py"
2150 (("xdg-open")
2151 (string-append (assoc-ref inputs "xdg-utils")
2152 "/bin/xdg-open")))))
2153 (add-after 'set-paths 'set-build-vars
2154 (lambda* (#:key inputs native-inputs #:allow-other-keys)
2155 (setenv "RENPY_CYTHON"
2156 (search-input-file (or native-inputs inputs)
2157 "/bin/cython"))
2158 (setenv "RENPY_DEPS_INSTALL" (string-join (map cdr inputs) ":"))))
2159 (add-after 'build 'build-renpy
2160 (lambda _
2161 (invoke "python" "-m" "compileall" "renpy")))
2162 (add-after 'install 'install-renpy
2163 (lambda* (#:key inputs outputs #:allow-other-keys)
2164 (let ((site (string-append (assoc-ref outputs "out")
2165 "/lib/python"
2166 (python-version
2167 (assoc-ref inputs "python"))
2168 "/site-packages")))
2169 (copy-recursively "renpy"
2170 (string-append site "/renpy"))
2171 (delete-file-recursively
2172 (string-append site "/renpy/common"))
2173 (for-each delete-file
2174 (find-files site "\\.py[ix]"))))))))
2175 (native-inputs (list pkg-config
2176 python-cython
2177 python-setuptools
2178 python-wheel))
2179 (inputs
2180 (list assimp
2181 ffmpeg
2182 freetype
2183 fribidi
2184 glew
2185 libpng
2186 (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
2187 xdg-utils))
2188 (propagated-inputs (list python-ecdsa python-future))
2189 (home-page "https://www.renpy.org/")
2190 (synopsis "Ren'py python module")
2191 (description "This package contains the shared libraries and Python modules
2192of Ren'py. While functional, they are not meaningful on their own without
2193the launcher and common Ren'py code provided by the @code{renpy} package and
2194are only used to bootstrap it.")
2195 (license license:expat)))
2196
2197(define-public renpy
2198 (package
2199 (inherit python-renpy)
2200 (name "renpy")
2201 (build-system pyproject-build-system)
2202 (arguments
2203 (list
2204 #:tests? #f
2205 #:phases
2206 #~(modify-phases %standard-phases
2207 (add-after 'unpack 'fix-launcher
2208 (lambda* (#:key inputs outputs #:allow-other-keys)
2209 (substitute* "launcher/game/gui7.rpy"
2210 (("([ ]*)import gui7" all indent)
2211 (string-append indent "import sys\n"
2212 indent "import os\n"
2213 indent "from store import config\n"
2214 indent "sys.path.insert(0, os.path.join"
2215 "(config.renpy_base, \"launcher\"))\n"
2216 all)))
2217 (substitute* "launcher/game/project.rpy"
2218 (("cmd = \\[ executable, sys.argv\\[0\\] \\]")
2219 (string-append "cmd = [ \"" (assoc-ref outputs "out")
2220 "/bin/renpy\" ]"))
2221 ;; Projects are still created in the usual style, so we need
2222 ;; to adjust the path.
2223 (("cmd.append\\(self.path\\)")
2224 "cmd.append(self.path + \"/game\")"))
2225 (substitute* "renpy/common/00action_other.rpy"
2226 (("xdg-open") (search-input-file inputs "bin/xdg-open")))))
2227 (add-after 'unpack 'drop-game-from-paths
2228 (lambda _
2229 (substitute* (list "launcher/game/gui7.rpy"
2230 "launcher/game/gui7/images.py")
2231 ((", \"gui\", \"game\",") ", \"gui\",")
2232 ((", \"game\", \"gui7\",") ", \"gui7\","))
2233 (substitute* "gui/game/guisupport.rpy"
2234 ((", \"launcher\", \"game\"") ", \"launcher\""))))
2235 (delete 'build)
2236 (replace 'install
2237 (lambda* (#:key inputs outputs #:allow-other-keys)
2238 ;; Here we install our custom renpy program.
2239 ;; After finishing this step, "out" will have the following:
2240 ;; |-- bin
2241 ;; | |-- renpy ; stupid launcher, requires game path
2242 ;; | `-- renpy-launcher ; upstream launcher
2243 ;; `-- share/renpy ; i.e. path_to_renpy_base()
2244 ;; |-- common
2245 ;; |-- launcher
2246 ;; |-- gui
2247 ;; `-- sdk-fonts
2248 ;;
2249 ;; Note that common shares the source files that would be installed
2250 ;; by python-renpy (which are instead deleted from that package),
2251 ;; but also contains their byte-compiled versions.
2252 ;; On other systems, renpy_base would point to site-packages or
2253 ;; even somewhere in /opt.
2254 ;; The former approach is not as straightforward as it seems
2255 ;; -- it causes renpy to load files twice for some weird reason --
2256 ;; and the latter is impossible on Guix. Hence the detour through
2257 ;; share/renpy and the custom renpy program.
2258 ;;
2259 ;; As a convention, other games should be installed as
2260 ;; subdirectories of share/renpy in their respective outputs as
2261 ;; well. This differs from the traditional layout, which is
2262 ;; roughly the following:
2263 ;; `-- Super Awesome Game
2264 ;; |-- game ; <- the folder we actually want
2265 ;; |-- lib ; compiled renpy module and dependencies
2266 ;; |-- renpy ; yet another copy of Ren'py's code
2267 ;; | |-- common ; the common folder from above
2268 ;; | `-- ... ; Python code (source + compiled)
2269 ;; |-- Super Awesome Game.py
2270 ;; `-- Super Awesome Game.sh
2271 (let* ((out (assoc-ref outputs "out"))
2272 (bin/renpy (string-append out "/bin/renpy"))
2273 (bin/renpy-launcher (string-append out "/bin/renpy-launcher")))
2274 (copy-recursively "renpy/common"
2275 (string-append out "/share/renpy/common"))
2276 (copy-recursively "launcher/game"
2277 (string-append out "/share/renpy/launcher"))
2278 (copy-recursively "gui/game"
2279 (string-append out "/share/renpy/gui"))
2280 (copy-recursively "sdk-fonts"
2281 (string-append out "/share/renpy/sdk-fonts"))
2282 (mkdir-p (string-append out "/bin"))
2283 (copy-file #$(local-file (search-auxiliary-file "renpy/renpy.in"))
2284 bin/renpy)
2285 (substitute* bin/renpy
2286 (("@PYTHON@") (search-input-file inputs "bin/python3"))
2287 (("@RENPY_BASE@") (string-append out "/share/renpy")))
2288 (chmod bin/renpy #o755)
2289 (with-output-to-file bin/renpy-launcher
2290 (lambda _
2291 (format #t "#!~a~%exec ~a ~a \"$@\""
2292 (search-input-file inputs "/bin/bash")
2293 bin/renpy
2294 (string-append out "/share/renpy/launcher"))))
2295 (chmod bin/renpy-launcher #o755))))
2296 (add-after 'install 'build
2297 (lambda _
2298 (let* ((bin/renpy (string-append #$output "/bin/renpy"))
2299 (renpy-base (string-append #$output "/share/renpy")))
2300 (for-each
2301 (lambda (dir)
2302 (invoke bin/renpy (string-append renpy-base "/" dir) "quit"))
2303 (list "common" "gui" "launcher"))))))))
2304 (inputs (list bash-minimal
2305 python
2306 python-pefile
2307 python-requests
2308 python-renpy
2309 python-six
2310 `(,python "tk")
2311 xdg-utils))
2312 (propagated-inputs '())
2313 (native-inputs (list xorg-server-for-tests))
2314 (home-page "https://www.renpy.org/")
2315 (synopsis "Visual Novel Engine")
2316 (description "Ren'Py is a visual novel engine that helps you use words,
2317images, and sounds to tell interactive stories that run on computers and
2318mobile devices. These can be both visual novels and life simulation games.
2319The easy to learn script language allows anyone to efficiently write large
2320visual novels, while its Python scripting is enough for complex simulation
2321games.")
2322 (license license:expat)))
2323
2324(define-public renpy-the-question
2325 (package
2326 (inherit renpy)
2327 (name "renpy-the-question")
2328 (build-system renpy-build-system)
2329 (arguments (list #:game "the_question/game"))
2330 (native-inputs (list xorg-server-for-tests))
2331 (synopsis "Example visual novel")
2332 (description "The Question is a short example visual novel showing that
2333your Ren'py installation works, similar to a \"Hello World\" program in other
2334programming languages.")
2335 (license license:expat)))
2336
2337(define-public renpy-tutorial
2338 (package
2339 (inherit renpy)
2340 (name "renpy-tutorial")
2341 (build-system renpy-build-system)
2342 (arguments (list #:game "the_question/game"))
2343 (native-inputs (list xorg-server-for-tests))
2344 (synopsis "Tutorial for Ren'py")
2345 (description "This package provides an interactive tutorial for the Ren'py
2346visual novel engine, explaining all of its features.")
2347 (license license:expat)))
2348
2349(define-public rpatool
2350 ;; XXX: No releases or version tags, see:
2351 ;; <https://codeberg.org/shiz/rpatool/issues/28>.
2352 (let ((revision "0")
2353 (commit "74f26d5dfdd645483e02552aa766ca447ad6b191"))
2354 (package
2355 (name "rpatool")
2356 (version (git-version "0.8" revision commit))
2357 (source
2358 (origin
2359 (method git-fetch)
2360 (uri (git-reference
2361 (url "https://codeberg.org/shiz/rpatool")
2362 (commit commit)))
2363 (file-name (git-file-name name version))
2364 (sha256
2365 (base32 "10dm8bak0dm84d1ciwzw6jd5y64invddlmcdnawnpp7jn3wrg1jb"))))
2366 (build-system pyproject-build-system)
2367 (arguments
2368 (list
2369 #:tests? #f ;no tests
2370 #:phases
2371 #~(modify-phases %standard-phases
2372 (delete 'build)
2373 (replace 'install
2374 (lambda _
2375 (install-file "rpatool"
2376 (string-append #$output "/bin")))))))
2377 (home-page "https://codeberg.org/shiz/rpatool")
2378 (synopsis "Tool to work with Ren'Py archives")
2379 (description
2380 "@samp{rpatool} is a simple tool allowing you to create, modify and
2381extract @url{https://www.renpy.org/,Ren'Py} Archive files
2382(@code{.rpa}/@code{.rpi}). Currently, only writing RPAv2/RPAv3 archives is
2383supported.")
2384 (license license:wtfpl2))))
2385
2386(define-public python-pyxel
2387 ;; Note to updaters: Use commit and revision even if you're bumping
2388 ;; to a release, as upstream is known to "reuse" tags.
2389 ;; See <https://bugs.gnu.org/66015> for more information.
2390 (let ((commit "be75b724cae9e10e56a82a5421f9dd65390f1a06")
2391 (revision "2"))
2392 (package
2393 (name "python-pyxel")
2394 ;; This is the latest version to not require Rust…
2395 (version (git-version "1.4.3" revision commit))
2396 (source
2397 (origin
2398 (method git-fetch)
2399 (uri
2400 (git-reference
2401 (url "https://github.com/kitao/pyxel")
2402 (commit commit)))
2403 (file-name (git-file-name name version))
2404 (sha256
2405 (base32
2406 "03ch79cmh9fxvq6c2f3zc2snzczhqi2n01f254lsigckc7d5wz08"))
2407 (modules '((guix build utils)))
2408 (snippet
2409 #~(begin
2410 (substitute* "pyxel/__init__.py"
2411 (("from collections import MutableSequence")
2412 "from collections.abc import MutableSequence"))))))
2413 (build-system pyproject-build-system)
2414 (arguments
2415 (list
2416 #:tests? #f ; "Tests" are actually example programs that never halt.
2417 #:phases
2418 #~(modify-phases %standard-phases
2419 (add-after 'unpack 'patch-build-files
2420 (lambda* (#:key inputs #:allow-other-keys)
2421 (substitute* "setup.py"
2422 (("\"pyxel\\.core\\.bin\\.(.*)\"," all arch)
2423 (if (string=? arch "linux") all "")))
2424 (substitute* "pyxel/core/Makefile"
2425 (("`sdl2-config")
2426 (string-append "`sdl2-config --prefix="
2427 (assoc-ref inputs "sdl2"))))))
2428 (add-before 'build 'prebuild
2429 (lambda _
2430 (invoke "make" "-C" "pyxel/core"))))))
2431 (native-inputs (list python-setuptools))
2432 (inputs
2433 `(("gifsicle" ,gifsicle)
2434 ("sdl2" ,(sdl-union (list sdl2 sdl2-image)))))
2435 (home-page "https://github.com/kitao/pyxel")
2436 (synopsis "Retro game engine for Python")
2437 (description "Pyxel is a game engine inspired by retro gaming consoles.
2438It has a fixed 16-color palette, can hold up to 3 image banks and 8 tilemaps
2439(256x256 pixels each) and 4 sound channels with 64 definable sounds. It
2440also comes with a built-in image and sound editor.")
2441 (license license:expat))))
2442
2443(define-public grafx2
2444 (let ((3rd/6502 ;GPLv3+, used in source form
2445 (origin
2446 (method url-fetch)
2447 (uri "https://github.com/redcode/6502/releases/download/v0.1/6502-v0.1.tar.xz")
2448 (sha256
2449 (base32 "03wlndlmfsz51x7hmrfs02r3fzqk8a0grbzm2h80pm33f4r0z9dv"))))
2450 (3rd/recoil ;GPLv2+, does not install a library
2451 (origin
2452 (method url-fetch)
2453 (uri "https://downloads.sourceforge.net/project/recoil/recoil/6.4.2/recoil-6.4.2.tar.gz")
2454 (sha256
2455 (base32 "1p73cgfacia2gxvswhdixk6grpp9rs2n5258axh5vdb6ly8w3pi3")))))
2456 (package
2457 (name "grafx2")
2458 (version "2.9")
2459 (source
2460 (origin
2461 (method git-fetch)
2462 (uri (git-reference
2463 (url "https://gitlab.com/GrafX2/grafX2")
2464 (commit (string-append "v" version))))
2465 (file-name (git-file-name name version))
2466 (sha256
2467 (base32 "0rf85pm40nmp9f95adbzzfx2ypvqjl51wqvk461c4bk8z7anlniz"))
2468 (modules '((guix build utils)))
2469 (snippet
2470 #~(begin
2471 (mkdir "3rdparty/archives")
2472 (copy-file #$3rd/6502
2473 "3rdparty/archives/6502-v0.1.tar.xz")
2474 (copy-file #$3rd/recoil
2475 "3rdparty/archives/recoil-6.4.2.tar.gz")))))
2476 (build-system gnu-build-system)
2477 (arguments
2478 (list
2479 #:phases
2480 #~(modify-phases %standard-phases
2481 (delete 'configure) ; no configure script
2482 (add-before 'build 'change-to-src-directory
2483 (lambda _
2484 (chdir "src"))))
2485 #:make-flags
2486 #~(list "API=sdl2"
2487 (string-append "PREFIX="
2488 (assoc-ref %outputs "out")))
2489 #:tests? #f)) ; no check target
2490 (native-inputs
2491 (list pkg-config which))
2492 (inputs
2493 (list fontconfig lua (sdl-union (list sdl2 sdl2-image sdl2-ttf))))
2494 (synopsis "Bitmap paint program")
2495 (description "GrafX2 is a bitmap paint program inspired by the Amiga
2496programs Deluxe Paint and Brilliance. Specializing in 256-color drawing, it
2497includes a very large number of tools and effects that make it particularly
2498suitable for pixel art, game graphics, and generally any detailed graphics
2499painted with a mouse.")
2500 (home-page "http://pulkomandy.tk/projects/GrafX2")
2501 (license license:gpl2)))) ; GPLv2 only
2502
2503(define-public ois
2504 (package
2505 (name "ois")
2506 (version "1.5.1")
2507 (source
2508 (origin
2509 (method git-fetch)
2510 (uri (git-reference
2511 (url "https://github.com/wgois/OIS")
2512 (commit (string-append "v" version))))
2513 (file-name (git-file-name name version))
2514 (sha256
2515 (base32 "0nkh0zrsbyv47c0i0vhdna3jsnvs69pb1svg75avxw6z7kwskgla"))))
2516 (build-system cmake-build-system)
2517 (arguments
2518 `(#:tests? #f)) ; no test suite
2519 (inputs
2520 (list libx11))
2521 (synopsis "Object Oriented Input System")
2522 (description
2523 "Cross Platform Object Oriented Input Lib System is a cross platform,
2524simple solution for using all kinds of Input Devices (Keyboards, Mice,
2525Joysticks, etc) and feedback devices (e.g. force feedback). Meant to be very
2526robust and compatible with many systems and operating systems.")
2527 (home-page "https://github.com/wgois/OIS")
2528 (license license:zlib)))
2529
2530(define-public mc2mt
2531 ;; No tags in the repository.
2532 (let ((commit "039dbc26466a430e03c646dc5a9bd0822637a87a")
2533 (revision "0"))
2534 (package
2535 (name "mc2mt")
2536 (version (git-version "0.1" revision commit))
2537 (source
2538 (origin
2539 (method git-fetch)
2540 (uri (git-reference
2541 (url "https://github.com/listia/mc2mt")
2542 (commit commit)))
2543 (file-name (git-file-name name version))
2544 (sha256
2545 (base32 "1vnaznwgm87x0n5dp14363p2h54lpzalynrrd6lbs6wgrqq7fq9i"))
2546 (patches (search-patches "mc2mt-add-packaging-support.patch"))
2547 (modules '((guix build utils)))))
2548 (build-system pyproject-build-system)
2549 (arguments
2550 (list
2551 #:tests? #f ; no tests
2552 #:phases
2553 #~(modify-phases %standard-phases
2554 (add-after 'unpack 'patch-code
2555 (lambda* _
2556 (substitute* "mc2mtlib/argument_parser.py"
2557 (("mineclone2") "mineclone")))))))
2558 (native-inputs (list python-pytest python-setuptools))
2559 (propagated-inputs (list python-anvil-parser))
2560 (synopsis "Minecraft to Minetest world converter")
2561 (description "@code{mc2mt} is a Minecraft to Minetest world converter.
2562It can convert worlds from Minecraft 1.9 and later.")
2563 (home-page "https://github.com/listia/mc2mt")
2564 (license license:expat))))
2565
2566(define-public mygui-gl
2567 (package
2568 (name "mygui-gl")
2569 (version "3.4.3")
2570 (source
2571 (origin
2572 (method git-fetch)
2573 (uri (git-reference
2574 (url "https://github.com/MyGUI/mygui")
2575 (commit (string-append "MyGUI" version))))
2576 (file-name (git-file-name name version))
2577 (sha256
2578 (base32 "0nayw5shm5nly9bjp0g372kg5ia64dvn6mrmi1c6mdg0n6vgs9xa"))))
2579 (build-system cmake-build-system)
2580 (arguments
2581 (list
2582 #:tests? #f ;no test target
2583 #:configure-flags
2584 #~(list "-DMYGUI_RENDERSYSTEM=4" ; 3 is Ogre, 4 is OpenGL.
2585 "-DMYGUI_INSTALL_DOCS=TRUE"
2586 ;; Demos and tools are Windows-specific:
2587 ;; https://github.com/MyGUI/mygui/issues/24.
2588 "-DMYGUI_BUILD_DEMOS=FALSE"
2589 "-DMYGUI_BUILD_TOOLS=FALSE"
2590 "-DMYGUI_DONT_USE_OBSOLETE=TRUE")))
2591 (native-inputs
2592 (list boost
2593 doxygen
2594 pkg-config))
2595 (inputs
2596 (list font-dejavu
2597 freetype
2598 glu
2599 graphviz
2600 libglvnd
2601 libx11
2602 mesa
2603 ois
2604 (sdl-union (list sdl2 sdl2-image))))
2605 (synopsis "Fast, flexible and simple GUI (OpenGL backend)")
2606 (description
2607 "MyGUI is a library for creating Graphical User Interfaces (GUIs) for games
2608and 3D applications. The main goals of MyGUI are: speed, flexibility and ease
2609of use.")
2610 (home-page "http://mygui.info/")
2611 (license license:expat)))
2612
2613(define-public openmw
2614 (package
2615 (name "openmw")
2616 (version "0.51.0")
2617 (source
2618 (origin
2619 (method git-fetch)
2620 (uri (git-reference
2621 (url "https://github.com/OpenMW/openmw")
2622 (commit (string-append "openmw-" version))))
2623 (file-name (git-file-name name version))
2624 (sha256
2625 (base32 "0jhk4zmdryx9wcpw1p0k0s0p4rryv3bb66hspn1kj0k40h8sgv8g"))))
2626 (build-system cmake-build-system)
2627 (arguments
2628 (list
2629 #:tests? #f ;No test target
2630 #:configure-flags #~(list "-DOPENMW_USE_SYSTEM_RECASTNAVIGATION=ON")
2631 #:phases #~(modify-phases %standard-phases
2632 (add-after 'unpack 'add-qtsvg
2633 (lambda _
2634 (substitute* "components/CMakeLists.txt"
2635 (("Qt::Core")
2636 "Qt::Core Qt::Svg"))))
2637 (add-after 'install 'remove-clip-control-extension
2638 ;; OpenMW crashes if GL_ARB_clip_control extension is supported,
2639 ;; so we have to disable it.
2640 ;; Reverse-z depth buffer functionality will be disabled, but
2641 ;; at least it will not crash.
2642 (lambda _
2643 (wrap-program (string-append #$output "/bin/openmw")
2644 '("MESA_EXTENSION_OVERRIDE" = ("-GL_ARB_clip_control"))))))))
2645 (native-inputs (list boost doxygen pkg-config))
2646 (inputs (list bullet
2647 collada-dom
2648 ffmpeg
2649 libxt
2650 lz4
2651 mygui-gl ;OpenMW does not need Ogre.
2652 openal
2653 openmw-openscenegraph
2654 qtbase
2655 qttools
2656 qtsvg
2657 recastnavigation
2658 sdl2
2659 unshield
2660 icu4c
2661 yaml-cpp
2662 luajit
2663 sqlite))
2664 (synopsis "Re-implementation of the RPG Morrowind engine")
2665 (description
2666 "OpenMW is a game engine which reimplements and extends the one that runs
2667the 2002 open-world RPG Morrowind. The engine comes with its own editor,
2668called OpenMW-CS which allows the user to edit or create their own original
2669games.")
2670 (home-page "https://openmw.org")
2671 (license license:gpl3)))
2672
2673(define-public jolt-physics
2674 (package
2675 (name "jolt-physics")
2676 (version "5.5.0")
2677 (source
2678 (origin
2679 (method git-fetch)
2680 (uri (git-reference
2681 (url "https://github.com/jrouwe/JoltPhysics")
2682 (commit (string-append "v" version))))
2683 (file-name (git-file-name name version))
2684 (sha256
2685 (base32 "0dzqi4mxrzg5cyf5k8rdlb078939ib849n7gs6014d3ljymf839r"))
2686 (modules '((guix build utils)))
2687 ;; Unbundle Roboto font.
2688 (snippet
2689 '(begin
2690 (delete-file-recursively "Assets/Fonts")
2691 (substitute* "TestFramework/TestFramework.cmake"
2692 ((".*Roboto-Regular\\.ttf.*") ""))))))
2693 (build-system cmake-build-system)
2694 (arguments
2695 (list
2696 #:configure-flags
2697 #~(list "-DBUILD_SHARED_LIBS=ON")
2698 #:phases
2699 #~(modify-phases %standard-phases
2700 (add-before 'configure 'change-directory
2701 (lambda _
2702 (chdir "Build")))
2703 (add-after 'install 'change-directory
2704 (lambda _
2705 (chdir ".."))))))
2706 (home-page "https://github.com/jrouwe/JoltPhysics")
2707 (synopsis "Rigid body physics and collision detection library")
2708 (description
2709 "Jolt Physics is a multi core friendly rigid body physics and collision
2710detection library, written in C++. It is suitable for games and VR
2711applications.")
2712 (license license:expat)))
2713
2714(define-public godot-lts
2715 (package
2716 (name "godot")
2717 (version "3.6")
2718 (source (origin
2719 (method git-fetch)
2720 (uri (git-reference
2721 (url "https://github.com/godotengine/godot")
2722 (commit (string-append version "-stable"))))
2723 (file-name (git-file-name name version))
2724 (sha256
2725 (base32
2726 "1vdpd05i901p69ciagdaiwdw21j65a7s9r96gdzay321a0xihr71"))
2727 (modules '((guix build utils)
2728 (ice-9 ftw)
2729 (srfi srfi-1)))
2730 (snippet
2731 '(begin
2732 ;; Keep only those bundled files we have not (yet) replaced
2733 ;; with Guix versions. Note that some of these may be
2734 ;; modified; see "thirdparty/README.md".
2735 (with-directory-excursion "thirdparty"
2736 (let* ((preserved-files
2737 '("README.md"
2738 "certs"
2739 "cvtt"
2740 "embree"
2741 "enet"
2742 "etc2comp"
2743 "fonts"
2744 "glad"
2745 "jpeg-compressor"
2746 "libsimplewebm"
2747 "minimp3"
2748 "miniupnpc"
2749 "minizip"
2750 "misc"
2751 "nanosvg"
2752 "oidn"
2753 "pvrtccompressor"
2754 "recastnavigation"
2755 "rvo2"
2756 "squish"
2757 "stb_rect_pack"
2758 "tinyexr"
2759 "vhacd"
2760 "xatlas")))
2761 (for-each delete-file-recursively
2762 (lset-difference
2763 string=?
2764 (scandir ".")
2765 (cons* "." ".." preserved-files)))))))))
2766 (build-system scons-build-system)
2767 (arguments
2768 (list
2769 ;; Avoid using many of the bundled libs.
2770 ;; Note: These options can be found in the SConstruct file.
2771 #:scons-flags #~(list "platform=x11" "target=release_debug"
2772 "builtin_bullet=no"
2773 "builtin_freetype=no"
2774 "builtin_glew=no"
2775 "builtin_libmpdec=no"
2776 "builtin_libogg=no"
2777 "builtin_libpng=no"
2778 "builtin_libtheora=no"
2779 "builtin_libvorbis=no"
2780 "builtin_libvpx=no"
2781 "builtin_libwebp=no"
2782 "builtin_mbedtls=no"
2783 "builtin_opus=no"
2784 "builtin_pcre2=no"
2785 "builtin_wslay=no"
2786 "builtin_zlib=no"
2787 "builtin_zstd=no")
2788 #:tests? #f ; There are no tests
2789 #:phases
2790 #~(modify-phases %standard-phases
2791 (add-after 'unpack 'scons-use-env
2792 (lambda _
2793 ;; Scons does not use the environment variables by default,
2794 ;; but this substitution makes it do so.
2795 (substitute* "SConstruct"
2796 (("env_base = Environment\\(tools=custom_tools\\)")
2797 (string-append
2798 "env_base = Environment(tools=custom_tools)\n"
2799 "env_base = Environment(ENV=os.environ)")))))
2800 ;; Build headless tools, to package games without depending on X.
2801 (add-after 'build 'build-headless
2802 (lambda* (#:key scons-flags #:allow-other-keys)
2803 (apply invoke "scons"
2804 `(,(string-append
2805 "-j" (number->string (parallel-job-count)))
2806 "platform=server"
2807 ,@(delete "platform=x11" scons-flags)))))
2808 (replace 'install
2809 (lambda* (#:key inputs outputs #:allow-other-keys)
2810 (let* ((out (assoc-ref outputs "out"))
2811 (headless (assoc-ref outputs "headless"))
2812 (zenity (assoc-ref inputs "zenity")))
2813 ;; Strip build info from filenames.
2814 (with-directory-excursion "bin"
2815 (for-each
2816 (lambda (file)
2817 (let ((dest (car (string-split (basename file) #\.))))
2818 (rename-file file dest)))
2819 (find-files "." "godot.*\\.x11\\.opt\\.tools.*"))
2820 (install-file "godot" (string-append out "/bin"))
2821 (install-file "godot_server"
2822 (string-append headless "/bin")))
2823 ;; Tell the editor where to find zenity for OS.alert().
2824 (wrap-program (string-append out "/bin/godot")
2825 `("PATH" ":" prefix (,(string-append zenity "/bin")))))))
2826 (add-after 'install 'wrap-ld-path
2827 (lambda* (#:key inputs outputs #:allow-other-keys)
2828 (let* ((out (assoc-ref outputs "out"))
2829 (pulseaudio_path (string-append
2830 (assoc-ref inputs "pulseaudio") "/lib"))
2831 (alas_lib_path (string-append
2832 (assoc-ref inputs "alsa-lib") "/lib")))
2833 (wrap-program (string-append out "/bin/godot")
2834 `("LD_LIBRARY_PATH" ":" prefix
2835 (,pulseaudio_path ,alas_lib_path))))))
2836 (add-after 'install 'install-godot-desktop
2837 (lambda* (#:key outputs #:allow-other-keys)
2838 (let* ((out (assoc-ref outputs "out"))
2839 (applications (string-append out "/share/applications"))
2840 (icons (string-append out "/share/icons/hicolor")))
2841 (mkdir-p applications)
2842 (copy-file "misc/dist/linux/org.godotengine.Godot.desktop"
2843 (string-append applications "/godot.desktop"))
2844 (for-each (lambda (icon dest)
2845 (mkdir-p (dirname dest))
2846 (copy-file icon dest))
2847 '("icon.png" "icon.svg")
2848 `(,(string-append icons "/256x256/apps/godot.png")
2849 ,(string-append icons
2850 "/scalable/apps/godot.svg")))))))))
2851 (outputs '("out" "headless"))
2852 (native-inputs
2853 (list pkg-config))
2854 (inputs
2855 (list alsa-lib
2856 bash-minimal
2857 bullet
2858 freetype-with-brotli
2859 glew
2860 glu
2861 libtheora
2862 libvorbis
2863 libvpx
2864 libwebp
2865 libx11
2866 libxcursor
2867 libxi
2868 libxinerama
2869 libxrandr
2870 mbedtls-lts
2871 mesa
2872 opusfile
2873 pcre2
2874 pulseaudio
2875 eudev
2876 wslay
2877 zenity
2878 `(,zstd "lib")))
2879 (home-page "https://godotengine.org/")
2880 (synopsis "Advanced 2D and 3D game engine")
2881 (description
2882 "Godot is an advanced multi-platform game engine written in C++. If
2883features design tools such as a visual editor, can import 3D models and
2884provide high-quality 3D rendering, it contains an animation editor, and can be
2885scripted in a Python-like language.")
2886 (license license:expat)))
2887
2888(define-public godot
2889 (package
2890 (name "godot")
2891 (version "4.6")
2892 (source (origin
2893 (method git-fetch)
2894 (uri (git-reference
2895 (url "https://github.com/godotengine/godot")
2896 (commit (string-append version "-stable"))))
2897 (file-name (git-file-name name version))
2898 (sha256
2899 (base32
2900 "1lwjydaa4cvnfrllxlryppcfmba3qq1518zi4qr5580n731xfg10"))
2901 ;; TODO: Remove on next release; see
2902 ;; <https://github.com/godotengine/godot/pull/93478>.
2903 (patches (search-patches "godot-glslang.patch"))
2904 (modules '((guix build utils)
2905 (ice-9 ftw)
2906 (srfi srfi-1)))
2907 (snippet
2908 '(begin
2909 ;; Keep only those bundled files we have not (yet) replaced
2910 ;; with Guix versions. Note that some of these may be
2911 ;; modified; see "thirdparty/README.md".
2912 (with-directory-excursion "thirdparty"
2913 (let* ((preserved-files
2914 '("README.md"
2915 "accesskit"
2916 "amd-fsr"
2917 "amd-fsr2"
2918 "assimp"
2919 "astcenc"
2920 "basis_universal"
2921 ;; Godot needs ca-certificates.crt, but that is
2922 ;; not available in build environment
2923 "certs"
2924 "clipper2"
2925 "cvtt"
2926 "dr_libs"
2927 "linuxbsd_headers"
2928 "etc2comp"
2929 "etcpak"
2930 "fonts"
2931 "glad"
2932 ;; This is part of the simdjson package though
2933 ;; modified by Godot.
2934 "grisu2"
2935 "jolt_physics"
2936 "jpeg-compressor"
2937 "libktx"
2938 "libsimplewebm"
2939 "manifold"
2940 "meshoptimizer"
2941 "minimp3"
2942 "miniupnpc"
2943 "minizip"
2944 "misc"
2945 "msdfgen"
2946 "nanosvg"
2947 "noise"
2948 "oidn"
2949 "openxr"
2950 "pvrtccompressor"
2951 "re-spirv"
2952 "recastnavigation"
2953 "rvo2"
2954 "smaa"
2955 "spirv-reflect"
2956 "squish"
2957 "stb_rect_pack"
2958 "thorvg"
2959 "tinyexr"
2960 "ufbx"
2961 "vhacd"
2962 ;; Godot uses a specific (patched) version.
2963 "vulkan"
2964 "xatlas")))
2965 (for-each delete-file-recursively
2966 (lset-difference string=?
2967 (scandir ".")
2968 (cons* "." ".." preserved-files)))))))))
2969 (build-system scons-build-system)
2970 (arguments
2971 (list
2972 #:scons-flags #~`("platform=linuxbsd" "target=editor" "production=yes"
2973 ;; Avoid using many of the bundled libs.
2974 ;; Note: These options can be found in the SConstruct file.
2975 "builtin_brotli=no"
2976 "builtin_embree=no"
2977 "builtin_enet=no"
2978 "builtin_freetype=no"
2979 "builtin_glslang=no"
2980 "builtin_graphite=no"
2981 "builtin_harfbuzz=no"
2982 "builtin_icu4c=no"
2983 "builtin_libjpeg_turbo=no"
2984 "builtin_libogg=no"
2985 "builtin_libpng=no"
2986 "builtin_libtheora=no"
2987 "builtin_libvorbis=no"
2988 "builtin_libwebp=no"
2989 "builtin_mbedtls=no"
2990 "builtin_pcre2=no"
2991 "builtin_pcre2_with_jit=no"
2992 "builtin_sdl=no"
2993 "builtin_wslay=no"
2994 "builtin_zlib=no"
2995 "builtin_zstd=no")
2996 #:tests? #f ; There are no tests
2997 #:phases
2998 #~(modify-phases %standard-phases
2999 (add-after 'unpack 'scons-use-env
3000 (lambda _
3001 ;; Scons does not use the environment variables by default,
3002 ;; but this substitution makes it do so.
3003 (substitute* "SConstruct"
3004 (("env = Environment\\(tools=\\[\\]\\)")
3005 (string-append
3006 "env = Environment(tools=[])\n"
3007 "env = Environment(ENV=os.environ)")))))
3008 (add-after 'scons-use-env 'fix-dlopen-paths
3009 (lambda* (#:key inputs #:allow-other-keys)
3010 (let ((files '("drivers/alsa/asound-so_wrap.c"
3011 "drivers/pulseaudio/pulse-so_wrap.c"
3012 "platform/linuxbsd/dbus-so_wrap.c"
3013 "platform/linuxbsd/fontconfig-so_wrap.c"
3014 "platform/linuxbsd/speechd-so_wrap.c"
3015 "platform/linuxbsd/wayland/dynwrappers/libdecor-so_wrap.c"
3016 "platform/linuxbsd/wayland/dynwrappers/wayland-client-core-so_wrap.c"
3017 "platform/linuxbsd/wayland/dynwrappers/wayland-cursor-so_wrap.c"
3018 "platform/linuxbsd/wayland/dynwrappers/wayland-egl-core-so_wrap.c"
3019 "platform/linuxbsd/x11/display_server_x11.cpp"
3020 "platform/linuxbsd/x11/dynwrappers/xcursor-so_wrap.c"
3021 "platform/linuxbsd/x11/dynwrappers/xext-so_wrap.c"
3022 "platform/linuxbsd/x11/dynwrappers/xinerama-so_wrap.c"
3023 "platform/linuxbsd/x11/dynwrappers/xinput2-so_wrap.c"
3024 "platform/linuxbsd/x11/dynwrappers/xlib-so_wrap.c"
3025 "platform/linuxbsd/x11/dynwrappers/xrandr-so_wrap.c"
3026 "platform/linuxbsd/x11/dynwrappers/xrender-so_wrap.c"
3027 "platform/linuxbsd/xkbcommon-so_wrap.c"))
3028 (libs '("libasound.so.2"
3029 "libpulse.so.0"
3030 "libdbus-1.so.3"
3031 "libfontconfig.so.1"
3032 "libspeechd.so.2"
3033 "libdecor-0.so.0"
3034 "libwayland-client.so.0"
3035 "libwayland-cursor.so.0"
3036 "libwayland-egl.so.1"
3037 "libXrandr.so.2"
3038 "libXcursor.so.1"
3039 "libXext.so.6"
3040 "libXinerama.so.1"
3041 "libXi.so.6"
3042 "libX11.so.6"
3043 "libXrandr.so.2"
3044 "libXrender.so.1"
3045 "libxkbcommon.so.0")))
3046 (for-each (lambda (file lib)
3047 (substitute* file
3048 (((string-append "dlopen\\(\"" lib "\""))
3049 (string-append "dlopen(\""
3050 (search-input-file
3051 inputs (string-append "lib/" lib))
3052 "\""))))
3053 files libs))
3054 (substitute* "thirdparty/glad/gl.c"
3055 (("libGL.so") ; for both .so and .so.1
3056 (string-append (search-input-file inputs "lib/libGL.so"))))
3057 (substitute* "thirdparty/glad/glx.c"
3058 (("libGL.so") ; for both .so and .so.1
3059 (string-append (search-input-file inputs "lib/libGL.so"))))))
3060 (add-after 'fix-dlopen-paths 'unbundle-xkbcommon
3061 (lambda* (#:key inputs #:allow-other-keys)
3062 (substitute* "platform/linuxbsd/xkbcommon-so_wrap.c"
3063 (("./thirdparty/linuxbsd_headers/xkbcommon/xkbcommon.h")
3064 (string-append
3065 (search-input-file inputs "include/xkbcommon/xkbcommon.h")))
3066 (("./thirdparty/linuxbsd_headers/xkbcommon/xkbcommon-compose.h")
3067 (string-append
3068 (search-input-file inputs "include/xkbcommon/xkbcommon-compose.h")))
3069 (("./thirdparty/linuxbsd_headers/xkbcommon/xkbcommon-keysyms.h")
3070 (string-append
3071 (search-input-file inputs "include/xkbcommon/xkbcommon-keysyms.h"))))))
3072 (add-after 'unbundle-xkbcommon 'unpack-mesa
3073 (lambda _
3074 (mkdir "mesa-src")
3075 (invoke "tar" "--strip-components=1" "-C"
3076 "mesa-src" "-xf" #$(package-source mesa))))
3077 (add-after 'unpack-mesa 'unbundle-wayland
3078 (lambda* (#:key inputs #:allow-other-keys)
3079 (substitute* "platform/linuxbsd/wayland/SCsub"
3080 ;; This first file does not exist in a "protocol" directory of
3081 ;; our wayland package, so this can't be grouped with the
3082 ;; other substitutions.
3083 (("#thirdparty/wayland/protocol/wayland.xml")
3084 (search-input-file inputs "share/wayland/wayland.xml"))
3085 ;; And this one is from the mesa source.
3086 (("#thirdparty/wayland-protocols/mesa/wayland-drm.xml")
3087 "../../../mesa-src/src/egl/wayland/wayland-drm/wayland-drm.xml")
3088 (("#thirdparty/wayland-protocols")
3089 (string-append
3090 #$(this-package-input "wayland-protocols") "/share/wayland-protocols"))
3091 (("#thirdparty/wayland")
3092 (string-append
3093 #$(this-package-input "wayland") "/share/wayland")))))
3094 (add-after 'unbundle-wayland 'unbundle-volk
3095 (lambda _
3096 (let ((volk-dir "thirdparty/volk"))
3097 (mkdir-p volk-dir)
3098 (copy-recursively (string-append #$(this-package-input "vulkan-volk")
3099 "/include")
3100 volk-dir))))
3101 (add-after 'unbundle-volk 'use-system-spirv
3102 (lambda _
3103 (substitute* "thirdparty/spirv-reflect/spirv_reflect.h"
3104 (("#if defined\\(SPIRV_REFLECT_USE_SYSTEM_SPIRV_H\\)")
3105 "#if 1"))))
3106 (replace 'install
3107 (lambda* (#:key inputs #:allow-other-keys)
3108 (let ((zenity (search-input-file inputs "bin/zenity")))
3109 ;; Strip build info from filenames.
3110 (with-directory-excursion "bin"
3111 (for-each
3112 (lambda (file)
3113 (let ((dest (car (string-split (basename file) #\.))))
3114 (rename-file file dest)))
3115 (find-files "." "godot.*\\.linuxbsd\\.editor.*"))
3116 (install-file "godot" (string-append #$output "/bin")))
3117 ;; Tell the editor where to find zenity for OS.alert().
3118 ;; TODO: This could be changed in
3119 ;; platform/linuxbsd/os_linuxbsd.cpp directly, along with the
3120 ;; other alert programs.
3121 (wrap-program (string-append #$output "/bin/godot")
3122 `("PATH" ":" prefix (,(string-append zenity "/bin")))))))
3123 (add-after 'install 'install-godot-desktop
3124 (lambda _
3125 (let ((applications (string-append #$output "/share/applications"))
3126 (icons (string-append #$output "/share/icons/hicolor")))
3127 (mkdir-p applications)
3128 (copy-file "misc/dist/linux/org.godotengine.Godot.desktop"
3129 (string-append applications "/godot.desktop"))
3130 (for-each (lambda (icon dest)
3131 (mkdir-p (dirname dest))
3132 (copy-file icon dest))
3133 '("icon.png" "icon.svg")
3134 `(,(string-append icons "/256x256/apps/godot.png")
3135 ,(string-append icons "/scalable/apps/godot.svg")))))))))
3136 (native-inputs
3137 (list pkg-config))
3138 (inputs
3139 (list alsa-lib
3140 bash-minimal
3141 brotli
3142 dbus
3143 embree
3144 enet
3145 eudev
3146 fontconfig
3147 freetype-with-brotli
3148 glew
3149 glslang
3150 glu
3151 libpng
3152 harfbuzz
3153 icu4c
3154 libdecor
3155 libjpeg-turbo-3
3156 libtheora
3157 libvorbis
3158 libvpx
3159 libwebp
3160 libx11
3161 libxcursor
3162 libxi
3163 libxinerama
3164 libxkbcommon
3165 libxrandr
3166 mbedtls-lts
3167 mesa
3168 openxr
3169 opusfile
3170 pcre2
3171 pulseaudio
3172 sdl3
3173 speech-dispatcher
3174 spirv-headers
3175 vulkan-volk
3176 wayland
3177 wayland-protocols
3178 wslay
3179 zenity
3180 zlib
3181 `(,zstd-1.5.7 "lib")))
3182 (home-page "https://godotengine.org/")
3183 (synopsis "Advanced 2D and 3D game engine")
3184 (description
3185 "Godot is an advanced multi-platform game engine written in C++. If
3186features design tools such as a visual editor, can import 3D models and
3187provide high-quality 3D rendering, it contains an animation editor, and can be
3188scripted in a Python-like language.")
3189 (license license:expat)))
3190
3191(define-public entt
3192 (package
3193 (name "entt")
3194 (version "3.7.1")
3195 (source (origin
3196 (method git-fetch)
3197 (uri (git-reference
3198 (url "https://github.com/skypjack/entt")
3199 (commit (string-append "v" version))))
3200 (file-name (git-file-name name version))
3201 (sha256
3202 (base32
3203 "151jg3m262xwaywl2rqnc90yr6p48rhmgi5mxyv6bwqvmfli2m5p"))))
3204 (build-system cmake-build-system)
3205 (arguments
3206 `(#:configure-flags (list "-DENTT_BUILD_TESTING=ON"
3207 "-DENTT_FIND_GTEST_PACKAGE=ON"
3208 "-DENTT_BUILD_DOCS=ON")
3209 ;; Only tests are compiled, and they need assertions to work correctly.
3210 #:build-type "Debug"))
3211 (native-inputs
3212 (list ;; for testing
3213 googletest
3214 ;; for documentation
3215 doxygen graphviz))
3216 (synopsis "Entity component system")
3217 (description "EnTT is a header-only library, containing (among other things)
3218@itemize
3219@item an entity component system based on sparse sets,
3220@item a configuration system using the monostate pattern,
3221@item a static reflection system,
3222@item and a cooperative scheduler.
3223@end itemize")
3224 (home-page "https://github.com/skypjack/entt")
3225 (license (list license:expat ; code
3226 license:cc-by4.0)))) ; documentation
3227
3228(define-public ericw-tools
3229 (package
3230 (name "ericw-tools")
3231 (version "0.18.2-rc1")
3232 (source
3233 (origin
3234 (method git-fetch)
3235 (uri (git-reference (url "https://github.com/ericwa/ericw-tools")
3236 (commit (string-append "v" version))))
3237 (file-name (git-file-name name version))
3238 (sha256
3239 (base32 "0903fn4a5mc4sdx8q36j57fp15f7z246h8jm78x9jfz7sx9xrc3m"))
3240 (patches
3241 (search-patches "ericw-tools-add-check-for-sse2-in-light.cc.patch"
3242 "ericw-tools-gcc-11-pass-const-to-offsetof.patch"))))
3243 (build-system cmake-build-system)
3244 (arguments
3245 (list #:configure-flags #~(list "-DENABLE_LIGHTPREVIEW=OFF")
3246 #:phases
3247 #~(modify-phases %standard-phases
3248 (add-after 'unpack 'disable-copying-embree-files
3249 (lambda _
3250 ;; Tries to copy files from embree, disable it.
3251 (substitute* "light/CMakeLists.txt"
3252 (("install\\\(FILES \\$\\{EMBREE")
3253 "#install(FILES ${EMBREE"))))
3254 (add-after 'install 'rename-binaries
3255 (lambda _
3256 ;; Rename binaries to prevent collisions with other
3257 ;; packages.
3258 (rename-file (string-append #$output "/bin/bspinfo")
3259 (string-append #$output "/bin/qbspinfo"))
3260 (rename-file (string-append #$output "/bin/bsputil")
3261 (string-append #$output "/bin/qbsputil"))
3262 (rename-file (string-append #$output "/bin/light")
3263 (string-append #$output "/bin/qlight"))
3264 (rename-file (string-append #$output "/bin/vis")
3265 (string-append #$output "/bin/qvis"))))
3266 (add-after 'install-license-files 'clean-up-bin-directory
3267 (lambda _
3268 ;; Install target copies text documents to #$output/bin, move
3269 ;; them to #$output/share/doc.
3270 (delete-file (string-append #$output "/bin/gpl_v3.txt"))
3271 (rename-file
3272 (string-append #$output "/bin/changelog.txt")
3273 (string-append #$output "/share/doc/"
3274 #$(package-name this-package) "-"
3275 #$(package-version this-package)
3276 "/changelog.txt"))
3277 (rename-file
3278 (string-append #$output "/bin/README.md")
3279 (string-append #$output "/share/doc/"
3280 #$(package-name this-package) "-"
3281 #$(package-version this-package)
3282 "/README.md")))))
3283 #:tests? #f)) ; No tests
3284 (inputs (list embree))
3285 (home-page "https://ericwa.github.io/ericw-tools/")
3286 (synopsis "Map compiling tools for Quake/Hexen 2")
3287 (description
3288 "This package provides a collection of command line utilities used for
3289building Quake maps as well as working with various Quake file formats. The
3290utilities include @command{qbsp} for building the geometry, @command{qvis} for
3291calculating visibility, @command{qlight} for lighting, @command{bspinfo} for
3292getting information, and @command{bsputil} for basic editing of data in a map
3293file.")
3294 (license license:gpl2+)))
3295
3296(define-public eureka
3297 (package
3298 (name "eureka")
3299 (version "1.24")
3300 (source (origin
3301 (method url-fetch)
3302 (uri (string-append "mirror://sourceforge/eureka-editor/Eureka/"
3303 version "/eureka-"
3304 ;; version without dots e.g 1.21 => 121
3305 (string-join (string-split version #\.) "")
3306 "-source.tar.gz"))
3307 (sha256
3308 (base32
3309 "1x4idjniz9sma3j9ss6ni7fafmz22zs2jnpsqw4my9rsnmra5d9v"))))
3310 (build-system gnu-build-system)
3311 (arguments
3312 '(#:tests? #f
3313 #:make-flags
3314 (let ((out (assoc-ref %outputs "out")))
3315 (list (string-append "PREFIX=" out)))
3316 #:phases
3317 (modify-phases %standard-phases
3318 (delete 'configure)
3319 (add-before 'build 'prepare-install-directories
3320 (lambda* (#:key outputs #:allow-other-keys)
3321 (let ((out (assoc-ref outputs "out")))
3322 (mkdir-p (string-append out "/bin"))
3323 (mkdir-p (string-append out "/share"))
3324
3325 (with-fluids ((%default-port-encoding #f))
3326 (substitute* "./src/main.cc"
3327 (("/usr/local") out)))
3328
3329 (substitute* "Makefile"
3330 (("-o root") ""))))))))
3331 (inputs `(("mesa" ,mesa)
3332 ("libxft" ,libxft)
3333 ("libxinerama" ,libxinerama)
3334 ("libfontconfig" ,fontconfig)
3335 ("libjpeg" ,libjpeg-turbo)
3336 ("libpng" ,libpng)
3337 ("fltk" ,fltk-1.3)
3338 ("zlib" ,zlib)))
3339 (native-inputs (list pkg-config xdg-utils))
3340 (synopsis "Doom map editor")
3341 (description "Eureka is a map editor for the classic DOOM games, and a few
3342related games such as Heretic and Hexen. It comes with a 3d preview mode and
3343a 2D editor view.")
3344 (home-page "https://eureka-editor.sourceforge.net/")
3345 (license license:gpl2+)))
3346
3347(define-public guile-chickadee
3348 (package
3349 (name "guile-chickadee")
3350 (version "0.10.0")
3351 (source (origin
3352 (method url-fetch)
3353 (uri (string-append "https://files.dthompson.us/chickadee/"
3354 "chickadee-" version ".tar.gz"))
3355 (sha256
3356 (base32
3357 "0x8g0bsvir2z3876ynslfgnmfr5p92ic4666v73526lswnv56bqk"))))
3358 (build-system gnu-build-system)
3359 (arguments
3360 '(#:make-flags '("GUILE_AUTO_COMPILE=0")))
3361 (propagated-inputs
3362 `(("guile-opengl" ,guile3.0-opengl)
3363 ("guile-sdl2" ,guile-sdl2)))
3364 (inputs
3365 (list freetype
3366 guile-3.0-latest
3367 libjpeg-turbo
3368 libmpg123
3369 libpng
3370 libvorbis
3371 openal
3372 readline))
3373 (native-inputs
3374 (list guile-3.0-latest pkg-config texinfo))
3375 (home-page "https://dthompson.us/projects/chickadee.html")
3376 (synopsis "Game development toolkit for Guile Scheme with SDL2 and OpenGL")
3377 (description "Chickadee is a game development toolkit for Guile Scheme
3378built on top of SDL2 and OpenGL. Chickadee aims to provide all the features
3379that parenthetically inclined game developers need to make 2D (and eventually
33803D) games in Scheme, such as:
3381
3382@enumerate
3383@item extensible, fixed-timestep game loop
3384@item OpenGL-based rendering engine
3385@item keyboard, mouse, controller input
3386@item REPL-driven development model
3387@end enumerate\n")
3388 (license license:asl2.0)))
3389
3390(define-public bennu-game-development
3391 (package
3392 (name "bennu-game-development")
3393 (version "353")
3394 (source (origin
3395 (method svn-fetch)
3396 (uri (svn-reference
3397 (url "http://svn.code.sf.net/p/bennugd/code")
3398 (revision (string->number version))))
3399 (file-name (string-append name "-" version))
3400 (sha256
3401 (base32
3402 "1iri58ryk9lbqn585cbccnvrfkj8qxlbcsk8rpih40jhvs1j101l"))
3403 (modules '((guix build utils)))
3404 (snippet
3405 '(begin
3406 (delete-file-recursively "3rdparty") #t))))
3407 (build-system gnu-build-system)
3408 (arguments
3409 '(#:phases
3410 (modify-phases %standard-phases
3411 (add-after 'unpack 'patch-configure-to-use-openssl
3412 (lambda* (#:key outputs #:allow-other-keys)
3413 (chdir "core")
3414 (delete-file "configure")
3415 (substitute* "configure.in"
3416 (("i\\*86\\)")
3417 "*)
3418 COMMON_CFLAGS=\"$COMMON_CFLAGS -DUSE_OPENSSL\"
3419 COMMON_LDFLAGS=\"$COMMON_LDFLAGS\"
3420 LIBSSL=\"crypto\"
3421 USE_OPENSSL=yes
3422 ;;
3423
3424 i*86)"))
3425 #t)))))
3426 (inputs (list openssl zlib))
3427 (native-inputs (list pkg-config autoconf automake libtool))
3428 (synopsis "Programming language to create games")
3429 (description "Bennu Game Development, also known as bennudg, is a
3430programming language tailored at game development. It is the successor of
3431Fenix.")
3432 (home-page "https://sourceforge.net/projects/bennugd/")
3433 (license license:zlib)))
3434
3435(define-public bennu-game-development-modules
3436 (package
3437 (inherit bennu-game-development)
3438 (name "bennu-game-development-modules")
3439 (arguments
3440 '(#:phases
3441 (modify-phases %standard-phases
3442 (add-after 'unpack 'patch-conflicting-definitions
3443 (lambda _
3444 (with-fluids ((%default-port-encoding #f))
3445 (substitute* "core/include/fmath.h"
3446 (("extern fixed fmul\\( int x, int y \\);") "")
3447 (("extern fixed fdiv\\( int x, int y \\);") "")))
3448 (chdir "modules"))))))
3449 (inputs (list zlib libpng openssl sdl-mixer bennu-game-development))
3450 (synopsis "Modules for the Bennu Game Development programming language")
3451 (description "This package contains a collection of modules for the Bennu
3452Game Development programming language, from CD handling through SDL to
3453joystick support.")))
3454
3455(define-public plib
3456 (package
3457 (name "plib")
3458 (version "1.8.5")
3459 (source (origin
3460 (method url-fetch)
3461 (uri (string-append "http://plib.sourceforge.net/dist/"
3462 "plib-" version ".tar.gz"))
3463 (sha256
3464 (base32
3465 "0cha71mflpa10vh2l7ipyqk67dq2y0k5xbafwdks03fwdyzj4ns8"))
3466 (patches (search-patches "plib-CVE-2011-4620.patch"
3467 "plib-CVE-2012-4552.patch"))))
3468 (build-system gnu-build-system)
3469 ;; plib exists only as a static library, per the author's choice (see:
3470 ;; https://sourceforge.net/p/plib/mailman/message/10289018/). Build it
3471 ;; with PIC, so that shared programs can at least "link" to it.
3472 (arguments (list #:configure-flags #~(list "CXXFLAGS=-fPIC")))
3473 (native-inputs (list autoconf automake pkg-config))
3474 (inputs (list mesa libxi libxmu))
3475 (home-page "https://plib.sourceforge.net/")
3476 (synopsis "Suite of portable game libraries")
3477 (description "PLIB is a set of libraries that will permit programmers to
3478write games and other realtime interactive applications that are 100% portable
3479across a wide range of hardware and operating systems. PLIB includes sound
3480effects, music, a complete 3D engine, font rendering, a simple Windowing
3481library, a game scripting language, a GUI, networking, 3D math library and a
3482collection of handy utility functions. All are 100% portable across nearly
3483all modern computing platforms. Each library component is fairly independent
3484of the others")
3485 (license license:lgpl2.0+)))
3486
3487(define-public ioquake3
3488 ;; We follow master since it seems that there won't be releases after 1.3.6.
3489 (let ((revision "3")
3490 (commit "ab18167a09415e9e9f4859c197bad72ec39807d5"))
3491 (package
3492 (name "ioquake3")
3493 (version (git-version "1.3.6" revision commit))
3494 (source
3495 (origin
3496 (method git-fetch)
3497 (uri (git-reference
3498 (url "https://github.com/ioquake/ioq3")
3499 (commit commit)))
3500 (file-name (git-file-name name version))
3501 (sha256
3502 (base32 "01s15lfxsd6nd4jvan1gabbidd2v1y29zgwymszwlhrzkm367n08"))))
3503 (build-system gnu-build-system)
3504 (inputs
3505 (list curl
3506 freetype
3507 libjpeg-turbo
3508 libogg
3509 libvorbis
3510 openal
3511 opus
3512 opusfile
3513 sdl2))
3514 (native-inputs
3515 (list which ; else SDL_version.h won't be found.
3516 pkg-config))
3517 (arguments
3518 (list
3519 #:tests? #f ; no tests
3520 #:make-flags
3521 #~(list (string-append "CC=" #$(cc-for-target))
3522 "USE_INTERNAL_LIBS=0"
3523 "USE_FREETYPE=1"
3524 "USE_RENDERER_DLOPEN=0"
3525 "USE_OPENAL_DLOPEN=0"
3526 "USE_CURL_DLOPEN=0")
3527 #:phases
3528 #~(modify-phases %standard-phases
3529 (delete 'configure) ; no configure-script
3530 (replace 'install
3531 (lambda* (#:key make-flags outputs #:allow-other-keys)
3532 (apply invoke "make" "copyfiles"
3533 (string-append "COPYDIR="
3534 (assoc-ref outputs "out")
3535 "/bin")
3536 make-flags))))))
3537 (home-page "https://ioquake3.org/")
3538 (synopsis "FPS game engine based on Quake 3")
3539 (description "ioquake3 is a free software first person shooter engine
3540based on the Quake 3: Arena and Quake 3: Team Arena source code. Compared to
3541the original, ioquake3 has been cleaned up, bugs have been fixed and features
3542added. The permanent goal is to create a Quake 3 distribution upon which
3543people base their games, ports to new platforms, and other projects.")
3544 (license license:gpl2))))
3545
3546(define-public img2tim
3547 ;; 0.75 does not compile on non-Windows targets, use newest commit.
3548 (let ((commit "ca244c3de142e6a07cb973299f780c4586d9fef9")
3549 (revision "0"))
3550 (package
3551 (name "img2tim")
3552 (version (git-version "0.75" revision commit))
3553 (source
3554 (origin
3555 (method git-fetch)
3556 (uri (git-reference
3557 (url "https://github.com/Lameguy64/img2tim")
3558 (commit commit)))
3559 (file-name (git-file-name name version))
3560 (sha256
3561 (base32 "1i0vhk5kipk0mdd24jd05k1a8z9x6iqx0gx81khdgh2blbzngclb"))))
3562 (build-system gnu-build-system)
3563 (arguments
3564 (list
3565 #:tests? #f ; no tests
3566 #:phases
3567 #~(modify-phases %standard-phases
3568 (delete 'configure)
3569 (replace 'build
3570 (lambda _
3571 (invoke "g++" "-O2"
3572 "main.cpp" "tim.cpp"
3573 "-o" "img2tim" "-lfreeimage")))
3574 (replace 'install
3575 (lambda _
3576 (install-file "img2tim" (string-append #$output "/bin"))
3577 (install-file "img2tim.txt"
3578 (string-append #$output "/share/doc/img2tim")))))))
3579 (inputs (list freeimage))
3580 (home-page "https://github.com/Lameguy64/img2tim")
3581 (synopsis "Convert images to PlayStation TIM textures")
3582 (description
3583 "@command{img2tim} converts image files into PlayStation TIM textures.
3584It uses FreeImage to read common formats such as PNG, BMP and JPEG, and can
3585output 4-bit, 8-bit or 16-bit textures, with optional colour-key or alpha
3586transparency. The image and its @acronym{CLUT, Colour Lookup Table} can be
3587placed at a chosen VRAM position.")
3588 (license license:gpl3))))
3589
3590(define-public inform
3591 (package
3592 (name "inform")
3593 (version "6.42")
3594 (source
3595 (origin
3596 (method git-fetch)
3597 (uri (git-reference
3598 (url "https://jxself.org/git/inform.git")
3599 (commit (string-append "v" version))))
3600 (file-name (git-file-name name version))
3601 (sha256
3602 (base32 "1gb7b8y4qq9n3r4giqr4shzn3xli6aiaax7k4lzlgic7w1x3zjfl"))))
3603 (build-system gnu-build-system)
3604 (native-inputs (list autoconf automake))
3605 (synopsis "The Inform 6 compiler")
3606 (description
3607 "Inform 6 is a programming language designed for interactive fiction.
3608This version of the compiler has been modified slightly to work better when the
3609Inform standard library is in a non-standard location.")
3610 (home-page "https://jxself.org/git/inform.git")
3611 (license license:gpl3+)))
3612
3613(define-public informlib
3614 (package
3615 (name "informlib")
3616 (version "6.12.6")
3617 (source
3618 (origin
3619 (method git-fetch)
3620 (uri (git-reference
3621 (url "https://jxself.org/git/informlib.git")
3622 (commit (string-append "v" version))))
3623 (file-name (git-file-name name version))
3624 (sha256
3625 (base32 "0fcnw4jjzln402qk097n2s8y24vw1p3mmlmh6k1mbr2zfajjcn5r"))))
3626 (build-system copy-build-system)
3627 (arguments
3628 (list
3629 #:install-plan
3630 #~'(("." "lib"))))
3631 (synopsis "Inform 6 standard library")
3632 (description
3633 "This package provides the standard library for Inform 6.")
3634 (home-page "https://jxself.org/git/informlib.git")
3635 (license license:agpl3+)))
3636
3637(define-public instead
3638 (package
3639 (name "instead")
3640 (version "3.3.5")
3641 (build-system cmake-build-system)
3642 (source
3643 (origin
3644 (method git-fetch)
3645 (uri (git-reference
3646 (url "https://github.com/instead-hub/instead")
3647 (commit version)))
3648 (file-name (git-file-name name version))
3649 (sha256
3650 (base32 "02j8cw623j51qmr4991i5hsbrzmnp0qfzds8m6nwwr15sjv3hv1g"))
3651 (patches
3652 (search-patches
3653 "instead-use-games-path.patch"))
3654 (modules '((guix build utils)))
3655 (snippet
3656 '(begin
3657 (delete-file-recursively "src/zlib")))))
3658 (arguments
3659 '(#:configure-flags
3660 (list (string-append
3661 "-DLUA_INCLUDE_DIR="
3662 (assoc-ref %build-inputs "luajit") "/include/luajit-2.1/")
3663 "-DWITH_LUAJIT=1"
3664 "-DWITH_GTK3=1")
3665 #:tests? #f))
3666 (inputs
3667 `(("gtk+",gtk+)
3668 ("lua" ,lua)
3669 ("luajit" ,luajit)
3670 ("pkg-config" ,pkg-config)
3671 ("sdl2-images" ,sdl2-image)
3672 ("sdl2-ttf" ,sdl2-ttf)
3673 ("sdl2-mixer" ,sdl2-mixer)
3674 ("zlib" ,zlib)))
3675 (home-page "https://instead3.syscall.ru/")
3676 (synopsis "Text adventure interpreter")
3677 (description "The STEAD (Simple TExt ADventures) interpreter provides
3678functionality to play games that mix elements of visual novels, interactive
3679fiction and classic point-and-click adventures.")
3680 (native-search-paths
3681 (list (search-path-specification
3682 (variable "INSTEAD_GAMES_PATH")
3683 (separator #f) ;single entry
3684 (files '("share/instead/games")))))
3685 (license license:expat)))
3686
3687(define-public openvr
3688 (package
3689 (name "openvr")
3690 (version "2.12.14")
3691 (home-page "https://github.com/ValveSoftware/openvr/")
3692 (source
3693 (origin
3694 (method git-fetch)
3695 (uri (git-reference
3696 (url home-page)
3697 (commit (string-append "v" version))))
3698 (file-name (git-file-name name version))
3699 (sha256
3700 (base32 "0i85awq7w669j0x091chma8rcx1zqwn1j4v0d42bcjcvhqa6iv0v"))))
3701 (build-system cmake-build-system)
3702 (arguments
3703 ;; No tests.
3704 '(#:tests? #f
3705 #:configure-flags (list "-DBUILD_SHARED=1")))
3706 (synopsis "Virtual reality software development kit")
3707 (description "OpenVR is an API and runtime that allows access to VR
3708hardware from multiple vendors without requiring that applications have
3709specific knowledge of the hardware they are targeting.")
3710 (license license:bsd-3)))
3711
3712(define-public flatzebra
3713 (package
3714 (name "flatzebra")
3715 (version "0.2.0")
3716 (source
3717 (origin
3718 (method url-fetch)
3719 (uri (string-append "http://perso.b2b2c.ca/~sarrazip/dev/"
3720 "flatzebra-" version ".tar.gz"))
3721 (sha256
3722 (base32 "1p1igi757m9a46v29mm7r40x61kdj7j66b9dbn53l5yfhnwa4w93"))))
3723 (build-system gnu-build-system)
3724 (native-inputs
3725 (list pkg-config))
3726 (inputs
3727 (list sdl2 sdl2-gfx sdl2-image sdl2-mixer sdl2-ttf))
3728 (home-page "http://perso.b2b2c.ca/~sarrazip/dev/burgerspace.html")
3729 (synopsis "Generic game engine for 2D double-buffering animation")
3730 (description
3731 "Flatzebra is a simple, generic C++ game engine library supporting 2D
3732double-buffering.")
3733 (license license:gpl2+)))
3734
3735(define-public freesolid
3736 (package
3737 (name "freesolid")
3738 (version "2.1.2")
3739 (source (origin
3740 (method url-fetch)
3741 (uri (string-append "mirror://sourceforge/" name "/FreeSOLID-"
3742 version ".zip"))
3743 (sha256
3744 (base32
3745 "0wxqiv1ba227kwxpgwf6in9ai1lcamhmp1ib1c1chq4xvnpwdvc9"))
3746 (patches (search-patches "freesolid-autotools.patch"
3747 "freesolid-pkgconfig.patch"
3748 "freesolid-configure.patch"
3749 "freesolid-automake.patch"))))
3750 (build-system gnu-build-system)
3751 (arguments (list #:phases #~(modify-phases %standard-phases
3752 (add-after 'unpack 'force-reboostrap
3753 (lambda _
3754 (delete-file "bootstrap.sh")
3755 (delete-file "configure"))))))
3756 (native-inputs (list autoconf automake libtool unzip))
3757 (home-page "https://sourceforge.net/projects/freesolid/")
3758 (synopsis "3D collision detection C++ library")
3759 (description "FreeSOLID is a library for collision detection of
3760three-dimensional objects undergoing rigid motion and deformation. FreeSOLID
3761is designed to be used in interactive 3D graphics applications.")
3762 (license license:lgpl2.0+)))
3763
3764(define-public libccd
3765 (package
3766 (name "libccd")
3767 (version "2.1")
3768 (source
3769 (origin
3770 (method git-fetch)
3771 (uri (git-reference
3772 (url "https://github.com/danfis/libccd")
3773 (commit (string-append "v" version))))
3774 (file-name (git-file-name name version))
3775 (sha256
3776 (base32 "0sfmn5pd7k5kyhbxnd689xmsa5v843r7sska96dlysqpljd691jc"))))
3777 (build-system cmake-build-system)
3778 (arguments
3779 `(#:configure-flags '("-DBUILD_DOCUMENTATION=ON"
3780 "-DENABLE_DOUBLE_PRECISION=ON")))
3781 (native-inputs
3782 (list python-sphinx))
3783 (home-page "https://github.com/danfis/libccd")
3784 (synopsis "Library for collision detection between two convex shapes")
3785 (description "@code{libccd} is library for a collision detection
3786between two convex shapes. @code{libccd} implements variation on
3787Gilbert–Johnson–Keerthi algorithm plus Expand Polytope Algorithm (EPA)
3788and also implements algorithm Minkowski Portal Refinement (MPR,
3789a.k.a. XenoCollide) as described in Game Programming Gems 7.")
3790 (license license:expat)))
3791
3792(define-public ode
3793 (package
3794 (name "ode")
3795 (version "0.16.6")
3796 (source
3797 (origin
3798 (method url-fetch)
3799 (uri (string-append "https://bitbucket.org/odedevs/ode/downloads/"
3800 "ode-" version ".tar.gz"))
3801 (sha256
3802 (base32 "1s0k8nvwbq3b5b1kaynggv4gwshd71m75757hi3jhl16zz32h6n9"))
3803 (modules '((guix build utils)))
3804 (snippet
3805 '(begin
3806 (delete-file-recursively "libccd")))))
3807 (build-system cmake-build-system)
3808 (arguments
3809 (list
3810 ;; XXX: The sole test is failing on i686 due to a rounding error.
3811 #:tests? (not (or (target-x86-32?)
3812 (%current-target-system)))
3813 #:configure-flags #~(list "-DODE_WITH_LIBCCD_SYSTEM=ON")
3814 #:phases
3815 #~(modify-phases %standard-phases
3816 (add-after 'unpack 'unbundle-libccd
3817 (lambda _
3818 (substitute* "CMakeLists.txt"
3819 (("configure_file\\(libccd/.*") "")))))))
3820 (inputs
3821 (list glu libccd mesa))
3822 (home-page "https://www.ode.org/")
3823 (synopsis "High performance library for simulating rigid body dynamics")
3824 (description "ODE is a high performance library for simulating
3825rigid body dynamics. It is fully featured, stable, mature and
3826platform independent with an easy to use C/C++ API. It has advanced
3827joint types and integrated collision detection with friction. ODE is
3828useful for simulating vehicles, objects in virtual reality
3829environments and virtual creatures. It is currently used in many
3830computer games, 3D authoring tools and simulation tools.")
3831 ;; Software is dual-licensed.
3832 (license (list license:lgpl2.1+ license:expat))))
3833
3834(define-public chipmunk
3835 (let ((commit "d0239ef4599b3688a5a336373f7d0a68426414ba")
3836 (revision "1"))
3837 (package
3838 (name "chipmunk")
3839 (version (git-version "7.0.3" revision commit))
3840 (source
3841 (origin
3842 (method git-fetch)
3843 (uri (git-reference
3844 (url "https://github.com/slembcke/Chipmunk2D")
3845 (commit commit)))
3846 (file-name (git-file-name name version))
3847 (sha256
3848 (base32 "1910rfnanhna99bhfiyny3ki7aip2i9p4jzmwsfcg16m9gip5fd6"))
3849 (modules '((guix build utils)))))
3850 (build-system cmake-build-system)
3851 (arguments
3852 (list #:tests? #f ;no test
3853 #:configure-flags
3854 #~(list "-DBUILD_STATIC=OFF"
3855 "-DBUILD_DEMOS=OFF")))
3856 (inputs
3857 (list freeglut libxmu libxrandr))
3858 (home-page "https://chipmunk-physics.net/")
3859 (synopsis "Fast and lightweight 2D game physics library")
3860 (description "Chipmunk is a simple, lightweight, fast and portable 2D
3861rigid body physics library written in C.")
3862 (license license:expat))))
3863
3864(define-public box2d
3865 (package
3866 (name "box2d")
3867 (version "2.4.1")
3868 (source
3869 (origin
3870 (method git-fetch)
3871 (uri (git-reference
3872 (url "https://github.com/erincatto/box2d")
3873 (commit (string-append "v" version))))
3874 (file-name (git-file-name name version))
3875 (sha256
3876 (base32 "1ja9cahf3z9zzrdaqcw44lpjmqf2ir2g4chwz0iwqwlkckwhpgvh"))
3877 (modules '((guix build utils)))
3878 (snippet
3879 '(begin
3880 ;; Remove bundled code only used for the testbed.
3881 (delete-file-recursively "extern")
3882 ;; Remove bundled copy of doctest, and adjust tests accordingly.
3883 (delete-file "unit-test/doctest.h")
3884 (substitute* "unit-test/CMakeLists.txt"
3885 (("doctest\\.h")
3886 ""))
3887 (substitute* (find-files "unit-test" "\\.cpp$")
3888 (("include \"doctest\\.h\"")
3889 "include <doctest/doctest.h>"))))))
3890 (build-system cmake-build-system)
3891 (arguments
3892 (list #:configure-flags #~'("-DBUILD_SHARED_LIBS=ON"
3893 "-DBOX2D_BUILD_TESTBED=OFF")
3894 #:modules '((guix build cmake-build-system)
3895 ((guix build gnu-build-system) #:prefix gnu:)
3896 (guix build utils))
3897 #:phases
3898 #~(modify-phases %standard-phases
3899 (replace 'check
3900 (lambda* (#:key tests? #:allow-other-keys #:rest args)
3901 (when tests?
3902 (apply (assoc-ref gnu:%standard-phases 'check)
3903 #:tests? tests? #:test-target "unit_test" args)
3904 (invoke "bin/unit_test"))))
3905 (add-after 'install 'generate-pkgconfig
3906 (lambda* (#:key outputs #:allow-other-keys)
3907 (let* ((out (assoc-ref outputs "out"))
3908 (pkgconfig-dir (string-append out "/lib/pkgconfig"))
3909 (pc-file (string-append pkgconfig-dir "/box2d.pc")))
3910 (mkdir-p pkgconfig-dir)
3911 (with-output-to-file pc-file
3912 (lambda ()
3913 (format #t "prefix=~a~%" out)
3914 (format #t "exec_prefix=${prefix}~%")
3915 (format #t "libdir=${exec_prefix}/lib~%")
3916 (format #t "includedir=${prefix}/include~%~%")
3917 (format #t "Name: Box2D~%")
3918 (format #t "Description: Box2D physics engine~%")
3919 (format #t "Version: ~a~%" #$version)
3920 (format #t "Libs: -L${libdir} -lbox2d~%")
3921 (format #t "Cflags: -I${includedir}~%")))))))))
3922 (native-inputs
3923 (list doctest)) ;for tests
3924 (inputs
3925 (list libx11))
3926 (home-page "https://box2d.org/")
3927 (synopsis "2D physics engine for games")
3928 (description "Box2D is a 2D rigid body simulation library for games.
3929Programmers can use it in their games to make objects move in realistic ways and
3930make the game world more interactive. From the game engine's point of view, a
3931physics engine is just a system for procedural animation.")
3932 (license license:expat)))
3933
3934(define-public box2d-3
3935 (package
3936 (inherit box2d)
3937 (name "box2d")
3938 (version "3.1.1")
3939 (source
3940 (origin
3941 (method git-fetch)
3942 (uri (git-reference
3943 (url "https://github.com/erincatto/box2d")
3944 (commit (string-append "v" version))))
3945 (file-name (git-file-name name version))
3946 (sha256
3947 (base32 "0j4vf19idnimpf8niqiw9dmdm40mvvjrhky63yyv2n0z1zs35912"))
3948 ;; TODO: Remove on next update, already merged upstream.
3949 (patches (search-patches "box2d-add-pkgconfig.patch"))
3950 (modules '((guix build utils)))
3951 (snippet
3952 '(begin
3953 ;; Remove bundled code only used for the testbed.
3954 (delete-file-recursively "extern")))))
3955 (arguments
3956 (list #:configure-flags #~'("-DBUILD_SHARED_LIBS=ON"
3957 "-DBOX2D_UNIT_TESTS=OFF" ; enkiTS need for all test apps
3958 "-DBOX2D_SAMPLES=OFF")
3959 ;; Tests are disabled because they are not built - enkiTS is not available
3960 #:tests? #f
3961 #:phases #~(modify-phases %standard-phases
3962 ;; Relative path doesn't work when package is added to profile,
3963 ;; due to PKG_CONFIG_PATH being something like
3964 ;; ~/.guix-profile/lib/pkgconfig
3965 (add-after 'unpack 'fix-pkgconfig-prefix
3966 (lambda _
3967 (substitute* "src/box2d.pc.in"
3968 (("^prefix=.*")
3969 "prefix=@CMAKE_INSTALL_PREFIX@\n")))))))
3970 (native-inputs '())))
3971
3972(define-public libtcod
3973 (package
3974 (name "libtcod")
3975 (version "2.2.2")
3976 (source
3977 (origin
3978 (method git-fetch)
3979 (uri (git-reference
3980 (url "https://github.com/libtcod/libtcod")
3981 (commit version)))
3982 (file-name (git-file-name name version))
3983 (sha256
3984 (base32 "1zl1w4kpiiarh0f1q3j95k9vp90fx98hxl1ykma9hlkfw33srmy0"))
3985 (modules '((guix build utils)))
3986 (snippet
3987 '(begin
3988 (rmdir "vcpkg")
3989 (with-directory-excursion "src"
3990 ;; Delete the bundled third party libraries.
3991 (with-directory-excursion "vendor"
3992 (for-each delete-file
3993 '("khrplatform.h"
3994 "lodepng.c"
3995 "lodepng.h"
3996 "stb_ds.h"
3997 "stb_truetype.h"))
3998 (for-each delete-file-recursively '("utf8proc" "zlib")))
3999 ;; Do not fetch the libraries from their Git repositories.
4000 ;; Instead, find the required packages available in Guix and link
4001 ;; them.
4002 (substitute* "CMakeLists.txt"
4003 (("FetchContent_MakeAvailable\\(SDL3\\)")
4004 "find_package(SDL3 REQUIRED)")
4005 (("FetchContent_MakeAvailable\\(ZLIB\\)")
4006 "find_package(ZLIB REQUIRED)")
4007 (("FetchContent_MakeAvailable\\(lodepng-c\\)")
4008 "find_library(LODEPNG_LIB NAMES lodepng REQUIRED)")
4009 (("lodepng-c") "${LODEPNG_LIB}")
4010 (("FetchContent_MakeAvailable\\(utf8proc\\)")
4011 (string-append "find_package(PkgConfig REQUIRED)\n"
4012 " pkg_check_modules(UTF8PROC REQUIRED"
4013 " libutf8proc)"))
4014 (("utf8proc\\:\\:utf8proc") "utf8proc")
4015 ((".*FetchContent_MakeAvailable\\(Stb.*") "")))))))
4016 (build-system cmake-build-system)
4017 (arguments
4018 (list
4019 #:configure-flags
4020 #~(list "-DLIBTCOD_TESTS=ON"
4021 "-DBUILD_SHARED_LIBS=ON")
4022 #:phases
4023 #~(modify-phases %standard-phases
4024 (add-after 'unpack 'patch-commands
4025 (lambda* (#:key inputs #:allow-other-keys)
4026 (substitute* "src/libtcod/tileset_fallback.c"
4027 (("popen\\(\"fc-match")
4028 (string-append "popen(\""
4029 (search-input-file inputs "/bin/fc-match"))))))
4030 (replace 'check
4031 (lambda* (#:key tests? #:allow-other-keys)
4032 (when tests?
4033 (with-directory-excursion "tests"
4034 (copy-recursively "../../source/data" "data")
4035 (setenv "LD_LIBRARY_PATH" "..")
4036 (setenv "XDG_RUNTIME_DIR" (getcwd))
4037 (setenv "HOME" (getcwd))
4038 (invoke "./unittest"
4039 ;; No video device available.
4040 "~[!nonportable]"))))))))
4041 (native-inputs
4042 (list catch2 pkg-config))
4043 (inputs
4044 (list fontconfig lodepng/c sdl3 stb-truetype utf8proc zlib))
4045 (home-page "https://github.com/libtcod/libtcod")
4046 (synopsis "Library specifically designed for writing roguelikes")
4047 (description
4048 "libtcod is a fast, portable and uncomplicated API for roguelike
4049developers providing an advanced true color console, input, and lots of other
4050utilities frequently used in roguelikes.")
4051 (license license:bsd-3)))
4052
4053(define-public dhewm3
4054 (package
4055 (name "dhewm3")
4056 (version "1.5.5")
4057 (source (origin
4058 (method git-fetch)
4059 (uri (git-reference (url "https://github.com/dhewm/dhewm3")
4060 (commit version)))
4061 (file-name (git-file-name name version))
4062 (sha256
4063 (base32
4064 "0lxl3mlrikm4zzjs0rfvsn1pybcrnyn9z3rgyyw50k1a8qs9fbmh"))))
4065 (build-system cmake-build-system)
4066 (arguments
4067 (list #:tests? #f ; No tests.
4068 #:configure-flags
4069 ;; Needed to fix 32bit builds.
4070 #~(if #$(target-32bit?)
4071 (list "-DCMAKE_CXX_FLAGS=-D_FILE_OFFSET_BITS=64")
4072 '())
4073 #:phases
4074 #~(modify-phases %standard-phases
4075 (add-after 'unpack 'change-to-build-dir
4076 (lambda _
4077 (chdir "neo"))))))
4078 (inputs
4079 (list curl
4080 libx11
4081 openal
4082 sdl2
4083 zlib))
4084 (home-page "https://dhewm3.org/")
4085 (synopsis "Port of the original Doom 3 engine")
4086 (description
4087 "@command{dhewm3} is a source port of the original Doom 3 engine (not
4088Doom 3: BFG Edition), also known as id Tech 4. Compared to the original
4089version of the Doom 3 engine, dhewm3 has many bugfixes, supports EAX-like
4090sound effects on all operating systems and hardware (via OpenAL Softs EFX
4091support), has much better support for widescreen resolutions and has 64bit
4092support.")
4093 (license license:gpl3)))
4094
4095(define-public tesseract-engine
4096 (let ((svn-revision 2411))
4097 (package
4098 (name "tesseract-engine")
4099 (version (string-append "20200615-" (number->string svn-revision)))
4100 (source
4101 (origin
4102 (method svn-fetch)
4103 (uri (svn-reference
4104 (url "svn://svn.tuxfamily.org/svnroot/tesseract/main")
4105 (revision svn-revision)))
4106 (file-name (git-file-name name version))
4107 (sha256
4108 (base32 "1av9jhl2ivbl7wfszyhyna84llvh1z2d8khkmadm8d105addj10q"))
4109 (modules '((guix build utils)))
4110 (snippet
4111 '(begin
4112 (for-each delete-file-recursively
4113 '("bin" "bin64"
4114 ;; Remove "media" since some files such as
4115 ;; media/sound/game/soundsnap/info.txt refer to a
4116 ;; non-commercial license.
4117 "media"
4118 "server.bat"
4119 "tesseract.bat"
4120 "src/lib"
4121 "src/lib64"))
4122 #t))))
4123 (build-system gnu-build-system)
4124 (arguments
4125 `(#:make-flags (list "CC=gcc")
4126 #:tests? #f ; No tests.
4127 #:phases
4128 (modify-phases %standard-phases
4129 (delete 'configure)
4130 (add-after 'unpack 'cd-src
4131 (lambda _ (chdir "src") #t))
4132 (add-before 'build 'fix-env
4133 (lambda* (#:key inputs #:allow-other-keys)
4134 (setenv "CPATH"
4135 (string-append
4136 (search-input-directory inputs "include/SDL2")
4137 ":" (or (getenv "CPATH") "")))))
4138 (add-after 'install 'really-install
4139 (lambda* (#:key outputs #:allow-other-keys)
4140 (let* ((out (assoc-ref outputs "out"))
4141 (share (string-append out "/share/tesseract"))
4142 (bin (string-append out "/bin/tesseract"))
4143 (client (string-append out "/bin/tesseract-client")))
4144 (chdir "..") ; Back to root.
4145 (for-each
4146 (lambda (dir)
4147 (mkdir-p (string-append share "/" dir))
4148 (copy-recursively dir (string-append share "/" dir)))
4149 '("config"))
4150 (mkdir-p (string-append out "/bin/"))
4151 (copy-file "bin_unix/native_client" client)
4152 (copy-file "bin_unix/native_server"
4153 (string-append out "/bin/tesseract-server"))
4154 (call-with-output-file bin
4155 (lambda (p)
4156 (format p "#!~a
4157TESS_DATA=~a
4158TESS_BIN=~a
4159TESS_OPTIONS=\"-u$HOME/.tesseract\"
4160cd \"$TESS_DATA\"
4161exec \"$TESS_BIN\" \"$TESS_OPTIONS\" \"$@\""
4162 (which "bash")
4163 share
4164 client)))
4165 (chmod bin #o755)
4166 (install-file "src/readme_tesseract.txt"
4167 (string-append out "/share/licenses/tesseract/LICENSE")))
4168 #t)))))
4169 (inputs
4170 `(("sdl2-union" ,(sdl-union (list sdl2 sdl2-mixer sdl2-image)))
4171 ("zlib" ,zlib)
4172 ("libpng" ,libpng)
4173 ("libgl" ,mesa)))
4174 (home-page "http://tesseract.gg/")
4175 (synopsis "First-person shooter engine with map editing, instagib, DM and CTF")
4176 (description "This package contains the game engine of Tesseract, a
4177first-person shooter focused on cooperative in-game map editing.
4178
4179The engine is derived from @emph{Cube 2: Sauerbraten} technology but with
4180upgraded modern rendering techniques. The new rendering features include
4181fully dynamic omnidirectional shadows, global illumination, HDR lighting,
4182deferred shading, morphological / temporal / multisample anti-aliasing, and
4183much more.")
4184 (license license:zlib))))
4185
4186(define-public recastnavigation
4187 (package
4188 (name "recastnavigation")
4189 (version "1.6.0")
4190 (source (origin
4191 (method git-fetch)
4192 (uri (git-reference
4193 (url "https://github.com/recastnavigation/recastnavigation")
4194 (commit (string-append "v" version))))
4195 (file-name (git-file-name name version))
4196 (sha256
4197 (base32
4198 "0rdz3qmp4b961zjah2ax82h471j14w2rcf576gcyx7vldrg8dmj8"))))
4199 (build-system cmake-build-system)
4200 (arguments
4201 `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON"
4202 "-DRECASTNAVIGATION_DEMO=OFF"
4203 "-DRECASTNAVIGATION_TESTS=ON"
4204 "-DRECASTNAVIGATION_EXAMPLES=OFF")))
4205 (synopsis "Navigation system for games")
4206 (description "Recast is state of the art navigation mesh
4207construction toolset for games.
4208
4209@itemize
4210@item It is automatic, which means that you can throw any level geometry
4211 at it and you will get robust mesh out.
4212@item It is fast which means swift turnaround times for level designers.
4213@end itemize
4214
4215The Recast process starts with constructing a voxel mold from a level
4216geometry and then casting a navigation mesh over it. The process
4217consists of three steps, building the voxel mold, partitioning the mold
4218into simple regions, peeling off the regions as simple polygons.
4219
4220Recast is accompanied with Detour, path-finding and spatial reasoning
4221toolkit. You can use any navigation mesh with Detour, but of course the
4222data generated with Recast fits perfectly.
4223
4224Detour offers simple static navigation mesh which is suitable for many
4225simple cases, as well as tiled navigation mesh which allows you to plug
4226in and out pieces of the mesh. The tiled mesh allows you to create
4227systems where you stream new navigation data in and out as the player
4228progresses the level, or you may regenerate tiles as the world changes.")
4229 (home-page "https://github.com/recastnavigation/recastnavigation")
4230 (license license:zlib)))
4231
4232(define-public raylib
4233 (package
4234 (name "raylib")
4235 (version "5.5")
4236 (source (origin
4237 (method git-fetch)
4238 (uri (git-reference
4239 (url "https://github.com/raysan5/raylib/")
4240 (commit version)))
4241 (file-name (git-file-name name version))
4242 ;; TODO: Unbundle src/external
4243 (sha256
4244 (base32
4245 "1dhy9ghbwvz0s434j03rfa2l6wxcfj028vlkk1xbf5q97vin5pr7"))))
4246 (build-system cmake-build-system)
4247 (arguments
4248 (list #:tests? #f ;no test
4249 #:configure-flags
4250 #~(list "-DBUILD_SHARED_LIBS=ON"
4251 "-DUSE_EXTERNAL_GLFW=ON"
4252 (string-append "-DCMAKE_C_FLAGS=-lpulse "
4253 "-Wno-error=incompatible-pointer-types"))
4254 #:phases
4255 #~(modify-phases %standard-phases
4256 (add-before 'configure 'configure-miniaudio
4257 ;; Use PulseAudio as raudio backend.
4258 (lambda _
4259 (substitute* "src/raudio.c"
4260 (("^#include \"external/miniaudio\\.h\"") "
4261#define MA_NO_RUNTIME_LINKING
4262#define MA_ENABLE_ONLY_SPECIFIC_BACKENDS
4263#define MA_ENABLE_PULSEAUDIO
4264#include \"external/miniaudio.h\"
4265"))))
4266 (add-after 'install 'install-api-files
4267 ;; For generating bindings.
4268 (lambda _
4269 (install-file (string-append #$source "/src/rcamera.h")
4270 (string-append #$output "/include"))
4271 (copy-recursively
4272 (string-append #$source "/parser/output")
4273 (string-append #$output "/share/raylib")))))))
4274 (inputs (list glfw-3.4 pulseaudio))
4275 (native-inputs (list pkg-config))
4276 (synopsis "C library for videogame programming")
4277 (description
4278 "raylib is a high-level library for video game programming. It aims to
4279 abstract away platform and graphics details, allowing you to focus on
4280 writing your game.")
4281 (home-page "https://www.raylib.com/")
4282 (license license:zlib)))
4283
4284(define-public raygui
4285 (package
4286 (name "raygui")
4287 (version "4.0")
4288 (source (origin
4289 (method git-fetch)
4290 (uri (git-reference
4291 (url "https://github.com/raysan5/raygui/")
4292 (commit version)))
4293 (file-name (git-file-name name version))
4294 (sha256
4295 (base32
4296 "13s606dxnypg6n2pbn13d2d407pxkb7bxqbk5swlfvrcjs2w5afn"))))
4297 (build-system gnu-build-system)
4298 (arguments
4299 (list
4300 #:phases
4301 #~(modify-phases %standard-phases
4302 (delete 'bootstrap)
4303 (add-after 'unpack 'use-raygui-header
4304 (lambda _
4305 (rename-file "src/raygui.h" "src/raygui.c")))
4306 (delete 'configure)
4307 (replace 'build
4308 (lambda _
4309 (invoke #$(cc-for-target)
4310 "-o" "libraygui.so"
4311 "src/raygui.c"
4312 "-DRAYGUI_IMPLEMENTATION"
4313 "-shared" "-fpic"
4314 "-lraylib"
4315 "-lGL" "-lm" "-lpthread" "-ldl" "-lrt" "-lX11")))
4316 (delete 'check)
4317 (replace 'install
4318 (lambda _
4319 (let ((src (string-append #$source "/src"))
4320 (inc (string-append #$output "/include"))
4321 (lib (string-append #$output "/lib")))
4322 (install-file (string-append src "/raygui.h") inc)
4323 (install-file "libraygui.so" lib)))))))
4324 (inputs (list mesa raylib))
4325 (synopsis "Simple and easy-to-use immediate-mode gui library")
4326 (description "Originally inspired by Unity IMGUI (immediate mode GUI API).
4327
4328Designed as an auxiliary module for raylib to create simple GUI interfaces using
4329raylib graphic style (simple colors, plain rectangular shapes, wide borders...)
4330but it can be adapted to other engines/frameworks.")
4331 (home-page "https://www.raylib.com")
4332 (license license:zlib)))
4333
4334(define-public tic80
4335 ;; These C libraries are used in source form by tic80.
4336 (let ((3rd/jsmn
4337 (origin ;Expat
4338 (method git-fetch)
4339 (uri (git-reference
4340 (url "https://github.com/zserge/jsmn")
4341 (commit "25647e692c7906b96ffd2b05ca54c097948e879c")))
4342 (file-name "jsmn-checkout")
4343 (sha256
4344 (base32
4345 "19xgrap95a8ziicgd0c3fns51z1g4q06b5lb5pg76ah4ychhgg5p"))))
4346 (3rd/blip-buf
4347 (origin ;LGPL2.1+
4348 (method git-fetch)
4349 (uri (git-reference
4350 (url "https://github.com/nesbox/blip-buf")
4351 (commit "330226d9b55ecbeea644e17b5e0f096a165ca07e")))
4352 (file-name "blip-buf-checkout")
4353 (sha256
4354 (base32
4355 "0fycffd6pbh9ilmr032dlrwd6dhvpkjp2r9x98r0kmwqpxc4x90d")))))
4356 (package
4357 (name "tic80")
4358 (version "1.3.1")
4359 (source
4360 (origin
4361 (method git-fetch)
4362 (uri (git-reference
4363 (url "https://github.com/nesbox/TIC-80")
4364 (commit (string-append "v" version))))
4365 (file-name (git-file-name name version))
4366 (sha256
4367 (base32
4368 "1vzk4f9b73mmal2kh4q9yc8hmvmg62am45ds28cq9m27y0z6psj2"))
4369 (modules '((guix build utils)))
4370 (snippet
4371 #~(begin
4372 (delete-file-recursively "vendor")
4373 (copy-recursively #$3rd/jsmn "vendor/jsmn")
4374 (copy-recursively #$3rd/blip-buf "vendor/blip-buf")))))
4375 (build-system cmake-build-system)
4376 (arguments
4377 (list #:tests? #f ;no tests
4378 #:configure-flags
4379 #~'("-DBUILD_STATIC=ON" ;don't build runtimes as shared libraries
4380 "-DPREFER_SYSTEM_LIBRARIES=ON"
4381 "-DCMAKE_EXE_LINKER_FLAGS=-lpulse" ;for miniaudio
4382 "-DCMAKE_C_FLAGS=-Wno-error=incompatible-pointer-types"
4383 ;for miniaudio
4384 ;; TODO: moon, python, wren, yue, forth, miniscript
4385 "-DBUILD_WITH_FENNEL=ON"
4386 "-DBUILD_WITH_JANET=ON"
4387 "-DBUILD_WITH_JS=ON"
4388 "-DBUILD_WITH_LUA=ON"
4389 "-DBUILD_WITH_RUBY=ON"
4390 "-DBUILD_WITH_SCHEME=ON"
4391 "-DBUILD_WITH_SQUIRREL=ON"
4392 "-DBUILD_WITH_WASM=ON")
4393 #:phases
4394 #~(modify-phases %standard-phases
4395 (add-after 'unpack 'prepare-sources
4396 (lambda _
4397 (substitute* "cmake/version.cmake"
4398 ;; TODO: remove after upstream correct it.
4399 (("VERSION_REVISION 0")
4400 "VERSION_REVISION 1"))
4401 (let* ((s7 #$(this-package-input "s7"))
4402 (fennel #$(this-package-input "fennel")))
4403 (install-file (string-append s7 "/include/s7.h")
4404 "vendor/s7/")
4405 (install-file (string-append s7 "/share/s7/s7.c")
4406 "vendor/s7/")
4407 (mkdir "vendor/fennel")
4408 (copy-file (car (find-files fennel "fennel\\.lua"))
4409 "vendor/fennel/loadfennel.lua")
4410 (with-directory-excursion "vendor/fennel"
4411 (substitute* "loadfennel.lua"
4412 (("return mod") "package.loaded['fennel'] = mod"))
4413 (invoke "xxd" "-i" "loadfennel.lua" "fennel.h")))
4414 (substitute* "src/api/mruby.c"
4415 (("#include <mruby\\.h>" all)
4416 (string-append
4417 all "\n#include <mruby/internal.h>")))
4418 (substitute* "src/ext/fft.c"
4419 (("#include \"miniaudio\\.h\"") "
4420#define MA_NO_RUNTIME_LINKING
4421#define MA_ENABLE_ONLY_SPECIFIC_BACKENDS
4422#define MA_ENABLE_PULSEAUDIO
4423#define MA_ENABLE_NULL
4424#include \"miniaudio.h\"
4425")))))))
4426 (native-inputs
4427 (list pkg-config xxd))
4428 (inputs
4429 (list argparse
4430 fennel
4431 giflib
4432 janet
4433 kubazip
4434 libpng
4435 lua
4436 mruby
4437 naett
4438 pulseaudio
4439 quickjs
4440 s7
4441 sdl2
4442 squirrel
4443 wasm3))
4444 (synopsis "Fantasy tiny computer")
4445 (home-page "https://tic80.com/")
4446 (description
4447 "TIC-80 is a fantasy computer for making, playing and sharing tiny
4448games. There are built-in tools for development: code, sprites, maps, sound
4449editors and the command line, which is enough to create a mini retro game.")
4450 (license license:expat))))
4451
4452(define-public bbcsdl
4453 (package
4454 (name "bbcsdl")
4455 (version "1.42a")
4456 (source (origin
4457 (method git-fetch)
4458 (uri (git-reference
4459 (url "https://github.com/rtrussell/BBCSDL/")
4460 (commit "e3d6e1582dc5a9f9b77b7fc2985f63d24702c7d3")))
4461 (file-name (git-file-name name version))
4462 (sha256
4463 (base32
4464 "0hwyd2iv255nci9v3p86cg5i7190cslzrdpq187m8a3vc3c4pmmq"))))
4465 (build-system gnu-build-system)
4466 (arguments
4467 (list
4468 #:tests? #f ; XXX: tests not automated
4469 #:phases
4470 #~(modify-phases %standard-phases
4471 (delete 'configure) ; no configure script
4472 (replace 'build
4473 (lambda* (#:key outputs #:allow-other-keys)
4474 ;; 'makefile' expects the source directory to be named 'BBCSDL'.
4475 (symlink "source" "../BBCSDL")
4476 ;; 'bbcsdl' finds 'libstb.so' in its RPATH.
4477 (substitute* "bin/linux/makefile"
4478 (("-Wl,-R,'\\$\\$ORIGIN'")
4479 (string-append "-Wl,-rpath="
4480 (assoc-ref outputs "out") "/opt/bbcsdl")))
4481 ;; Build 'bbcbasic' and 'bbcsdl'.
4482 (invoke "make" "-C" "console/linux")
4483 (invoke "make" "-C" "bin/linux")))
4484 (replace 'install
4485 (lambda* (#:key inputs outputs #:allow-other-keys)
4486 (let* ((out (assoc-ref outputs "out"))
4487 (opt (string-append out "/opt/bbcsdl"))
4488 (bin (string-append out "/bin")))
4489 (for-each
4490 (lambda (f)
4491 (copy-recursively f (string-append opt "/" f)))
4492 ;; Those files need to be installed into the same difertory.
4493 '("lib" "examples" "bbcsdl.bbc"
4494 "libstb.so" "bbcsdl" "bbcbasic"))
4495 ;; Replace bundled fonts.
4496 (for-each
4497 (lambda (font)
4498 (delete-file (string-append opt "/lib/" font))
4499 (symlink
4500 (search-input-file
4501 inputs (string-append "share/fonts/truetype/" font))
4502 (string-append opt "/lib/" font)))
4503 '("DejaVuSans.ttf" "DejaVuSansMono.ttf"
4504 "DejaVuSans-Oblique.ttf"
4505 "FreeSans.ttf" "FreeMono.ttf" "FreeSerif.ttf"))
4506 (mkdir bin)
4507 (symlink (string-append opt "/bbcsdl")
4508 (string-append bin "/bbcsdl"))
4509 (symlink (string-append opt "/bbcbasic")
4510 (string-append bin "/bbcbasic"))))))))
4511 (native-inputs (list nasm))
4512 (inputs (list sdl2 sdl2-ttf sdl2-net font-dejavu font-gnu-freefont))
4513 (synopsis "BBC BASIC for SDL 2.0")
4514 (home-page "https://www.bbcbasic.co.uk/bbcsdl/")
4515 (description
4516 "BBC BASIC is the programming language originally specified and adopted
4517by the British Broadcasting Corporation for its groundbreaking Computer
4518Literacy Project of the early 1980s. BBC BASIC for SDL 2.0 combines the
4519simplicity of BASIC with the sophistication of a modern structured language,
4520allowing you to write utilities and games, use sound and graphics, perform
4521calculations and create complete applications.")
4522 (license license:zlib)))
4523
4524(define-public shlomif-cmake-modules
4525 (let ((commit "2fa3e9be1a1df74ad0e10f0264bfa60e1e3a755c")
4526 (revision "0"))
4527 (package
4528 (name "shlomif-cmake-modules")
4529 (version (git-version "0" revision commit))
4530 (source
4531 (origin
4532 (method git-fetch)
4533 (uri (git-reference
4534 (url "https://github.com/shlomif/shlomif-cmake-modules")
4535 (commit commit)))
4536 (file-name (git-file-name name version))
4537 (sha256
4538 (base32 "1755lvg1xxygsxnp6kyjw9m0nddcb19ivm8dy31hfiyr0rxakl9h"))))
4539 (build-system copy-build-system)
4540 (arguments
4541 (list
4542 #:install-plan
4543 #~'(("shlomif-cmake-modules/" "share/shlomi-fish/cmake"))))
4544 (home-page "https://github.com/shlomif/shlomif-cmake-modules")
4545 (synopsis "CMake modules for Shlomi Fish's projects")
4546 (description
4547 "This repository contains CMake modules which are used across
4548@uref{https://www.shlomifish.org/, Shlomi Fish's} projects.")
4549 (license license:expat))))
4550
4551(define-public angelscript
4552 (package
4553 (name "angelscript")
4554 (version "2.38.0")
4555 (source
4556 (origin
4557 (method url-fetch)
4558 (uri (string-append
4559 "https://www.angelcode.com/angelscript/sdk/files/angelscript_"
4560 version ".zip"))
4561 (sha256
4562 (base32 "0vrflpmj3ldfq96js45czkk4r6266bc570v2gpv7wc8hvay5sfxk"))))
4563 (build-system cmake-build-system)
4564 (outputs '("out" "doc"))
4565 (arguments
4566 (list
4567 #:tests? #f ;there are no tests
4568 #:configure-flags
4569 #~(list "-DBUILD_SHARED_LIBS=true")
4570 #:phases
4571 #~(modify-phases %standard-phases
4572 (add-after 'unpack 'chdir
4573 (lambda _
4574 (chdir "angelscript/projects/cmake")))
4575 (add-after 'install 'install-doc
4576 (lambda* (#:key outputs #:allow-other-keys)
4577 (chdir "../../../")
4578 (let ((docdir (string-append (assoc-ref outputs "doc")
4579 "/share/doc/anglescript")))
4580 (copy-recursively "docs" docdir)))))))
4581 (native-inputs (list unzip))
4582 (home-page "https://www.angelcode.com/angelscript/")
4583 (synopsis "Flexible cross-platform scripting library")
4584 (description
4585 "AngelScript is an cross-platform scripting library designed to allow
4586applications to extend their functionality through external scripts. It has
4587been designed from the beginning to be an easy to use component, both for the
4588application programmer and the script writer. It can call standard C functions
4589and C++ methods with little to no need for proxy functions. The application
4590registers the functions, objects, and methods that the scripts work with. The
4591same functions used by the application internally can be used by the scripting
4592engine, which eliminates the need to duplicate functionality.")
4593 (license license:zlib)))
4594
4595(define-public rinutils
4596 (package
4597 (name "rinutils")
4598 (version "0.10.3")
4599 (source
4600 (origin
4601 (method git-fetch)
4602 (uri (git-reference
4603 (url "https://github.com/shlomif/rinutils")
4604 (commit version)))
4605 (file-name (git-file-name name version))
4606 (sha256
4607 (base32 "0iziwblw3jnvj31pis86x5lvykywfsx6w7a4019zn34p1i4id8js"))))
4608 (build-system cmake-build-system)
4609 (arguments
4610 (list
4611 #:configure-flags
4612 #~(list (string-append "-DCMAKE_MODULE_PATH="
4613 #+shlomif-cmake-modules "/share/shlomi-fish/cmake")
4614 (string-append "-DSHLOMIF_SYSTEM_INSTALL_DIR="
4615 #+shlomif-cmake-modules "/share/shlomi-fish/cmake"))
4616 #:tests? #f)) ;No tests
4617 (native-inputs (list shlomif-cmake-modules pkg-config perl))
4618 (home-page "https://github.com/shlomif/rinutils")
4619 (synopsis "Collection of C headers")
4620 (description
4621 "Rinutils is a set of C headers containing macros and static
4622functions that have been extracted from @uref{https://www.shlomifish.org/,
4623Shlomi Fish's} projects.")
4624 (license license:expat)))