summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxXJSONDeruloXx <danielhimebauch@gmail.com>2025-01-30 13:06:17 -0500
committerxXJSONDeruloXx <danielhimebauch@gmail.com>2025-01-30 13:06:17 -0500
commita3c6d666684399e3157d6ba03ef0b489e6a46639 (patch)
treed8e616f049ef9658e7eb73e6d1a55a32e3e58aa1
parentd53edf4f5bdc7348448cb05a6b161ebe9bb7e107 (diff)
downloadDecky-Framegen-a3c6d666684399e3157d6ba03ef0b489e6a46639.tar.gz
Decky-Framegen-a3c6d666684399e3157d6ba03ef0b489e6a46639.zip
feat: reqork python to install fgmod direct from bundled assets
-rw-r--r--defaults/assets/DisableNvidiaSignatureChecks.reg (renamed from defaults/DisableNvidiaSignatureChecks.reg)0
-rw-r--r--defaults/assets/RestoreNvidiaSignatureChecks.reg (renamed from defaults/RestoreNvidiaSignatureChecks.reg)0
-rw-r--r--defaults/assets/_nvngx.dll (renamed from defaults/_nvngx.dll)bin478976 -> 478976 bytes
-rw-r--r--defaults/assets/amd_fidelityfx_dx12.dll (renamed from defaults/amd_fidelityfx_dx12.dll)bin6475480 -> 6475480 bytes
-rw-r--r--defaults/assets/amd_fidelityfx_vk.dll (renamed from defaults/amd_fidelityfx_vk.dll)bin9188864 -> 9188864 bytes
-rw-r--r--defaults/assets/d3dcompiler_47.dll (renamed from defaults/d3dcompiler_47.dll)bin4346120 -> 4346120 bytes
-rw-r--r--defaults/assets/dlss-enabler-upscaler.dll (renamed from defaults/dlss-enabler-upscaler.dll)bin21532160 -> 21532160 bytes
-rw-r--r--defaults/assets/dlss-enabler.dll (renamed from defaults/dlss-enabler.dll)bin1143808 -> 1143808 bytes
-rw-r--r--defaults/assets/dlssg_to_fsr3.ini (renamed from defaults/dlssg_to_fsr3.ini)0
-rw-r--r--defaults/assets/dlssg_to_fsr3_amd_is_better-3.0.dll (renamed from defaults/dlssg_to_fsr3_amd_is_better-3.0.dll)bin13502464 -> 13502464 bytes
-rw-r--r--defaults/assets/dlssg_to_fsr3_amd_is_better.dll (renamed from defaults/dlssg_to_fsr3_amd_is_better.dll)bin8822272 -> 8822272 bytes
-rw-r--r--defaults/assets/dxgi.dll (renamed from defaults/dxgi.dll)bin73728 -> 73728 bytes
-rw-r--r--defaults/assets/dxvk.conf (renamed from defaults/dxvk.conf)0
-rw-r--r--defaults/assets/fakenvapi.ini (renamed from defaults/fakenvapi.ini)0
-rwxr-xr-xdefaults/assets/fgmod (renamed from defaults/fgmod)0
-rwxr-xr-xdefaults/assets/fgmod-uninstaller.sh2
-rw-r--r--defaults/assets/libxess.dll (renamed from defaults/libxess.dll)bin67095056 -> 67095056 bytes
-rw-r--r--defaults/assets/nvapi64.dll (renamed from defaults/nvapi64.dll)bin544256 -> 544256 bytes
-rw-r--r--defaults/assets/nvngx-wrapper.dll (renamed from defaults/nvngx-wrapper.dll)bin189952 -> 189952 bytes
-rw-r--r--defaults/assets/nvngx.ini (renamed from defaults/nvngx.ini)0
-rwxr-xr-xdefaults/fgmod-uninstaller.sh105
-rw-r--r--main.py109
22 files changed, 40 insertions, 176 deletions
diff --git a/defaults/DisableNvidiaSignatureChecks.reg b/defaults/assets/DisableNvidiaSignatureChecks.reg
index 88ea81f..88ea81f 100644
--- a/defaults/DisableNvidiaSignatureChecks.reg
+++ b/defaults/assets/DisableNvidiaSignatureChecks.reg
diff --git a/defaults/RestoreNvidiaSignatureChecks.reg b/defaults/assets/RestoreNvidiaSignatureChecks.reg
index b9e0529..b9e0529 100644
--- a/defaults/RestoreNvidiaSignatureChecks.reg
+++ b/defaults/assets/RestoreNvidiaSignatureChecks.reg
diff --git a/defaults/_nvngx.dll b/defaults/assets/_nvngx.dll
index c9dc6fd..c9dc6fd 100644
--- a/defaults/_nvngx.dll
+++ b/defaults/assets/_nvngx.dll
Binary files differ
diff --git a/defaults/amd_fidelityfx_dx12.dll b/defaults/assets/amd_fidelityfx_dx12.dll
index ddbef16..ddbef16 100644
--- a/defaults/amd_fidelityfx_dx12.dll
+++ b/defaults/assets/amd_fidelityfx_dx12.dll
Binary files differ
diff --git a/defaults/amd_fidelityfx_vk.dll b/defaults/assets/amd_fidelityfx_vk.dll
index 7b8c926..7b8c926 100644
--- a/defaults/amd_fidelityfx_vk.dll
+++ b/defaults/assets/amd_fidelityfx_vk.dll
Binary files differ
diff --git a/defaults/d3dcompiler_47.dll b/defaults/assets/d3dcompiler_47.dll
index b120261..b120261 100644
--- a/defaults/d3dcompiler_47.dll
+++ b/defaults/assets/d3dcompiler_47.dll
Binary files differ
diff --git a/defaults/dlss-enabler-upscaler.dll b/defaults/assets/dlss-enabler-upscaler.dll
index ec58795..ec58795 100644
--- a/defaults/dlss-enabler-upscaler.dll
+++ b/defaults/assets/dlss-enabler-upscaler.dll
Binary files differ
diff --git a/defaults/dlss-enabler.dll b/defaults/assets/dlss-enabler.dll
index a43fdc2..a43fdc2 100644
--- a/defaults/dlss-enabler.dll
+++ b/defaults/assets/dlss-enabler.dll
Binary files differ
diff --git a/defaults/dlssg_to_fsr3.ini b/defaults/assets/dlssg_to_fsr3.ini
index c90f1f8..c90f1f8 100644
--- a/defaults/dlssg_to_fsr3.ini
+++ b/defaults/assets/dlssg_to_fsr3.ini
diff --git a/defaults/dlssg_to_fsr3_amd_is_better-3.0.dll b/defaults/assets/dlssg_to_fsr3_amd_is_better-3.0.dll
index e8fc079..e8fc079 100644
--- a/defaults/dlssg_to_fsr3_amd_is_better-3.0.dll
+++ b/defaults/assets/dlssg_to_fsr3_amd_is_better-3.0.dll
Binary files differ
diff --git a/defaults/dlssg_to_fsr3_amd_is_better.dll b/defaults/assets/dlssg_to_fsr3_amd_is_better.dll
index 4f38e0e..4f38e0e 100644
--- a/defaults/dlssg_to_fsr3_amd_is_better.dll
+++ b/defaults/assets/dlssg_to_fsr3_amd_is_better.dll
Binary files differ
diff --git a/defaults/dxgi.dll b/defaults/assets/dxgi.dll
index 5475a27..5475a27 100644
--- a/defaults/dxgi.dll
+++ b/defaults/assets/dxgi.dll
Binary files differ
diff --git a/defaults/dxvk.conf b/defaults/assets/dxvk.conf
index a7d3619..a7d3619 100644
--- a/defaults/dxvk.conf
+++ b/defaults/assets/dxvk.conf
diff --git a/defaults/fakenvapi.ini b/defaults/assets/fakenvapi.ini
index f1f3c0c..f1f3c0c 100644
--- a/defaults/fakenvapi.ini
+++ b/defaults/assets/fakenvapi.ini
diff --git a/defaults/fgmod b/defaults/assets/fgmod
index 762f9bc..762f9bc 100755
--- a/defaults/fgmod
+++ b/defaults/assets/fgmod
diff --git a/defaults/assets/fgmod-uninstaller.sh b/defaults/assets/fgmod-uninstaller.sh
index 7bff63a..9f9c483 100755
--- a/defaults/assets/fgmod-uninstaller.sh
+++ b/defaults/assets/fgmod-uninstaller.sh
@@ -19,7 +19,7 @@ if [ "$#" -lt 1 ]; then
fi
game_path=""
-mod_path="/usr/share/fgmod"
+mod_path="/home/deck/fgmod"
# Locate the game folder based on the first argument
if [[ "$1" == *.exe ]]; then
diff --git a/defaults/libxess.dll b/defaults/assets/libxess.dll
index 50b9a94..50b9a94 100644
--- a/defaults/libxess.dll
+++ b/defaults/assets/libxess.dll
Binary files differ
diff --git a/defaults/nvapi64.dll b/defaults/assets/nvapi64.dll
index f3d8051..f3d8051 100644
--- a/defaults/nvapi64.dll
+++ b/defaults/assets/nvapi64.dll
Binary files differ
diff --git a/defaults/nvngx-wrapper.dll b/defaults/assets/nvngx-wrapper.dll
index 009df09..009df09 100644
--- a/defaults/nvngx-wrapper.dll
+++ b/defaults/assets/nvngx-wrapper.dll
Binary files differ
diff --git a/defaults/nvngx.ini b/defaults/assets/nvngx.ini
index ff2def0..ff2def0 100644
--- a/defaults/nvngx.ini
+++ b/defaults/assets/nvngx.ini
diff --git a/defaults/fgmod-uninstaller.sh b/defaults/fgmod-uninstaller.sh
deleted file mode 100755
index 9f9c483..0000000
--- a/defaults/fgmod-uninstaller.sh
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env bash
-
-set -x # Enable debugging
-exec > >(tee -i /tmp/prepare.log) 2>&1 # Log output and errors
-
-error_exit() {
- echo "$1"
- if [[ -n $STEAM_ZENITY ]]; then
- $STEAM_ZENITY --error --text "$1"
- else
- zenity --error --text "$1"
- fi
- exit 1
-}
-
-if [ "$#" -lt 1 ]; then
- echo "Usage: $0 program [program_arguments...]"
- exit 1
-fi
-
-game_path=""
-mod_path="/home/deck/fgmod"
-
-# Locate the game folder based on the first argument
-if [[ "$1" == *.exe ]]; then
- exe_folder_path=$(dirname "$1")
-else
- for arg in "$@"; do
- if [[ "$arg" == *.exe ]]; then
- # Handle special cases for specific games
- [[ "$arg" == *"Cyberpunk 2077"* ]] && arg=${arg//REDprelauncher.exe/bin/x64/Cyberpunk2077.exe}
- [[ "$arg" == *"Witcher 3"* ]] && arg=${arg//REDprelauncher.exe/bin/x64_dx12/witcher3.exe}
- [[ "$arg" == *"HITMAN 3"* ]] && arg=${arg//Launcher.exe/Retail/HITMAN3.exe}
- [[ "$arg" == *"HITMAN World of Assassination"* ]] && arg=${arg//Launcher.exe/Retail/HITMAN3.exe}
- [[ "$arg" == *"SYNCED"* ]] && arg=${arg//Launcher\/sop_launcher.exe/SYNCED.exe}
- [[ "$arg" == *"2KLauncher"* ]] && arg=${arg//2KLauncher\/LauncherPatcher.exe/DoesntMatter.exe}
- [[ "$arg" == *"Warhammer 40,000 DARKTIDE"* ]] && arg=${arg//launcher\/Launcher.exe/binaries/Darktide.exe}
- [[ "$arg" == *"Warhammer Vermintide 2"* ]] && arg=${arg//launcher\/Launcher.exe/binaries_dx12/vermintide2_dx12.exe}
- [[ "$arg" == *"Satisfactory"* ]] && arg=${arg//FactoryGameSteam.exe/Engine/Binaries/Win64/FactoryGameSteam-Win64-Shipping.exe}
- exe_folder_path=$(dirname "$arg")
- break
- fi
- done
-fi
-
-# Fallback to STEAM_COMPAT_INSTALL_PATH when no path was found
-if [[ ! -d $exe_folder_path ]] && [[ -n ${STEAM_COMPAT_INSTALL_PATH} ]]; then
- exe_folder_path=${STEAM_COMPAT_INSTALL_PATH}
-fi
-
-# Check for Unreal Engine game paths
-if [[ -d "$exe_folder_path/Engine" ]]; then
- ue_exe_path=$(find "$exe_folder_path" -maxdepth 4 -mindepth 4 -path "*Binaries/Win64/*.exe" -not -path "*/Engine/*" | head -1)
- exe_folder_path=$(dirname "$ue_exe_path")
-fi
-
-# Verify the game folder exists
-if [[ ! -d $exe_folder_path ]]; then
- error_exit "Unable to locate the game folder. Ensure the game is installed and the path is correct."
-fi
-
-# Avoid operating on the uninstaller's own directory
-script_dir=$(dirname "$(realpath "$0")")
-if [[ "$(realpath "$exe_folder_path")" == "$script_dir" ]]; then
- error_exit "The target directory matches the script's directory. Aborting to prevent accidental deletion."
-fi
-
-# Change to the game directory
-cd "$exe_folder_path" || error_exit "Failed to change directory to $exe_folder_path"
-
-# Verify current directory before proceeding
-if [[ "$(pwd)" != "$exe_folder_path" ]]; then
- error_exit "Unexpected working directory: $(pwd)"
-fi
-
-# Log the resolved exe_folder_path for debugging
-echo "Resolved exe_folder_path: $exe_folder_path" >> /tmp/fgmod-uninstaller.log
-
-# Perform uninstallation
-rm -f "dlss-enabler.dll" "dxgi.dll" "nvngx-wrapper.dll" "_nvngx.dll"
-rm -f "dlssg_to_fsr3_amd_is_better.dll" "dlssg_to_fsr3_amd_is_better-3.0.dll"
-rm -f "dlss-enabler-upscaler.dll" "nvngx.ini" "libxess.dll"
-rm -f "d3dcompiler_47.dll" "amd_fidelityfx_dx12.dll" "amd_fidelityfx_vk.dll"
-rm -f "nvapi64.dll" "fakenvapi.ini" "OptiScaler.log"
-rm -f "dlss-enabler.log" "dlssg_to_fsr3.log" "fakenvapi.log"
-
-# Restore original DLLs if they exist
-mv -f "libxess.dll.b" "libxess.dll" 2>/dev/null
-mv -f "d3dcompiler_47.dll.b" "d3dcompiler_47.dll" 2>/dev/null
-mv -f "amd_fidelityfx_dx12.dll.b" "amd_fidelityfx_dx12.dll" 2>/dev/null
-mv -f "amd_fidelityfx_vk.dll.b" "amd_fidelityfx_vk.dll" 2>/dev/null
-
-# Self-remove uninstaller (now optional for safety)
-echo "Uninstaller self-removal skipped for safety. Remove manually if needed."
-
-echo "fgmod removed from this game."
-
-if [[ $# -gt 1 ]]; then
- echo "Launching the game..."
- export SteamDeck=0
- export WINEDLLOVERRIDES="${WINEDLLOVERRIDES},dxgi=n,b"
- exec "$@"
-else
- echo "Uninstallation complete. No game specified to run."
-fi \ No newline at end of file
diff --git a/main.py b/main.py
index 6f15132..fc714ba 100644
--- a/main.py
+++ b/main.py
@@ -22,85 +22,57 @@ class Plugin:
return {"status": "success", "output": result.stdout}
except subprocess.CalledProcessError as e:
return {"status": "error", "message": str(e), "output": e.output}
+ except Exception as e:
+ return {"status": "error", "message": f"Unexpected error: {str(e)}"}
async def run_install_fgmod(self) -> dict:
try:
- assets_dir = Path(decky.DECKY_PLUGIN_DIR) / "assets"
- downloads_dir = Path(decky.HOME) / "Downloads"
+ defaults_dir = Path(decky.DECKY_PLUGIN_DIR) / "assets"
+ fgmod_dir = Path(decky.HOME) / "fgmod"
+
+ if not defaults_dir.exists():
+ decky.logger.error(f"Defaults directory not found: {defaults_dir}")
+ return {"status": "error", "message": f"Defaults directory not found: {defaults_dir}"}
- if not assets_dir.exists():
- decky.logger.error(f"Assets directory not found: {assets_dir}")
- return {
- "status": "error",
- "message": f"Assets directory not found: {assets_dir}"
- }
+ fgmod_dir.mkdir(parents=True, exist_ok=True)
- downloads_dir.mkdir(parents=True, exist_ok=True)
+ files_to_copy = [
+ "amd_fidelityfx_dx12.dll", "dlssg_to_fsr3_amd_is_better.dll", "libxess.dll",
+ "amd_fidelityfx_vk.dll", "dlssg_to_fsr3.ini",
+ "d3dcompiler_47.dll", "dxgi.dll", "nvapi64.dll",
+ "DisableNvidiaSignatureChecks.reg", "dxvk.conf", "_nvngx.dll",
+ "dlss-enabler.dll", "fakenvapi.ini", "nvngx.ini",
+ "dlss-enabler-upscaler.dll", "fgmod", "nvngx-wrapper.dll",
+ "dlssg_to_fsr3_amd_is_better-3.0.dll", "fgmod-uninstaller.sh", "RestoreNvidiaSignatureChecks.reg"
+ ]
- files_to_copy = ["prepare.sh", "fgmod.sh", "fgmod-uninstaller.sh"]
for file_name in files_to_copy:
- src = assets_dir / file_name
+ src = defaults_dir / file_name
+ dest = fgmod_dir / file_name
if not src.exists():
decky.logger.error(f"Required file missing: {src}")
- return {
- "status": "error",
- "message": f"Required file missing: {file_name}"
- }
-
- dest = downloads_dir / file_name
+ return {"status": "error", "message": f"Required file missing: {file_name}"}
dest.write_bytes(src.read_bytes())
dest.chmod(0o755)
- prepare_script = downloads_dir / "prepare.sh"
- process = subprocess.run(
- ["/bin/bash", str(prepare_script)],
- capture_output=True,
- text=True,
- timeout=300
- )
+ # Ensure the uninstaller script is executable
+ uninstaller_script = fgmod_dir / "fgmod-uninstaller.sh"
+ uninstaller_script.chmod(0o755)
- fgmod_path = Path(decky.HOME) / "fgmod"
- fgmod_path.mkdir(parents=True, exist_ok=True)
-
- decky.logger.info(f"Script output:\n{process.stdout}")
- decky.logger.error(f"Script errors:\n{process.stderr}")
-
- if "All done!" not in process.stdout:
- decky.logger.error("Installation did not complete successfully")
- return {
- "status": "error",
- "message": process.stdout + process.stderr
- }
-
- return {
- "status": "success",
- "output": "You can now replace DLSS with FSR Frame Gen!"
- }
-
- except subprocess.TimeoutExpired:
- decky.logger.error("Installation script timed out")
- return {
- "status": "error",
- "message": "Installation timed out"
- }
- except subprocess.CalledProcessError as e:
- decky.logger.error(f"Script error: {e.stderr}")
- return {
- "status": "error",
- "message": e.stderr
- }
+ # Verify all files exist in fgmod directory
+ missing_files = [file for file in files_to_copy if not (fgmod_dir / file).exists()]
+ if missing_files:
+ return {"status": "error", "message": f"Missing files: {', '.join(missing_files)}"}
+
+ return {"status": "success", "output": "You can now replace DLSS with FSR Frame Gen!"}
except Exception as e:
- decky.logger.error(f"Unexpected error: {str(e)}")
- return {
- "status": "error",
- "message": str(e)
- }
+ return {"status": "error", "message": f"Unexpected error: {str(e)}"}
async def check_fgmod_path(self) -> dict:
- path = Path(decky.HOME) / "fgmod"
+ fgmod_dir = Path(decky.HOME) / "fgmod"
required_files = [
"amd_fidelityfx_dx12.dll", "dlssg_to_fsr3_amd_is_better.dll", "libxess.dll",
- "amd_fidelityfx_vk.dll", "dlssg_to_fsr3.ini", "licenses",
+ "amd_fidelityfx_vk.dll", "dlssg_to_fsr3.ini",
"d3dcompiler_47.dll", "dxgi.dll", "nvapi64.dll",
"DisableNvidiaSignatureChecks.reg", "dxvk.conf", "_nvngx.dll",
"dlss-enabler.dll", "fakenvapi.ini", "nvngx.ini",
@@ -108,19 +80,16 @@ class Plugin:
"dlssg_to_fsr3_amd_is_better-3.0.dll", "fgmod-uninstaller.sh", "RestoreNvidiaSignatureChecks.reg"
]
- if path.exists():
- for file_name in required_files:
- if not path.joinpath(file_name).exists():
- return {"exists": False}
- return {"exists": True}
- else:
+ if not fgmod_dir.exists():
return {"exists": False}
- # New method to list installed Steam games
+ missing_files = [file for file in required_files if not (fgmod_dir / file).exists()]
+ return {"exists": not missing_files, "missing_files": missing_files}
+
async def list_installed_games(self) -> dict:
try:
steam_root = Path(decky.HOME) / ".steam" / "steam"
- library_file = Path(steam_root) / "steamapps" / "libraryfolders.vdf"
+ library_file = steam_root / "steamapps" / "libraryfolders.vdf"
if not library_file.exists():
return {"status": "error", "message": "libraryfolders.vdf not found"}
@@ -156,4 +125,4 @@ class Plugin:
return {"status": "success", "games": filtered_games}
except Exception as e:
- return {"status": "error", "message": str(e)}
+ return {"status": "error", "message": str(e)} \ No newline at end of file