diff options
Diffstat (limited to 'pkgs/games')
-rw-r--r-- | pkgs/games/ivan/default.nix | 44 | ||||
-rw-r--r-- | pkgs/games/ivan/homedir.patch | 75 |
2 files changed, 119 insertions, 0 deletions
diff --git a/pkgs/games/ivan/default.nix b/pkgs/games/ivan/default.nix new file mode 100644 index 000000000000..50b9f03d4bc9 --- /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 000000000000..312099f7ffd9 --- /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__) |