├── 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 | 
4 |
5 | [](https://github.com/Zalexanninev15/Jetpack-Downgrader)
6 | [](https://dotnet.microsoft.com/download/dotnet-framework/net48)
7 | [](https://github.com/Zalexanninev15/Jetpack-Downgrader)
8 | [](https://github.com/Zalexanninev15/Jetpack-Downgrader/releases/latest)
9 | [](https://github.com/Zalexanninev15/Jetpack-Downgrader/blob/unstable/data/docs/Changelog.md)
10 | [](https://github.com/Zalexanninev15/Jetpack-Downgrader/releases)
11 | [](https://github.com/Zalexanninev15/Jetpack-Downgrader/commits/unstable)
12 | [](https://github.com/Zalexanninev15/Jetpack-Downgrader/stargazers)
13 | [](https://github.com/Zalexanninev15/Jetpack-Downgrader/network/members)
14 | [](https://github.com/Zalexanninev15/Jetpack-Downgrader/issues?q=is%3Aopen+is%3Aissue)
15 | [](https://github.com/Zalexanninev15/Jetpack-Downgrader/issues?q=is%3Aissue+is%3Aclosed)
16 | [](https://gtaforums.com/topic/969056-jetpack-downgrader)
17 | [](LICENSE)
18 | [](https://z15.neocities.org/donate)
19 |
20 | ## Screenshot
21 |
22 | 
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 | | Code | Name |
8 | | af | Afrikaans |
9 | | af-ZA | Afrikaans (South Africa) |
10 | | ar | Arabic |
11 | | ar-AE | Arabic (U.A.E.) |
12 | | ar-BH | Arabic (Bahrain) |
13 | | ar-DZ | Arabic (Algeria) |
14 | | ar-EG | Arabic (Egypt) |
15 | | ar-IQ | Arabic (Iraq) |
16 | | ar-JO | Arabic (Jordan) |
17 | | ar-KW | Arabic (Kuwait) |
18 | | ar-LB | Arabic (Lebanon) |
19 | | ar-LY | Arabic (Libya) |
20 | | ar-MA | Arabic (Morocco) |
21 | | ar-OM | Arabic (Oman) |
22 | | ar-QA | Arabic (Qatar) |
23 | | ar-SA | Arabic (Saudi Arabia) |
24 | | ar-SY | Arabic (Syria) |
25 | | ar-TN | Arabic (Tunisia) |
26 | | ar-YE | Arabic (Yemen) |
27 | | az | Azeri (Latin) |
28 | | az-AZ | Azeri (Latin) (Azerbaijan) |
29 | | az-AZ | Azeri (Cyrillic) (Azerbaijan) |
30 | | be | Belarusian |
31 | | be-BY | Belarusian (Belarus) |
32 | | bg | Bulgarian |
33 | | bg-BG | Bulgarian (Bulgaria) |
34 | | bs-BA | Bosnian (Bosnia and Herzegovina) |
35 | | ca | Catalan |
36 | | ca-ES | Catalan (Spain) |
37 | | cs | Czech |
38 | | cs-CZ | Czech (Czech Republic) |
39 | | cy | Welsh |
40 | | cy-GB | Welsh (United Kingdom) |
41 | | da | Danish |
42 | | da-DK | Danish (Denmark) |
43 | | de | German |
44 | | de-AT | German (Austria) |
45 | | de-CH | German (Switzerland) |
46 | | de-DE | German (Germany) |
47 | | de-LI | German (Liechtenstein) |
48 | | de-LU | German (Luxembourg) |
49 | | dv | Divehi |
50 | | dv-MV | Divehi (Maldives) |
51 | | el | Greek |
52 | | el-GR | Greek (Greece) |
53 | | en | English |
54 | | en-AU | English (Australia) |
55 | | en-BZ | English (Belize) |
56 | | en-CA | English (Canada) |
57 | | en-CB | English (Caribbean) |
58 | | en-GB | English (United Kingdom) |
59 | | en-IE | English (Ireland) |
60 | | en-JM | English (Jamaica) |
61 | | en-NZ | English (New Zealand) |
62 | | en-PH | English (Republic of the Philippines) |
63 | | en-TT | English (Trinidad and Tobago) |
64 | | en-US | English (United States) |
65 | | en-ZA | English (South Africa) |
66 | | en-ZW | English (Zimbabwe) |
67 | | eo | Esperanto |
68 | | es | Spanish |
69 | | es-AR | Spanish (Argentina) |
70 | | es-BO | Spanish (Bolivia) |
71 | | es-CL | Spanish (Chile) |
72 | | es-CO | Spanish (Colombia) |
73 | | es-CR | Spanish (Costa Rica) |
74 | | es-DO | Spanish (Dominican Republic) |
75 | | es-EC | Spanish (Ecuador) |
76 | | es-ES | Spanish (Castilian) |
77 | | es-ES | Spanish (Spain) |
78 | | es-GT | Spanish (Guatemala) |
79 | | es-HN | Spanish (Honduras) |
80 | | es-MX | Spanish (Mexico) |
81 | | es-NI | Spanish (Nicaragua) |
82 | | es-PA | Spanish (Panama) |
83 | | es-PE | Spanish (Peru) |
84 | | es-PR | Spanish (Puerto Rico) |
85 | | es-PY | Spanish (Paraguay) |
86 | | es-SV | Spanish (El Salvador) |
87 | | es-UY | Spanish (Uruguay) |
88 | | es-VE | Spanish (Venezuela) |
89 | | et | Estonian |
90 | | et-EE | Estonian (Estonia) |
91 | | eu | Basque |
92 | | eu-ES | Basque (Spain) |
93 | | fa | Farsi |
94 | | fa-IR | Farsi (Iran) |
95 | | fi | Finnish |
96 | | fi-FI | Finnish (Finland) |
97 | | fo | Faroese |
98 | | fo-FO | Faroese (Faroe Islands) |
99 | | fr | French |
100 | | fr-BE | French (Belgium) |
101 | | fr-CA | French (Canada) |
102 | | fr-CH | French (Switzerland) |
103 | | fr-FR | French (France) |
104 | | fr-LU | French (Luxembourg) |
105 | | fr-MC | French (Principality of Monaco) |
106 | | gl | Galician |
107 | | gl-ES | Galician (Spain) |
108 | | gu | Gujarati |
109 | | gu-IN | Gujarati (India) |
110 | | he | Hebrew |
111 | | he-IL | Hebrew (Israel) |
112 | | hi | Hindi |
113 | | hi-IN | Hindi (India) |
114 | | hr | Croatian |
115 | | hr-BA | Croatian (Bosnia and Herzegovina) |
116 | | hr-HR | Croatian (Croatia) |
117 | | hu | Hungarian |
118 | | hu-HU | Hungarian (Hungary) |
119 | | hy | Armenian |
120 | | hy-AM | Armenian (Armenia) |
121 | | id | Indonesian |
122 | | id-ID | Indonesian (Indonesia) |
123 | | is | Icelandic |
124 | | is-IS | Icelandic (Iceland) |
125 | | it | Italian |
126 | | it-CH | Italian (Switzerland) |
127 | | it-IT | Italian (Italy) |
128 | | ja | Japanese |
129 | | ja-JP | Japanese (Japan) |
130 | | ka | Georgian |
131 | | ka-GE | Georgian (Georgia) |
132 | | kk | Kazakh |
133 | | kk-KZ | Kazakh (Kazakhstan) |
134 | | kn | Kannada |
135 | | kn-IN | Kannada (India) |
136 | | ko | Korean |
137 | | ko-KR | Korean (Korea) |
138 | | kok | Konkani |
139 | | kok-IN | Konkani (India) |
140 | | ky | Kyrgyz |
141 | | ky-KG | Kyrgyz (Kyrgyzstan) |
142 | | lt | Lithuanian |
143 | | lt-LT | Lithuanian (Lithuania) |
144 | | lv | Latvian |
145 | | lv-LV | Latvian (Latvia) |
146 | | mi | Maori |
147 | | mi-NZ | Maori (New Zealand) |
148 | | mk | FYRO Macedonian |
149 | | mk-MK | FYRO Macedonian (Former Yugoslav Republic of Macedonia) |
150 | | mn | Mongolian |
151 | | mn-MN | Mongolian (Mongolia) |
152 | | mr | Marathi |
153 | | mr-IN | Marathi (India) |
154 | | ms | Malay |
155 | | ms-BN | Malay (Brunei Darussalam) |
156 | | ms-MY | Malay (Malaysia) |
157 | | mt | Maltese |
158 | | mt-MT | Maltese (Malta) |
159 | | nb | Norwegian (Bokm?l) |
160 | | nb-NO | Norwegian (Bokm?l) (Norway) |
161 | | nl | Dutch |
162 | | nl-BE | Dutch (Belgium) |
163 | | nl-NL | Dutch (Netherlands) |
164 | | nn-NO | Norwegian (Nynorsk) (Norway) |
165 | | ns | Northern Sotho |
166 | | ns-ZA | Northern Sotho (South Africa) |
167 | | pa | Punjabi |
168 | | pa-IN | Punjabi (India) |
169 | | pl | Polish |
170 | | pl-PL | Polish (Poland) |
171 | | ps | Pashto |
172 | | ps-AR | Pashto (Afghanistan) |
173 | | pt | Portuguese |
174 | | pt-BR | Portuguese (Brazil) |
175 | | pt-PT | Portuguese (Portugal) |
176 | | qu | Quechua |
177 | | qu-BO | Quechua (Bolivia) |
178 | | qu-EC | Quechua (Ecuador) |
179 | | qu-PE | Quechua (Peru) |
180 | | ro | Romanian |
181 | | ro-RO | Romanian (Romania) |
182 | | ru | Russian |
183 | | ru-RU | Russian (Russia) |
184 | | sa | Sanskrit |
185 | | sa-IN | Sanskrit (India) |
186 | | se | Sami (Northern) |
187 | | se-FI | Sami (Northern) (Finland) |
188 | | se-FI | Sami (Skolt) (Finland) |
189 | | se-FI | Sami (Inari) (Finland) |
190 | | se-NO | Sami (Northern) (Norway) |
191 | | se-NO | Sami (Lule) (Norway) |
192 | | se-NO | Sami (Southern) (Norway) |
193 | | se-SE | Sami (Northern) (Sweden) |
194 | | se-SE | Sami (Lule) (Sweden) |
195 | | se-SE | Sami (Southern) (Sweden) |
196 | | sk | Slovak |
197 | | sk-SK | Slovak (Slovakia) |
198 | | sl | Slovenian |
199 | | sl-SI | Slovenian (Slovenia) |
200 | | sq | Albanian |
201 | | sq-AL | Albanian (Albania) |
202 | | sr-BA | Serbian (Latin) (Bosnia and Herzegovina) |
203 | | sr-BA | Serbian (Cyrillic) (Bosnia and Herzegovina) |
204 | | sr-SP | Serbian (Latin) (Serbia and Montenegro) |
205 | | sr-SP | Serbian (Cyrillic) (Serbia and Montenegro) |
206 | | sv | Swedish |
207 | | sv-FI | Swedish (Finland) |
208 | | sv-SE | Swedish (Sweden) |
209 | | sw | Swahili |
210 | | sw-KE | Swahili (Kenya) |
211 | | syr | Syriac |
212 | | syr-SY | Syriac (Syria) |
213 | | ta | Tamil |
214 | | ta-IN | Tamil (India) |
215 | | te | Telugu |
216 | | te-IN | Telugu (India) |
217 | | th | Thai |
218 | | th-TH | Thai (Thailand) |
219 | | tl | Tagalog |
220 | | tl-PH | Tagalog (Philippines) |
221 | | tn | Tswana |
222 | | tn-ZA | Tswana (South Africa) |
223 | | tr | Turkish |
224 | | tr-TR | Turkish (Turkey) |
225 | | tt | Tatar |
226 | | tt-RU | Tatar (Russia) |
227 | | ts | Tsonga |
228 | | uk | Ukrainian |
229 | | uk-UA | Ukrainian (Ukraine) |
230 | | ur | Urdu |
231 | | ur-PK | Urdu (Islamic Republic of Pakistan) |
232 | | uz | Uzbek (Latin) |
233 | | uz-UZ | Uzbek (Latin) (Uzbekistan) |
234 | | uz-UZ | Uzbek (Cyrillic) (Uzbekistan) |
235 | | vi | Vietnamese |
236 | | vi-VN | Vietnamese (Viet Nam) |
237 | | xh | Xhosa |
238 | | xh-ZA | Xhosa (South Africa) |
239 | | zh | Chinese |
240 | | zh-CN | Chinese (S) |
241 | | zh-HK | Chinese (Hong Kong) |
242 | | zh-MO | Chinese (Macau) |
243 | | zh-SG | Chinese (Singapore) |
244 | | zh-TW | Chinese (T) |
245 | | zu | Zulu |
246 | | zu-ZA | Zulu (South Africa) |
247 |
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 | }
--------------------------------------------------------------------------------