| 14 | import Eax; |
| 15 | |
| 16 | void Init() |
| 17 | { |
| 18 | InitCrashHandler(); |
| 19 | |
| 20 | CIniReader iniReader(""); |
| 21 | Screen.Width = iniReader.ReadInteger("MAIN", "ResX", 0); |
| 22 | Screen.Height = iniReader.ReadInteger("MAIN", "ResY", 0); |
| 23 | Screen.nShadowBufferResolution = iniReader.ReadInteger("MAIN", "ShadowBufferResolution", 0); |
| 24 | Screen.bDeferredInput = iniReader.ReadInteger("MAIN", "DeferredInput", 1) != 0; |
| 25 | Screen.fRawInputMouse = std::clamp(iniReader.ReadFloat("MAIN", "RawInputMouse", 1.0f), 0.0f, 5.0f); |
| 26 | Screen.bRawInputMouseRawData = iniReader.ReadInteger("MAIN", "RawInputMouseRawData", 0) != 0; |
| 27 | Screen.nFMVWidescreenMode = iniReader.ReadInteger("MAIN", "FMVWidescreenMode", 1); |
| 28 | Screen.nHudWidescreenMode = iniReader.ReadInteger("MAIN", "HudWidescreenMode", 2); |
| 29 | Screen.fHudAspectRatioConstraint = ParseWidescreenHudOffset(iniReader.ReadString("MAIN", "HudAspectRatioConstraint", "")); |
| 30 | Screen.fGrainScale = std::clamp(iniReader.ReadFloat("MAIN", "GrainScale", 1.0f), 0.0f, 1.0f); |
| 31 | auto nFPSLimit = iniReader.ReadInteger("MISC", "FPSLimit", 1000); |
| 32 | bSkipIntro = iniReader.ReadInteger("MAIN", "SkipIntro", 0) != 0; |
| 33 | bSkipPressStartToContinue = iniReader.ReadInteger("MAIN", "SkipPressStartToContinue", 0) != 0; |
| 34 | bRestoreCutsceneFOV = iniReader.ReadInteger("MAIN", "RestoreCutsceneFOV", 0) != 0; |
| 35 | Screen.nCutsceneBorders = iniReader.ReadInteger("MAIN", "CutsceneBorders", 0); |
| 36 | |
| 37 | if (!Screen.Width || !Screen.Height) |
| 38 | std::tie(Screen.Width, Screen.Height) = GetDesktopRes(); |
| 39 | |
| 40 | if (IsEnhanced()) |
| 41 | { |
| 42 | bSkipIntro = false; |
| 43 | } |
| 44 | |
| 45 | auto exePath = GetExeModulePath(); |
| 46 | |
| 47 | mINI::INIStructure ini; |
| 48 | mINI::INIFile mIni(iniReader.GetIniPath()); |
| 49 | mIni.read(ini); |
| 50 | |
| 51 | auto userIniPath = exePath / "SplinterCellUser.ini"; |
| 52 | |
| 53 | // Read the existing user INI file into a structure |
| 54 | mINI::INIStructure userIni; |
| 55 | mINI::INIFile userIniFile(userIniPath); |
| 56 | userIniFile.read(userIni); |
| 57 | |
| 58 | if (ini.has("Engine.Input")) |
| 59 | { |
| 60 | for (auto const& kv : ini["Engine.Input"]) |
| 61 | { |
| 62 | std::string key = std::get<0>(kv); |
| 63 | std::string value = std::get<1>(kv); |
| 64 | userIni["Engine.Input"].setAll(key, value); |
| 65 | } |
| 66 | } |
| 67 | userIni["Engine.EPCGameOptions"]["Resolution"] = std::to_string(Screen.Width) + "x" + std::to_string(Screen.Height); |
| 68 | userIniFile.generate(userIni); |
| 69 | |
| 70 | auto gameIniPath = exePath / "SplinterCell.ini"; |
| 71 | CIniReader iniWriter(gameIniPath); |
| 72 | iniWriter.WriteInteger("WinDrv.WindowsClient", "WindowedViewportX", Screen.Width); |
| 73 | iniWriter.WriteInteger("WinDrv.WindowsClient", "WindowedViewportY", Screen.Height); |
nothing calls this directly
no test coverage detected