├── Version.txt ├── _config.yml ├── data ├── docs │ ├── gui.png │ ├── logo.png │ ├── AddNewData.md │ ├── OtherThings.md │ ├── DowngraderSettingsOld.md │ ├── Language Code Table.html │ └── Changelog.md ├── mods │ ├── mirror │ │ ├── zips │ │ │ ├── CLEO4.zip │ │ │ ├── GInput.zip │ │ │ ├── SkyGfx.zip │ │ │ ├── ModLoader.zip │ │ │ ├── Project2DFX.zip │ │ │ ├── SilentPatch.zip │ │ │ ├── WidescreenFix.zip │ │ │ └── RemasteredGUIforSA.zip │ │ └── pics │ │ │ ├── MTA_scr1.jpg │ │ │ ├── MTA_scr2.jpg │ │ │ ├── MTA_scr3.jpg │ │ │ ├── GInput_scr1.jpg │ │ │ ├── GInput_scr2.jpg │ │ │ ├── GInput_scr3.jpg │ │ │ ├── SkyGFX_scr1.jpg │ │ │ ├── SkyGFX_scr2.jpg │ │ │ ├── SkyGFX_scr3.jpg │ │ │ ├── CLEO4_scr123.jpg │ │ │ ├── OpenMP_scr123.jpg │ │ │ ├── ModLoader_scr1.jpg │ │ │ ├── ModLoader_scr2.jpg │ │ │ ├── ModLoader_scr3.jpg │ │ │ ├── Project2DFX_scr1.jpg │ │ │ ├── SilentPatch_scr1.jpg │ │ │ ├── SilentPatch_scr2.jpg │ │ │ ├── SilentPatch_scr3.jpg │ │ │ ├── RemasteredGUI_scr1.jpg │ │ │ ├── RemasteredGUI_scr2.jpg │ │ │ ├── RemasteredGUI_scr3.jpg │ │ │ └── WidescreenFix_scr123.jpg │ └── info │ │ ├── list.txt │ │ └── txts │ │ ├── Project2DFX.txt │ │ ├── CLEO 4.txt │ │ ├── SkyGFX.txt │ │ ├── Multi Theft Auto.txt │ │ ├── Open Multiplayer.txt │ │ ├── SilentPatch.txt │ │ ├── GInput.txt │ │ ├── Widescreen Fix.txt │ │ ├── Mod Loader.txt │ │ └── Remastered GUI.txt └── languages │ ├── RU.xml │ └── EN.xml ├── sources ├── GUI │ ├── app.ico │ ├── Resources │ │ ├── ASL.zip │ │ ├── Reg.png │ │ ├── Up.png │ │ ├── About.png │ │ ├── GoBack.png │ │ ├── Help.png │ │ ├── Logo.png │ │ ├── Right.png │ │ ├── Language.png │ │ └── DirectPlay.png │ ├── Data.cs │ ├── packages.config │ ├── OtherForms │ │ ├── WDebug.cs │ │ ├── FirstLaunch.cs │ │ ├── WDebug.Designer.cs │ │ ├── About.cs │ │ ├── FirstLaunch.Designer.cs │ │ └── About.Designer.cs │ ├── app.config │ ├── Properties │ │ ├── AssemblyInfo.cs │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── Classes │ │ ├── GUI_Settings.cs │ │ ├── SettingsEditor.cs │ │ └── LanguagesString.cs │ ├── app.manifest │ ├── Program.cs │ ├── GUI.csproj │ └── MainForm.cs ├── Downgrader │ ├── app.ico │ ├── app.manifest │ ├── Classes │ │ ├── GUI_SettingsReader.cs │ │ └── SettingsReader.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── Downgrader.csproj └── Jetpack Downgrader.sln ├── LICENSE ├── .gitignore └── README.md /Version.txt: -------------------------------------------------------------------------------- 1 | 2.3.0.1 -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-hacker -------------------------------------------------------------------------------- /data/docs/gui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/docs/gui.png -------------------------------------------------------------------------------- /data/docs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/docs/logo.png -------------------------------------------------------------------------------- /sources/GUI/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/sources/GUI/app.ico -------------------------------------------------------------------------------- /sources/Downgrader/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/sources/Downgrader/app.ico -------------------------------------------------------------------------------- /sources/GUI/Resources/ASL.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/sources/GUI/Resources/ASL.zip -------------------------------------------------------------------------------- /sources/GUI/Resources/Reg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/sources/GUI/Resources/Reg.png -------------------------------------------------------------------------------- /sources/GUI/Resources/Up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/sources/GUI/Resources/Up.png -------------------------------------------------------------------------------- /data/mods/mirror/zips/CLEO4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/zips/CLEO4.zip -------------------------------------------------------------------------------- /data/mods/mirror/zips/GInput.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/zips/GInput.zip -------------------------------------------------------------------------------- /data/mods/mirror/zips/SkyGfx.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/zips/SkyGfx.zip -------------------------------------------------------------------------------- /sources/GUI/Resources/About.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/sources/GUI/Resources/About.png -------------------------------------------------------------------------------- /sources/GUI/Resources/GoBack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/sources/GUI/Resources/GoBack.png -------------------------------------------------------------------------------- /sources/GUI/Resources/Help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/sources/GUI/Resources/Help.png -------------------------------------------------------------------------------- /sources/GUI/Resources/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/sources/GUI/Resources/Logo.png -------------------------------------------------------------------------------- /sources/GUI/Resources/Right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/sources/GUI/Resources/Right.png -------------------------------------------------------------------------------- /data/mods/mirror/pics/MTA_scr1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/MTA_scr1.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/MTA_scr2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/MTA_scr2.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/MTA_scr3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/MTA_scr3.jpg -------------------------------------------------------------------------------- /sources/GUI/Resources/Language.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/sources/GUI/Resources/Language.png -------------------------------------------------------------------------------- /data/mods/mirror/pics/GInput_scr1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/GInput_scr1.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/GInput_scr2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/GInput_scr2.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/GInput_scr3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/GInput_scr3.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/SkyGFX_scr1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/SkyGFX_scr1.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/SkyGFX_scr2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/SkyGFX_scr2.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/SkyGFX_scr3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/SkyGFX_scr3.jpg -------------------------------------------------------------------------------- /data/mods/mirror/zips/ModLoader.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/zips/ModLoader.zip -------------------------------------------------------------------------------- /data/mods/mirror/zips/Project2DFX.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/zips/Project2DFX.zip -------------------------------------------------------------------------------- /data/mods/mirror/zips/SilentPatch.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/zips/SilentPatch.zip -------------------------------------------------------------------------------- /sources/GUI/Resources/DirectPlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/sources/GUI/Resources/DirectPlay.png -------------------------------------------------------------------------------- /data/mods/mirror/pics/CLEO4_scr123.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/CLEO4_scr123.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/OpenMP_scr123.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/OpenMP_scr123.jpg -------------------------------------------------------------------------------- /data/mods/mirror/zips/WidescreenFix.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/zips/WidescreenFix.zip -------------------------------------------------------------------------------- /data/mods/mirror/pics/ModLoader_scr1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/ModLoader_scr1.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/ModLoader_scr2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/ModLoader_scr2.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/ModLoader_scr3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/ModLoader_scr3.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/Project2DFX_scr1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/Project2DFX_scr1.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/SilentPatch_scr1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/SilentPatch_scr1.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/SilentPatch_scr2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/SilentPatch_scr2.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/SilentPatch_scr3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/SilentPatch_scr3.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/RemasteredGUI_scr1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/RemasteredGUI_scr1.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/RemasteredGUI_scr2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/RemasteredGUI_scr2.jpg -------------------------------------------------------------------------------- /data/mods/mirror/pics/RemasteredGUI_scr3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/RemasteredGUI_scr3.jpg -------------------------------------------------------------------------------- /data/mods/mirror/zips/RemasteredGUIforSA.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/zips/RemasteredGUIforSA.zip -------------------------------------------------------------------------------- /data/mods/mirror/pics/WidescreenFix_scr123.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/HEAD/data/mods/mirror/pics/WidescreenFix_scr123.jpg -------------------------------------------------------------------------------- /data/mods/info/list.txt: -------------------------------------------------------------------------------- 1 | SilentPatch 2 | Mod Loader 3 | Widescreen Fix 4 | SkyGFX 5 | Remastered GUI 6 | Project2DFX 7 | Open Multiplayer 8 | Multi Theft Auto 9 | GInput 10 | CLEO 4 -------------------------------------------------------------------------------- /sources/GUI/Data.cs: -------------------------------------------------------------------------------- 1 | static class Data 2 | { 3 | public static string JetpackDowngraderVersion { get; } = "2.3.0.1"; 4 | public static string PathToGame { get; set; } 5 | public static bool DebugMode { get; set; } 6 | } -------------------------------------------------------------------------------- /sources/GUI/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /sources/Downgrader/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /sources/GUI/OtherForms/WDebug.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | 3 | namespace JetpackGUI 4 | { 5 | public partial class WDebug : Form 6 | { 7 | public WDebug() 8 | { 9 | InitializeComponent(); 10 | } 11 | 12 | private void WDebug_Load(object sender, System.EventArgs e) 13 | { 14 | WDebug.ActiveForm.Size = new System.Drawing.Size(816, 489); 15 | consoleControl1.StartProcess(@Application.StartupPath + @"\files\jpd.exe", "\"" + Data.PathToGame + "\""); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /sources/GUI/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /data/mods/info/txts/Project2DFX.txt: -------------------------------------------------------------------------------- 1 | Project2DFX 2 | 4.4 (13.04.2015) 3 | ThirteenAG 4 | A set of plugins for GTA III, Vice City, San Andreas and GTA IV (EFLC), which adds the LOD crown effect to the game map, making the Old World much better 5 | https://thirteenag.github.io/p2dfx 6 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/Project2DFX_scr1.jpg 7 | https://thirteenag.github.io/screens/2dfx/p2dfx_gtasaa.jpg 8 | https://thirteenag.github.io/screens/2dfx/p2dfx_gtasab.jpg 9 | https://github.com/Zalexanninev15/Jetpack-Downgrader/raw/unstable/data/mods/mirror/zips/Project2DFX.zip -------------------------------------------------------------------------------- /data/mods/info/txts/CLEO 4.txt: -------------------------------------------------------------------------------- 1 | CLEO 4 2 | 4.4.4 (13.08.2023) 3 | Seemann 4 | A hugely popular extensible plugin allowing the use of thousands of unique mods which change or expand the gameplay 5 | https://cleo.li/ 6 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/CLEO4_scr123.jpg 7 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/CLEO4_scr123.jpg 8 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/CLEO4_scr123.jpg 9 | https://github.com/Zalexanninev15/Jetpack-Downgrader/raw/unstable/data/mods/mirror/zips/CLEO4.zip -------------------------------------------------------------------------------- /sources/GUI/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | [assembly: AssemblyTitle("Jetpack GUI")] 4 | [assembly: AssemblyDescription("GUI for Jetpack Downgrader")] 5 | [assembly: AssemblyConfiguration("")] 6 | [assembly: AssemblyCompany("Zalexanninev15")] 7 | [assembly: AssemblyProduct("Jetpack Downgrader")] 8 | [assembly: AssemblyCopyright("Copyright © 2020-2021, Zalexanninev15")] 9 | [assembly: AssemblyTrademark("Jetpack Downgrader (2020-2021)")] 10 | [assembly: AssemblyCulture("")] 11 | [assembly: ComVisible(false)] 12 | [assembly: AssemblyVersion("1.3.1.1")] 13 | [assembly: AssemblyFileVersion("1.3.1.1")] 14 | -------------------------------------------------------------------------------- /data/mods/info/txts/SkyGFX.txt: -------------------------------------------------------------------------------- 1 | SkyGFX 2 | 4.2 (08.05.2021) 3 | aap/The Hero 4 | Brings accurate PS2 and Xbox graphics to the PC version of San Andreas 5 | https://gtaforums.com/topic/750681-skygfx-ps2-xbox-and-mobile-graphics-for-pc/ 6 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/SkyGFX_scr1.jpg 7 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/SkyGFX_scr2.jpg 8 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/SkyGFX_scr3.jpg 9 | https://github.com/Zalexanninev15/Jetpack-Downgrader/raw/unstable/data/mods/mirror/zips/SkyGfx.zip -------------------------------------------------------------------------------- /data/mods/info/txts/Multi Theft Auto.txt: -------------------------------------------------------------------------------- 1 | Multi Theft Auto 2 | 1.6.0 (16.06.2023) 3 | Multi Theft Auto team 4 | A game engine that incorporates an extendable network play element into a proprietary commercial single-player game 5 | https://multitheftauto.com/ 6 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/MTA_scr1.jpg 7 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/MTA_scr2.jpg 8 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/MTA_scr3.jpg 9 | https://github.com/multitheftauto/mtasa-blue/releases/download/1.6.0/mtasa-1.6.exe 10 | -------------------------------------------------------------------------------- /data/mods/info/txts/Open Multiplayer.txt: -------------------------------------------------------------------------------- 1 | Open Multiplayer 2 | v1.5.2 (09.01.2025) 3 | Open Multiplayer team 4 | A multiplayer mod for Grand Theft Auto: San Andreas that is fully backwards compatible with San Andreas Multiplayer. 5 | https://open.mp/ 6 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/main/data/mods/mirror/pics/OpenMP_scr123.jpg 7 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/main/data/mods/mirror/pics/OpenMP_scr123.jpg 8 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/main/data/mods/mirror/pics/OpenMP_scr123.jpg 9 | https://github.com/openmultiplayer/launcher/releases/latest/download/omp-launcher-setup.exe 10 | -------------------------------------------------------------------------------- /data/mods/info/txts/SilentPatch.txt: -------------------------------------------------------------------------------- 1 | SilentPatch 2 | 33.1 (02.11.2024) 3 | Silent 4 | This game has tons of issues and bugs. This modification attempts to fix at least some of them 5 | https://gtaforums.com/topic/669045-silentpatch/ 6 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/SilentPatch_scr1.jpg 7 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/SilentPatch_scr2.jpg 8 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/SilentPatch_scr3.jpg 9 | https://github.com/Zalexanninev15/Jetpack-Downgrader/raw/unstable/data/mods/mirror/zips/SilentPatch.zip -------------------------------------------------------------------------------- /data/mods/info/txts/GInput.txt: -------------------------------------------------------------------------------- 1 | GInput 2 | 1.11 (10.02.2016) 3 | Silent 4 | This game has a poor gamepad support. This modification brings full XInput support for those who want to play the game with a joystick 5 | https://gtaforums.com/topic/562765-ginput/ 6 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/GInput_scr1.jpg 7 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/GInput_scr2.jpg 8 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/GInput_scr3.jpg 9 | https://github.com/Zalexanninev15/Jetpack-Downgrader/raw/unstable/data/mods/mirror/zips/GInput.zip -------------------------------------------------------------------------------- /sources/Downgrader/Classes/GUI_SettingsReader.cs: -------------------------------------------------------------------------------- 1 | using System.Xml.Serialization; 2 | 3 | namespace JetpackDowngrader 4 | { 5 | [XmlRoot(ElementName = "GUI_Settings")] 6 | public class GUI_Settings 7 | { 8 | [XmlElement(ElementName = "LanguageCode")] 9 | public string LnguageCode { get; set; } 10 | [XmlElement(ElementName = "FirstLaunch")] 11 | public string FirstLaunch { get; set; } 12 | [XmlAttribute(AttributeName = "xsd")] 13 | public string Xsd { get; set; } 14 | [XmlAttribute(AttributeName = "xsi")] 15 | public string Xsi { get; set; } 16 | [XmlText] 17 | public string Text { get; set; } 18 | } 19 | } -------------------------------------------------------------------------------- /sources/Downgrader/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.InteropServices; 3 | [assembly: AssemblyTitle("Jetpack Downgrader")] 4 | [assembly: AssemblyDescription("App for downgrading the game Grand Theft Auto: San Andreas to version 1.0")] 5 | [assembly: AssemblyConfiguration("")] 6 | [assembly: AssemblyCompany("Zalexanninev15")] 7 | [assembly: AssemblyProduct("Jetpack Downgrader")] 8 | [assembly: AssemblyCopyright("Copyright 2020-2021, Zalexanninev15")] 9 | [assembly: AssemblyTrademark("Jetpack Downgrader (2020-2021)")] 10 | [assembly: AssemblyCulture("")] 11 | [assembly: ComVisible(false)] 12 | [assembly: AssemblyVersion("1.16.0.0")] 13 | [assembly: AssemblyFileVersion("1.16.0.0")] -------------------------------------------------------------------------------- /data/mods/info/txts/Widescreen Fix.txt: -------------------------------------------------------------------------------- 1 | Widescreen Fix 2 | 1.0 (16.05.2020) 3 | ThirteenAG 4 | This game has a poor widescreen support. This modification improves widescreen resolution 5 | https://gtaforums.com/topic/547841-gtanfsmpother-widescreen-fixes-pack/ 6 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/WidescreenFix_scr123.jpg 7 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/WidescreenFix_scr123.jpg 8 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/WidescreenFix_scr123.jpg 9 | https://github.com/Zalexanninev15/Jetpack-Downgrader/raw/unstable/data/mods/mirror/zips/WidescreenFix.zip -------------------------------------------------------------------------------- /data/mods/info/txts/Mod Loader.txt: -------------------------------------------------------------------------------- 1 | Mod Loader 2 | 0.3.7 (20.01.2018) 3 | Link2012 4 | Plugin that adds an extremely user-friendly and easy way to install and uninstall your modifications, without even messing around anything in your game installation 5 | https://gtaforums.com/topic/669520-mod-loader/ 6 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/ModLoader_scr1.jpg 7 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/ModLoader_scr2.jpg 8 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/ModLoader_scr3.jpg 9 | https://github.com/Zalexanninev15/Jetpack-Downgrader/raw/unstable/data/mods/mirror/zips/ModLoader.zip -------------------------------------------------------------------------------- /data/mods/info/txts/Remastered GUI.txt: -------------------------------------------------------------------------------- 1 | Remastered GUI 2 | 1.0 (07.03.2015) 3 | Ash_735 4 | A package of improved textures of the game interface and game objects, some of the textures are taken from the mobile version of the game, in which the graphics quality is noticeably higher 5 | https://www.gtagarage.com/mods/show.php?id=27017 6 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/RemasteredGUI_scr1.jpg 7 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/RemasteredGUI_scr2.jpg 8 | https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/mirror/pics/RemasteredGUI_scr3.jpg 9 | https://github.com/Zalexanninev15/Jetpack-Downgrader/raw/unstable/data/mods/mirror/zips/RemasteredGUIforSA.zip -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020-2025 Zalexanninev15 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /sources/GUI/Classes/GUI_Settings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Xml.Serialization; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | 6 | namespace JetpackGUI 7 | { 8 | public class GUI_Settings 9 | { 10 | public String LanguageCode = "EN"; 11 | public Boolean FirstLaunch = true; 12 | } 13 | 14 | public class GUI 15 | { 16 | public GUI_Settings Fields; 17 | public GUI() { Fields = new GUI_Settings(); } 18 | 19 | public void WriteXml() 20 | { 21 | XmlSerializer ser = new XmlSerializer(typeof(GUI_Settings)); 22 | using (TextWriter writer = new StreamWriter(Application.StartupPath + @"\files\gui.xml")) { ser.Serialize(writer, Fields); } 23 | } 24 | 25 | public void ReadXml() 26 | { 27 | if (File.Exists(Application.StartupPath + @"\files\gui.xml")) 28 | { 29 | XmlSerializer ser = new XmlSerializer(typeof(GUI_Settings)); 30 | using (TextReader reader = new StreamReader(Application.StartupPath + @"\files\gui.xml")) { Fields = ser.Deserialize(reader) as GUI_Settings; } 31 | } 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /sources/GUI/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | true 19 | true 20 | 21 | 22 | 23 | 24 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /sources/Downgrader/Classes/SettingsReader.cs: -------------------------------------------------------------------------------- 1 | using System.Xml.Serialization; 2 | 3 | namespace JetpackDowngrader 4 | { 5 | [XmlRoot(ElementName = "SettingsEditor")] 6 | public class SettingsEditor 7 | { 8 | [XmlElement(ElementName = "CreateBackups")] 9 | public bool CreateBackups { get; set; } 10 | [XmlElement(ElementName = "CreateShortcut")] 11 | public bool CreateShortcut { get; set; } 12 | [XmlElement(ElementName = "ResetGame")] 13 | public bool ResetGame { get; set; } 14 | [XmlElement(ElementName = "RGL_GarbageCleaning")] 15 | public bool RGLGarbageCleaning { get; set; } 16 | [XmlElement(ElementName = "RegisterGamePath")] 17 | public bool RegisterGamePath { get; set; } 18 | [XmlElement(ElementName = "CopyGameToNewPath")] 19 | public bool CopyGameToNewPath { get; set; } 20 | [XmlElement(ElementName = "EnableDirectPlay")] 21 | public bool EnableDirectPlay { get; set; } 22 | [XmlElement(ElementName = "InstallDirectXComponents")] 23 | public bool InstallDirectXComponents { get; set; } 24 | [XmlElement(ElementName = "Forced")] 25 | public bool Forced { get; set; } 26 | [XmlElement(ElementName = "UserMode")] 27 | public bool UserMode { get; set; } 28 | [XmlAttribute(AttributeName = "xsd")] 29 | public string Xsd { get; set; } 30 | [XmlAttribute(AttributeName = "xsi")] 31 | public string Xsi { get; set; } 32 | [XmlText] 33 | public string Text { get; set; } 34 | } 35 | } -------------------------------------------------------------------------------- /sources/GUI/Classes/SettingsEditor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Xml.Serialization; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | 6 | namespace JetpackGUI 7 | { 8 | public class SettingsEditor 9 | { 10 | public Boolean CreateBackups = false; 11 | public Boolean CreateShortcut = true; 12 | public Boolean ResetGame = true; 13 | public Boolean RGL_GarbageCleaning = false; 14 | public Boolean RegisterGamePath = false; 15 | public Boolean CopyGameToNewPath = true; 16 | public Boolean EnableDirectPlay = true; 17 | public Boolean InstallDirectXComponents = false; 18 | public Boolean Forced = false; 19 | public Boolean UserMode = true; 20 | } 21 | 22 | public class Props 23 | { 24 | public SettingsEditor Fields; 25 | public Props() { Fields = new SettingsEditor(); } 26 | 27 | public void WriteXml() 28 | { 29 | XmlSerializer ser = new XmlSerializer(typeof(SettingsEditor)); 30 | using (TextWriter writer = new StreamWriter(Application.StartupPath + @"\files\downgrader.xml")) { ser.Serialize(writer, Fields); } 31 | } 32 | 33 | public void ReadXml() 34 | { 35 | if (File.Exists(Application.StartupPath + @"\files\downgrader.xml")) 36 | { 37 | XmlSerializer ser = new XmlSerializer(typeof(SettingsEditor)); 38 | using (TextReader reader = new StreamReader(Application.StartupPath + @"\files\downgrader.xml")) { Fields = ser.Deserialize(reader) as SettingsEditor; } 39 | } 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /sources/Jetpack Downgrader.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.30907.101 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Downgrader", "Downgrader\Downgrader.csproj", "{7231A22C-71EE-4CC2-9BFD-889D603B3AB3}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GUI", "GUI\GUI.csproj", "{D81E1838-8791-4716-B0DD-B44107FAB96D}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {7231A22C-71EE-4CC2-9BFD-889D603B3AB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {7231A22C-71EE-4CC2-9BFD-889D603B3AB3}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {7231A22C-71EE-4CC2-9BFD-889D603B3AB3}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {7231A22C-71EE-4CC2-9BFD-889D603B3AB3}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {D81E1838-8791-4716-B0DD-B44107FAB96D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {D81E1838-8791-4716-B0DD-B44107FAB96D}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {D81E1838-8791-4716-B0DD-B44107FAB96D}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {D81E1838-8791-4716-B0DD-B44107FAB96D}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {D31F5EB0-9AF0-48FB-A811-41BCE0BC2558} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /sources/GUI/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | using System.Net.NetworkInformation; 4 | using System.Windows.Forms; 5 | 6 | namespace JetpackGUI 7 | { 8 | static class Program 9 | { 10 | public static void Main(string[] args) 11 | { 12 | bool AvailableNewVersion = false; 13 | const bool DevVersion = false; 14 | try 15 | { 16 | Application.EnableVisualStyles(); 17 | Application.SetCompatibleTextRenderingDefault(false); 18 | if (DevVersion == false) 19 | { 20 | try 21 | { 22 | Ping ping = new Ping(); 23 | PingReply pingReply = null; 24 | pingReply = ping.Send("github.com"); 25 | using (WebClient wc = new WebClient()) 26 | { 27 | string toolkit_version = wc.DownloadString("https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/Version.txt"); 28 | if (toolkit_version != Data.JetpackDowngraderVersion) { AvailableNewVersion = true; } 29 | } 30 | } 31 | catch(Exception ex) { AvailableNewVersion = false; VitNX.Forms.VitNX_MessageBox.ShowError(ex.ToString(), "Error"); } 32 | } 33 | if (AvailableNewVersion == false) 34 | { 35 | GUI mygui = new GUI(); 36 | mygui.ReadXml(); 37 | if (mygui.Fields.FirstLaunch == false) { Application.Run(new MainForm()); } else { Application.Run(new MyLang()); } 38 | } 39 | else 40 | { 41 | VitNX.Forms.VitNX_MessageBox.ShowInfo("An update is available!\nNow you will be redirected to the download page of the latest version", "Information"); 42 | try { System.Diagnostics.Process.Start("https://github.com/Zalexanninev15/Jetpack-Downgrader/releases/latest"); } catch { VitNX.Forms.VitNX_MessageBox.ShowWarning("Browser to open the link was not found! The link will be copied to the clipboard!", "Warning"); Clipboard.SetText("https://github.com/Zalexanninev15/Jetpack-Downgrader/releases/latest"); } 43 | } 44 | } 45 | catch(Exception ex) { VitNX.Forms.VitNX_MessageBox.ShowError(ex.ToString(), "Error"); } 46 | } 47 | } 48 | } -------------------------------------------------------------------------------- /sources/GUI/OtherForms/FirstLaunch.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Windows.Forms; 4 | using System.Xml.Serialization; 5 | 6 | namespace JetpackGUI 7 | { 8 | public partial class MyLang : Form 9 | { 10 | [System.Runtime.InteropServices.DllImport("DwmApi")] 11 | static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize); 12 | protected override void OnHandleCreated(EventArgs e) { if (DwmSetWindowAttribute(Handle, 19, new[] { 1 }, 4) != 0) { DwmSetWindowAttribute(Handle, 20, new[] { 1 }, 4); } } 13 | 14 | GUI mygui = new GUI(); 15 | XmlSerializer lzol = new XmlSerializer(typeof(LanguagesString)); 16 | string[] langs = new string[10]; 17 | 18 | public MyLang() { InitializeComponent(); } 19 | 20 | void button2_Click(object sender, EventArgs e) 21 | { 22 | if (AllLangs.Text != "") 23 | { 24 | mygui.Fields.FirstLaunch = false; 25 | mygui.WriteXml(); 26 | System.Threading.Tasks.Task.Delay(300); 27 | Application.Restart(); 28 | } 29 | else { VitNX.Forms.VitNX_MessageBox.ShowInfo("You need to select a language from the list!", "Information"); } 30 | } 31 | 32 | void MyLang_Load(object sender, EventArgs e) 33 | { 34 | this.Size = new System.Drawing.Size(265, 152); 35 | AllLangs.Items.Clear(); 36 | langs = Directory.GetFiles(@Application.StartupPath + @"\files\languages", "*.xml"); 37 | for (int i = 0; i < langs.Length; i++) 38 | { 39 | if (langs[i] != "") 40 | { 41 | string lg = "English"; 42 | using (StringReader reader = new StringReader(File.ReadAllText(langs[i]))) 43 | { 44 | var LOCAL = (LanguagesString)lzol.Deserialize(reader); 45 | lg = LOCAL.Language; 46 | } 47 | AllLangs.Items.Add(lg); 48 | } 49 | } 50 | } 51 | 52 | void AllLangs_SelectedIndexChanged(object sender, EventArgs e) 53 | { 54 | for (int i = 0; i < langs.Length; i++) 55 | { 56 | if (langs[i] != "") 57 | { 58 | using (StringReader reader = new StringReader(File.ReadAllText(langs[i]))) 59 | { 60 | var LOCAL = (LanguagesString)lzol.Deserialize(reader); 61 | if (AllLangs.Text == LOCAL.Language) 62 | { 63 | mygui.Fields.LanguageCode = new FileInfo(langs[i]).Name.Replace(".xml", ""); 64 | mygui.WriteXml(); 65 | MyLang.ActiveForm.Text = LOCAL.FirstTitle; 66 | darkLabel1.Text = LOCAL.SelectLang; 67 | button2.Text = LOCAL.ApplyAndLaunch; 68 | } 69 | } 70 | } 71 | } 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /data/docs/AddNewData.md: -------------------------------------------------------------------------------- 1 | # Add new data 2 | 3 | *Adding localizations and modifications* 4 | 5 | ## Add new localization(s) 6 | 7 | 1. Download the [latest available version](https://github.com/Zalexanninev15/Jetpack-Downgrader/releases/latest) 8 | 2. Unzip the archive and go to the **files** folder, then to the **languages** folder 9 | 3. As a source for translation, take the official and always timely updated English localization from **EN.xml** open this file in text editor (as [Notepad++](https://notepad-plus-plus.org/)) 10 | 4. Copy the file to any location and translate only the values of variables. *The value of the **Language** variable must be written in English!* If some things are unclear, that is, the source code, do not hesitate to peek into it ;) 11 | 5. Save your translation under the name of the language code ([list of all codes](https://htmlpreview.github.io/?https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/unstable/data/docs/Language%20Code%20Table.html)), but without the dash 12 | 6. Copy the file to the **languages** folder and open the GUI. Next, select the language change icon and select your language, which is indicated under the value of the **Language variable**. Or simply select a language from the language change window that appears (only the first launch) 13 | 7. **Check your translation very carefully!** 14 | 8. After successful tests, send a request (in issue) with file of localization for adding the localization to the repository. You can create your own issue or write a message with the file in [this](https://github.com/Zalexanninev15/Jetpack-Downgrader/issues/17). Your localization will be added to the application itself immediately in the next update! 15 | 16 | ## Add new modification(s) 17 | 18 | 1. Create a ZIP archive with the modification files. It is important to note that the contents of the archive will be simply unpacked to the game folder in the future. Therefore, do not create folders with modification files, because the folder will be unpacked, and not the modification files themselves! There is no need to add **ASI Loader** to the archive, it is installed automatically! 19 | 2. Download the official plugin as a blank (for example: [GInput](https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/info/txts/GInput.txt), only "Save as txt"!) 20 | 3. Rename the file name to the name of the new modification 21 | 4. Fill in the information of modification in text editor (as [Notepad++](https://notepad-plus-plus.org/)) by lines and save file 22 | 23 | **Lines:** 24 | 25 | * 1 - name 26 | 27 | * 2 - version 28 | 29 | * 3 - author 30 | 31 | * 4 - description (the maximum size can be about 174 characters) 32 | 33 | * 5 - link to the modification website 34 | 35 | * 6 - direct link to screenshot 1 36 | 37 | * 7 - direct link to screenshot 2 38 | 39 | * 8 - direct link to screenshot 3 40 | 41 | * 9 - direct link or link to MEGA to the ZIP archive 42 | 5. Send a request (in issue) for adding the modification to the repository (and list of modifications) with the file with a information about the modification (steps 2-4). You can create your own Issue or write a message with the file in [this](https://github.com/Zalexanninev15/Jetpack-Downgrader/issues/18) 43 | -------------------------------------------------------------------------------- /sources/GUI/OtherForms/WDebug.Designer.cs: -------------------------------------------------------------------------------- 1 | 2 | namespace JetpackGUI 3 | { 4 | partial class WDebug 5 | { 6 | /// 7 | /// Required designer variable. 8 | /// 9 | private System.ComponentModel.IContainer components = null; 10 | 11 | /// 12 | /// Clean up any resources being used. 13 | /// 14 | /// true if managed resources should be disposed; otherwise, false. 15 | protected override void Dispose(bool disposing) 16 | { 17 | if (disposing && (components != null)) 18 | { 19 | components.Dispose(); 20 | } 21 | base.Dispose(disposing); 22 | } 23 | 24 | #region Windows Form Designer generated code 25 | 26 | /// 27 | /// Required method for Designer support - do not modify 28 | /// the contents of this method with the code editor. 29 | /// 30 | private void InitializeComponent() 31 | { 32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WDebug)); 33 | this.consoleControl1 = new ConsoleControl.ConsoleControl(); 34 | this.SuspendLayout(); 35 | // 36 | // consoleControl1 37 | // 38 | this.consoleControl1.BackColor = System.Drawing.Color.Black; 39 | this.consoleControl1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; 40 | this.consoleControl1.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); 41 | this.consoleControl1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); 42 | this.consoleControl1.IsInputEnabled = false; 43 | this.consoleControl1.Location = new System.Drawing.Point(14, 15); 44 | this.consoleControl1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); 45 | this.consoleControl1.Name = "consoleControl1"; 46 | this.consoleControl1.SendKeyboardCommandsToProcess = false; 47 | this.consoleControl1.ShowDiagnostics = false; 48 | this.consoleControl1.Size = new System.Drawing.Size(774, 422); 49 | this.consoleControl1.TabIndex = 0; 50 | // 51 | // WDebug 52 | // 53 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 54 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 55 | this.BackColor = System.Drawing.Color.Black; 56 | this.ClientSize = new System.Drawing.Size(800, 450); 57 | this.Controls.Add(this.consoleControl1); 58 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 59 | this.MaximizeBox = false; 60 | this.MinimizeBox = false; 61 | this.Name = "WDebug"; 62 | this.Text = "Debug Console"; 63 | this.Load += new System.EventHandler(this.WDebug_Load); 64 | this.ResumeLayout(false); 65 | 66 | } 67 | 68 | #endregion 69 | 70 | private ConsoleControl.ConsoleControl consoleControl1; 71 | } 72 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | sources/GUI/.vs/GUI/v16/.suo 2 | sources/Downgrader/.vs/Jetpack Downgrader/v16/.suo 3 | sources/.vs/Jetpack Downgrader/v16/.suo 4 | *.exe 5 | *.cache 6 | *.dll 7 | *.p7s 8 | *.nupkg 9 | sources/Downgrader/obj/Release/JetpackDowngrader.Properties.Resources.resources 10 | sources/Downgrader/obj/Release/Jetpack Downgrader.csproj.FileListAbsolute.txt 11 | sources/Downgrader/obj/Release/.NETFramework,Version=v4.8.AssemblyAttributes.cs 12 | sources/Downgrader/bin/Release/jpd.exe.config 13 | sources/Downgrader/obj/Release/Downgrader.Properties.Resources.resources 14 | sources/Downgrader/obj/Release/Downgrader.csproj.FileListAbsolute.txt 15 | sources/GUI/obj/Release/JetpackDowngraderGUI.MainForm.resources 16 | sources/GUI/obj/Release/GUI.csproj.FileListAbsolute.txt 17 | sources/GUI/obj/Release/.NETFramework,Version=v4.8.AssemblyAttributes.cs 18 | sources/GUI/obj/Release/JetpackGUI.MyProgressBar.resources 19 | sources/GUI/bin/Release/gui.exe.config 20 | sources/GUI/obj/Release/GUI.csproj.CopyComplete 21 | sources/GUI/obj/Release/JetpackDowngraderGUI.Properties.Resources.resources 22 | sources/GUI/bin/Release/app.exe.config 23 | sources/GUI/obj/Release/JetpackGUI.MainForm.resources 24 | sources/GUI/obj/Release/JetpackGUI.Properties.Resources.resources 25 | sources/GUI/bin/Release/MegaApiClient.xml 26 | sources/GUI/bin/Release/Newtonsoft.Json.xml 27 | sources/GUI/obj/Release/JetpackGUI.MyLang.resources 28 | sources/GUI/obj/Release/JetpackGUI.About.resources 29 | sources/GUI/obj/Release/JetpackGUI.MyProgressBar.resources 30 | sources/packages/MegaApiClient.1.9.0/lib/net40/MegaApiClient.xml 31 | sources/packages/MegaApiClient.1.9.0/lib/net45/MegaApiClient.xml 32 | sources/packages/MegaApiClient.1.9.0/lib/net46/MegaApiClient.xml 33 | sources/packages/MegaApiClient.1.9.0/lib/netstandard1.3/MegaApiClient.xml 34 | sources/packages/MegaApiClient.1.9.0/lib/netstandard2.0/MegaApiClient.xml 35 | sources/packages/Newtonsoft.Json.13.0.1/lib/net20/Newtonsoft.Json.xml 36 | sources/packages/Newtonsoft.Json.13.0.1/lib/net35/Newtonsoft.Json.xml 37 | sources/packages/Newtonsoft.Json.13.0.1/lib/net40/Newtonsoft.Json.xml 38 | sources/packages/Newtonsoft.Json.13.0.1/lib/net45/Newtonsoft.Json.xml 39 | sources/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.0/Newtonsoft.Json.xml 40 | sources/packages/Newtonsoft.Json.13.0.1/lib/netstandard1.3/Newtonsoft.Json.xml 41 | sources/packages/Newtonsoft.Json.13.0.1/lib/netstandard2.0/Newtonsoft.Json.xml 42 | sources/packages/Newtonsoft.Json.13.0.1/LICENSE.md 43 | sources/packages/Newtonsoft.Json.13.0.1/packageIcon.png 44 | sources/Downgrader/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs 45 | sources/Downgrader/obj/Debug/build.force 46 | sources/GUI/bin/Debug/app.exe.config 47 | sources/GUI/bin/Debug/app.pdb 48 | sources/GUI/bin/Debug/MegaApiClient.xml 49 | sources/GUI/bin/Debug/Newtonsoft.Json.xml 50 | sources/GUI/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs 51 | sources/GUI/obj/Debug/app.pdb 52 | sources/GUI/obj/Debug/GUI.csproj.CopyComplete 53 | sources/GUI/obj/Debug/GUI.csproj.FileListAbsolute.txt 54 | sources/GUI/obj/Debug/JetpackGUI.About.resources 55 | sources/GUI/obj/Debug/JetpackGUI.MainForm.resources 56 | sources/GUI/obj/Debug/JetpackGUI.MyLang.resources 57 | sources/GUI/obj/Debug/JetpackGUI.MyProgressBar.resources 58 | sources/GUI/obj/Debug/JetpackGUI.Properties.Resources.resources 59 | sources/packages/ConsoleControl.1.3.0/content/Console.ico 60 | sources/packages/ConsoleControl.1.3.0/lib/net40-client/ConsoleControl.xml 61 | sources/packages/ConsoleControlAPI.1.3.0/lib/net40/ConsoleControlAPI.xml 62 | sources/GUI/obj/Release/JetpackGUI.WDebug.resources 63 | sources/Downgrader/obj/Release/Downgrader.csproj.CopyComplete 64 | -------------------------------------------------------------------------------- /sources/GUI/OtherForms/About.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using System.Xml.Serialization; 6 | using VitNX.Forms; 7 | 8 | namespace JetpackGUI 9 | { 10 | public partial class About : Form 11 | { 12 | [System.Runtime.InteropServices.DllImport("DwmApi")] 13 | static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize); 14 | protected override void OnHandleCreated(EventArgs e) { if (DwmSetWindowAttribute(Handle, 19, new[] { 1 }, 4) != 0) { DwmSetWindowAttribute(Handle, 20, new[] { 1 }, 4); } } 15 | public About() { InitializeComponent(); } 16 | void MsgWarning() { VitNX_MessageBox.ShowWarning(MSG[1], MSG[0]); } 17 | void darkButton1_Click(object sender, EventArgs e) { try { Process.Start("https://github.com/Zalexanninev15/Jetpack-Downgrader/issues"); } catch { MsgWarning(); Clipboard.SetText("https://github.com/Zalexanninev15/Jetpack-Downgrader/issues"); } } 18 | void darkButton1_Click_1(object sender, EventArgs e) { try { Process.Start("https://github.com/Zalexanninev15/Jetpack-Downgrader#authors"); } catch { MsgWarning(); Clipboard.SetText("https://github.com/Zalexanninev15/Jetpack-Downgrader#authors"); } } 19 | void darkButton3_Click(object sender, EventArgs e) { try { Process.Start("https://github.com/Zalexanninev15/Jetpack-Downgrader"); } catch { MsgWarning(); Clipboard.SetText("https://github.com/Zalexanninev15/Jetpack-Downgrader"); } } 20 | void darkButton4_Click(object sender, EventArgs e) { try { Process.Start("https://gtaforums.com/topic/969056-jetpack-downgrader"); } catch { MsgWarning(); Clipboard.SetText("https://gtaforums.com/topic/969056-jetpack-downgrader/"); } } 21 | 22 | string[] MSG = new string[2]; 23 | 24 | void MyLang_Load(object sender, EventArgs e) 25 | { 26 | MSG[0] = "Warning"; 27 | this.Size = new System.Drawing.Size(485, 429); 28 | GUI language = new GUI(); 29 | language.ReadXml(); 30 | string langcode = language.Fields.LanguageCode; 31 | XmlSerializer lzol = new XmlSerializer(typeof(LanguagesString)); 32 | using (StringReader reader = new StringReader(File.ReadAllText(@Application.StartupPath + @"\files\languages\" + langcode + ".xml"))) 33 | { 34 | var LOCAL = (LanguagesString)lzol.Deserialize(reader); 35 | Text = LOCAL.AboutTitle; 36 | darkTextBox1.Text = "- " + LOCAL.Version + ": " + Convert.ToString(Application.ProductVersion); 37 | darkTextBox1.Text += "\r\n- " + LOCAL.Authors + ":\r\n~ Zalexanninev15 - " + LOCAL.Zalexanninev15 + "\r\n~ Vadim M. - " + LOCAL.VadimM; 38 | darkTextBox1.Text += "\r\n- " + LOCAL.License + ": MIT"; 39 | darkTextBox1.Text += "\r\n- " + LOCAL.Localization + ": " + LOCAL.LocalizationBy; 40 | darkButton1.Text = LOCAL.AboutDonate; 41 | darkButton2.Text = LOCAL.AboutIssues; 42 | darkButton3.Text = LOCAL.AboutSite; 43 | darkButton4.Text = LOCAL.AboutTopic; 44 | MSG[0] = LOCAL.Warning; 45 | MSG[1] = LOCAL.BrowserNotFound; 46 | } 47 | } 48 | 49 | int db = 0; 50 | void pictureBox1_Click(object sender, EventArgs e) 51 | { 52 | if (Data.DebugMode) 53 | { 54 | try 55 | { 56 | db += 1; 57 | if (db == 10) { WDebug wdb = new WDebug(); wdb.ShowDialog(); } 58 | } 59 | catch { } 60 | } 61 | } 62 | } 63 | } -------------------------------------------------------------------------------- /data/docs/OtherThings.md: -------------------------------------------------------------------------------- 1 | # Other things 2 | 3 | *Actions are performed in the **files** folder* 4 | 5 | ## Downgrader 6 | 7 | ### Usage 8 | 9 | ```shell 10 | jpd "E:\Games\Grand Theft Auto San Andreas" 11 | ``` 12 | 13 | ### Features 14 | 15 | * As simple as possible interaction (default). Specify the folder and answer the questions - you can easily get version 1.0 with the necessary settings 16 | * The ability to fine-tune the downgrading process, the *Jetpack Downgrader* itself, and some other aspects 17 | * Using delta patches that weigh significantly less than the files from the game version 1.0 18 | * Smart checking for different versions and other aspects that will help you perform downgrades, in many cases, successfully 19 | * Easy integration of the application as a separate component in your project 20 | * Display process of downgrade and maximum speed of operations 21 | 22 | ### Settings in downgrader.xml 23 | 24 | In **downgrader.xml**, you can specify the settings for the Downgrader. You can also open the settings by pressing **F4** in the GUI. If you don't see this file, it means that the current settings of the Downgrader are set by default (try to change something in the GUI and you will see the file) 25 | 26 | #### All settings 27 | 28 | * **CreateBackups** - creating backups (**[full file name] + .bak**) of original files before downgrading them. Game can be returned and restored from the settings of the downgrader in GUI, it can also be activated by a keyboard shortcut **Ctrl + Z** 29 | * **CreateShortcut** - creating a shortcut to a file **gta_sa.exe** on the desktop (only after a successful downgrade) 30 | * **ResetGame** - remove the game configuration file **gta_sa.set** for prevents crash 31 | * **RGL_GarbageCleaning** - remove unneeded files (**index.bin** and **MTLX.dll**) from the Rockstar Games Launcher version of the game (only after a successful downgrade). These files are not used in the game version 1.0 32 | * **RegisterGamePath** - add entries to the registry so that the game is better recognized by mods and programs (e.g.: launchers, SAMP and other projects) (only after a successful downgrade). This function is also available in the GUI ("Downgrader settings") separately from the downgrader itself, it can also be called using a keyboard shortcut **Ctrl + Y** 33 | * **CopyGameToNewPath** - make a copy of the game folder (**[folder name] + _Downgraded**) to prevent accidental updates to the game (after MD5-scan). It is highly recommended to enable it for the Steam/Rockstar Games Launcher versions of the game!!! 34 | * **EnableDirectPlay** - enable the Windows DirectPlay component to run the game on Windows 10 35 | * **InstallDirectXComponents** - install additional DirectX files to run the game 36 | * **Forced** - force the app to continue running even if EXE file are already use from the game version 1.0 (MD5). Downgrader will only work with the EXE file, the rest of the game files will just be checked, so they must be original. For non-1.0 versions, only the EXE file will be patched 37 | * **UserMode** - using the progress bar to display the progress of operations, without a full log of all actions 38 | 39 | ### Old versions of Downgrader 40 | 41 | Information about the old versions (1.14 and below) of the Downgrader is [here](https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/unstable/data/docs/DowngraderSettingsOld.md) 42 | 43 | ## GUI 44 | 45 | ### Settings in gui.xml 46 | 47 | If you don't see this file, it means that the current settings of the Downgrader are set by default (try to change language and you will see the file) 48 | 49 | #### All settings 50 | 51 | * **LanguageCode** - code of the currently used language (code is taken from the name of the file in the **languages** folder - **[language code].xml**) 52 | * **FirstLaunch** - is this the first GUI launch 53 | -------------------------------------------------------------------------------- /sources/Downgrader/Downgrader.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {7231A22C-71EE-4CC2-9BFD-889D603B3AB3} 5 | Debug 6 | AnyCPU 7 | Exe 8 | JetpackDowngrader 9 | jpd 10 | v4.8 11 | Properties 12 | app.manifest 13 | False 14 | 15 | 16 | 17 | AnyCPU 18 | True 19 | 20 | 21 | bin\Debug\ 22 | True 23 | Full 24 | False 25 | True 26 | DEBUG;TRACE 27 | 28 | 29 | bin\Release\ 30 | False 31 | None 32 | True 33 | False 34 | TRACE 35 | 36 | 37 | app.ico 38 | 39 | 40 | true 41 | false 42 | ..\..\..\..\Desktop\JPD\files\ 43 | 44 | 45 | TRACE 46 | false 47 | none 48 | false 49 | ..\..\..\..\..\Desktop\JPD\files\ 50 | 51 | 52 | JetpackDowngrader.Program 53 | 54 | 55 | false 56 | 57 | 58 | AFF66EEB2F7EB80DEA5FD3D78B9B5F7AD76E56A2 59 | 60 | 61 | 62 | 63 | 64 | 65 | false 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | False 77 | ..\..\..\..\..\Desktop\JPD\files\VitNX.dll 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /sources/GUI/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace JetpackGUI.Properties { 2 | using System; 3 | 4 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] 5 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 6 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 7 | internal class Resources { 8 | 9 | private static global::System.Resources.ResourceManager resourceMan; 10 | 11 | private static global::System.Globalization.CultureInfo resourceCulture; 12 | 13 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 14 | internal Resources() { 15 | } 16 | 17 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 18 | internal static global::System.Resources.ResourceManager ResourceManager { 19 | get { 20 | if (object.ReferenceEquals(resourceMan, null)) { 21 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("JetpackGUI.Properties.Resources", typeof(Resources).Assembly); 22 | resourceMan = temp; 23 | } 24 | return resourceMan; 25 | } 26 | } 27 | 28 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 29 | internal static global::System.Globalization.CultureInfo Culture { 30 | get { 31 | return resourceCulture; 32 | } 33 | set { 34 | resourceCulture = value; 35 | } 36 | } 37 | 38 | internal static System.Drawing.Bitmap About { 39 | get { 40 | object obj = ResourceManager.GetObject("About", resourceCulture); 41 | return ((System.Drawing.Bitmap)(obj)); 42 | } 43 | } 44 | 45 | internal static byte[] ASILoader { 46 | get { 47 | object obj = ResourceManager.GetObject("ASILoader", resourceCulture); 48 | return ((byte[])(obj)); 49 | } 50 | } 51 | 52 | internal static System.Drawing.Bitmap DirectPlay { 53 | get { 54 | object obj = ResourceManager.GetObject("DirectPlay", resourceCulture); 55 | return ((System.Drawing.Bitmap)(obj)); 56 | } 57 | } 58 | 59 | internal static System.Drawing.Bitmap GoBack { 60 | get { 61 | object obj = ResourceManager.GetObject("GoBack", resourceCulture); 62 | return ((System.Drawing.Bitmap)(obj)); 63 | } 64 | } 65 | 66 | internal static System.Drawing.Bitmap Help { 67 | get { 68 | object obj = ResourceManager.GetObject("Help", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | internal static System.Drawing.Bitmap Language { 74 | get { 75 | object obj = ResourceManager.GetObject("Language", resourceCulture); 76 | return ((System.Drawing.Bitmap)(obj)); 77 | } 78 | } 79 | 80 | internal static System.Drawing.Bitmap Logo { 81 | get { 82 | object obj = ResourceManager.GetObject("Logo", resourceCulture); 83 | return ((System.Drawing.Bitmap)(obj)); 84 | } 85 | } 86 | 87 | internal static System.Drawing.Bitmap Reg { 88 | get { 89 | object obj = ResourceManager.GetObject("Reg", resourceCulture); 90 | return ((System.Drawing.Bitmap)(obj)); 91 | } 92 | } 93 | 94 | internal static System.Drawing.Bitmap Right { 95 | get { 96 | object obj = ResourceManager.GetObject("Right", resourceCulture); 97 | return ((System.Drawing.Bitmap)(obj)); 98 | } 99 | } 100 | 101 | internal static System.Drawing.Bitmap Up { 102 | get { 103 | object obj = ResourceManager.GetObject("Up", resourceCulture); 104 | return ((System.Drawing.Bitmap)(obj)); 105 | } 106 | } 107 | } 108 | } -------------------------------------------------------------------------------- /data/docs/DowngraderSettingsOld.md: -------------------------------------------------------------------------------- 1 | # Downgrader (Old versions, 1.14 and below) 2 | 3 | *Actions are performed in the **files** folder* 4 | 5 | ## CUI features 6 | 7 | * As simple as possible interaction (default). Specify the folder and answer the questions - you can easily get version 1.0 with the necessary settings 8 | * The ability to fine-tune the downgrading process, the *Jetpack Downgrader* itself, and some other aspects 9 | * Using delta patches that weigh significantly less than the files from the game version 1.0 10 | * Smart checking for different versions and other aspects that will help you perform downgrades, in many cases, successfully 11 | * Easy integration of the application as a separate component in your project 12 | * Display process of downgrade and maximum speed of operations 13 | 14 | ## Usage and configuration 15 | 16 | 1. Run **jpd.exe** and select the folder with the game (if **SelectFolder=true**) 17 | 2. Answer the questions (if **UseMsg=true**) and wait end of work... 18 | 19 | ## Settings in jpd.ini 20 | 21 | In **jpd.ini**, you can specify the settings for this application, it is not recommended to change anything if you don't know exactly what each setting is responsible for and what its values and results are!!! It is important to remember that settings are always more important than the answer you have chosen (if **UseMsg=true**). You can also open the settings by pressing **F4** in the GUI 22 | 23 | ### Downgrader 24 | 25 | * **CreateBackups** - creating backups (**[full file name] + .bak**) of original files before downgrading them. Game can be returned and restored from the settings of the downgrader in GUI, it can also be activated by a keyboard shortcut **Ctrl + Z** 26 | * **CreateShortcut** - creating a shortcut to a file **gta_sa.exe** on the desktop (only after a successful downgrade) 27 | * **ResetGame** - remove the game configuration file **gta_sa.set** for prevents crash (after getting game version) 28 | * **GarbageCleaning** - remove unneeded files (**index.bin** and **MTLX.dll**) from the Rockstar Games Launcher version of the game (only after a successful downgrade). These files are not used in the game version 1.0 29 | * **RegisterGamePath** - add entries to the registry so that the game is better recognized by mods and programs (e.g.: launchers, SAMP and other projects) (only after a successful downgrade). This function is also available in GUI (downgrader settings) separately from the downgrader itself, it can also be called using a keyboard shortcut **Ctrl + Y** 30 | * **CreateNewGamePath** - make a copy of the game folder (**[folder name] + _Downgraded**) to prevent accidental updates to the game (after MD5-scan). It is highly recommended to enable it for the Steam/Rockstar Games Launcher versions of the game!!! 31 | * **Forced** - force the app to continue running even if EXE file are already use from the game version 1.0 (MD5). Downgrader will only work with the EXE file, the rest of the game files will just be checked, so they must be original. For non-1.0 versions, only the EXE file will be patched 32 | * **EnableDirectPlay** - enable the Windows DirectPlay component to run the game on Windows 10 (after getting game version) 33 | * **InstallDirectXComponents** - install additional DirectX files to run the game (after getting game version) 34 | 35 | ### JPD 36 | 37 | * **SelectFolder** - using UI for select the folder with the game (path using **Copmonent=true**, overwritten to a new one) 38 | * **ConsoleTransparency** - use transparency for console 39 | * **UseMsg** - use Windows message boxes to notify you when you select an action, as well as to show a positive result of the application's performance. If the selection dialog appears, the selection will be placed second to the settings: **CreateBackups**, **CreateShortcut**, **ResetGame**, **GarbageCleaning**, **RegisterGamePath**, **CreateNewGamePath**, **Forced**, **EnableDirectPlay**, **InstallDirectX** 40 | * **UseProgressBar** - use the progress bar to indicate the progress of each of the downgrader stages. **During operation, all logs of the current stage of work are ignored!!!** 41 | * **Component** - this setting is **only** necessary if you decide to use *Jetpack Downgrader* in your projects (this setting will help you skip the UI (in console) and removes the waiting (if in the processes will not be found **app.exe**) for input after the processes in the app are completed). This setting adds the ability to specify the path to the game folder as a parameter for launching the application 42 | 43 | **Example for CMD** 44 | 45 | ```shell 46 | jpd "E:\Games\Grand Theft Auto San Andreas" 47 | ``` 48 | 49 | ### Only 50 | 51 | * **GameVersion** - get only the game version (can be used with the settings **ResetGame**, **EnableDirectPlay**, **InstallDirectX**) 52 | * **NextCheckFiles** - get only the game version and check files (only those that are used for downgrading) 53 | * **NextCheckFilesAndCheckMD5** - the same as **NextCheckFiles**, but it also scan files by MD5 and reveals which files are used from the game version 1.0 (information will only be visible if **UseProgressBar=false**) 54 | 55 | ### GUI 56 | * **LanguageCode** - code of the currently used language (code is taken from the name of the file in the **languages** folder - **[language code].ini**) 57 | * **FirstRun** - is this the first GUI launch -------------------------------------------------------------------------------- /sources/GUI/OtherForms/FirstLaunch.Designer.cs: -------------------------------------------------------------------------------- 1 | 2 | namespace JetpackGUI 3 | { 4 | partial class MyLang 5 | { 6 | /// 7 | /// Required designer variable. 8 | /// 9 | System.ComponentModel.IContainer components = null; 10 | 11 | /// 12 | /// Clean up any resources being used. 13 | /// 14 | /// true if managed resources should be disposed; otherwise, false. 15 | protected override void Dispose(bool disposing) 16 | { 17 | if (disposing && (components != null)) 18 | { 19 | components.Dispose(); 20 | } 21 | base.Dispose(disposing); 22 | } 23 | 24 | #region Windows Form Designer generated code 25 | 26 | /// 27 | /// Required method for Designer support - do not modify 28 | /// the contents of this method with the code editor. 29 | /// 30 | void InitializeComponent() 31 | { 32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MyLang)); 33 | this.darkLabel1 = new VitNX.Controls.VitNX_Label(); 34 | this.AllLangs = new VitNX.Controls.VitNX_ComboBox(); 35 | this.button2 = new VitNX.Controls.VitNX_Button(); 36 | this.SuspendLayout(); 37 | // 38 | // darkLabel1 39 | // 40 | this.darkLabel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 41 | | System.Windows.Forms.AnchorStyles.Left) 42 | | System.Windows.Forms.AnchorStyles.Right))); 43 | this.darkLabel1.Font = new System.Drawing.Font("Arial", 9.75F); 44 | this.darkLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(220)))), ((int)(((byte)(220))))); 45 | this.darkLabel1.Location = new System.Drawing.Point(15, 3); 46 | this.darkLabel1.Name = "darkLabel1"; 47 | this.darkLabel1.Size = new System.Drawing.Size(219, 32); 48 | this.darkLabel1.TabIndex = 4; 49 | this.darkLabel1.Text = "Select a localization from the list"; 50 | this.darkLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; 51 | // 52 | // AllLangs 53 | // 54 | this.AllLangs.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable; 55 | this.AllLangs.FormattingEnabled = true; 56 | this.AllLangs.Location = new System.Drawing.Point(21, 35); 57 | this.AllLangs.Name = "AllLangs"; 58 | this.AllLangs.Size = new System.Drawing.Size(207, 22); 59 | this.AllLangs.TabIndex = 7; 60 | this.AllLangs.TabStop = false; 61 | this.AllLangs.SelectedIndexChanged += new System.EventHandler(this.AllLangs_SelectedIndexChanged); 62 | // 63 | // button2 64 | // 65 | this.button2.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); 66 | this.button2.Location = new System.Drawing.Point(21, 67); 67 | this.button2.Name = "button2"; 68 | this.button2.Padding = new System.Windows.Forms.Padding(5); 69 | this.button2.Size = new System.Drawing.Size(207, 30); 70 | this.button2.TabIndex = 17; 71 | this.button2.TabStop = false; 72 | this.button2.Text = "Apply and launch"; 73 | this.button2.Click += new System.EventHandler(this.button2_Click); 74 | // 75 | // MyLang 76 | // 77 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); 78 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 79 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(63)))), ((int)(((byte)(65))))); 80 | this.ClientSize = new System.Drawing.Size(249, 116); 81 | this.Controls.Add(this.button2); 82 | this.Controls.Add(this.AllLangs); 83 | this.Controls.Add(this.darkLabel1); 84 | this.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); 85 | this.ForeColor = System.Drawing.Color.Gainsboro; 86 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 87 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 88 | this.MaximizeBox = false; 89 | this.MinimizeBox = false; 90 | this.Name = "MyLang"; 91 | this.ShowIcon = false; 92 | this.ShowInTaskbar = false; 93 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 94 | this.Text = "First launch"; 95 | this.Load += new System.EventHandler(this.MyLang_Load); 96 | this.ResumeLayout(false); 97 | 98 | } 99 | 100 | #endregion 101 | 102 | VitNX.Controls.VitNX_Label darkLabel1; 103 | VitNX.Controls.VitNX_ComboBox AllLangs; 104 | VitNX.Controls.VitNX_Button button2; 105 | } 106 | } -------------------------------------------------------------------------------- /data/languages/RU.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Russian 5 | 6 | Первый запуск 7 | Выберите локализацию из списка 8 | Применить 9 | 10 | Локализации 11 | Выберите нужный этап 12 | Другое 13 | Настройки 14 | Путь к папке с игрой 15 | Рекомендуемые 16 | Опциональные 17 | Модификации 18 | Список модификаций 19 | ASI Loader устанавливается автоматически, если выбрана хотя бы одна модификация! 20 | Информация о модификации 21 | Название 22 | Версия 23 | Автор 24 | Описание 25 | Сайт модификации 26 | Скачиваю архив модификации 27 | Понизить версию игры 28 | Скачать патчи 29 | Скачиваю патчи... 30 | Скачиваю дополнительные DirectX файлы... 31 | Модификация 32 | МБ 33 | Приятной игры! 34 | Играть 35 | Закрыть приложение 36 | 37 | Бэкап оригинальных файлов до даунгрейда 38 | Создать ярлык на Рабочем Столе 39 | Удалить GTA-SA.SET (Сброс настроек игры и предотвращение вылетов) 40 | далить ненужные файлы (ТОЛЬКО для версии из Rockstar Games Launcher) 41 | Добавить путь в реестр Windows 42 | Переместить игру в другую папку (Запрет обновлений игры) 43 | Принудительно (ТОЛЬКО для версии 1.0) 44 | Включить DirectPlay 45 | Установить компоненты DirectX 46 | Установить данную модификацию после даунгрейдера 47 | 48 | Запрос на скачивание 49 | Информация 50 | Предупреждение 51 | Ошибка 52 | Вопрос 53 | Укажите папку с игрой 54 | 55 | была успешно установлена! 56 | Добавление игры в реестр успешно завершено! 57 | Оригинальная версия игры была успешно возвращена! 58 | Выполнено! 59 | 60 | Путь к игре не найден! 61 | Браузер для открытия ссылки не найден! Ссылка будет скопирована в буфер обмена! 62 | Игра (версии 1.0) теперь расположена по пути 63 | Папка с оригинальной игрой осталась нетронутой! Если всё прошло отлично, то можете её удалить, т.к. она более не понадобится 64 | 65 | Данные модификации повреждены! 66 | не установлена! 67 | 68 | Желаете включить DirectPlay для запуска игры? Данная настройка Windows 8.1/10/11 необходима для поддержки старых приложений и игр 69 | Поскольку файлы патчей не были найдены, мы сейчас начнем их загрузку. Вы готовы загрузить эти файлы прямо сейчас? 70 | Поскольку дополнительные файлы DirectX не были найдены, мы сейчас начнем их загрузку. Вы готовы загрузить эти файлы прямо сейчас? 71 | Вы хотите установить эту модификацию после даунгрейда? 72 | Хотели бы вы понизить версию игры до 1.0 прямо сейчас, а после понижения установить выбранные модификации (если вы их выбрали)? 73 | Были найдены бэкапы сделанные даунгрейдером (или не были найдены некоторые оригинальные файлы), и, если вы хотите, можно вернуть версию игры, которая была до даунгрейда (установленные модификации останутся). Желаете продолжить? 74 | Хотите зарегистрировать путь к игре в системе для правильного запуска модов и отображения в разных лаунчерах и магазинах? 75 | Приложение работает в офлайн режиме, поэтому некоторые функции будут недоступны до тех пор, пока нет доступа в Интернет! 76 | Хотите продолжить? 77 | 78 | Режим отладки активируется при даунгрейде! Индикатор выполнения отключён, включена подробная запись событий в консоль! 79 | Режим отладки деактивируется при даунгрейде! Индикатор выполнения включён, выключена подробная запись событий в консоль! 80 | 81 | О приложении 82 | Версия 83 | Авторы 84 | программист и создатель 85 | консультант 86 | Лицензия 87 | Локализация 88 | Русский язык от Zalexanninev15 89 | Поддержать 90 | Задачи 91 | GitHub 92 | На форуме 93 | -------------------------------------------------------------------------------- /data/languages/EN.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | English 5 | 6 | First launch 7 | Select a localization from the list 8 | Apply and Launch 9 | 10 | Languages 11 | Select the desired stage 12 | Other actions 13 | Downgrader Settings 14 | Path to the game folder 15 | Recommended settings 16 | Optional settings 17 | Modifications 18 | List of modifications 19 | ASI Loader is installed automatically when you select at least one modification! 20 | About modification 21 | Name 22 | Version 23 | Author 24 | Description 25 | Go to the modification topic 26 | Downloading cache of the mod 27 | Downgrade 28 | Download patches 29 | Downloading patches... 30 | Downloading additional DirectX files... 31 | The 32 | MB 33 | Done, enjoy the game! 34 | Play 35 | Close downgrader 36 | 37 | Backup original files before downgrade 38 | Make shortcut on Desktop 39 | Remove GTA-SA.SET (Reset game settings and prevents crash) 40 | Remove unneeded files (ONLY for the version of the game from Rockstar Games Launcher) 41 | Register game path (Make game visible) 42 | Move game to another folder (Prevents auto-update and rehash) 43 | Forced (ONLY for version 1.0) 44 | Enable DirectPlay 45 | Install DirectX components 46 | Install this modification after downgrade 47 | 48 | Request for download 49 | Information 50 | Warning 51 | Error 52 | Question 53 | Select the game folder 54 | 55 | modification has been successfully installed! 56 | The binding of the game is completed! 57 | The original version of the game was returned successfully! 58 | Done! 59 | 60 | Path to the game is not found! 61 | Browser to open the link was not found! The link will be copied to the clipboard! 62 | Game (version 1.0) is now located in 63 | Folder with the original game remained untouched! If everything went fine, you can delete it, because you will no longer need it 64 | 65 | Data of modification is damaged! 66 | modification is not installed! 67 | 68 | Would you like to enable DirectPlay to launch the game? Current setting for Windows 8.1/10/11 is necessary to support old applications and games 69 | Since the patch files were not found, we will now start downloading them. Would you like to download this files right now? 70 | Since the additional DirectX files were not found, we will now start downloading them. Would you like to download this files right now? 71 | Do you want to install this modification after the downgrade? 72 | Would you like to downgrade the game version to 1.0 right now, and after downgrading, install the selected modifications (if you have selected them)? 73 | Backups of the downgrader were found (or some original files were not found) and, if you want, you can return the version of the game that was before the downgrade (installed modifications will remain). Do you want this? 74 | Would you like to register the path to the game in the system for the correct launch of mods and display in different launchers and stores? 75 | App work in offline mode, so some features will not be available as long as there is no internet access! 76 | Do you want to continue? 77 | 78 | Debug mode is activated when downgrading! Progressbar is disabled, detailed recording of events in the console is enabled! 79 | Debug mode is deactivated when downgrading! Progressbar is enabled, detailed recording of events in the console is disabled! 80 | 81 | About 82 | Version 83 | Created by 84 | programmer and creator 85 | consultant 86 | License 87 | Localization 88 | English localization by Zalexanninev15 89 | Donate 90 | Issues 91 | GitHub 92 | Topic 93 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Jetpack Downgrader 2 | 3 | ![alt](https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/refs/heads/main/data/docs/logo.png) 4 | 5 | [![](https://img.shields.io/badge/platform-Windows-informational)](https://github.com/Zalexanninev15/Jetpack-Downgrader) 6 | [![](https://img.shields.io/badge/written_on-.NET_Framework_4.8-512BD4.svg?logo=dotnet)](https://dotnet.microsoft.com/download/dotnet-framework/net48) 7 | [![](https://img.shields.io/badge/written_on-C%23-%23239120.svg?logo=sharp&logoColor=white)](https://github.com/Zalexanninev15/Jetpack-Downgrader) 8 | [![](https://img.shields.io/github/release/Zalexanninev15/Jetpack-Downgrader)](https://github.com/Zalexanninev15/Jetpack-Downgrader/releases/latest) 9 | [![](https://img.shields.io/badge/versions-changelog-7D28CC.svg)](https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/unstable/data/docs/Changelog.md) 10 | [![](https://img.shields.io/github/downloads/Zalexanninev15/Jetpack-Downgrader/total.svg)](https://github.com/Zalexanninev15/Jetpack-Downgrader/releases) 11 | [![](https://img.shields.io/github/last-commit/Zalexanninev15/Jetpack-Downgrader/unstable.svg)](https://github.com/Zalexanninev15/Jetpack-Downgrader/commits/unstable) 12 | [![](https://img.shields.io/github/stars/Zalexanninev15/Jetpack-Downgrader.svg)](https://github.com/Zalexanninev15/Jetpack-Downgrader/stargazers) 13 | [![](https://img.shields.io/github/forks/Zalexanninev15/Jetpack-Downgrader.svg)](https://github.com/Zalexanninev15/Jetpack-Downgrader/network/members) 14 | [![](https://img.shields.io/github/issues/Zalexanninev15/Jetpack-Downgrader.svg)](https://github.com/Zalexanninev15/Jetpack-Downgrader/issues?q=is%3Aopen+is%3Aissue) 15 | [![](https://img.shields.io/github/issues-closed/Zalexanninev15/Jetpack-Downgrader.svg)](https://github.com/Zalexanninev15/Jetpack-Downgrader/issues?q=is%3Aissue+is%3Aclosed) 16 | [![](https://img.shields.io/badge/Topic_on_GTAForums-27282D.svg)](https://gtaforums.com/topic/969056-jetpack-downgrader) 17 | [![](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) 18 | [![](https://img.shields.io/badge/Donate-FFDD00.svg?logo=buymeacoffee&logoColor=black)](https://z15.neocities.org/donate) 19 | 20 | ## Screenshot 21 | 22 | ![screenshot](https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/refs/heads/main/data/docs/gui.png) 23 | 24 | ## Description 25 | 26 | App for downgrading the game Grand Theft Auto: San Andreas to version 1.0 27 | 28 | ## System requirements 29 | 30 | * **OS:** Windows 7 or higher 31 | * **Additional:** .NET Framework 4.8 32 | 33 | ## Authors 34 | 35 | * Zalexanninev15 - programmer and creator 36 | * Vadim M. - consultant 37 | 38 | ## Features 39 | 40 | * Easy to use and lots of additional downgrade settings. 41 | * The ability to fine-tune the downgrading process, the *Jetpack Downgrader* itself, and some other aspects. 42 | * Using patches that weigh significantly less than the files from the game version 1.0 43 | * Support for installing modifications after downgrading the game version. 44 | * Smart checking for different versions and other aspects that will help you perform downgrades, in many cases, successfully. 45 | * Display process of downgrade and maximum speed of operations. 46 | * Support for localizations to different languages: English, Russian (GUI only, for now). 47 | * Support for hotkeys (**Ctrl + O**, **Ctrl + Y**, **Ctrl + Z**, **Ctrl + S**, **F1**, **F4**, **F12**) 48 | 49 | ## Supported versions 50 | 51 | * 1.0 [exe only] (if forced) 52 | * 1.01 [exe only] 53 | * 2.0 [fully supported] 54 | * Steam [fully supported] 55 | * Rockstar Games Launcher [fully supported] 56 | 57 | **Only licensed versions of the game are supported, work on pirated builds is not guaranteed and will never be added!!!** 58 | 59 | ## Usage 60 | 61 | *You can also open this document by pressing **F1*** 62 | 63 | 1. Launch **app.exe** 64 | 2. Select language using corresponding icon. *At the moment, list of languages is very limited. You can [create a localization in your language and request it to be added to the repository](https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/main/data/docs/AddNewData.md#add-new-localizations), after which it will be added in the next update* 65 | 3. Select the first stage and select the path to game folder (or press **Ctrl + O**) and necessary settings (the recommended are already checked) 66 | 4. If necessary, select the second stage. Select the desired modification(s) (correction and improvement of the game) (you can try to [add your (or not) modification to the list](https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/main/data/docs/AddNewData.md#add-new-modifications)) using the list. Then select the checkbox ("install this") and wait for downloading the cache with mod's files 67 | 5. Select stage 3 (or press **Ctrl + S**). The console will appear and downgrade process will start... If we can't find the patch files, you'll need to download them first (that's why step 3 is called "Download patches"), only then the button with the title "Downgrade" will appear 68 | 6. After the end, make sure that there are no errors in the console, this downgrade of the game is completed 69 | 7. If you have selected the modifications, you still need to wait until they are fully unpacked 70 | 8. After all operations are completed, a will be displayed a success message (although it may be displayed even if an error occurred somewhere, so start the game and make sure that everything was successful). If there are problems, press **F12** and start the downgrade process again 71 | 9. Play! Run strictly file **gta_sa.exe**, or, if you ticked the checkbox, from a shortcut on the Desktop 72 | 73 | ## Links 74 | 75 | * If you want to use more powerful settings for the game's downgrade/downgrader setup, then you need to read the [help about other things](https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/main/data/docs/OtherThings.md) about it. 76 | * [Add new data (localization(s) or modification(s))](https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/main/data/docs/AddNewData.md) to the GUI. 77 | 78 | ## Used libraries 79 | 80 | * [VitNX](https://github.com/Zalexanninev15/VitNX) ([MIT License](https://github.com/Zalexanninev15/VitNX/blob/main/LICENSE)) 81 | * [MegaApiClient](https://github.com/gpailler/MegaApiClient) ([MIT License](https://github.com/gpailler/MegaApiClient/blob/master/LICENSE)) 82 | * [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) ([MIT License](https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md)) 83 | 84 | ## Build 85 | 86 | Open solution *Jetpack Downgrader* and compile all projects using [Visual Studio 2019](https://visualstudio.microsoft.com/vs). You also need from NuGet restore/install [*MegaApiClient*](https://www.nuget.org/packages/MegaApiClient) (with [*Newtonsoft.Json*](https://www.nuget.org/packages/Newtonsoft.Json)) package and manually add reference to the library [*VitNX*](https://github.com/Zalexanninev15/VitNX). 87 | -------------------------------------------------------------------------------- /sources/GUI/GUI.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {D81E1838-8791-4716-B0DD-B44107FAB96D} 5 | Debug 6 | AnyCPU 7 | WinExe 8 | JetpackGUI 9 | app 10 | v4.8 11 | Properties 12 | 13 | 14 | 15 | AnyCPU 16 | True 17 | 18 | 19 | bin\Debug\ 20 | True 21 | Full 22 | False 23 | True 24 | DEBUG;TRACE 25 | 26 | 27 | bin\Release\ 28 | False 29 | None 30 | True 31 | False 32 | TRACE 33 | 34 | 35 | app.ico 36 | 37 | 38 | false 39 | ..\..\..\..\Desktop\JPD\ 40 | 41 | 42 | TRACE 43 | false 44 | none 45 | ..\..\..\..\..\Desktop\JPD\ 46 | false 47 | AnyCPU 48 | 49 | 50 | JetpackGUI.Program 51 | 52 | 53 | app.manifest 54 | 55 | 56 | false 57 | 58 | 59 | AFF66EEB2F7EB80DEA5FD3D78B9B5F7AD76E56A2 60 | 61 | 62 | 63 | 64 | 65 | 66 | false 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | ..\packages\ConsoleControl.1.3.0\lib\net40-client\ConsoleControl.dll 75 | 76 | 77 | ..\packages\ConsoleControlAPI.1.3.0\lib\net40\ConsoleControlAPI.dll 78 | 79 | 80 | ..\packages\MegaApiClient.1.9.0\lib\net46\MegaApiClient.dll 81 | 82 | 83 | ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | False 96 | ..\..\..\..\..\Desktop\JPD\files\VitNX.dll 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | Form 106 | 107 | 108 | MainForm.cs 109 | 110 | 111 | 112 | Form 113 | 114 | 115 | About.cs 116 | 117 | 118 | 119 | Form 120 | 121 | 122 | WDebug.cs 123 | 124 | 125 | Form 126 | 127 | 128 | FirstLaunch.cs 129 | 130 | 131 | 132 | True 133 | True 134 | Resources.resx 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | MainForm.cs 159 | Designer 160 | 161 | 162 | About.cs 163 | 164 | 165 | FirstLaunch.cs 166 | 167 | 168 | WDebug.cs 169 | 170 | 171 | ResXFileCodeGenerator 172 | Designer 173 | Resources.Designer.cs 174 | 175 | 176 | 177 | -------------------------------------------------------------------------------- /sources/GUI/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\Up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Resources\GoBack.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\Resources\ASL.zip;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 129 | 130 | 131 | ..\Resources\Language.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 132 | 133 | 134 | ..\Resources\Reg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 135 | 136 | 137 | ..\Resources\Right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 138 | 139 | 140 | ..\resources\about.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 141 | 142 | 143 | ..\Resources\logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 144 | 145 | 146 | ..\Resources\Help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 147 | 148 | 149 | ..\Resources\DirectPlay.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 150 | 151 | -------------------------------------------------------------------------------- /sources/GUI/Classes/LanguagesString.cs: -------------------------------------------------------------------------------- 1 | using System.Xml.Serialization; 2 | 3 | namespace JetpackGUI 4 | { 5 | [XmlRoot(ElementName = "LanguagesString")] 6 | public class LanguagesString 7 | { 8 | [XmlElement(ElementName = "Language")] 9 | public string Language { get; set; } 10 | 11 | [XmlElement(ElementName = "FirstTitle")] 12 | public string FirstTitle { get; set; } 13 | 14 | [XmlElement(ElementName = "SelectLang")] 15 | public string SelectLang { get; set; } 16 | 17 | [XmlElement(ElementName = "ApplyAndLaunch")] 18 | public string ApplyAndLaunch { get; set; } 19 | 20 | [XmlElement(ElementName = "Languages")] 21 | public string Languages { get; set; } 22 | 23 | [XmlElement(ElementName = "Stage")] 24 | public string Stage { get; set; } 25 | 26 | [XmlElement(ElementName = "OtherActions")] 27 | public string OtherActions { get; set; } 28 | 29 | [XmlElement(ElementName = "Tab1")] 30 | public string Tab1 { get; set; } 31 | 32 | [XmlElement(ElementName = "PathLabel")] 33 | public string PathLabel { get; set; } 34 | 35 | [XmlElement(ElementName = "CBG1")] 36 | public string CBG1 { get; set; } 37 | 38 | [XmlElement(ElementName = "CBG2")] 39 | public string CBG2 { get; set; } 40 | 41 | [XmlElement(ElementName = "Tab2")] 42 | public string Tab2 { get; set; } 43 | 44 | [XmlElement(ElementName = "List")] 45 | public string List { get; set; } 46 | 47 | [XmlElement(ElementName = "ASILoader")] 48 | public string ASILoader { get; set; } 49 | 50 | [XmlElement(ElementName = "AboutMod")] 51 | public string AboutMod { get; set; } 52 | 53 | [XmlElement(ElementName = "ModName")] 54 | public string ModName { get; set; } 55 | 56 | [XmlElement(ElementName = "ModVersion")] 57 | public string ModVersion { get; set; } 58 | 59 | [XmlElement(ElementName = "ModAuthor")] 60 | public string ModAuthor { get; set; } 61 | 62 | [XmlElement(ElementName = "DescriptionMod")] 63 | public string DescriptionMod { get; set; } 64 | 65 | [XmlElement(ElementName = "TopicOfMod")] 66 | public string TopicOfMod { get; set; } 67 | 68 | [XmlElement(ElementName = "DownloadingModCache")] 69 | public string DownloadingModCache { get; set; } 70 | 71 | [XmlElement(ElementName = "Downgrade")] 72 | public string Downgrade { get; set; } 73 | 74 | [XmlElement(ElementName = "DownloadPatches")] 75 | public string DownloadPatches { get; set; } 76 | 77 | [XmlElement(ElementName = "DownloadingPatches")] 78 | public string DownloadingPatches { get; set; } 79 | 80 | [XmlElement(ElementName = "DownloadingDirectXFiles")] 81 | public string DownloadingDirectXFiles { get; set; } 82 | 83 | [XmlElement(ElementName = "ModWord")] 84 | public string ModWord { get; set; } 85 | 86 | [XmlElement(ElementName = "Mbyte")] 87 | public string Mbyte { get; set; } 88 | 89 | [XmlElement(ElementName = "WishPlay")] 90 | public string WishPlay { get; set; } 91 | 92 | [XmlElement(ElementName = "Play")] 93 | public string Play { get; set; } 94 | 95 | [XmlElement(ElementName = "CloseApp")] 96 | public string CloseApp { get; set; } 97 | 98 | [XmlElement(ElementName = "CreateBackups")] 99 | public string CreateBackups { get; set; } 100 | 101 | [XmlElement(ElementName = "CreateShortcut")] 102 | public string CreateShortcut { get; set; } 103 | 104 | [XmlElement(ElementName = "ResetGame")] 105 | public string ResetGame { get; set; } 106 | 107 | [XmlElement(ElementName = "RGL_GarbageCleaning")] 108 | public string RGL_GarbageCleaning { get; set; } 109 | 110 | [XmlElement(ElementName = "RegisterGamePath")] 111 | public string RegisterGamePath { get; set; } 112 | 113 | [XmlElement(ElementName = "CopyGameToNewPath")] 114 | public string CopyGameToNewPath { get; set; } 115 | 116 | [XmlElement(ElementName = "Forced")] 117 | public string Forced { get; set; } 118 | 119 | [XmlElement(ElementName = "EnableDirectPlay")] 120 | public string EnableDirectPlay { get; set; } 121 | 122 | [XmlElement(ElementName = "InstallDirectXComponents")] 123 | public string InstallDirectXComponents { get; set; } 124 | 125 | [XmlElement(ElementName = "InstallMod")] 126 | public string InstallMod { get; set; } 127 | 128 | [XmlElement(ElementName = "Request")] 129 | public string Request { get; set; } 130 | 131 | [XmlElement(ElementName = "Information")] 132 | public string Information { get; set; } 133 | 134 | [XmlElement(ElementName = "Warning")] 135 | public string Warning { get; set; } 136 | 137 | [XmlElement(ElementName = "Error")] 138 | public string Error { get; set; } 139 | 140 | [XmlElement(ElementName = "Question")] 141 | public string Question { get; set; } 142 | 143 | [XmlElement(ElementName = "Done")] 144 | public string Done { get; set; } 145 | 146 | [XmlElement(ElementName = "FolderSelectDialog")] 147 | public string FolderSelectDialog { get; set; } 148 | 149 | [XmlElement(ElementName = "WishDownloadPatches")] 150 | public string WishDownloadPatches { get; set; } 151 | 152 | [XmlElement(ElementName = "WishDownloadDirectXFiles")] 153 | public string WishDownloadDirectXFiles { get; set; } 154 | 155 | [XmlElement(ElementName = "InstallModQuestion")] 156 | public string InstallModQuestion { get; set; } 157 | 158 | [XmlElement(ElementName = "WishDowngrader")] 159 | public string WishDowngrader { get; set; } 160 | 161 | [XmlElement(ElementName = "ModSucces")] 162 | public string ModSucces { get; set; } 163 | 164 | [XmlElement(ElementName = "BindingOK")] 165 | public string BindingOK { get; set; } 166 | 167 | [XmlElement(ElementName = "ReturnUsingBackups")] 168 | public string ReturnUsingBackups { get; set; } 169 | 170 | [XmlElement(ElementName = "AboutModDamaged")] 171 | public string AboutModDamaged { get; set; } 172 | 173 | [XmlElement(ElementName = "ModFailure")] 174 | public string ModFailure { get; set; } 175 | 176 | [XmlElement(ElementName = "QEnableDirectPlay")] 177 | public string QEnableDirectPlay { get; set; } 178 | 179 | [XmlElement(ElementName = "WishReturnUsingBackups")] 180 | public string WishReturnUsingBackups { get; set; } 181 | 182 | [XmlElement(ElementName = "WishRegGame")] 183 | public string WishRegGame { get; set; } 184 | 185 | [XmlElement(ElementName = "PathNotFound")] 186 | public string PathNotFound { get; set; } 187 | 188 | [XmlElement(ElementName = "BrowserNotFound")] 189 | public string BrowserNotFound { get; set; } 190 | 191 | [XmlElement(ElementName = "NetworkNotFound")] 192 | public string NetworkNotFound { get; set; } 193 | 194 | [XmlElement(ElementName = "OfflineMode")] 195 | public string OfflineMode { get; set; } 196 | 197 | [XmlElement(ElementName = "NewPath")] 198 | public string NewPath { get; set; } 199 | 200 | [XmlElement(ElementName = "YouCanDelete")] 201 | public string YouCanDelete { get; set; } 202 | 203 | [XmlElement(ElementName = "Activation")] 204 | public string Activation { get; set; } 205 | 206 | [XmlElement(ElementName = "Deactivation")] 207 | public string Deactivation { get; set; } 208 | 209 | [XmlElement(ElementName = "AboutTitle")] 210 | public string AboutTitle { get; set; } 211 | 212 | [XmlElement(ElementName = "Version")] 213 | public string Version { get; set; } 214 | 215 | [XmlElement(ElementName = "Authors")] 216 | public string Authors { get; set; } 217 | 218 | [XmlElement(ElementName = "Zalexanninev15")] 219 | public string Zalexanninev15 { get; set; } 220 | 221 | [XmlElement(ElementName = "VadimM")] 222 | public string VadimM { get; set; } 223 | 224 | [XmlElement(ElementName = "License")] 225 | public string License { get; set; } 226 | 227 | [XmlElement(ElementName = "Localization")] 228 | public string Localization { get; set; } 229 | 230 | [XmlElement(ElementName = "LocalizationBy")] 231 | public string LocalizationBy { get; set; } 232 | 233 | [XmlElement(ElementName = "AboutDonate")] 234 | public string AboutDonate { get; set; } 235 | 236 | [XmlElement(ElementName = "AboutIssues")] 237 | public string AboutIssues { get; set; } 238 | 239 | [XmlElement(ElementName = "AboutSite")] 240 | public string AboutSite { get; set; } 241 | 242 | [XmlElement(ElementName = "AboutTopic")] 243 | public string AboutTopic { get; set; } 244 | 245 | [XmlAttribute(AttributeName = "xsd")] 246 | public string Xsd { get; set; } 247 | 248 | [XmlAttribute(AttributeName = "xsi")] 249 | public string Xsi { get; set; } 250 | 251 | [XmlText] 252 | public string Text { get; set; } 253 | } 254 | } -------------------------------------------------------------------------------- /sources/GUI/OtherForms/About.Designer.cs: -------------------------------------------------------------------------------- 1 | 2 | namespace JetpackGUI 3 | { 4 | partial class About 5 | { 6 | /// 7 | /// Required designer variable. 8 | /// 9 | System.ComponentModel.IContainer components = null; 10 | 11 | /// 12 | /// Clean up any resources being used. 13 | /// 14 | /// true if managed resources should be disposed; otherwise, false. 15 | protected override void Dispose(bool disposing) 16 | { 17 | if (disposing && (components != null)) 18 | { 19 | components.Dispose(); 20 | } 21 | base.Dispose(disposing); 22 | } 23 | 24 | #region Windows Form Designer generated code 25 | 26 | /// 27 | /// Required method for Designer support - do not modify 28 | /// the contents of this method with the code editor. 29 | /// 30 | void InitializeComponent() 31 | { 32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(About)); 33 | this.label3 = new System.Windows.Forms.Label(); 34 | this.label1 = new System.Windows.Forms.Label(); 35 | this.darkButton1 = new VitNX.Controls.VitNX_Button(); 36 | this.darkTextBox1 = new VitNX.Controls.VitNX_TextBox(); 37 | this.darkButton2 = new VitNX.Controls.VitNX_Button(); 38 | this.darkButton3 = new VitNX.Controls.VitNX_Button(); 39 | this.darkButton4 = new VitNX.Controls.VitNX_Button(); 40 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 41 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 42 | this.SuspendLayout(); 43 | // 44 | // label3 45 | // 46 | this.label3.Anchor = System.Windows.Forms.AnchorStyles.None; 47 | this.label3.FlatStyle = System.Windows.Forms.FlatStyle.Popup; 48 | this.label3.Font = new System.Drawing.Font("Gadugi", 26.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 49 | this.label3.ForeColor = System.Drawing.Color.Gainsboro; 50 | this.label3.Location = new System.Drawing.Point(4, 114); 51 | this.label3.Name = "label3"; 52 | this.label3.Size = new System.Drawing.Size(472, 47); 53 | this.label3.TabIndex = 89902; 54 | this.label3.Text = "Jetpack GUI"; 55 | this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; 56 | // 57 | // label1 58 | // 59 | this.label1.Anchor = System.Windows.Forms.AnchorStyles.None; 60 | this.label1.FlatStyle = System.Windows.Forms.FlatStyle.Popup; 61 | this.label1.Font = new System.Drawing.Font("Gadugi", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 62 | this.label1.ForeColor = System.Drawing.Color.Gainsboro; 63 | this.label1.Location = new System.Drawing.Point(5, 157); 64 | this.label1.Name = "label1"; 65 | this.label1.Size = new System.Drawing.Size(471, 47); 66 | this.label1.TabIndex = 89902; 67 | this.label1.Text = "Official GUI for Jetpack Downgrader"; 68 | this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; 69 | // 70 | // darkButton1 71 | // 72 | this.darkButton1.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); 73 | this.darkButton1.Location = new System.Drawing.Point(26, 344); 74 | this.darkButton1.Name = "darkButton1"; 75 | this.darkButton1.Padding = new System.Windows.Forms.Padding(5); 76 | this.darkButton1.Size = new System.Drawing.Size(100, 34); 77 | this.darkButton1.TabIndex = 89903; 78 | this.darkButton1.TabStop = false; 79 | this.darkButton1.Text = "Donate"; 80 | this.darkButton1.Click += new System.EventHandler(this.darkButton1_Click_1); 81 | // 82 | // darkTextBox1 83 | // 84 | this.darkTextBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(69)))), ((int)(((byte)(73)))), ((int)(((byte)(74))))); 85 | this.darkTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 86 | this.darkTextBox1.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); 87 | this.darkTextBox1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(220)))), ((int)(((byte)(220))))); 88 | this.darkTextBox1.Location = new System.Drawing.Point(26, 209); 89 | this.darkTextBox1.Multiline = true; 90 | this.darkTextBox1.Name = "darkTextBox1"; 91 | this.darkTextBox1.ReadOnly = true; 92 | this.darkTextBox1.Size = new System.Drawing.Size(419, 121); 93 | this.darkTextBox1.TabIndex = 89904; 94 | this.darkTextBox1.TabStop = false; 95 | // 96 | // darkButton2 97 | // 98 | this.darkButton2.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); 99 | this.darkButton2.Location = new System.Drawing.Point(132, 344); 100 | this.darkButton2.Name = "darkButton2"; 101 | this.darkButton2.Padding = new System.Windows.Forms.Padding(5); 102 | this.darkButton2.Size = new System.Drawing.Size(116, 34); 103 | this.darkButton2.TabIndex = 89903; 104 | this.darkButton2.TabStop = false; 105 | this.darkButton2.Text = "Issues"; 106 | this.darkButton2.Click += new System.EventHandler(this.darkButton1_Click); 107 | // 108 | // darkButton3 109 | // 110 | this.darkButton3.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); 111 | this.darkButton3.Location = new System.Drawing.Point(254, 344); 112 | this.darkButton3.Name = "darkButton3"; 113 | this.darkButton3.Padding = new System.Windows.Forms.Padding(5); 114 | this.darkButton3.Size = new System.Drawing.Size(95, 34); 115 | this.darkButton3.TabIndex = 89903; 116 | this.darkButton3.TabStop = false; 117 | this.darkButton3.Text = "GitHub"; 118 | this.darkButton3.Click += new System.EventHandler(this.darkButton3_Click); 119 | // 120 | // darkButton4 121 | // 122 | this.darkButton4.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); 123 | this.darkButton4.Location = new System.Drawing.Point(355, 344); 124 | this.darkButton4.Name = "darkButton4"; 125 | this.darkButton4.Padding = new System.Windows.Forms.Padding(5); 126 | this.darkButton4.Size = new System.Drawing.Size(90, 34); 127 | this.darkButton4.TabIndex = 89903; 128 | this.darkButton4.TabStop = false; 129 | this.darkButton4.Text = "Topic"; 130 | this.darkButton4.Click += new System.EventHandler(this.darkButton4_Click); 131 | // 132 | // pictureBox1 133 | // 134 | this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); 135 | this.pictureBox1.Location = new System.Drawing.Point(179, 12); 136 | this.pictureBox1.Name = "pictureBox1"; 137 | this.pictureBox1.Size = new System.Drawing.Size(110, 110); 138 | this.pictureBox1.TabIndex = 0; 139 | this.pictureBox1.TabStop = false; 140 | this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click); 141 | // 142 | // About 143 | // 144 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); 145 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 146 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(63)))), ((int)(((byte)(65))))); 147 | this.ClientSize = new System.Drawing.Size(469, 390); 148 | this.Controls.Add(this.darkTextBox1); 149 | this.Controls.Add(this.darkButton2); 150 | this.Controls.Add(this.darkButton4); 151 | this.Controls.Add(this.darkButton3); 152 | this.Controls.Add(this.darkButton1); 153 | this.Controls.Add(this.label3); 154 | this.Controls.Add(this.pictureBox1); 155 | this.Controls.Add(this.label1); 156 | this.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); 157 | this.ForeColor = System.Drawing.Color.Gainsboro; 158 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 159 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 160 | this.MaximizeBox = false; 161 | this.MinimizeBox = false; 162 | this.Name = "About"; 163 | this.ShowIcon = false; 164 | this.ShowInTaskbar = false; 165 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 166 | this.Text = "About"; 167 | this.TopMost = true; 168 | this.Load += new System.EventHandler(this.MyLang_Load); 169 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 170 | this.ResumeLayout(false); 171 | this.PerformLayout(); 172 | 173 | } 174 | 175 | #endregion 176 | 177 | private System.Windows.Forms.PictureBox pictureBox1; 178 | private System.Windows.Forms.Label label3; 179 | private System.Windows.Forms.Label label1; 180 | private VitNX.Controls.VitNX_Button darkButton1; 181 | private VitNX.Controls.VitNX_TextBox darkTextBox1; 182 | private VitNX.Controls.VitNX_Button darkButton2; 183 | private VitNX.Controls.VitNX_Button darkButton3; 184 | private VitNX.Controls.VitNX_Button darkButton4; 185 | } 186 | } -------------------------------------------------------------------------------- /data/docs/Language Code Table.html: -------------------------------------------------------------------------------- 1 | 2 | Language Code Table 3 | 4 | 5 |

ISO Language Code Table

6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 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 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 |
CodeName
afAfrikaans
af-ZAAfrikaans (South Africa)
arArabic
ar-AEArabic (U.A.E.)
ar-BHArabic (Bahrain)
ar-DZArabic (Algeria)
ar-EGArabic (Egypt)
ar-IQArabic (Iraq)
ar-JOArabic (Jordan)
ar-KWArabic (Kuwait)
ar-LBArabic (Lebanon)
ar-LYArabic (Libya)
ar-MAArabic (Morocco)
ar-OMArabic (Oman)
ar-QAArabic (Qatar)
ar-SAArabic (Saudi Arabia)
ar-SYArabic (Syria)
ar-TNArabic (Tunisia)
ar-YEArabic (Yemen)
azAzeri (Latin)
az-AZAzeri (Latin) (Azerbaijan)
az-AZAzeri (Cyrillic) (Azerbaijan)
beBelarusian
be-BYBelarusian (Belarus)
bgBulgarian
bg-BGBulgarian (Bulgaria)
bs-BABosnian (Bosnia and Herzegovina)
caCatalan
ca-ESCatalan (Spain)
csCzech
cs-CZCzech (Czech Republic)
cyWelsh
cy-GBWelsh (United Kingdom)
daDanish
da-DKDanish (Denmark)
deGerman
de-ATGerman (Austria)
de-CHGerman (Switzerland)
de-DEGerman (Germany)
de-LIGerman (Liechtenstein)
de-LUGerman (Luxembourg)
dvDivehi
dv-MVDivehi (Maldives)
elGreek
el-GRGreek (Greece)
enEnglish
en-AUEnglish (Australia)
en-BZEnglish (Belize)
en-CAEnglish (Canada)
en-CBEnglish (Caribbean)
en-GBEnglish (United Kingdom)
en-IEEnglish (Ireland)
en-JMEnglish (Jamaica)
en-NZEnglish (New Zealand)
en-PHEnglish (Republic of the Philippines)
en-TTEnglish (Trinidad and Tobago)
en-USEnglish (United States)
en-ZAEnglish (South Africa)
en-ZWEnglish (Zimbabwe)
eoEsperanto
esSpanish
es-ARSpanish (Argentina)
es-BOSpanish (Bolivia)
es-CLSpanish (Chile)
es-COSpanish (Colombia)
es-CRSpanish (Costa Rica)
es-DOSpanish (Dominican Republic)
es-ECSpanish (Ecuador)
es-ESSpanish (Castilian)
es-ESSpanish (Spain)
es-GTSpanish (Guatemala)
es-HNSpanish (Honduras)
es-MXSpanish (Mexico)
es-NISpanish (Nicaragua)
es-PASpanish (Panama)
es-PESpanish (Peru)
es-PRSpanish (Puerto Rico)
es-PYSpanish (Paraguay)
es-SVSpanish (El Salvador)
es-UYSpanish (Uruguay)
es-VESpanish (Venezuela)
etEstonian
et-EEEstonian (Estonia)
euBasque
eu-ESBasque (Spain)
faFarsi
fa-IRFarsi (Iran)
fiFinnish
fi-FIFinnish (Finland)
foFaroese
fo-FOFaroese (Faroe Islands)
frFrench
fr-BEFrench (Belgium)
fr-CAFrench (Canada)
fr-CHFrench (Switzerland)
fr-FRFrench (France)
fr-LUFrench (Luxembourg)
fr-MCFrench (Principality of Monaco)
glGalician
gl-ESGalician (Spain)
guGujarati
gu-INGujarati (India)
heHebrew
he-ILHebrew (Israel)
hiHindi
hi-INHindi (India)
hrCroatian
hr-BACroatian (Bosnia and Herzegovina)
hr-HRCroatian (Croatia)
huHungarian
hu-HUHungarian (Hungary)
hyArmenian
hy-AMArmenian (Armenia)
idIndonesian
id-IDIndonesian (Indonesia)
isIcelandic
is-ISIcelandic (Iceland)
itItalian
it-CHItalian (Switzerland)
it-ITItalian (Italy)
jaJapanese
ja-JPJapanese (Japan)
kaGeorgian
ka-GEGeorgian (Georgia)
kkKazakh
kk-KZKazakh (Kazakhstan)
knKannada
kn-INKannada (India)
koKorean
ko-KRKorean (Korea)
kokKonkani
kok-INKonkani (India)
kyKyrgyz
ky-KGKyrgyz (Kyrgyzstan)
ltLithuanian
lt-LTLithuanian (Lithuania)
lvLatvian
lv-LVLatvian (Latvia)
miMaori
mi-NZMaori (New Zealand)
mkFYRO Macedonian
mk-MKFYRO Macedonian (Former Yugoslav Republic of Macedonia)
mnMongolian
mn-MNMongolian (Mongolia)
mrMarathi
mr-INMarathi (India)
msMalay
ms-BNMalay (Brunei Darussalam)
ms-MYMalay (Malaysia)
mtMaltese
mt-MTMaltese (Malta)
nbNorwegian (Bokm?l)
nb-NONorwegian (Bokm?l) (Norway)
nlDutch
nl-BEDutch (Belgium)
nl-NLDutch (Netherlands)
nn-NONorwegian (Nynorsk) (Norway)
nsNorthern Sotho
ns-ZANorthern Sotho (South Africa)
paPunjabi
pa-INPunjabi (India)
plPolish
pl-PLPolish (Poland)
psPashto
ps-ARPashto (Afghanistan)
ptPortuguese
pt-BRPortuguese (Brazil)
pt-PTPortuguese (Portugal)
quQuechua
qu-BOQuechua (Bolivia)
qu-ECQuechua (Ecuador)
qu-PEQuechua (Peru)
roRomanian
ro-RORomanian (Romania)
ruRussian
ru-RURussian (Russia)
saSanskrit
sa-INSanskrit (India)
seSami (Northern)
se-FISami (Northern) (Finland)
se-FISami (Skolt) (Finland)
se-FISami (Inari) (Finland)
se-NOSami (Northern) (Norway)
se-NOSami (Lule) (Norway)
se-NOSami (Southern) (Norway)
se-SESami (Northern) (Sweden)
se-SESami (Lule) (Sweden)
se-SESami (Southern) (Sweden)
skSlovak
sk-SKSlovak (Slovakia)
slSlovenian
sl-SISlovenian (Slovenia)
sqAlbanian
sq-ALAlbanian (Albania)
sr-BASerbian (Latin) (Bosnia and Herzegovina)
sr-BASerbian (Cyrillic) (Bosnia and Herzegovina)
sr-SPSerbian (Latin) (Serbia and Montenegro)
sr-SPSerbian (Cyrillic) (Serbia and Montenegro)
svSwedish
sv-FISwedish (Finland)
sv-SESwedish (Sweden)
swSwahili
sw-KESwahili (Kenya)
syrSyriac
syr-SYSyriac (Syria)
taTamil
ta-INTamil (India)
teTelugu
te-INTelugu (India)
thThai
th-THThai (Thailand)
tlTagalog
tl-PHTagalog (Philippines)
tnTswana
tn-ZATswana (South Africa)
trTurkish
tr-TRTurkish (Turkey)
ttTatar
tt-RUTatar (Russia)
tsTsonga
ukUkrainian
uk-UAUkrainian (Ukraine)
urUrdu
ur-PKUrdu (Islamic Republic of Pakistan)
uzUzbek (Latin)
uz-UZUzbek (Latin) (Uzbekistan)
uz-UZUzbek (Cyrillic) (Uzbekistan)
viVietnamese
vi-VNVietnamese (Viet Nam)
xhXhosa
xh-ZAXhosa (South Africa)
zhChinese
zh-CNChinese (S)
zh-HKChinese (Hong Kong)
zh-MOChinese (Macau)
zh-SGChinese (Singapore)
zh-TWChinese (T)
zuZulu
zu-ZAZulu (South Africa)
248 |
249 | -------------------------------------------------------------------------------- /data/docs/Changelog.md: -------------------------------------------------------------------------------- 1 | # Changelog of Jetpack Downgrader 2 | 3 | ## [Release] Jetpack Downgrader Version 2.3.0.1 4 | 5 | **This patch fixes the loading of the list of modifications. The error during loading is associated with an increase in the amount of modification information. In this patch, number of possible modifications has been increased from 10 to 30. Appearance has also been improved, in some moments, and other minor edits have been made** 6 | 7 | ## [Release] Jetpack Downgrader Version 2.3 8 | 9 | ### In the next stable version, the downgrader will be moved to the GUI, and localization support for downgrader strings will also be added! 10 | 11 | ### 👉 GUI Version 1.3.1 12 | 13 | - Most of the functions that I often use in my projects have moved to my [VitNX](https://github.com/Zalexanninev15/VitNX) library. This change made it possible to remove unnecessary code and optimize the existing one. This library also replaced the DarkUI library, because it has the necessary controls for WinForms 14 | - Added Screenshot Viewer (more convenient) for modifications 15 | - Added checking for updates (when launching the application) 16 | - Added a new type of dialog with a question icon for questions 17 | - Added a check for Windows < 8.1, now the checkbox with DirectPlay will not be displayed for Windows below this one. Now this possibility is available without downgrade (optional) 18 | - Added a [full list of versions changes](https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/unstable/data/docs/Changelog.md) (in repository) 19 | - Localizations files have been seriously improved 20 | - For versions != 1.0 the "Forced" checkbox is no longer displayed. If the version == 1.0, but does not have the checkbox set, then the downgrade will not be performed (the button will disappear) 21 | - Localizations improvements 22 | - Extra code was removed 23 | - Improved display of the language selection panel 24 | - Format of file for storing localizations has been changed from ZCF to XML 25 | - Minor edits 26 | 27 | ### 👉 Downgrader Version 1.16-1 28 | 29 | - Most of the functions that I often use in my projects have moved to my [VitNX](https://github.com/Zalexanninev15/VitNX) library. This change made it possible to remove unnecessary code and optimize the existing one 30 | - Changed the icon so that it is not confused with the icon for the GUI 31 | - Minor edits 32 | 33 | ## [Release] Jetpack Downgrader Version 2.2 34 | 35 | ### Meet version 2.2! [A lot of changes have been made](https://github.com/Zalexanninev15/Jetpack-Downgrader/commit/5a54deb5efc9bd33889acb01e9246f5838c907be), so the update is necessary for everyone! I recommend a clean unpacking, without updating the previous version 36 | 37 | ### 👉 GUI Version 1.2.3.3 38 | 39 | - Added the About window 40 | - The system of settings and localizations has been rewritten. Files and code have become much easier and more convenient to edit and read 41 | - A huge number of edits have been made 42 | - The GitHub icon has been replaced with a help icon (analogous to pressing the **F1** key) 43 | - Improved optimization for x64 44 | - Updated localizations and: 45 | ~ Added more translatable strings 46 | ~ Added a translation display from the selected localization (before its application) for the localization selection window when the application is first launched 47 | ~ Removed outdated dependencies 48 | - Fixed the problem with false antivirus results (possibly temporarily) 49 | - Fixed a bug when rolling back the game version 1.0, if the backup file is equal in hash to the used file version 1.0 50 | - Fixed a bug displaying the window size with the choice of language when the application is first launched 51 | - Fixed a bug with the language selection panel when downloading files or after the Downgrader is finished 52 | - Removed unnecessary and outdated code 53 | 54 | ### 👉 Downgrader Version 1.15.0.2 55 | 56 | - The system of settings has been rewritten. Files and code have become much easier and more convenient to edit and read 57 | - Improved user interaction 58 | - Improved startup optimization 59 | - Minor improvements 60 | - Fixed the problem with false antivirus results 61 | - Removed unnecessary and outdated code + removed outdated settings (if you are going to use the Downgrader separately from the GUI, the [documentation for deleted functions](https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/unstable/data/docs/DowngraderSettingsOld.md) is left unchanged) 62 | 63 | ## [Release] Jetpack Downgrader Version 2.1 64 | 65 | - Added a button to close the application after the end of the downgrade 66 | - Algorithm for storing settings has been changed. Now the folder is not clogged **C:\Users%username%\AppData\Local**. Check the path **C:\Users%username%\AppData\Local\Zalexanninev15** and delete this folder 67 | - Functionality of showing progress on the taskbar in Windows has been completely rewritten. Now additional libraries are not required (which has slightly reduced the size of the overall project release), the native WinAPI is used instead 68 | - Updated localizations + fixed a bug with the downgrade start button in the Russian localization 69 | - Improving interaction with GUI 70 | - General improvements and edits 71 | 72 | ## [Release] Jetpack Downgrader Version 2.0 73 | 74 | ### As promised, here is a new version, this time with a graphical interface and a lot of new features. It took a really long time (2.5 months), but now I'm ready to present you a new version! 🎉 🥂 🥳 | [Official post in VK (RU)](https://vk.com/wall-119683810_15357) 75 | 76 | - Added a full-featured graphical interface-launcher with a huge number of settings for the downgrader and the game 77 | - The size of the patches has decreased for the second time! From 884 MB to 517 MB. For the first time, something like this happened in [version 1.10](https://github.com/Zalexanninev15/Jetpack-Downgrader/releases/tag/1.10-PublicBeta), in which the patch size changed from 1.75 GB to 884 MB 78 | - The overall process of downgrading the game version has been significantly improved, everything has become faster and more stable. Many actions have been converted to simple ones or removed altogether 79 | - Changed the format for backups of original files (**bak** to **jpb**) 80 | - Added coloring of all downrader messages in different colors to make it easier to highlight the actions performed/performed, as well as errors and just text 81 | - Added the output of a new path to the game after the end of the work 82 | - If file with settings (jpd.ini) is not found, it will be created automatically with the default values 83 | - Renamed 1 setting. Value of 1 setting was changed, which allowed us to fix various kinds of bugs 84 | - Work has been done to improve the code and optimize it for 64-bit systems 85 | - The version calculation system has been changed, which now does not rely on the version of the downgrader. Now each component (GUI and Downgrader) has its own version, and the general version of the components assembly is recorded in the release based on the list of changes 86 | - Folder with DirectX is not deleted, which allows you not to download the installer again when you re-use the downgrader 87 | - Significantly improved the registration of the game in the system 88 | - A huge number of changes and improvements for both users and code and performance 89 | - Fixed all bugs and errors 90 | 91 | ## [Unstable Release] Jetpack Downgrader Version 2.0-rc2 92 | 93 | ### Improved version of [Release Candidate 1](https://github.com/Zalexanninev15/Jetpack-Downgrader/releases/tag/2.0-rc). Fixed a huge number of errors, bugs and made general improvements to the interface and code. I also added support for modifications in the form of EXE installers. The changes affect many aspects, so I recommend using the new version from scratch. Patches must be downloaded in the GUI itself, there are no separate archives with patches! 94 | 95 | ## [Unstable Release] Jetpack Downgrader Version 2.0-rc 96 | 97 | ### As promised, here is a new version, this time with a graphical interface. It took a really long time (2 months), but now I'm ready to present you a new version! 🎉🥂🥳 98 | 99 | ### [Guide](https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/unstable/README.md) for the Release Candidate version 100 | 101 | ### 👉 Main changes 102 | 103 | - Added a full-featured graphical interface-launcher with a huge number of settings for the downgrader and the game 104 | - The size of the patches has decreased for the second time! From 884 MB to 517 MB. For the first time, something like this happened in [version 1.10](https://github.com/Zalexanninev15/Jetpack-Downgrader/releases/tag/1.10-PublicBeta), in which the patch size changed from 1.75 GB to 884 MB 105 | - The overall process of downgrading the game version has been significantly improved, everything has become faster and more stable. Many actions have been converted to simple ones or removed altogether 106 | - Changed the format for backups of original files (**bak** to **jpb**) 107 | - Added coloring of all downrader messages in different colors to make it easier to highlight the actions performed/performed, as well as errors and just text 108 | - If file with settings (jpd.ini) is not found, it will be created automatically with the default values 109 | - Renamed 1 setting. Value of 1 setting was changed, which allowed us to fix various kinds of bugs 110 | - Work has been done to improve the code and optimize it for 64-bit systems 111 | - The version calculation system has been changed, which now does not rely on the version of the downgrader. Now each component (GUI and Downgrader) has its own version, and the general version of the components assembly is recorded in the release based on the list of changes 112 | 113 | ### 👉 Other changes 114 | 115 | - Added the output of a new path to the game after the end of the work 116 | - Folder with DirectX is not deleted, which allows you not to download the installer again when you re-use the downgrader 117 | - Significantly improved the registration of the game in the system 118 | - A huge number of changes and improvements for both users and code and performance 119 | - Fixed bugs 120 | - Changed the project name in code 121 | 122 | ### Do not try to install SA-MP from the section with modifications, now we are working on a fix! 123 | 124 | ## [Unstable Release] Jetpack Downgrader Version 1.12.4 125 | 126 | - Added GUI (Final Alpha version) 127 | - 1 change in the patch file 128 | - Changed the download link to the DirectX installer 129 | - Changed the project name in code 130 | 131 | ## [Unstable Release] Jetpack Downgrader Version 1.12.2 [DEV 3.2] 132 | 133 | - Added text color coloring in the app console depending on the current action 134 | - Added outputs of the path to the game folder 135 | - If file with settings (**jpd.ini**) is not found, it will be created automatically with the default values 136 | - Folder with DirectX is not deleted, which allows you not to download the installer again when you re-use the downgrader 137 | - Code improvements 138 | - Fixed text color detection when launching the app (especially noticeable on a light background) 139 | - Fixed some other bugs 140 | 141 | ## [Release] Jetpack Downgrader Version 1.11.6 142 | 143 | - Downgrader has become more intelligent, now the application does not do what is required of it 144 | - Added 2 new settings, 1 setting is renamed 145 | - Added a reference to the license and link to the repository 146 | - Updated the game folder selection dialog 147 | - Improved removal of game settings 148 | - Optimization and performance improvements 149 | - Minor improvements for other developers (if **Component=true** and **SelectFolder=false**) 150 | - Other improvements 151 | 152 | ## Jetpack Downgrader Version 1.11.6 [DEV 2 & 2.1] 153 | 154 | - Added text color coloring in the app console depending on the current action [BETA] 155 | - Added outputs of the path to the game folder 156 | - If file with settings (jpd.ini) is not found, it will be created automatically with the default values 157 | - Folder with DirectX is not deleted, which allows you not to download the installer again when you re-use the downgrader 158 | - Code improvements 159 | - Fixed text color detection when launching the app (especially noticeable on a light background) 160 | - Fixed some other bugs 161 | 162 | ## Jetpack Downgrader Version 1.11.6 [DEV 1] 163 | 164 | - If file with settings (jpd.ini) is not found, it will be created automatically with the default values 165 | - Folder with DirectX is not deleted, which allows you not to download the installer again when you re-use the downgrader 166 | - Code improvements made 167 | 168 | ## [Unstable Release] Jetpack Downgrader Version 1.11-Dev 1.5 169 | 170 | - Added a reference to the license 171 | - Updated the game folder selection dialog (tested on Windows 10) 172 | - Improved removal of game settings 173 | - Improved code optimization and overall performance 174 | - Minor improvements for other developers (if **Component=true** and **SelectFolder=false**) 175 | - Other improvements 176 | 177 | ## Jetpack Downgrader Version 1.11-Dev 1.4 178 | 179 | - Added 1 new setting (for Windows 10) 180 | - Added a reference to the license 181 | - Added link to the repository 182 | - Updated the game folder selection dialog (tested on Windows 10) 183 | - Improved removal of game settings 184 | - Improved code optimization and overall performance 185 | - Minor improvements for other developers (if Component=true and SelectFolder=false) 186 | - Other improvements 187 | 188 | ## [Unstable Release] Jetpack Downgrader Version 1.11-Dev 1.3 189 | 190 | - Added a reference to the license 191 | - Updated the game folder selection dialog (tested on Windows 10) 192 | - Improved removal of game settings 193 | - Improved code optimization and overall performance 194 | - Minor improvements for other developers (if **Component=true** and **SelectFolder=false**) 195 | - Other improvements 196 | 197 | ## Jetpack Downgrader Version 1.11-Dev 1.2 198 | 199 | - Added a reference to the license 200 | - Improved removal of game settings 201 | - Minor improvements for other developers (if Component=true and SelectFolder=false) 202 | - Other improvements 203 | 204 | ## Jetpack Downgrader Version 1.11-Dev 1.1 205 | 206 | - Added a reference to the license 207 | - Minor improvements for other developers (if Component=true and SelectFolder=false) 208 | - Other improvements 209 | 210 | ## Jetpack Downgrader Version 1.11-Dev 1.0 211 | 212 | - Minor improvements for other developers (if Component=true and SelectFolder=false) 213 | 214 | ## [Release] Jetpack Downgrader Version 1.10.1-Beta 215 | 216 | - Now you don't need to download archive with patches, you can only download the updated application and the main files 217 | - Improved the definition of game version 1.0 218 | - Minor edits 219 | - Removed unnecessary dependencies 220 | - Removed unused code 221 | 222 | ## [Release] Jetpack Downgrader Version 1.10-Beta 223 | 224 | **This version is based on [this](https://github.com/Zalexanninev15/Jetpack-Downgrader/releases/tag/1.10-PublicBeta) version, but does not have a Russian-language text. Some edits were also made.** 225 | 226 | ## [Release] Jetpack Downgrader Version 1.10-PublicBeta 227 | 228 | What changed after the first public beta https://vk.com/wall-119683810_14645 ([from 31.01.2021](https://github.com/Zalexanninev15/Jetpack-Downgrader/releases/tag/1.0-PublicBeta)): 229 | 230 | - The project changed its name from **SADRW2** (**SA Downgrader RW2**) to **Jetpack Downgrader** 231 | - Added patch support, which reduced the size of additional files from 1.75 GB to 884 MB 232 | - Settings: 233 | a) Added 3 new ones 234 | b) Removed 1 old one 235 | c) Slightly changed the functions that are performed by some settings 236 | - Added more information about the project 237 | - Added many new checks, which will definitely increase the stability of the application 238 | - Greatly improved the user experience of the description in the application log 239 | - Improved the algorithm for determining the game version 240 | - Significantly improved description of settings 241 | - Improved optimization 242 | - Improved support for sandboxes and virtual machines 243 | - Other changes and improvements 244 | - Fixed a huge number of bugs and bugs, but they may still be present 245 | 246 | ## [Unstable Release] Jetpack Downgrader Version 1.9-Beta 247 | 248 | - Added 1 new setting 249 | - Added a check for the presence of **patcher.exe** 250 | - Significantly improved description of settings 251 | - Significantly improved user experience 252 | - Slightly improved optimization 253 | - Fixed a lot of bugs 254 | 255 | ## Jetpack Downgrader Version 1.9 [DEV 1] 256 | 257 | - Added 1 new setting, removed (hidden) 1 old setting 258 | - Added new descriptions for different features 259 | - Improve communication 260 | - Improved support for version 1.0 (from version 1.8.1 [DEV) 261 | - Fixed bugs (from version 1.8.1 [DEV) 262 | 263 | ## Jetpack Downgrader Version 1.8.1 [DEV] 264 | 265 | - Improved support for version 1.0 266 | - Fixed bugs 267 | 268 | ## [Unstable Release] Jetpack Downgrader Version 1.8-Beta 269 | 270 | - Added 2 new settings, returned 1 old setting (was removed in version 1.5-Beta) 271 | - Added support for Windows styles 272 | - Significant improvements to the downgrader, which should now do its job much faster 273 | - Significantly improved user experience 274 | - Improved description of some things 275 | - Improved optimization 276 | - Removed a lot of unnecessary code 277 | - Removed the mention to the "orange subject" 278 | 279 | ## [Unstable Release] Jetpack Downgrader Version 1.5-Beta 280 | 281 | - The project's name changed to **Jetpack Downgrader** 282 | - Added full support for delta patches to apply them to different versions of the game 283 | - Code optimizations 284 | - Minor improvements to the console interface 285 | - End of file support **path.txt** 286 | - Changed the names of some settings, removed 1 setting 287 | - Fixed bugs 288 | - Other changes and improvements 289 | 290 | ## SADRW2 Version 1.5-Dev-2 291 | 292 | - Significant improvements to the downgrader, the method of operation is fully functional, but further integration of the method into the downgrader is still on pause 293 | - Full renaming of the downgrader 294 | - End of file support path.txt 295 | - Minor edits 296 | 297 | ## SADRW2 Version 1.5-Dev 1 298 | 299 | - Downgrader [CF] updated to version 2.0-Alpha (no patches, but work is underway) 300 | - Minor edits 301 | 302 | ## SADRW2 Version 1.4-Dev 303 | 304 | - The project's name changed to Jetpack Downgrader 305 | - Work on the delta patches continues, I added the SHA1 hash for all files and rebuilt the cache (not available, until the Beta version is released) 306 | - Other changes 307 | 308 | ## SADRW2 1.3.0.1-Dev 309 | 310 | - Downgrade updated to version 1.3.0.1-Dev 311 | - Work on the graphical interface has begun! 312 | 313 | ## [Release] SADRW2 Version 1.0-PublicBeta 314 | 315 | ### This version is based on version 1.3-Beta, but has several changes: 316 | 317 | - Changed the way to submit information about the app 318 | - Fixed code interaction issues 319 | 320 | ### Post: [Больше месяца назад я написал пост о том, что.. | Vadim M [Официальный паблик] | ВКонтакте](https://vk.com/wall-119683810_14645) 321 | 322 | **P.S. All information in the archive is prepared for Russian-speaking users [[Russian FAQ](https://telegra.ph/SA-Downgrader-RW2-01-31)]. I attached a cache to the release, just in case** 323 | 324 | ## [Unstable Release] SADRW2 Version 1.3-Beta 325 | 326 | - Added 2 new settings 327 | - Improved performance and optimization 328 | - Reduced the number of files in the cache 329 | - RGL → Rockstar Games Launcher 330 | - Minor improvements 331 | 332 | ## [Unstable Release] SADRW2 Version 1.2-Beta 333 | 334 | - Added new setting 335 | - Changed the name of the application's EXE file 336 | - Significantly improved and fixed the work with the Steam version of the game 337 | - Improved cache handling, there have been some changes 338 | - Improved messages 339 | - Removed unnecessary message 340 | - I continue to work with xdelta patches 341 | 342 | ## SADRW2 Version 1.2-Dev 2 343 | 344 | - Added a check to avoid adding unnecessary branches to the Windows registry 345 | - Improved messages 346 | - Fixed working with the Steam version of the game 347 | - Removed unnecessary message 348 | 349 | ## SADRW2 Version 1.2-Dev 1 350 | 351 | - Added new setting 352 | - Minor edits to messages 353 | - I continue to work with xdelta patches 354 | 355 | ## SADRW2 Version 1.2-Dev 0.2 356 | 357 | - Changed messages when creating backups of files and EXE files 358 | - Improved cache handling, now using 1 less file 359 | - Standard files have been added to the repository: config.in and path.txt 360 | - Removed 2 files from the repository 361 | 362 | ## SADRW2 Version 1.2-Dev 0.1 363 | 364 | - Minor edits to error messages 365 | - Improved documentation (for version 1.1-Beta) 366 | 367 | ## [Unstable Release] SADRW2 Version 1.1-Beta 368 | 369 | - Added 3 new settings 370 | - Added support for the game version 1.01 (so for yourself, but maybe someone will need it) 371 | - Added additional file copying to ensure compatibility with Steam and launch using the "old things" 372 | - Added a lot more information about different things 373 | - Changed the logic for working with the Steam version of the game 374 | - Changed the logic of some components 375 | - Now the app always has its own version 376 | - Cache updated 377 | - Improved the work of creating backups 378 | - Improved backup creation for EXE files 379 | - Improved code performance 380 | - Improved work with UAC 381 | - Improved error messages 382 | - Fixed possible errors 383 | 384 | ## [Unstable Release] SADRW2 Version 1.0-Beta 385 | 386 | - Added downgrader (completely redesigned concept, temporarily) 387 | - Added MD5 scanning for downgraded files 388 | - Added 3 more settings for special enthusiasts 389 | - Added a description of the app settings 390 | - Rewritten MD5 file scanning 391 | - Improved display of errors 392 | - Fixed errors descriptions 393 | - Fixed caches 394 | - Other changes 395 | 396 | ## SADRW2 Version 0.2 [DEV_Update_1] 397 | 398 | - I started developing a downgrader, the basis 399 | - Improved the backup function 400 | 401 | ## SADRW2 Version 0.2 [DEV] 402 | 403 | - Added basic backup features 404 | - Added new messages 405 | - Added the first sketches for the patch file (so far, only SDK files) 406 | 407 | ## SADRW2 Version 0.1.4.2 408 | 409 | - Improved the operation of the application as a component, wrote a new instruction for getting the path to the game files 410 | - Minor changes 411 | 412 | ## SADRW2 Version 0.1.4.1 413 | 414 | - Added an icon for the app 415 | - Changed the title text of the console 416 | 417 | ## SADRW2 Version 0.1.4 418 | 419 | - Added checks for game files from version 1.0 420 | - Added information about the project 421 | - Added a new parameter "Install Crack" 422 | - General code optimization was performed 423 | - Removed code that will no longer be used, although it was planned otherwise 424 | - Visual Studio is now used for development, but the files remain compatible with SharpDevelop 425 | 426 | ## Preparing to SADRW2 Version 0.1.4 427 | 428 | - Added the most basic checks (MD5) 429 | - Removed MD5 for crack version 2.0 430 | 431 | ## SADRW2 Version 0.1.3.6 432 | 433 | - Added a co-author 434 | - Improved support for game versions 435 | 436 | ## SADRW2 Version 0.1.3.5 437 | 438 | - Added a check for the game version 1.0 439 | 440 | ## SADRW2 Version 0.1.3.4 441 | 442 | - Added a check for the presence of the game directory 443 | - Improved the display of information in the log 444 | 445 | ## SADRW2 Version 0.1.3.3 446 | 447 | - Added support for other versions of the game version 2.0 448 | 449 | ## SADRW2 Version 0.1.3.2 450 | 451 | - Fixed working with game version 2.0 452 | 453 | ## SADRW2 Version 0.1.3.1 454 | 455 | - Changed the way the log is displayed 456 | - Removed unnecessary settings 457 | 458 | ## SADRW2 Version 0.1.3 459 | 460 | - Added checker for game files [BETA] 461 | 462 | ## SADRW2 Version 0.1 Dev-2 463 | 464 | - Fixed version detection errors 465 | - Added an example of interaction with the utility 466 | - Compiled version added 467 | 468 | ## SADRW2 Version 0.1 Dev-1 469 | 470 | - The first version in the repository. In theory, it can only determine the version of the game. 471 | -------------------------------------------------------------------------------- /sources/GUI/MainForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using System.Net; 6 | using CG.Web.MegaApiClient; 7 | using System.Text; 8 | using Microsoft.Win32; 9 | using System.Net.NetworkInformation; 10 | using System.Xml.Serialization; 11 | using VitNX.Forms; 12 | using VitNX.Win32; 13 | using VitNX.Functions; 14 | 15 | namespace JetpackGUI 16 | { 17 | public partial class MainForm : Form 18 | { 19 | protected override void OnHandleCreated(EventArgs e) { if (NativeFunctions.DwmSetWindowAttribute(Handle, 19, new[] { 1 }, 4) != 0) { NativeFunctions.DwmSetWindowAttribute(Handle, 20, new[] { 1 }, 4); } } 20 | 21 | Props config = new Props(); 22 | GUI language = new GUI(); 23 | XmlSerializer lzol = new XmlSerializer(typeof(LanguagesString)); 24 | string[] mse = new string[30]; 25 | string[] langs = new string[10]; 26 | bool tabFix = false; 27 | bool lpFix = false; 28 | bool IsBak = false; 29 | bool sp = true; 30 | bool IsOnePointNull = false; 31 | bool NotDone = true; 32 | bool IsDD = false; 33 | bool db = false; 34 | string cache = @Application.StartupPath + @"\files\mods_cache"; 35 | string zip_link = "application/zip"; 36 | string[] photos_links = new string[3]; 37 | string site_link = ""; 38 | string[] fl = new string[17]; 39 | bool x64 = Environment.Is64BitOperatingSystem; 40 | string langcode = "EN"; 41 | 42 | void MainForm_Load(object sender, EventArgs e) 43 | { 44 | ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; 45 | if (!Directory.Exists(@Application.StartupPath + @"\files\patches")) { darkButton4.Visible = true; button1.Visible = false; } 46 | if (!Directory.Exists(cache)) { Directory.CreateDirectory(cache); } 47 | else { Directory.Delete(cache, true); Directory.CreateDirectory(cache); } 48 | try 49 | { 50 | string[] mf = Directory.GetFiles(@Application.StartupPath + @"\files", "*.zip"); 51 | for (int i = 0; i < mf.Length; i++) { File.Delete(mf[i]); } 52 | } 53 | catch { } 54 | fl[0] = @"\gta-sa.exe"; fl[1] = @"\gta_sa.exe"; fl[2] = @"\audio\CONFIG\TrakLkup.dat"; fl[3] = @"\audio\streams\BEATS"; 55 | fl[4] = @"\audio\streams\CH"; fl[5] = @"\audio\streams\CR"; fl[6] = @"\audio\streams\CUTSCENE"; fl[7] = @"\audio\streams\DS"; 56 | fl[8] = @"\audio\streams\MH"; fl[9] = @"\audio\streams\MR"; fl[10] = @"\audio\streams\RE"; fl[11] = @"\audio\streams\RG"; 57 | fl[12] = @"\anim\anim.img"; fl[13] = @"\data\script\main.scm"; fl[14] = @"\data\script\script.img"; fl[15] = @"\models\gta_int.img"; 58 | fl[16] = @"\models\gta3.img"; 59 | Translate(); 60 | try 61 | { 62 | Ping ping = new Ping(); 63 | PingReply pingReply = null; 64 | pingReply = ping.Send("github.com"); 65 | if ((pingReply.Status == IPStatus.HardwareError) || (pingReply.Status == IPStatus.IcmpError)) 66 | { 67 | DialogResult result = VitNX_MessageBox.ShowQuestion(lc_text[27] + " " + lc_text[28], lc_text[33]); 68 | if (result == DialogResult.No) { Application.Exit(); } 69 | } 70 | } 71 | catch 72 | { 73 | DialogResult result = VitNX_MessageBox.ShowQuestion(lc_text[27] + " " + lc_text[28], lc_text[33]); 74 | if (result == DialogResult.No) { Application.Exit(); } 75 | } 76 | SettingsLoader(); 77 | try { if (VitNX.Functions.Windows.GetCurrentVersionFromREG() < 6.3) { checkBox7.Visible = false; checkBox7.Checked = false; } } 78 | catch (Exception ex) { MessageBox.Show(ex.Message); checkBox7.Visible = false; checkBox7.Checked = false; } 79 | } 80 | 81 | void SettingsLoader() 82 | { 83 | config.ReadXml(); 84 | checkBox1.Checked = config.Fields.CreateBackups; 85 | checkBox2.Checked = config.Fields.CreateShortcut; 86 | checkBox9.Checked = config.Fields.ResetGame; 87 | checkBox4.Checked = config.Fields.RGL_GarbageCleaning; 88 | checkBox6.Checked = config.Fields.RegisterGamePath; 89 | checkBox3.Checked = config.Fields.CopyGameToNewPath; 90 | checkBox7.Checked = config.Fields.EnableDirectPlay; 91 | checkBox8.Checked = config.Fields.InstallDirectXComponents; 92 | checkBox5.Checked = config.Fields.Forced; 93 | } 94 | 95 | void button1_Click(object sender, EventArgs e) 96 | { 97 | if (Directory.Exists(@Application.StartupPath + @"\files\patches")) 98 | { 99 | NotDone = false; 100 | bool all_patches = true; 101 | for (int i = 2; i < fl.Length; i++) { if (!File.Exists(@Application.StartupPath + @"\files\patches" + fl[i] + ".jpp")) { all_patches = false; } } 102 | if (!File.Exists(@Application.StartupPath + @"\files\patches\game.jpp")) { all_patches = false; } 103 | if (all_patches == true) 104 | { 105 | if (Directory.Exists(@GamePath.Text) && (File.Exists(@GamePath.Text + @"\gta_sa.exe") || File.Exists(@GamePath.Text + @"\gta-sa.exe"))) 106 | { 107 | DialogResult result = VitNX_MessageBox.ShowQuestion(lc_text[16], lc_text[33]); 108 | if (result == DialogResult.Yes) 109 | { 110 | TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Indeterminate); 111 | button1.Enabled = false; 112 | int d = 0; 113 | Process.Start(@Application.StartupPath + @"\files\jpd.exe", "\"" + GamePath.Text + "\"").WaitForExit(); 114 | string str = "jpd"; 115 | foreach (Process process2 in Process.GetProcesses()) { if (!process2.ProcessName.ToLower().Contains(str.ToLower())) { d = 1; } } 116 | if ((d == 1) && Directory.Exists(cache + @"\zips")) 117 | { 118 | File.WriteAllBytes(cache + @"\zips\ASI_Loader.zip", Properties.Resources.ASILoader); 119 | string[] modsZip = Directory.GetFiles(cache + @"\zips", "*.zip"); 120 | TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Normal); 121 | for (int i = 0; i < modsZip.Length; i++) 122 | { 123 | string modName = new FileInfo(modsZip[i]).Name.Replace(".zip", ""); 124 | if (IsInstaller(modsZip[i]) == false) 125 | { 126 | try 127 | { 128 | TbProgressBar.SetValue(Handle, i, modsZip.Length); 129 | if (checkBox3.Checked == false) { Process.Start(@Application.StartupPath + @"\files\7z.exe", "x \"" + modsZip[i] + "\" -o\"" + GamePath.Text + "\" -y").WaitForExit(); } 130 | else { Process.Start(@Application.StartupPath + @"\files\7z.exe", "x \"" + modsZip[i] + "\" -o\"" + GamePath.Text + "_Downgraded\" -y").WaitForExit(); } 131 | if (modName != "ASI_Loader") { MsgInfo(lc_text[6] + " \"" + modName + "\" " + lc_text[17]); } 132 | if ((modName == "ASI_Loader") && (modsZip.Length == 1)) { MsgInfo(lc_text[6] + " \"" + modName + "\" " + lc_text[17]); } 133 | } 134 | catch { TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Error); MsgError(lc_text[6] + " \"" + modName + "\" " + lc_text[22]); } 135 | } 136 | else 137 | { 138 | if (checkBox3.Checked == true) { MessageBox.Show(lc_text[29] + ": \"" + GamePath.Text + "_Downgraded\"!\n" + lc_text[30], lc_text[11], MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification); } 139 | File.Move(modsZip[i], modsZip[i].Replace(".zip", ".exe")); 140 | Process.Start(modsZip[i].Replace(".zip", ".exe")).WaitForExit(); 141 | File.Move(modsZip[i].Replace(".zip", ".exe"), modsZip[i]); 142 | MsgInfo(lc_text[6] + " \"" + modName + "\"" + lc_text[17]); 143 | } 144 | } 145 | } 146 | TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.NoProgress); 147 | button1.Enabled = true; 148 | if (checkBox1.Checked == true) { pictureBox10.Visible = true; IsBak = true; } 149 | if (checkBox3.Checked == false) { pictureBox10.Visible = true; IsBak = true; } 150 | progressPanel.Visible = true; 151 | stagesPanel.Visible = false; 152 | labelPartProgress.Visible = false; 153 | labelAllProgress.Visible = false; 154 | AllProgressBar.Visible = false; 155 | PartProgressBar.Visible = false; 156 | label3.Visible = true; 157 | play.Visible = true; 158 | darkButton5.Visible = true; 159 | } 160 | } 161 | else { MsgWarning(lc_text[25]); pictureBox10.Visible = false; IsBak = false; NotDone = true; } 162 | } 163 | else { try { Directory.Delete(@Application.StartupPath + @"\files\patches", true); } catch { } button1.Visible = false; darkButton4.Visible = true; NotDone = true; } 164 | } 165 | else { button1.Visible = false; darkButton4.Visible = true; NotDone = true; } 166 | } 167 | 168 | //void Logger(string type, string ido, string status) { darkListView2.Items.Add(new VitNXListItem("[" + type + "] " + ido + "=" + status)); } 169 | 170 | static string GetMD5(string file) { try { return FileSystem.GetFileMD5(file); } catch { return "0x50 0x45"; } } 171 | void darkButton6_Click(object sender, EventArgs e) { ScreenShotViewer.Visible = false; darkButton1.Visible = true; darkButton2.Visible = true; } 172 | void darkButton7_Click(object sender, EventArgs e) { try { Process.Start(ScreenShotInViewer.ImageLocation); } catch { MsgWarning(lc_text[26]); Clipboard.SetText(ScreenShotInViewer.ImageLocation); } } 173 | void pictureBox1_Click(object sender, EventArgs e) { SelectPathToGame(); } 174 | void checkBox2_CheckedChanged(object sender, EventArgs e) { config.Fields.CreateShortcut = checkBox2.Checked; config.WriteXml(); } 175 | void checkBox1_CheckedChanged(object sender, EventArgs e) { config.Fields.CreateBackups = checkBox1.Checked; config.WriteXml(); } 176 | void checkBox4_CheckedChanged(object sender, EventArgs e) { config.Fields.RGL_GarbageCleaning = checkBox4.Checked; config.WriteXml(); } 177 | void checkBox6_CheckedChanged(object sender, EventArgs e) { config.Fields.RegisterGamePath = checkBox6.Checked; config.WriteXml(); } 178 | public MainForm() { InitializeComponent(); KeyPreview = true; } 179 | void checkBox7_VisibleChanged(object sender, EventArgs e) { pictureBox15.Visible = checkBox7.Visible; } 180 | void checkBox5_CheckedChanged(object sender, EventArgs e) { config.Fields.Forced = checkBox5.Checked; config.WriteXml(); button1.Visible = checkBox5.Checked; } 181 | void checkBox3_CheckedChanged(object sender, EventArgs e) { config.Fields.CopyGameToNewPath = checkBox3.Checked; config.WriteXml(); } 182 | void checkBox9_CheckedChanged(object sender, EventArgs e) { config.Fields.ResetGame = checkBox9.Checked; config.WriteXml(); } 183 | void darkButton3_Click(object sender, EventArgs e) { try { Process.Start(site_link); } catch { MsgWarning(lc_text[26]); Clipboard.SetText(site_link); } } 184 | void darkButton5_Click(object sender, EventArgs e) { Application.Exit(); } 185 | void ScreenShot_Click(object sender, EventArgs e) { darkButton1.Visible = false; darkButton2.Visible = false; ScreenShotInViewer.ImageLocation = ScreenShot.ImageLocation; ScreenShotViewer.Visible = true; } 186 | void listBox1_MouseDown(object sender, MouseEventArgs e) { NativeFunctions.SetFocus(IntPtr.Zero); } 187 | void button3_Click(object sender, EventArgs e) { try { Process.Start(GamePath.Text + @"\gta_sa.exe"); } catch { MsgWarning(lc_text[25]); pictureBox10.Visible = false; IsBak = false; } } 188 | void MsgInfo(string message) { VitNX_MessageBox.ShowInfo(message, lc_text[9]); } 189 | void MsgWarning(string message) { VitNX_MessageBox.ShowWarning(message, lc_text[11]); } 190 | void MsgError(string message) { VitNX_MessageBox.ShowError(message, lc_text[10]); } 191 | void MainForm_FormClosed(object sender, FormClosedEventArgs e) { if (Directory.Exists(cache)) { Directory.Delete(cache, true); } } 192 | void button1_VisibleChanged(object sender, EventArgs e) { IsDD = button1.Visible; } 193 | void stagesPanel_VisibleChanged(object sender, EventArgs e) { sp = stagesPanel.Visible; } 194 | void pictureBox3_Click(object sender, EventArgs e) { About about = new About(); about.ShowDialog(); } 195 | void darkButton6_Click_1(object sender, EventArgs e) { try { Process.Start("https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/unstable/data/docs/AddNewData.md#add-new-modifications"); } catch { MsgWarning(lc_text[26]); Clipboard.SetText("https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/unstable/data/docs/AddNewData.md#add-new-modifications"); } } 196 | void pictureBox4_Click(object sender, EventArgs e) { try { Process.Start("https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/main/README.md#usage"); } catch { MsgWarning(lc_text[26]); Clipboard.SetText("https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/main/README.md#usage"); } } 197 | void checkBox7_CheckedChanged(object sender, EventArgs e) { config.Fields.EnableDirectPlay = checkBox7.Checked; config.WriteXml(); } 198 | 199 | async void MegaDownloader(string url, string file, string label, int code) 200 | { 201 | try { TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Normal); } catch { } 202 | if (File.Exists(file)) { File.Delete(file); } 203 | var client = new MegaApiClient(); 204 | client.LoginAnonymous(); 205 | Uri zip_link_uri = new Uri(url); 206 | INodeInfo node = client.GetNodeFromLink(zip_link_uri); 207 | labelPartProgress.Text = label + " (" + Convert.ToDouble(node.Size / 1048576).ToString("#.# " + lc_text[7] + ")"); 208 | progressPanel.Visible = true; 209 | stagesPanel.Visible = false; 210 | PartProgressBar.Value = 0; 211 | IProgress ph = new Progress(x => 212 | { 213 | PartProgressBar.Value = (int)x; 214 | try { TbProgressBar.SetValue(Handle, (int)x, 100); } catch { } 215 | }); 216 | await client.DownloadFileAsync(zip_link_uri, file, ph); 217 | client.Logout(); 218 | if (client.IsLoggedIn == false) 219 | { 220 | if (code == 0) 221 | { 222 | try { TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Indeterminate); } catch { } 223 | Process.Start(@Application.StartupPath + @"\files\7z.exe", "x \"" + file + "\" -o\"" + @Application.StartupPath + "\\files\" -y").WaitForExit(); 224 | File.Delete(file); 225 | darkButton4.Visible = false; 226 | button1.Visible = true; 227 | try { TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.NoProgress); } catch { } 228 | } 229 | if (code == 1) 230 | { 231 | try { TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Indeterminate); } catch { } 232 | Process.Start(@Application.StartupPath + @"\files\7z.exe", "x \"" + file + "\" -o\"" + @Application.StartupPath + "\\files\" -y").WaitForExit(); 233 | File.Delete(file); 234 | try { TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.NoProgress); } catch { } 235 | } 236 | progressPanel.Visible = false; 237 | stagesPanel.Visible = true; 238 | } 239 | } 240 | 241 | void button6_Click(object sender, EventArgs e) 242 | { 243 | if (DSPanel.Visible == false) 244 | { 245 | SettingsLoader(); 246 | tabFix = false; 247 | ModsPanel.Visible = false; 248 | DSPanel.Visible = true; 249 | } 250 | else 251 | { 252 | if (tabFix == false) { DSPanel.Visible = false; ModsPanel.Visible = false; } 253 | else { tabFix = false; ModsPanel.Visible = false; } 254 | } 255 | } 256 | 257 | void button2_Click(object sender, EventArgs e) 258 | { 259 | try 260 | { 261 | Ping ping = new Ping(); 262 | PingReply pingReply = null; 263 | pingReply = ping.Send("github.com"); 264 | if (ModsPanel.Visible == false) 265 | { 266 | try 267 | { 268 | TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Indeterminate); 269 | using (System.Net.WebClient mods = new System.Net.WebClient()) 270 | { 271 | mods.DownloadFile("https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/info/list.txt", cache + @"\list.txt"); 272 | string[] modsl = File.ReadAllLines(cache + @"\list.txt", Encoding.ASCII); 273 | listBox1.Items.Clear(); 274 | TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Normal); 275 | for (int i = 0; i < modsl.Length; i++) 276 | { 277 | if (modsl[i] != "") 278 | { 279 | listBox1.Items.Add(modsl[i]); 280 | mods.DownloadFile("https://raw.githubusercontent.com/Zalexanninev15/Jetpack-Downgrader/unstable/data/mods/info/txts/" + modsl[i] + ".txt", cache + @"\" + modsl[i] + ".txt"); 281 | string[] ms = File.ReadAllLines(cache + "\\" + modsl[i] + ".txt", Encoding.ASCII); 282 | // Name - 0 283 | // Version - 1 284 | // Author - 2 285 | // Description - 3 286 | // Web-site - 4 287 | // Link to photo 1 - 5 288 | // Link to photo 1 - 6 289 | // Link to photo 1 - 7 290 | // Link to ZIP with mod - 8 291 | mse[i] = ms[0] + "|" + ms[1] + "|" + ms[2] + "|" + ms[3] + "|" + ms[4] + "|" + ms[5] + "|" + ms[6] + "|" + ms[7] + "|" + ms[8]; 292 | TbProgressBar.SetValue(Handle, i, modsl.Length); 293 | } 294 | } 295 | } 296 | tabFix = true; 297 | DSPanel.Visible = true; 298 | ModsPanel.Visible = true; 299 | } 300 | catch { TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Error); MsgWarning(lc_text[27]); ModsPanel.Visible = false; DSPanel.Visible = false; tabFix = false; } 301 | TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.NoProgress); 302 | } 303 | else { ModsPanel.Visible = false; DSPanel.Visible = false; tabFix = false; } 304 | } 305 | catch { MsgWarning(lc_text[27]); ModsPanel.Visible = false; DSPanel.Visible = false; tabFix = false; } 306 | } 307 | 308 | bool IsInstaller(string file) 309 | { 310 | var twoBytes = new byte[2]; 311 | using (var fileStream = File.Open(file, FileMode.Open)) { fileStream.Read(twoBytes, 0, 2); } 312 | return Encoding.UTF8.GetString(twoBytes) == "MZ"; 313 | } 314 | 315 | void pictureBox2_Click(object sender, EventArgs e) 316 | { 317 | darkComboBox2.Items.Clear(); 318 | if (lpFix == false) 319 | { 320 | LangsPanel.Visible = true; 321 | lpFix = true; 322 | langs = Directory.GetFiles(@Application.StartupPath + @"\files\languages", "*.xml"); 323 | for (int i = 0; i < langs.Length; i++) 324 | { 325 | if (langs[i] != "") 326 | { 327 | string lg = "English"; 328 | using (StringReader reader = new StringReader(File.ReadAllText(langs[i]))) 329 | { 330 | var LOCAL = (LanguagesString)lzol.Deserialize(reader); 331 | lg = LOCAL.Language; 332 | } 333 | darkComboBox2.Items.Add(lg); 334 | if (langcode == new FileInfo(langs[i]).Name.Replace(".xml", "")) { darkComboBox2.SelectedItem = lg; } 335 | } 336 | } 337 | } 338 | else { LangsPanel.Visible = false; lpFix = false; } 339 | } 340 | 341 | void SelectPathToGame() 342 | { 343 | var dialog = new FolderDialog { InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), Title = lc_text[12] }; 344 | if (dialog.Show()) { GamePath.Text = dialog.FileName; } else { GamePath.Clear(); } 345 | } 346 | 347 | string[] lc_text = new string[40]; 348 | void Translate() 349 | { 350 | language.ReadXml(); 351 | langcode = language.Fields.LanguageCode; 352 | try 353 | { 354 | using (StringReader reader = new StringReader(File.ReadAllText(@Application.StartupPath + @"\files\languages\" + langcode + ".xml"))) 355 | { 356 | var LOCAL = (LanguagesString)lzol.Deserialize(reader); 357 | // Text loading 358 | darkLabel1.Text = LOCAL.Languages; 359 | HelloUser.Text = LOCAL.Stage; 360 | label2.Text = LOCAL.OtherActions; 361 | DSPanel.SectionHeader = LOCAL.Tab1; 362 | label1.Text = LOCAL.PathLabel + ":"; 363 | button6.Text = "1. " + DSPanel.SectionHeader; 364 | darkTitle1.Text = LOCAL.CBG1; 365 | darkTitle2.Text = LOCAL.CBG2; 366 | ModsPanel.SectionHeader = LOCAL.Tab2; 367 | button2.Text = "2. " + ModsPanel.SectionHeader; 368 | darkLabel9.Text = LOCAL.List; 369 | darkLabel2.Text = LOCAL.ASILoader; 370 | darkGroupBox1.Text = LOCAL.AboutMod; 371 | lc_text[0] = LOCAL.ModName; 372 | lc_text[1] = LOCAL.ModVersion; 373 | lc_text[2] = LOCAL.ModAuthor; 374 | darkGroupBox2.Text = LOCAL.DescriptionMod; 375 | darkButton3.Text = LOCAL.TopicOfMod; 376 | lc_text[3] = LOCAL.DownloadingModCache; 377 | button1.Text = "3. " + LOCAL.Downgrade; 378 | darkButton4.Text = "3. " + LOCAL.DownloadPatches; 379 | lc_text[4] = LOCAL.DownloadingPatches; 380 | lc_text[5] = LOCAL.DownloadingDirectXFiles; 381 | lc_text[6] = LOCAL.ModWord; 382 | lc_text[7] = LOCAL.Mbyte; 383 | label3.Text = LOCAL.WishPlay; 384 | play.Text = LOCAL.Play; 385 | darkButton5.Text = LOCAL.CloseApp; 386 | // CheckBoxes loading 387 | checkBox1.Text = LOCAL.CreateBackups; 388 | checkBox2.Text = LOCAL.CreateShortcut; 389 | checkBox9.Text = LOCAL.ResetGame; 390 | checkBox4.Text = LOCAL.RGL_GarbageCleaning; 391 | checkBox6.Text = LOCAL.RegisterGamePath; 392 | checkBox3.Text = LOCAL.CopyGameToNewPath; 393 | checkBox7.Text = LOCAL.EnableDirectPlay; 394 | checkBox8.Text = LOCAL.InstallDirectXComponents; 395 | checkBox5.Text = LOCAL.Forced; 396 | YesInstallMe.Text = LOCAL.InstallMod; 397 | // Titles loading 398 | lc_text[8] = LOCAL.Request; 399 | lc_text[9] = LOCAL.Information; 400 | lc_text[11] = LOCAL.Warning; 401 | lc_text[10] = LOCAL.Error; 402 | lc_text[33] = LOCAL.Question; 403 | lc_text[12] = LOCAL.FolderSelectDialog; 404 | // Information messages loading 405 | lc_text[17] = LOCAL.ModSucces; 406 | lc_text[19] = LOCAL.BindingOK; 407 | lc_text[20] = LOCAL.ReturnUsingBackups; 408 | lc_text[34] = LOCAL.Done; 409 | // Warning messages loading 410 | lc_text[25] = LOCAL.PathNotFound; 411 | lc_text[26] = LOCAL.BrowserNotFound; 412 | lc_text[29] = LOCAL.NewPath; 413 | lc_text[30] = LOCAL.YouCanDelete; 414 | // Error messages loading 415 | lc_text[21] = LOCAL.AboutModDamaged; 416 | lc_text[22] = LOCAL.ModFailure; 417 | // Question messages loading 418 | lc_text[18] = LOCAL.QEnableDirectPlay; 419 | lc_text[13] = LOCAL.WishDownloadPatches; 420 | lc_text[14] = LOCAL.WishDownloadDirectXFiles; 421 | lc_text[15] = LOCAL.InstallModQuestion; 422 | lc_text[16] = LOCAL.WishDowngrader; 423 | lc_text[23] = LOCAL.WishReturnUsingBackups; 424 | lc_text[24] = LOCAL.WishRegGame; 425 | lc_text[27] = LOCAL.NetworkNotFound; 426 | lc_text[28] = LOCAL.OfflineMode; 427 | // Debug mode loading 428 | lc_text[31] = LOCAL.Activation; 429 | lc_text[32] = LOCAL.Deactivation; 430 | } 431 | } 432 | catch (Exception ex) { MessageBox.Show(ex.ToString()); MessageBox.Show("Error loading the localization file!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); } 433 | } 434 | 435 | void darkCheckBox1_CheckedChanged(object sender, EventArgs e) 436 | { 437 | try 438 | { 439 | Ping ping = new Ping(); 440 | PingReply pingReply = null; 441 | pingReply = ping.Send("github.com"); 442 | if (YesInstallMe.Checked == true) 443 | { 444 | if (!File.Exists(cache + @"\zips\" + nameLabel.Text.Replace(lc_text[0] + ": ", "") + ".zip")) 445 | { 446 | if (!Directory.Exists(cache + @"\zips")) { Directory.CreateDirectory(cache + @"\zips"); } 447 | try 448 | { 449 | DialogResult result = VitNX_MessageBox.ShowQuestion(lc_text[15], lc_text[33]); 450 | if (result == DialogResult.Yes) 451 | { 452 | if (zip_link.Contains("mega.nz")) { MegaDownloader(zip_link, cache + @"\zips\" + @nameLabel.Text.Replace(lc_text[0] + ": ", "") + ".zip", lc_text[3] + " \"" + @nameLabel.Text.Replace(lc_text[0] + ": ", "") + "\"...", 2); } 453 | else 454 | { 455 | TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Normal); 456 | progressPanel.Visible = true; 457 | stagesPanel.Visible = false; 458 | labelPartProgress.Text = lc_text[3] + " \"" + @nameLabel.Text.Replace(lc_text[0] + ": ", "") + "\"..."; 459 | PartProgressBar.Value = 0; 460 | using (System.Net.WebClient wc = new System.Net.WebClient()) 461 | { 462 | var r = wc.OpenRead(zip_link); 463 | labelPartProgress.Text += " (" + (Convert.ToDouble(wc.ResponseHeaders["Content-Length"]) / 1048576).ToString("#.# " + lc_text[7] + ")"); 464 | r.Close(); 465 | wc.DownloadProgressChanged += (s, a) => { TbProgressBar.SetValue(Handle, a.ProgressPercentage, 100); PartProgressBar.Value = a.ProgressPercentage; }; 466 | wc.DownloadFileCompleted += (s, a) => 467 | { 468 | PartProgressBar.Value = 0; 469 | progressPanel.Visible = false; 470 | stagesPanel.Visible = true; 471 | TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.NoProgress); 472 | }; 473 | wc.DownloadFileAsync(new Uri(zip_link), @cache + @"\zips\" + @nameLabel.Text.Replace(lc_text[0] + ": ", "") + ".zip"); 474 | } 475 | } 476 | } 477 | } 478 | catch (Exception ex) { TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Error); MsgError(lc_text[21]); MsgError(ex.ToString() + "\nFile: " + cache + @"\zips\" + nameLabel.Text.Replace(lc_text[0] + ": ", "") + ".zip"); TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.NoProgress); } 479 | } 480 | else { YesInstallMe.Checked = true; } 481 | } 482 | if (YesInstallMe.Checked == false) 483 | { 484 | progressPanel.Visible = false; 485 | stagesPanel.Visible = true; 486 | if (File.Exists(cache + @"\zips\" + nameLabel.Text.Replace(lc_text[0] + ": ", "") + ".zip")) { File.Delete(cache + @"\zips\" + nameLabel.Text.Replace(lc_text[0] + ": ", "") + ".zip"); } 487 | } 488 | } 489 | catch { MsgWarning(lc_text[27]); YesInstallMe.Checked = false; } 490 | } 491 | 492 | void checkBox8_CheckedChanged(object sender, EventArgs e) 493 | { 494 | if (checkBox8.Checked == true) 495 | { 496 | if (!Directory.Exists(@Application.StartupPath + @"\files\DirectX")) 497 | { 498 | try 499 | { 500 | Ping ping = new Ping(); 501 | PingReply pingReply = null; 502 | pingReply = ping.Send("github.com"); 503 | DialogResult result = VitNX_MessageBox.ShowQuestion(lc_text[14], lc_text[33]); 504 | if (result == DialogResult.Yes) 505 | { 506 | try { MegaDownloader("https://mega.nz/file/0pFRwAqa#Arguk9cQLpXYeQgXnFfAp6cw6F5OIZFKP2tRTwNCArI", @Application.StartupPath + @"\files\ddirectx.7z", lc_text[5], 1); } 507 | catch { checkBox8.Checked = false; } 508 | } 509 | else { checkBox8.Checked = false; } 510 | } 511 | catch { TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Error); MsgWarning(lc_text[27]); checkBox8.Checked = false; TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.NoProgress); } 512 | } 513 | } 514 | config.Fields.InstallDirectXComponents = checkBox8.Checked; 515 | config.WriteXml(); 516 | } 517 | 518 | void MainForm_KeyDown(object sender, KeyEventArgs e) 519 | { 520 | if (e.KeyData == Keys.F1) { try { Process.Start("https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/main/README.md#usage"); } catch { MsgWarning(lc_text[26]); Clipboard.SetText("https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/main/README.md#usage"); } } 521 | if (e.KeyData == Keys.F4) { Process.Start("notepad.exe", @Application.StartupPath + @"\files\downgrader.xml"); } 522 | if (e.KeyData == Keys.F12) 523 | { 524 | if (db == false) { MsgWarning(lc_text[31]); config.Fields.UserMode = false; config.WriteXml(); db = true; } 525 | else { MsgWarning(lc_text[32]); config.Fields.UserMode = true; config.WriteXml(); db = false; } 526 | Data.DebugMode = db; 527 | } 528 | if ((e.Modifiers == Keys.Control) && (e.KeyCode == Keys.O)) 529 | { 530 | if (NotDone == true) 531 | { 532 | tabFix = false; 533 | ModsPanel.Visible = false; 534 | DSPanel.Visible = true; 535 | SelectPathToGame(); 536 | } 537 | } 538 | if ((e.Modifiers == Keys.Control) && (e.KeyCode == Keys.Y)) { if (GamePath.Text != "") { pictureBox11_Click(sender, e); } } 539 | if ((e.Modifiers == Keys.Control) && (e.KeyCode == Keys.Z)) { if (IsBak == true) { pictureBox10_Click(sender, e); } } 540 | if ((e.Modifiers == Keys.Control) && (e.KeyCode == Keys.S)) { if ((IsDD == false) && (sp == true)) { button1_Click(sender, e); } } 541 | } 542 | 543 | void darkButton1_Click(object sender, EventArgs e) 544 | { 545 | for (int i = 0; i < photos_links.Length; i++) 546 | { 547 | try { if (ScreenShot.ImageLocation == photos_links[i]) { ScreenShot.ImageLocation = photos_links[i + 1]; i = photos_links.Length + 1; } } 548 | catch { ScreenShot.ImageLocation = photos_links[i]; i = photos_links.Length + 1; } 549 | } 550 | } 551 | 552 | void darkButton2_Click(object sender, EventArgs e) 553 | { 554 | for (int i = 0; i < photos_links.Length; i++) 555 | { 556 | try { if (ScreenShot.ImageLocation == photos_links[i]) { ScreenShot.ImageLocation = photos_links[i - 1]; i = photos_links.Length + 1; } } 557 | catch { ScreenShot.ImageLocation = photos_links[i]; i = photos_links.Length + 1; } 558 | } 559 | } 560 | 561 | void darkComboBox2_SelectedIndexChanged(object sender, EventArgs e) 562 | { 563 | for (int i = 0; i < langs.Length; i++) 564 | { 565 | if (langs[i] != "") 566 | { 567 | using (StringReader reader = new StringReader(File.ReadAllText(langs[i]))) 568 | { 569 | var LOCAL = (LanguagesString)lzol.Deserialize(reader); 570 | if (darkComboBox2.Text == LOCAL.Language) 571 | { 572 | language.Fields.LanguageCode = new FileInfo(langs[i]).Name.Replace(".xml", ""); 573 | language.WriteXml(); 574 | Translate(); 575 | } 576 | } 577 | } 578 | } 579 | } 580 | 581 | void darkButton4_Click(object sender, EventArgs e) 582 | { 583 | try 584 | { 585 | Ping ping = new Ping(); 586 | PingReply pingReply = null; 587 | pingReply = ping.Send("github.com"); 588 | DialogResult result = VitNX_MessageBox.ShowQuestion(lc_text[13], lc_text[33]); 589 | if (result == DialogResult.Yes) 590 | { 591 | try { MegaDownloader("https://mega.nz/file/4tcXiSqA#8JzulAC0oABzinb7914sq2xkyxE7c6atSeMval-YWms", @Application.StartupPath + @"\files\dpatches.rar", lc_text[4], 0); } 592 | catch { progressPanel.Visible = false; stagesPanel.Visible = true; button1.Visible = false; } 593 | } 594 | else { progressPanel.Visible = false; stagesPanel.Visible = true; button1.Visible = false; } 595 | } 596 | catch { TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Error); MsgWarning(lc_text[27]); TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.NoProgress); } 597 | if (IsOnePointNull == true) { button1.Visible = false; } 598 | } 599 | 600 | void listBox1_SelectedIndexChanged(object sender, EventArgs e) 601 | { 602 | try 603 | { 604 | if (listBox1.Text != "") 605 | { 606 | ScreenShot.Enabled = true; 607 | darkGroupBox1.Visible = true; 608 | string[] tInfo = mse[listBox1.SelectedIndex].Split('|'); 609 | nameLabel.Text = lc_text[0] + ": " + tInfo[0]; 610 | darkLabel5.Text = lc_text[1] + ": " + tInfo[1]; 611 | darkLabel6.Text = lc_text[2] + ": " + tInfo[2]; 612 | darkLabel4.Text = tInfo[3]; 613 | site_link = tInfo[4]; 614 | ScreenShot.ImageLocation = tInfo[5]; 615 | photos_links[0] = ScreenShot.ImageLocation; 616 | photos_links[1] = tInfo[6]; 617 | photos_links[2] = tInfo[7]; 618 | zip_link = tInfo[8]; 619 | YesInstallMe.Checked = File.Exists(cache + @"\zips\" + nameLabel.Text.Replace(lc_text[0] + ": ", "") + ".zip"); 620 | } 621 | } 622 | catch (Exception ex) { MsgError(lc_text[21]); MsgError(ex.ToString()); ScreenShot.Enabled = false; zip_link = "application/zip"; } 623 | } 624 | 625 | void GamePath_TextChanged(object sender, EventArgs e) 626 | { 627 | if (GamePath.Text != "") 628 | { 629 | pictureBox11.Visible = true; 630 | for (int i = 0; i < fl.Length; i++) { Data.PathToGame = GamePath.Text; if (File.Exists(GamePath.Text + fl[i] + ".jpb")) { pictureBox10.Visible = true; IsBak = true; } } 631 | if (((GetMD5(@GamePath.Text + @"\gta_sa.exe") == "6687A315558935B3FC80CDBFF04437A4") || (GetMD5(@GamePath.Text + @"\gta-sa.exe") == "6687A315558935B3FC80CDBFF04437A4")) && ((!File.Exists(@GamePath.Text + @"\MTLX.dll")) || (!File.Exists(@GamePath.Text + @"\index.bin")))) { pictureBox10.Visible = true; IsBak = true; Data.PathToGame = GamePath.Text; } 632 | if (File.Exists(GamePath.Text + @"\gta_sa.exe")) 633 | { 634 | if ((GetMD5(@GamePath.Text + @"\gta_sa.exe") != "E7697A085336F974A4A6102A51223960") && (GetMD5(@GamePath.Text + @"\gta_sa.exe") != "170B3A9108687B26DA2D8901C6948A18") && (GetMD5(@GamePath.Text + @"\gta_sa.exe") != "91A9F6611ADDFB46682B56F9E247DB84") && (GetMD5(@GamePath.Text + @"\gta_sa.exe") != "9369501599574D19AC93DE41547C4EC1")) { checkBox5.Visible = false; checkBox5.Checked = false; IsOnePointNull = false; button1.Visible = true; } 635 | else { checkBox5.Visible = true; IsOnePointNull = true; button1.Visible = false; } 636 | } 637 | else 638 | { 639 | if ((GetMD5(@GamePath.Text + @"\gta-sa.exe") != "E7697A085336F974A4A6102A51223960") && (GetMD5(@GamePath.Text + @"\gta-sa.exe") != "170B3A9108687B26DA2D8901C6948A18") && (GetMD5(@GamePath.Text + @"\gta-sa.exe") != "91A9F6611ADDFB46682B56F9E247DB84") && (GetMD5(@GamePath.Text + @"\gta-sa.exe") != "9369501599574D19AC93DE41547C4EC1")) { checkBox5.Visible = false; checkBox5.Checked = false; IsOnePointNull = false; button1.Visible = true; } 640 | else { checkBox5.Visible = true; IsOnePointNull = true; button1.Visible = false; } 641 | } 642 | } 643 | else { pictureBox11.Visible = false; pictureBox10.Visible = false; IsBak = false; IsOnePointNull = false; } 644 | } 645 | 646 | void pictureBox10_Click(object sender, EventArgs e) 647 | { 648 | DialogResult result = VitNX_MessageBox.ShowQuestion(lc_text[23], lc_text[33]); 649 | if (result == DialogResult.Yes) 650 | { 651 | checkBox1.Checked = false; 652 | originalGameRestoreProgressBar.Visible = true; 653 | string exe1 = GetMD5(@GamePath.Text + @"\gta_sa.exe.jpb"); 654 | string exe2 = GetMD5(@GamePath.Text + @"\gta_sa.exe"); 655 | string exe3 = GetMD5(@GamePath.Text + @"\gta-sa.exe"); 656 | string exe4 = GetMD5(@GamePath.Text + @"\gta-sa.exe.jpb"); 657 | if ((exe1 != "0x50 0x45" && exe2 != "0x50 0x45") || (exe3 != "0x50 0x45" && exe4 != "0x50 0x45")) 658 | { 659 | if ((exe1 != exe2) || (exe3 != exe4)) 660 | { 661 | System.Threading.Tasks.Task.Run(() => 662 | { 663 | TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Normal); 664 | originalGameRestoreProgressBar.Maximum = fl.Length; 665 | for (int i = 0; i < fl.Length; i++) 666 | { 667 | if (File.Exists(@GamePath.Text + fl[i] + ".jpb")) 668 | { 669 | try { File.SetAttributes(@GamePath.Text + fl[i], FileAttributes.Normal); File.Delete(@GamePath.Text + fl[i]); } 670 | catch { } 671 | try 672 | { 673 | File.SetAttributes(@GamePath.Text + fl[i] + ".jpb", FileAttributes.Normal); 674 | File.Copy(@GamePath.Text + fl[i] + ".jpb", @GamePath.Text + fl[i]); 675 | File.Delete(@GamePath.Text + fl[i] + ".jpb"); 676 | } 677 | catch { } 678 | } 679 | if (fl[i] == @"\gta_sa.exe") 680 | { 681 | if (File.Exists(@GamePath.Text + fl[0])) 682 | { 683 | try { File.SetAttributes(@GamePath.Text + fl[i], FileAttributes.Normal); File.Delete(@GamePath.Text + fl[i]); } catch { } 684 | try { File.Copy(@GamePath.Text + fl[0], @GamePath.Text + fl[1]); } catch { } 685 | } 686 | } 687 | originalGameRestoreProgressBar.Value = i + 1; 688 | TbProgressBar.SetValue(Handle, i + 1, fl.Length); 689 | } 690 | if (((GetMD5(@GamePath.Text + @"\gta_sa.exe") == "6687A315558935B3FC80CDBFF04437A4") || (GetMD5(@GamePath.Text + @"\gta-sa.exe") == "6687A315558935B3FC80CDBFF04437A4")) && ((!File.Exists(@GamePath.Text + @"\MTLX.dll")) || (!File.Exists(@GamePath.Text + @"\index.bin")))) 691 | { 692 | TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.Indeterminate); 693 | var restoreRGLfiles = new ProcessStartInfo 694 | { 695 | FileName = @Application.StartupPath + @"\files\7z.exe", 696 | Arguments = "x \"" + @Application.StartupPath + "\\files\\rgl.jpbc\" -o\"" + @GamePath.Text + "\" -y", 697 | UseShellExecute = false, 698 | CreateNoWindow = true, 699 | }; 700 | restoreRGLfiles.WindowStyle = ProcessWindowStyle.Hidden; 701 | Process.Start(restoreRGLfiles).WaitForExit(); 702 | } 703 | TbProgressBar.SetState(Handle, TbProgressBar.TaskbarStates.NoProgress); 704 | MsgInfo(lc_text[20]); 705 | pictureBox10.Visible = false; 706 | IsBak = false; 707 | originalGameRestoreProgressBar.Visible = false; 708 | }); 709 | } 710 | else 711 | { 712 | try { File.SetAttributes(@GamePath.Text + @"\gta_sa.exe.jpb", FileAttributes.Normal); File.Delete(@GamePath.Text + @"\gta_sa.exe.jpb"); } catch { } 713 | try { File.SetAttributes(@GamePath.Text + @"\gta-sa.exe.jpb", FileAttributes.Normal); File.Delete(@GamePath.Text + @"\gta-sa.exe.jpb"); } catch { } 714 | MsgInfo(lc_text[20]); 715 | pictureBox10.Visible = false; 716 | IsBak = false; 717 | originalGameRestoreProgressBar.Visible = false; 718 | } 719 | } 720 | else 721 | { 722 | pictureBox10.Visible = false; 723 | IsBak = false; 724 | originalGameRestoreProgressBar.Visible = false; 725 | } 726 | } 727 | } 728 | 729 | void pictureBox11_Click(object sender, EventArgs e) 730 | { 731 | DialogResult result = VitNX_MessageBox.ShowQuestion(lc_text[24], lc_text[33]); 732 | if (result == DialogResult.Yes) 733 | { 734 | if (x64 == true) 735 | { 736 | Registry.LocalMachine.CreateSubKey(@"SOFTWARE\WOW6432Node\Rockstar Games\GTA San Andreas\Installation"); 737 | Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Rockstar Games\GTA San Andreas\Installation", "ExePath", "\"" + GamePath.Text + "\""); 738 | } 739 | Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Rockstar Games\GTA San Andreas\Installation"); 740 | Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Rockstar Games\GTA San Andreas\Installation", "ExePath", "\"" + GamePath.Text + "\""); 741 | Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Rockstar Games\GTA San Andreas\Installation", "Installed", "1"); 742 | Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Rockstar Games\Launcher"); 743 | Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Rockstar Games\Launcher", "Language", "en-US"); 744 | MsgInfo(lc_text[19]); 745 | } 746 | } 747 | 748 | void progressPanel_VisibleChanged(object sender, EventArgs e) 749 | { 750 | if (progressPanel.Visible == true) { LangsPanel.Visible = false; HelloUser.Visible = false; pictureBox5.Visible = false; pictureBox6.Visible = false; pictureBox7.Visible = false; } 751 | else { HelloUser.Visible = true; pictureBox5.Visible = true; pictureBox6.Visible = true; pictureBox7.Visible = true; } 752 | } 753 | 754 | void darkButton8_Click(object sender, EventArgs e) 755 | { 756 | for (int i = 0; i < photos_links.Length; i++) 757 | { 758 | try { if (ScreenShotInViewer.ImageLocation == photos_links[i]) { ScreenShotInViewer.ImageLocation = photos_links[i + 1]; i = photos_links.Length + 1; } } 759 | catch { ScreenShotInViewer.ImageLocation = photos_links[i]; i = photos_links.Length + 1; } 760 | } 761 | } 762 | 763 | void darkButton9_Click(object sender, EventArgs e) 764 | { 765 | for (int i = 0; i < photos_links.Length; i++) 766 | { 767 | try { if (ScreenShotInViewer.ImageLocation == photos_links[i]) { ScreenShotInViewer.ImageLocation = photos_links[i - 1]; i = photos_links.Length + 1; } } 768 | catch { ScreenShotInViewer.ImageLocation = photos_links[i]; i = photos_links.Length + 1; } 769 | } 770 | } 771 | 772 | private void pictureBox15_Click(object sender, EventArgs e) 773 | { 774 | DialogResult result = VitNX_MessageBox.ShowQuestion(lc_text[18], lc_text[33]); 775 | if (result == DialogResult.Yes) 776 | { 777 | try { Process.Start("dism", "/Online /enable-feature /FeatureName:\"DirectPlay\" /NoRestart").WaitForExit(); } catch { } 778 | try { Process.Start("dism", "/Online /enable-feature /FeatureName:\"DirectPlay\" /NoRestart /all").WaitForExit(); } catch { } 779 | MsgInfo(lc_text[34]); 780 | } 781 | } 782 | } 783 | } --------------------------------------------------------------------------------