From 5c5e6d60a17ee2072362a00fa8517b42a96128a4 Mon Sep 17 00:00:00 2001 From: futile Date: Fri, 5 Sep 2025 16:09:24 +0100 Subject: [PATCH] add option to launch legacy version of the game & fix epic games launch urls --- src/features/launch.rs | 28 ++++++++++++++++++++-------- src/gui/app.rs | 10 +++++++++- src/gui/settings.rs | 8 ++++++++ 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/features/launch.rs b/src/features/launch.rs index 11191d3..f9759db 100644 --- a/src/features/launch.rs +++ b/src/features/launch.rs @@ -1,3 +1,4 @@ +use crate::gui::settings::LaunchVersion; use serde::{Deserialize, Serialize}; use std::{path::PathBuf, process::Command}; use strum::{Display, EnumIter}; @@ -18,16 +19,24 @@ pub struct Launch { pub selected: Platform, } -pub fn launch(platform: &Platform) { +pub fn launch(platform: &Platform, version: &LaunchVersion) { match platform { Platform::Steam => { - let _ = open::that_detached("steam://run/3240220"); + let steam_url = if *version == LaunchVersion::Enhanced { + "steam://run/3240220" + } else { + "steam://run/271590" + }; + let _ = open::that_detached(steam_url); } Platform::Rockstar => { let hklm = RegKey::predef(HKEY_LOCAL_MACHINE); - let Ok(gta_v_enhanced) = - hklm.open_subkey(r"SOFTWARE\WOW6432Node\Rockstar Games\GTAV Enhanced") - else { + let rockstar_url = if *version == LaunchVersion::Enhanced { + r"SOFTWARE\WOW6432Node\Rockstar Games\GTAV Enhanced" + } else { + r"SOFTWARE\WOW6432Node\Rockstar Games\Grand Theft Auto V" + }; + let Ok(gta_v_enhanced) = hklm.open_subkey(rockstar_url) else { return; }; let Ok(install_folder): Result = @@ -40,9 +49,12 @@ pub fn launch(platform: &Platform) { let _ = Command::new(play_gtav_path).spawn(); } Platform::Epic => { - let _ = open::that_detached( - "com.epicgames.launcher://apps/331226ba7c944720baa99103cb1fe80c?action=launch&silent=true", - ); + let epic_url = if *version == LaunchVersion::Enhanced { + "com.epicgames.launcher://apps/8769e24080ea413b8ebca3f1b8c50951?action=launch&silent=true" + } else { + "com.epicgames.launcher://apps/9d2d0eb64d5c44529cece33fe2a46482?action=launch&silent=true" + }; + let _ = open::that_detached(epic_url); } } } diff --git a/src/gui/app.rs b/src/gui/app.rs index eba534a..ce822c3 100644 --- a/src/gui/app.rs +++ b/src/gui/app.rs @@ -95,7 +95,7 @@ impl App { ui.header("Game"); ui.horizontal(|ui| { if ui.button("Launch").clicked() { - features::launch::launch(&self.launch.selected); + features::launch::launch(&self.launch.selected, &self.settings.launch_version); } egui::ComboBox::from_id_salt("Launch") .selected_text(self.launch.selected.to_string()) @@ -190,6 +190,14 @@ impl App { } fn show_settings_stage(&mut self, ctx: &egui::Context, ui: &mut egui::Ui) { + ui.horizontal(|ui| { + ui.label("Launch version"); + egui::ComboBox::from_id_salt("Launch version") + .selected_text(self.settings.launch_version.to_string()) + .show_ui(ui, |ui| { + ui.build_menu(&mut self.settings.launch_version); + }); + }); ui.horizontal(|ui| { let selection = self.settings.theme; ui.label("Theme"); diff --git a/src/gui/settings.rs b/src/gui/settings.rs index 8eb8e47..3c5e98c 100644 --- a/src/gui/settings.rs +++ b/src/gui/settings.rs @@ -2,6 +2,13 @@ use crate::util::win; use serde::{Deserialize, Serialize}; use strum::{Display, EnumIter}; +#[derive(Clone, Copy, Debug, Default, Display, PartialEq, Eq, Serialize, Deserialize, EnumIter)] +pub enum LaunchVersion { + #[default] + Enhanced, + Legacy, +} + #[derive(Clone, Copy, Debug, Default, Display, PartialEq, Eq, Serialize, Deserialize, EnumIter)] pub enum Theme { #[default] @@ -37,6 +44,7 @@ impl From for catppuccin_egui::Theme { #[derive(Clone, Debug, Default, Serialize, Deserialize)] pub struct Settings { + pub launch_version: LaunchVersion, pub theme: Theme, pub start_elevated: bool, }