Compare commits

...

14 Commits
1.0.1 ... main

Author SHA1 Message Date
Julian 12427d0790
1.1.1 2023-03-03 17:15:04 -05:00
Julian d479e1637c
update readme 2023-02-07 13:04:23 -05:00
Julian d03f66fe75
update readme 2023-02-07 10:20:02 -05:00
Julian eddebdc307
shit 2023-02-06 18:37:33 -05:00
Julian f50f63cf28
didn't actually need that 2023-02-06 18:37:13 -05:00
Julian e9a5e56a9c
1.1.0 2023-02-06 18:35:55 -05:00
Julian c1dca873c1
just bumping for the path combine fix 2023-02-06 17:47:52 -05:00
Julian c6a5b32ba7
add badge 2023-02-06 12:30:32 -05:00
Julian f485c446cf
god cannot hear my screams 2023-02-06 12:14:08 -05:00
Julian 90983c5f76
shit 2023-02-06 12:09:10 -05:00
Julian aba63c43bc
wp 2023-02-06 11:35:40 -05:00
Julian 51b55c9fa0
bro MADE MALWARE 2023-02-06 09:33:42 -05:00
Julian c992ca4714
Fix your PC from shutting off (lmao wp) 2023-02-06 09:02:37 -05:00
Julian e0968bb95c
forgor to license it 2023-02-05 22:20:37 -05:00
4 changed files with 84 additions and 21 deletions

View File

@ -2,10 +2,13 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net4.7.2</TargetFramework>
<Version>1.0.1</Version>
<Version>1.1.1</Version>
</PropertyGroup>
<ItemGroup>
<Reference Include="PresentationFramework" />
<Reference Include="System.IO.Compression" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Lib.Harmony" Version="2.2.2" />
</ItemGroup>
</Project>

View File

@ -1,15 +1,17 @@
using System;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Reflection;
using HarmonyLib;
namespace DeezShade {
public class Program {
public static void Main(string[] args) {
Console.WriteLine("DeezShade v1.0.0, by NotNet and friends");
var version = Assembly.GetExecutingAssembly().GetName().Version;
Console.WriteLine($"DeezShade v{version}, by NotNet and friends");
Console.WriteLine("Built for GShade v4.1.1.");
Console.Write("Enter the path to your game install: ");
var gameInstall = Console.ReadLine();
@ -34,21 +36,15 @@ namespace DeezShade {
}
}
var installerUrl =
"https://github.com/Mortalitas/GShade/releases/latest/download/GShade.Latest.Installer.exe";
var zipUrl = "https://github.com/Mortalitas/GShade/releases/latest/download/GShade.Latest.zip";
var installerUrl = "https://gshade.org/releases/GShade.Latest.Installer.exe";
var exePath = tempPath + "GShade.Latest.Installer.exe";
var zipPath = tempPath + "GShade.Latest.zip";
Console.WriteLine("Downloading GShade installer...");
using (var client = new WebClient()) {
client.DownloadFile(installerUrl, exePath);
client.DownloadFile(zipUrl, zipPath);
}
// I'm using the official GShade installer, am I not? :^
Console.WriteLine("Requesting new files through GShade installer...");
var assembly = Assembly.LoadFile(exePath);
var type = assembly.GetType("GShadeInstaller.App");
@ -56,13 +52,21 @@ namespace DeezShade {
type.GetField("_gsTempPath").SetValue(null, tempPath);
type.GetField("_exeParentPath").SetValue(null, gameInstall);
// Patch GShade from shutting off your computer (LMAO)
Console.WriteLine("Patching GShade malware...");
var harmony = new Harmony("com.notnite.thanks-marot");
var getProcessesByName = typeof(Process).GetMethod("GetProcessesByName", new[] { typeof(string) });
harmony.Patch(getProcessesByName, new HarmonyMethod(typeof(Program).GetMethod(nameof(ProcessDetour))));
Console.WriteLine("Requesting new files through GShade installer...");
type.GetMethod("CopyZipDeployProcess").Invoke(null, null);
type.GetMethod("PresetDownloadProcess").Invoke(null, null);
type.GetMethod("PresetInstallProcess").Invoke(null, null);
// File.Copy gives an access denied error, so let's make it ourself
var src = tempPath + "gshade-shaders";
var dst = Path.Combine(gameInstall, "gshade-shaders");
var dst = Path.Combine(gameInstall, "reshade-shaders");
void RecursiveClone(string path) {
var path2 = Path.Combine(src, path);
@ -85,20 +89,52 @@ namespace DeezShade {
Console.WriteLine("Moving shaders to game directory...");
RecursiveClone("");
Directory.CreateDirectory(gameInstall + "gshade-addons");
Directory.CreateDirectory(Path.Combine(gameInstall, "reshade-addons"));
Console.WriteLine("Extracting DLL and config...");
var zip = ZipFile.OpenRead(zipPath);
Directory.Move(Path.Combine(gameInstall, "gshade-presets"), Path.Combine(gameInstall, "reshade-presets"));
Console.WriteLine("Downloading ReShade...");
var reshadeUrl = "http://reshade.me/downloads/ReShade_Setup_5.7.0_Addon.exe";
var reshadePath = tempPath + "ReShade_Setup_5.7.0_Addon.exe";
using (var client = new WebClient()) {
client.DownloadFile(reshadeUrl, reshadePath);
}
Console.WriteLine("Installing ReShade...");
if (File.Exists(Path.Combine(gameInstall, "dxgi.dll"))) {
File.Move(Path.Combine(gameInstall, "dxgi.dll"), Path.Combine(gameInstall, "dxgi.dll.old"));
}
zip.GetEntry("GShade64.dll").ExtractToFile(gameInstall + "dxgi.dll", true);
zip.GetEntry("GShade.ini").ExtractToFile(gameInstall + "GShade.ini", true);
var reshadeProcess = new Process();
reshadeProcess.StartInfo.FileName = reshadePath;
reshadeProcess.StartInfo.Arguments =
$"\"{Path.Combine(gameInstall, "ffxiv_dx11.exe")}\" --api dxgi --headless";
reshadeProcess.Start();
var configPath = Path.Combine(gameInstall, "ReShade.ini");
if (!File.Exists(configPath)) {
Console.WriteLine("Writing ReShade config...");
var configText = @"[GENERAL]
[GENERAL]
EffectSearchPaths=.\reshade-shaders\Shaders\**
TextureSearchPaths=.\reshade-shaders\Textures\**
".Trim();
File.WriteAllText(configPath, configText);
}
Console.WriteLine("Done!\nSupport FOSS, and thank you for using DeezShade!\nPress any key to continue.");
Console.ReadKey();
}
public static bool ProcessDetour(ref Process[] __result, string processName) {
if (processName == "GShade.Installer") {
__result = Array.Empty<Process>();
return false;
}
return true;
}
}
}

22
LICENSE Normal file
View File

@ -0,0 +1,22 @@
MIT-except-for-GShade-Developers License
Copyright (c) 2023 NotNite
Permission is hereby granted, free of charge, to any person not involved with
the GShade project, obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy, modify,
merge, publish, distribute, sublicense, and/or sell copies of the Software, and
to permit persons to whom the Software is furnished to do so, subject to the
following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,10 +1,12 @@
# DeezShade
![license badge](https://img.shields.io/badge/license-%20MIT--except--for--GShade--Developers-green)
Okay, now it's just funny. With love from NotNet and friends.
DeezShade is a continuation of [GeezShade](https://git.n2.pm/NotNite/geezshade), in C#.
DeezShade is a continuation of [GeezShade](https://git.n2.pm/NotNite/geezshade), in C#. It allows you to download GShade shaders and presets while using them with ReShade.
Note that this doesn't actually install vanilla ReShade (yet) - [do that yourself](https://reshade.me/) (but get the full addon build).
Warning: This might break or be dangerous, and I don't always have time to fix it. Marot can and has done arbitrary things through DeezShade like performing a PC shutdown. Consider following [this guide](https://gist.github.com/ry00001/3e2e63b986cb0c673645ea42ffafcc26) for manual installation steps.
[CLICK HERE TO INSTALL IT.](https://git.n2.pm/NotNite/DeezShade/releases/latest)