You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

11669 lines
466 KiB

;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 John Darrington <jmd@gnu.org>
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2014, 2016 David Thompson <dthompson2@worcester.edu>
;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Eric Bavier <bavier@posteo.net>
;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
;;; Copyright © 2014 Sylvain Beucler <beuc@beuc.net>
;;; Copyright © 2014, 2015, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
;;; Copyright © 2014, 2015, 2019 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
;;; Copyright © 2015, 2017, 2018 Christopher Lemmer Webber <cwebber@dustycloud.org>
;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015, 2016, 2017 Alex Kost <alezost@gmail.com>
;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
;;; Copyright © 2016, 2017 Rodger Fox <thylakoid@openmailbox.org>
;;; Copyright © 2016, 2017, 2018 Nikita <nikita@n0.is>
;;; Copyright © 2016 Albin Söderqvist <albin@fripost.org>
;;; Copyright © 2016, 2017, 2018, 2019 Kei Kebreau <kkebreau@posteo.net>
;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2016 Steve Webber <webber.sl@gmail.com>
;;; Copyright © 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@hyperbola.info>
;;; Copyright © 2017, 2018, 2020 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2017, 2019 nee <nee-git@hidamari.blue>
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com>
;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
;;; Copyright © 2017, 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2018 okapi <okapi@firemail.cc>
;;; Copyright © 2018 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
;;; Copyright © 2018 Madalin Ionel-Patrascu <madalinionel.patrascu@mdc-berlin.de>
;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net>
;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
;;; Copyright © 2019, 2020 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2019, 2020 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2019 Jesse Gibbons <jgibbons2357+guix@gmail.com>
;;; Copyright © 2019 Dan Frumin <dfrumin@cs.ru.nl>
;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
;;; Copyright © 2019, 2020 Timotej Lazar <timotej.lazar@araneo.si>
;;; Copyright © 2019 Josh Holland <josh@inv.alid.pw>
;;; Copyright © 2017, 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;; Copyright © 2020 Alberto Eleuterio Flores Guerrero <barbanegra+guix@posteo.mx>
;;; Copyright © 2020 Naga Malleswari <nagamalli@riseup.net>
;;; Copyright © 2020 Vitaliy Shatrov <D0dyBo0D0dyBo0@protonmail.com>
;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages games)
#:use-module (ice-9 match)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix utils)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix svn-download)
#:use-module (guix gexp)
#:use-module (gnu packages)
#:use-module (gnu packages adns)
#:use-module (gnu packages algebra)
#:use-module (gnu packages autotools)
#:use-module (gnu packages backup)
#:use-module (gnu packages base)
#:use-module (gnu packages build-tools)
#:use-module (gnu packages admin)
#:use-module (gnu packages audio)
#:use-module (gnu packages avahi)
#:use-module (gnu packages assembly)
#:use-module (gnu packages bash)
#:use-module (gnu packages bison)
#:use-module (gnu packages boost)
#:use-module (gnu packages check)
#:use-module (gnu packages cmake)
#:use-module (gnu packages compression)
#:use-module (gnu packages curl)
#:use-module (gnu packages crypto)
#:use-module (gnu packages cyrus-sasl)
#:use-module (gnu packages documentation)
#:use-module (gnu packages docbook)
#:use-module (gnu packages emulators)
#:use-module (gnu packages flex)
#:use-module (gnu packages fltk)
#:use-module (gnu packages fonts)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages freedesktop)
#:use-module (gnu packages fribidi)
#:use-module (gnu packages game-development)
#:use-module (gnu packages gcc)
#:use-module (gnu packages gettext)
#:use-module (gnu packages ghostscript)
#:use-module (gnu packages gimp)
#:use-module (gnu packages gl)
#:use-module (gnu packages glib)
#:use-module (gnu packages gnome)
#:use-module (gnu packages gnupg)
#:use-module (gnu packages gnuzilla)
#:use-module (gnu packages gperf)
#:use-module (gnu packages graphics)
#:use-module (gnu packages gsasl)
#:use-module (gnu packages gstreamer)
#:use-module (gnu packages gtk)
#:use-module (gnu packages guile)
#:use-module (gnu packages haskell)
#:use-module (gnu packages haskell-crypto)
#:use-module (gnu packages haskell-xyz)
#:use-module (gnu packages icu4c)
#:use-module (gnu packages image)
#:use-module (gnu packages imagemagick)
#:use-module (gnu packages kde)
#:use-module (gnu packages kde-frameworks)
#:use-module (gnu packages less)
#:use-module (gnu packages libcanberra)
#:use-module (gnu packages libedit)
#:use-module (gnu packages libunwind)
#:use-module (gnu packages linux)
#:use-module (gnu packages llvm)
#:use-module (gnu packages lua)
#:use-module (gnu packages man)
#:use-module (gnu packages maths)
#:use-module (gnu packages messaging)
#:use-module (gnu packages mp3)
#:use-module (gnu packages music)
#:use-module (gnu packages multiprecision)
#:use-module (gnu packages ncurses)
#:use-module (gnu packages netpbm)
#:use-module (gnu packages networking)
#:use-module (gnu packages ocaml)
#:use-module (gnu packages opencl)
#:use-module (gnu packages pcre)
#:use-module (gnu packages perl)
#:use-module (gnu packages perl-check)
#:use-module (gnu packages perl-compression)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages protobuf)
#:use-module (gnu packages pulseaudio)
#:use-module (gnu packages python)
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages qt)
#:use-module (gnu packages readline)
#:use-module (gnu packages ruby)
#:use-module (gnu packages shells)
#:use-module (gnu packages sdl)
#:use-module (gnu packages serialization)
#:use-module (gnu packages sqlite)
#:use-module (gnu packages squirrel)
#:use-module (gnu packages swig)
#:use-module (gnu packages tcl)
#:use-module (gnu packages terminals)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages textutils)
#:use-module (gnu packages tls)
#:use-module (gnu packages upnp)
#:use-module (gnu packages video)
#:use-module (gnu packages vulkan)
#:use-module (gnu packages web)
#:use-module (gnu packages wget)
#:use-module (gnu packages wxwidgets)
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages xorg)
#:use-module (gnu packages xiph)
#:use-module (gnu packages xml)
#:use-module (guix build-system copy)
#:use-module (guix build-system cmake)
#:use-module (guix build-system glib-or-gtk)
#:use-module (guix build-system gnu)
#:use-module (guix build-system go)
#:use-module (guix build-system meson)
#:use-module (guix build-system perl)
#:use-module (guix build-system python)
#:use-module (guix build-system qt)
#:use-module (guix build-system scons)
#:use-module (guix build-system trivial)
#:use-module ((srfi srfi-1) #:hide (zip))
#:use-module (srfi srfi-26))
(define-public abe
(package
(name "abe")
(version "1.1")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/abe/abe/abe-" version
"/abe-" version ".tar.gz"))
(sha256
(base32 "1xvpnq1y6y48fn3pvn2lk0h1ilmalv7nb7awpid1g4jcq1sfmi6z"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags
(list (string-append "--with-data-dir="
(assoc-ref %outputs "out")
"/share/abe"))
#:phases
(modify-phases %standard-phases
(replace 'bootstrap
(lambda _ (invoke "sh" "autogen.sh")))
(add-before 'build 'set-SDL
;; Set correct environment for SDL.
(lambda* (#:key inputs #:allow-other-keys)
(setenv "CPATH"
(string-append
(assoc-ref inputs "sdl") "/include/SDL:"
(or (getenv "CPATH") "")))
#t))
(add-after 'install 'finalize-install
(lambda* (#:key outputs #:allow-other-keys)
(let ((share (string-append (assoc-ref outputs "out") "/share")))
;; Installation script does not copy game data files.
(let ((data (string-append share "/abe")))
(for-each (lambda (dir)
(let ((target (string-append data "/" dir)))
(mkdir-p target)
(copy-recursively dir target)))
'("images" "maps" "sounds")))
;; Create desktop file.
(let ((apps (string-append share "/applications")))
(mkdir-p apps)
(make-desktop-entry-file
(string-append apps "/abe.desktop")
#:name "Abe's Amazing Adventure"
#:exec ,name
#:categories '("AdventureGame" "Game")
#:keywords
'("side-scrolling" "adventure" "pyramid" "singleplayer")
#:comment
'(("de" "Ein sich seitwärts bewegendes Abenteuerspiel")
(#f "Side-scrolling game")))))
#t)))))
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)))
(inputs
`(("libxi" ,libxi)
("libxmu" ,libxmu)
("libxt" ,libxt)
("sdl" ,(sdl-union (list sdl sdl-mixer)))))
(home-page "http://abe.sourceforge.net")
(synopsis "Scrolling, platform-jumping, ancient pyramid exploring game")
(description
"Abe's Amazing Adventure is a scrolling,
platform-jumping, key-collecting, ancient pyramid exploring game, vaguely in
the style of similar games for the Commodore+4.")
(license license:gpl2+)))
;; Data package for adanaxisgpl.
(define adanaxis-mush
(let ((version "1.1.0"))
(origin
(method url-fetch)
(uri (string-append "http://www.mushware.com/files/adanaxis-mush-"
version ".tar.gz"))
(sha256
(base32 "0mk9ibis5nkdcalcg1lkgnsdxxbw4g5w2i3icjzy667hqirsng03")))))
(define-public adanaxisgpl
(package
(name "adanaxisgpl")
(version "1.2.5")
(source
(origin
(method url-fetch)
(uri (string-append "http://www.mushware.com/files/adanaxisgpl-"
version ".tar.gz"))
(sha256
(base32 "0jkn637jaabvlhd6hpvzb57vvjph94l6fbf7qxbjlw9zpr19dw1f"))
(modules '((guix build utils)))
(snippet
'(begin
;; Necessary for building with gcc >=4.7.
(substitute* "src/Mushcore/MushcoreSingleton.h"
(("SingletonPtrSet\\(new SingletonType\\);")
"MushcoreSingleton::SingletonPtrSet(new SingletonType);"))
;; Avoid an "invalid conversion from const char* to char*" error.
(substitute* "src/Platform/X11/PlatformMiscUtils.cpp"
(("char \\*end, \\*result;")
(string-append "const char *end;"
"\n"
"char *result;")))
#t))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; no check target
#:phases
(modify-phases %standard-phases
(add-after 'install 'install-data
(lambda* (#:key inputs outputs #:allow-other-keys)
(let ((data (assoc-ref inputs "adanaxis-mush"))
(share (string-append (assoc-ref outputs "out")
"/share/" ,name "-" ,version)))
(mkdir-p share)
(invoke "tar" "xvf" data "-C" share)))))))
(native-inputs
`(("adanaxis-mush" ,adanaxis-mush))) ; game data
(inputs
`(("expat" ,expat)
("freeglut" ,freeglut)
("glu" ,glu)
("libjpeg" ,libjpeg-turbo)
("libogg" ,libogg)
("libtiff" ,libtiff)
("libvorbis" ,libvorbis)
("libx11" ,libx11)
("libxext" ,libxext)
("pcre" ,pcre)
("sdl" ,sdl)
("sdl-mixer" ,sdl-mixer)))
(home-page "https://www.mushware.com")
(synopsis "Action game in four spatial dimensions")
(description
"Adanaxis is a fast-moving first person shooter set in deep space, where
the fundamentals of space itself are changed. By adding another dimension to
space this game provides an environment with movement in four directions and
six planes of rotation. Initially the game explains the 4D control system via
a graphical sequence, before moving on to 30 levels of gameplay with numerous
enemy, ally, weapon and mission types. Features include simulated 4D texturing,
mouse and joystick control, and original music.")
(license license:gpl2)))
(define-public alex4
(package
(name "alex4")
(version "1.2.1")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/carstene1ns/alex4")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "098wy72mh4lsvq3gm0rhamjssf9l1hp6hhkpzrv7klpb97cwwc3h"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; no check target
#:make-flags
(list "CC=gcc"
"CFLAGS=-D_FILE_OFFSET_BITS=64"
(string-append "PREFIX=" (assoc-ref %outputs "out")))
#:phases
(modify-phases %standard-phases
(delete 'configure) ; no configure script
(add-after 'install 'install-data
(lambda* (#:key outputs #:allow-other-keys)
(let ((share (string-append (assoc-ref outputs "out")
"/share/" ,name)))
(install-file "alex4.ini" share)
#t))))))
(inputs
`(("allegro" ,allegro-4)
("dumb" ,dumb-allegro4)))
(home-page "http://allegator.sourceforge.net/")
(synopsis "Retro platform game")
(description
"Guide Alex the Allegator through the jungle in order to save his
girlfriend Lola from evil humans who want to make a pair of shoes out of her.
Plenty of classic platforming in four nice colors guaranteed!
The game includes a built-in editor so you can design and share your own maps.")
(license license:gpl2+)))
(define-public armagetronad
(package
(name "armagetronad")
(version "0.2.8.3.5")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/armagetronad/stable/"
version "/armagetronad-" version ".src.tar.gz"))
(sha256
(base32
"1z266haq22n5b0733h7qsg1rpzhz8lvm82f7wd06r008iiar7jdl"))))
(build-system gnu-build-system)
(inputs
`(("libxml2" ,libxml2)
("sdl" ,sdl)
("sdl-image" ,sdl-image)
("freeglut" ,freeglut)
("libpng" ,libpng)
("libjpeg-turbo" ,libjpeg-turbo)))
(home-page "http://www.armagetronad.org")
(synopsis "Tron clone in 3D")
(description "Armagetron Advanced is a multiplayer game in 3d that
attempts to emulate and expand on the lightcycle sequence from the movie Tron.
It's an old school arcade game slung into the 21st century. Highlights
include a customizable playing arena, HUD, unique graphics, and AI bots. For
the more advanced player there are new game modes and a wide variety of
physics settings to tweak as well.")
(license license:gpl2+)))
(define-public astromenace
(package
(name "astromenace")
(version "1.4.1")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/viewizard/astromenace")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1ad6l887jxqv8xspwc2rvy8ym9sdlmkqdqhsh0pi076kjarxsyws"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f ;no test
#:configure-flags '("-DDATADIR=share/astromenace")
#:phases
(modify-phases %standard-phases
(replace 'install
;; Upstream provides no install phase.
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(share (string-append out "/share"))
(apps (string-append share "/applications"))
(data (string-append share "/astromenace"))
(icons (string-append share "/icons/hicolor/64x64/apps")))
(install-file "astromenace" bin)
(install-file "gamedata.vfs" data)
(let ((source (assoc-ref inputs "source")))
(with-directory-excursion (string-append source "/share")
(install-file "astromenace.desktop" apps)
(mkdir-p icons)
(copy-file "astromenace_64.png"
(string-append icons "/astromenace.png")))))
#t)))))
(inputs
`(("freealut" ,freealut)
("freetype" ,freetype)
("glu" ,glu)
("libogg" ,libogg)
("libvorbis" ,libvorbis)
("openal" ,openal)
("sdl2" ,sdl2)))
(home-page "https://www.viewizard.com/")
(synopsis "3D space shooter with spaceship upgrade possibilities")
(description
"Space is a vast area, an unbounded territory where it seems there is
a room for everybody, but reversal of fortune put things differently. The
hordes of hostile creatures crawled out from the dark corners of the universe,
craving to conquer your homeland. Their force is compelling, their legions
are interminable. However, humans didn't give up without a final showdown and
put their best pilot to fight back. These malicious invaders chose the wrong
galaxy to conquer and you are to prove it! Go ahead and make alien aggressors
regret their insolence.")
;; Game is released under GPL3+ terms. Artwork is subject to CC
;; BY-SA 4.0, and fonts to OFL1.1.
(license (list license:gpl3+ license:cc-by-sa4.0 license:silofl1.1))))
(define-public bastet
(package
(name "bastet")
(version "0.43.2")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/fph/bastet")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32 "09kamxapm9jw9przpsgjfg33n9k94bccv65w95dakj0br33a75wn"))
(patches
(search-patches "bastet-change-source-of-unordered_set.patch"))))
(build-system gnu-build-system)
(arguments
`(#:make-flags
(list (string-append "CXXFLAGS=-I"
(assoc-ref %build-inputs "boost") "/include"))
#:phases
(modify-phases %standard-phases
(delete 'configure) ; no configure script
(replace 'check
;; The 'Test' target builds the tests, but doesn't actually run them.
(lambda* (#:key make-flags #:allow-other-keys)
(apply invoke "make" "Test" make-flags)
(setenv "HOME" ".")
(invoke "./Test")))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(share (string-append out "/share"))
(hicolor (string-append share "/icons/hicolor")))
(install-file "bastet"
(string-append out "/bin"))
(install-file "bastet.desktop"
(string-append share "/applications"))
(install-file "bastet.svg"
(string-append hicolor "/scalable/apps"))
(install-file "bastet.appdata.xml"
(string-append share "/appdata"))
(install-file "bastet.6"
(string-append out "/share/man/man6"))
#t))))))
(native-inputs
`(("hicolor-icon-theme" ,hicolor-icon-theme)))
(inputs
`(("boost" ,boost)
("ncurses" ,ncurses)))
(home-page "https://fph.altervista.org/prog/bastet.html")
(synopsis "Antagonistic Tetris-style falling brick game for text terminals")
(description
"Bastet (short for Bastard Tetris) is a simple ncurses-based falling brick
game. Unlike normal Tetris, Bastet does not choose the next brick at random.
Instead, it uses a special algorithm to choose the worst brick possible.
Playing bastet can be a painful experience, especially if you usually make
canyons and wait for the long I-shaped block to clear four rows at a time.")
(license license:gpl3+)))
(define-public blobwars
(package
(name "blobwars")
(version "2.00")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/blobwars/"
"blobwars-" version ".tar.gz"))
(sha256
(base32 "16aagvkx6azf75gm5kaa94bh5npydvhqp3fvdqyfsanzdjgjf1n4"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ;no test
#:make-flags
(let ((out (assoc-ref %outputs "out")))
(list (string-append "PREFIX=" out)
(string-append "BINDIR=" out "/bin/")
"USEPAK=1"
"RELEASE=1"))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'werror-begone
(lambda _
(substitute* "Makefile" (("-Werror") ""))
#t))
(delete 'configure)))) ;no configure script
(native-inputs
`(("gettext" ,gettext-minimal)
("pkg-config" ,pkg-config)))
(inputs
`(("hicolor-icon-theme" ,hicolor-icon-theme)
("sdl" ,(sdl-union (list sdl2
sdl2-image
sdl2-mixer
sdl2-ttf
sdl2-net)))))
(home-page "https://sourceforge.net/projects/blobwars/")
(synopsis "Platform action game featuring a blob with a lot of weapons")
(description "Blobwars: Metal Blob Solid is a 2D platform game, the first
in the Blobwars series. You take on the role of a fearless Blob agent. Your
mission is to infiltrate various enemy bases and rescue as many MIAs as
possible, while battling many vicious aliens.")
(license (list license:gpl2 ; For code and graphics
license:cc0 ; Music and sounds have specific licenses
license:cc-by3.0 ; see /doc/readme
license:cc-by-sa3.0
license:lgpl2.1+
license:bsd-2))))
(define-public bzflag
(package
(name "bzflag")
(version "2.4.20")
(source
(origin
(method url-fetch)
(uri (string-append "https://download.bzflag.org/bzflag/source/"
version "/bzflag-" version ".tar.bz2"))
(sha256
(base32 "16brxqmfiyz4j4lb8ihzjcbwqmpsms6vm3ijbp34lnw0blbwdjb2"))))
(build-system gnu-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'install 'install-desktop-file-and-icons
(lambda* (#:key outputs #:allow-other-keys)
(let* ((share (string-append (assoc-ref outputs "out") "/share"))
(data (string-append share "/bzflag"))
(hicolor (string-append share "/icons/hicolor"))
(applications (string-append share "/applications")))
;; Move desktop file.
(install-file (string-append data "/bzflag.desktop")
applications)
;; Install icons.
(for-each (lambda (size)
(let* ((dim (string-append size "x" size))
(dir (string-append hicolor "/" dim "/apps")))
(mkdir-p dir)
(copy-file
(string-append data "/bzflag-" dim ".png")
(string-append dir "/bzflag.png"))))
'("48" "256")))
#t)))))
(native-inputs
`(("pkg-config" ,pkg-config)))
(inputs
`(("c-ares" ,c-ares)
("curl" ,curl)
("glew" ,glew)
("glu" ,glu)
("sdl2" ,sdl2)
("zlib" ,zlib)))
(home-page "https://www.bzflag.org/")
(synopsis "3D first person tank battle game")
(description
"BZFlag is a 3D multi-player multiplatform tank battle game that
allows users to play against each other in a network environment.
There are five teams: red, green, blue, purple and rogue (rogue tanks
are black). Destroying a player on another team scores a win, while
being destroyed or destroying a teammate scores a loss. Rogues have
no teammates (not even other rogues), so they cannot shoot teammates
and they do not have a team score.
There are two main styles of play: capture-the-flag and free-for-all.
In capture-the-flag, each team (except rogues) has a team base and
each team with at least one player has a team flag. The object is to
capture an enemy team's flag by bringing it to your team's base. This
destroys every player on the captured team, subtracts one from that
team's score, and adds one to your team's score. In free-for-all,
there are no team flags or team bases. The object is simply to get as
high a score as possible.")
;; The game is dual-licensed.
(license (list license:lgpl2.1 license:mpl2.0))))
(define-public cataclysm-dda
(package
(name "cataclysm-dda")
(version "0.E-2")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/CleverRaven/Cataclysm-DDA")
(commit version)))
(sha256
(base32 "15l6w6lxays7qmsv0ci2ry53asb9an9dh7l7fc13256k085qcg68"))
(file-name (git-file-name name version))))
(build-system gnu-build-system)
(arguments
'(#:make-flags
(list (string-append "PREFIX=" (assoc-ref %outputs "out"))
"USE_HOME_DIR=1" "DYNAMIC_LINKING=1" "RELEASE=1"
"LOCALIZE=1" "LANGUAGES=all")
#:phases
(modify-phases %standard-phases
(delete 'configure)
(add-after 'build 'build-tiles
(lambda* (#:key make-flags outputs #:allow-other-keys)
;; Change prefix directory and enable tile graphics and sound.
(apply invoke "make" "TILES=1" "SOUND=1"
(string-append "PREFIX="
(assoc-ref outputs "tiles"))
(cdr make-flags))))
(add-after 'install 'install-tiles
(lambda* (#:key make-flags outputs #:allow-other-keys)
(apply invoke "make" "install" "TILES=1" "SOUND=1"
(string-append "PREFIX="
(assoc-ref outputs "tiles"))
(cdr make-flags)))))
;; TODO: Add libtap++ from https://github.com/cbab/libtappp as a native
;; input in order to support tests.
#:tests? #f))
(outputs '("out"
"tiles")) ;for tile graphics and sound support
(native-inputs
`(("gettext" ,gettext-minimal)
("pkg-config" ,pkg-config)))
(inputs
`(("freetype" ,freetype)
("libogg" ,libogg)
("libvorbis" ,libvorbis)
("ncurses" ,ncurses)
("sdl2" ,sdl2)
("sdl2-image" ,sdl2-image)
("sdl2-ttf" ,sdl2-ttf)
("sdl2-mixer" ,sdl2-mixer)))
(home-page "https://cataclysmdda.org/")
(synopsis "Survival horror roguelike video game")
(description
"Cataclysm: Dark Days Ahead (or \"DDA\" for short) is a roguelike set
in a post-apocalyptic world. Struggle to survive in a harsh, persistent,
procedurally generated world. Scavenge the remnants of a dead civilization
for food, equipment, or, if you are lucky, a vehicle with a full tank of gas
to get you out of Dodge. Fight to defeat or escape from a wide variety of
powerful monstrosities, from zombies to giant insects to killer robots and
things far stranger and deadlier, and against the others like yourself, that
want what you have.")
(license license:cc-by-sa3.0)))
(define-public corsix-th
(package
(name "corsix-th")
(version "0.64")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/CorsixTH/CorsixTH")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0chh9cv2kdc39sr0x8hclcyzd8dz2y6grgagqzkvr7j570wa5cqh"))))
(build-system cmake-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'install 'wrap-binary
(lambda _
;; Set Lua module paths and default MIDI soundfont on startup.
(let* ((out (assoc-ref %outputs "out"))
(fluid (assoc-ref %build-inputs "fluid-3"))
(lua-version ,(version-major+minor (package-version lua)))
(lua-cpath
(map (lambda (lib)
(string-append
(assoc-ref %build-inputs (string-append "lua-" lib))
"/lib/lua/" lua-version "/?.so"))
'("filesystem" "lpeg"))))
(wrap-program (string-append out "/bin/corsix-th")
`("LUA_CPATH" ";" = ,lua-cpath)
`("SDL_SOUNDFONTS" ":" suffix
(,(string-append fluid "/share/soundfonts/FluidR3Mono_GM.sf3")))))
#t)))
#:tests? #f)) ; TODO need busted package to run tests
;; Omit Lua-Socket dependency to disable automatic updates.
(inputs
`(("ffmpeg" ,ffmpeg)
("fluid-3" ,fluid-3)
("freetype" ,freetype)
("lua" ,lua)
("lua-filesystem" ,lua-filesystem)
("lua-lpeg" ,lua-lpeg)
("sdl2" ,sdl2)
("sdl2-mixer" ,sdl2-mixer)))
(home-page "https://corsixth.com")
(synopsis "Implementation of the @i{Theme Hospital} game engine")
(description
"This package provides a reimplementation of the 1997 Bullfrog business
simulation game @i{Theme Hospital}. As well as faithfully recreating the
original engine, CorsixTH adds support for high resolutions, custom levels and
more. This package does @emph{not} provide the game assets.")
(license (list
license:expat ; main license
license:bsd-3)))) ; CorsixTH/Src/random.c
(define-public cowsay
(package
(name "cowsay")
(version "3.04")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/tnalpgge/rank-amateur-cowsay")
(commit (string-append name "-" version))))
(file-name (git-file-name name version))
(sha256
(base32
"06455kq37hvq1xb7adyiwrx0djs50arsxvjgixyxks16lm1rlc7n"))))
(build-system gnu-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(delete 'configure) ; no configure script
(delete 'build) ; nothing to be built
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(invoke "sh" "install.sh"
(assoc-ref outputs "out"))))
(delete 'check)
(add-after 'install 'check
(lambda* (#:key outputs #:allow-other-keys)
(invoke (string-append (assoc-ref outputs "out")
"/bin/cowsay")
"We're done!"))))))
(inputs
`(("perl" ,perl)))
(home-page (string-append "https://web.archive.org/web/20071026043648/"
"http://www.nog.net:80/~tony/warez/cowsay.shtml"))
(synopsis "Speaking cow text filter")
(description "Cowsay is basically a text filter. Send some text into it,
and you get a cow saying your text. If you think a talking cow isn't enough,
cows can think too: all you have to do is run @command{cowthink}. If you're
tired of cows, a variety of other ASCII-art messengers are available.")
(license license:gpl3+)))
(define-public lolcat
(let ((commit "35dca3d0a381496d7195cd78f5b24aa7b62f2154")
(revision "0"))
(package
(name "lolcat")
(version (git-version "1.0" revision commit))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/jaseg/lolcat")
(commit commit)))
(sha256
(base32
"0jjbkqcc2ikjxd1xgdyv4rb0vsw218181h89f2ywg29ffs3ypd8g"))
(file-name (git-file-name name version))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; no check target
#:make-flags
(list ,(string-append "CC=" (cc-for-target)))
#:phases
(modify-phases %standard-phases
(delete 'bootstrap)
(delete 'configure)
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(dest (string-append out "/bin")))
(mkdir-p dest)
(install-file "lolcat" dest)
(install-file "censor" dest)
#t))))))
(home-page "https://github.com/jaseg/lolcat")
(synopsis "Rainbow coloring effect for text console display")
(description "@command{lolcat} concatenates files and streams like
regular @command{cat}, but it also adds terminal escape codes between
characters and lines resulting in a rainbow effect.")
(license license:wtfpl2))))
(define-public foobillard++
;; Even though this latest revision is old already, stable release is
;; lagging way behind it, and has issues with textures rendering.
(let ((svn-revision 170))
(package
(name "foobillard++")
(version (string-append "3.43-r" (number->string svn-revision)))
(source
(origin
(method svn-fetch)
(uri (svn-reference
(url "svn://svn.code.sf.net/p/foobillardplus/code/")
(revision svn-revision)))
(file-name (git-file-name name version))
(sha256
(base32 "00b693ys5zvzjbjzzj3dqfzm5xw64gwjf9m8qv6bkmf0klbhmayk"))
(patches
(search-patches "foobillard++-pkg-config.patch"))
(modules '((guix build utils)))
(snippet
'(begin
;; Unfortunately, the game includes background music with
;; a non-commercial clause. Delete it.
(for-each delete-file (find-files "data/music" "\\.ogg$"))
#t))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags
(list
;; Install data in a less exotic location.
(string-append "--prefix=" (assoc-ref %outputs "out") "/share")
;; Prevent a build error about undefined trigonometric functions.
"--enable-fastmath=no")
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fix-makefile
;; Remove hard-coded directories. Also fix installation
;; rule: it tries to move around non-existent files or
;; files already moved.
(lambda* (#:key outputs #:allow-other-keys)
(substitute* "Makefile.am"
(("/usr") (assoc-ref outputs "out"))
(("cp .*?/foobillardplus\\.desktop.*") "")
(("cp .*?/foobillardplus\\.(png|xbm) \\$\\(datarootdir\\).*")
""))
#t))
(add-after 'unpack 'unbundle-font
;; XXX: The package ships with LinBiolinum_aSB.ttf and
;; LinBiolinum_aS.ttf, which are not provided by
;; `font-linuxlibertine' package. Therefore, we cannot replace
;; them yet.
(lambda* (#:key inputs #:allow-other-keys)
(let ((dejavu (string-append (assoc-ref inputs "font-dejavu")
"/share/fonts/truetype/")))
(with-directory-excursion "data"
(for-each (lambda (f)
(delete-file f)
(symlink (string-append dejavu f) f))
'("DejaVuSans-Bold.ttf" "DejaVuSans.ttf"))))
#t))
(replace 'bootstrap
(lambda _
(invoke "aclocal" "--force")
(invoke "autoconf" "-f")
(invoke "autoheader" "-f")
(invoke "automake" "-a" "-c" "-f")))
(add-before 'build 'prepare-build
;; Set correct environment for SDL.
(lambda* (#:key inputs #:allow-other-keys)
(setenv "CPATH"
(string-append (assoc-ref inputs "sdl")
"/include/SDL:"
(or (getenv "CPATH") "")))
#t))
(add-before 'build 'fix-settings-directory
;; Hide foobillardplus settings directory in $HOME.
(lambda _
(substitute* "src/history.c"
(("/foobillardplus-data") "/.foobillardplus"))
#t))
(add-before 'install 'create-directories
;; Install process does not create directories before
;; trying to move file in it.
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(mkdir-p (string-append out "/share/icons"))
(mkdir-p (string-append out "/share/applications")))
#t))
(add-after 'install 'symlink-executable
;; Symlink executable to $out/bin.
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin")))
(mkdir-p bin)
(with-directory-excursion bin
(symlink "../share/foobillardplus/bin/foobillardplus"
"foobillardplus"))
#t))))))
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)
("pkg-config" ,pkg-config)))
(inputs
`(("font-dejavu" ,font-dejavu)
("freetype" ,freetype)
("glu" ,glu)
("libpng" ,libpng)
("sdl" ,(sdl-union (list sdl sdl-mixer sdl-net)))))
(home-page "http://foobillardplus.sourceforge.net/")
(synopsis "3D billiard game")
(description "FooBillard++ is an advanced 3D OpenGL billiard game
based on the original foobillard 3.0a sources from Florian Berger.
You can play it with one or two players or against the computer.
The game features:
@itemize
@item Wood paneled table with gold covers and gold diamonds.
@item Reflections on balls.
@item Zoom in and out, rotation, different angles and bird's eye view.
@item Different game modes: 8 or 9-ball, Snooker or Carambole.
@item Tournaments. Compete against other players.
@item Animated cue with strength and eccentric hit adjustment.
@item Jump shots and snipping.
@item Realistic gameplay and billiard sounds.
@item Red-Green stereo.
@item And much more.
@end itemize")
(license (list license:gpl2 license:silofl1.1)))))
(define-public freedoom
(package
(name "freedoom")
(version "0.12.1")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/freedoom/freedoom")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1mq60lfwaaxmch7hsz8403pwafnlsmsd5z2df2j77ppwndwcrypb"))))
(build-system gnu-build-system)
(arguments
'(#:make-flags
(list (string-append "prefix=" (assoc-ref %outputs "out")))
#:tests? #f ; no check target
#:phases
(modify-phases %standard-phases
(delete 'bootstrap)
(replace 'configure
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((freedoom (assoc-ref outputs "out"))
(wad-dir (string-append freedoom "/share/games/doom")))
;; Make sure that the install scripts know where to find
;; the appropriate WAD files.
(substitute* "dist/freedoom"
(("IWAD=freedm.wad")
(string-append "IWAD=" wad-dir "/freedm.wad"))
(("IWAD=freedoom1.wad")
(string-append "IWAD=" wad-dir "/freedoom1.wad"))
(("IWAD=freedoom2.wad")
(string-append "IWAD=" wad-dir "/freedoom2.wad")))
#t))))))
(native-inputs
`(("asciidoc" ,asciidoc)
("deutex" ,deutex)
("python" ,python)
("python-pillow" ,python-pillow)))
(home-page "https://freedoom.github.io/")
(synopsis "Free content game based on the Doom engine")
(native-search-paths
(list (search-path-specification
(variable "DOOMWADDIR")
(files '("share/games/doom")))
(search-path-specification
(variable "DOOMWADPATH")
(files '("share/games/doom")))))
(description
"The Freedoom project aims to create a complete free content first person
shooter game. Freedoom by itself is just the raw material for a game: it must
be paired with a compatible game engine (such as @code{prboom-plus}) to be
played. Freedoom complements the Doom engine with free levels, artwork, sound
effects and music to make a completely free game.")
(license license:bsd-3)))
(define-public freedroidrpg
(package
(name "freedroidrpg")
(version "0.16.1")
(source
(origin
(method url-fetch)
(uri (string-append "http://ftp.osuosl.org/pub/freedroid/"
"freedroidRPG-" (version-major+minor version) "/"
"freedroidRPG-" version ".tar.gz"))
(sha256
(base32 "0n4kn38ncmcy3lrxmq8fjry6c1z50z4q1zcqfig0j4jb0dsz2va2"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags
(list
(string-append "CFLAGS="
"-I" (assoc-ref %build-inputs "sdl-gfx") "/include/SDL "
"-I" (assoc-ref %build-inputs "sdl-image") "/include/SDL "
"-I" (assoc-ref %build-inputs "sdl-mixer") "/include/SDL")
"--enable-opengl")
;; FIXME: the test suite fails with the following error output:
;; 4586 Segmentation fault env SDL_VIDEODRIVER=dummy \
;; SDL_AUDIODRIVER=dummy ./src/freedroidRPG -nb text
#:tests? #f))
(native-inputs
`(("pkg-config" ,pkg-config)))
(inputs
`(("glu" ,glu)
("libjpeg" ,libjpeg-turbo)
("libogg" ,libogg)
("libpng" ,libpng)
("libvorbis" ,libvorbis)
("mesa" ,mesa)
("python" ,python-wrapper)
("sdl" ,sdl)
("sdl-gfx" ,sdl-gfx)
("sdl-image" ,sdl-image)
("sdl-mixer" ,sdl-mixer)
("zlib" ,zlib)))
(home-page "http://www.freedroid.org/")
(synopsis "Isometric role-playing game against killer robots")
(description
"Freedroid RPG is an @dfn{RPG} (Role-Playing Game) with isometric graphics.
The game tells the story of a world destroyed by a conflict between robots and
their human masters. To restore peace to humankind, the player must complete
numerous quests while fighting off rebelling robots---either by taking control
of them, or by simply blasting them to pieces with melee and ranged weapons in
real-time combat.")
(license (list license:expat ; lua/
license:gpl3 ; src/gen_savestruct.py
license:gpl2+)))) ; the rest
(define-public golly
(package
(name "golly")
(version "3.3")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/golly/golly/golly-"
version "/golly-" version
"-src.tar.gz"))
(sha256
(base32
"1j3ksnar4rdam4xiyspgyrs1pifbvxfxkrn65brkwxpx39mpgzc8"))))
(build-system gnu-build-system)
(arguments
'(#:make-flags (list "CC=gcc"
(string-append "GOLLYDIR="
(assoc-ref %outputs "out")
"/share/golly"))
#:tests? #f ; no check target
#:phases
(modify-phases %standard-phases
(replace 'configure
(lambda* (#:key inputs #:allow-other-keys)
;; For some reason, setting the PYTHON_SHLIB make flag doesn't
;; properly set the path to the Python shared library. This
;; substitution acheives the same end by different means.
(substitute* "gui-wx/wxprefs.cpp"
(("pythonlib = wxT\\(STRINGIFY\\(PYTHON_SHLIB\\)\\)")
(string-append "pythonlib = \""
(assoc-ref inputs "python")
"/lib/libpython-2.7.so\"")))
#t))
(replace 'build
(lambda* (#:key make-flags outputs #:allow-other-keys)
(with-directory-excursion "gui-wx"
(apply invoke `("make" ,@make-flags "-f" "makefile-gtk")))))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(doc (string-append out "/share/doc/golly"))
(pixmaps (string-append out "/share/pixmaps"))
(share (string-append out "/share/golly")))
(for-each (lambda (binary)
(install-file binary bin))
'("bgolly" "golly"))
(for-each (lambda (document)
(install-file
(string-append "docs/" document ".html")
doc))
'("License" "ReadMe" "ToDo"))
(install-file "gui-wx/icons/appicon.xpm" pixmaps)
(for-each (lambda (folder)
(copy-recursively
folder
(string-append share "/" folder)))
'("Help" "Patterns" "Rules" "Scripts")))
#t)))))
(native-inputs
`(("lua" ,lua)))
(inputs
`(("glu" ,glu)
("mesa" ,mesa)
("python" ,python-2)
("wxwidgets" ,wxwidgets-gtk2)
("zlib" ,zlib)))
(home-page "http://golly.sourceforge.net/")
(synopsis "Software for exploring cellular automata")
(description
"Golly simulates Conway's Game of Life and many other types of cellular
automata. The following features are available:
@enumerate
@item Support for bounded and unbounded universes, with cells of up to 256
states.
@item Support for multiple algorithms, including Bill Gosper's Hashlife
algorithm.
@item Loading patterns from BMP, PNG, GIF and TIFF image files.
@item Reading RLE, macrocell, Life 1.05/1.06, dblife and MCell files.
@item Scriptable via Lua or Python.
@item Extracting patterns, rules and scripts from zip files.
@item Downloading patterns, rules and scripts from online archives.
@item Pasting patterns from the clipboard.
@item Unlimited undo/redo.
@item Configurable keyboard shortcuts.
@item Auto fit option to keep patterns within the view.
@end enumerate")
(license license:gpl2+)))
(define-public julius
(package
(name "julius")
(version "1.4.1")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/bvschaik/julius")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "12hhnhdwgz7hd3hlndbnk15pxggm1375qs0764ija4nl1gbpb110"))
;; Remove unused bundled libraries.
(modules '((guix build utils)))
(snippet
'(begin
(with-directory-excursion "ext"
(for-each delete-file-recursively '("dirent" "png" "SDL2" "zlib")))
#t))))
(build-system cmake-build-system)
(inputs
`(("libpng" ,libpng)
("sdl2" ,sdl2)
("sdl2-mixer" ,sdl2-mixer)))
(home-page "https://github.com/bvschaik/julius")
(synopsis "Re-implementation of Caesar III game engine")
(description
"Engine for Caesar III, a city-building real-time strategy game.
Julius includes some UI enhancements while preserving the logic (including
bugs) of the original game, so that saved games are compatible. This package
does not include game data.")
(license (list license:agpl3
license:zlib)))) ; ext/tinyfiledialogs
(define-public augustus
(package
(inherit julius)
(name "augustus")
(version (package-version julius))
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/Keriew/augustus")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0ii0w0iwa9zv5bbqfcps5mxifd796m6fw4gvjf09pkm3yjgqc0ag"))
;; Remove unused bundled libraries.
(modules '((guix build utils)))
(snippet
'(begin
(with-directory-excursion "ext"
(for-each delete-file-recursively '("dirent" "png" "SDL2" "zlib")))
#t))))
(arguments
;; No tests. See https://github.com/Keriew/augustus/issues/82.
`(#:tests? #f))
(home-page "https://github.com/Keriew/augustus")
(synopsis "Re-implementation of Caesar III game engine with gameplay changes")
(description
"Fork of Julius, an engine for the a city-building real-time strategy
game Caesar III. Gameplay enhancements include:
@itemize
@item roadblocks;
@item market special orders;
@item global labour pool;
@item partial warehouse storage;
@item increased game limits;
@item zoom controls.
@end itemize\n")))
(define-public meandmyshadow
(package
(name "meandmyshadow")
(version "0.5a")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/meandmyshadow/"
version "/meandmyshadow-" version
"-src.tar.gz"))
(sha256
(base32
"0i98v6cgmpsxy7mbb0s2y6f6qq6mkwzk2nrv1nz39ncf948aky2h"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f)) ; there are no tests
(native-inputs
`(("pkg-config" ,pkg-config)))
(inputs
`(("curl" ,curl)
("libarchive" ,libarchive)
("lua" ,lua)
("sdl" ,(sdl-union (list sdl2
sdl2-image
sdl2-mixer
sdl2-ttf)))))
(home-page "https://acmepjz.github.io/meandmyshadow/")
(synopsis "Puzzle/platform game")
(description "Me and My Shadow is a puzzle/platform game in which you try
to reach the exit by solving puzzles. Spikes, moving blocks, fragile blocks
and much more stand between you and the exit. Record your moves and let your
shadow mimic them to reach blocks you couldn't reach alone.")
(license license:gpl3+)))
(define-public opensurge
(package
(name "opensurge")
(version "0.5.1.2")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/alemart/opensurge")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0ih7hlqjnp9rv0m4lqf7c0s1ai532way5i4pk45jq1gqm8325dbv"))))
(build-system cmake-build-system)
(arguments
`(#:tests? #f ;there are no tests
#:configure-flags
(let* ((out (assoc-ref %outputs "out"))
(share (string-append out "/share")))
(list (string-append "-DCMAKE_INSTALL_PREFIX=" out "/bin")
(string-append "-DGAME_DATADIR=" share "/" ,name)
(string-append "-DDESKTOP_ENTRY_PATH=" share "/applications")
(string-append "-DDESKTOP_ICON_PATH=" share "/pixmaps")
(string-append "-DDESKTOP_METAINFO_PATH=" share "/metainfo")))
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fix-xdg-open-path
(lambda* (#:key inputs #:allow-other-keys)
;; Look for xdg-open in the store.
(substitute* "src/core/web.c"
(("/usr(/bin/xdg-open)" _ bin)
(string-append (assoc-ref inputs "xdg-utils") bin)))
#t))
(add-after 'unpack 'unbundle-fonts
(lambda* (#:key inputs #:allow-other-keys)
;; Replace bundled Roboto fonts with links to the store.
(with-directory-excursion "fonts"
(let ((roboto-dir (string-append
(assoc-ref inputs "font-google-roboto")
"/share/fonts/truetype/")))
(for-each
(lambda (font)
(delete-file font)
(symlink (string-append roboto-dir font) font))
'("Roboto-Black.ttf" "Roboto-Bold.ttf" "Roboto-Medium.ttf")))
#t))))))
(inputs
`(("allegro" ,allegro)
("font-google-roboto" ,font-google-roboto)
("surgescript" ,surgescript)
("xdg-utils" ,xdg-utils)))
(home-page "https://opensurge2d.org")
(synopsis "2D retro side-scrolling game")
(description "@code{Open Surge} is a 2D retro side-scrolling platformer
inspired by the Sonic games. The player runs at high speeds through each
level while collecting items and avoiding obstacles. The game includes a
built-in level editor.")
(license
;; Code is under GPL 3+, assets are under various licenses.
;; See src/misc/credits.c for details.
(list license:gpl3+
license:cc0
license:cc-by3.0
license:cc-by-sa3.0
license:expat
license:public-domain
license:silofl1.1))))
(define-public knights
(package
(name "knights")
(version "025")
(source (origin
(method url-fetch)
(uri (string-append "http://www.knightsgame.org.uk/files/knights_"
version "_src.tar.gz"))
(sha256
(base32
"18vp2ygvn0s0jz8rm585jqf6hjqkam1ximq81k0r9hpmfj7wb88f"))))
(build-system gnu-build-system)
(arguments
'(#:make-flags
(list (string-append "PREFIX=" (assoc-ref %outputs "out")))
#:phases
(modify-phases %standard-phases
;; No configure script.
(delete 'configure))
#:tests? #f)) ;; No check target.
(inputs
`(("boost" ,boost)
("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
("freetype" ,freetype)
("fontconfig" ,fontconfig)
("curl" ,curl)))
(native-inputs
`(("pkg-config" ,pkg-config)))
(home-page "http://www.knightsgame.org.uk/")
(synopsis "Multiplayer dungeon game involving knights and quests")
(description "Knights is a multiplayer game involving several knights who
must run around a dungeon and complete various quests. Each game revolves
around a quest – for example, you might have to find some items and carry them
back to your starting point. This may sound easy, but as there are only
enough items in the dungeon for one player to win, you may end up having to
kill your opponents to get their stuff! Other quests involve escaping from
the dungeon, fighting a duel to the death against the enemy knights, or
destroying an ancient book using a special wand.")
;; This package includes modified sources of lua (X11), enet (Expat), and
;; guichan (BSD-3). The "Coercri" library is released under the Boost
;; license. The whole package is released under GPLv3+.
(license license:gpl3+)))
(define-public gnome-chess
(package
(name "gnome-chess")
(version "3.36.1")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnome/sources/gnome-chess/"
(version-major+minor version) "/"
"gnome-chess-" version ".tar.xz"))
(sha256
(base32
"165bk8s3nngyqbikggspj4rff5nxxfkfcmgzjb4grmsrgbqwk5di"))))
(build-system meson-build-system)
(arguments
'(#:glib-or-gtk? #t
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'skip-gtk-update-icon-cache
;; Don't create 'icon-theme.cache'.
(lambda _
(substitute* "meson_post_install.py"
(("gtk-update-icon-cache") "true"))
#t)))))
(inputs
`(("gtk+" ,gtk+)
("librsvg" ,librsvg)))
(native-inputs
`(("gettext" ,gettext-minimal)
("glib:bin" ,glib "bin") ; for desktop-file-validate and appstream-util
("itstool" ,itstool)
("pkg-config" ,pkg-config)
("vala" ,vala)))
(home-page "https://wiki.gnome.org/Apps/Chess")
(synopsis "Chess board for GNOME")
(description "GNOME Chess provides a 2D board for playing chess games
against human or computer players. It supports loading and saving games in
Portable Game Notation. To play against a computer, install a chess engine
such as chess or stockfish.")
(license license:gpl3+)))
(define-public gnubg
(package
(name "gnubg")
(version "1.06.002")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://gnu/gnubg/gnubg-release-"
version "-sources.tar.gz"))
(sha256
(base32
"11xwhcli1h12k6rnhhyq4jphzrhfik7i8ah3k32pqw803460n6yf"))))
(build-system gnu-build-system)
(inputs `(;; XXX: Build with an older Pango for 'pango_font_get_hb_font' and
;; 'pango_coverage_get_type'. Try removing this for versions > 1.06.002.
("pango" ,pango-1.42)
("glib" ,glib)
("readline" ,readline)
("gtk+" ,gtk+-2)
("mesa" ,mesa)
("glu" ,glu)
("gtkglext" ,gtkglext)
("sqlite" ,sqlite)
("libcanberra" ,libcanberra)))
(native-inputs `(("python-2" ,python-2)
("pkg-config" ,pkg-config)))
(arguments
`(#:phases
(modify-phases %standard-phases
(add-after 'install 'install-desktop-file
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(apps (string-append out "/share/applications")))
(mkdir-p apps)
(with-output-to-file (string-append apps "/gnubg.desktop")
(lambda _
(format #t
"[Desktop Entry]~@
Name=GNU Backgammon~@
Exec=~a/bin/gnubg -w~@
Icon=gnubg~@
Categories=Game;~@
Terminal=false~@
Type=Application~%"
out))))
#t)))))
(home-page "https://www.gnu.org/software/gnubg/")
(synopsis "Backgammon game")
(description "The GNU backgammon application (also known as \"gnubg\") can
be used for playing, analyzing and teaching the game. It has an advanced
evaluation engine based on artificial neural networks suitable for both
beginners and advanced players. In addition to a command-line interface, it
also features an attractive, 3D representation of the playing board.")
(license license:gpl3+)))
(define-public gnubik
(package
(name "gnubik")
(version "2.4.3")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://gnu/gnubik/gnubik-"
version ".tar.gz"))
(sha256
(base32
"1vlf924mq8hg93bsjj0rzvs0crc6psmlxyc6zn0fr7msnmpx6gib"))))
(build-system gnu-build-system)
(arguments
'(#:phases (modify-phases %standard-phases
(add-after 'unpack 'skip-gtk-update-icon-cache
(lambda _
;; Do not attempt to run 'gtk-update-icon-cache', which is
;; unnecessary and causes a needless dependency on glib.
(substitute* "Makefile.in"
(("gtk-update-icon-cache")
"true"))
#t)))))
(inputs `(("gtk+" ,gtk+-2)
("mesa" ,mesa)
("glu" ,glu)
("libx11" ,libx11)
("guile" ,guile-2.0)
("gtkglext" ,gtkglext)))
(native-inputs `(("gettext" ,gettext-minimal)
("pkg-config" ,pkg-config)))
(home-page "https://www.gnu.org/software/gnubik/")
(synopsis "3d Rubik's cube game")
(description
"GNUbik is a puzzle game in which you must manipulate a cube to make
each of its faces have a uniform color. The game is customizable, allowing
you to set the size of the cube (the default is 3x3) or to change the colors.
You may even apply photos to the faces instead of colors. The game is
scriptable with Guile.")
(license license:gpl3+)))
(define-public gnushogi
(package
(name "gnushogi")
(version "1.4.2")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://gnu/gnushogi/gnushogi-"
version ".tar.gz"))
(sha256
(base32
"0a9bsl2nbnb138lq0h14jfc5xvz7hpb2bcsj4mjn6g1hcsl4ik0y"))))
(arguments `(#:tests? #f)) ;; No check target.
(build-system gnu-build-system)
(home-page "https://www.gnu.org/software/gnushogi/")
(synopsis "The game of Shogi (Japanese chess)")
(description "GNU Shogi is a program that plays the game Shogi (Japanese
Chess). It is similar to standard chess but this variant is far more complicated.")
(license license:gpl3+)))
(define-public ltris
(package
(name "ltris")
(version "1.2")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/lgames/ltris/"
"ltris-" version ".tar.gz"))
(sha256
(base32 "15b18p7id55xiz2jkf56w2f1g6yw1rcb98bpa188i6skqrgnrg57"))))
(build-system gnu-build-system)
(arguments
'(;; The code in LTris uses traditional GNU semantics for inline functions
#:configure-flags '("CFLAGS=-fgnu89-inline")
#:phases
(modify-phases %standard-phases
(add-after 'set-paths 'set-sdl-paths
(lambda* (#:key inputs #:allow-other-keys)
(setenv "CPATH"
(string-append (assoc-ref inputs "sdl-union")
"/include/SDL:"
(or (getenv "CPATH") "")))
#t)))))
(inputs
`(("sdl-union" ,(sdl-union (list sdl sdl-mixer)))))
(home-page "http://lgames.sourceforge.net/LTris/")
(synopsis "Tetris clone based on the SDL library")
(description
"LTris is a tetris clone: differently shaped blocks are falling down the
rectangular playing field and can be moved sideways or rotated by 90 degree
units with the aim of building lines without gaps which then disappear (causing
any block above the deleted line to fall down). LTris has three game modes: In
Classic you play until the stack of blocks reaches the top of the playing field
and no new blocks can enter. In Figures the playing field is reset to a new
figure each level and later on tiles and lines suddenly appear. In Multiplayer
up to three players (either human or CPU) compete with each other sending
removed lines to all opponents. There is also a Demo mode in which you can
watch your CPU playing while enjoying a cup of tea!")
(license license:gpl2+)))
(define-public nethack
(package
(name "nethack")
(version "3.6.6")
(source
(origin
(method url-fetch)
(uri
(string-append "https://www.nethack.org/download/" version "/nethack-"
(string-join (string-split version #\.) "") "-src.tgz"))
(sha256
(base32 "1liyckjp34j354qnxc1zn9730lh1p2dabrg1hap24z6xnqx0rpng"))))
(native-inputs
`(("bison" ,bison)
("flex" ,flex)))
(inputs
`(("ncurses" ,ncurses)
("less" ,less)))
(build-system gnu-build-system)
(arguments
'(#:make-flags
`(,(string-append "PREFIX=" (assoc-ref %outputs "out")))
#:phases
(modify-phases %standard-phases
(add-before 'configure 'patch-paths
(lambda _
(substitute* "sys/unix/nethack.sh"
(("^ *cd .*$") ""))
(substitute* "sys/unix/Makefile.utl"
(("^YACC *=.*$") "YACC = bison -y\n")
(("^LEX *=.*$") "LEX = flex\n")
(("^# CC = gcc") "CC = gcc"))
(substitute* "sys/unix/hints/linux"
(("/bin/gzip") (string-append
(assoc-ref %build-inputs "gzip")
"/bin/gzip"))
(("^WINTTYLIB=.*") "WINTTYLIB=-lncurses"))
(substitute* "include/config.h"
(("^.*define CHDIR.*$") "")
(("^/\\* *#*define *REPRODUCIBLE_BUILD *\\*/")
;; Honor SOURCE_DATE_EPOCH.
"#define REPRODUCIBLE_BUILD"))
;; Note: 'makedefs' rejects and ignores dates that are too old
;; or too new, so we must choose something reasonable here.
(setenv "SOURCE_DATE_EPOCH" "1531865062")
(substitute* "sys/unix/Makefile.src"
(("^# CC = gcc") "CC = gcc"))
#t))
(replace 'configure
(lambda _
(let ((bash (string-append
(assoc-ref %build-inputs "bash")
"/bin/bash")))
(with-directory-excursion "sys/unix"
(substitute* "setup.sh" (("/bin/sh") bash))
(invoke bash "setup.sh" "hints/linux"))
#t)))
(add-after 'install 'fixup-paths
(lambda _
(let* ((output (assoc-ref %outputs "out"))
(nethack-script (string-append output "/bin/nethack")))
(mkdir-p (string-append output "/games/lib/nethackuserdir"))
(for-each
(lambda (file)
(rename-file
(string-append output "/games/lib/nethackdir/" file)
(string-append output "/games/lib/nethackuserdir/"
file)))
'("xlogfile" "logfile" "perm" "record" "save"))
(mkdir-p (string-append output "/bin"))
(call-with-output-file nethack-script
(lambda (port)
(format port "#!~a/bin/sh
PATH=~a:$PATH
if [ ! -d ~~/.config/nethack ]; then
mkdir -p ~~/.config/nethack
cp -r ~a/games/lib/nethackuserdir/* ~~/.config/nethack
chmod -R +w ~~/.config/nethack
fi
RUNDIR=$(mktemp -d)
cleanup() {
rm -rf $RUNDIR
}
trap cleanup EXIT
cd $RUNDIR
for i in ~~/.config/nethack/*; do
ln -s $i $(basename $i)
done
for i in ~a/games/lib/nethackdir/*; do
ln -s $i $(basename $i)
done
~a/games/nethack"
(assoc-ref %build-inputs "bash")
(list->search-path-as-string
(list
(string-append
(assoc-ref %build-inputs "coreutils") "/bin")
(string-append
(assoc-ref %build-inputs "less") "/bin"))
":")
output
output
output)))
(chmod nethack-script #o555)
#t)))
(delete 'check))))
(home-page "https://nethack.org")
(synopsis "Classic dungeon crawl game")
(description "NetHack is a single player dungeon exploration game that runs
on a wide variety of computer systems, with a variety of graphical and text
interfaces all using the same game engine. Unlike many other Dungeons &
Dragons-inspired games, the emphasis in NetHack is on discovering the detail of
the dungeon and not simply killing everything in sight - in fact, killing
everything in sight is a good way to die quickly. Each game presents a
different landscape - the random number generator provides an essentially
unlimited number of variations of the dungeon and its denizens to be discovered
by the player in one of a number of characters: you can pick your race, your
role, and your gender.")
(license
(license:fsdg-compatible
"https://nethack.org/common/license.html"))))
(define-public pipewalker
(package
(name "pipewalker")
(version "0.9.4")
(source
(origin
(method url-fetch)
(uri (string-append "http://downloads.sourceforge.net/pipewalker/"
"pipewalker-" version ".tar.gz"))
(sha256
(base32 "1x46wgk0s55562pd96cxagxkn6wpgglq779f9b64ff1k3xzp3myn"))))
(build-system gnu-build-system)
(arguments
`(#:configure-flags
(list (string-append "--docdir=" (assoc-ref %outputs "out")
"/share/doc/" ,name "-" ,version))
#:phases
(modify-phases %standard-phases
(add-after 'configure 'patch-docdir
;; Makefile.in ignores configure's ‘--docdir=...’ option. Fix that.
(lambda _
(substitute* "Makefile"
(("(pkgdocdatadir = ).*" _ assignment)
(string-append assignment "$(docdir)\n")))
#t)))))
(inputs
`(("libpng" ,libpng)
("mesa" ,mesa)
("sdl" ,sdl)))
(home-page "http://pipewalker.sourceforge.net/")
(synopsis "Logical tile puzzle")
(description
"PipeWalker is a simple puzzle game with many diffent themes: connect all
computers to one network server, bring water from a source to the taps, etc.
The underlying mechanism is always the same: you must turn each tile in the
grid in the right direction to combine all components into a single circuit.
Every puzzle has a complete solution, although there may be more than one.")
(license license:gpl3+)))
(define-public prboom-plus
(package
(name "prboom-plus")
(version "2.5.1.4")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/prboom-plus/prboom-plus/"
version "/prboom-plus-" version ".tar.gz"))
(sha256
(base32 "151v6nign86m1a2vqz27krsccpc9m4d1jax4y43v2fa82wfj9qp0"))
(modules '((guix build utils)))
(snippet
'(begin
(substitute* "src/version.c"
(("__DATE__") "")
(("__TIME__") ""))
#t))))
(build-system gnu-build-system)
(arguments
'(#:configure-flags '("--disable-cpu-opt")
#:make-flags `(,(string-append "gamesdir="
(assoc-ref %outputs "out") "/bin"))
#:phases
(modify-phases %standard-phases
(add-after 'set-paths 'set-sdl'paths
(lambda* (#:key inputs #:allow-other-keys)
(setenv "CPATH"
(string-append (assoc-ref inputs "sdl-union")
"/include/SDL:"
(or (getenv "CPATH") "")))
#t)))))
(inputs
`(("fluidsynth" ,fluidsynth)
("glu" ,glu)
("libmad" ,libmad)
("libpng" ,libpng)
("libvorbis" ,libvorbis)
("pcre" ,pcre)
("portmidi" ,portmidi)
("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer sdl-net)))))
(home-page "http://prboom-plus.sourceforge.net/")
(synopsis "Version of the classic 3D shoot'em'up game Doom")
(description
"PrBoom+ is a Doom source port developed from the original PrBoom project.")
(license license:gpl2+)))
(define-public retux
(package
(name "retux")
(version "1.3.6")
(source (origin
(method url-fetch)
(uri (string-append "mirror://savannah/retux/"
(version-major+minor version) "/retux-"
version "-src.tar.gz"))
(sha256
(base32
"01bidh4zisjp3nc436x0g85v60dvwb3ig37i7y01sa71j8fm4fmb"))))
(build-system python-build-system)
(arguments
`(#:tests? #f ; no check target
#:phases
(modify-phases %standard-phases
;; no setup.py script
(delete 'build)
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(data (string-append out "/share/retux"))
(doc (string-append out "/share/doc/retux")))
(mkdir-p bin)
(substitute* "retux.py"
;; Use the correct data directory.
(("os\\.path\\.join\\(os\\.path\\.dirname\\(__file__\\), \"data\"\\),")
(string-append "\"" data "\","))
;; Use Python 3 so the patch-shebangs phase works properly.
((".*python2.*") "#!/usr/bin/python3"))
(copy-file "retux.py" (string-append bin "/retux"))
(copy-recursively "data" data)
(install-file "COPYING" doc)
#t))))))
(inputs
`(("python-sge-pygame" ,python-sge-pygame)
("python-six" ,python-six)
("python-xsge" ,python-xsge)))
(home-page "http://retux.nongnu.org")
(synopsis "Action platformer game")
(description
"ReTux is an action platformer loosely inspired by the Mario games,
utilizing the art assets from the @code{SuperTux} project.")
;; GPL version 3 or later is the license for the code and some art.
;; The rest of the licenses are for the art exclusively, as listed in
;; data/LICENSES.
(license (list license:cc0
license:cc-by3.0
license:cc-by-sa3.0
license:cc-by-sa4.0
license:gpl2+
license:gpl3+))))
(define-public roguebox-adventures
(package
(name "roguebox-adventures")
(version "3.0.1")
(source
(origin
(method url-fetch)
(uri (string-append
"http://download.tuxfamily.org/rba/RogueBoxAdventures_v"
(string-join (string-split version #\.) "_") "_Source.zip"))
(file-name (string-append name "-" version ".zip"))
(sha256
(base32
"05zd03s5w9kcpklfgcggbaa6rwf59nm0q9vcj6gh9v2lh402k067"))))
(build-system python-build-system)
(arguments
`(#:tests? #f ; no check target
#:phases
(modify-phases %standard-phases
(replace 'unpack
(lambda* (#:key source #:allow-other-keys)
(and (invoke "unzip" source)
;; The actual source is buried a few directories deep.
(chdir (string-append "RogueBoxAdventures_v"
(string-join
(string-split ,version #\.) "_")
"_Source")))))
;; no setup.py script
(replace 'build
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(data (string-append
out "/share/games/roguebox-adventures")))
;; Use the correct data directory.
(substitute* '("main.py" "LIB/getch.py" "LIB/getch_gcwz.py")
(("basic_path + os\\.sep + 'DATA'")
(string-append "'" data "'"))
(("^basic_path.*$")
(string-append "basic_path ='" data "'\n")))
(substitute* "LIB/dialog.py"
(("d_path = os\\.path\\.dirname\\(.*\\)\\)")
(string-append "d_path = '" data "'")))
(substitute* "LIB/gra_files.py"
(("basic_path = b_path\\.replace\\('/LIB',''\\)")
(string-append "basic_path ='" data "'\n")))
;; The game must save in the user's home directory because
;; the store is read-only.
(substitute* "main.py"
(("home_save = False") "home_save = True")
(("'icon_small.png'")
(string-append "'" data "/icon_small.png'"))))
#t))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(roguebox-adventures
(string-append bin "/roguebox-adventures"))
(data (string-append
out "/share/games/roguebox-adventures"))
(lib (string-append data "/LIB"))
(doc (string-append
out "/share/doc/roguebox-adventures")))
(mkdir-p bin)
(mkdir-p doc)
(for-each (lambda (file)
(copy-recursively file
(string-append data "/" file)))
'("AUDIO" "FONT" "GRAPHIC" "LIB" "LICENSE"
"icon_big.png" "icon_small.png"))
(for-each (lambda (file)
(chmod file #o555)
(install-file file lib))
'("main.py" "run.py"))
(copy-recursively "DOC" doc)
(call-with-output-file
roguebox-adventures
(lambda (p)
(format p "\
#!~a
export PYTHONPATH=~a/LIB:~a
exec -a \"~a\" ~a \"$@\"\n"
(which "bash") data (getenv "PYTHONPATH")
(which "python3")
(string-append lib "/main.py"))))
(chmod roguebox-adventures #o555))
#t)))))
(native-inputs
`(("unzip" ,unzip)))
(inputs
`(("python-pygame" ,python-pygame)
("python-tmx" ,python-tmx)))
(home-page "https://rogueboxadventures.tuxfamily.org")
(synopsis "A classical roguelike/sandbox game")
(description
"RogueBox Adventures is a graphical roguelike with strong influences
from sandbox games like Minecraft or Terraria. The main idea of RogueBox
Adventures is to offer the player a kind of roguelike toy-world. This world
can be explored and changed freely.")
;; The GPL3+ is for code, the rest are for art.
(license (list license:cc0
license:cc-by3.0
license:gpl3+
license:silofl1.1))))
(define-public seahorse-adventures
(package
(name "seahorse-adventures")
(version "1.2")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/dulsi/seahorse-adventures")
(commit (string-append "release-" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1rnvk06npaqcpjz5z6xcmssz61i32s422lydp49vrnf3j2g4yimd"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-1)))
;; Remove non-free (non-commercial) font.
(snippet
`(begin
(for-each delete-file (find-files "data/fonts" "."))
#t))))
(build-system python-build-system)
(arguments
`(#:tests? #f ;no test
#:phases
(modify-phases %standard-phases
(delete 'build) ;pure Python
(replace 'install ;no install script
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(share (string-append out "/share"))
(applications (string-append share "/applications"))
(data (string-append share "/seahorse-adventures")))
;; Install data.
(for-each (lambda (f)
(chmod f #o555)
(install-file f data))
'("leveledit.py" "run_game.py" "tileedit.py"))
(for-each (lambda (dir)
(let ((target (string-append data "/" dir)))
(mkdir-p target)
(copy-recursively dir target)))
'("data" "lib"))
;; Create executable.
(mkdir-p bin)
(let ((executable (string-append bin "/seahorse-adventures")))
(call-with-output-file executable
(lambda (p)
(format p
"#!~a~@
export PYTHONPATH=~a:~a~@
exec -a \"~a\" ~a \"$@\"~%"
(which "bash") data (getenv "PYTHONPATH")
(which "python3")
(string-append data "/run_game.py"))))
(chmod executable #o555))
;; Add desktop file.
(mkdir-p applications)
(make-desktop-entry-file
(string-append applications "/seahorse-adventures.desktop")
#:name "Seahorse Adventures"
#:comment
'((#f "Help Barbie the seahorse float on bubbles to the moon"))
#:exec ,name
#:icon ,name
#:categories '("Game" "ActionGame")
#:keywords '("game" "retro" "platform"))
;; Add icons.
(for-each
(lambda (size)
(let ((dir (string-append share "/icons/hicolor/"
size "x" size "/apps")))
(mkdir-p dir)
(copy-file
(string-append "icon" size ".png")
(string-append dir "/searhorse-adventures.png"))))
'("32" "64" "128")))
#t))
(add-after 'install 'unbundle-fonts
;; Unbundle Bitstream Vera font and replace deleted one.
(lambda* (#:key outputs inputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(data (string-append out "/share/seahorse-adventures"))
(vera (string-append (assoc-ref inputs "font-bitstream-vera")
"/share/fonts/truetype/Vera.ttf")))
(let ((themes-dir (string-append data "/data/themes/")))
(for-each
(lambda (theme)
(let ((target (string-append themes-dir theme "/Vera.ttf")))
(delete-file target)
(symlink vera target)))
'("default" "gray")))
(symlink vera (string-append data "/data/fonts/04B_20__.TTF"))
(substitute* (string-append data "/lib/main.py")
(("f_scale = 0.35") "f_scale = 0.47")))
#t)))))
(inputs
`(("font-bitstream-vera" ,font-bitstream-vera)
("python-pygame" ,python-pygame)))
(home-page "http://www.imitationpickles.org/barbie/")
(synopsis "Help Barbie the seahorse float on bubbles to the moon")
(description
"Barbie Seahorse Adventures is a retro style platform arcade game.
You are Barbie the seahorse who travels through the jungle, up to the
volcano until you float on bubbles to the moon. On the way to your
final destination you will encounter various enemies, servants of the
evil overlord who has stolen the galaxy crystal. Avoid getting hit
and defeat them with your bubbles!")
;; GPL2+ is for code, CC0 is for art.
(license (list license:gpl2+ license:cc0))))
(define-public superstarfighter
(package
(name "superstarfighter")
(version "0.6.4")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/notapixelstudio/superstarfighter")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1fly63yf5ls1xwm15if4lxwy67wi84k4gvjllljpykrl18vw2y0y"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ;there are no tests
#:phases
(modify-phases %standard-phases
(replace 'configure
(lambda _
(chdir "godot")
(setenv "HOME" (getcwd))
(with-output-to-file "export_presets.cfg"
(lambda ()
(display
"[preset.0]
name=\"Guix\"
platform=\"Linux/X11\"
runnable=true
[preset.0.options]")))
#t))
(replace 'build
(lambda _
(let ((godot (assoc-ref %build-inputs "godot-headless")))
(invoke (string-append godot "/bin/godot_server")
"--export-pack" "Guix"
"superstarfighter.pck" "project.godot"))
#t))
(replace 'install
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(share (string-append out "/share"))
(data (string-append share "/superstarfighter"))
(icons (string-append share "/icons/hicolor/256x256/apps")))
(install-file "superstarfighter.pck" data)
(mkdir-p bin)
(call-with-output-file (string-append bin "/superstarfighter")
(lambda (port)
(format port
"#!/bin/sh~@
exec ~a/bin/godot --main-pack ~a/superstarfighter.pck~%"
(assoc-ref inputs "godot")
data)
(chmod port #o755)))
(mkdir-p icons)
(copy-file "icon.png" (string-append icons "/" ,name ".png"))
(make-desktop-entry-file
(string-append share "/applications/" ,name ".desktop")
#:name "SuperStarfighter"
#:comment "Fast-paced arcade combat game"
#:exec ,name
#:icon ,name
#:categories '("Game" "ArcadeGame")))
#t)))))
(native-inputs
`(("godot-headless" ,godot "headless")))
(inputs
`(("godot" ,godot)))
(home-page "https://notapixel.itch.io/superstarfighter")
(synopsis "Fast-paced local multiplayer arcade game")
(description "In SuperStarfighter, up to four local players compete in a
2D arena with fast-moving ships and missiles. Different game types are
available, as well as a single-player mode with AI-controlled ships.")
(license (list license:expat ; game
license:silofl1.1)))) ; fonts
(define %ufoai-commit "a542a87a891f96b1ab2c44d35b2f6f16859a5019")
(define %ufoai-revision "0")
(define %ufoai-version (git-version "2.6.0_dev" %ufoai-revision %ufoai-commit))
(define ufoai-source
(origin
(method git-fetch)
(uri (git-reference
(url "git://git.code.sf.net/p/ufoai/code") ;HTTPS fails mid-clone
(commit %ufoai-commit)))
(file-name (string-append "ufoai-" %ufoai-version "-checkout"))
(sha256
(base32
"024s7b9rcg7iw8i2p72gwnvabk23ljlq0nldws0y4b6hpwzyn1wz"))
(modules '((guix build utils)
(srfi srfi-1)
(ice-9 ftw)))
(snippet
'(begin
;; Delete ~32MiB of bundled dependencies.
(with-directory-excursion "src/libs"
(for-each delete-file-recursively
(lset-difference equal? (scandir ".")
'("." ".." "gtest" "mumble"))))
;; Use relative path to Lua headers.
(substitute* "src/common/scripts_lua.h"
(("\\.\\./libs/lua/") ""))
;; Adjust Makefile targets to not depend on 'ufo2map', since we build
;; it as a separate package. This way we don't need to make the same
;; adjustments for 'ufoai-data' and 'ufoai' below.
(substitute* "build/maps.mk"
(("\\./ufo2map") "ufo2map")
(("maps: ufo2map") "maps:"))
(substitute* "build/modules/testall.mk"
(("testall: ufo2map") "testall:"))
;; If no cURL headers are found, the build system will try to include
;; the bundled version, even when not required. Prevent that.
(substitute* "build/default.mk"
(("^include src/libs/curl/lib/Makefile\\.inc")
""))
;; While here, improve reproducibility by adding the '-X' flag to the
;; zip command used to create the map files, in order to prevent time
;; stamps from making it into the generated archives.
(substitute* "build/data.mk"
(("\\$\\(call ZIP\\)")
"$(call ZIP) -X"))
#t))))
(define-public ufo2map
(package
(name "ufo2map")
(version %ufoai-version)
(home-page "https://ufoai.org/")
(source ufoai-source)
(build-system gnu-build-system)
(arguments
'(#:configure-flags '("CC=gcc" "CXX=g++"
"--enable-release"
"--enable-ufo2map"
"--disable-uforadiant"
"--disable-cgame-campaign"
"--disable-cgame-multiplayer"
"--disable-cgame-skirmish"
"--disable-game"
"--disable-memory"
"--disable-testall"
"--disable-ufoded"
"--disable-ufo"
"--disable-ufomodel"
"--disable-ufoslicer")
#:tests? #f ;no tests
#:phases (modify-phases %standard-phases
(replace 'configure
(lambda* (#:key (configure-flags '()) #:allow-other-keys)
;; The home-made configure script does not understand
;; some of the default flags of gnu-build-system.
(apply invoke "./configure" configure-flags)))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(install-file "ufo2map" (string-append out "/bin"))
(install-file "debian/ufo2map.6"
(string-append out "/share/man/man6"))
#t))))))
(native-inputs
`(("pkg-config" ,pkg-config)))
(inputs
`(("libjpeg" ,libjpeg-turbo)
("libpng" ,libpng)
("lua" ,lua-5.1)
("sdl-union" ,(sdl-union (list sdl2 sdl2-mixer sdl2-ttf)))))
(synopsis "UFO: AI map generator")
(description
"This package provides @command{ufo2map}, a program used to generate
maps for the UFO: Alien Invasion strategy game.")
(license license:gpl2+)))
(define ufoai-data
(package
(name "ufoai-data")
(version %ufoai-version)
(home-page "https://ufoai.org/")
(source ufoai-source)
(build-system gnu-build-system)
(arguments
'(#:tests? #f
#:configure-flags '("CC=gcc" "CXX=g++")
#:phases (modify-phases %standard-phases
(replace 'configure
(lambda* (#:key outputs (configure-flags '()) #:allow-other-keys)
(apply invoke "./configure" configure-flags)))
(replace 'build
(lambda* (#:key (parallel-build? #t) #:allow-other-keys)
(invoke "make"
"-j" (if parallel-build?
(number->string (parallel-job-count))
"1")
"maps")))
(add-after 'build 'pack
(lambda _
(invoke "make" "pk3")))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(for-each (lambda (file)
(install-file file out))
(find-files "base" "\\.pk3$"))
#t))))))
(native-inputs
`(("python" ,python-2)
("ufo2map" ,ufo2map)
("which" ,which)
("zip" ,zip)))
(synopsis "UFO: AI data files")
(description
"This package contains maps and other assets for UFO: Alien Invasion.")
;; Most assets are available under either GPL2 or GPL2+. Some use other
;; licenses, see LICENSES for details.
(license (list license:gpl2+ license:gpl2 license:cc-by3.0
license:cc-by-sa3.0 license:public-domain))))
(define-public ufoai
(package
(name "ufoai")
(version %ufoai-version)
(home-page "https://ufoai.org/")
(source ufoai-source)
(build-system gnu-build-system)
(arguments
`(#:configure-flags
(list (string-append "--prefix=" (assoc-ref %outputs "out"))
(string-append "--datadir=" (assoc-ref %outputs "out")
"/share/games/ufo")
"CC=gcc" "CXX=g++"
"--enable-release"
"--enable-game"
"--disable-ufo2map"
"--disable-dependency-tracking"
;; Disable hard links to prevent huge NARs.
"--disable-hardlinkedgame"
"--disable-hardlinkedcgame")
#:phases (modify-phases %standard-phases
(add-after 'unpack 'symlink-data-files
(lambda* (#:key inputs #:allow-other-keys)
(let ((data (assoc-ref inputs "ufoai-data")))
;; Symlink the data files to where the build system
;; expects to find them. Ultimately these files are
;; copied to $out/share/games/ufoai/base, losing the
;; symlinks; we could fix that after install, but it
;; does not make a big difference in practice due to
;; deduplication.
(with-directory-excursion "base"
(for-each (lambda (file)
(symlink file (basename file)))
(find-files data "\\.pk3$")))
#t)))
(add-before 'configure 'create-language-files
(lambda _
(invoke "make" "lang")))
(replace 'configure
(lambda* (#:key outputs (configure-flags '()) #:allow-other-keys)
(apply invoke "./configure" configure-flags)))
(replace 'check
(lambda* (#:key tests? #:allow-other-keys)
(if tests?
(invoke "./testall")
(format #t "test suite not run~%"))
#t))
(add-after 'install 'install-man-pages
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(man6 (string-append out "/share/man/man6")))
(install-file "debian/ufo.6" man6)
(install-file "debian/ufoded.6" man6)
#t))))
;; TODO: Some map tests occasionally fail because of randomness issues,
;; e.g. not enough generated aliens. The test runner also fails early
;; in the build container with 'failed to shutdown server'?
#:tests? #f))
(native-inputs
`(("gettext" ,gettext-minimal)
("pkg-config" ,pkg-config)
("python" ,python-2)
("ufo2map" ,ufo2map)
("ufoai-data" ,ufoai-data)))
(inputs
`(("curl" ,curl)
("libjpeg" ,libjpeg-turbo)
("libogg" ,libogg)
("libpng" ,libpng)
("libtheora" ,libtheora)
("libvorbis" ,libvorbis)
("libxml2" ,libxml2)
("lua" ,lua-5.1)
("mesa" ,mesa)
("minixml" ,minixml)
("sdl-union" ,(sdl-union (list sdl2 sdl2-mixer sdl2-ttf)))
("zlib" ,zlib)))
(synopsis "Turn-based tactical strategy game")
(description
"UFO: Alien Invasion is a tactical strategy game set in the year 2084.
You control a secret organisation charged with defending Earth from a brutal
alien enemy. Build up your bases, prepare your team, and dive head-first into
the fast and flowing turn-based combat.
Over the long term you will need to conduct research into the alien threat to
figure out their mysterious goals and use their powerful weapons for your own
ends. You will produce unique items and use them in combat against your
enemies.
You can also use them against your friends with the multiplayer functionality.
Warning: This is a pre-release version of UFO: AI! Some things may not work
properly.")
;; The game code and most assets are GPL2+, but we use GPL2 only here
;; because some assets do not use the "or later" clause. Many individual
;; assets use Creative Commons or Public Domain; see the LICENSE file.
(license (delete license:gpl2+ (package-license ufoai-data)))))
(define-public xshogi
(package
(name "xshogi")
(version "1.4.2")
(source
(origin
(method url-fetch)
(uri (string-append "mirror://gnu/gnushogi/xshogi-"
version ".tar.gz"))
(sha256
(base32
"1dns0nhymak44by18sv48m4xb2skiwbi2i3nb9hl6w9iwd2i2brf"))))
(build-system gnu-build-system)
(inputs
`(("libxaw" ,libxaw)
("libxt" ,libxt)))
(home-page "https://www.gnu.org/software/gnushogi/")
(synopsis "User interface for gnushogi")
(description "A graphical user interface for the package @code{gnushogi}.")
;; Contains a copy of GPLv3 but the licence notices simply
;; state "GNU General Public Licence" without specifying a version.
(license license:gpl1+)))
(define-public abbaye
(package
(name "abbaye")
(version "2.0.1")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/nevat/abbayedesmorts-gpl")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1pwqf7r9bqb2p3xrw9i7y8pgr1401fy3mnnqpb1qkhmdl3gqi9hb"))
(modules '((guix build utils)))
(snippet
;; Unbundle fonts.
'(begin
(delete-file-recursively "fonts")
#t))))
(build-system gnu-build-system)
(arguments
'(#:make-flags '("CC=gcc")
#:phases (modify-phases %standard-phases
(add-after 'set-paths 'set-sdl-paths
(lambda* (#:key inputs #:allow-other-keys)
(setenv "CPATH"
(string-append (assoc-ref inputs "sdl-union")
"/include/SDL:"
(or (getenv "CPATH") "")))))
(add-after 'patch-source-shebangs 'patch-makefile
(lambda* (#:key outputs #:allow-other-keys)
;; Replace /usr with package output directory.
(substitute* "Makefile"
(("/usr") (assoc-ref outputs "out")))))
(add-before 'install 'make-install-dirs
(lambda* (#:key outputs #:allow-other-keys)
(let ((prefix (assoc-ref outputs "out")))
;; Create directories that the makefile assumes exist.
(mkdir-p (string-append prefix "/bin"))
(mkdir-p (string-append prefix "/share/applications"))
(mkdir-p (string-append prefix "/share/pixmaps")))))
;; No configure script.
(delete 'configure))
#:tests? #f)) ;; No check target.
(native-inputs `(("pkg-config" ,pkg-config)))
(inputs `(("sdl-union" ,(sdl-union (list sdl2 sdl2-image sdl2-mixer)))))
(home-page "https://github.com/nevat/abbayedesmorts-gpl")
(synopsis "GNU/Linux port of the indie game \"l'Abbaye des Morts\"")
(description "L'Abbaye des Morts is a 2D platform game set in 13th century
France. The Cathars, who preach about good Christian beliefs, were being
expelled by the Catholic Church out of the Languedoc region in France. One of
them, called Jean Raymond, found an old church in which to hide, not knowing
that beneath its ruins lay buried an ancient evil.")
(license license:gpl3)))
(define-public angband
(package
(name "angband")
(version "4.2.1")
(source
(origin
(method url-fetch)
(uri (string-append "https://rephial.org/downloads/"
(version-major+minor version)
"/angband-" version ".tar.gz"))
(sha256
(base32 "03qdavkj2ik02mqjxmlm5bn17ba3yxb1rirp8ghnxy3bsk4kbmxc"))
(modules '((guix build utils)))
(snippet
;; So, some of the sounds/graphics/tilesets are under different
;; licenses... some of them even nonfree! This is a console-only
;; version of this package so we just remove them.
;; In the future, if someone tries to make a graphical variant of
;; this package, they can deal with that mess themselves. :)
'(begin
(for-each (lambda (subdir)
(let ((lib-subdir (string-append "lib/" subdir)))
(delete-file-recursively lib-subdir)))
'("fonts" "icons" "sounds" "tiles"))
(substitute* "lib/Makefile"
;; And don't try to invoke makefiles in the directories we removed.
(("gamedata customize help screens fonts tiles sounds icons user")
"gamedata customize help screens user"))
#t))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; no check target
#:configure-flags (list (string-append "--bindir=" %output "/bin"))
#:phases
(modify-phases %standard-phases
(replace 'bootstrap
(lambda _
(substitute* "acinclude.m4"
(("ncursesw5-config") "ncursesw6-config"))
(invoke "sh" "autogen.sh"))))))
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)))
(inputs `(("ncurses" ,ncurses)))
(home-page "https://rephial.org/")
(synopsis "Dungeon exploration roguelike")
(description "Angband is a Classic dungeon exploration roguelike. Explore
the depths below Angband, seeking riches, fighting monsters, and preparing to
fight Morgoth, the Lord of Darkness.")
(license license:gpl2)))
(define-public pingus
(package
(name "pingus")
(version "0.7.6")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://gitlab.com/pingus/pingus.git")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"0wp06kcmknsnxz7bjnsndb8x062z7r23fb3yrnbfnj68qhz18y74"))
(patches (search-patches "pingus-boost-headers.patch"
"pingus-sdl-libs-config.patch"))
(modules '((guix build utils)))
(snippet
'(begin
(substitute* "src/pingus/screens/demo_session.cpp"
(("#include <iostream>")
;; std::function moved to <functional> with C++ 11.
;; Remove this for versions newer than 0.7.6.
"#include <iostream>\n#include <functional>"))
#t))))
(build-system gnu-build-system)
(native-inputs `(("pkg-config" ,pkg-config)
("scons-python2" ,scons-python2)))
(inputs `(("sdl" ,sdl)
("sdl-image" ,sdl-image)
("sdl-mixer" ,sdl-mixer)
("mesa" ,mesa)
("glu" ,glu)
("libpng" ,libpng)
("boost" ,boost)))
(arguments
'(#:make-flags (list (string-append "PREFIX=" %output))
#:tests? #f ; no check target
#:phases
(modify-phases %standard-phases
(delete 'configure)))) ; no configure script
(home-page "https://pingus.seul.org/")
(synopsis "Lemmings clone")
(description
"Pingus is a free Lemmings-like puzzle game in which the player takes
command of a bunch of small animals and has to guide them through levels.
Since the animals walk on their own, the player can only influence them by
giving them commands, like build a bridge, dig a hole, or redirect all animals
in the other direction. Multiple such commands are necessary to reach the
level's exit. The game is presented in a 2D side view.")
;; Some source files are under bsd-3 and gpl2+ licenses.
(license license:gpl3+)))
(define-public talkfilters
(package
(name "talkfilters")
(version "2.3.8")
(source
(origin
(method url-fetch)
(uri (string-append "http://www.hyperrealm.com/talkfilters/"
"talkfilters-" version ".tar.gz"))
(sha256
(base32 "19nc5vq4bnkjvhk8srqddzhcs93jyvpm9r6lzjzwc1mgf08yg0a6"))))
(build-system gnu-build-system)
(home-page "https://www.gnu.org/software/talkfilters/")
(synopsis "Convert English text to humorous dialects")
(description "The GNU Talk Filters are programs that convert English text
into stereotyped or otherwise humorous dialects. The filters are provided as
a C library, so they can easily be integrated into other programs.")
(license license:gpl2+)))
(define-public taisei
(package
(name "taisei")
(version "1.3.1")
(source
(origin
(method url-fetch)
(uri (string-append "https://github.com/taisei-project/"
"taisei/releases/download/v" version
"/taisei-v" version ".tar.xz"))
(sha256
(base32 "11f9mlqmzy1lszwcc1nsbar9q1hs4ml6pbm52hqfd4q0f4x3ln46"))))
(build-system meson-build-system)
(arguments
`(#:build-type "release" ;comment out for bug-reporting (and cheats)
#:configure-flags
(list "-Dr_default=gles30"
"-Dr_gles20=true"
"-Dr_gles30=true"
"-Dshader_transpiler=true")))
(native-inputs
`(("pkg-config" ,pkg-config)
("python" ,python)
("python-docutils" ,python-docutils)
("python-pygments" ,python-pygments)))
(inputs
`(("freetype" ,freetype)
("libpng" ,libpng)
("libwebp" ,libwebp)
("libzip" ,libzip)
("mesa" ,mesa)
("openssl" ,openssl)
("opusfile" ,opusfile)