Merge branch 'master' into core-updates
[jackhill/guix/guix.git] / gnu / packages / game-development.scm
index e83294d..67f6c55 100644 (file)
@@ -3,11 +3,12 @@
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
-;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
+;;; Copyright © 2015, 2016, 2017 David Thompson <davet@gnu.org>
+;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017 Kei Kebreau <kei@openmailbox.org>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Julian Graham <joolean@gmail.com>
+;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #: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
 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,9 +837,14 @@ 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"
@@ -592,7 +852,8 @@ interface (API).")
                         "linux/videodev.h")
                (system* "ln" "--symbolic" "Setup.in" "Setup")))))))
     (inputs
-     `(("sdl" ,sdl)
+     `(("freetype" ,freetype)
+       ("sdl" ,sdl)
        ("sdl-image" ,sdl-image)
        ("sdl-mixer" ,sdl-mixer)
        ("sdl-ttf" ,sdl-ttf)
@@ -603,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
@@ -619,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