X-Git-Url: http://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/71e21fb26dceef7a665b3b1c0dec7ebd92d8ec82..1024c8119c71ba3ec0122238e8d8254b08d29187:/gnu/packages/game-development.scm diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm index 76c06ecc72..67f6c55017 100644 --- a/gnu/packages/game-development.scm +++ b/gnu/packages/game-development.scm @@ -3,11 +3,12 @@ ;;; Copyright © 2015 Mark H Weaver ;;; Copyright © 2015 Ludovic Courtès ;;; Copyright © 2015 Alex Kost -;;; Copyright © 2015, 2016 David Thompson -;;; Copyright © 2016 Efraim Flashner -;;; Copyright © 2016 Kei Kebreau +;;; Copyright © 2015, 2016, 2017 David Thompson +;;; Copyright © 2016, 2017 Efraim Flashner +;;; Copyright © 2016, 2017 Kei Kebreau ;;; Copyright © 2016 Ricardo Wurmus ;;; Copyright © 2016 Julian Graham +;;; Copyright © 2017 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,14 +30,17 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) + #:use-module (guix utils) #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module (guix build-system python) #:use-module (gnu packages) + #:use-module (gnu packages boost) #:use-module (gnu packages curl) #:use-module (gnu packages databases) #:use-module (gnu packages documentation) #:use-module (gnu packages fontutils) + #:use-module (gnu packages freedesktop) #:use-module (gnu packages fribidi) #:use-module (gnu packages glib) #:use-module (gnu packages gnunet) @@ -48,7 +52,6 @@ #:use-module (gnu packages qt) #:use-module (gnu packages video) #:use-module (gnu packages compression) - #:use-module (gnu packages zip) #:use-module (gnu packages gl) #:use-module (gnu packages linux) #:use-module (gnu packages xorg) @@ -69,7 +72,7 @@ (define-public bullet (package (name "bullet") - (version "2.85.1") + (version "2.86.1") (source (origin (method url-fetch) (uri (string-append "https://github.com/bulletphysics/bullet3/" @@ -77,7 +80,7 @@ (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0qpd37ws0xlxwy55dg058a5b4yw2jxiz09yyc3lc0frpa05pq5bf")))) + "0nghzcl84p8di215p7xj0gy1hyy072hw2xk9cnmav9hv6bjb4n60")))) (build-system cmake-build-system) (arguments '(#:configure-flags (list (string-append @@ -95,6 +98,114 @@ is used in some video games and movies.") (license license:zlib))) +(define-public deutex + (package + (name "deutex") + (version "4.4.902") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/Doom-Utils/" name + "/archive/v" version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (sha256 + (base32 + "0rwz1yzgd539x4h25kzhar4q02xyxjwfrcpz4m8ixi312a82p7cn")))) + (build-system gnu-build-system) + (arguments + '(#:tests? #f ; no check target + #:phases + (modify-phases %standard-phases + ;; The provided configure script takes a restricted number of arguments. + (replace 'configure + (lambda* (#:key outputs #:allow-other-keys) + (zero? (system* "./configure" "--prefix" + (assoc-ref %outputs "out"))))) + ;; "make install" is broken for this package. + ;; Notably, the binaries overrwrite one another upon installation as + ;; they are all installed to the "bin" file in the output directory, + ;; and the manual page fails to install because the directory for the + ;; manual page is not created. + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref %outputs "out")) + (bin (string-append out "/bin")) + (share (string-append out "/share"))) + (install-file "deusf" bin) + (install-file "deutex" bin) + (install-file "deutex.6" (string-append share "/man/man6"))) + #t))))) + (home-page "https://github.com/Doom-Utils/deutex") + (synopsis "WAD file composer for Doom and related games") + (description + "DeuTex is a wad composer for Doom, Heretic, Hexen and Strife. It can be +used to extract the lumps of a wad and save them as individual files. +Conversely, it can also build a wad from separate files. When extracting a +lump to a file, it does not just copy the raw data, it converts it to an +appropriate format (such as PPM for graphics, Sun audio for samples, etc.). +Conversely, when it reads files for inclusion in pwads, it does the necessary +conversions (for example, from PPM to Doom picture format). In addition, +DeuTex has functions such as merging wads, etc.") + (license license:gpl2+))) + +(define-public grfcodec + (package + (name "grfcodec") + (version "6.0.6") + (source (origin + (method url-fetch) + (uri (string-append "http://binaries.openttd.org/extra/" + name "/" version "/" name "-" version + "-source.tar.xz")) + (sha256 + (base32 + "08admgnpqcsifpicbm56apgv360fxapqpbbsp10qyk8i22w1ivsk")))) + (build-system gnu-build-system) + (arguments + '(#:tests? #f ; no check target + #:phases + (modify-phases %standard-phases + (delete 'configure) ; no configure script + (replace 'install ; no install target + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (doc (string-append out "/share/doc")) + (man (string-append out "/share/man/man1"))) + (for-each (lambda (file) + (install-file file bin)) + '("grfcodec" "grfid" "grfstrip" "nforenum")) + (install-file "COPYING" doc) + (with-directory-excursion "docs" + (for-each (lambda (file) + (install-file (string-append file ".txt") doc)) + '("auto_correct" "commands" "grf" "grfcodec" "grftut" + "readme" "readme.rpn")) + (for-each (lambda (file) + (install-file file man)) + (find-files "." "\\.1")))) + #t))))) + (inputs + `(("boost" ,boost) + ("libpng" ,libpng) + ("zlib" ,zlib))) + (synopsis "GRF development tools") + (description + "The @dfn{Graphics Resource File} (GRF) development tools are a set of +tools for developing (New)GRFs. It includes a number of smaller programs, each +with a specific task: +@enumerate +@item @code{grfcodec} decodes and encodes GRF files for OpenTTD. +@item @code{grfid} extracts the so-called \"GRF ID\" from a GRF. +@item @code{grfstrip} strips all sprites from a GRF. +@item @code{nforenum} checks NFO code for errors, making corrections when +necessary. +@end enumerate") + (home-page "http://dev.openttdcoop.org/projects/grfcodec") + ;; GRFCodec, GRFID, and GRFStrip are exclusively under the GPL2. + ;; NFORenum is under the GPL2+. + ;; The MD5 implementation contained in GRFID is under the zlib license. + (license (list license:gpl2 license:gpl2+ license:zlib)))) + (define-public gzochi (package (name "gzochi") @@ -137,10 +248,139 @@ 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") + (version "0.4.4") + (source + (origin + (method url-fetch) + (uri (string-append "http://bundles.openttdcoop.org/nml/releases/" + version "/nml-" version ".tar.gz")) + (sha256 + (base32 + "0wk9ls5qyjwkra54rkj1gg94xbwzi7b84a5fh1ma1q7pbimi8rmg")))) + (build-system python-build-system) + (propagated-inputs + `(("python-pillow" ,python-pillow) + ("python-ply" ,python-ply))) + (home-page "http://dev.openttdcoop.org/projects/nml") + (synopsis "NML compiler") + (description + "@dfn{NewGRF Meta Language} (NML) is a python-based compiler, capable of +compiling NML files (along with their associated language, sound and graphic +files) into @file{.grf} and/or @file{.nfo} files.") + (license license:gpl2+))) + +(define-public python-sge-pygame + (package + (name "python-sge-pygame") + (version "1.5") + (source + (origin + (method url-fetch) + (uri (pypi-uri "sge-pygame" version)) + (sha256 + (base32 + "0g0n722md6nfayiqzadwf0dh821hzqv0alp4by0vjfwr1xzv49mc")))) + (build-system python-build-system) + (propagated-inputs + `(("python-pygame" ,python-pygame) + ("python-six" ,python-six) + ("python-uniseg" ,python-uniseg))) + (home-page "http://stellarengine.nongnu.org") + (synopsis "2D game engine for Python") + (description + "The SGE Game Engine (\"SGE\", pronounced like \"Sage\") is a +general-purpose 2D game engine. It takes care of several details fro you so +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 python2-sge-pygame + (package-with-python2 python-sge-pygame)) + +(define-public python-tmx + (package + (name "python-tmx") + (version "1.9.1") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://savannah/python-tmx/" + (version-major+minor version) "/tmx-" + version ".tar.gz")) + (sha256 + (base32 + "1is107sx3lr09dqjiyn10xqhyv5x54c2ryhys9mb9j3mxjbm227l")))) + (build-system python-build-system) + (propagated-inputs + `(("python-six" ,python-six))) + (home-page "http://python-tmx.nongnu.org") + (synopsis "Python library for the @code{Tiled} TMX format") + (description + "Python TMX reads and writes the @code{Tiled} TMX format in a simple way. +This is useful for map editors or generic level editors, and it's also useful +for using a map editor or generic level editor like Tiled to edit your game's +levels.") + (license (list license:asl2.0 + ;; Documentation (only available in the source tarball) is + ;; under the CC0 license. + license:cc0)))) + +(define-public python2-tmx + (let ((python2-tmx (package-with-python2 python-tmx))) + (package + (inherit python2-tmx) + (propagated-inputs + `(("python2-pathlib" ,python2-pathlib) + ,@(package-propagated-inputs python2-tmx)))))) + +(define-public python-xsge + (package + (name "python-xsge") + (version "2017.06.09") + (source (origin + (method url-fetch) + (uri (string-append "mirror://savannah/xsge/xsge/xsge-" + version ".tar.gz")) + (sha256 + (base32 + "1vy7c2y7ihvmggs93zgfv2h3049s384wid8a5snzrrba8bhbb89p")))) + (build-system python-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + ;; xSGE's setup.py script does not support one of the Python build + ;; system's default flags, "--single-version-externally-managed". + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (zero? + (system* "python" "setup.py" "install" + (string-append "--prefix=" (assoc-ref outputs "out")) + "--root=/"))))) + #:tests? #f)) ; no check target + (propagated-inputs + `(("python-sge-pygame" ,python-sge-pygame) + ("python-pygame" ,python-pygame) + ("python-six" ,python-six) + ("python-tmx" ,python-tmx))) + (home-page "http://xsge.nongnu.org") + (synopsis "Extensions for the SGE Game Engine") + (description + "xSGE is a collection of modules that make doing certain tasks with the SGE +Game Engine easier. In addition to SGE's conveniences, the user has access to a +GUI toolkit, lighting and physics frameworks and @code{Tiled} TMX format +support.") + (license license:gpl3+))) + +(define-public python2-xsge + (package-with-python2 python-xsge)) + (define-public tiled (package (name "tiled") - (version "0.17.0") + (version "1.0.1") (source (origin (method url-fetch) (uri (string-append "https://github.com/bjorn/tiled/archive/v" @@ -148,15 +388,24 @@ provide connectivity for client applications written in any language.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "0c9gykxmq0sk0yyfdq81g9psd922scqzn5asskjydj84d80f5z7p")))) + "1y75jmpcf2lv8s3g9v3ghnrwvs2fc4ni7nx74csaylg1g04cwlq7")))) (build-system gnu-build-system) - (inputs `(("qt" ,qt) - ("zlib" ,zlib))) + (inputs + `(("qtbase" ,qtbase) + ("qtsvg" ,qtsvg) + ("zlib" ,zlib))) + (native-inputs + `(("qttools" ,qttools))) (arguments '(#:phases (modify-phases %standard-phases (replace 'configure - (lambda* (#:key outputs #:allow-other-keys) + (lambda* (#:key inputs outputs #:allow-other-keys) + (substitute* "translations/translations.pro" + (("LRELEASE =.*") + (string-append "LRELEASE = " + (assoc-ref inputs "qttools") + "/bin/lrelease\n"))) (let ((out (assoc-ref outputs "out"))) (system* "qmake" (string-append "PREFIX=" out)))))))) @@ -204,7 +453,7 @@ clone.") ("libjpeg" ,libjpeg) ("libsndfile" ,libsndfile) ("openal" ,openal))) - (home-page "http://www.sfml-dev.org") + (home-page "https://www.sfml-dev.org") (synopsis "Simple and Fast Multimedia Library") (description "SFML provides a simple interface to the various computer components, @@ -256,7 +505,7 @@ sounds from presets such as \"explosion\" or \"powerup\".") (source (origin (method url-fetch) (uri (string-append - "http://icculus.org/physfs/downloads/physfs-" + "https://icculus.org/physfs/downloads/physfs-" version ".tar.bz2")) (file-name (string-append name "-" version ".tar.gz")) (sha256 @@ -269,7 +518,7 @@ sounds from presets such as \"explosion\" or \"powerup\".") `(("zlib" ,zlib))) (native-inputs `(("doxygen" ,doxygen))) - (home-page "http://icculus.org/physfs") + (home-page "https://icculus.org/physfs") (synopsis "File system abstraction library") (description "PhysicsFS is a library to provide abstract access to various archives. @@ -321,8 +570,9 @@ programming language.") (version "4.4.2") (source (origin (method url-fetch) - (uri (string-append "http://download.gna.org/allegro/allegro/" - version "/allegro-" version ".tar.gz")) + (uri (string-append "https://github.com/liballeg/allegro5/" + "releases/download/" version "/allegro-" + version ".tar.gz")) (sha256 (base32 "1p0ghkmpc4kwij1z9rzxfv7adnpy4ayi0ifahlns1bdzgmbyf88v")))) @@ -356,14 +606,18 @@ etc.") (define-public allegro (package (name "allegro") - (version "5.2.0") + (version "5.2.2.0") (source (origin (method url-fetch) - (uri (string-append "http://download.gna.org/allegro/allegro/" - version "/allegro-" version ".tar.gz")) + (uri (string-append "https://github.com/liballeg/allegro5/releases" + "/download/" version "/allegro-" + (if (equal? "0" (string-take-right version 1)) + (string-drop-right version 2) + version) + ".tar.gz")) (sha256 (base32 - "1mwzgzc4nb5k5zkbq7yrc6hg63yxq3wk69lmjag1h19x8b6njnmg")))) + "1z4lrrlmn471wb7vzbd9iw7g379vj0k964vy1s64hcvv5bhvk1g2")))) (build-system cmake-build-system) (arguments `(#:tests? #f)) ; there are no tests (inputs @@ -399,8 +653,12 @@ etc.") (version "5.0.11") (source (origin (method url-fetch) - (uri (string-append "http://download.gna.org/allegro/allegro/" - version "/allegro-" version ".tar.gz")) + (uri (string-append "https://github.com/liballeg/allegro5/releases" + "/download/" version "/allegro-" + (if (equal? "0" (string-take-right version 1)) + (string-drop-right version 2) + version) + ".tar.gz")) (sha256 (base32 "0cd51qrh97jrr0xdmnivqgwljpmizg8pixsgvc4blqqlaz4i9zj9")))))) @@ -408,18 +666,16 @@ etc.") (define-public aseprite (package (name "aseprite") - (version "1.1.1") - ;; The release tarball isn't good enough because it's missing some - ;; necessary code that is only in git submodules. + (version "1.1.7") ; After 1.1.7 the source is no longer distributed under the GPL. + ;; TODO: Unbundle third party software. (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/aseprite/aseprite.git") - (commit "v1.1.1") - (recursive? #t))) + (method url-fetch/zipbomb) + (uri (string-append "https://github.com/aseprite/aseprite" + "/releases/download/v" version + "/Aseprite-v" version "-Source.zip")) (sha256 (base32 - "1yr0l3bc68lyrffrzxgw98zznv8yz5ldl98lyvp6s5grny4s4jyk")))) + "1plss4i1lfxcznv9p0pip1bkhj7ipw7jlhsh5avd6dzw079l4nvv")))) (build-system cmake-build-system) (arguments '(#:configure-flags @@ -463,7 +719,7 @@ etc.") (description "Aseprite is a tool for creating 2D pixel art for video games. In addition to basic pixel editing features, Aseprite can assist in the creation of animations, tiled graphics, texture atlases, and more.") - (home-page "http://www.aseprite.org/") + (home-page "https://www.aseprite.org/") (license license:gpl2+))) (define-public qqwing @@ -526,18 +782,16 @@ interface (API).") (define-public python-pygame (package (name "python-pygame") - (version "1.9.1") + (version "1.9.3") (source (origin (method url-fetch) - (uri (string-append "http://pygame.org/ftp/pygame-" - version "release.tar.gz")) + (uri (pypi-uri "pygame" version)) (sha256 (base32 - "0cyl0ww4fjlf289pjxa53q4klyn55ajvkgymw0qrdgp4593raq52")))) + "1hlydiyygl444bq5m5g8n3jsxsgrdyxlm42ipmfbw36wkf0j243m")))) (build-system python-build-system) (arguments - `(#:python ,python-2 - #:tests? #f ; Tests require pygame to be installed first. + `(#:tests? #f ; Tests require pygame to be installed first. #:phases (modify-phases %standard-phases ;; Set the paths to the dependencies manually because @@ -553,6 +807,7 @@ interface (API).") (smpeg-ref (assoc-ref inputs "libsmpeg")) (png-ref (assoc-ref inputs "libpng")) (jpeg-ref (assoc-ref inputs "libjpeg")) + (freetype-ref (assoc-ref inputs "freetype")) (v4l-ref (assoc-ref inputs "v4l-utils")) (out-ref (assoc-ref outputs "out"))) (substitute* "Setup.in" @@ -582,19 +837,23 @@ interface (API).") (("JPEG = -ljpeg") (string-append "JPEG = -I" jpeg-ref "/include -L" jpeg-ref "/lib -ljpeg"))) + + (substitute* "Setup.in" + (("FREETYPE = -lfreetype") + (string-append "FREETYPE = -I" freetype-ref "/include/freetype2 -L" + freetype-ref "/lib -lfreetype"))) + (substitute* "Setup.in" (("^pypm") "#pypm")) - (substitute* "src/movie.c") ;; Create a path to a header file provided by v4l-utils. (system* "mkdir" "linux") (system* "ln" "--symbolic" (string-append v4l-ref "/include/libv4l1-videodev.h") "linux/videodev.h") (system* "ln" "--symbolic" "Setup.in" "Setup"))))))) - (native-inputs - `(("python-setuptools" ,python-setuptools))) (inputs - `(("sdl" ,sdl) + `(("freetype" ,freetype) + ("sdl" ,sdl) ("sdl-image" ,sdl-image) ("sdl-mixer" ,sdl-mixer) ("sdl-ttf" ,sdl-ttf) @@ -605,7 +864,7 @@ interface (API).") ("libsmpeg" ,libsmpeg) ("portmidi" ,portmidi) ("v4l-utils" ,v4l-utils))) - (home-page "http://www.pygame.org") + (home-page "https://www.pygame.org") (synopsis "SDL wrapper for Python") (description "Pygame is a set of Python modules designed for writing games. Pygame adds functionality on top of the excellent SDL library. This allows you @@ -621,3 +880,49 @@ to create fully featured games and multimedia programs in the python language.") license:psfl license:public-domain license:lgpl2.1+)))) + +(define-public python2-pygame + (package-with-python2 python-pygame)) + +(define-public grafx2 + (package + (name "grafx2") + (version "2.4") + (source (origin + (method url-fetch) + ;; XXX: There is no URL that contains the version. :( + (uri "http://pulkomandy.tk/projects/GrafX2/downloads/21") + (sha256 + (base32 + "0svsy6rqmdj11b400c242i2ixihyz0hds0dgicqz6g6dcgmcl62q")))) + (build-system gnu-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (delete 'configure) ; no configure script + (add-before 'build 'change-to-src-directory + (lambda _ + (chdir "src") + #t))) + #:make-flags + ;; SDL header files are referenced without the preceeding "SDL/". + (list (string-append "CFLAGS=-I" + (assoc-ref %build-inputs "sdl-union") + "/include/SDL") + (string-append "prefix=" + (assoc-ref %outputs "out"))) + #:tests? #f)) ; no check target + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("libpng" ,libpng) + ("lua" ,lua-5.1) + ("sdl-union" ,(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 +includes a very large number of tools and effects that make it particularly +suitable for pixel art, game graphics, and generally any detailed graphics +painted with a mouse.") + (home-page "http://pulkomandy.tk/projects/GrafX2") + (license license:gpl2))) ; GPLv2 only