diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 92a4a6e8b41..4c312316da4 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -2770,6 +2770,11 @@ github = "nocoolnametom"; name = "Tom Doggett"; }; + nonfreeblob = { + email = "nonfreeblob@yandex.com"; + github = "nonfreeblob"; + name ="nonfreeblob"; + }; notthemessiah = { email = "brian.cohen.88@gmail.com"; github = "notthemessiah"; diff --git a/pkgs/games/ivan/default.nix b/pkgs/games/ivan/default.nix new file mode 100644 index 00000000000..50b9f03d4bc --- /dev/null +++ b/pkgs/games/ivan/default.nix @@ -0,0 +1,44 @@ +{stdenv, fetchFromGitHub, libpng, cmake, SDL2, SDL2_mixer, pkgconfig, pcre}: + +stdenv.mkDerivation rec { + + name = "ivan-${version}"; + version = "052"; + + src = fetchFromGitHub { + owner = "Attnam"; + repo = "ivan"; + rev = "v${version}"; + sha256 = "1vvwb33jw4ppwsqlvaxq3b8npdzh9j9jfangyzszp5sfnnd7fj5b"; + }; + + buildInputs = [SDL2 SDL2_mixer libpng pcre]; + + nativeBuildInputs = [cmake pkgconfig]; + + hardeningDisable = ["all"]; + + # To store bone and high score files in ~/.ivan of the current user + patches = [./homedir.patch]; + + # Enable wizard mode + cmakeFlags = ["-DCMAKE_CXX_FLAGS=-DWIZARD"]; + + # Help CMake find SDL_mixer.h + NIX_CFLAGS_COMPILE = "-I${SDL2_mixer}/include/SDL2"; + + meta = with stdenv.lib; { + description = "Graphical roguelike game"; + longDescription = '' + Iter Vehemens ad Necem (IVAN) is a graphical roguelike game, which currently + runs in Windows, DOS, Linux, and OS X. It features advanced bodypart and + material handling, multi-colored lighting and, above all, deep gameplay. + + This is a fan continuation of IVAN by members of Attnam.com + ''; + homepage = https://attnam.com/; + license = licenses.gpl2Plus; + platforms = platforms.linux; + maintainers = with maintainers; [nonfreeblob]; + }; +} diff --git a/pkgs/games/ivan/homedir.patch b/pkgs/games/ivan/homedir.patch new file mode 100644 index 00000000000..312099f7ffd --- /dev/null +++ b/pkgs/games/ivan/homedir.patch @@ -0,0 +1,75 @@ +diff --git a/FeLib/Include/hscore.h b/FeLib/Include/hscore.h +index 4caf3ff..1a02845 100644 +--- a/FeLib/Include/hscore.h ++++ b/FeLib/Include/hscore.h +@@ -31,11 +31,11 @@ class festring; + class highscore + { + public: +- highscore(cfestring& = HIGH_SCORE_FILENAME); ++ highscore(); + truth Add(long, cfestring&); + void Draw() const; +- void Save(cfestring& = HIGH_SCORE_FILENAME) const; +- void Load(cfestring& = HIGH_SCORE_FILENAME); ++ void Save() const; ++ void Load(); + truth LastAddFailed() const; + void AddToFile(highscore*) const; + truth MergeToFile(highscore*) const; +diff --git a/FeLib/Source/hscore.cpp b/FeLib/Source/hscore.cpp +index 2e5318d..ff9c174 100644 +--- a/FeLib/Source/hscore.cpp ++++ b/FeLib/Source/hscore.cpp +@@ -23,7 +23,7 @@ cfestring& highscore::GetEntry(int I) const { return Entry[I]; } + long highscore::GetScore(int I) const { return Score[I]; } + long highscore::GetSize() const { return Entry.size(); } + +-highscore::highscore(cfestring& File) : LastAdd(0xFF), Version(HIGH_SCORE_VERSION) { Load(File); } ++highscore::highscore() : LastAdd(0xFF), Version(HIGH_SCORE_VERSION) { Load(); } + + truth highscore::Add(long NewScore, cfestring& NewEntry, + time_t NewTime, long NewRandomID) +@@ -98,8 +98,12 @@ void highscore::Draw() const + List.Draw(); + } + +-void highscore::Save(cfestring& File) const ++void highscore::Save() const + { ++ std::string buffer(getenv("HOME")); ++ buffer.append("/.ivan/ivan-highscore.scores"); ++ cfestring& File = buffer.c_str(); ++ + outputfile HighScore(File); + long CheckSum = HIGH_SCORE_VERSION + LastAdd; + for(ushort c = 0; c < Score.size(); ++c) +@@ -112,8 +116,12 @@ void highscore::Save(cfestring& File) const + } + + /* This function needs much more error handling */ +-void highscore::Load(cfestring& File) ++void highscore::Load() + { ++ std::string buffer(getenv("HOME")); ++ buffer.append("/.ivan/ivan-highscore.scores"); ++ cfestring& File = buffer.c_str(); ++ + { + inputfile HighScore(File, 0, false); + +diff --git a/Main/Source/game.cpp b/Main/Source/game.cpp +index 8927305..c18e790 100644 +--- a/Main/Source/game.cpp ++++ b/Main/Source/game.cpp +@@ -2380,7 +2380,9 @@ festring game::GetDataDir() + festring game::GetBoneDir() + { + #ifdef UNIX +- return LOCAL_STATE_DIR "/Bones/"; ++ festring BoneDir; ++ BoneDir << getenv("HOME") << "/.ivan/Bones/"; ++ return BoneDir; + #endif + + #if defined(WIN32) || defined(__DJGPP__) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 34fd1a7672b..e8e090a8749 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3159,6 +3159,8 @@ with pkgs; isync = callPackage ../tools/networking/isync { }; isyncUnstable = callPackage ../tools/networking/isync/unstable.nix { }; + ivan = callPackage ../games/ivan { }; + jaaa = callPackage ../applications/audio/jaaa { }; jackett = callPackage ../servers/jackett {