diff --git a/pkgs/games/fallout-ce/build.nix b/pkgs/games/fallout-ce/build.nix new file mode 100644 index 000000000000..c220895db08c --- /dev/null +++ b/pkgs/games/fallout-ce/build.nix @@ -0,0 +1,77 @@ +{ cmake +, fpattern +, lib +, SDL2 +, stdenv +, writeShellScript + +, extraBuildInputs ? [ ] +, extraMeta +, pname +, version +, src +}: + +let + launcher = writeShellScript "${pname}" '' + set -eu + assetDir="''${XDG_DATA_HOME:-$HOME/.local/share}/${pname}" + [ -d "$assetDir" ] || mkdir -p "$assetDir" + cd "$assetDir" + + notice=0 fault=0 + requiredFiles=(master.dat critter.dat) + for f in "''${requiredFiles[@]}"; do + if [ ! -f "$f" ]; then + echo "Required file $f not found in $PWD, note the files are case-sensitive" + notice=1 fault=1 + fi + done + + if [ ! -d "data/sound/music" ]; then + echo "data/sound/music directory not found in $PWD. This may prevent in-game music from functioning." + notice=1 + fi + + if [ $notice -ne 0 ]; then + echo "Please reference the installation instructions at https://github.com/alexbatalov/fallout2-ce" + fi + + if [ $fault -ne 0 ]; then + exit $fault; + fi + + exec @out@/libexec/${pname} "$@" + ''; +in +stdenv.mkDerivation { + inherit pname version src; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ SDL2 ] ++ extraBuildInputs; + hardeningDisable = [ "format" ]; + cmakeBuildType = "RelWithDebInfo"; + + postPatch = '' + substituteInPlace third_party/fpattern/CMakeLists.txt \ + --replace "FetchContent_Populate" "#FetchContent_Populate" \ + --replace "{fpattern_SOURCE_DIR}" "${fpattern}/include" \ + --replace "$/nix/" "/nix/" + ''; + + installPhase = '' + runHook preInstall + + install -D ${pname} $out/libexec/${pname} + install -D ${launcher} $out/bin/${pname} + substituteInPlace $out/bin/${pname} --subst-var out + + runHook postInstall + ''; + + meta = with lib; { + license = licenses.sustainableUse; + maintainers = with maintainers; [ hughobrien TheBrainScrambler ]; + platforms = platforms.linux; + } // extraMeta; +} diff --git a/pkgs/games/fallout-ce/fallout-ce.nix b/pkgs/games/fallout-ce/fallout-ce.nix new file mode 100644 index 000000000000..5f55743a674b --- /dev/null +++ b/pkgs/games/fallout-ce/fallout-ce.nix @@ -0,0 +1,20 @@ +{ callPackage +, fetchFromGitHub +}: + +callPackage ./build.nix rec { + pname = "fallout-ce"; + version = "1.0.0"; + + src = fetchFromGitHub { + owner = "alexbatalov"; + repo = "fallout1-ce"; + rev = "v${version}"; + hash = "sha256-EvRkOlvtiVao63S0WRKKuHlhfkdTgc0m6GTyv4EfJFU="; + }; + + extraMeta = { + description = "A fully working re-implementation of Fallout, with the same original gameplay, engine bugfixes, and some quality of life improvements"; + homepage = "https://github.com/alexbatalov/fallout1-ce"; + }; +} diff --git a/pkgs/games/fallout-ce/fallout2-ce.nix b/pkgs/games/fallout-ce/fallout2-ce.nix new file mode 100644 index 000000000000..b28a9701c202 --- /dev/null +++ b/pkgs/games/fallout-ce/fallout2-ce.nix @@ -0,0 +1,23 @@ +{ callPackage +, fetchFromGitHub +, zlib +}: + +callPackage ./build.nix rec { + pname = "fallout2-ce"; + version = "1.2.0"; + + src = fetchFromGitHub { + owner = "alexbatalov"; + repo = "fallout2-ce"; + rev = "v${version}"; + hash = "sha256-+N4jhmxBX6z48kaU0jm90OKhguHlggT3OF9uuyY0EV0="; + }; + + extraBuildInputs = [ zlib ]; + + extraMeta = { + description = "A fully working re-implementation of Fallout 2, with the same original gameplay, engine bugfixes, and some quality of life improvements"; + homepage = "https://github.com/alexbatalov/fallout2-ce"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 39458901bb7b..f7d7dee32309 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -37886,6 +37886,9 @@ with pkgs; exult = callPackage ../games/exult { }; + fallout-ce = callPackage ../games/fallout-ce/fallout-ce.nix { }; + fallout2-ce = callPackage ../games/fallout-ce/fallout2-ce.nix { }; + flare = callPackage ../games/flare { inherit (darwin.apple_sdk.frameworks) Cocoa; };