Config: Add "execName" to specify ini and rgssad filenames

This commit is contained in:
Jonas Kulla 2015-02-19 02:23:23 +01:00
parent 531441d4e3
commit 7393f7e951
4 changed files with 24 additions and 9 deletions

View File

@ -256,6 +256,19 @@
# SE.sourceCount=6 # SE.sourceCount=6
# The Windows game executable name minus ".exe". By default
# this is "Game", but some developers manually rename it.
# mkxp needs this name because both the .ini (game
# configuration) and .rgssad (encrypted data archive) must
# carry the same name minus their extension, and we cannot
# guess the executable's name.
# You could just as well rename them both to "Game.ini" and
# "Game.rgssad", but specifying the executable name here
# is a tiny bit less intrusive.
#
# execName=Game
# Give a hint on which language the game title as # Give a hint on which language the game title as
# specified in the Game.ini is, useful if the encoding # specified in the Game.ini is, useful if the encoding
# is being falsely detected. Relevant only if mkxp was # is being falsely detected. Relevant only if mkxp was

View File

@ -167,6 +167,7 @@ void Config::read(int argc, char *argv[])
PO_DESC(dataPathOrg, std::string, "") \ PO_DESC(dataPathOrg, std::string, "") \
PO_DESC(dataPathApp, std::string, "") \ PO_DESC(dataPathApp, std::string, "") \
PO_DESC(iconPath, std::string, "") \ PO_DESC(iconPath, std::string, "") \
PO_DESC(execName, std::string, "Game") \
PO_DESC(titleLanguage, std::string, "") \ PO_DESC(titleLanguage, std::string, "") \
PO_DESC(midi.soundFont, std::string, "") \ PO_DESC(midi.soundFont, std::string, "") \
PO_DESC(midi.chorus, bool, false) \ PO_DESC(midi.chorus, bool, false) \
@ -286,7 +287,8 @@ void Config::readGameINI()
; ;
po::variables_map vm; po::variables_map vm;
SDLRWStream iniFile("Game.ini", "r"); std::string iniFilename = execName + ".ini";
SDLRWStream iniFile(iniFilename.c_str(), "r");
if (iniFile) if (iniFile)
{ {
@ -297,12 +299,12 @@ void Config::readGameINI()
} }
catch (po::error &error) catch (po::error &error)
{ {
Debug() << "Game.ini:" << error.what(); Debug() << iniFilename + ":" << error.what();
} }
} }
else else
{ {
Debug() << "FAILED to open Game.ini"; Debug() << "FAILED to open" << iniFilename;
} }
GUARD_ALL( game.title = vm["Game.Title"].as<std::string>(); ); GUARD_ALL( game.title = vm["Game.Title"].as<std::string>(); );

View File

@ -102,6 +102,7 @@ struct Config
std::string dataPathApp; std::string dataPathApp;
std::string iconPath; std::string iconPath;
std::string execName;
std::string titleLanguage; std::string titleLanguage;
struct struct

View File

@ -46,14 +46,14 @@ SharedState *SharedState::instance = 0;
int SharedState::rgssVersion = 0; int SharedState::rgssVersion = 0;
static GlobalIBO *_globalIBO = 0; static GlobalIBO *_globalIBO = 0;
static const char *defGameArchive() static const char *gameArchExt()
{ {
if (rgssVer == 1) if (rgssVer == 1)
return "Game.rgssad"; return ".rgssad";
else if (rgssVer == 2) else if (rgssVer == 2)
return "Game.rgss2a"; return ".rgss2a";
else if (rgssVer == 3) else if (rgssVer == 3)
return "Game.rgss3a"; return ".rgss3a";
assert(!"unreachable"); assert(!"unreachable");
return 0; return 0;
@ -116,8 +116,7 @@ struct SharedStatePrivate
if (gl.ReleaseShaderCompiler) if (gl.ReleaseShaderCompiler)
gl.ReleaseShaderCompiler(); gl.ReleaseShaderCompiler();
// FIXME find out correct archive filename std::string archPath = config.execName + gameArchExt();
std::string archPath = defGameArchive();
/* Check if a game archive exists */ /* Check if a game archive exists */
FILE *tmp = fopen(archPath.c_str(), "rb"); FILE *tmp = fopen(archPath.c_str(), "rb");