void Dirs::initScreenshotDir() { if (!settings.options.screenshotDir.empty()) { settings.screenshotDir = settings.options.screenshotDir; if (mkdir_r(settings.screenshotDir.c_str())) { logger->log(strprintf( // TRANSLATORS: directory creation error _("Error: %s doesn't exist and can't be created! " "Exiting."), settings.screenshotDir.c_str())); } } else if (settings.screenshotDir.empty()) { #ifdef __native_client__ settings.screenshotDir = _nacl_dir + "/screenshots/"; #else // __native_client__ settings.screenshotDir = decodeBase64String( config.getStringValue("screenshotDirectory3")); if (settings.screenshotDir.empty()) { #ifdef __ANDROID__ settings.screenshotDir = getSdStoragePath() + std::string("/images"); if (mkdir_r(settings.screenshotDir.c_str())) { logger->log(strprintf( // TRANSLATORS: directory creation error _("Error: %s doesn't exist and can't be created! " "Exiting."), settings.screenshotDir.c_str())); } #else // ANDROID settings.screenshotDir = getPicturesDir(); #endif // ANDROID if (config.getBoolValue("useScreenshotDirectorySuffix")) { const std::string configScreenshotSuffix = branding.getValue("screenshots", "ManaPlus"); if (!configScreenshotSuffix.empty()) { settings.screenshotDir.append(dirSeparator).append( configScreenshotSuffix); } } config.setValue("screenshotDirectory3", encodeBase64String(settings.screenshotDir)); } #endif // __native_client__ } logger->log("screenshotDirectory: " + settings.screenshotDir); }
void Dirs::initConfigDir() { settings.configDir = settings.options.configDir; if (settings.configDir.empty()) { #ifdef __APPLE__ settings.configDir = settings.localDataDir + dirSeparator + branding.getValue("appShort", "mana"); #elif defined __HAIKU__ settings.configDir = std::string(PhysFs::getUserDir()) + "/config/settings/Mana" + branding.getValue("appName", "ManaPlus"); #elif defined WIN32 settings.configDir = getSpecialFolderLocation(CSIDL_APPDATA); if (settings.configDir.empty()) { settings.configDir = settings.localDataDir; } else { settings.configDir.append("/mana/").append(branding.getValue( "appShort", "mana")); } #elif defined __ANDROID__ settings.configDir = getSdStoragePath() + branding.getValue( "appShort", "ManaPlus").append("/config"); #elif defined __native_client__ settings.configDir = _nacl_dir.append("/config"); #else // __APPLE__ settings.configDir = std::string(PhysFs::getUserDir()).append( "/.config/mana/").append(branding.getValue("appShort", "mana")); #endif // __APPLE__ logger->log("Generating config dir: " + settings.configDir); } if (mkdir_r(settings.configDir.c_str())) { // TRANSLATORS: directory creation error logger->error(strprintf(_("%s doesn't exist and can't be created! " "Exiting."), settings.configDir.c_str())); } }
void Dirs::initLocalDataDir() { settings.localDataDir = settings.options.localDataDir; if (settings.localDataDir.empty()) { #ifdef __APPLE__ // Use Application Directory instead of .mana settings.localDataDir = std::string(PhysFs::getUserDir()) + "/Library/Application Support/" + branding.getValue("appName", "ManaPlus"); #elif defined __HAIKU__ settings.localDataDir = std::string(PhysFs::getUserDir()) + "/config/data/Mana"; #elif defined WIN32 settings.localDataDir = getSpecialFolderLocation(CSIDL_LOCAL_APPDATA); if (settings.localDataDir.empty()) settings.localDataDir = std::string(PhysFs::getUserDir()); settings.localDataDir.append("/Mana"); #elif defined __ANDROID__ settings.localDataDir = getSdStoragePath() + branding.getValue( "appShort", "ManaPlus") + "/local"; #elif defined __native_client__ settings.localDataDir = _nacl_dir.append("/local"); #else // __APPLE__ settings.localDataDir = std::string(PhysFs::getUserDir()) + ".local/share/mana"; #endif // __APPLE__ } if (mkdir_r(settings.localDataDir.c_str())) { // TRANSLATORS: directory creation error logger->error(strprintf(_("%s doesn't exist and can't be created! " "Exiting."), settings.localDataDir.c_str())); } #ifdef USE_PROFILER Perfomance::init(settings.localDataDir + "/profiler.log"); #endif // USE_PROFILER }
// main for normal game usage int main(int argc, char *argv[]) { #if defined(__MINGW32__) // load mingw crash handler. Won't fail if dll is not present. // may load libray from current dir, it may not same as program dir LoadLibrary("exchndl.dll"); #endif selfName = argv[0]; parseOptions(argc, argv); if (settings.options.printHelp) { printHelp(); _exit(0); } else if (settings.options.printVersion) { printVersion(); _exit(0); } #ifdef ANDROID mkdir_r(getSdStoragePath().c_str()); #endif PhysFs::init(argv[0]); XML::initXML(); #if SDL_IMAGE_VERSION_ATLEAST(1, 2, 11) IMG_Init(IMG_INIT_PNG); #endif #if SDL_MIXER_VERSION_ATLEAST(1, 2, 11) Mix_Init(MIX_INIT_OGG); #endif #ifdef WIN32 SetCurrentDirectory(PhysFs::getBaseDir()); #endif setPriority(true); client = new Client; int ret = 0; if (!settings.options.testMode) { client->gameInit(); ret = client->gameExec(); } else { client->testsInit(); ret = client->testsExec(); } delete2(client); #if SDL_MIXER_VERSION_ATLEAST(1, 2, 11) Mix_Quit(); #endif #if SDL_IMAGE_VERSION_ATLEAST(1, 2, 11) IMG_Quit(); #endif #ifdef DUMP_LEAKED_RESOURCES reportRWops(); #endif #ifdef DEBUG_PHYSFS reportPhysfsLeaks(); #endif return ret; }