summaryrefslogtreecommitdiff
path: root/gnu/packages/game-development.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/game-development.scm')
-rw-r--r--gnu/packages/game-development.scm287
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")