diff options
Diffstat (limited to 'gnu/packages/game-development.scm')
-rw-r--r-- | gnu/packages/game-development.scm | 666 |
1 files changed, 343 insertions, 323 deletions
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm index 06bf4041df..f417fae8d7 100644 --- a/gnu/packages/game-development.scm +++ b/gnu/packages/game-development.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Tomáš Čech <sleep_walker@suse.cz> ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> -;;; Copyright © 2015, 2018 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2015, 2018, 2021 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015, 2018 Alex Kost <alezost@gmail.com> ;;; Copyright © 2015, 2016, 2017 David Thompson <davet@gnu.org> ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il> @@ -23,6 +23,9 @@ ;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro> ;;; Copyright © 2021 Dmitry Polyakov <polyakov@liltechdude.xyz> ;;; Copyright © 2020-2021 James Smith <jsubuntuxp@disroot.org> +;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech> +;;; Copyright © 2021 Andy Tai <atai@atai.org> +;;; Copyright © 2022 Felix Gruber <felgru@posteo.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -68,7 +71,6 @@ #:use-module (gnu packages freedesktop) #:use-module (gnu packages fribidi) #:use-module (gnu packages dbm) - #:use-module (gnu packages gcc) #:use-module (gnu packages gettext) #:use-module (gnu packages gl) #:use-module (gnu packages glib) @@ -92,6 +94,7 @@ #:use-module (gnu packages pulseaudio) #:use-module (gnu packages python) #:use-module (gnu packages python-xyz) + #:use-module (gnu packages readline) #:use-module (gnu packages qt) #:use-module (gnu packages sdl) #:use-module (gnu packages sphinx) @@ -110,7 +113,7 @@ (define-public bullet (package (name "bullet") - (version "2.89") + (version "3.17") (source (origin (method git-fetch) (uri (git-reference @@ -119,7 +122,7 @@ (file-name (git-file-name name version)) (sha256 (base32 - "10ncf2z474jnv7p5lv01ak2mk2hib3rj5rz1zr8v2v5pnciqbijl")) + "0x1ghxbkvqr910sp01sjf4hlfy4sdgn2jx2qf0dsi697bzq1f3mr")) (modules '((guix build utils))) (snippet '(begin @@ -129,9 +132,7 @@ '("Gwen" "clsocket" "enet" "glad" "imgui" "lua-5.2.3" "midi" "minizip" "openvr" "optionalX11" "serial" "zlib"))) - ;; These need files from ThirdPartyLibs. - (substitute* "Extras/CMakeLists.txt" - (("BulletRobotics") "")) + ;; Tests fail on linking, cannot find -lBussIK. (substitute* "test/CMakeLists.txt" ((" InverseDynamics") @@ -144,6 +145,17 @@ "-DBUILD_CPU_DEMOS=OFF" "-DBUILD_OPENGL3_DEMOS=OFF" "-DBUILD_BULLET2_DEMOS=OFF" + ;; openmw 0.47.0 requires bullet to be built with + ;; double precision. + ;; See <https://issues.guix.gnu.org/52953> for + ;; more information. + "-DUSE_DOUBLE_PRECISION=ON" + ;; Extras/BulletRoboticsGUI needs files from + ;; ThirdPartyLibs + "-DBUILD_BULLET_ROBOTICS_GUI_EXTRA=OFF" + ;; Extras/BulletRobotics needs files from + ;; ThirdPartyLibs + "-DBUILD_BULLET_ROBOTICS_EXTRA=OFF" (string-append "-DCMAKE_CXX_FLAGS=-fPIC " (or (getenv "CXXFLAGS") ""))) #:phases @@ -158,9 +170,7 @@ "# ADD_TEST(Test_BulletInverseForward")) #t))))) (inputs - `(("glu" ,glu) - ("libx11" ,libx11) - ("mesa" ,mesa))) + (list glu libx11 mesa)) (home-page "https://pybullet.org/wordpress/") (synopsis "3D physics engine library") (description @@ -182,11 +192,9 @@ is used in some video games and movies.") (base32 "0psb2za6ldrlak7s8pjvli98ij5yiwjx8j1ms2v7rj9yadx0xv8h")))) (build-system gnu-build-system) (inputs - `(("libpng" ,libpng))) + (list libpng)) (native-inputs - `(("asciidoc" ,asciidoc) - ("pkg-config" ,pkg-config) - ("zstd" ,zstd))) + (list asciidoc pkg-config zstd)) (home-page "https://github.com/Doom-Utils/deutex") (synopsis "WAD file composer for Doom and related games") (description @@ -210,6 +218,7 @@ DeuTex has functions such as merging wads, etc.") (uri (string-append "https://binaries.openttd.org/extra/" name "/" version "/" name "-" version "-source.tar.xz")) + (patches (search-patches "grfcodec-gcc-compat.patch")) (sha256 (base32 "08admgnpqcsifpicbm56apgv360fxapqpbbsp10qyk8i22w1ivsk")))) (build-system gnu-build-system) @@ -235,12 +244,9 @@ DeuTex has functions such as merging wads, etc.") "readme" "readme.rpn")) (for-each (lambda (file) (install-file file man)) - (find-files "." "\\.1")))) - #t))))) + (find-files "." "\\.1"))))))))) (inputs - `(("boost" ,boost) - ("libpng" ,libpng) - ("zlib" ,zlib))) + (list boost libpng zlib)) (synopsis "GRF development tools") (description "The @dfn{Graphics Resource File} (GRF) development tools are a set of @@ -305,13 +311,13 @@ PCM data.") (("-Werror") "")) #t))))) (native-inputs `(("pkgconfig" ,pkg-config))) - (inputs `(("bdb" ,bdb) - ("glib" ,glib) - ("guile" ,guile-3.0) - ("libmicrohttpd" ,libmicrohttpd) - ("ncurses" ,ncurses) - ("sdl" ,sdl) - ("zlib" ,zlib))) + (inputs (list bdb + glib + guile-3.0 + libmicrohttpd + ncurses + sdl + zlib)) (home-page "https://www.nongnu.org/gzochi/") (synopsis "Scalable middleware for multiplayer games") (description @@ -340,8 +346,7 @@ provide connectivity for client applications written in any language.") (arguments '(#:tests? #f)) (propagated-inputs - `(("python-pillow" ,python-pillow) - ("python-ply" ,python-ply))) + (list python-pillow python-ply)) (home-page "https://github.com/OpenTTD/nml") (synopsis "NML compiler") (description @@ -363,8 +368,7 @@ files) into @file{.grf} and/or @file{.nfo} files.") "0s5d5qzlzfmqb10iyrqi62n36ll94d99xjaznp5ca6dz1b91qkvr")))) (build-system python-build-system) (propagated-inputs - `(("python-pygame" ,python-pygame) - ("python-uniseg" ,python-uniseg))) + (list python-pygame python-uniseg)) (home-page "https://python-sge.github.io/") (synopsis "2D game engine for Python") (description @@ -374,9 +378,6 @@ you can focus on the game itself. This makes more rapid game development possible, and it also makes the SGE easy to learn.") (license license:lgpl3+))) -(define-public python-sge-pygame - (deprecated-package "python-sge-pygame" python-sge)) - (define-public python-tmx (package (name "python-tmx") @@ -392,7 +393,7 @@ possible, and it also makes the SGE easy to learn.") "073q0prg1nzlkga2b45vhscz374206qh4x68ccg00mxxwagn64z0")))) (build-system python-build-system) (propagated-inputs - `(("python-six" ,python-six))) + (list python-six)) (home-page "http://python-tmx.nongnu.org") (synopsis "Python library for the @code{Tiled} TMX format") (description @@ -410,8 +411,8 @@ levels.") (package (inherit python2-tmx) (propagated-inputs - `(("python2-pathlib" ,python2-pathlib) - ,@(package-propagated-inputs python2-tmx)))))) + (modify-inputs (package-propagated-inputs python2-tmx) + (prepend python2-pathlib)))))) (define-public python-xsge (package @@ -438,9 +439,9 @@ levels.") "--root=/")))) #:tests? #f)) ; no check target (native-inputs - `(("unzip" ,unzip))) + (list unzip)) (propagated-inputs - `(("python-sge" ,python-sge))) + (list python-sge)) (home-page "https://python-sge.github.io/") (synopsis "Extensions for the SGE Game Engine") (description @@ -500,9 +501,7 @@ support.") ("sfml" ,sfml) ("wxwidgets" ,wxwidgets-3.1))) (native-inputs - `(("pkg-config" ,pkg-config) - ("which" ,which) - ("zip" ,zip))) + (list pkg-config which zip)) (home-page "https://slade.mancubus.net") (synopsis "Doom game data editor") (description "SLADE3 is a modern editor for Doom-engine based games and @@ -526,12 +525,9 @@ formats such as PNG.") "1ifxh3sv6gz32gahgi7ba0ivcw5mfgwnrw6iycpav150w9xla43i")))) (build-system gnu-build-system) (inputs - `(("qtbase" ,qtbase-5) - ("qtdeclarative" ,qtdeclarative) - ("qtsvg" ,qtsvg) - ("zlib" ,zlib))) + (list qtbase-5 qtdeclarative qtsvg zlib)) (native-inputs - `(("qttools" ,qttools))) + (list qttools)) (arguments '(#:phases (modify-phases %standard-phases @@ -559,16 +555,16 @@ clone.") (define-public tsukundere (package (name "tsukundere") - (version "0.3.2") + (version "0.4.1") (source (origin (method git-fetch) (uri (git-reference - (url "https://gitlab.com/leoprikler/tsukundere") + (url "https://gitlab.com/lilyp/tsukundere") (commit version))) (file-name (git-file-name name version)) (sha256 (base32 - "05y3nj8vpn40hfr2y29p8pa9hhpzibhbvfzpm0dlphjh9crq3ii4")))) + "11glghnff27rqh2s34g51afg93g3f5ryfz9mkyb7qj35ngl8vw5f")))) (build-system gnu-build-system) (arguments `(#:modules ((ice-9 match) @@ -598,9 +594,12 @@ clone.") ((label . pkg) (and (string-prefix? "guile-" label) pkg))) inputs)))) - (substitute* "bin/tsukundere" + (substitute* "tsukundere.scm" (("exec guile (.*)" _ args) (string-append + ;; XXX: Prevent Guile-SDL2 from blowing up by not knowing + ;; where the SDL2 libaries are. + "unset LD_LIBRARY_PATH\n" (format #f "export GUILE_LOAD_PATH=\"~@?\"~%" "~{~a~^:~}" (map scm pkgs)) (format #f "export GUILE_LOAD_COMPILED_PATH=\"~@?\"~%" @@ -614,12 +613,15 @@ clone.") ("automake" ,automake) ("gettext" ,gettext-minimal) ("guile" ,guile-3.0) + ("libtool" ,libtool) ("pkg-config" ,pkg-config) ("texinfo" ,texinfo))) (inputs `(("guile-sdl2" ,guile3.0-sdl2) - ("guile" ,guile-3.0))) - (home-page "https://gitlab.com/leoprikler/tsukundere") + ("guile" ,guile-3.0) + ("pango" ,pango) + ("sdl2" ,sdl2))) + (home-page "https://gitlab.com/lilyp/tsukundere") (synopsis "Visual novel engine") (description "Tsukundere is a game engine geared heavily towards the development of visual novels, written on top of Guile-SDL2. It is still @@ -655,7 +657,7 @@ experimental.") "-DSFML_OS_PKGCONFIG_DIR=lib/pkgconfig") #:tests? #f)) ; no tests (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (inputs `(("mesa" ,mesa) ("glew" ,glew) @@ -669,10 +671,7 @@ experimental.") ("stb-image-write" ,stb-image-write))) (propagated-inputs ;; In Requires.private of pkg-config files. - `(("flac" ,flac) - ("freetype" ,freetype) - ("libvorbis" ,libvorbis) - ("openal" ,openal))) + (list flac freetype libvorbis openal)) (home-page "https://www.sfml-dev.org") (synopsis "Simple and Fast Multimedia Library") (description @@ -706,11 +705,9 @@ of five modules: system, window, graphics, audio and network.") #t)))) #:tests? #f)) ; no tests (native-inputs - `(("pkg-config" ,pkg-config) - ("desktop-file-utils" ,desktop-file-utils))) + (list pkg-config desktop-file-utils)) (inputs - `(("sdl" ,sdl) - ("gtk+" ,gtk+))) + (list sdl gtk+)) (synopsis "Simple sound effect generator") (description "Sfxr is a tool for quickly generating simple sound effects. Originally created for use in video game prototypes, it can generate random @@ -773,9 +770,9 @@ garbage collection and can be extended with plugins.") (("CMAKE_COMPILER_IS_GNUCC") "FALSE")) #t))))) (inputs - `(("zlib" ,zlib))) + (list zlib)) (native-inputs - `(("doxygen" ,doxygen))) + (list doxygen)) (home-page "https://icculus.org/physfs") (synopsis "File system abstraction library") (description @@ -792,29 +789,29 @@ archive on a per-file basis.") (define-public love (package (name "love") - (version "11.3") - (source (origin - (method url-fetch) - (uri (string-append "https://bitbucket.org/rude/love/downloads/" - "love-" version "-linux-src.tar.gz")) - (sha256 - (base32 - "0m8lvlabmcchskx4qpzkdlsm44360f3j0q3vvvj2388cfnvhv7v4")))) + (version "11.4") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/love2d/love/releases/download/" + version "/love-" version "-linux-src.tar.gz")) + (sha256 + (base32 "0sak3zjpzfs3ys315m8qvszi946fz76jcpsb58j11wplyp5fwbz3")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (inputs - `(("devil" ,devil) - ("freetype" ,freetype) - ("libmodplug" ,libmodplug) - ("libtheora" ,libtheora) - ("libvorbis" ,libvorbis) - ("luajit" ,luajit) - ("mesa" ,mesa) - ("mpg123" ,mpg123) - ("openal" ,openal) - ("sdl2" ,sdl2) - ("zlib" ,zlib))) + (list devil + freetype + libmodplug + libtheora + libvorbis + luajit + mesa + mpg123 + openal + sdl2 + zlib)) (synopsis "2D game framework for Lua") (description "LÖVE is a framework for making 2D games in the Lua programming language.") @@ -848,7 +845,7 @@ programming language.") (substitute* "CMakeLists.txt" (("DESTINATION .") "DESTINATION lib/love"))))))) (inputs - `(("luajit" ,luajit))) + (list luajit)) (synopsis "Lightweight immediate mode GUI for LÖVE games") (description "LÖVE is a Lua framework for making 2D games. Nuklear is a minimal state immediate mode graphical user interface toolkit. This @@ -859,7 +856,7 @@ package is the Nuklear bindings for LÖVE created by Kevin Harrison.") (define-public allegro-4 (package (name "allegro") - (version "4.4.3") + (version "4.4.3.1") (source (origin (method url-fetch) (uri (string-append "https://github.com/liballeg/allegro5/" @@ -867,7 +864,7 @@ package is the Nuklear bindings for LÖVE created by Kevin Harrison.") version ".tar.gz")) (sha256 (base32 - "1d5ws3ihvpa6f4qc6a6drq31pajw6bblxifr4kcxzqj9br1nw28y")))) + "1m6lz35nk07dli26kkwz3wa50jsrxs1kb6w1nj14a911l34xn6gc")))) (build-system cmake-build-system) (arguments '(#:phases @@ -879,14 +876,9 @@ package is the Nuklear bindings for LÖVE created by Kevin Harrison.") ;; unconditionally clobbered in the build script. (substitute* '("CMakeLists.txt") (("ADDON_LINKAGE STATIC") - "ADDON_LINKAGE SHARED")) - #t))))) + "ADDON_LINKAGE SHARED"))))))) (inputs - `(("glu" ,glu) - ("libpng" ,libpng) - ("libvorbis" ,libvorbis) - ("mesa" ,mesa) - ("zlib" ,zlib))) + (list glu libpng libvorbis mesa zlib)) (synopsis "Game programming library") (description "Allegro is a library mainly aimed at video game and multimedia programming. It handles common, low-level tasks such as creating @@ -927,7 +919,7 @@ etc.") ("physfs" ,physfs) ("zlib" ,zlib))) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (synopsis "Game programming library") (description "Allegro is a library mainly aimed at video game and multimedia programming. It handles common, low-level tasks such as creating @@ -988,7 +980,7 @@ etc.") (assoc-ref %build-inputs "freetype") "/include/freetype2")))) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) ;; TODO: Use a patched Allegro 4 that supports window resizing. This ;; patched version is bundled with Aseprite, but the patches should be ;; extracted and applied on top of a standalone Allegro 4 package. @@ -1013,6 +1005,58 @@ the creation of animations, tiled graphics, texture atlases, and more.") (home-page "https://www.aseprite.org/") (license license:gpl2+))) +(define-public libresprite + (package + (name "libresprite") + (version "1.0") + ;; TODO: Unbundle third party software. + ;; - duktape is bundled inside the project but it's hard to unbundle: + ;; there are many differences from a version to the next and it is not + ;; really designed to work as a shared lib. + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/LibreSprite/LibreSprite") + (commit (string-append "v" version)) + (recursive? #t))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0djbjjh21ahlxzh0b0jp4mpfycam8h9157i4wbxkd618fraadhbp")))) + (build-system cmake-build-system) + (arguments + '(#:configure-flags + (list "-DWITH_WEBP_SUPPORT=1") + ;; Tests are unmaintained + #:tests? #f)) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("curl" ,curl) + ("freetype" ,freetype) + ("giflib" ,giflib) + ("googletest" ,googletest) + ("libjpeg" ,libjpeg-turbo) + ("libpng" ,libpng) + ("libwebp" ,libwebp) + ("libx11" ,libx11) + ("libxext" ,libxext) + ("libxxf86dga" ,libxxf86dga) + ("libxxf86vm" ,libxxf86vm) + ("lua" ,lua) ; Optional + ("pixman" ,pixman) + ("sdl2" ,sdl2) + ("sdl2-image" ,sdl2-image) + ("tinyxml" ,tinyxml) + ("zlib" ,zlib))) + (synopsis "Animated sprite editor and pixel art tool") + (description "LibreSprite is a tool for creating 2D pixel art for video +games. In addition to basic pixel editing features, it can assist in the +creation of animations, tiled graphics, texture atlases, and more. +LibreSprite is a fork of the latest GPLv2 commit of Aseprite.") + (home-page "https://libresprite.github.io/") + (license license:gpl2+))) + (define-public qqwing (package (name "qqwing") @@ -1027,7 +1071,7 @@ the creation of animations, tiled graphics, texture atlases, and more.") "0bw0papyqjg22z6irf36gs54y8236wa37b6gyn2h1spy65n76lqp")))) (build-system gnu-build-system) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (home-page "https://qqwing.com/") (synopsis "Sudoku puzzle solver and generator") (description @@ -1057,11 +1101,8 @@ It offers the following features: (base32 "08ddhywdy2qg17m592ng3yr0p1ih96irg8wg729g75hsxxq9ipks")))) (build-system gnu-build-system) - (native-inputs `(("pkg-config" ,pkg-config))) - (inputs `(("fontconfig" ,fontconfig) - ("freeglute" ,freeglut) - ("fribidi" ,fribidi) - ("glew" ,glew))) + (native-inputs (list pkg-config)) + (inputs (list fontconfig freeglut fribidi glew)) (home-page "http://quesoglc.sourceforge.net") (synopsis "Implementation of the OpenGL Character Renderer (GLC)") (description @@ -1177,7 +1218,7 @@ to create fully featured games and multimedia programs in the python language.") (define-public python-pygame-sdl2 (let ((real-version "2.1.0") - (renpy-version "7.4.8")) + (renpy-version "7.4.11")) (package (inherit python-pygame) (name "python-pygame-sdl2") @@ -1187,7 +1228,7 @@ to create fully featured games and multimedia programs in the python language.") (method url-fetch) (uri (string-append "https://www.renpy.org/dl/" renpy-version "/pygame_sdl2-" version ".tar.gz")) - (sha256 (base32 "1yyqcg7khac17jif86vi2d4j9l8x2vfg4h5pasrwwsy0g8386zsm")) + (sha256 (base32 "0nxvca16299jx6sp0ys29rqixcs21ymhqwjfkbchhss0yar7qjgz")) (modules '((guix build utils))) (snippet '(begin @@ -1215,10 +1256,9 @@ to create fully featured games and multimedia programs in the python language.") "/lib -Wl,--enable-new-dtags -lSDL2")) #t))))) (inputs - `(("sdl-union" - ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))))) + (list (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))) (native-inputs - `(("python-cython" ,python-cython))) + (list python-cython)) (home-page "https://www.renpy.org/") (synopsis "Reimplementation of the Pygame API using SDL2") (description "Pygame_SDL2 reimplements the Pygame API using SDL2, @@ -1233,21 +1273,19 @@ developed mainly for Ren'py.") (define-public python2-renpy (package (name "python2-renpy") - (version "7.4.8") + (version "7.4.11") (source (origin (method url-fetch) (uri (string-append "https://www.renpy.org/dl/" version "/renpy-" version "-source.tar.bz2")) - (sha256 (base32 "1ml3gs87xxk1iflrg5ivffr4q8fi7d65l1cx462bvvpm1rs2sa8d")) + (sha256 (base32 "0zkhg2sd2hglm9dkansf4h8sq7lm7iqslzl763ambp4kyfdvd07q")) (modules '((guix build utils))) (patches (search-patches "renpy-use-system-fribidi.patch")) (snippet '(with-directory-excursion "module" - ;; drop generated sources - (delete-file-recursively "gen") ;; drop fribidi sources (delete-file-recursively "fribidi-src") #t)))) @@ -1268,15 +1306,12 @@ developed mainly for Ren'py.") (lambda* (#:key inputs #:allow-other-keys) (substitute* "module/setup.py" (("/usr/include/fribidi") - (string-append (assoc-ref inputs "fribidi") - "/include/fribidi"))) - #t)) + (search-input-directory inputs "include/fribidi"))))) (add-after 'set-paths 'set-build-vars (lambda* (#:key inputs native-inputs #:allow-other-keys) (setenv "RENPY_CYTHON" - (string-append (assoc-ref (or native-inputs inputs) - "python2-cython") - "/bin/cython")) + (search-input-file (or native-inputs inputs) + "/bin/cython")) (setenv "RENPY_DEPS_INSTALL" (string-join (map cdr inputs) ":")) #t)) (replace 'build @@ -1286,9 +1321,8 @@ developed mainly for Ren'py.") ;; named "setup.py". (with-directory-excursion "module" (apply (assoc-ref %standard-phases 'build) args)) - ;; the above causes renpy.__init__ to be compiled but does not - ;; compile anything else, hence we do that here - (delete-file "renpy/__init__.pyc") + ;; The above only builds the cython modules, but nothing else, + ;; so we do that here. (invoke "python" "-m" "compileall" "renpy") #t)) (replace 'install @@ -1308,20 +1342,18 @@ developed mainly for Ren'py.") (delete-file-recursively (string-append out site "/renpy/common"))) #t))))) (inputs - `(("ffmpeg" ,ffmpeg) - ("freetype" ,freetype) - ("fribidi" ,fribidi) - ("glew" ,glew) - ("libpng" ,libpng) - ("sdl-union" - ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))) - ("xdg-utils" ,xdg-utils))) + (list ffmpeg + freetype + fribidi + glew + libpng + (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)) + xdg-utils)) (propagated-inputs `(("python2-future" ,python2-future) ("python2-pygame" ,python2-pygame-sdl2))) (native-inputs - `(("gcc" ,gcc-8) ; for const variables as initializer elements - ("python2-cython" ,python2-cython))) + (list python2-cython)) (home-page "https://www.renpy.org/") (synopsis "Ren'py python module") (description "This package contains the shared libraries and Python modules @@ -1416,70 +1448,17 @@ are only used to bootstrap it.") ;; `-- Super Awesome Game.sh (let* ((out (assoc-ref outputs "out")) (bin/renpy (string-append out "/bin/renpy"))) - (mkdir-p (string-append out "/bin")) (copy-recursively "renpy/common" (string-append out "/share/renpy/common")) (copy-recursively "gui" (string-append out "/share/renpy/gui")) - (call-with-output-file bin/renpy - (lambda (port) - (format port "#!~a/bin/python2~%" - (assoc-ref inputs "python2")) - (format port " -from __future__ import print_function - -import os -import sys -import warnings - -def path_to_common(renpy_base): - return renpy_base + \"/common\" - -def path_to_saves(gamedir, save_directory=None): - import renpy # @UnresolvedImport - - if save_directory is None: - save_directory = renpy.config.save_directory - save_directory = renpy.exports.fsencode(save_directory) - - if not save_directory: - return gamedir + \"/saves\" - - return os.path.expanduser(\"~~/.renpy/\" + save_directory) - -def path_to_renpy_base(): - return \"~a\" - -def main(): - renpy_base = path_to_renpy_base() - try: - import renpy.bootstrap - import renpy.arguments - except ImportError: - print(\"\"\"Could not import renpy.bootstrap. -Please ensure you decompressed Ren'Py correctly, preserving the directory -structure.\"\"\", file=sys.stderr) - raise - - args = renpy.arguments.bootstrap() - if not args.basedir: - print(\"\"\"This Ren'py requires a basedir to launch. -The basedir is the directory, in which .rpy files live -- usually the 'game' -subdirectory of a game packaged by Ren'py. - -If you want the Ren'py launcher, use renpy-launcher instead.\"\"\", - file=sys.stderr) - sys.exit() - - renpy.bootstrap.bootstrap(renpy_base) - -if __name__ == \"__main__\": - main() -" - (string-append out "/share/renpy")))) - (chmod bin/renpy #o755) - #t))) + (mkdir-p (string-append out "/bin")) + (copy-file (assoc-ref inputs "renpy.in") bin/renpy) + (substitute* bin/renpy + (("@PYTHON@") (search-input-file inputs "bin/python2")) + (("@RENPY_BASE@") (string-append out "/share/renpy"))) + (chmod bin/renpy #o755)))) (add-after 'install 'install-games (lambda* (#:key outputs #:allow-other-keys) @@ -1520,7 +1499,7 @@ if __name__ == \"__main__\": (assoc-ref inputs "python")) "/site-packages"))) (wrap-program (string-append out "/bin/renpy") - `("PYTHONPATH" = + `("GUIX_PYTHONPATH" = (,@(delete-duplicates (map (lambda (store-path) @@ -1533,13 +1512,14 @@ if __name__ == \"__main__\": inputs)))))))) #t)))))) (inputs - `(("python2-renpy" ,python2-renpy) + `(("renpy.in" ,(search-auxiliary-file "renpy/renpy.in")) + ("python2-renpy" ,python2-renpy) ("python2-tkinter" ,python-2 "tk") ("python2" ,python-2) ; for ‘fix-commands’ and ‘wrap’ ("xdg-utils" ,xdg-utils))) (propagated-inputs '()) (native-inputs - `(("xorg-server" ,xorg-server-for-tests))) + (list xorg-server-for-tests)) (outputs (list "out" "tutorial" "the-question")) (home-page "https://www.renpy.org/") @@ -1593,8 +1573,6 @@ games.") (inputs `(("gifsicle" ,gifsicle) ("sdl2" ,(sdl-union (list sdl2 sdl2-image))))) - (native-inputs - `(("gcc" ,gcc-10))) ; for std::filesystem (home-page "https://github.com/kitao/pyxel") (synopsis "Retro game engine for Python") (description "Pyxel is a game engine inspired by retro gaming consoles. @@ -1611,6 +1589,7 @@ also comes with a built-in image and sound editor.") (method url-fetch) ;; XXX: There is no URL that contains the version. :( (uri "http://pulkomandy.tk/projects/GrafX2/downloads/21") + (file-name (string-append "grafx2-" version ".tgz")) (sha256 (base32 "0svsy6rqmdj11b400c242i2ixihyz0hds0dgicqz6g6dcgmcl62q")))) @@ -1627,16 +1606,16 @@ also comes with a built-in image and sound editor.") ;; SDL header files are referenced without the preceeding "SDL/". (list (string-append "CFLAGS=-I" (assoc-ref %build-inputs "sdl-union") - "/include/SDL") + "/include/SDL" + " -fcommon") (string-append "prefix=" (assoc-ref %outputs "out"))) #:tests? #f)) ; no check target (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (inputs - `(("libpng" ,libpng) - ("lua" ,lua-5.1) - ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-ttf))))) + (list libpng lua-5.1 + (sdl-union (list sdl sdl-image sdl-ttf)))) (synopsis "Bitmap paint program") (description "GrafX2 is a bitmap paint program inspired by the Amiga programs Deluxe Paint and Brilliance. Specializing in 256-color drawing, it @@ -1663,7 +1642,7 @@ painted with a mouse.") (arguments `(#:tests? #f)) ; no test suite (inputs - `(("libx11" ,libx11))) + (list libx11)) (synopsis "Object Oriented Input System") (description "Cross Platform Object Oriented Input Lib System is a cross platform, @@ -1700,16 +1679,14 @@ robust and compatible with many systems and operating systems.") "-DMYGUI_BUILD_DEMOS=FALSE" "-DMYGUI_BUILD_TOOLS=FALSE"))) (native-inputs - `(("boost" ,boost) - ("doxygen" ,doxygen) - ("pkg-config" ,pkg-config))) + (list boost doxygen pkg-config)) (inputs - `(("font-dejavu" ,font-dejavu) - ("freetype" ,freetype) - ("graphviz" ,graphviz) - ("libx11" ,libx11) - ("ogre" ,ogre) - ("ois" ,ois))) + (list font-dejavu + freetype + graphviz + libx11 + ogre + ois)) (synopsis "Fast, flexible and simple GUI") (description "MyGUI is a library for creating Graphical User Interfaces (GUIs) for games @@ -1735,16 +1712,15 @@ of use.") "-DMYGUI_BUILD_DEMOS=FALSE" "-DMYGUI_BUILD_TOOLS=FALSE"))))) (inputs - `(("mesa" ,mesa) - ("glu" ,glu) - ,@(fold alist-delete (package-inputs mygui) - '("ogre")))) + (modify-inputs (package-inputs mygui) + (delete "ogre") + (prepend mesa glu))) (synopsis "Fast, flexible and simple GUI (OpenGL backend)"))) (define-public openmw (package (name "openmw") - (version "0.46.0") + (version "0.47.0") (source (origin (method git-fetch) @@ -1754,26 +1730,27 @@ of use.") (file-name (git-file-name name version)) (sha256 (base32 - "0rm32zsmxvr6b0jjihfj543skhicbw5kg6shjx312clhlm035w2x")))) + "19mcbnjl4279qalb97msf965bjax48mx1r1qczyvwhn28h6n3bsy")))) (build-system cmake-build-system) (arguments `(#:tests? #f ; No test target #:configure-flags - (list "-DDESIRED_QT_VERSION=5"))) + (list "-DDESIRED_QT_VERSION=5" + "-DOPENMW_USE_SYSTEM_RECASTNAVIGATION=ON"))) (native-inputs - `(("boost" ,boost) - ("doxygen" ,doxygen) - ("pkg-config" ,pkg-config))) + (list boost doxygen pkg-config)) (inputs - `(("bullet" ,bullet) - ("ffmpeg" ,ffmpeg) - ("libxt" ,libxt) - ("mygui" ,mygui-gl) ; OpenMW does not need Ogre. - ("openal" ,openal) - ("openscenegraph" ,openmw-openscenegraph) - ("qtbase" ,qtbase-5) - ("sdl" ,sdl2) - ("unshield" ,unshield))) + (list bullet + ffmpeg + libxt + lz4 + mygui-gl ; OpenMW does not need Ogre. + openal + openmw-openscenegraph + qtbase-5 + recastnavigation + sdl2 + unshield)) (synopsis "Re-implementation of the RPG Morrowind engine") (description "OpenMW is a game engine which reimplements and extends the one that runs @@ -1786,7 +1763,7 @@ games.") (define-public godot (package (name "godot") - (version "3.2.3") + (version "3.4.2") (source (origin (method git-fetch) (uri (git-reference @@ -1795,7 +1772,7 @@ games.") (file-name (git-file-name name version)) (sha256 (base32 - "19vrp5lhyvxbm6wjxzn28sn3i0s8j08ca7nani8l1nrhvlc8wi0v")) + "1bm9yl995chvx6jwkdia12yjrgwcpzb1r9bmj606q8z264aw2ma5")) (modules '((guix build utils) (ice-9 ftw) (srfi srfi-1))) @@ -1810,27 +1787,30 @@ games.") "assimp" "certs" "cvtt" + "embree" "enet" "etc2comp" "fonts" "glad" "jpeg-compressor" "libsimplewebm" + "minimp3" "miniupnpc" "minizip" "misc" "nanosvg" + "oidn" "pvrtccompressor" "recastnavigation" "squish" + "stb_rect_pack" "tinyexr" "vhacd" "xatlas"))) (for-each delete-file-recursively (lset-difference string=? (scandir ".") - (cons* "." ".." preserved-files))))) - #t)))) + (cons* "." ".." preserved-files))))))))) (build-system scons-build-system) (arguments `(#:scons ,scons-python2 @@ -1864,8 +1844,7 @@ games.") (("env_base = Environment\\(tools=custom_tools\\)") (string-append "env_base = Environment(tools=custom_tools)\n" - "env_base = Environment(ENV=os.environ)"))) - #t)) + "env_base = Environment(ENV=os.environ)"))))) ;; Build headless tools, used for packaging games without depending on X. (add-after 'build 'build-headless (lambda* (#:key scons-flags #:allow-other-keys) @@ -1888,8 +1867,19 @@ games.") (install-file "godot_server" (string-append headless "/bin"))) ;; Tell the editor where to find zenity for OS.alert(). (wrap-program (string-append out "/bin/godot") - `("PATH" ":" prefix (,(string-append zenity "/bin"))))) - #t)) + `("PATH" ":" prefix (,(string-append zenity "/bin"))))))) + (add-after 'install 'wrap + (lambda* (#:key inputs outputs #:allow-other-keys) + ;; FIXME: Mesa tries to dlopen libudev.so.0 and fails. Pending a + ;; fix of the mesa package we wrap the pcb executable such that + ;; Mesa can find libudev.so.0 through LD_LIBRARY_PATH. + ;; also append ld path for pulseaudio and alsa-lib + (let* ((out (assoc-ref outputs "out")) + (udev_path (string-append (assoc-ref inputs "eudev") "/lib")) + (pulseaudio_path (string-append (assoc-ref inputs "pulseaudio") "/lib")) + (alas_lib_path (string-append (assoc-ref inputs "alsa-lib") "/lib"))) + (wrap-program (string-append out "/bin/godot") + `("LD_LIBRARY_PATH" ":" prefix (,udev_path ,pulseaudio_path ,alas_lib_path)))))) (add-after 'install 'install-godot-desktop (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -1903,32 +1893,34 @@ games.") (copy-file icon dest)) '("icon.png" "icon.svg") `(,(string-append icons "/256x256/apps/godot.png") - ,(string-append icons "/scalable/apps/godot.svg")))) - #t))))) + ,(string-append icons "/scalable/apps/godot.svg"))))))))) (outputs '("out" "headless")) - (native-inputs `(("pkg-config" ,pkg-config))) - (inputs `(("alsa-lib" ,alsa-lib) - ("bullet" ,bullet) - ("freetype" ,freetype) - ("glew" ,glew) - ("glu" ,glu) - ("libtheora" ,libtheora) - ("libvorbis" ,libvorbis) - ("libvpx" ,libvpx) - ("libwebp" ,libwebp) - ("libx11" ,libx11) - ("libxcursor" ,libxcursor) - ("libxi" ,libxi) - ("libxinerama" ,libxinerama) - ("libxrandr" ,libxrandr) - ("mbedtls" ,mbedtls-apache) - ("mesa" ,mesa) - ("opusfile" ,opusfile) - ("pcre2" ,pcre2) - ("pulseaudio" ,pulseaudio) - ("wslay" ,wslay) - ("zenity" ,zenity) - ("zstd" ,zstd "lib"))) + (native-inputs + (list pkg-config)) + (inputs + (list alsa-lib + bullet + freetype + glew + glu + libtheora + libvorbis + libvpx + libwebp + libx11 + libxcursor + libxi + libxinerama + libxrandr + mbedtls-apache + mesa + opusfile + pcre2 + pulseaudio + eudev ; FIXME: required by mesa + wslay + zenity + `(,zstd "lib"))) (home-page "https://godotengine.org/") (synopsis "Advanced 2D and 3D game engine") (description @@ -1959,11 +1951,10 @@ scripted in a Python-like language.") ;; Only tests are compiled, and they need assertions to work correctly. #:build-type "Debug")) (native-inputs - `(;; for testing - ("googletest" ,googletest) - ;; for documentation - ("doxygen" ,doxygen) - ("graphviz" ,graphviz))) + (list ;; for testing + googletest + ;; for documentation + doxygen graphviz)) (synopsis "Entity component system") (description "EnTT is a header-only library, containing (among other things) @itemize @@ -2019,8 +2010,7 @@ scripted in a Python-like language.") ("libpng" ,libpng) ("fltk" ,fltk) ("zlib" ,zlib))) - (native-inputs `(("pkg-config" ,pkg-config) - ("xdg-utils" ,xdg-utils))) + (native-inputs (list pkg-config xdg-utils)) (synopsis "Doom map editor") (description "Eureka is a map editor for the classic DOOM games, and a few related games such as Heretic and Hexen. It comes with a 3d preview mode and @@ -2031,29 +2021,29 @@ a 2D editor view.") (define-public guile-chickadee (package (name "guile-chickadee") - (version "0.7.0") + (version "0.8.0") (source (origin (method url-fetch) (uri (string-append "https://files.dthompson.us/chickadee/" "chickadee-" version ".tar.gz")) (sha256 (base32 - "199y4kc28va6klfs19h998sfh7vx9spnrvjw7p92i47q5a7jdcp6")))) + "1k2dml2z57lnc36wrmwhh7avnpczxgxnshlfhpbk174vg6v609n0")))) (build-system gnu-build-system) (arguments '(#:make-flags '("GUILE_AUTO_COMPILE=0"))) (propagated-inputs `(("guile-opengl" ,guile3.0-opengl) - ("guile-sdl2" ,guile3.0-sdl2))) + ("guile-sdl2" ,guile-sdl2))) (inputs - `(("freetype" ,freetype) - ("guile" ,guile-3.0) - ("libvorbis" ,libvorbis) - ("mpg123" ,mpg123) - ("openal" ,openal))) + (list freetype + guile-3.0-latest + libvorbis + mpg123 + openal + readline)) (native-inputs - `(("pkg-config" ,pkg-config) - ("texinfo" ,texinfo))) + (list guile-3.0-latest pkg-config texinfo)) (home-page "https://dthompson.us/projects/chickadee.html") (synopsis "Game development toolkit for Guile Scheme with SDL2 and OpenGL") (description "Chickadee is a game development toolkit for Guile Scheme @@ -2069,9 +2059,6 @@ that parenthetically inclined game developers need to make 2D (and eventually @end enumerate\n") (license license:gpl3+))) -(define-public guile3.0-chickadee - (deprecated-package "guile3.0-chickadee" guile-chickadee)) - (define-public bennu-game-development (package (name "bennu-game-development") @@ -2108,12 +2095,8 @@ that parenthetically inclined game developers need to make 2D (and eventually i*86)")) #t))))) - (inputs `(("openssl" ,openssl) - ("zlib" ,zlib))) - (native-inputs `(("pkg-config" ,pkg-config) - ("autoconf" ,autoconf) - ("automake" ,automake) - ("libtool" ,libtool))) + (inputs (list openssl zlib)) + (native-inputs (list pkg-config autoconf automake libtool)) (synopsis "Programming language to create games") (description "Bennu Game Development, also known as bennudg, is a programming language tailored at game development. It is the successor of @@ -2135,11 +2118,7 @@ Fenix.") (("extern fixed fmul\\( int x, int y \\);") "") (("extern fixed fdiv\\( int x, int y \\);") ""))) (chdir "modules")))))) - (inputs `(("zlib" ,zlib) - ("libpng" ,libpng) - ("openssl" ,openssl) - ("sdl-mixer" ,sdl-mixer) - ("bennu-game-development" ,bennu-game-development))) + (inputs (list zlib libpng openssl sdl-mixer bennu-game-development)) (synopsis "Modules for the Bennu Game Development programming language") (description "This package contains a collection of modules for the Bennu Game Development programming language, from CD handling through SDL to @@ -2160,11 +2139,9 @@ joystick support."))) "plib-CVE-2012-4552.patch")))) (build-system gnu-build-system) (inputs - `(("mesa" ,mesa) - ("libxi" ,libxi) - ("libxmu" ,libxmu))) + (list mesa libxi libxmu)) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (home-page "http://plib.sourceforge.net/") (synopsis "Suite of portable game libraries") (description "PLIB is a set of libraries that will permit programmers to @@ -2205,8 +2182,8 @@ of the others") ("freetype" ,freetype) ("libogg" ,libogg))) (native-inputs - `(("which" ,which) ; Else SDL_version.h won't be found. - ("pkg-config" ,pkg-config))) + (list which ; Else SDL_version.h won't be found. + pkg-config)) (arguments '(#:tests? #f ; No tests. #:make-flags '("CC=gcc" @@ -2337,7 +2314,7 @@ specific knowledge of the hardware they are targeting.") sdl-union))) #t))))) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (inputs `(("sdl" ,(sdl-union (list sdl sdl-image sdl-mixer))))) (home-page "http://perso.b2b2c.ca/~sarrazip/dev/burgerspace.html") @@ -2385,7 +2362,7 @@ double-buffering.") (install-file "bin/Release/FNA.dll" (string-append out "/lib")) #t)))))) (native-inputs - `(("mono" ,mono))) + (list mono)) (inputs `(("sdl2-cs-src" ,(package-source sdl2-cs)) ("mojoshader-src" ,(package-source mojoshader-cs)) ("faudio-src" ,(package-source faudio)) @@ -2418,7 +2395,7 @@ focuses solely on developing a fully accurate XNA4 runtime for the desktop.") "-DBUILD_TESTING=ON" "-DENABLE_DOUBLE_PRECISION=ON"))) (native-inputs - `(("python-sphinx" ,python-sphinx))) + (list python-sphinx)) (home-page "https://github.com/danfis/libccd") (synopsis "Library for collision detection between two convex shapes") (description "@code{libccd} is library for a collision detection @@ -2455,9 +2432,7 @@ a.k.a. XenoCollide) as described in Game Programming Gems 7.") (("configure_file\\(libccd/.*") "")) #t))))) (inputs - `(("glu" ,glu) - ("libccd" ,libccd) - ("mesa" ,mesa))) + (list glu libccd mesa)) (home-page "https://www.ode.org/") (synopsis "High performance library for simulating rigid body dynamics") (description "ODE is a high performance library for simulating @@ -2489,9 +2464,7 @@ computer games, 3D authoring tools and simulation tools.") #:configure-flags '("-DBUILD_STATIC=OFF" "-DBUILD_DEMOS=OFF"))) (inputs - `(("freeglut" ,freeglut) - ("libxmu" ,libxmu) - ("libxrandr" ,libxrandr))) + (list freeglut libxmu libxrandr)) (home-page "https://chipmunk-physics.net/") (synopsis "Fast and lightweight 2D game physics library") (description "Chipmunk is a simple, lightweight, fast and portable 2D @@ -2522,7 +2495,7 @@ rigid body physics library written in C.") #:configure-flags '("-DBUILD_SHARED_LIBS=ON" "-DBOX2D_BUILD_TESTBED=OFF"))) (inputs - `(("libx11" ,libx11))) + (list libx11)) (home-page "https://box2d.org/") (synopsis "2D physics engine for games") (description "Box2D is a 2D rigid body simulation library for games. @@ -2583,18 +2556,15 @@ physics engine is just a system for procedural animation.") (patch-shebang "get_version.py") #t))))) (native-inputs - `(("autoconf" ,autoconf) - ("automake" ,automake) - ("libtool" ,libtool) - ("python" ,python) - ("pkg-config" ,pkg-config) - ("stb-sprintf" ,stb-sprintf) - ("stb-truetype" ,stb-truetype))) + (list autoconf + automake + libtool + python + pkg-config + stb-sprintf + stb-truetype)) (inputs - `(("lodepng" ,lodepng) - ("sdl2" ,sdl2) - ("utf8proc" ,utf8proc) - ("zlib" ,zlib))) + (list lodepng sdl2 utf8proc zlib)) (home-page "https://github.com/libtcod/libtcod") (synopsis "Library specifically designed for writing roguelikes") (description @@ -2679,7 +2649,7 @@ utilities frequently used in roguelikes.") ("uuid.h" ,util-linux "lib") ("zlib" ,zlib))) (native-inputs - `(("pkg-config" ,pkg-config))) + (list pkg-config)) (home-page "https://github.com/Warsow/qfusion") (supported-systems '("i686-linux" "x86_64-linux")) (synopsis "Warsow's fork of qfusion, the id Tech 2 derived game engine") @@ -2770,10 +2740,9 @@ support.") (add-before 'build 'fix-env (lambda* (#:key inputs #:allow-other-keys) (setenv "CPATH" - (string-append (assoc-ref inputs "sdl2-union") - "/include/SDL2:" - (or (getenv "CPATH") ""))) - #t)) + (string-append + (search-input-directory inputs "include/SDL2") + ":" (or (getenv "CPATH") ""))))) (add-after 'install 'really-install (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) @@ -2821,3 +2790,54 @@ fully dynamic omnidirectional shadows, global illumination, HDR lighting, deferred shading, morphological / temporal / multisample anti-aliasing, and much more.") (license license:zlib)))) + +(define-public recastnavigation + ;; We follow master since there hasn't been a release since 1.5.1 in 2016. + (let ((commit "c5cbd53024c8a9d8d097a4371215e3342d2fdc87") + (revision "1")) + (package + (name "recastnavigation") + (version (git-version "1.5.1" revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/recastnavigation/recastnavigation") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "034bm47gc3r285w1pnvkhmm74zz99d204b1r865gisaiq4qfbza0")))) + (build-system cmake-build-system) + (arguments + `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON" + "-DRECASTNAVIGATION_DEMO=OFF" + "-DRECASTNAVIGATION_TESTS=ON" + "-DRECASTNAVIGATION_EXAMPLES=OFF"))) + (synopsis "Navigation system for games") + (description "Recast is state of the art navigation mesh +construction toolset for games. + +@itemize +@item It is automatic, which means that you can throw any level geometry + at it and you will get robust mesh out. +@item It is fast which means swift turnaround times for level designers. +@item It is open source so it comes with full source and you can + customize it to your heart's content. +@end itemize + +The Recast process starts with constructing a voxel mold from a level +geometry and then casting a navigation mesh over it. The process +consists of three steps, building the voxel mold, partitioning the mold +into simple regions, peeling off the regions as simple polygons. + +Recast is accompanied with Detour, path-finding and spatial reasoning +toolkit. You can use any navigation mesh with Detour, but of course the +data generated with Recast fits perfectly. + +Detour offers simple static navigation mesh which is suitable for many +simple cases, as well as tiled navigation mesh which allows you to plug +in and out pieces of the mesh. The tiled mesh allows you to create +systems where you stream new navigation data in and out as the player +progresses the level, or you may regenerate tiles as the world changes.") + (home-page "https://github.com/recastnavigation/recastnavigation") + (license license:zlib)))) |