Compare commits

..

No commits in common. "45f75ce86fe4d6d3225a8c1a3e02667762d3eeb6" and "3717bc50b95fb3255b87fa381d68cc68fda1e6cd" have entirely different histories.

7 changed files with 53 additions and 18 deletions

View File

@ -93,6 +93,8 @@ Frank Bartholomai
SPECIAL EDITION CONVERSION AND MAINTENANCE SPECIAL EDITION CONVERSION AND MAINTENANCE
Eddoursul Eddoursul
OverDev
gavrant
TRANSLATION - ENGLISH VERSION TRANSLATION - ENGLISH VERSION
Nicolas Lietzau Nicolas Lietzau
@ -210,9 +212,6 @@ Ander "Kyku" Jimenez
TRANSLATION - KOREAN VERSION TRANSLATION - KOREAN VERSION
dhrgusdlrns dhrgusdlrns
TRANSLATION - CZECH VERSION
Dogzey
PARTNERS PARTNERS
2Day Productions Berlin 2Day Productions Berlin
Nevigo (Articy Draft) Nevigo (Articy Draft)
@ -609,8 +608,6 @@ gavrant
duncanlarsen1 duncanlarsen1
SPECIAL EDITION CONTRIBUTORS SPECIAL EDITION CONTRIBUTORS
OverDev
gavrant
LoAndEvolve LoAndEvolve
jdsmith2816 jdsmith2816
H4wkeye H4wkeye
@ -625,8 +622,6 @@ sitch
Hortophyll Hortophyll
Wildscribe Wildscribe
TieflingGrimoire TieflingGrimoire
LevinLozenges
Lirk
BUGTRACKER ADMINISTRATION BUGTRACKER ADMINISTRATION
Dennis Weich Dennis Weich
@ -652,14 +647,12 @@ NifSkope by NifTools
NifMerge by Turulo NifMerge by Turulo
ChunkMerge by skyfox69 ChunkMerge by skyfox69
FNIS by Fore FNIS by Fore
Sniff by zilav
Unfuzer by greentea101 Unfuzer by greentea101
UIExtensions by expired6978 UIExtensions by expired6978
Flat Map Markers SSE, Stay At The System Page, Yes Im Sure by Ryan McKenzie Flat Map Markers SSE, Stay At The System Page, Yes Im Sure by Ryan McKenzie
powerofthree's Tweaks powerofthree's Tweaks
CommonLibSSE-GG - MIT-licensed fork of CommonLibSSE-NG, with RE by Ryan McKenzie, powerofthree, Charmed Baryon, alandtse, Qudix, Maxsu, doodlum, and others CommonLibSSE-NG and general reverse engineering by Ryan McKenzie, powerofthree, Charmed Baryon, alandtse, Qudix, Maxsu, doodlum, and others
Crash Logger by Ryan McKenzie, alandtse, and others Crash Logger by Ryan McKenzie, alandtse, and others
Widescreen Scale Removed by SkyHorizon
Better Dialogue Controls by ecirbaf Better Dialogue Controls by ecirbaf
Unofficial Enderal Port (fs.dll) by Hishutup Unofficial Enderal Port (fs.dll) by Hishutup
Shorter Grass by Fhaarkas Shorter Grass by Fhaarkas

View File

@ -24,7 +24,10 @@ Beware, spoilers ahead!
- Removed the Blueprint keyword from the Dreamflower Elixir Recipe to avoid sorting it into the blueprint storage (reported by Fubz). - Removed the Blueprint keyword from the Dreamflower Elixir Recipe to avoid sorting it into the blueprint storage (reported by Fubz).
- Fixed an exploit allowing to collect more gold from containers (reported by LevinLozenges). - Fixed an exploit allowing to collect more gold from containers (reported by LevinLozenges).
- All localizations have been brought up to date. - All localizations have been brought up to date.
Engine patches:
- Automatically detects and warns about form type collisions when using incompatible Skyrim mods. - Automatically detects and warns about form type collisions when using incompatible Skyrim mods.
- Included GOG Memory (VRAM) Leak Fix by DwemerEngineer.
Lirk: Lirk:
- Fixed several issues with weapon impact sounds. - Fixed several issues with weapon impact sounds.

View File

@ -8,5 +8,6 @@ ForceBorderless = true
AttachLightHitEffectCrashFix = true AttachLightHitEffectCrashFix = true
AutoScaleHeroMenu = true AutoScaleHeroMenu = true
WarnFormTypeCollisions = true WarnFormTypeCollisions = true
GogVramLeakFix = true
MenuAspectRatioFix = true MenuAspectRatioFix = true
LoadScreenFrameFix = true LoadScreenFrameFix = true

View File

@ -15,6 +15,7 @@
#include "Patches/AttachLightHitEffectCrash.h" #include "Patches/AttachLightHitEffectCrash.h"
#include "Patches/PluginsTxtPatch.h" #include "Patches/PluginsTxtPatch.h"
#include "Patches/FormTypeCollisionDetector.h" #include "Patches/FormTypeCollisionDetector.h"
#include "Patches/GogVramLeakFix.h"
#include "Patches/ForceLanguage.h" #include "Patches/ForceLanguage.h"
#include "Patches/MenuAspectRatioFix.h" #include "Patches/MenuAspectRatioFix.h"
@ -31,6 +32,7 @@ static std::map<std::string, bool> g_settings{
{ "ForceBorderless", true }, { "ForceBorderless", true },
{ "AttachLightHitEffectCrashFix", true }, { "AttachLightHitEffectCrashFix", true },
{ "AutoScaleHeroMenu", true }, { "AutoScaleHeroMenu", true },
{ "GogVramLeakFix", true },
{ "MenuAspectRatioFix", true }, { "MenuAspectRatioFix", true },
{ "LoadScreenFrameFix", true } { "LoadScreenFrameFix", true }
}; };
@ -73,6 +75,11 @@ namespace {
if (message->type == MessagingInterface::kPostLoad) { if (message->type == MessagingInterface::kPostLoad) {
if (!REL::Module::IsVR()) { if (!REL::Module::IsVR()) {
if (g_settings.at("GogVramLeakFix") && REL::Module::get().version() == REL::Version(1, 6, 1179, 0) && !GetLoadInterface()->GetPluginInfo("GOG-Leak-Fix")) {
logger::info("Installing GOG VRAM leak fix...");
GogVramLeakFix::Install();
}
if (g_settings.at("AttachLightHitEffectCrashFix")) { if (g_settings.at("AttachLightHitEffectCrashFix")) {
logger::info("Installing light attach crash fix..."); logger::info("Installing light attach crash fix...");
AttachLightHitEffectCrash::Install(); AttachLightHitEffectCrash::Install();

View File

@ -42,7 +42,7 @@ namespace SKSE::stl
// a jump back into the original, so T::func is a callable stand-in for the untouched function. // a jump back into the original, so T::func is a callable stand-in for the untouched function.
// BYTES must cover complete, position-independent instructions and be at least 5. // BYTES must cover complete, position-independent instructions and be at least 5.
// Costs 14 bytes of trampoline for the branch island plus BYTES + 14 for the stub. // Costs 14 bytes of trampoline for the branch island plus BYTES + 14 for the stub.
// Technique by Nukem and po3. // Thanks Nukem and po3, via Widescreen Scale Removed by SkyHorizon (GPL-3.0).
template <class T, std::size_t BYTES> template <class T, std::size_t BYTES>
void hook_function_prologue(std::uintptr_t a_src) void hook_function_prologue(std::uintptr_t a_src)
{ {

View File

@ -0,0 +1,36 @@
#pragma once
// Fix GOG VRAM leak by properly releasing Direct3D texture resources
// Based on https://github.com/SaneEngineer/GOG-Leak-Fix
namespace GogVramLeakFix
{
struct ReplaceRelease
{
static void thunk(RE::BSGraphics::Renderer* a_renderer, RE::BSGraphics::Texture* a_texture)
{
if (_InterlockedExchangeAdd(&a_texture->refCount, 0xFFFFFFFF) == 1) {
if (a_texture->resourceView) {
a_texture->resourceView->Release();
}
if (a_texture->texture) {
a_texture->texture->Release();
}
if (a_texture->UAV) {
a_texture->UAV->Release();
}
REL::Relocation<void(void*, int)> NiMemFree{ REL::RelocationID(102158, 109588) };
NiMemFree(a_texture, 0x28);
}
}
static inline REL::Relocation<decltype(thunk)> func;
};
void Install()
{
SKSE::AllocTrampoline(14);
SKSE::stl::write_thunk_jump<ReplaceRelease>(REL::RelocationID(75527, 77322).address());
logger::info("Initialized GOG VRAM Leak Fix");
}
}

View File

@ -32,9 +32,8 @@
// entries both halves of the patch collapse into the clamp: the caller already passes kNoBorder, // entries both halves of the patch collapse into the clamp: the caller already passes kNoBorder,
// so restoring the table mode is a no-op on every runtime. // so restoring the table mode is a no-op on every runtime.
// //
// The mode-restoration approach follows Widescreen Scale Removed by SkyHorizon // Based on Widescreen Scale Removed by SkyHorizon (GPL-3.0)
// (https://www.nexusmods.com/skyrimspecialedition/mods/136793). The table is re-derived from the // https://www.nexusmods.com/skyrimspecialedition/mods/136793
// 1.6.640/1.6.1170 binaries (see CLAUDE.md for the method) and the implementation is original.
namespace MenuAspectRatioFix namespace MenuAspectRatioFix
{ {
using ScaleModeType = RE::GFxMovieView::ScaleModeType; using ScaleModeType = RE::GFxMovieView::ScaleModeType;
@ -86,10 +85,6 @@ namespace MenuAspectRatioFix
{ "MagicMenu"sv, ScaleModeType::kNoBorder }, { "MagicMenu"sv, ScaleModeType::kNoBorder },
{ "MessageBox"sv, ScaleModeType::kNoBorder }, { "MessageBox"sv, ScaleModeType::kNoBorder },
{ "RaceSex_menu"sv, ScaleModeType::kNoBorder }, { "RaceSex_menu"sv, ScaleModeType::kNoBorder },
// The one menu with no direct LoadMovie call site: its ctor queues a task through the
// deferred-load wrapper, and the task's Run() calls the hooked LoadMovie. kNoBorder up
// to 1.6.640, kExactFit from 1.6.1130 (checked 1.5.97, 1.6.640, 1.6.117x, 1.7.99).
{ "StatsMenu"sv, ScaleModeType::kNoBorder }, { "StatsMenu"sv, ScaleModeType::kNoBorder },
{ "TrainingMenu"sv, ScaleModeType::kNoBorder }, { "TrainingMenu"sv, ScaleModeType::kNoBorder },