.
193 | private string ConvertVRamValue(object VRam)
194 | {
195 | try
196 | {
197 | Int64 VRamValue = (Int64)VRam;
198 |
199 | var Affix = "MB";
200 | if (VRamValue >= 1073741824)
201 | {
202 | VRamValue /= 1024;
203 | Affix = "GB";
204 | }
205 | VRamValue /= 1048576;
206 | return VRamValue.ToString() + Affix;
207 | }
208 | catch (InvalidCastException)
209 | {
210 | return "";
211 | }
212 | catch (NullReferenceException)
213 | {
214 | return "";
215 | }
216 | }
217 | }
218 | }
--------------------------------------------------------------------------------
/Program.cs:
--------------------------------------------------------------------------------
1 | using NLog;
2 | using NLog.Config;
3 | using NLog.Targets;
4 | using System.ComponentModel;
5 | using System.Diagnostics;
6 | using System.Drawing.Text;
7 | using System.Globalization;
8 | using System.Reflection;
9 | using System.Runtime.InteropServices;
10 |
11 | namespace CityLauncher
12 | {
13 | internal static class Program
14 | {
15 |
16 | private static readonly Logger Nlog = LogManager.GetCurrentClassLogger();
17 |
18 | public static readonly string CurrentTime = DateTime.Now.ToString("dd-MM-yy__hh-mm-ss");
19 |
20 | public static CityLauncher MainWindow;
21 |
22 | public static IniHandler IniHandler;
23 |
24 | public static FileHandler FileHandler;
25 |
26 | public static InputHandler InputHandler;
27 |
28 | [DllImport("user32.dll")]
29 | [return: MarshalAs(UnmanagedType.Bool)]
30 | static extern bool SetForegroundWindow(IntPtr hWnd);
31 |
32 | ///
33 | /// Replacement Application for the original Batman: Arkham City BmLauncher
34 | /// Offers more configuration options, enables compatibility with High-Res Texture Packs
35 | /// and automatically takes care of the ReadOnly properties of each file, removing
36 | /// any requirement to manually edit .ini files. Guarantees a much more comfortable user experience.
37 | /// @author Neato (https://www.nexusmods.com/users/81089053)
38 | ///
39 | [STAThread]
40 | static void Main(string[] args)
41 | {
42 | bool logs = true;
43 | bool IsNewWindow = true;
44 | using (Mutex mtx = new(true, "{BD4C408D-EF15-4C98-B792-C30D089E19D1}", out IsNewWindow))
45 | {
46 | if (args.Contains("-nologs"))
47 | {
48 | logs = false;
49 | }
50 | if (args.Contains("-nolauncher"))
51 | {
52 | SetupCulture();
53 | SetupLogger(logs);
54 | LauncherBypass();
55 | }
56 | else if (IsNewWindow)
57 | {
58 | SetupCulture();
59 | SetupLogger(logs);
60 | InitializeProgram();
61 | Application.Run(MainWindow);
62 | }
63 | else
64 | {
65 | Process Current = Process.GetCurrentProcess();
66 | foreach (Process P in Process.GetProcessesByName(Current.ProcessName))
67 | {
68 | if (P.Id != Current.Id)
69 | {
70 | SetForegroundWindow(P.MainWindowHandle);
71 | break;
72 | }
73 | }
74 | }
75 | }
76 | }
77 |
78 | private static void SetupCulture()
79 | {
80 | Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
81 | }
82 |
83 | private static void InitializeProgram()
84 | {
85 | Nlog.Info("InitializeProgram - Starting logs at {0} on {1}.", DateTime.Now.ToString("HH:mm:ss"), DateTime.Now.ToString("D", new CultureInfo("en-GB")));
86 | Nlog.Info("InitializeProgram - Current application version: {0}", Assembly.GetExecutingAssembly().GetName().Version.ToString());
87 | ApplicationConfiguration.Initialize();
88 | InitFonts();
89 | MainWindow = new CityLauncher();
90 | MainWindow.Text = MainWindow.Text + " " + Assembly.GetExecutingAssembly().GetName().Version.ToString();
91 | FileHandler = new FileHandler();
92 | IniHandler = new IniHandler();
93 | InputHandler = new InputHandler();
94 | var SystemHandler = new SystemHandler();
95 | MainWindow.GPULabel.Text = SystemHandler.GPUData;
96 | MainWindow.CPULabel.Text = SystemHandler.CPUData;
97 | new IniReader().InitDisplay();
98 | new InputReader().InitControls();
99 | new InputWriter().WriteBmInput();
100 | }
101 |
102 | private static void SetupLogger(bool logs)
103 | {
104 | LoggingConfiguration config = new();
105 | ConsoleTarget logconsole = new("logconsole");
106 | if (!Directory.Exists("logs"))
107 | {
108 | Directory.CreateDirectory("logs");
109 | }
110 |
111 | if (logs)
112 | {
113 | FileTarget logfile = new("logfile")
114 | {
115 | FileName = Directory.GetCurrentDirectory() + "\\logs\\citylauncher_report__" + CurrentTime + ".log"
116 | };
117 | config.AddRule(LogLevel.Debug, LogLevel.Error, logfile);
118 | }
119 | DirectoryInfo LogDirectory = new(Directory.GetCurrentDirectory() + "\\logs");
120 | DateTime OldestAllowedArchive = DateTime.Now - new TimeSpan(3, 0, 0, 0);
121 | foreach (FileInfo file in LogDirectory.GetFiles())
122 | {
123 | if (file.CreationTime < OldestAllowedArchive)
124 | {
125 | file.Delete();
126 | }
127 | }
128 |
129 | config.AddRule(LogLevel.Debug, LogLevel.Error, logconsole);
130 | LogManager.Configuration = config;
131 | }
132 |
133 | private static void InitFonts()
134 | {
135 | bool calibri = IsFontInstalled("calibri");
136 | bool impact = IsFontInstalled("impact");
137 |
138 | if (!impact && !calibri)
139 | {
140 | Nlog.Warn("InitFonts - Impact and Calibri are not installed. May cause display issues.");
141 | MessageBox.Show("The fonts \"Calibri\" and \"Impact\" are missing on your system. This may lead to display and scaling issues inside of the application.", "Missing fonts!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
142 | return;
143 | }
144 | else if (!impact)
145 | {
146 | Nlog.Warn("InitFonts - Impact is not installed. May cause display issues.");
147 | MessageBox.Show("The font \"Impact\" is missing on your system. This may lead to display and scaling issues inside of the application.", "Missing font!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
148 | return;
149 | }
150 | else if (!calibri)
151 | {
152 | Nlog.Warn("InitFonts - Calibri is not installed. May cause display issues.");
153 | MessageBox.Show("The font \"Calibri\" is missing on your system. This may lead to display and scaling issues inside of the application.", "Missing font!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
154 | return;
155 | }
156 | Nlog.Info("InitFonts - Necessary fonts installed.");
157 | }
158 |
159 | private static bool IsFontInstalled(string FontFamily)
160 | {
161 | using (Font f = new Font(FontFamily, 10f, FontStyle.Regular))
162 | {
163 | StringComparison comparison = StringComparison.InvariantCultureIgnoreCase;
164 | return (string.Compare(FontFamily, f.Name, comparison) == 0);
165 | }
166 | }
167 |
168 | private static void LauncherBypass()
169 | {
170 | Nlog.Info("LauncherBypass - Starting logs at {0} on {1}.", DateTime.Now.ToString("HH:mm:ss"), DateTime.Now.ToString("D", new CultureInfo("en-GB")));
171 | using (Process LaunchGame = new())
172 | {
173 | try
174 | {
175 | if (FileHandler.DetectGameExe())
176 | {
177 | LaunchGame.StartInfo.FileName = "BatmanAC.exe";
178 | LaunchGame.StartInfo.CreateNoWindow = true;
179 | LaunchGame.Start();
180 | Nlog.Info("LauncherBypass - Launching the game. Concluding logs at {0} on {1}.", DateTime.Now.ToString("HH:mm:ss"), DateTime.Now.ToString("D", new CultureInfo("en-GB")));
181 | Application.Exit();
182 | }
183 | else
184 | {
185 | MessageBox.Show("Could not find 'BatmanAC.exe'.\nIs the Launcher in the correct folder?", "Error!", MessageBoxButtons.OK);
186 | }
187 | }
188 | catch (Win32Exception e)
189 | {
190 | Nlog.Error("LauncherBypass - \"BatmanAC.exe\" does not appear to be a Windows executable file: {0}", e);
191 | MessageBox.Show("'BatmanAC.exe' does not appear to be a Windows executable file!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
192 | }
193 | }
194 | }
195 | }
196 | }
--------------------------------------------------------------------------------
/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 | ..\Resources\BmCompat.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
123 |
124 |
125 | ..\Resources\UserEngine.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16
126 |
127 |
128 | ..\Resources\custom_commands.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
129 |
130 |
131 | ..\Resources\BmUI.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
132 |
133 |
134 | ..\Resources\UserGame.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16
135 |
136 |
137 | ..\Resources\BmLightmass.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
138 |
139 |
140 | ..\Resources\GlobalShaderCache-PC-D3D-SM5.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
141 |
142 |
143 | ..\Resources\BmCamera.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
144 |
145 |
146 | ..\Resources\BmGame.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
147 |
148 |
149 | ..\Resources\centre_camera.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
150 |
151 |
152 | ..\Resources\GlobalShaderCache-PC-D3D-SM3.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
153 |
154 |
155 | ..\Resources\icon2.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
156 |
157 |
158 | ..\Resources\Default_2.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
159 |
160 |
161 | ..\Resources\High Contrast_2.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
162 |
163 |
164 | ..\Resources\Log 1_2.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
165 |
166 |
167 | ..\Resources\Log 2_2.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
168 |
169 |
170 | ..\Resources\Monochrome_2.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
171 |
172 |
173 | ..\Resources\Muted_2.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
174 |
175 |
176 | ..\Resources\About_Image_4_border.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
177 |
178 |
179 | ..\Resources\Phase1.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
180 |
181 |
182 | ..\Resources\Phase2.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
183 |
184 |
185 | ..\Resources\Phase3.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
186 |
187 |
188 | ..\Resources\startup.wav;System.IO.MemoryStream, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
189 |
190 |
191 | ..\Resources\BmEngine.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
192 |
193 |
194 | ..\Resources\BmInput.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
195 |
196 |
197 | ..\Resources\UserInput.ini;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252
198 |
199 |
--------------------------------------------------------------------------------
/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace CityLauncher.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.2.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Batman: Arkham City - Advanced Launcher
2 |
3 | This is a replacement application for the original BmLauncher.exe of the game. Alongside vastly superior configuration options, this Launcher also offers:
4 |
5 | - Tooltips for every configuration option
6 | - Option to toggle Startup Movies
7 | - Very high customizability
8 | - Color settings (Including color palette presets)
9 | - Two pre-made color profiles for HDR injection
10 | - Keybind option for [Catwoman's "Quickfire Disarm"](https://www.pcgamingwiki.com/wiki/Batman:_Arkham_City#Fix_for_Catwoman.27s_Quickfire_Disarm_key_missing_on_keyboard)
11 | - Option to boot directly into the game, skipping launcher screen
12 | - Automatic DirectX11 Lighting Bug Fix (No action needed. It happens automatically!)
13 | - Customizable Field of View Hotkeys
14 | - Compatibility Fixes for [HD Texture Packs](https://www.nexusmods.com/batmanarkhamcity/mods/407)
15 | - Extensive Logging Functionality (Powered by [NLog](https://github.com/NLog/NLog))
16 | - ... and more!
17 |
18 | Supports the GOTY version on STEAM, GOG and EPIC GAMES.
19 |
20 | **This Application is built with .NET 8**. If you are using Windows 10 and above you shouldn't have any issues simply running the program. Some users might need to install [.NET 8 Desktop Runtime](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) manually.
21 |
22 | A standalone, dependency free executable is also available.
23 |
24 | ## Preview
25 |
26 | 
27 |
28 | ## Download
29 |
30 | **[Download the latest version on Nexusmods](https://www.nexusmods.com/batmanarkhamcity/mods/406)**
31 |
32 | If you like this application, please consider [donating](https://ko-fi.com/neatodev).
33 |
34 | [](https://ko-fi.com/neatodev)
35 |
36 |
37 | ## Installation
38 |
39 | Drag the contents of the .zip file into the **'Batman Arkham City GOTY\Binaries\Win32'** folder.
40 |
41 | To find this folder for the ***Steam*** version, just right-click the game in Steam, select Properties->Local Files->Browse Local Files and navigate from there.
42 |
43 | To find it for the ***EGS*** version, right-click the game and select "Manage". Then click the folder icon in the "Installation" tab and navigate from there.
44 |
45 | For the ***GOG*** version, click the icon next to the PLAY button and select "Manage installation->Show folder" and navigate from there.
46 |
47 | ## Usage
48 |
49 | You can just launch your game via Steam, GOG or EGS as you normally would, though in some cases you might need to unblock the BmLauncher application for it to work properly.
50 |
51 | Once you're happy with your settings, **you can skip the launcher entirely by using the `-nolauncher` launch option.**
52 |
53 | - On ***EGS*** you can do this by going into Settings->Arkham City>Additional Command Line Arguments.
54 | - On ***GOG GALAXY*** you have to select Customize->Manage Installation->Configure, enable Launch parameters, select Duplicate. It should be added under Additional executables.
55 | - If you use a shortcut in Windows, right click->Properties->Shortcut and add it at the end of Target.
56 | - ***Not necessary for Steam***, which already has built-in launcher skipping for this game.
57 |
58 |
59 | ## Info for Linux users
60 |
61 | Install the **Calibri** and **Impact** fonts for your Wine environment so you don't encounter any display issues.
62 |
63 | `winetricks -q calibri impact`
64 |
65 |
66 | ## Bug Reports
67 |
68 | To file a bug report, or if you have suggestions for the Launcher in general, please file an [issue](https://github.com/neatodev/CityLauncher/issues/new). I read these regularly and should normally be able to respond within a reasonable amount of time. Please also include the most recent citylauncher_report in the issue (if available). You can find the reports in the 'Batman Arkham City GOTY\Binaries\Win32\logs' folder.
69 |
70 | ##### License: [![CC BY 4.0][cc-by-shield]][cc-by]
71 |
72 | [cc-by]: https://creativecommons.org/licenses/by-nc-sa/4.0/
73 | [cc-by-shield]: https://licensebuttons.net/l/by-nc-sa/4.0/80x15.png
74 |
--------------------------------------------------------------------------------
/Resources/About_Image_4_border.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/About_Image_4_border.jpg
--------------------------------------------------------------------------------
/Resources/BmCamera.ini:
--------------------------------------------------------------------------------
1 | [BmGame.R3rdPersonCamera]
2 | EnableCameraAssist=True
3 |
4 | [IniVersion]
5 | 0=1648928426.000000
6 |
7 |
--------------------------------------------------------------------------------
/Resources/BmCompat.ini:
--------------------------------------------------------------------------------
1 | [AppCompat]
2 | CPUScore1=1000
3 | CPUScore2=720
4 | CPUScore3=630
5 | CPUScore4=500
6 | CPUScore5=275
7 | CPUSpeed1=1.8
8 | CPUSpeed2=2.4
9 | CPUSpeed3=3.0
10 | CPUSpeed4=3.5
11 | CPUSpeed5=4.0
12 | CPUMultiCoreMult=1.75
13 | CPUHyperThreadMult=1.15
14 | CPUMemory1=0.5
15 | CPUMemory2=1.0
16 | CPUMemory3=1.0
17 | CPUMemory4=2.0
18 | CPUMemory5=3.0
19 | GPUmemory1=128
20 | GPUmemory2=128
21 | GPUmemory3=256
22 | GPUmemory4=512
23 | GPUmemory5=768
24 | GPUShader1=2
25 | GPUShader2=2
26 | GPUShader3=2
27 | GPUShader4=3
28 | GPUShader5=3
29 |
30 | [AppCompatGPU-0x10DE]
31 | VendorName=NVIDIA
32 | VendorMobileTag=Go
33 | 0x014F=1,GeForce 6200
34 | 0x00F3=1,GeForce 6200
35 | 0x0221=1,GeForce 6200
36 | 0x0163=1,GeForce 6200 LE
37 | 0x0162=1,GeForce 6200SE TurboCache(TM)
38 | 0x0161=1,GeForce 6200 TurboCache(TM)
39 | 0x0162=1,GeForce 6200SE TurboCache(TM)
40 | 0x0160=1,GeForce 6500
41 | 0x0141=2,GeForce 6600
42 | 0x00F2=2,GeForce 6600
43 | 0x0140=2,GeForce 6600 GT
44 | 0x00F1=2,GeForce 6600 GT
45 | 0x0142=2,GeForce 6600 LE
46 | 0x00F4=2,GeForce 6600 LE
47 | 0x0143=2,GeForce 6600 VE
48 | 0x0147=2,GeForce 6700 XL
49 | 0x0041=2,GeForce 6800
50 | 0x00C1=2,GeForce 6800
51 | 0x0047=2,GeForce 6800 GS
52 | 0x00F6=2,GeForce 6800 GS
53 | 0x00C0=2,GeForce 6800 GS
54 | 0x0045=2,GeForce 6800 GT
55 | 0x00F9=2,GeForce 6800 Series GPU
56 | 0x00C2=2,GeForce 6800 LE
57 | 0x0040=2,GeForce 6800 Ultra
58 | 0x00F9=2,GeForce 6800 Series GPU
59 | 0x0043=2,GeForce 6800 XE
60 | 0x0048=2,GeForce 6800 XT
61 | 0x0218=2,GeForce 6800 XT
62 | 0x00C3=2,GeForce 6800 XT
63 | 0x01DF=2,GeForce 7300 GS
64 | 0x0393=2,GeForce 7300 GT
65 | 0x01D1=2,GeForce 7300 LE
66 | 0x01D3=2,GeForce 7300 SE
67 | 0x01DD=2,GeForce 7500 LE
68 | 0x0392=3,GeForce 7600 GS
69 | 0x0392=3,GeForce 7600 GS
70 | 0x02E1=3,GeForce 7600 GS
71 | 0x0391=3,GeForce 7600 GT
72 | 0x0394=3,GeForce 7600 LE
73 | 0x00F5=4,GeForce 7800 GS
74 | 0x0092=4,GeForce 7800 GT
75 | 0x0091=4,GeForce 7800 GTX
76 | 0x0291=4,GeForce 7900 GT/GTO
77 | 0x0292=4,GeForce 7900 GS
78 | 0x0290=4,GeForce 7900 GTX
79 | 0x0293=4,GeForce 7900 GX2
80 | 0x0294=4,GeForce 7950 GX2
81 | 0x0322=0,GeForce FX 5200
82 | 0x0321=0,GeForce FX 5200 Ultra
83 | 0x0323=0,GeForce FX 5200LE
84 | 0x0326=1,GeForce FX 5500
85 | 0x0326=1,GeForce FX 5500
86 | 0x0312=1,GeForce FX 5600
87 | 0x0311=1,GeForce FX 5600 Ultra
88 | 0x0314=1,GeForce FX 5600XT
89 | 0x0342=1,GeForce FX 5700
90 | 0x0341=1,GeForce FX 5700 Ultra
91 | 0x0343=1,GeForce FX 5700LE
92 | 0x0344=1,GeForce FX 5700VE
93 | 0x0302=1,GeForce FX 5800
94 | 0x0301=1,GeForce FX 5800 Ultra
95 | 0x0331=1,GeForce FX 5900
96 | 0x0330=1,GeForce FX 5900 Ultra
97 | 0x0333=1,GeForce FX 5950 Ultra
98 | 0x0324=1,GeForce FX Go5200 64M
99 | 0x031A=1,GeForce FX Go5600
100 | 0x0347=1,GeForce FX Go5700
101 | 0x0167=1,GeForce Go 6200/6400
102 | 0x0168=1,GeForce Go 6200/6400
103 | 0x0148=1,GeForce Go 6600
104 | 0x00c8=2,GeForce Go 6800
105 | 0x00c9=2,GeForce Go 6800 Ultra
106 | 0x0098=3,GeForce Go 7800
107 | 0x0099=3,GeForce Go 7800 GTX
108 | 0x0298=3,GeForce Go 7900 GS
109 | 0x0299=3,GeForce Go 7900 GTX
110 | 0x0185=0,GeForce MX 4000
111 | 0x00FA=0,GeForce PCX 5750
112 | 0x00FB=0,GeForce PCX 5900
113 | 0x0110=0,GeForce2 MX/MX 400
114 | 0x0111=0,GeForce2 MX200
115 | 0x0110=0,GeForce2 MX/MX 400
116 | 0x0200=0,GeForce3
117 | 0x0201=0,GeForce3 Ti200
118 | 0x0202=0,GeForce3 Ti500
119 | 0x0172=0,GeForce4 MX 420
120 | 0x0171=0,GeForce4 MX 440
121 | 0x0181=0,GeForce4 MX 440 with AGP8X
122 | 0x0173=0,GeForce4 MX 440-SE
123 | 0x0170=0,GeForce4 MX 460
124 | 0x0253=0,GeForce4 Ti 4200
125 | 0x0281=0,GeForce4 Ti 4200 with AGP8X
126 | 0x0251=0,GeForce4 Ti 4400
127 | 0x0250=0,GeForce4 Ti 4600
128 | 0x0280=0,GeForce4 Ti 4800
129 | 0x0282=0,GeForce4 Ti 4800SE
130 | 0x0203=0,Quadro DCC
131 | 0x0309=1,Quadro FX 1000
132 | 0x034E=1,Quadro FX 1100
133 | 0x00FE=1,Quadro FX 1300
134 | 0x00CE=1,Quadro FX 1400
135 | 0x0308=1,Quadro FX 2000
136 | 0x0338=1,Quadro FX 3000
137 | 0x00FD=1,Quadro PCI-E Series
138 | 0x00F8=1,Quadro FX 3400/224400
139 | 0x00CD=1,Quadro FX 3450/4000 SDI
140 | 0x004E=1,Quadro FX 4000
141 | 0x00CD=1,Quadro FX 3450/4000 SDI
142 | 0x00F8=1,Quadro FX 3400/4400
143 | 0x009D=1,Quadro FX 4500
144 | 0x029F=1,Quadro FX 4500 X2
145 | 0x032B=1,Quadro FX 500/FX 600
146 | 0x014E=1,Quadro FX 540
147 | 0x014C=1,Quadro FX 540 MXM
148 | 0x032B=1,Quadro FX 500/FX 600
149 | 0X033F=1,Quadro FX 700
150 | 0x034C=1,Quadro FX Go1000
151 | 0x00CC=1,Quadro FX Go1400
152 | 0x031C=1,Quadro FX Go700
153 | 0x018A=1,Quadro NVS with AGP8X
154 | 0x032A=1,Quadro NVS 280 PCI
155 | 0x00FD=1,Quadro PCI-E Series
156 | 0x0165=1,Quadro NVS 285
157 | 0x017A=1,Quadro NVS
158 | 0x018A=1,Quadro NVS with AGP8X
159 | 0x0113=1,Quadro2 MXR/EX
160 | 0x017A=1,Quadro NVS
161 | 0x018B=1,Quadro4 380 XGL
162 | 0x0178=1,Quadro4 550 XGL
163 | 0x0188=1,Quadro4 580 XGL
164 | 0x025B=1,Quadro4 700 XGL
165 | 0x0259=1,Quadro4 750 XGL
166 | 0x0258=1,Quadro4 900 XGL
167 | 0x0288=1,Quadro4 980 XGL
168 | 0x028C=1,Quadro4 Go700
169 | 0x0295=4,NVIDIA GeForce 7950 GT
170 | 0x03D0=1,NVIDIA GeForce 6100 nForce 430
171 | 0x03D1=1,NVIDIA GeForce 6100 nForce 405
172 | 0x03D2=1,NVIDIA GeForce 6100 nForce 400
173 | 0x0241=1,NVIDIA GeForce 6150 LE
174 | 0x0242=1,NVIDIA GeForce 6100
175 | 0x0245=1,NVIDIA Quadro NVS 210S / NVIDIA GeForce 6150LE
176 | 0x029C=1,NVIDIA Quadro FX 5500
177 | 0x0191=5,NVIDIA GeForce 8800 GTX
178 | 0x0193=5,NVIDIA GeForce 8800 GTS
179 | 0x0400=4,NVIDIA GeForce 8600 GTS
180 | 0x0402=4,NVIDIA GeForce 8600 GT
181 | 0x0421=4,NVIDIA GeForce 8500 GT
182 | 0x0422=4,NVIDIA GeForce 8400 GS
183 | 0x0423=4,NVIDIA GeForce 8300 GS
184 |
185 | [AppCompatGPU-0x1002]
186 | VendorName=ATI
187 | VendorMobileTag=Mobility
188 | 0x5653=1,ATI MOBILITY/RADEON X700
189 | 0x7248=5,Radeon X1950 XTX Uber - Limited Edition
190 | 0x7268=5,Radeon X1950 XTX Uber - Limited Edition Secondary
191 | 0x554D=3,Radeon X800 CrossFire Edition
192 | 0x556D=3,Radeon X800 CrossFire Edition Secondary
193 | 0x5D52=3,Radeon X850 CrossFire Edition
194 | 0x5D72=3,Radeon X850 CrossFire Edition Secondary
195 | 0x564F=1,Radeon X550/X700 Series
196 | 0x4154=1,ATI FireGL T2
197 | 0x4174=1,ATI FireGL T2 Secondary
198 | 0x5B64=1,ATI FireGL V3100
199 | 0x5B74=1,ATI FireGL V3100 Secondary
200 | 0x3E54=1,ATI FireGL V3200
201 | 0x3E74=1,ATI FireGL V3200 Secondary
202 | 0x7152=1,ATI FireGL V3300
203 | 0x7172=1,ATI FireGL V3300 Secondary
204 | 0x7153=1,ATI FireGL V3350
205 | 0x7173=1,ATI FireGL V3350 Secondary
206 | 0x71D2=1,ATI FireGL V3400
207 | 0x71F2=1,ATI FireGL V3400 Secondary
208 | 0x5E48=1,ATI FireGL V5000
209 | 0x5E68=1,ATI FireGL V5000 Secondary
210 | 0x5551=1,ATI FireGL V5100
211 | 0x5571=1,ATI FireGL V5100 Secondary
212 | 0x71DA=1,ATI FireGL V5200
213 | 0x71FA=1,ATI FireGL V5200 Secondary
214 | 0x7105=1,ATI FireGL V5300
215 | 0x7125=1,ATI FireGL V5300 Secondary
216 | 0x5550=1,ATI FireGL V7100
217 | 0x5570=1,ATI FireGL V7100 Secondary
218 | 0x5D50=1,ATI FireGL V7200
219 | 0x7104=1,ATI FireGL V7200
220 | 0x5D70=1,ATI FireGL V7200 Secondary
221 | 0x7124=1,ATI FireGL V7200 Secondary
222 | 0x710E=1,ATI FireGL V7300
223 | 0x712E=1,ATI FireGL V7300 Secondary
224 | 0x710F=1,ATI FireGL V7350
225 | 0x712F=1,ATI FireGL V7350 Secondary
226 | 0x4E47=1,ATI FireGL X1
227 | 0x4E67=1,ATI FireGL X1 Secondary
228 | 0x4E4B=1,ATI FireGL X2-256/X2-256t
229 | 0x4E6B=1,ATI FireGL X2-256/X2-256t Secondary
230 | 0x4A4D=1,ATI FireGL X3-256
231 | 0x4A6D=1,ATI FireGL X3-256 Secondary
232 | 0x4147=1,ATI FireGL Z1
233 | 0x4167=1,ATI FireGL Z1 Secondary
234 | 0x5B65=1,ATI FireMV 2200
235 | 0x5B75=1,ATI FireMV 2200 Secondary
236 | 0x719B=1,ATI FireMV 2250
237 | 0x71BB=1,ATI FireMV 2250 Secondary
238 | 0x3151=1,ATI FireMV 2400
239 | 0x3171=1,ATI FireMV 2400 Secondary
240 | 0x724E=1,ATI FireStream 2U
241 | 0x726E=1,ATI FireStream 2U Secondary
242 | 0x4C58=1,ATI MOBILITY FIRE GL 7800
243 | 0x4E54=1,ATI MOBILITY FIRE GL T2/T2e
244 | 0x5464=1,ATI MOBILITY FireGL V3100
245 | 0x3154=1,ATI MOBILITY FireGL V3200
246 | 0x564A=1,ATI MOBILITY FireGL V5000
247 | 0x564B=1,ATI MOBILITY FireGL V5000
248 | 0x5D49=1,ATI MOBILITY FireGL V5100
249 | 0x71C4=1,ATI MOBILITY FireGL V5200
250 | 0x71D4=1,ATI MOBILITY FireGL V5250
251 | 0x7106=1,ATI MOBILITY FireGL V7100
252 | 0x7103=1,ATI MOBILITY FireGL V7200
253 | 0x4C59=1,ATI MOBILITY RADEON
254 | 0x4C57=1,ATI MOBILITY RADEON 7500
255 | 0x4E52=1,ATI MOBILITY RADEON 9500
256 | 0x4E56=1,ATI MOBILITY RADEON 9550
257 | 0x4E50=1,ATI MOBILITY RADEON 9600/9700 Series
258 | 0x4A4E=1,ATI MOBILITY RADEON 9800
259 | 0x7210=1,ATI Mobility Radeon HD 2300
260 | 0x7211=1,ATI Mobility Radeon HD 2300
261 | 0x94C9=1,ATI Mobility Radeon HD 2400
262 | 0x94C8=1,ATI Mobility Radeon HD 2400 XT
263 | 0x9581=1,ATI Mobility Radeon HD 2600
264 | 0x9583=1,ATI Mobility Radeon HD 2600 XT
265 | 0x714A=1,ATI Mobility Radeon X1300
266 | 0x7149=1,ATI Mobility Radeon X1300
267 | 0x714B=1,ATI Mobility Radeon X1300
268 | 0x714C=1,ATI Mobility Radeon X1300
269 | 0x718B=1,ATI Mobility Radeon X1350
270 | 0x718C=1,ATI Mobility Radeon X1350
271 | 0x7196=1,ATI Mobility Radeon X1350
272 | 0x7145=1,ATI Mobility Radeon X1400
273 | 0x7186=1,ATI Mobility Radeon X1450
274 | 0x718D=1,ATI Mobility Radeon X1450
275 | 0x71C5=1,ATI Mobility Radeon X1600
276 | 0x71D5=1,ATI Mobility Radeon X1700
277 | 0x71DE=1,ATI Mobility Radeon X1700
278 | 0x71D6=1,ATI Mobility Radeon X1700 XT
279 | 0x7102=1,ATI Mobility Radeon X1800
280 | 0x7101=1,ATI Mobility Radeon X1800 XT
281 | 0x7284=1,ATI Mobility Radeon X1900
282 | 0x718A=1,ATI Mobility Radeon X2300
283 | 0x7188=1,ATI Mobility Radeon X2300
284 | 0x5461=1,ATI MOBILITY RADEON X300
285 | 0x5460=1,ATI MOBILITY RADEON X300
286 | 0x3152=1,ATI MOBILITY RADEON X300
287 | 0x3150=1,ATI MOBILITY RADEON
288 | 0x5462=1,ATI MOBILITY RADEON X600 SE
289 | 0x5652=1,ATI MOBILITY RADEON X700
290 | 0x5653=1,ATI MOBILITY RADEON X700
291 | 0x5673=1,ATI MOBILITY RADEON X700 Secondary
292 | 0x5D4A=1,ATI MOBILITY RADEON X800
293 | 0x5D48=1,ATI MOBILITY RADEON X800 XT
294 | 0x4153=1,ATI Radeon 9550/X1050 Series
295 | 0x4173=1,ATI Radeon 9550/X1050 Series Secondary
296 | 0x4150=1,ATI RADEON 9600 Series
297 | 0x4E51=1,ATI RADEON 9600 Series
298 | 0x4151=1,ATI RADEON 9600 Series
299 | 0x4155=1,ATI RADEON 9600 Series
300 | 0x4152=1,ATI RADEON 9600 Series
301 | 0x4E71=1,ATI RADEON 9600 Series Secondary
302 | 0x4171=1,ATI RADEON 9600 Series Secondary
303 | 0x4170=1,ATI RADEON 9600 Series Secondary
304 | 0x4175=1,ATI RADEON 9600 Series Secondary
305 | 0x4172=1,ATI RADEON 9600 Series Secondary
306 | 0x9402=5,ATI Radeon HD 2900 XT
307 | 0x9403=5,ATI Radeon HD 2900 XT
308 | 0x9400=5,ATI Radeon HD 2900 XT
309 | 0x9401=5,ATI Radeon HD 2900 XT
310 | 0x791E=1,ATI Radeon X1200 Series
311 | 0x791F=1,ATI Radeon X1200 Series
312 | 0x7288=5,ATI Radeon X1950 GT
313 | 0x72A8=5,ATI Radeon X1950 GT Secondary
314 | 0x554E=3,ATI RADEON X800 GT
315 | 0x556E=3,ATI RADEON X800 GT Secondary
316 | 0x554D=3,ATI RADEON X800 XL
317 | 0x556D=3,ATI RADEON X800 XL Secondary
318 | 0x4B4B=3,ATI RADEON X850 PRO
319 | 0x4B6B=3,ATI RADEON X850 PRO Secondary
320 | 0x4B4A=3,ATI RADEON X850 SE
321 | 0x4B6A=3,ATI RADEON X850 SE Secondary
322 | 0x4B49=3,ATI RADEON X850 XT
323 | 0x4B4C=3,ATI RADEON X850 XT Platinum Edition
324 | 0x4B6C=3,ATI RADEON X850 XT Platinum Edition Secondary
325 | 0x4B69=3,ATI RADEON X850 XT Secondary
326 | 0x793F=1,ATI Radeon Xpress 1200 Series
327 | 0x7941=1,ATI Radeon Xpress 1200 Series
328 | 0x7942=1,ATI Radeon Xpress 1200 Series
329 | 0x5A61=1,ATI Radeon Xpress Series
330 | 0x5A63=1,ATI Radeon Xpress Series
331 | 0x5A62=1,ATI Radeon Xpress Series
332 | 0x5A41=1,ATI Radeon Xpress Series
333 | 0x5A43=1,ATI Radeon Xpress Series
334 | 0x5A42=1,ATI Radeon Xpress Series
335 | 0x5954=1,ATI Radeon Xpress Series
336 | 0x5854=1,ATI Radeon Xpress Series
337 | 0x5955=1,ATI Radeon Xpress Series
338 | 0x5974=1,ATI Radeon Xpress Series
339 | 0x5874=1,ATI Radeon Xpress Series
340 | 0x5975=1,ATI Radeon Xpress Series
341 | 0x4144=1,Radeon 9500
342 | 0x4149=1,Radeon 9500
343 | 0x4E45=1,Radeon 9500 PRO / 9700
344 | 0x4E65=1,Radeon 9500 PRO / 9700 Secondary
345 | 0x4164=1,Radeon 9500 Secondary
346 | 0x4169=1,Radeon 9500 Secondary
347 | 0x4E46=1,Radeon 9600 TX
348 | 0x4E66=1,Radeon 9600 TX Secondary
349 | 0x4146=1,Radeon 9600TX
350 | 0x4166=1,Radeon 9600TX Secondary
351 | 0x4E44=1,Radeon 9700 PRO
352 | 0x4E64=1,Radeon 9700 PRO Secondary
353 | 0x4E49=1,Radeon 9800
354 | 0x4E48=1,Radeon 9800 PRO
355 | 0x4E68=1,Radeon 9800 PRO Secondary
356 | 0x4148=1,Radeon 9800 SE
357 | 0x4168=1,Radeon 9800 SE Secondary
358 | 0x4E69=1,Radeon 9800 Secondary
359 | 0x4E4A=1,Radeon 9800 XT
360 | 0x4E6A=1,Radeon 9800 XT Secondary
361 | 0x7146=2,Radeon X1300 / X1550 Series
362 | 0x7166=2,Radeon X1300 / X1550 Series Secondary
363 | 0x714E=2,Radeon X1300 Series
364 | 0x715E=2,Radeon X1300 Series
365 | 0x714D=2,Radeon X1300 Series
366 | 0x71C3=2,Radeon X1300 Series
367 | 0x718F=2,Radeon X1300 Series
368 | 0x716E=2,Radeon X1300 Series Secondary
369 | 0x717E=2,Radeon X1300 Series Secondary
370 | 0x716D=2,Radeon X1300 Series Secondary
371 | 0x71E3=2,Radeon X1300 Series Secondary
372 | 0x71AF=2,Radeon X1300 Series Secondary
373 | 0x7142=2,Radeon X1300/X1550 Series
374 | 0x7180=2,Radeon X1300/X1550 Series
375 | 0x7183=2,Radeon X1300/X1550 Series
376 | 0x7187=2,Radeon X1300/X1550 Series
377 | 0x7162=2,Radeon X1300/X1550 Series Secondary
378 | 0x71A0=2,Radeon X1300/X1550 Series Secondary
379 | 0x71A3=2,Radeon X1300/X1550 Series Secondary
380 | 0x71A7=2,Radeon X1300/X1550 Series Secondary
381 | 0x7147=2,Radeon X1550 64-bit
382 | 0x715F=2,Radeon X1550 64-bit
383 | 0x719F=2,Radeon X1550 64-bit
384 | 0x7167=2,Radeon X1550 64-bit Secondary
385 | 0x717F=2,Radeon X1550 64-bit Secondary
386 | 0x7143=2,Radeon X1550 Series
387 | 0x7193=2,Radeon X1550 Series
388 | 0x7163=2,Radeon X1550 Series Secondary
389 | 0x71B3=2,Radeon X1550 Series Secondary
390 | 0x71CE=3,Radeon X1600 Pro / Radeon X1300 XT
391 | 0x71EE=3,Radeon X1600 Pro / Radeon X1300 XT Secondary
392 | 0x7140=3,Radeon X1600 Series
393 | 0x71C0=3,Radeon X1600 Series
394 | 0x71C2=3,Radeon X1600 Series
395 | 0x71C6=3,Radeon X1600 Series
396 | 0x7181=3,Radeon X1600 Series
397 | 0x71CD=3,Radeon X1600 Series
398 | 0x7160=3,Radeon X1600 Series Secondary
399 | 0x71E2=3,Radeon X1600 Series Secondary
400 | 0x71E6=3,Radeon X1600 Series Secondary
401 | 0x71A1=3,Radeon X1600 Series Secondary
402 | 0x71ED=3,Radeon X1600 Series Secondary
403 | 0x71E0=3,Radeon X1600 Series Secondary
404 | 0x71C1=3,Radeon X1650 Series
405 | 0x7293=3,Radeon X1650 Series
406 | 0x7291=3,Radeon X1650 Series
407 | 0x71C7=3,Radeon X1650 Series
408 | 0x71E1=3,Radeon X1650 Series Secondary
409 | 0x72B3=3,Radeon X1650 Series Secondary
410 | 0x72B1=3,Radeon X1650 Series Secondary
411 | 0x71E7=3,Radeon X1650 Series Secondary
412 | 0x7100=4,Radeon X1800 Series
413 | 0x7108=4,Radeon X1800 Series
414 | 0x7109=4,Radeon X1800 Series
415 | 0x710A=4,Radeon X1800 Series
416 | 0x710B=4,Radeon X1800 Series
417 | 0x710C=4,Radeon X1800 Series
418 | 0x7120=4,Radeon X1800 Series Secondary
419 | 0x7128=4,Radeon X1800 Series Secondary
420 | 0x7129=4,Radeon X1800 Series Secondary
421 | 0x712A=4,Radeon X1800 Series Secondary
422 | 0x712B=4,Radeon X1800 Series Secondary
423 | 0x712C=4,Radeon X1800 Series Secondary
424 | 0x7243=5,Radeon X1900 Series
425 | 0x7245=5,Radeon X1900 Series
426 | 0x7246=5,Radeon X1900 Series
427 | 0x7247=5,Radeon X1900 Series
428 | 0x7248=5,Radeon X1900 Series
429 | 0x7249=5,Radeon X1900 Series
430 | 0x724A=5,Radeon X1900 Series
431 | 0x724B=5,Radeon X1900 Series
432 | 0x724C=5,Radeon X1900 Series
433 | 0x724D=5,Radeon X1900 Series
434 | 0x724F=5,Radeon X1900 Series
435 | 0x7263=5,Radeon X1900 Series Secondary
436 | 0x7265=5,Radeon X1900 Series Secondary
437 | 0x7266=5,Radeon X1900 Series Secondary
438 | 0x7267=5,Radeon X1900 Series Secondary
439 | 0x7268=5,Radeon X1900 Series Secondary
440 | 0x7269=5,Radeon X1900 Series Secondary
441 | 0x726A=5,Radeon X1900 Series Secondary
442 | 0x726B=5,Radeon X1900 Series Secondary
443 | 0x726C=5,Radeon X1900 Series Secondary
444 | 0x726D=5,Radeon X1900 Series Secondary
445 | 0x726F=5,Radeon X1900 Series Secondary
446 | 0x7280=5,Radeon X1950 Series
447 | 0x7240=5,Radeon X1950 Series
448 | 0x7244=5,Radeon X1950 Series
449 | 0x72A0=5,Radeon X1950 Series Secondary
450 | 0x7260=5,Radeon X1950 Series Secondary
451 | 0x7264=5,Radeon X1950 Series Secondary
452 | 0x5B60=1,Radeon X300/X550/X1050 Series
453 | 0x5B63=1,Radeon X300/X550/X1050 Series
454 | 0x5B73=1,Radeon X300/X550/X1050 Series Secondary
455 | 0x5B70=1,Radeon X300/X550/X1050 Series Secondary
456 | 0x5657=1,Radeon X550/X700 Series
457 | 0x5677=1,Radeon X550/X700 Series Secondary
458 | 0x5B62=1,Radeon X600 Series
459 | 0x5B72=1,Radeon X600 Series Secondary
460 | 0x3E50=1,Radeon X600/X550 Series
461 | 0x3E70=1,Radeon X600/X550 Series Secondary
462 | 0x5E4D=2,Radeon X700
463 | 0x5E4B=2,Radeon X700 PRO
464 | 0x5E6B=2,Radeon X700 PRO Secondary
465 | 0x5E4C=2,Radeon X700 SE
466 | 0x5E6C=2,Radeon X700 SE Secondary
467 | 0x5E6D=2,Radeon X700 Secondary
468 | 0x5E4A=2,Radeon X700 XT
469 | 0x5E6A=2,Radeon X700 XT Secondary
470 | 0x5E4F=2,Radeon X700/X550 Series
471 | 0x5E6F=2,Radeon X700/X550 Series Secondary
472 | 0x554B=3,Radeon X800 GT
473 | 0x556B=3,Radeon X800 GT Secondary
474 | 0x5549=3,Radeon X800 GTO
475 | 0x554F=3,Radeon X800 GTO
476 | 0x5D4F=3,Radeon X800 GTO
477 | 0x5569=3,Radeon X800 GTO Secondary
478 | 0x556F=3,Radeon X800 GTO Secondary
479 | 0x5D6F=3,Radeon X800 GTO Secondary
480 | 0x4A49=3,Radeon X800 PRO
481 | 0x4A69=3,Radeon X800 PRO Secondary
482 | 0x4A4F=3,Radeon X800 SE
483 | 0x4A6F=3,Radeon X800 SE Secondary
484 | 0x4A48=3,Radeon X800 Series
485 | 0x4A4A=3,Radeon X800 Series
486 | 0x4A4C=3,Radeon X800 Series
487 | 0x5548=3,Radeon X800 Series
488 | 0x4A68=3,Radeon X800 Series Secondary
489 | 0x4A6A=3,Radeon X800 Series Secondary
490 | 0x4A6C=3,Radeon X800 Series Secondary
491 | 0x5568=3,Radeon X800 Series Secondary
492 | 0x4A54=3,Radeon X800 VE
493 | 0x4A74=3,Radeon X800 VE Secondary
494 | 0x4A4B=3,Radeon X800 XT
495 | 0x5D57=3,Radeon X800 XT
496 | 0x4A50=3,Radeon X800 XT Platinum Edition
497 | 0x554A=3,Radeon X800 XT Platinum Edition
498 | 0x4A70=3,Radeon X800 XT Platinum Edition Secondary
499 | 0x556A=3,Radeon X800 XT Platinum Edition Secondary
500 | 0x4A6B=3,Radeon X800 XT Secondary
501 | 0x5D77=3,Radeon X800 XT Secondary
502 | 0x5D52=3,Radeon X850 XT
503 | 0x5D4D=3,Radeon X850 XT Platinum Edition
504 | 0x5D6D=3,Radeon X850 XT Platinum Edition Secondary
505 | 0x5D72=3,Radeon X850 XT Secondary
506 |
507 | [Configuration]
508 |
509 | [IniVersion]
510 | 0=1648979642.000000
511 | 1=1648928432.000000
512 | 2=1648928444.000000
513 |
514 |
--------------------------------------------------------------------------------
/Resources/BmLightmass.ini:
--------------------------------------------------------------------------------
1 | [DevOptions.DebugOptions]
2 | bAllowAdvancedOptions=True
3 | LightmapResolutionFactorScale=32.0
4 |
5 | [DevOptions.StaticLighting]
6 | bAllowMultiThreadedStaticLighting=True
7 | ViewSingleBounceNumber=-1
8 | bUseConservativeTexelRasterization=True
9 | bAccountForTexelSize=True
10 | bUseMaxWeight=True
11 | MaxTriangleLightingSamples=8
12 | MaxTriangleIrradiancePhotonCacheSamples=4
13 | bAllowLightmapCompression=True
14 | bAllowEagerLightmapEncode=False
15 | bUseBilinearFilterLightmaps=True
16 | bRepackLightAndShadowMapTextures=False
17 | bAllow64bitProcess=True
18 | DefaultStaticMeshLightingRes=32
19 | bAllowCropping=False
20 | bGarbageCollectAfterExport=True
21 | bRebuildDirtyGeometryForLighting=True
22 |
23 | [DevOptions.StaticLightingSceneConstants]
24 | StaticLightingLevelScale=1
25 | VisibilityRayOffsetDistance=.1
26 | VisibilityNormalOffsetDistance=3
27 | VisibilityNormalOffsetSampleRadiusScale=.5
28 | VisibilityTangentOffsetSampleRadiusScale=.8
29 | SmallestTexelRadius=.1
30 | LightGridSize=100
31 | DirectionalCoefficientFalloffPower=.85
32 | DirectionalCoefficientScale=2
33 | CustomImportanceVolumeExpandBy=4000
34 | MinimumImportanceVolumeExtentWithoutWarning=5000.0
35 |
36 | [DevOptions.StaticLightingMaterial]
37 | bUseDebugMaterial=False
38 | ShowMaterialAttribute=None
39 | EmissiveSampleSize=128
40 | DiffuseSampleSize=128
41 | SpecularSampleSize=128
42 | TransmissionSampleSize=256
43 | NormalSampleSize=256
44 | TerrainSampleScalar=4
45 | DebugDiffuse=(R=0.500000,G=0.500000,B=0.500000)
46 | DebugSpecular=(R=0.000000,G=0.000000,B=0.000000)
47 | DebugSpecularPower=64
48 | EnvironmentColor=(R=0.00000,G=0.00000,B=0.00000)
49 |
50 | [DevOptions.MeshAreaLights]
51 | bVisualizeMeshAreaLightPrimitives=False
52 | EmissiveIntensityThreshold=.01
53 | MeshAreaLightGridSize=100
54 | MeshAreaLightSimplifyNormalAngleThreshold=25
55 | MeshAreaLightSimplifyCornerDistanceThreshold=.5
56 | MeshAreaLightSimplifyMeshBoundingRadiusFractionThreshold=.1
57 | MeshAreaLightGeneratedDynamicLightSurfaceOffset=30
58 |
59 | [DevOptions.PrecomputedDynamicObjectLighting]
60 | bVisualizeVolumeLightSamples=False
61 | bVisualizeVolumeLightInterpolation=False
62 | SurfaceLightSampleSpacing=200
63 | FirstSurfaceSampleLayerHeight=50
64 | SurfaceSampleLayerHeightSpacing=210
65 | NumSurfaceSampleLayers=2
66 | DetailVolumeSampleSpacing=300
67 | VolumeLightSampleSpacing=2000
68 | MaxVolumeSamples=50000
69 |
70 | [DevOptions.PrecomputedVisibility]
71 | bVisualizePrecomputedVisibility=False
72 | bCompressVisibilityData=True
73 | bPlaceCellsOnOpaqueOnly=True
74 | NumCellDistributionBuckets=800
75 | CellRenderingBucketSize=5
76 | NumCellRenderingBuckets=5
77 | PlayAreaHeight=220
78 | MeshBoundsScale=1.2
79 | VisibilitySpreadingIterations=1
80 | MinMeshSamples=28
81 | MaxMeshSamples=80
82 | NumCellSamples=24
83 | NumImportanceSamples=40
84 |
85 | [DevOptions.PrecomputedVisibilityModeratelyAggressive]
86 | MeshBoundsScale=1
87 | VisibilitySpreadingIterations=1
88 |
89 | [DevOptions.PrecomputedVisibilityMostAggressive]
90 | MeshBoundsScale=1
91 | VisibilitySpreadingIterations=0
92 |
93 | [DevOptions.VolumeDistanceField]
94 | VoxelSize=75
95 | VolumeMaxDistance=900
96 | NumVoxelDistanceSamples=800
97 | MaxVoxels=3992160
98 |
99 | [DevOptions.StaticShadows]
100 | bUseZeroAreaLightmapSpaceFilteredLights=False
101 | NumShadowRays=8
102 | NumPenumbraShadowRays=8
103 | NumBounceShadowRays=1
104 | bFilterShadowFactor=True
105 | ShadowFactorGradientTolerance=0.5
106 | bAllowSignedDistanceFieldShadows=True
107 | MaxTransitionDistanceWorldSpace=50
108 | ApproximateHighResTexelsPerMaxTransitionDistance=50
109 | MinDistanceFieldUpsampleFactor=3
110 | DominantShadowTransitionSampleDistanceX=100
111 | DominantShadowTransitionSampleDistanceY=100
112 | DominantShadowSuperSampleFactor=10
113 | DominantShadowMaxSamples=1536000
114 | MinUnoccludedFraction=.005
115 |
116 | [DevOptions.ImportanceTracing]
117 | bUsePathTracer=False
118 | bUseCosinePDF=False
119 | bUseStratifiedSampling=True
120 | NumPaths=128
121 | NumHemisphereSamples=64
122 | NumBounceHemisphereSamples=64
123 | MaxHemisphereRayAngle=89
124 |
125 | [DevOptions.PhotonMapping]
126 | bUsePhotonMapping=True
127 | bUseFinalGathering=True
128 | bUsePhotonsForDirectLighting=False
129 | bUseIrradiancePhotons=True
130 | bCacheIrradiancePhotonsOnSurfaces=True
131 | bOptimizeDirectLightingWithPhotons=False
132 | bVisualizePhotonPaths=False
133 | bVisualizePhotonGathers=True
134 | bVisualizePhotonImportanceSamples=True
135 | bVisualizeIrradiancePhotonCalculation=False
136 | bEmitPhotonsOutsideImportanceVolume=False
137 | ConeFilterConstant=1
138 | NumIrradianceCalculationPhotons=400
139 | FinalGatherImportanceSampleFraction=.6
140 | FinalGatherImportanceSampleConeAngle=10
141 | IndirectPhotonEmitDiskRadius=200
142 | IndirectPhotonEmitConeAngle=30
143 | MaxImportancePhotonSearchDistance=2000
144 | MinImportancePhotonSearchDistance=20
145 | NumImportanceSearchPhotons=10
146 | OutsideImportanceVolumeDensityScale=.0005
147 | DirectPhotonDensity=350
148 | DirectIrradiancePhotonDensity=350
149 | DirectPhotonSearchDistance=200
150 | IndirectPhotonPathDensity=5
151 | IndirectPhotonDensity=600
152 | IndirectIrradiancePhotonDensity=300
153 | IndirectPhotonSearchDistance=200
154 | CausticPhotonDensity=0
155 | CausticPhotonSearchDistance=100
156 | PhotonSearchAngleThreshold=.5
157 | IrradiancePhotonSearchConeAngle=10
158 | MaxDirectLightingPhotonOptimizationAngle=80
159 | CachedIrradiancePhotonDownsampleFactor=2
160 | OutsideVolumeIrradiancePhotonDistanceThreshold=2000
161 |
162 | [DevOptions.IrradianceCache]
163 | bAllowIrradianceCaching=True
164 | bUseIrradianceGradients=False
165 | bShowGradientsOnly=False
166 | bVisualizeIrradianceSamples=True
167 | RecordRadiusScale=.4
168 | InterpolationMaxAngle=20
169 | PointBehindRecordMaxAngle=10
170 | DistanceSmoothFactor=2
171 | AngleSmoothFactor=2
172 | RecordBounceRadiusScale=.3
173 | MinRecordRadius=16
174 | MaxRecordRadius=1024
175 |
176 | [DevOptions.StaticLightingMediumQuality]
177 | NumShadowRaysScale=2
178 | NumPenumbraShadowRaysScale=4
179 | ApproximateHighResTexelsPerMaxTransitionDistanceScale=3
180 | MinDistanceFieldUpsampleFactor=3
181 | NumHemisphereSamplesScale=2
182 | NumImportanceSearchPhotonsScale=1
183 | NumDirectPhotonsScale=2
184 | DirectPhotonSearchDistanceScale=.5
185 | NumIndirectPhotonPathsScale=1
186 | NumIndirectPhotonsScale=2
187 | NumIndirectIrradiancePhotonsScale=2
188 | NumCausticPhotonsScale=1
189 | RecordRadiusScaleScale=.75
190 | InterpolationMaxAngleScale=.75
191 | MinRecordRadiusScale=.5
192 |
193 | [DevOptions.StaticLightingHighQuality]
194 | NumShadowRaysScale=4
195 | NumPenumbraShadowRaysScale=8
196 | ApproximateHighResTexelsPerMaxTransitionDistanceScale=6
197 | MinDistanceFieldUpsampleFactor=5
198 | NumHemisphereSamplesScale=4
199 | NumImportanceSearchPhotonsScale=2
200 | NumDirectPhotonsScale=2
201 | DirectPhotonSearchDistanceScale=.5
202 | NumIndirectPhotonPathsScale=2
203 | NumIndirectPhotonsScale=4
204 | NumIndirectIrradiancePhotonsScale=2
205 | NumCausticPhotonsScale=1
206 | RecordRadiusScaleScale=.5
207 | InterpolationMaxAngleScale=.5
208 | MinRecordRadiusScale=.5
209 |
210 | [DevOptions.StaticLightingProductionQuality]
211 | NumShadowRaysScale=8
212 | NumPenumbraShadowRaysScale=32
213 | ApproximateHighResTexelsPerMaxTransitionDistanceScale=6
214 | MinDistanceFieldUpsampleFactor=5
215 | NumHemisphereSamplesScale=8
216 | NumImportanceSearchPhotonsScale=3
217 | NumDirectPhotonsScale=4
218 | DirectPhotonSearchDistanceScale=.5
219 | NumIndirectPhotonPathsScale=2
220 | NumIndirectPhotonsScale=8
221 | NumIndirectIrradiancePhotonsScale=2
222 | NumCausticPhotonsScale=1
223 | RecordRadiusScaleScale=.25
224 | InterpolationMaxAngleScale=.5
225 | MinRecordRadiusScale=.5
226 |
227 | [Configuration]
228 |
229 | [IniVersion]
230 | 0=1648979511.000000
231 | 1=1648928426.000000
232 | 2=1648928424.000000
233 |
234 |
--------------------------------------------------------------------------------
/Resources/BmUI.ini:
--------------------------------------------------------------------------------
1 | [Engine.UIInteraction]
2 | UIJoystickDeadZone=0.9
3 | UIAxisMultiplier=1.0
4 | AxisRepeatDelay=0.2
5 | MouseButtonRepeatDelay=0.15
6 | DoubleClickTriggerSeconds=0.5
7 | DoubleClickPixelTolerance=1
8 | ConfiguredAxisEmulationDefinitions=(AxisInputKey=MouseX,AdjacentAxisInputKey=MouseY,bEmulateButtonPress=False)
9 | ConfiguredAxisEmulationDefinitions=(AxisInputKey=MouseY,AdjacentAxisInputKey=MouseX,bEmulateButtonPress=False)
10 | ConfiguredAxisEmulationDefinitions=(AxisInputKey=XboxTypeS_LeftX,AdjacentAxisInputKey=XboxTypeS_LeftY,bEmulateButtonPress=True,InputKeyToEmulate[0]=Gamepad_LeftStick_Right,InputKeyToEmulate[1]=Gamepad_LeftStick_Left)
11 | ConfiguredAxisEmulationDefinitions=(AxisInputKey=XboxTypeS_LeftY,AdjacentAxisInputKey=XboxTypeS_LeftX,bEmulateButtonPress=True,InputKeyToEmulate[0]=Gamepad_LeftStick_Up,InputKeyToEmulate[1]=Gamepad_LeftStick_Down)
12 | ConfiguredAxisEmulationDefinitions=(AxisInputKey=XboxTypeS_RightX,AdjacentAxisInputKey=XboxTypeS_RightY,bEmulateButtonPress=True,InputKeyToEmulate[0]=Gamepad_RightStick_Right,InputKeyToEmulate[1]=Gamepad_RightStick_Left)
13 | ConfiguredAxisEmulationDefinitions=(AxisInputKey=XboxTypeS_RightY,AdjacentAxisInputKey=XboxTypeS_RightX,bEmulateButtonPress=True,InputKeyToEmulate[0]=Gamepad_RightStick_Down,InputKeyToEmulate[1]=Gamepad_RightStick_Up)
14 |
15 | [Engine.GameUISceneClient]
16 | OverlaySceneAlphaModulation=0.45
17 | bRestrictActiveControlToFocusedScene=true
18 | bCaptureUnprocessedInput=True
19 | bEnableDebugInput=true
20 | bRenderDebugInfo=false
21 | bRenderActiveControlInfo=true
22 | bRenderFocusedControlInfo=true
23 | bRenderTargetControlInfo=true
24 | bRenderDebugInfoAtTop=true
25 | bSelectVisibleTargetsOnly=true
26 | bInteractiveMode=false
27 | bDisplayFullPaths=true
28 | bShowWidgetPath=true
29 | bShowRenderBounds=true
30 | bShowCurrentState=true
31 | bShowMousePos=true
32 |
33 | [Configuration]
34 |
35 | [IniVersion]
36 | 0=1648979511.000000
37 | 1=1648928427.000000
38 | 2=1648928424.000000
39 |
40 |
--------------------------------------------------------------------------------
/Resources/Default_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/Default_2.jpg
--------------------------------------------------------------------------------
/Resources/GlobalShaderCache-PC-D3D-SM3.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/GlobalShaderCache-PC-D3D-SM3.bin
--------------------------------------------------------------------------------
/Resources/GlobalShaderCache-PC-D3D-SM5.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/GlobalShaderCache-PC-D3D-SM5.bin
--------------------------------------------------------------------------------
/Resources/High Contrast_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/High Contrast_2.jpg
--------------------------------------------------------------------------------
/Resources/Log 1_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/Log 1_2.jpg
--------------------------------------------------------------------------------
/Resources/Log 2_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/Log 2_2.jpg
--------------------------------------------------------------------------------
/Resources/Monochrome_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/Monochrome_2.jpg
--------------------------------------------------------------------------------
/Resources/Muted_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/Muted_2.jpg
--------------------------------------------------------------------------------
/Resources/Phase1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/Phase1.jpg
--------------------------------------------------------------------------------
/Resources/Phase2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/Phase2.jpg
--------------------------------------------------------------------------------
/Resources/Phase3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/Phase3.jpg
--------------------------------------------------------------------------------
/Resources/UserEngine.ini:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/UserEngine.ini
--------------------------------------------------------------------------------
/Resources/UserGame.ini:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/UserGame.ini
--------------------------------------------------------------------------------
/Resources/centre_camera.txt:
--------------------------------------------------------------------------------
1 | set R3rdPersonCamera WalkCamConfig (StateFreeCameraSitOffsetMin=(X=0.000000,Y=0.000000,Z=0.000000),StateFreeCameraSitOffsetMax=(X=0.000000,Y=0.000000,Z=0.000000),StateFreeCameraPullOffset=(X=0.000000,Y=0.000000,Z=0.000000),CameraPivotOffset=(X=0.000000,Y=0.000000,Z=65.000000),ZoomedOffset=(X=0.000000,Y=0.000000,Z=80.000000),maxPitch=14500.000000,MinPitch=-13000.000000,MinFreeCameraDistance=300.000000,MaxFreeCameraDistance=300.000000,ShortCamSpringConst=250.000000,LongCamSpringConst=250.000000,DefaultCameraPitch=-910.000000,CameraSitOffsetPower=1.500000,bUseSeparate43Settings=True,StateFreeCamera43SitOffsetMax=(X=0.000000,Y=25.000000,Z=60.000000),StateFreeCamera43SitOffsetMin=(X=-100.000000,Y=67.000000,Z=-20.000000),bDontModifySitOffsetWhenLookingUp=False)
--------------------------------------------------------------------------------
/Resources/custom_commands.txt:
--------------------------------------------------------------------------------
1 | //Type custom commands here and execute them with the keybind you set using the advanced launcher.
--------------------------------------------------------------------------------
/Resources/icon2.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/icon2.ico
--------------------------------------------------------------------------------
/Resources/nexus_icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/nexus_icon.ico
--------------------------------------------------------------------------------
/Resources/startup.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/Resources/startup.wav
--------------------------------------------------------------------------------
/UI/InputForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace CityLauncher
2 | {
3 | partial class InputForm
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InputForm));
32 | this.label2 = new System.Windows.Forms.Label();
33 | this.KeybindValueLabel = new System.Windows.Forms.Label();
34 | this.label3 = new System.Windows.Forms.Label();
35 | this.label1 = new System.Windows.Forms.Label();
36 | this.label4 = new System.Windows.Forms.Label();
37 | this.SuspendLayout();
38 | //
39 | // label2
40 | //
41 | this.label2.AutoSize = true;
42 | this.label2.Font = new System.Drawing.Font("Impact", 24F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
43 | this.label2.ForeColor = System.Drawing.Color.Black;
44 | this.label2.Location = new System.Drawing.Point(7, 128);
45 | this.label2.Name = "label2";
46 | this.label2.Size = new System.Drawing.Size(130, 39);
47 | this.label2.TabIndex = 1;
48 | this.label2.Text = "KEYBIND:";
49 | this.label2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.label4_MouseClick);
50 | //
51 | // KeybindValueLabel
52 | //
53 | this.KeybindValueLabel.AutoSize = true;
54 | this.KeybindValueLabel.Font = new System.Drawing.Font("Impact", 24F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
55 | this.KeybindValueLabel.ForeColor = System.Drawing.Color.Maroon;
56 | this.KeybindValueLabel.Location = new System.Drawing.Point(143, 128);
57 | this.KeybindValueLabel.Name = "KeybindValueLabel";
58 | this.KeybindValueLabel.Size = new System.Drawing.Size(0, 39);
59 | this.KeybindValueLabel.TabIndex = 2;
60 | this.KeybindValueLabel.MouseClick += new System.Windows.Forms.MouseEventHandler(this.label4_MouseClick);
61 | //
62 | // label3
63 | //
64 | this.label3.AutoSize = true;
65 | this.label3.Font = new System.Drawing.Font("Calibri", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
66 | this.label3.Location = new System.Drawing.Point(7, 9);
67 | this.label3.Name = "label3";
68 | this.label3.Size = new System.Drawing.Size(584, 33);
69 | this.label3.TabIndex = 3;
70 | this.label3.Text = "Press ESCAPE (ESC) to close this window and abort.";
71 | this.label3.MouseClick += new System.Windows.Forms.MouseEventHandler(this.label4_MouseClick);
72 | //
73 | // label1
74 | //
75 | this.label1.AutoSize = true;
76 | this.label1.Font = new System.Drawing.Font("Calibri", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
77 | this.label1.Location = new System.Drawing.Point(7, 43);
78 | this.label1.Name = "label1";
79 | this.label1.Size = new System.Drawing.Size(464, 33);
80 | this.label1.TabIndex = 4;
81 | this.label1.Text = "Press BACKSPACE to delete the Keybind.\r\n";
82 | this.label1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.label4_MouseClick);
83 | //
84 | // label4
85 | //
86 | this.label4.AutoSize = true;
87 | this.label4.Font = new System.Drawing.Font("Calibri", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
88 | this.label4.Location = new System.Drawing.Point(7, 77);
89 | this.label4.Name = "label4";
90 | this.label4.Size = new System.Drawing.Size(420, 33);
91 | this.label4.TabIndex = 5;
92 | this.label4.Text = "Confirm Keybind by pressing ENTER.";
93 | this.label4.MouseClick += new System.Windows.Forms.MouseEventHandler(this.label4_MouseClick);
94 | //
95 | // InputForm
96 | //
97 | this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
98 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
99 | this.AutoSize = true;
100 | this.BackColor = System.Drawing.Color.White;
101 | this.ClientSize = new System.Drawing.Size(587, 188);
102 | this.Controls.Add(this.label4);
103 | this.Controls.Add(this.label1);
104 | this.Controls.Add(this.label3);
105 | this.Controls.Add(this.KeybindValueLabel);
106 | this.Controls.Add(this.label2);
107 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
108 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
109 | this.Name = "InputForm";
110 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
111 | this.Text = "InputForm";
112 | this.Load += new System.EventHandler(this.InputForm_Load);
113 | this.Paint += new System.Windows.Forms.PaintEventHandler(this.InputForm_Paint);
114 | this.ResumeLayout(false);
115 | this.PerformLayout();
116 |
117 | }
118 |
119 | #endregion
120 | private Label label2;
121 | private Label KeybindValueLabel;
122 | private Label label3;
123 | private Label label1;
124 | private Label label4;
125 | }
126 | }
--------------------------------------------------------------------------------
/UI/InputForm.cs:
--------------------------------------------------------------------------------
1 | using NLog;
2 | using System.Runtime.InteropServices;
3 |
4 |
5 | namespace CityLauncher
6 | {
7 | public partial class InputForm : Form
8 | {
9 | private string ModifierString = "";
10 | private string KeyString = "";
11 |
12 | private string[] ToSanitize = { "OemBackslash", "Oemcomma", "OemPeriod", "OemQuestion", "OemOpenBrackets", "Capital", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "D0", "OemMinus", "Oemplus", "PageUp", "Next", "Equals" };
13 | private string[] Sanitized = { "\\", ",", ".", "/", "[", "Caps", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "=", "Page Up", "Page Down", "=" };
14 |
15 | private Button Input;
16 |
17 | private static Logger Nlog = LogManager.GetCurrentClassLogger();
18 |
19 | [DllImport("user32.dll")]
20 | private static extern short GetKeyState(int KeyCode);
21 |
22 | private const int VK_RSHIFT = 0xA1;
23 | private const int VK_RCONTROL = 0xA3;
24 | private const int VK_RMENU = 0xA5;
25 |
26 |
27 | public InputForm(Button InputButton)
28 | {
29 | InitializeComponent();
30 | Input = InputButton;
31 | this.KeyDown += InputForm_KeyDown;
32 | this.MouseClick += InputForm_MouseClick;
33 | this.MouseWheel += InputForm_MouseWheel;
34 | Program.MainWindow.ControlSettingChanged = true;
35 | CenterMouseCursor();
36 | Nlog.Info("Constructor - Created a new instance of InputForm for '{0}'.", InputButton.Name);
37 | }
38 |
39 | private void CenterMouseCursor()
40 | {
41 | Screen ActiveScreen = Screen.FromControl(this);
42 | Cursor.Position = new Point(ActiveScreen.Bounds.Width / 2, ActiveScreen.Bounds.Height / 2);
43 | }
44 |
45 | private void InputForm_MouseWheel(object? sender, MouseEventArgs e)
46 | {
47 | if (e.Delta > 0)
48 | {
49 | KeyString = "Mousewheel Up";
50 | }
51 | else
52 | {
53 | KeyString = "Mousewheel Down";
54 | }
55 |
56 | if (ModifierString != "" && KeyString != "")
57 | {
58 | KeybindValueLabel.Text = ModifierString + " + " + KeyString;
59 | }
60 | else if (ModifierString != "" && KeyString == "")
61 | {
62 | KeybindValueLabel.Text = ModifierString;
63 | }
64 | else
65 | {
66 | KeybindValueLabel.Text = KeyString;
67 | }
68 | }
69 |
70 | private void InputForm_MouseClick(object? sender, MouseEventArgs e)
71 | {
72 | switch (e.Button)
73 | {
74 | case MouseButtons.Left:
75 | KeyString = "Left Mouse";
76 | break;
77 | case MouseButtons.Right:
78 | KeyString = "Right Mouse";
79 | break;
80 | case MouseButtons.Middle:
81 | KeyString = "Middle Mouse";
82 | break;
83 | case MouseButtons.XButton1:
84 | KeyString = "Mouse Thumb 1";
85 | break;
86 | case MouseButtons.XButton2:
87 | KeyString = "Mouse Thumb 2";
88 | break;
89 | }
90 |
91 | if (ModifierString != "" && KeyString != "")
92 | {
93 | KeybindValueLabel.Text = ModifierString + " + " + KeyString;
94 | }
95 | else if (ModifierString != "" && KeyString == "")
96 | {
97 | KeybindValueLabel.Text = ModifierString;
98 | }
99 | else
100 | {
101 | KeybindValueLabel.Text = KeyString;
102 | }
103 | }
104 |
105 | private void InputForm_KeyDown(object? sender, KeyEventArgs e)
106 | {
107 | if (Program.InputHandler.KeyIsBanned(e))
108 | {
109 | return;
110 | }
111 |
112 | bool IsRightShift = (GetKeyState(VK_RSHIFT) & 0x8000) != 0;
113 | bool IsRightControl = (GetKeyState(VK_RCONTROL) & 0x8000) != 0;
114 | bool IsRightAlt = (GetKeyState(VK_RMENU) & 0x8000) != 0;
115 |
116 | if (e.KeyCode is Keys.LShiftKey or Keys.Shift or Keys.ShiftKey && !IsRightShift)
117 | {
118 | ModifierString = "Shift";
119 | KeybindValueLabel.Text = ModifierString + " + " + KeyString;
120 | }
121 | else if (e.KeyCode is Keys.LControlKey or Keys.Control or Keys.ControlKey && !IsRightControl)
122 | {
123 | ModifierString = "Ctrl";
124 | KeybindValueLabel.Text = ModifierString + " + " + KeyString;
125 | }
126 | else if (e.KeyCode is Keys.Alt or Keys.Menu or Keys.LMenu && !IsRightAlt)
127 | {
128 | ModifierString = "Alt";
129 | KeybindValueLabel.Text = ModifierString + " + " + KeyString;
130 | }
131 | else if (e.KeyCode != Keys.Enter)
132 | {
133 | KeyString = SanitizeInput(e.KeyCode.ToString());
134 | switch (e.KeyCode)
135 | {
136 | case Keys.NumPad0:
137 | KeyString = "Num 0";
138 | break;
139 | case Keys.NumPad1:
140 | KeyString = "Num 1";
141 | break;
142 | case Keys.NumPad2:
143 | KeyString = "Num 2";
144 | break;
145 | case Keys.NumPad3:
146 | KeyString = "Num 3";
147 | break;
148 | case Keys.NumPad4:
149 | KeyString = "Num 4";
150 | break;
151 | case Keys.NumPad5:
152 | KeyString = "Num 5";
153 | break;
154 | case Keys.NumPad6:
155 | KeyString = "Num 6";
156 | break;
157 | case Keys.NumPad7:
158 | KeyString = "Num 7";
159 | break;
160 | case Keys.NumPad8:
161 | KeyString = "Num 8";
162 | break;
163 | case Keys.NumPad9:
164 | KeyString = "Num 9";
165 | break;
166 | }
167 | }
168 | if (IsRightShift)
169 | {
170 | KeyString = "Right Shift";
171 | }
172 | if (IsRightControl)
173 | {
174 | KeyString = "Right Control";
175 | }
176 | if (IsRightAlt)
177 | {
178 | KeyString = "Right Alt";
179 | }
180 | if (ModifierString != "" && KeyString != "")
181 | {
182 | KeybindValueLabel.Text = ModifierString + " + " + KeyString;
183 | }
184 | else if (ModifierString != "" && KeyString == "")
185 | {
186 | KeybindValueLabel.Text = ModifierString;
187 | }
188 | else
189 | {
190 | KeybindValueLabel.Text = KeyString;
191 | }
192 | if (KeybindValueLabel.Text == "Ctrl + Right Alt")
193 | {
194 | ModifierString = "";
195 | KeyString = "Right Alt";
196 | KeybindValueLabel.Text = "Right Alt";
197 | }
198 |
199 | switch (e.KeyCode) {
200 | case Keys.Escape:
201 | this.Close();
202 | break;
203 | case Keys.Enter:
204 | if (KeyString.Length > 0 || ModifierString != "")
205 | {
206 | Program.InputHandler.SetButton(Input, KeybindValueLabel.Text);
207 | this.Close();
208 | }
209 | break;
210 | case Keys.Back:
211 | Program.InputHandler.SetButton(Input, "Unbound");
212 | this.Close();
213 | break;
214 | }
215 | }
216 |
217 | private string SanitizeInput(string Input)
218 | {
219 | for (int i = 0; i < ToSanitize.Length; i++)
220 | {
221 | if (Input == ToSanitize[i])
222 | {
223 | Input = Sanitized[i];
224 | }
225 | }
226 | return Input;
227 | }
228 |
229 | private void InputForm_Load(object sender, EventArgs e)
230 | {
231 | this.Focus();
232 | }
233 |
234 | private void label4_MouseClick(object sender, MouseEventArgs e)
235 | {
236 | InputForm_MouseClick(sender, e);
237 | this.Focus();
238 | }
239 |
240 | private void InputForm_Paint(object sender, PaintEventArgs e)
241 | {
242 | e.Graphics.DrawRectangle(new Pen(Color.Black, 2), this.DisplayRectangle);
243 | }
244 | }
245 | }
246 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | remote_theme: BDHU/minimalist
2 | title: Developed by Neato
3 | description: "(C) 2022 | CC BY-NC-SA 4.0"
4 | logo: Resources/icon2.ico
5 | sidebar:
6 | - name: GitHub Profile
7 | icon:
8 | link: https://github.com/neatodev
9 | - name: Project Repository
10 | icon:
11 | link: https://github.com/neatodev/CityLauncher
12 | - name: License
13 | icon:
14 | link: https://raw.githubusercontent.com/neatodev/CityLauncher/main/LICENSE
15 | - name: Nexusmods Page
16 | icon:
17 | link: https://www.nexusmods.com/batmanarkhamcity/mods/406
18 | - name: Donate
19 | icon:
20 | link: https://ko-fi.com/neatodev
21 |
22 | github: [metadata]
23 | color-scheme: auto
24 | favicon: true
25 |
--------------------------------------------------------------------------------
/_layouts/default.html:
--------------------------------------------------------------------------------
1 | {% case site.color-scheme %}
2 | {% when "", nil, false, 0, empty %}
3 | {% assign ColorScheme = "auto" %}
4 | {% else %}
5 | {% assign ColorScheme = site.color-scheme %}
6 | {% endcase %}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | {% seo %}
16 |
17 |
18 |
19 |
20 |
23 | {% include head-custom.html %}
24 |
25 |
26 |
27 |
54 |
55 |
56 | {{ content }}
57 |
58 |
59 |
61 |
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/_sass/jekyll-theme-minimalist.scss:
--------------------------------------------------------------------------------
1 | @import "fonts";
2 | @import "rouge-github";
3 | @import "colors";
4 |
5 | body {
6 | background-color: var(--clr-bg);
7 | padding:50px;
8 | font: 15px/1.5 "Noto Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
9 | color: var(--clr-text);
10 | font-weight:400;
11 | }
12 |
13 | h1, h2, h3, h4, h5, h6 {
14 | color: var(--clr-h1-and-bold);
15 | margin:0 0 20px;
16 | }
17 |
18 | p, ul, ol, table, pre, dl {
19 | margin:0 0 20px;
20 | }
21 |
22 | h1, h2, h3 {
23 | line-height:1.1;
24 | }
25 |
26 | h1 {
27 | font-size:38px;
28 | }
29 |
30 | h2 {
31 | color: var(--clr-h2);
32 | }
33 |
34 | h3, h4, h5, h6 {
35 | color: var(--clr-h-3-6);
36 | }
37 |
38 | a {
39 | color:var(--clr-a-text);
40 | text-decoration:none;
41 | }
42 |
43 | a:hover, a:focus {
44 | color: var(--clr-a-text-hvr);
45 | }
46 |
47 | a small {
48 | font-size:11px;
49 | color:var(--clr-small-in-a);
50 | margin-top:-0.3em;
51 | display:block;
52 | }
53 |
54 | a:hover small {
55 | color:var(--clr-small-in-a);
56 | }
57 |
58 | // added
59 | p.link {
60 | margin:0 0 4px;
61 | }
62 |
63 | // added
64 | ul.link {
65 | list-style-type: none; /* Remove bullets */
66 | margin: 0; /* To remove default bottom margin */
67 | padding: 0.4px; /* To remove default left padding */
68 | }
69 |
70 | ul.link li + li {
71 | margin-top: 6px;
72 | }
73 |
74 | ul.link:last-child {
75 | margin-bottom: 6px;
76 | }
77 |
78 | .wrapper {
79 | width:1130px;
80 | margin: 0 auto;
81 | }
82 |
83 | blockquote {
84 | border-left:1px solid var(--clr-splitter-blockquote-and-section);
85 | margin:0;
86 | padding:0 0 0 20px;
87 | font-style:italic;
88 | }
89 |
90 | code, pre {
91 | font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal, Consolas, Liberation Mono, DejaVu Sans Mono, Courier New, monospace;
92 | color: var(--clr-code-text);
93 | }
94 |
95 | pre {
96 | padding:8px 15px;
97 | background: var(--clr-code-bg);
98 | border-radius:5px;
99 | border:1px solid var(--clr-code-border);
100 | overflow-x: auto;
101 | }
102 |
103 | table {
104 | width:100%;
105 | border-collapse:collapse;
106 | }
107 |
108 | th, td {
109 | text-align:left;
110 | padding:5px 10px;
111 | border-bottom:1px solid var(--clr-splitter-blockquote-and-section);
112 | }
113 |
114 | dt {
115 | color:var(--clr-table-header-and-dt);
116 | font-weight:700;
117 | }
118 |
119 | th {
120 | color:var(--clr-table-header-and-dt);
121 | }
122 |
123 | img {
124 | max-width:100%;
125 | }
126 |
127 | kbd {
128 | background-color: var(--clr-kbd-bg) ;
129 | border: 1px solid var(--clr-kbd-border);
130 | border-bottom-color: var(--clr-kbd-border-bottom-and-shadow);
131 | border-radius: 3px;
132 | box-shadow: inset 0 -1px 0 var(--clr-kbd-border-bottom-and-shadow);
133 | color: var(--clr-kbd-text);
134 | display: inline-block;
135 | font-size: 11px;
136 | line-height: 10px;
137 | padding: 3px 5px;
138 | vertical-align: middle;
139 | }
140 |
141 | .sidebar {
142 | width:200px;
143 | float:left;
144 | position:fixed;
145 | -webkit-font-smoothing:subpixel-antialiased;
146 | top: 0;
147 | padding: 58px 0 50px 0;
148 | display: flex;
149 | flex-direction: column;
150 | justify-content: space-between;
151 | height: calc(100vh - 108px);
152 | overflow-x: hidden;
153 | overflow-y: scroll;
154 | -ms-overflow-style: -ms-autohiding-scrollbar; // IE10+
155 | }
156 |
157 | // Disables the scrollbar in Firefox
158 | // HTML-Proofer fails without "@-moz-document url-prefix()"
159 | // because scrollbar-width is still experimental in Firefox.
160 | @-moz-document url-prefix() {
161 | .sidebar {
162 | scrollbar-width: none;
163 | }
164 | }
165 |
166 | .sidebar::-webkit-scrollbar {
167 | /* Chrome, Safari, Edge */
168 | display: none;
169 | }
170 |
171 | strong {
172 | color:var(--clr-h1-and-bold);
173 | font-weight:700;
174 | }
175 |
176 | section {
177 | width: 880px;
178 | float:right;
179 | padding-bottom:30px;
180 | }
181 |
182 | small {
183 | font-size:11px;
184 | }
185 |
186 | hr {
187 | border:0;
188 | background:var(--clr-splitter-blockquote-and-section);
189 | height:1px;
190 | width:30%;
191 | margin:10px auto 30px;
192 | }
193 |
194 | footer, .sidebar-footer {
195 | width:185px;
196 | float:left;
197 | bottom:30px;
198 | -webkit-font-smoothing:subpixel-antialiased;
199 | }
200 |
201 | footer {
202 | display: none;
203 | }
204 |
205 | .sidebar-footer {
206 | flex-basis: content;
207 | }
208 |
209 | @media print, screen and (max-width: 960px) {
210 |
211 | .sidebar {
212 | padding: initial;
213 | display: initial;
214 | height: initial;
215 | overflow: initial;
216 | }
217 |
218 | footer {
219 | display: initial;
220 | }
221 |
222 | .sidebar-footer {
223 | display: none;
224 | }
225 |
226 | div.wrapper {
227 | width:auto;
228 | margin:0;
229 | }
230 |
231 | .sidebar, section, footer {
232 | float:none;
233 | position:static;
234 | width:auto;
235 | }
236 |
237 | header {
238 | padding-right:320px;
239 | }
240 |
241 | section {
242 | border:1px solid var(--clr-splitter-blockquote-and-section);
243 | border-width:1px 0;
244 | padding:20px 0;
245 | margin:0 0 20px;
246 | }
247 |
248 | header a small {
249 | display:inline;
250 | }
251 |
252 | header ul {
253 | position:absolute;
254 | right:50px;
255 | top:52px;
256 | }
257 |
258 | .link-wrapper {
259 | display: none !important;
260 | }
261 |
262 | .img-circle {
263 | display: none !important;
264 | }
265 | }
266 |
267 | @media print, screen and (max-width: 720px) {
268 | body {
269 | word-wrap:break-word;
270 | }
271 |
272 | header {
273 | padding:0;
274 | }
275 |
276 | header ul, header p.view {
277 | position:static;
278 | }
279 |
280 | pre, code {
281 | word-wrap:normal;
282 | }
283 | }
284 |
285 | .link-wrapper-mobile {
286 | margin-bottom: 20px;
287 | }
288 |
289 | @media print, screen and (min-width: 961px) {
290 | .link-wrapper-mobile {
291 | display: none !important;
292 | }
293 | }
294 |
295 | @media print, screen and (max-width: 480px) {
296 | body {
297 | padding:15px;
298 | }
299 |
300 | // header ul {
301 | // width:99%;
302 | // }
303 |
304 | // header li, header ul li + li + li {
305 | // width:33%;
306 | // }
307 | }
308 |
309 | @media print {
310 | body {
311 | padding:0.4in;
312 | font-size:12pt;
313 | color:#444;
314 | }
315 | }
316 |
--------------------------------------------------------------------------------
/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/neatodev/CityLauncher/0ab4acbb491efee5a9d5310aeedac17f7d1acb17/favicon.ico
--------------------------------------------------------------------------------