commit:     6fea813162aac21d7794396946e56e33475981bd
Author:     Nicola Smaniotto <smaniotto.nicola <AT> gmail <DOT> com>
AuthorDate: Mon Nov  8 12:07:43 2021 +0000
Commit:     Nicola Smaniotto <smaniotto.nicola <AT> gmail <DOT> com>
CommitDate: Mon Nov  8 12:08:18 2021 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=6fea8131

games-arcade/SpaceCadetPinball: new package (2.0)

The patch enables loading files from user-writeable directories.

Package-Manager: Portage-3.0.28, Repoman-3.0.3
Signed-off-by: Nicola Smaniotto <smaniotto.nicola <AT> gmail.com>

 games-arcade/SpaceCadetPinball/Manifest            |  1 +
 .../SpaceCadetPinball/SpaceCadetPinball-2.0.ebuild | 37 ++++++++
 ...aceCadetPinball-2.0-respect-XDG_DATA_HOME.patch | 98 ++++++++++++++++++++++
 games-arcade/SpaceCadetPinball/metadata.xml        |  8 ++
 4 files changed, 144 insertions(+)

diff --git a/games-arcade/SpaceCadetPinball/Manifest 
b/games-arcade/SpaceCadetPinball/Manifest
new file mode 100644
index 000000000..ae7dcfd5f
--- /dev/null
+++ b/games-arcade/SpaceCadetPinball/Manifest
@@ -0,0 +1 @@
+DIST SpaceCadetPinball-2.0.tar.gz 933826 BLAKE2B 
b4a079ca856ebf315202eaae59a825d4c7022acfff7f38907ffd750f0e146da6d7c4f03286ef5c59ee5e3c725d938e30c2aad2f7269d9f18e8ae8f6807af80e1
 SHA512 
29b3f886d6ec6507c12a59b0c2877cbb51c54eee0163d0537588bb1e0fa0eb08b530d5684e8753598a823430559d5b3b9490be40ca9a3310043dac71912994c7

diff --git a/games-arcade/SpaceCadetPinball/SpaceCadetPinball-2.0.ebuild 
b/games-arcade/SpaceCadetPinball/SpaceCadetPinball-2.0.ebuild
new file mode 100644
index 000000000..af9bc3d8d
--- /dev/null
+++ b/games-arcade/SpaceCadetPinball/SpaceCadetPinball-2.0.ebuild
@@ -0,0 +1,37 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Decompilation of 3D Pinball for Windows - Space Cadet"
+HOMEPAGE="https://github.com/k4zmu2a/SpaceCadetPinball";
+SRC_URI="https://github.com/k4zmu2a/${PN}/archive/refs/tags/Release_${PV}.tar.gz
 -> ${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+
+DEPEND="
+       media-libs/libsdl2
+       media-libs/sdl2-mixer[midi]
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+       "${FILESDIR}"/"${P}"-respect-XDG_DATA_HOME.patch
+)
+
+S="${WORKDIR}/${PN}-Release_${PV}"
+
+src_install(){
+       dobin "${S}/bin/${PN}"
+}
+
+pkg_postinst(){
+       ewarn "This game is distributed without the data files."
+       ewarn "To play, copy the original DAT and SOUND files from a Windows or"
+       ewarn 'Full Tilt! installation and place them in 
$XDG_DATA_HOME/'"${PN}/"
+       ewarn "(usually: ~/.local/share/${PN}/)"
+}

diff --git 
a/games-arcade/SpaceCadetPinball/files/SpaceCadetPinball-2.0-respect-XDG_DATA_HOME.patch
 
b/games-arcade/SpaceCadetPinball/files/SpaceCadetPinball-2.0-respect-XDG_DATA_HOME.patch
new file mode 100644
index 000000000..eed02d4c3
--- /dev/null
+++ 
b/games-arcade/SpaceCadetPinball/files/SpaceCadetPinball-2.0-respect-XDG_DATA_HOME.patch
@@ -0,0 +1,98 @@
+Enables support for loading the data files from outside the executable folder,
+respecting the user $XDG_DATA_HOME variable if set.
+Backport of commit ecdf802d68f9852150ac92f9737426c340fb64a3 by k4zmu2a.
+Patch by Nicola Smaniotto.
+
+diff --git a/SpaceCadetPinball/pb.cpp b/SpaceCadetPinball/pb.cpp
+index 284ef7e..9fa7fb2 100644
+--- a/SpaceCadetPinball/pb.cpp
++++ b/SpaceCadetPinball/pb.cpp
+@@ -39,6 +39,8 @@ int pb::init()
+ {
+       float projMat[12], zMin = 0, zScaler = 0;
+ 
++      if (winmain::DatFileName.empty())
++              return 1;
+       auto dataFilePath = pinball::make_path_name(winmain::DatFileName);
+       record_table = partman::load_records(dataFilePath.c_str(), 
FullTiltMode);
+ 
+diff --git a/SpaceCadetPinball/winmain.cpp b/SpaceCadetPinball/winmain.cpp
+index 1b9a4c6..5e4fa9c 100644
+--- a/SpaceCadetPinball/winmain.cpp
++++ b/SpaceCadetPinball/winmain.cpp
+@@ -36,7 +36,7 @@ bool winmain::ShowSpriteViewer = false;
+ bool winmain::LaunchBallEnabled = true;
+ bool winmain::HighScoresEnabled = true;
+ bool winmain::DemoActive = false;
+-char* winmain::BasePath;
++std::string winmain::BasePath;
+ int winmain::MainMenuHeight = 0;
+ std::string winmain::FpsDetails;
+ double winmain::UpdateToFrameRatio;
+@@ -58,19 +58,44 @@ int winmain::WinMain(LPCSTR lpCmdLine)
+               SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Could not 
initialize SDL2", SDL_GetError(), nullptr);
+               return 1;
+       }
+-      BasePath = SDL_GetBasePath();
+ 
+       pinball::quickFlag = strstr(lpCmdLine, "-quick") != nullptr;
+-      DatFileName = options::get_string("Pinball Data", 
pinball::get_rc_string(168, 0));
+ 
+-      /*Check for full tilt .dat file and switch to it automatically*/
+-      auto cadetFilePath = pinball::make_path_name("CADET.DAT");
+-      auto cadetDat = fopen(cadetFilePath.c_str(), "r");
+-      if (cadetDat)
++      // Search for game data in: game folder, user folder
++      // Game data test order: CADET.DAT, PINBALL.DAT
++      char* dataSearchPaths[2]
+       {
+-              fclose(cadetDat);
+-              DatFileName = "CADET.DAT";
+-              pb::FullTiltMode = true;
++               SDL_GetBasePath(),
++               SDL_GetPrefPath(nullptr, "SpaceCadetPinball")
++      };
++      std::string datFileNames[2]
++      {
++              "CADET.DAT",
++              options::get_string("Pinball Data", pinball::get_rc_string(168, 
0))
++      };
++      for (auto path : dataSearchPaths)
++      {
++              if (DatFileName.empty() && path)
++              {
++                      BasePath = path;
++                      for (int i = 0; i < 2; i++)
++                      {
++                              auto datFileName = datFileNames[i];
++                              auto datFilePath = 
pinball::make_path_name(datFileName);
++                              auto datFile = fopen(datFilePath.c_str(), "r");
++                              if (datFile)
++                              {
++                                      fclose(datFile);
++                                      DatFileName = datFileName;
++                                      if (i == 0)
++                                              pb::FullTiltMode = true;
++                                      printf("Loading game from: %s\n", 
datFilePath.c_str());
++                                      break;
++                              }
++                      }
++              }
++
++              SDL_free(path);
+       }
+ 
+       // SDL window
+diff --git a/SpaceCadetPinball/winmain.h b/SpaceCadetPinball/winmain.h
+index eb32410..485232f 100644
+--- a/SpaceCadetPinball/winmain.h
++++ b/SpaceCadetPinball/winmain.h
+@@ -48,7 +48,7 @@ public:
+       static bool LaunchBallEnabled;
+       static bool HighScoresEnabled;
+       static bool DemoActive;
+-      static char* BasePath;
++      static std::string BasePath;
+       static int MainMenuHeight;
+ 
+       static int WinMain(LPCSTR lpCmdLine);

diff --git a/games-arcade/SpaceCadetPinball/metadata.xml 
b/games-arcade/SpaceCadetPinball/metadata.xml
new file mode 100644
index 000000000..cbe3c6a53
--- /dev/null
+++ b/games-arcade/SpaceCadetPinball/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM 'http://www.gentoo.org/dtd/metadata.dtd'>
+<pkgmetadata>
+       <maintainer type="person">
+               <email>[email protected]</email>
+               <name>Nicola Smaniotto</name>
+       </maintainer>
+</pkgmetadata>

Reply via email to