diff options
Diffstat (limited to 'gnu/packages/game-development.scm')
-rw-r--r-- | gnu/packages/game-development.scm | 287 |
1 files changed, 118 insertions, 169 deletions
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm index 4d60ff60d1..394903ee2a 100644 --- a/gnu/packages/game-development.scm +++ b/gnu/packages/game-development.scm @@ -37,6 +37,7 @@ ;;; Copyright © 2025 宋文武 <iyzsong@envs.net> ;;; Copyright © 2025 Arnaud Lechevallier <arnaud.lechevallier@free.fr> ;;; Copyright © 2025 Vinicius Monego <monego@posteo.net> +;;; Copyright © 2025 Simen Endsjø <contact@simendsjo.me> ;;; ;;; This file is part of GNU Guix. ;;; @@ -504,47 +505,6 @@ sounds are not much more than some metadata (description and filename) and raw PCM data.") (license license:gpl2))) -(define-public gzochi - (package - (name "gzochi") - (version "0.13") - (source (origin - (method url-fetch) - (uri (string-append "mirror://savannah/gzochi/gzochi-" - version ".tar.gz")) - (sha256 - (base32 - "1vcvf04qqzs3q8kaild2x7qvkwc6bwzfsisb78147b8z747j7hj0")))) - (build-system gnu-build-system) - (arguments - '(#:phases (modify-phases %standard-phases - (add-before 'build 'no-Werror - (lambda _ - ;; Don't abort builds due to things like GLib - ;; deprecation warnings. - (substitute* (find-files "." "^Makefile\\.in$") - (("-Werror") "")) - #t))))) - (native-inputs (list pkg-config)) - (inputs (list bdb - glib - gmp - guile-3.0 - libmicrohttpd - ncurses - sdl - zlib)) - (home-page "https://www.nongnu.org/gzochi/") - (synopsis "Scalable middleware for multiplayer games") - (description - "gzochi is a framework for developing massively multiplayer online games. -A server container provides services to deployed games, which are written in -Guile Scheme, that abstract and simplify some of the most challenging and -error-prone aspects of online game development: Concurrency, data persistence, -and network communications. A very thin client library can be embedded to -provide connectivity for client applications written in any language.") - (license license:gpl3+))) - (define-public nml (package (name "nml") @@ -1005,7 +965,7 @@ complex and interesting levels.") ("pkg-config" ,pkg-config) ("texinfo" ,texinfo))) (inputs - `(("guile-sdl2" ,guile3.0-sdl2) + `(("guile-sdl2" ,guile-sdl2) ("guile" ,guile-3.0) ("pango" ,pango) ("sdl2" ,sdl2))) @@ -1490,6 +1450,10 @@ It offers the following features: (base32 "08ddhywdy2qg17m592ng3yr0p1ih96irg8wg729g75hsxxq9ipks")))) (build-system gnu-build-system) + (arguments + `(#:configure-flags + ;; Disable added pointer type checks (quesoglc no longer maintained) + '("CFLAGS=-g -O2 -Wno-error=incompatible-pointer-types"))) (native-inputs (list pkg-config)) (inputs (list fontconfig freeglut fribidi glew)) (home-page "https://quesoglc.sourceforge.net") @@ -1573,38 +1537,40 @@ and multimedia programs in the Python language.") (define-public python-pygame-menu (package (name "python-pygame-menu") - (version "4.5.1") + (version "4.5.4") (source ;; Tests not included in release. (origin (method git-fetch) (uri (git-reference - (url "https://github.com/ppizarror/pygame-menu") - (commit version))) + (url "https://github.com/ppizarror/pygame-menu") + (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 - "0xd5d6nfkd5bp2zfq77yglp6mz043w28zprfz7savgmph5kvdnfh")))) + (base32 "1a474rvjkm9d45h0bhgaf9h21r3lcgqd27686fav8601395jgwrg")))) (build-system pyproject-build-system) (arguments - (list #:phases - #~(modify-phases %standard-phases - (add-before 'check 'prepare-test-environment - (lambda _ - (setenv "HOME" (getcwd)))) - (add-before 'check 'skip-certain-tests - (lambda _ - (substitute* "test/test_font.py" - (("test_font_argument") "skip_test_font_argument") - (("test_system_load") "skip_test_system_load")) - (substitute* "test/test_baseimage.py" - ;; Tuples differ: (111, 110) != (110, 109) - (("test_invalid_image") "skip_test_invalid_image") - (("test_scale") "skip_test_scale"))))))) - (propagated-inputs (list python-pygame python-pyperclip - python-typing-extensions)) - (native-inputs (list python-nose2 python-setuptools python-wheel)) + (list + #:test-flags + ;; AssertionError: Tuples differ: (111, 110) != (110, 109) + #~(list "--deselect=test/test_baseimage.py::BaseImageTest::test_invalid_image" + ;; IndexError: list index out of range + "--deselect=test/test_font.py::FontTest::test_font_argument" + ;;IndexError: pop from empty list + "--deselect=test/test_font.py::FontTest::test_system_load") + #:phases + #~(modify-phases %standard-phases + (add-before 'check 'pre-check + (lambda _ + (setenv "HOME" "/tmp")))))) + (native-inputs + (list python-pytest + python-setuptools)) + (propagated-inputs + (list python-pygame + python-pyperclip + python-typing-extensions)) (home-page "https://pygame-menu.readthedocs.io") (synopsis "Menu for pygame") (description @@ -1655,7 +1621,7 @@ color switches, and many more, with multiple options to customize.") (inputs (list (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))) (native-inputs - (list python-cython)) + (list python-cython-0)) (home-page "https://www.renpy.org/") (synopsis "Reimplementation of the Pygame API using SDL2") (description "Pygame_SDL2 reimplements the Pygame API using SDL2, @@ -1778,6 +1744,13 @@ bugfixes and enhancements, and a new governance model.") (search-input-file (or native-inputs inputs) "/bin/cython")) (setenv "RENPY_DEPS_INSTALL" (string-join (map cdr inputs) ":")))) + (add-before 'build 'relax-gcc-14-strictness + (lambda _ + (setenv "CFLAGS" (string-join + (list "-g" "-O2" + "-Wno-error=incompatible-pointer-types" + "-Wno-error=implicit-function-declaration") + " ")))) (replace 'build (lambda* (#:key inputs outputs #:allow-other-keys #:rest args) ;; The "module" subdirectory contains a python (really cython) @@ -1804,9 +1777,9 @@ bugfixes and enhancements, and a new governance model.") (string-append out site "/renpy")) (delete-file-recursively (string-append out site "/renpy/common")))))))) - (native-inputs (list python-cython)) + (native-inputs (list python-cython-0)) (inputs - (list ffmpeg + (list ffmpeg-6 freetype fribidi glew @@ -2417,7 +2390,7 @@ scripted in a Python-like language.") (define-public godot (package (name "godot") - (version "4.4.1") + (version "4.5") (source (origin (method git-fetch) (uri (git-reference @@ -2426,7 +2399,10 @@ scripted in a Python-like language.") (file-name (git-file-name name version)) (sha256 (base32 - "0fdq69jisrvihmdir2pg6wf4mfqgqg3c0szc58mgci2lqlm4l684")) + "0s9ymgy9cwnk4v35qpn9fm993pn64h1i5k9khpd7mqs6023hl8i4")) + ;; TODO: Remove this patch on next update as it was merged post + ;; 4.5 release. + (patches (search-patches "godot-libjpeg-turbo-unbundle.patch")) (modules '((guix build utils) (ice-9 ftw) (srfi srfi-1))) @@ -2438,6 +2414,7 @@ scripted in a Python-like language.") (with-directory-excursion "thirdparty" (let* ((preserved-files '("README.md" + "accesskit" "amd-fsr" "amd-fsr2" "assimp" @@ -2459,6 +2436,9 @@ scripted in a Python-like language.") ;; which is no longer in the glslang output ;; after the most recent update. "glslang" + ;; This is part of the simdjson package though + ;; modified by Godot. + "grisu2" "jolt_physics" "jpeg-compressor" "libktx" @@ -2477,6 +2457,7 @@ scripted in a Python-like language.") "pvrtccompressor" "recastnavigation" "rvo2" + "smaa" "spirv-reflect" "squish" "stb_rect_pack" @@ -2484,7 +2465,7 @@ scripted in a Python-like language.") "tinyexr" "ufbx" "vhacd" - "volk" + ;; Godot uses a specific (patched) version. "vulkan" "xatlas"))) (for-each delete-file-recursively @@ -2495,9 +2476,6 @@ scripted in a Python-like language.") (arguments (list #:scons-flags #~`("platform=linuxbsd" "target=editor" "production=yes" - ;; XXX: There may be advantages to enabling volk, - ;; requiring unbundling and patching to use our input. - "use_volk=no" ;; Avoid using many of the bundled libs. ;; Note: These options can be found in the SConstruct file. "builtin_brotli=no" @@ -2510,6 +2488,7 @@ scripted in a Python-like language.") "builtin_graphite=no" "builtin_harfbuzz=no" "builtin_icu4c=no" + "builtin_libjpeg_turbo=no" "builtin_libogg=no" "builtin_libpng=no" "builtin_libtheora=no" @@ -2518,6 +2497,7 @@ scripted in a Python-like language.") "builtin_mbedtls=no" "builtin_pcre2=no" "builtin_pcre2_with_jit=no" + "builtin_sdl=no" "builtin_wslay=no" "builtin_zlib=no" "builtin_zstd=no") @@ -2539,7 +2519,6 @@ scripted in a Python-like language.") "drivers/pulseaudio/pulse-so_wrap.c" "platform/linuxbsd/dbus-so_wrap.c" "platform/linuxbsd/fontconfig-so_wrap.c" - "platform/linuxbsd/libudev-so_wrap.c" "platform/linuxbsd/speechd-so_wrap.c" "platform/linuxbsd/wayland/dynwrappers/libdecor-so_wrap.c" "platform/linuxbsd/wayland/dynwrappers/wayland-client-core-so_wrap.c" @@ -2553,14 +2532,11 @@ scripted in a Python-like language.") "platform/linuxbsd/x11/dynwrappers/xlib-so_wrap.c" "platform/linuxbsd/x11/dynwrappers/xrandr-so_wrap.c" "platform/linuxbsd/x11/dynwrappers/xrender-so_wrap.c" - "platform/linuxbsd/xkbcommon-so_wrap.c" - "thirdparty/volk/volk.c" - "thirdparty/volk/volk.c")) + "platform/linuxbsd/xkbcommon-so_wrap.c")) (libs '("libasound.so.2" "libpulse.so.0" "libdbus-1.so.3" "libfontconfig.so.1" - "libudev.so.1" "libspeechd.so.2" "libdecor-0.so.0" "libwayland-client.so.0" @@ -2574,9 +2550,7 @@ scripted in a Python-like language.") "libX11.so.6" "libXrandr.so.2" "libXrender.so.1" - "libxkbcommon.so.0" - "libvulkan.so.1" - "libvulkan.so"))) + "libxkbcommon.so.0"))) (for-each (lambda (file lib) (substitute* file (((string-append "dlopen\\(\"" lib "\"")) @@ -2616,7 +2590,14 @@ scripted in a Python-like language.") #$(this-package-input "wayland-protocols") "/share/wayland-protocols")) (("#thirdparty/wayland") (string-append - #$(this-package-input "wayland") "/share/wayland"))))) + #$(this-package-input "wayland") "/share/wayland"))))) + (add-after 'unbundle-wayland 'unbundle-volk + (lambda _ + (let ((volk-dir "thirdparty/volk")) + (mkdir-p volk-dir) + (copy-recursively (string-append #$(this-package-input "vulkan-volk") + "/include") + volk-dir)))) (replace 'install (lambda* (#:key inputs #:allow-other-keys) (let ((zenity (search-input-file inputs "bin/zenity"))) @@ -2666,6 +2647,7 @@ scripted in a Python-like language.") harfbuzz icu4c libdecor + libjpeg-turbo-3 libtheora libvorbis libvpx @@ -2682,8 +2664,9 @@ scripted in a Python-like language.") opusfile pcre2 pulseaudio + sdl3 speech-dispatcher - vulkan-loader + vulkan-volk wayland wayland-protocols wslay @@ -3475,92 +3458,6 @@ developers providing an advanced true color console, input, and lots of other utilities frequently used in roguelikes.") (license license:bsd-3))) -(define-public warsow-qfusion - ;; As of 2020-04-09, the latest stable version 2.1.0 is deprecated. - ;; The 2.5 beta as published on the homepage is commit - ;; c4de15df559410aff0ca6643724e24cddb0ecbbd - (let ((commit "c4de15df559410aff0ca6643724e24cddb0ecbbd")) - (package - (name "warsow-qfusion") - (version (git-version "2.5" "1" commit)) ; 2.5-beta - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/Warsow/qfusion/") - (commit commit) - (recursive? #t))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "0xv2yycr43p3xmq7lm6j6zb3cpcr6w00x7qg918faq0mw9j7v48g")) - ;; Issue reported here: https://github.com/Warsow/qfusion/issues/46 - (patches (search-patches "warsow-qfusion-fix-bool-return-type.patch")) - (modules '((guix build utils))) - (snippet '(begin - (delete-file-recursively "platforms") - (delete-file-recursively "debian") - (delete-file-recursively "libsrcs") - #t)))) - (build-system cmake-build-system) - (arguments - `(#:tests? #f ; No tests. - #:configure-flags '("-DQFUSION_GAME=Warsow") - #:modules - ((guix build utils) - (guix build cmake-build-system) - (ice-9 match)) - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'change-to-build-dir - (lambda _ - (chdir "source") - #t)) - (add-after 'install 'really-install - (lambda* (#:key outputs system #:allow-other-keys) - (let ((arch (match system - ("x86_64-linux" "x86_64") - ("i686-linux" "i386"))) - (out (assoc-ref outputs "out"))) - (install-file (string-append "../source/build/basewsw/libgame_" - arch ".so") - (string-append out "/lib/")) - (install-file (string-append "../source/build/libui_" arch ".so") - (string-append out "/lib/")) - (for-each - (lambda (file) - (install-file file (string-append out "/bin/"))) - (append (find-files "../source/build" "warsow") - (find-files "../source/build" "wsw_server.")))) - #t))))) - (inputs - `(("alsa-lib" ,alsa-lib) - ("curl" ,curl) - ("freetype" ,freetype) - ("ffmpeg" ,ffmpeg-4) - ("libjpeg" ,libjpeg-turbo) - ("libogg" ,libogg) - ("libpng" ,libpng) - ("libtheora" ,libtheora) - ("libvorbis" ,libvorbis) - ("mesa" ,mesa) - ("openal" ,openal) - ("pulseaudio" ,pulseaudio) - ("qtbase" ,qtbase-5) - ("qtdeclarative-5" ,qtdeclarative-5) - ("sdl2" ,sdl2) - ("uuid.h" ,util-linux "lib") - ("zlib" ,zlib))) - (native-inputs - (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") - (description - "This package contains the game engine of Warsow, a first-person -shooter video game. The engine is based on qfusion, the id Tech 2 derived -game engine. id Tech 2 is the engine originally behind Quake 2.") - (license license:gpl2+)))) - (define-public dhewm3 (package (name "dhewm3") @@ -3777,6 +3674,8 @@ progresses the level, or you may regenerate tiles as the world changes.") (add-after 'install 'install-api-files ;; For generating bindings. (lambda _ + (install-file (string-append #$source "/src/rcamera.h") + (string-append #$output "/include")) (copy-recursively (string-append #$source "/parser/output") (string-append #$output "/share/raylib"))))))) @@ -3790,6 +3689,56 @@ progresses the level, or you may regenerate tiles as the world changes.") (home-page "https://www.raylib.com/") (license license:zlib))) +(define-public raygui + (package + (name "raygui") + (version "4.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/raysan5/raygui/") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "13s606dxnypg6n2pbn13d2d407pxkb7bxqbk5swlfvrcjs2w5afn")))) + (build-system gnu-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (delete 'bootstrap) + (add-after 'unpack 'use-raygui-header + (lambda _ + (rename-file "src/raygui.h" "src/raygui.c"))) + (delete 'configure) + (replace 'build + (lambda _ + (invoke #$(cc-for-target) + "-o" "libraygui.so" + "src/raygui.c" + "-DRAYGUI_IMPLEMENTATION" + "-shared" "-fpic" + "-lraylib" + "-lGL" "-lm" "-lpthread" "-ldl" "-lrt" "-lX11"))) + (delete 'check) + (replace 'install + (lambda _ + (let ((src (string-append #$source "/src")) + (inc (string-append #$output "/include")) + (lib (string-append #$output "/lib"))) + (install-file (string-append src "/raygui.h") inc) + (install-file "libraygui.so" lib))))))) + (inputs (list mesa raylib)) + (synopsis "Simple and easy-to-use immediate-mode gui library") + (description "Originally inspired by Unity IMGUI (immediate mode GUI API). + +Designed as an auxiliary module for raylib to create simple GUI interfaces using +raylib graphic style (simple colors, plain rectangular shapes, wide borders...) +but it can be adapted to other engines/frameworks.") + (home-page "https://www.raylib.com") + (license license:zlib))) + (define-public tic80 ;; Use an unreleased version for 'PREFER_SYSTEM_LIBRARIES'. (let ((commit "fcfd7c9862e9157512bcab53affecd592b320131") |