void S9xLoadConfigFiles (char **argv, int argc) { static ConfigFile conf; // static because some of its functions return pointers conf.Clear(); bool skip = false; for (int i = 0; i < argc; i++) { if (!strcasecmp(argv[i], "-nostdconf")) { skip = true; break; } } if (!skip) { #ifdef SYS_CONFIG_FILE try_load_config_file(SYS_CONFIG_FILE, conf); S9xParsePortConfig(conf, 0); #endif std::string fname; fname = S9xGetDirectory(DEFAULT_DIR); fname += SLASH_STR S9X_CONF_FILE_NAME; try_load_config_file(fname.c_str(), conf); } else fprintf(stderr, "Skipping standard config files.\n"); for (int i = 0; i < argc - 1; i++) if (!strcasecmp(argv[i], "-conf")) try_load_config_file(argv[++i], conf); // Parse config file here // ROM Settings.ForceInterleaved2 = conf.GetBool("ROM::Interleaved2", false); Settings.ForceInterleaveGD24 = conf.GetBool("ROM::InterleaveGD24", false); Settings.ApplyCheats = conf.GetBool("ROM::Cheat", false); Settings.NoPatch = !conf.GetBool("ROM::Patch", true); Settings.ForceLoROM = conf.GetBool("ROM::LoROM", false); Settings.ForceHiROM = conf.GetBool("ROM::HiROM", false); if (Settings.ForceLoROM) Settings.ForceHiROM = false; Settings.ForcePAL = conf.GetBool("ROM::PAL", false); Settings.ForceNTSC = conf.GetBool("ROM::NTSC", false); if (Settings.ForcePAL) Settings.ForceNTSC = false; if (conf.Exists("ROM::Header")) { Settings.ForceHeader = conf.GetBool("ROM::Header", false); Settings.ForceNoHeader = !Settings.ForceHeader; } if (conf.Exists("ROM::Interleaved")) { Settings.ForceInterleaved = conf.GetBool("ROM::Interleaved", false); Settings.ForceNotInterleaved = !Settings.ForceInterleaved; } rom_filename = conf.GetStringDup("ROM::Filename", NULL); // Sound Settings.SoundSync = conf.GetBool("Sound::Sync", true); Settings.SixteenBitSound = conf.GetBool("Sound::16BitSound", true); Settings.Stereo = conf.GetBool("Sound::Stereo", true); Settings.ReverseStereo = conf.GetBool("Sound::ReverseStereo", false); Settings.SoundPlaybackRate = conf.GetUInt("Sound::Rate", 32000); Settings.SoundInputRate = conf.GetUInt("Sound::InputRate", 32000); Settings.Mute = conf.GetBool("Sound::Mute", false); // Display Settings.SupportHiRes = conf.GetBool("Display::HiRes", true); Settings.Transparency = conf.GetBool("Display::Transparency", true); Settings.DisableGraphicWindows = !conf.GetBool("Display::GraphicWindows", true); Settings.DisplayFrameRate = conf.GetBool("Display::DisplayFrameRate", false); Settings.DisplayWatchedAddresses = conf.GetBool("Display::DisplayWatchedAddresses", false); Settings.DisplayPressedKeys = conf.GetBool("Display::DisplayInput", false); Settings.DisplayMovieFrame = conf.GetBool("Display::DisplayFrameCount", false); Settings.AutoDisplayMessages = conf.GetBool("Display::MessagesInImage", true); Settings.InitialInfoStringTimeout = conf.GetInt ("Display::MessageDisplayTime", 120); // Settings Settings.BSXBootup = conf.GetBool("Settings::BSXBootup", false); Settings.TurboMode = conf.GetBool("Settings::TurboMode", false); Settings.TurboSkipFrames = conf.GetUInt("Settings::TurboFrameSkip", 15); Settings.MovieTruncate = conf.GetBool("Settings::MovieTruncateAtEnd", false); Settings.MovieNotifyIgnored = conf.GetBool("Settings::MovieNotifyIgnored", false); Settings.WrongMovieStateProtection = conf.GetBool("Settings::WrongMovieStateProtection", true); Settings.StretchScreenshots = conf.GetInt ("Settings::StretchScreenshots", 1); Settings.SnapshotScreenshots = conf.GetBool("Settings::SnapshotScreenshots", true); Settings.DontSaveOopsSnapshot = conf.GetBool("Settings::DontSaveOopsSnapshot", false); Settings.AutoSaveDelay = conf.GetUInt("Settings::AutoSaveDelay", 0); if (conf.Exists("Settings::FrameTime")) Settings.FrameTimePAL = Settings.FrameTimeNTSC = conf.GetUInt("Settings::FrameTime", 16667); if (!strcasecmp(conf.GetString("Settings::FrameSkip", "Auto"), "Auto")) Settings.SkipFrames = AUTO_FRAMERATE; else Settings.SkipFrames = conf.GetUInt("Settings::FrameSkip", 0) + 1; // Controls Settings.MouseMaster = conf.GetBool("Controls::MouseMaster", true); Settings.SuperScopeMaster = conf.GetBool("Controls::SuperscopeMaster", true); Settings.JustifierMaster = conf.GetBool("Controls::JustifierMaster", true); Settings.MultiPlayer5Master = conf.GetBool("Controls::MP5Master", true); Settings.UpAndDown = conf.GetBool("Controls::AllowLeftRight", false); if (conf.Exists("Controls::Port1")) parse_controller_spec(0, conf.GetString("Controls::Port1")); if (conf.Exists("Controls::Port2")) parse_controller_spec(1, conf.GetString("Controls::Port2")); if (conf.Exists("Controls::Mouse1Crosshair")) parse_crosshair_spec(X_MOUSE1, conf.GetString("Controls::Mouse1Crosshair")); if (conf.Exists("Controls::Mouse2Crosshair")) parse_crosshair_spec(X_MOUSE2, conf.GetString("Controls::Mouse2Crosshair")); if (conf.Exists("Controls::SuperscopeCrosshair")) parse_crosshair_spec(X_SUPERSCOPE, conf.GetString("Controls::SuperscopeCrosshair")); if (conf.Exists("Controls::Justifier1Crosshair")) parse_crosshair_spec(X_JUSTIFIER1, conf.GetString("Controls::Justifier1Crosshair")); if (conf.Exists("Controls::Justifier2Crosshair")) parse_crosshair_spec(X_JUSTIFIER2, conf.GetString("Controls::Justifier2Crosshair")); // Hack Settings.DisableGameSpecificHacks = !conf.GetBool("Hack::EnableGameSpecificHacks", true); Settings.BlockInvalidVRAMAccessMaster = !conf.GetBool("Hack::AllowInvalidVRAMAccess", false); Settings.HDMATimingHack = conf.GetInt ("Hack::HDMATiming", 100); // Netplay #ifdef NETPLAY_SUPPORT Settings.NetPlay = conf.GetBool("Netplay::Enable"); Settings.Port = NP_DEFAULT_PORT; if (conf.Exists("Netplay::Port")) Settings.Port = -(int) conf.GetUInt("Netplay::Port"); Settings.ServerName[0] = '\0'; if (conf.Exists("Netplay::Server")) conf.GetString("Netplay::Server", Settings.ServerName, 128); #endif // Debug #ifdef DEBUGGER if (conf.GetBool("DEBUG::Debugger", false)) CPU.Flags |= DEBUG_MODE_FLAG; if (conf.GetBool("DEBUG::Trace", false)) { ENSURE_TRACE_OPEN(trace,"trace.log","wb") CPU.Flags |= TRACE_FLAG; } #endif S9xParsePortConfig(conf, 1); S9xVerifyControllers(); }
bool CCGShader::LoadShader(const char *path) { ConfigFile conf; int shaderCount; char keyName[100]; shaderPasses.clear(); lookupTextures.clear(); if(strlen(path)<4 || strcasecmp(&path[strlen(path)-4],".cgp")) { shaderPass pass; pass.scaleParams.scaleTypeX = CG_SCALE_NONE; pass.scaleParams.scaleTypeY = CG_SCALE_NONE; pass.linearFilter = false; pass.filterSet = false; strcpy(pass.cgShaderFile,path); shaderPasses.push_back(pass); return true; } else { conf.LoadFile(path); } shaderCount = conf.GetInt("::shaders",0); if(shaderCount<1) return false; for(int i=0;i<shaderCount;i++) { shaderPass pass; sprintf(keyName,"::filter_linear%u",i); pass.linearFilter = conf.GetBool(keyName); pass.filterSet = conf.Exists(keyName); sprintf(keyName,"::scale_type%u",i); const char *scaleType = conf.GetString(keyName,""); if(!strcasecmp(scaleType,"")) { sprintf(keyName,"::scale_type_x%u",i); const char *scaleTypeX = conf.GetString(keyName,""); if(*scaleTypeX=='\0' && (i!=(shaderCount-1))) scaleTypeX = "source"; pass.scaleParams.scaleTypeX = scaleStringToEnum(scaleTypeX); sprintf(keyName,"::scale_type_y%u",i); const char *scaleTypeY = conf.GetString(keyName,""); if(*scaleTypeY=='\0' && (i!=(shaderCount-1))) scaleTypeY = "source"; pass.scaleParams.scaleTypeY = scaleStringToEnum(scaleTypeY); } else { cgScaleType sType = scaleStringToEnum(scaleType); pass.scaleParams.scaleTypeX = sType; pass.scaleParams.scaleTypeY = sType; } sprintf(keyName,"::scale%u",i); const char *scaleFloat = conf.GetString(keyName,""); int scaleInt = conf.GetInt(keyName,0); if(!strcasecmp(scaleFloat,"")) { sprintf(keyName,"::scalex%u",i); const char *scaleFloatX = conf.GetString(keyName,"1.0"); pass.scaleParams.scaleX = atof(scaleFloatX); pass.scaleParams.absX = conf.GetInt(keyName,1); sprintf(keyName,"::scaley%u",i); const char *scaleFloatY = conf.GetString(keyName,"1.0"); pass.scaleParams.scaleY = atof(scaleFloatY); pass.scaleParams.absY = conf.GetInt(keyName,1); } else { float floatval = atof(scaleFloat); pass.scaleParams.scaleX = floatval; pass.scaleParams.absX = scaleInt; pass.scaleParams.scaleY = floatval; pass.scaleParams.absY = scaleInt; } sprintf(keyName,"::shader%u",i); strcpy(pass.cgShaderFile,conf.GetString(keyName,"")); shaderPasses.push_back(pass); } char *shaderIds = conf.GetStringDup("::textures",""); char *id = strtok(shaderIds,";"); while(id!=NULL) { lookupTexture tex; sprintf(keyName,"::%s",id); strcpy(tex.id,id); strcpy(tex.texturePath,conf.GetString(keyName,"")); sprintf(keyName,"::%s_linear",id); tex.linearfilter = conf.GetBool(keyName,true); lookupTextures.push_back(tex); id = strtok(NULL,";"); } free(shaderIds); return true; }