Dwarf Fortress

The wrapper script works by creating an image of the distribution in the users home directory
(defaulting to $HOME/.config/df_linux).  This is done because the program expects to write
state into it's own distribution.

Better ideas are welcome!

What further is needed is to allow users to configure the init.  One way is to use nix-config
to apply patches to the init.txt file, though this would break sharing of the package between
different users.


svn path=/nixpkgs/trunk/; revision=24538
This commit is contained in:
Russell O'Connor 2010-10-30 06:00:44 +00:00
parent c955a570a2
commit cb72dd1ba8
3 changed files with 134 additions and 0 deletions

View file

@ -0,0 +1,90 @@
{stdenv, fetchurl, SDL, SDL_image, SDL_ttf, gnomegtk, glib, mesa, openal, glibc, libsndfile}:
assert stdenv.system == "i686-linux";
stdenv.mkDerivation rec {
name = "dwarf-fortress-0.31.16";
src = fetchurl {
url = "http://www.bay12games.com/dwarves/df_31_16_linux.tar.bz2";
sha256 = "04pyxyigrrclbpxdx3wryisgy5xraz0s7rsxr2kp4i136479f2r4";
};
phases = "unpackPhase patchPhase installPhase";
/* :TODO: Game options should be configurable by patching the default configuration files */
permission = ./df_permission;
installPhase = ''
set -x
ensureDir $out/bin
ensureDir $out/share/df_linux
cp -r * $out/share/df_linux
cp $permission $out/share/df_linux/nix_permission
patchelf --set-interpreter ${glibc}/lib/ld-linux.so.2 $out/share/df_linux/libs/Dwarf_Fortress
ln -s ${libsndfile}/lib/libsndfile.so $out/share/df_linux/libs/
cat > $out/bin/dwarf-fortress << EOF
#!${stdenv.shell}
export DF_DIR="\$HOME/.config/df_linux"
if [ -n "\$XDG_DATA_HOME" ]
then export DF_DIR="\$XDG_DATA_HOME/df_linux"
fi
# Recreate a directory sturctor reflecting the original distribution in the user directory
# Now link in the static data
mkdir -p \$DF_DIR
ln -sf $out/share/df_linux/libs \$DF_DIR/
ln -sf $out/share/df_linux/raw \$DF_DIR/
ln -sf $out/share/df_linux/df \$DF_DIR/
# Delete old data directory
rm -rf \$DF_DIR/data
# Link in the data directory
mkdir \$DF_DIR/data
for i in $out/share/df_linux/data/*
do
ln -s \$i \$DF_DIR/data/
done
# index as of 0.31.16 opened in read/write mode
# this is a hack to work around this
rm \$DF_DIR/data/index
cp $out/share/df_linux/data/index \$DF_DIR/data/index
chmod u+w \$DF_DIR/data/index
# initial_movies files are as of 0.31.16 opened in read/write mode instead of read-only mode
# this is a hack to work around this
rm \$DF_DIR/data/initial_movies
cp -rf $out/share/df_linux/data/initial_movies \$DF_DIR/data/
chmod -R u+w \$DF_DIR/data/initial_movies
# announcement files are as of 0.31.16 opened in read/write mode instead of read-only mode
# this is a hack to work around this
rm \$DF_DIR/data/announcement
cp -rf $out/share/df_linux/data/announcement \$DF_DIR/data/
chmod -R u+w \$DF_DIR/data/announcement
# link in persistant data
mkdir -p \$DF_DIR/save
ln -s \$DF_DIR/save \$DF_DIR/data/
# now run Dwarf Fortress!
export LD_LIBRARY_PATH=\$DF_DIR/df_linux/libs/:${SDL}/lib:${SDL_image}/lib/:${SDL_ttf}/lib/:${gnomegtk}/lib/:${glib}/lib/:${mesa}/lib/:${openal}/lib/
\$DF_DIR/df "\$@"
EOF
chmod +x $out/bin/dwarf-fortress
'';
meta = {
description = "control a dwarven outpost or an adventurer in a randomly generated, persistent world";
homepage = http://www.bay12games.com/dwarves;
license = "unfree-redistributable";
maintainers = [stdenv.lib.maintainers.roconnor];
};
}

View file

@ -0,0 +1,40 @@
From tarn.adams@gmail.com Sat Oct 30 00:56:16 2010
Date: Fri, 29 Oct 2010 16:56:15 -0800
From: Tarn Adams <tarn.adams@gmail.com>
To: roconnor@theorem.ca
Subject: Re: Dwarf Fortress Redistribution for NixOS
Sure, that redistribution is fine. I think I've handled the movie
issue for next time now. Thanks for the heads up on that.
Tarn
On Fri, Oct 29, 2010 at 6:56 AM, <roconnor@theorem.ca> wrote:
> I'd like to distribute a *slightly* modified version of Dwarf Fortress which
> is needed to run it under the NixOS distribution of Linux (see
> <http://nixos.org/>
>
> Modification: The interpreter location /lib/ld-linux.so.2 in
> lib/Dwarf_Fortress is replaced with the location of ld-linux.so.2 under the
> NixOS distribution (which is currently
> /nix/store/l8x3fdy1r6zf441vnqa87lzsvxrjbdz9-glibc-2.11.1/lib/ld-linux.so.2
> but might change at a later date to something similar).
>
> I don't need you to recompile Dwarf Fortress.  I can patch the binary itself
> using patchelf.  I just would like your permission to redistrubute this
> modified binary.
>
> Thanks, I'm looking forward to trying out your game and letting other Nix
> users try it out too.
>
> P.S. the inital_movies are open in read/write mode instead of read-only mode
> which causes some issues under NixOS because the inital_movies are stored
> read-only.  I have a workaround, but you may want to consider opening these
> files in read-only mode.
>
> --
> Russell O'Connor                                      <http://r6.ca/>
> ``All talk about `theft,''' the general counsel of the American Graphophone
> Company wrote, ``is the merest claptrap, for there exists no property in
> ideas musical, literary or artistic, except as defined by statute.''
>

View file

@ -6518,6 +6518,10 @@ let
crack_attack = callPackage ../games/crack-attack { };
dwarf_fortress = callPackage ../games/dwarf-fortress {
gnomegtk = gnome.gtk;
};
eduke32 = callPackage ../games/eduke32 { };
egoboo = callPackage ../games/egoboo { };