summary refs log tree commit diff
path: root/pkgs/games
diff options
context:
space:
mode:
authorVladimír Čunát <vcunat@gmail.com>2015-12-31 09:47:26 +0100
committerVladimír Čunát <vcunat@gmail.com>2015-12-31 09:53:02 +0100
commitf9f6f41bff2213e199bded515e9b66d1e5c4d7dd (patch)
tree29c5a75228e31f305f42c5b761709a186e406776 /pkgs/games
parentbbcf127c7c9029cba43493d7d25a9d1c65d59152 (diff)
parent468f698f609e123bb0ffae67181d07ac99eb2204 (diff)
downloadnixpkgs-f9f6f41bff2213e199bded515e9b66d1e5c4d7dd.tar
nixpkgs-f9f6f41bff2213e199bded515e9b66d1e5c4d7dd.tar.gz
nixpkgs-f9f6f41bff2213e199bded515e9b66d1e5c4d7dd.tar.bz2
nixpkgs-f9f6f41bff2213e199bded515e9b66d1e5c4d7dd.tar.lz
nixpkgs-f9f6f41bff2213e199bded515e9b66d1e5c4d7dd.tar.xz
nixpkgs-f9f6f41bff2213e199bded515e9b66d1e5c4d7dd.tar.zst
nixpkgs-f9f6f41bff2213e199bded515e9b66d1e5c4d7dd.zip
Merge branch 'master' into closure-size
TODO: there was more significant refactoring of qtbase and plasma 5.5
on master, and I'm deferring pointing to correct outputs to later.
Diffstat (limited to 'pkgs/games')
-rw-r--r--pkgs/games/anki/default.nix60
-rw-r--r--pkgs/games/anki/fix-paths.patch98
-rw-r--r--pkgs/games/atanks/default.nix65
-rw-r--r--pkgs/games/atanks/default.upstream5
-rw-r--r--pkgs/games/beret/default.nix1
-rw-r--r--pkgs/games/eboard/default.nix13
-rw-r--r--pkgs/games/liquidwar/default.nix52
-rw-r--r--pkgs/games/mnemosyne/default.nix8
-rw-r--r--pkgs/games/sauerbraten/default.nix103
-rw-r--r--pkgs/games/stardust/default.nix77
-rw-r--r--pkgs/games/super-tux/default.nix16
-rw-r--r--pkgs/games/terraria-server/default.nix39
-rw-r--r--pkgs/games/the-butterfly-effect/default.nix76
-rw-r--r--pkgs/games/tome4/default.nix6
-rw-r--r--pkgs/games/zandronum/bin.nix39
-rw-r--r--pkgs/games/zandronum/default.nix60
-rw-r--r--pkgs/games/zandronum/server.nix44
17 files changed, 380 insertions, 382 deletions
diff --git a/pkgs/games/anki/default.nix b/pkgs/games/anki/default.nix
index 735d260560d..ca18ca194da 100644
--- a/pkgs/games/anki/default.nix
+++ b/pkgs/games/anki/default.nix
@@ -1,5 +1,5 @@
-{ stdenv, lib, fetchurl, lame, mplayer, libpulseaudio, portaudio
-, python, pyqt4, pythonPackages
+{ stdenv, lib, fetchurl, substituteAll, lame, mplayer
+, libpulseaudio, python, pyqt4, qt4, pythonPackages
 # This little flag adds a huge number of dependencies, but we assume that
 # everyone wants Anki to draw plots with statistics by default.
 , plotsSupport ? true }:
@@ -18,33 +18,59 @@ stdenv.mkDerivation rec {
       sha256 = "1d5rf5gcw98m38wam6wh3hyh7qd78ws7zipm67xg744flqsjrzmr";
     };
 
-    pythonPath = [ pyqt4 py.pysqlite py.sqlalchemy9 py.pyaudio ]
+    pythonPath = [ pyqt4 py.pysqlite py.sqlalchemy9 py.pyaudio py.beautifulsoup py.httplib2 ]
               ++ lib.optional plotsSupport py.matplotlib;
 
     buildInputs = [ python py.wrapPython lame mplayer libpulseaudio ];
 
-    preConfigure = ''
-      substituteInPlace anki/anki \
-        --replace /usr/share/ $out/share/
+    phases = [ "unpackPhase" "patchPhase" "installPhase" ];
 
-      substituteInPlace Makefile \
-        --replace PREFIX=/usr PREFIX=$out \
-        --replace /local/bin/ /bin/
+    patches = [
+      (substituteAll {
+        src = ./fix-paths.patch;
+        inherit lame mplayer qt4;
+        qt4name = qt4.name;
+      })
+    ];
 
-      sed -i '/xdg-mime/ d' Makefile
+    postPatch = ''
+      substituteInPlace oldanki/lang.py --subst-var-by anki $out
+      substituteInPlace anki/lang.py --subst-var-by anki $out
+
+      # Remove unused starter. We'll create our own, minimalistic,
+      # starter.
+      rm anki/anki
+
+      # Remove QT translation files. We'll use the standard QT ones.
+      rm "locale/"*.qm
     '';
 
-    preInstall = ''
+    installPhase = ''
+      pp=$out/lib/${python.libPrefix}/site-packages
+
       mkdir -p $out/bin
-      mkdir -p $out/share/pixmaps
       mkdir -p $out/share/applications
+      mkdir -p $out/share/doc/anki
       mkdir -p $out/share/man/man1
-    '';
+      mkdir -p $out/share/mime/packages
+      mkdir -p $out/share/pixmaps
+      mkdir -p $pp
+
+      cat > $out/bin/anki <<EOF
+      #!${python}/bin/python
+      import aqt
+      aqt.run()
+      EOF
+      chmod 755 $out/bin/anki
+
+      cp -v anki.desktop $out/share/applications/
+      cp -v README* LICENSE* $out/share/doc/anki/
+      cp -v anki.1 $out/share/man/man1/
+      cp -v anki.xml $out/share/mime/packages/
+      cp -v anki.{png,xpm} $out/share/pixmaps/
+      cp -rv locale $out/share/
+      cp -rv anki aqt thirdparty/send2trash $pp/
 
-    postInstall = ''
-      mkdir -p "$out/lib/${python.libPrefix}/site-packages"
-      ln -s "$out/share/anki/"* $out/lib/${python.libPrefix}/site-packages/
-      export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
       wrapPythonPrograms
     '';
 
diff --git a/pkgs/games/anki/fix-paths.patch b/pkgs/games/anki/fix-paths.patch
new file mode 100644
index 00000000000..cfd3424f799
--- /dev/null
+++ b/pkgs/games/anki/fix-paths.patch
@@ -0,0 +1,98 @@
+diff -Nurp anki-2.0.33.orig/anki/lang.py anki-2.0.33/anki/lang.py
+--- anki-2.0.33.orig/anki/lang.py	2015-12-27 11:23:02.334908723 +0100
++++ anki-2.0.33/anki/lang.py	2015-12-27 14:06:00.688003103 +0100
+@@ -71,13 +71,7 @@ def ngettext(single, plural, n):
+     return localTranslation().ungettext(single, plural, n)
+ 
+ def langDir():
+-    dir = os.path.join(os.path.dirname(
+-        os.path.abspath(__file__)), "locale")
+-    if not os.path.isdir(dir):
+-        dir = os.path.join(os.path.dirname(sys.argv[0]), "locale")
+-    if not os.path.isdir(dir):
+-        dir = "/usr/share/anki/locale"
+-    return dir
++    return "@anki@/share/locale"
+ 
+ def setLang(lang, local=True):
+     trans = gettext.translation(
+diff -Nurp anki-2.0.33.orig/anki/sound.py anki-2.0.33/anki/sound.py
+--- anki-2.0.33.orig/anki/sound.py	2015-12-27 11:23:02.334908723 +0100
++++ anki-2.0.33/anki/sound.py	2015-12-27 11:34:11.863147265 +0100
+@@ -29,8 +29,9 @@ processingDst = u"rec.mp3"
+ processingChain = []
+ recFiles = []
+ 
++lameCmd = "@lame@/bin/lame"
+ processingChain = [
+-    ["lame", "rec.wav", processingDst, "--noreplaygain", "--quiet"],
++    [lameCmd, "rec.wav", processingDst, "--noreplaygain", "--quiet"],
+     ]
+ 
+ # don't show box on windows
+@@ -44,13 +45,6 @@ if isWin:
+ else:
+     si = None
+ 
+-if isMac:
+-    # make sure lame, which is installed in /usr/local/bin, is in the path
+-    os.environ['PATH'] += ":" + "/usr/local/bin"
+-    dir = os.path.dirname(os.path.abspath(__file__))
+-    dir = os.path.abspath(dir + "/../../../..")
+-    os.environ['PATH'] += ":" + dir + "/audio"
+-
+ def retryWait(proc):
+     # osx throws interrupted system call errors frequently
+     while 1:
+@@ -62,13 +56,7 @@ def retryWait(proc):
+ # Mplayer settings
+ ##########################################################################
+ 
+-if isWin:
+-    mplayerCmd = ["mplayer.exe", "-ao", "win32"]
+-    dir = os.path.dirname(os.path.abspath(sys.argv[0]))
+-    os.environ['PATH'] += ";" + dir
+-    os.environ['PATH'] += ";" + dir + "\\..\\win\\top" # for testing
+-else:
+-    mplayerCmd = ["mplayer"]
++mplayerCmd = ["@mplayer@/bin/mplayer"]
+ mplayerCmd += ["-really-quiet", "-noautosub"]
+ 
+ # Mplayer in slave mode
+@@ -220,7 +208,7 @@ class _Recorder(object):
+         self.encode = encode
+         for c in processingChain:
+             #print c
+-            if not self.encode and c[0] == 'lame':
++            if not self.encode and c[0] == lameCmd:
+                 continue
+             try:
+                 ret = retryWait(subprocess.Popen(c, startupinfo=si))
+diff -Nurp anki-2.0.33.orig/aqt/__init__.py anki-2.0.33/aqt/__init__.py
+--- anki-2.0.33.orig/aqt/__init__.py	2015-12-27 11:23:02.338908782 +0100
++++ anki-2.0.33/aqt/__init__.py	2015-12-27 12:35:03.405565214 +0100
+@@ -107,7 +107,7 @@ def setupLang(pm, app, force=None):
+         app.setLayoutDirection(Qt.LeftToRight)
+     # qt
+     _qtrans = QTranslator()
+-    if _qtrans.load("qt_" + lang, dir):
++    if _qtrans.load("qt_" + lang, "@qt4@/share/@qt4name@/translations"):
+         app.installTranslator(_qtrans)
+ 
+ # App initialisation
+diff -Nurp anki-2.0.33.orig/oldanki/lang.py anki-2.0.33/oldanki/lang.py
+--- anki-2.0.33.orig/oldanki/lang.py	2015-12-27 11:23:02.390909551 +0100
++++ anki-2.0.33/oldanki/lang.py	2015-12-27 14:05:51.663920453 +0100
+@@ -32,11 +32,7 @@ def ngettext(single, plural, n):
+     return localTranslation().ungettext(single, plural, n)
+ 
+ def setLang(lang, local=True):
+-    base = os.path.dirname(os.path.abspath(__file__))
+-    localeDir = os.path.join(base, "locale")
+-    if not os.path.exists(localeDir):
+-        localeDir = os.path.join(
+-            os.path.dirname(sys.argv[0]), "locale")
++    localeDir = "@anki@/share/locale"
+     trans = gettext.translation('libanki', localeDir,
+                                 languages=[lang],
+                                 fallback=True)
diff --git a/pkgs/games/atanks/default.nix b/pkgs/games/atanks/default.nix
index 9ebfb724779..4b9b097bbb7 100644
--- a/pkgs/games/atanks/default.nix
+++ b/pkgs/games/atanks/default.nix
@@ -1,53 +1,26 @@
-x@{builderDefsPackage
-  , allegro
-  , ...}:
-builderDefsPackage
-(a :  
-let 
-  helperArgNames = ["stdenv" "fetchurl" "builderDefsPackage"] ++ 
-    [];
+{ stdenv, fetchurl, allegro }:
 
-  buildInputs = map (n: builtins.getAttr n x)
-    (builtins.attrNames (builtins.removeAttrs x helperArgNames));
-  sourceInfo = rec {
-    baseName="atanks";
-    version = "6.2";
-    name="${baseName}-${version}";
-    project="${baseName}";
-    url="mirror://sourceforge/project/${project}/${baseName}/${name}/${name}.tar.gz";
+stdenv.mkDerivation rec {
+  name = "atanks-${version}";
+  version = "6.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/atanks/atanks/${name}/${name}.tar.gz";
     sha256 = "1s1lb87ind0y9d6hmfaf1b9wks8q3hd6w5n9dibq75rxqmcfvlpy";
   };
-in
-rec {
-  src = a.fetchurl {
-    url = sourceInfo.url;
-    sha256 = sourceInfo.sha256;
-  };
 
-  inherit (sourceInfo) name version;
-  inherit buildInputs;
+  buildInputs = [ allegro ];
+
+  patchPhase = ''
+    substituteInPlace Makefile --replace /usr $out
+  '';
 
-  /* doConfigure should be removed if not needed */
-  phaseNames = ["fixInstall" "doMakeInstall"];
-  makeFlags=[
-    "PREFIX=$out/"
-  ];
-  fixInstall = a.fullDepEntry (''
-    sed -e "s@INSTALL=.*bin/install @INSTALL=install @" -i Makefile
-    sed -e "s@-g 0 -m ... -o 0@@" -i Makefile
-    sed -e 's@/usr/@'"$out"'@g' -i Makefile
-  '') ["doUnpack" "minInit"];
-      
-  meta = {
+  makeFlags = [ "PREFIX=$(out)/" "INSTALL=install" ];
+
+  meta = with stdenv.lib; {
     description = "Atomic Tanks ballistics game";
-    maintainers = with a.lib.maintainers;
-    [
-      raskin
-    ];
-    platforms = with a.lib.platforms;
-      linux;
-    downloadPage = "http://sourceforge.net/projects/atanks/files/atanks/";
-    inherit version;
+    homepage = http://atanks.sourceforge.net/;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
   };
-}) x
-
+}
diff --git a/pkgs/games/atanks/default.upstream b/pkgs/games/atanks/default.upstream
deleted file mode 100644
index f52364b3427..00000000000
--- a/pkgs/games/atanks/default.upstream
+++ /dev/null
@@ -1,5 +0,0 @@
-url http://sourceforge.net/projects/atanks/files/atanks/
-version_link 'atanks[-][0-9.]+/$'
-version_link '[.]tar[.][a-z0-9]+/download'
-SF_redirect
-do_overwrite () { do_overwrite_just_version; }
diff --git a/pkgs/games/beret/default.nix b/pkgs/games/beret/default.nix
index cfb276c0fb0..81bdbed46e9 100644
--- a/pkgs/games/beret/default.nix
+++ b/pkgs/games/beret/default.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation {
     license     = licenses.lgpl2;
     maintainers = with maintainers; [ lovek323 ];
     platforms   = platforms.all;
+    broken = true; # source won't download, and no replacement is visible
   };
 }
 
diff --git a/pkgs/games/eboard/default.nix b/pkgs/games/eboard/default.nix
index 8dd06fa6a28..3d070c5eafb 100644
--- a/pkgs/games/eboard/default.nix
+++ b/pkgs/games/eboard/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, fetchurl, pkgconfig, gtk }:
+{ stdenv, fetchurl, perl, pkgconfig, gtk }:
 
 stdenv.mkDerivation {
   name = "eboard-1.1.1";
-  
+
   src = fetchurl {
     url = mirror://sourceforge/eboard/eboard-1.1.1.tar.bz2;
     sha256 = "0vm25j1s2zg1lipwjv9qrcm877ikfmk1yh34i8f5l3bwd63115xd";
@@ -10,7 +10,14 @@ stdenv.mkDerivation {
 
   patches = [ ./eboard.patch ];
 
-  buildInputs = [ pkgconfig gtk ];
+  buildInputs = [ gtk ];
+  nativeBuildInputs = [ perl pkgconfig ];
+
+  preConfigure = ''
+    patchShebangs ./configure
+  '';
+
+  NIX_CFLAGS_COMPILE = [ "-fpermissive" ];
 
   meta = {
     homepage = http://www.bergo.eng.br/eboard/;
diff --git a/pkgs/games/liquidwar/default.nix b/pkgs/games/liquidwar/default.nix
index a87c4dea0c3..f97c0ec412f 100644
--- a/pkgs/games/liquidwar/default.nix
+++ b/pkgs/games/liquidwar/default.nix
@@ -1,11 +1,20 @@
-a @ { xproto, libX11, libXrender
+{ stdenv, fetchurl, xproto, libX11, libXrender
 , gmp, mesa, libjpeg, libpng
-, expat, gettext, perl
+, expat, gettext, perl, guile
 , SDL, SDL_image, SDL_mixer, SDL_ttf
 , curl, sqlite
-, libogg, libvorbis, libcaca, csound, cunit, ... } :
-let
-  buildInputs = with a; [
+, libogg, libvorbis, libcaca, csound, cunit } :
+
+stdenv.mkDerivation rec {
+  name = "liquidwar6-${version}";
+  version = "0.6.3902";
+
+  src = fetchurl {
+    url = "mirror://gnu/liquidwar6/${name}.tar.gz";
+    sha256 = "1976nnl83d8wspjhb5d5ivdvdxgb8lp34wp54jal60z4zad581fn";
+  };
+
+  buildInputs = [
     xproto libX11 gmp guile
     mesa libjpeg libpng
     expat gettext perl
@@ -14,34 +23,15 @@ let
     libogg libvorbis csound
     libXrender libcaca cunit
   ];
-in
-rec {
-  name = "liquidwar6-${meta.version}";
 
-  src = a.fetchurl {
-    url = "mirror://gnu/liquidwar6/${name}.tar.gz";
-    sha256 = "1976nnl83d8wspjhb5d5ivdvdxgb8lp34wp54jal60z4zad581fn";
-  };
-
-  inherit buildInputs;
-  configureFlags = [];
+  # To avoid problems finding SDL_types.h.
+  configureFlags = [ "CFLAGS=-I${SDL.dev}/include/SDL" ];
 
-  /* doConfigure should be removed if not needed */
-  phaseNames = ["setVars" "doConfigure" "doMakeInstall"];
-
-  setVars = a.noDepEntry (''
-    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${a.SDL.dev}/include/SDL"
-  '');
-
-  meta = {
+  meta = with stdenv.lib; {
     description = "Quick tactics game";
-    maintainers = [
-      a.lib.maintainers.raskin
-    ];
-    platforms = with a.lib.platforms;
-      linux;
-  homepage = "http://www.gnu.org/software/liquidwar6/";
-  version = "0.6.3902";
-  updateWalker=true;
+    homepage = "http://www.gnu.org/software/liquidwar6/";
+    maintainers = [ maintainers.raskin ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/games/mnemosyne/default.nix b/pkgs/games/mnemosyne/default.nix
index e01999b2ecc..8624e168f92 100644
--- a/pkgs/games/mnemosyne/default.nix
+++ b/pkgs/games/mnemosyne/default.nix
@@ -2,9 +2,7 @@
 , fetchurl
 , buildPythonPackage
 , pyqt4
-, matplotlib
-, cherrypy
-, sqlite3
+, pythonPackages
 }:
 let
   version = "2.3.2";
@@ -14,17 +12,17 @@ in buildPythonPackage rec {
     url    = "http://sourceforge.net/projects/mnemosyne-proj/files/mnemosyne/${name}/Mnemosyne-${version}.tar.gz";
     sha256 = "0jkrw45i4v24p6xyq94z7rz5948h7f5dspgs5mcdaslnlp2accfp";
   };
-  pythonPath = [
+  propagatedBuildInputs = with pythonPackages; [
     pyqt4
     matplotlib
     cherrypy
     sqlite3
+    webob
   ];
   preConfigure = ''
     substituteInPlace setup.py --replace /usr $out
     find . -type f -exec grep -H sys.exec_prefix {} ';' | cut -d: -f1 | xargs sed -i s,sys.exec_prefix,\"$out\",
   '';
-  installCommand = "python setup.py install --prefix=$out";
   meta = {
     homepage = http://mnemosyne-proj.org/;
     description = "Spaced-repetition software";
diff --git a/pkgs/games/sauerbraten/default.nix b/pkgs/games/sauerbraten/default.nix
index 8f3fb53f7e3..61a9310ae21 100644
--- a/pkgs/games/sauerbraten/default.nix
+++ b/pkgs/games/sauerbraten/default.nix
@@ -1,77 +1,56 @@
-x@{builderDefsPackage
-  , fetchsvn, mesa, SDL, SDL_image, SDL_mixer
-  , libpng, zlib, libjpeg, imagemagick, libX11
-  , ...}:
-builderDefsPackage
-(a :  
-let 
-  helperArgNames = ["stdenv" "fetchurl" "builderDefsPackage"] ++ 
-    ["fetchsvn"];
-
-  buildInputs = map (n: builtins.getAttr n x)
-    (builtins.attrNames (builtins.removeAttrs x helperArgNames));
-  sourceInfo = rec {
-    baseName="sauerbraten";
-    version="5000";
-    name="${baseName}-r${version}";
-    url="https://svn.code.sf.net/p/sauerbraten/code";
-    hash="17libj7dslprlwppdk3vyxdcigbsa4czln8gdyz9j264m11z1cbh";
-  };
-in
-rec {
-  srcDrv = a.fetchsvn {
-    url = sourceInfo.url;
-    sha256 = sourceInfo.hash;
-    rev = sourceInfo.version;
+{ stdenv, fetchsvn, mesa, SDL, SDL_image, SDL_mixer
+, libpng, zlib, libjpeg, imagemagick, libX11
+}:
+
+stdenv.mkDerivation rec {
+  name = "sauerbraten-r${version}";
+  version = "5000";
+
+  src = fetchsvn {
+    url = "https://svn.code.sf.net/p/sauerbraten/code";
+    sha256 = "17libj7dslprlwppdk3vyxdcigbsa4czln8gdyz9j264m11z1cbh";
+    rev = version;
   };
 
-  src = srcDrv + "/";
-
-  inherit (sourceInfo) name version;
-  inherit buildInputs;
-
-  phaseNames = ["setVars" "doMakeInstall" "doCreateScripts"];
+  buildInputs = [
+    mesa SDL SDL_image SDL_mixer libpng zlib libjpeg imagemagick
+    libX11
+  ];
 
-  setVars = a.noDepEntry ''
+  preBuild = ''
     export NIX_LDFLAGS="$NIX_LDFLAGS -lX11"
+    pushd src
   '';
 
-  doUnpack = a.fullDepEntry ''
-    mkdir -p $out/share/sauerbraten/build-dir
-    ln -s  $out/share/sauerbraten/build-dir
-    cd $out/share/sauerbraten/build-dir
-    (cd ${src}; find . -type d) | tail -n +2 | xargs -L 1 mkdir
-    (cd ${src}; find . -type f) | while read; do ln -s ${src}/"$REPLY" "$(dirname "$REPLY")"; done
-    cd src
-    ls
-    make clean
-    sed -e '/[.]h[.]gch/,/-o/s@-o@-x c++-header -o@' -i Makefile
-  '' ["minInit" "addInputs" "defEnsureDir"];
-
-  doCreateScripts = a.fullDepEntry ''
-    cd ..
-    mkdir -p $out/bin
-    echo '#! /bin/sh' >> $out/bin/sauerbraten_server
-    echo 'cd "'"$out"'/share/sauerbraten/build-dir"' >> $out/bin/sauerbraten_server
-    echo './bin_unix/native_server "$@"' >> $out/bin/sauerbraten_server
-    echo '#! /bin/sh' >> $out/bin/sauerbraten_client
-    echo 'cd "'"$out"'/share/sauerbraten/build-dir"' >> $out/bin/sauerbraten_client
-    echo './bin_unix/native_client "$@"' >> $out/bin/sauerbraten_client
+  installPhase = ''
+    popd
+    mkdir -p $out/bin $out/share/sauerbraten $out/share/doc/sauerbraten
+    cp -rv "docs/"* $out/share/doc/sauerbraten/
+    cp -v src/sauer_client src/sauer_server $out/share/sauerbraten/
+    cp -rv packages $out/share/sauerbraten/
+    cp -rv data $out/share/sauerbraten/
+    cat > $out/bin/sauerbraten_server <<EOF
+    #!${stdenv.shell}
+    cd $out/share/sauerbraten
+    ./sauer_server "\$@"
+    EOF
+    cat > $out/bin/sauerbraten_client <<EOF
+    #!${stdenv.shell}
+    cd $out/share/sauerbraten
+    ./sauer_client "\$@"
+    EOF
     chmod a+x $out/bin/sauerbraten_*
-  '' ["minInit" "defEnsureDir"];
-      
-  meta = {
+  '';
+
+  meta = with stdenv.lib; {
     description = "";
-    maintainers = with a.lib.maintainers;
-    [
-      raskin
-    ];
+    maintainers = [ maintainers.raskin ];
     hydraPlatforms =
       # raskin: tested amd64-linux;
       # not setting platforms because it is 0.5+ GiB of game data
       [];
     license = "freeware"; # as an aggregate - data files have different licenses
                           # code is under zlib license
+    platforms = platforms.linux;
   };
-}) x
-
+}
diff --git a/pkgs/games/stardust/default.nix b/pkgs/games/stardust/default.nix
index c7ee0df6a7a..aa68da6b73d 100644
--- a/pkgs/games/stardust/default.nix
+++ b/pkgs/games/stardust/default.nix
@@ -1,62 +1,31 @@
-x@{builderDefsPackage
-  , zlib, libtiff, libxml2, SDL, xproto, libX11, libXi, inputproto, libXmu
-  , libXext, xextproto, mesa
-  , ...}:
-builderDefsPackage
-(a :  
-let 
-  helperArgNames = ["stdenv" "fetchurl" "builderDefsPackage"] ++ 
-    [];
+{ stdenv, fetchurl, zlib, libtiff, libxml2, SDL, xproto, libX11
+, libXi, inputproto, libXmu, libXext, xextproto, mesa }:
 
-  buildInputs = map (n: builtins.getAttr n x)
-    (builtins.attrNames (builtins.removeAttrs x helperArgNames));
-  sourceInfo = rec {
-    baseName="stardust";
-    version="0.1.13";
-    name="${baseName}-${version}";
-    url="http://iwar.free.fr/IMG/gz/${name}.tar.gz";
-    hash="19rs9lz5y5g2yiq1cw0j05b11digw40gar6rw8iqc7bk3s8355xp";
-  };
-in
-rec {
-  src = a.fetchurl {
-    url = sourceInfo.url;
-    sha256 = sourceInfo.hash;
-  };
+stdenv.mkDerivation rec {
+  name = "stardust-${version}";
+  version = "0.1.13";
 
-  inherit (sourceInfo) name version;
-  inherit buildInputs;
-
-  /* doConfigure should be removed if not needed */
-  phaseNames = ["doConfigure" "fixPaths" "doMakeInstall"];
+  src = fetchurl {
+    url = "http://iwar.free.fr/IMG/gz/${name}.tar.gz";
+    sha256 = "19rs9lz5y5g2yiq1cw0j05b11digw40gar6rw8iqc7bk3s8355xp";
+  };
 
-  configureFlags = [
-    "--bindir=$out/bin"
-    "--datadir=$out/share"
-  ];
-  
-  makeFlags = [
-    "bindir=$out/bin"
-    "datadir=$out/share"
+  buildInputs = [
+    zlib libtiff libxml2 SDL xproto libX11 libXi inputproto
+    libXmu libXext xextproto mesa
   ];
 
-  fixPaths = a.fullDepEntry (''
-    sed -e "s@#define PACKAGE .*@#define PACKAGE \"stardust\"@" -i config.h
-  '') ["minInit"];
+  installFlags = [ "bindir=\${out}/bin" ];
+
+  postConfigure = ''
+    substituteInPlace config.h \
+      --replace '#define PACKAGE ""' '#define PACKAGE "stardust"'
+  '';
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "Space flight simulator";
-    maintainers = with a.lib.maintainers;
-    [
-      raskin
-    ];
-    platforms = with a.lib.platforms;
-      linux;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
   };
-  passthru = {
-    updateInfo = {
-      downloadPage = "http://iwar.free.fr/article.php3?id_article=6";
-    };
-  };
-}) x
-
+}
diff --git a/pkgs/games/super-tux/default.nix b/pkgs/games/super-tux/default.nix
index 11429cfadd2..163320d8ae2 100644
--- a/pkgs/games/super-tux/default.nix
+++ b/pkgs/games/super-tux/default.nix
@@ -1,25 +1,19 @@
-{ stdenv, fetchFromGitHub, cmake, pkgconfig, SDL2, SDL2_image, SDL2_mixer
+{ stdenv, fetchurl, cmake, pkgconfig, SDL2, SDL2_image, SDL2_mixer
 , curl, gettext, libogg, libvorbis, mesa, openal, physfs, boost, glew
 , libiconv }:
 
 stdenv.mkDerivation rec {
   name = "supertux-${version}";
-  version = "0.3.5a";
+  version = "0.4.0";
 
-  src = fetchFromGitHub {
-    owner = "SuperTux";
-    repo = "supertux";
-    rev = "v${version}";
-    sha256 = "0f522wsv0gx7v1h70x8xznklaqr5bm2l9h7ls9vjywy0z4iy1ahp";
+  src = fetchurl {
+    url = https://github.com/SuperTux/supertux/releases/download/v0.4.0/supertux-0.4.0.tar.bz2;
+    sha256 = "10ppmy6w77lxj8bdzjahc9bidgl4qgzr9rimn15rnqay84ydx3fi";
   };
 
   buildInputs = [ pkgconfig cmake SDL2 SDL2_image SDL2_mixer curl gettext
                   libogg libvorbis mesa openal physfs boost glew libiconv ];
 
-  preConfigure = ''
-    patchShebangs configure
-  '';
-
   postInstall = ''
     mkdir $out/bin
     ln -s $out/games/supertux2 $out/bin
diff --git a/pkgs/games/terraria-server/default.nix b/pkgs/games/terraria-server/default.nix
new file mode 100644
index 00000000000..4eeefc2801b
--- /dev/null
+++ b/pkgs/games/terraria-server/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, file, fetchurl }:
+assert stdenv.system == "x86_64-linux";
+
+stdenv.mkDerivation rec {
+  name    = "terraria-server-${version}";
+  version = "1308";
+
+  src = fetchurl {
+    url = http://terraria.org/server/terraria-server-linux-1308.tar.gz;
+    sha256 = "0cx3nx7wmzcw9l0nz9zm4amccl8nrd09hlb3jc1yrqcaswbyxc8a";
+  };
+
+  buildInputs = [ file ];
+
+  sourceRoot = ".";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r * $out/
+    ln -s $out/terraria-server-linux-${version}/TerrariaServer.bin.x86_64 $out/bin/TerrariaServer
+
+    # Fix "/lib64/ld-linux-x86-64.so.2" like references in ELF executables.
+    echo "running patchelf on prebuilt binaries:"
+    find "$out" | while read filepath; do
+      if file "$filepath" | grep -q "ELF.*executable"; then
+        echo "setting interpreter $(cat "$NIX_CC"/nix-support/dynamic-linker) in $filepath"
+        patchelf --set-interpreter "$(cat "$NIX_CC"/nix-support/dynamic-linker)" "$filepath"
+        test $? -eq 0 || { echo "patchelf failed to process $filepath"; exit 1; }
+      fi
+    done
+  '';
+
+  meta = with lib; {
+    homepage = http://terraria.org;
+    description = "Dedicated server for the main game";
+    platforms = platforms.linux;
+    license = licenses.unfree;
+  };
+}
diff --git a/pkgs/games/the-butterfly-effect/default.nix b/pkgs/games/the-butterfly-effect/default.nix
index 3cf91e11a55..8775fb103d8 100644
--- a/pkgs/games/the-butterfly-effect/default.nix
+++ b/pkgs/games/the-butterfly-effect/default.nix
@@ -1,64 +1,28 @@
-x@{builderDefsPackage
-  , qt4, box2d, which
-  ,fetchsvn, cmake
-  , ...}:
-builderDefsPackage
-(a :
-let
-  helperArgNames = ["stdenv" "fetchurl" "builderDefsPackage"] ++
-    ["fetchsvn"];
+{ stdenv, fetchurl, qt4, box2d, which, cmake }:
 
-  buildInputs = map (n: builtins.getAttr n x)
-    (builtins.attrNames (builtins.removeAttrs x helperArgNames));
-  sourceInfo = rec {
-    baseName="tbe";
-    revision="2048";
-    version="r${revision}";
-    name="${baseName}-${version}";
-    url="https://tbe.svn.sourceforge.net/svnroot/tbe/trunk";
-    hash="19pqpkil4r5y9j4nszkbs70lq720nvqw8g8magd8nf2n3l9nqm51";
-  };
-in
-rec {
-  srcDrv = a.fetchsvn {
-    url = sourceInfo.url;
-    sha256 = sourceInfo.hash;
-    rev = sourceInfo.revision;
-  };
-  src = srcDrv + "/";
+stdenv.mkDerivation rec {
+  name = "tbe-${version}";
+  version = "0.9.2.1";
 
-  inherit (sourceInfo) name version;
-  inherit buildInputs;
+  src = fetchurl {
+    url = "https://github.com/kaa-ching/tbe/archive/v${version}.tar.gz";
+    sha256 = "1cs4q9qiakfd2m1lvfsvfgf8yvhxzmc06glng5d80piwyn6ymzxg";
+  };
 
-  phaseNames = ["setVars" "doCmake" "doMakeInstall" "doDeploy"];
+  buildInputs = [ qt4 box2d which cmake ];
 
-  setVars = a.noDepEntry ''
-    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${a.box2d}/include/Box2D"
+  installPhase = ''
+    make DESTDIR=.. install
+    mkdir -p $out/bin
+    cp ../usr/games/tbe $out/bin
+    cp -r ../usr/share $out/
   '';
 
-  doDeploy = a.fullDepEntry ''
-    mkdir -p "$out/share/tbe"
-    cp -r . "$out/share/tbe/build-dir"
-    mkdir -p "$out/bin"
-    echo '#!${a.stdenv.shell}' >> "$out/bin/tbe"
-    echo "$out/share/tbe/build-dir/tbe \"\$@\"" >> "$out/bin/tbe"
-    chmod a+x "$out/bin/tbe"
-  '' ["minInit" "doMake" "defEnsureDir"];
-
-  meta = {
+  meta = with stdenv.lib; {
     description = "A physics-based game vaguely similar to Incredible Machine";
-    maintainers = with a.lib.maintainers;
-    [
-      raskin
-    ];
-    platforms = with a.lib.platforms;
-      linux;
-    license = a.stdenv.lib.licenses.gpl2;
-  };
-  passthru = {
-    inherit srcDrv;
-    updateInfo = {
-      downloadPage = "http://sourceforge.net/projects/tbe/files/";
-    };
+    homepage = http://the-butterfly-effect.org/;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
   };
-}) x
+}
diff --git a/pkgs/games/tome4/default.nix b/pkgs/games/tome4/default.nix
index 7b7b0808aa9..8ad0f7723c0 100644
--- a/pkgs/games/tome4/default.nix
+++ b/pkgs/games/tome4/default.nix
@@ -1,11 +1,11 @@
 {stdenv, fetchurl, openal, libvorbis, mesa_glu, premake4, SDL2, SDL2_image, SDL2_ttf}:
 
 stdenv.mkDerivation rec {
-  version = "1.3.1";
+  version = "1.3.3";
   name = "tome4-${version}";
   src = fetchurl {
-    url = "http://te4.org/dl/t-engine/t-engine4-src-1.3.1.tar.bz2";
-    sha256 = "9b6658e29ad3be9f8469a61e724350f4dfec676777e471f633d616443dfbc7e7";
+    url = "http://te4.org/dl/t-engine/t-engine4-src-${version}.tar.bz2";
+    sha256 = "d4c6d6aa0cb73b28172cebf89e4271b0a51c6e7dea744ce9c6d6042dd076e9cd";
   };
   buildInputs = [ mesa_glu openal libvorbis SDL2 SDL2_ttf SDL2_image premake4 ];
   preConfigure = ''
diff --git a/pkgs/games/zandronum/bin.nix b/pkgs/games/zandronum/bin.nix
index 453f7dc1c1d..cf46877ef71 100644
--- a/pkgs/games/zandronum/bin.nix
+++ b/pkgs/games/zandronum/bin.nix
@@ -18,10 +18,9 @@
 , zlib
 }:
 
-assert stdenv.system == "x86_64-linux";
-
 stdenv.mkDerivation rec {
   name = "zandronum-2.1.2";
+
   src = fetchurl {
     url = "http://zandronum.com/downloads/zandronum2.1.2-linux-x86_64.tar.bz2";
     sha256 = "1f5aw2m8c0bl3lrvi2k3rrzq3q9x1ikxnxxjgh3k9qvanfn7ykbk";
@@ -49,38 +48,30 @@ stdenv.mkDerivation rec {
 
   phases = [ "unpackPhase" "installPhase" ];
 
-  unpackPhase = ''
-    tar xf $src
-  '';
+  sourceRoot = ".";
 
   installPhase = ''
     mkdir -p $out/bin
-    mkdir -p $out/share
-    cp * $out/share
-
-    patchelf --set-interpreter ${stdenv.glibc}/lib/ld-linux-x86-64.so.2 $out/share/zandronum
-    patchelf --set-interpreter ${stdenv.glibc}/lib/ld-linux-x86-64.so.2 $out/share/zandronum-server
+    mkdir -p $out/share/zandronum
+    cp *.so *.pk3 zandronum zandronum-server $out/share/zandronum
 
-    cat > $out/bin/zandronum << EOF
-    #!/bin/sh
+    patchelf \
+      --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
+      --set-rpath $libPath:$out/share/zandronum \
+      $out/share/zandronum/zandronum
+    patchelf \
+      --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
+      --set-rpath $libPath \
+      $out/share/zandronum/zandronum-server
 
-    LD_LIBRARY_PATH=$libPath:$out/share $out/share/zandronum "\$@"
-    EOF
-
-    cat > $out/bin/zandronum-server << EOF
-    #!/bin/sh
-
-    LD_LIBRARY_PATH=$libPath:$out/share $out/share/zandronum-server "\$@"
-    EOF
-
-    chmod +x "$out/bin/zandronum"
-    chmod +x "$out/bin/zandronum-server"
+    ln -s $out/share/zandronum/zandronum $out/bin/zandronum
+    ln -s $out/share/zandronum/zandronum-server $out/bin/zandronum-server
   '';
 
   meta = {
     homepage = http://zandronum.com/;
     description = "multiplayer oriented port, based off Skulltag, for Doom and Doom II by id Software. Binary version for online play.";
     maintainer = [ stdenv.lib.maintainers.lassulus ];
+    platforms = [ "x86_64-linux" ];
   };
 }
-
diff --git a/pkgs/games/zandronum/default.nix b/pkgs/games/zandronum/default.nix
index b92551a78bf..ecdf8cfdbd2 100644
--- a/pkgs/games/zandronum/default.nix
+++ b/pkgs/games/zandronum/default.nix
@@ -1,43 +1,61 @@
-{ stdenv, fetchhg, cmake, SDL, mesa, fmod42416, openssl, sqlite, sqlite-amalgamation }:
+{ stdenv, lib, fetchhg, cmake, pkgconfig, makeWrapper
+, SDL, mesa, bzip2, zlib, fmod, libjpeg, fluidsynth, openssl, sqlite-amalgamation
+, serverOnly ? false
+}:
+
+let suffix = lib.optionalString serverOnly "-server";
+
+# FIXME: drop binary package when upstream fixes their protocol versioning
+in stdenv.mkDerivation {
+  name = "zandronum${suffix}-2.1.2";
 
-stdenv.mkDerivation {
-  name = "zandronum-2.1.2";
   src = fetchhg {
     url = "https://bitbucket.org/Torr_Samaho/zandronum-stable";
     rev = "a3663b0061d5";
     sha256 = "0qwsnbwhcldwrirfk6hpiklmcj3a7dzh6pn36nizci6pcza07p56";
   };
 
-  phases = [ "unpackPhase" "configurePhase" "buildPhase" "installPhase" ];
+  # I have no idea why would SDL and libjpeg be needed for the server part!
+  # But they are.
+  buildInputs = [ openssl bzip2 zlib SDL libjpeg ]
+             ++ lib.optionals (!serverOnly) [ mesa fmod fluidsynth ];
 
-  buildInputs = [ cmake SDL mesa fmod42416 openssl sqlite sqlite-amalgamation ];
+  nativeBuildInputs = [ cmake pkgconfig makeWrapper ];
 
   preConfigure = ''
-    cp ${sqlite-amalgamation}/* sqlite/
+    ln -s ${sqlite-amalgamation}/* sqlite/
   '';
 
-  cmakeFlags = [
-    "-DFMOD_LIBRARY=${fmod42416}/lib/libfmodex.so"
-  ];
+  cmakeFlags =
+    lib.optional (!serverOnly) "-DFMOD_LIBRARY=${fmod}/lib/libfmodex.so"
+    ++ lib.optional serverOnly "-DSERVERONLY=ON"
+    ;
+
+  enableParallelBuilding = true;
 
   installPhase = ''
     mkdir -p $out/bin
-    mkdir -p $out/share
-    cp zandronum zandronum.pk3 skulltag_actors.pk3 liboutput_sdl.so $out/share
-
-    cat > $out/bin/zandronum << EOF
-    #!/bin/sh
-
-    LD_LIBRARY_PATH=$out/share $out/share/zandronum "\$@"
-    EOF
+    mkdir -p $out/share/zandronum
+    cp zandronum${suffix} \
+       zandronum.pk3 \
+       skulltag_actors.pk3 \
+       ${lib.optionalString (!serverOnly) "liboutput_sdl.so"} \
+       $out/share/zandronum
+
+    # For some reason, while symlinks work for binary version, they don't for source one.
+    makeWrapper $out/share/zandronum/zandronum${suffix} $out/bin/zandronum${suffix}
+  '';
 
-    chmod +x "$out/bin/zandronum"
+  postFixup = lib.optionalString (!serverOnly) ''
+    patchelf --set-rpath $(patchelf --print-rpath $out/share/zandronum/zandronum):$out/share/zandronum \
+      $out/share/zandronum/zandronum
   '';
 
-  meta = {
+  meta = with stdenv.lib; {
     homepage = http://zandronum.com/;
     description = "Multiplayer oriented port, based off Skulltag, for Doom and Doom II by id Software.";
-    maintainer = [ stdenv.lib.maintainers.lassulus ];
+    maintainer = with maintainers; [ lassulus ];
+    platforms = platforms.linux;
+    license = licenses.bsdOriginal;
   };
 }
-
diff --git a/pkgs/games/zandronum/server.nix b/pkgs/games/zandronum/server.nix
deleted file mode 100644
index eec2c3acc9c..00000000000
--- a/pkgs/games/zandronum/server.nix
+++ /dev/null
@@ -1,44 +0,0 @@
-{ stdenv, fetchhg, cmake, openssl, sqlite, sqlite-amalgamation, SDL }:
-
-stdenv.mkDerivation {
-  name = "zandronum-server-2.1.2";
-  src = fetchhg {
-    url = "https://bitbucket.org/Torr_Samaho/zandronum-stable";
-    rev = "a3663b0061d5";
-    sha256 = "0qwsnbwhcldwrirfk6hpiklmcj3a7dzh6pn36nizci6pcza07p56";
-  };
-
-  phases = [ "unpackPhase" "configurePhase" "buildPhase" "installPhase" ];
-
-  buildInputs = [ cmake openssl sqlite sqlite-amalgamation SDL ];
-
-  preConfigure = ''
-    cp ${sqlite-amalgamation}/* sqlite/
-  '';
-
-  cmakeFlags = [
-    "-DSERVERONLY=ON"
-  ];
-
-  installPhase = ''
-    find
-    mkdir -p $out/bin
-    mkdir -p $out/share
-    cp zandronum-server zandronum.pk3 skulltag_actors.pk3 $out/share
-
-    cat > $out/bin/zandronum-server << EOF
-    #!/bin/sh
-
-    LD_LIBRARY_PATH=$out/share $out/share/zandronum-server "\$@"
-    EOF
-
-    chmod +x "$out/bin/zandronum-server"
-  '';
-
-  meta = {
-    homepage = http://zandronum.com/;
-    description = "Server of the multiplayer oriented port, based off Skulltag, for Doom and Doom II by id Software";
-    maintainer = [ stdenv.lib.maintainers.lassulus ];
-  };
-}
-