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
Eddoursul
OverDev
gavrant
TRANSLATION - ENGLISH VERSION
Nicolas Lietzau
@ -210,9 +212,6 @@ Ander "Kyku" Jimenez
TRANSLATION - KOREAN VERSION
dhrgusdlrns
TRANSLATION - CZECH VERSION
Dogzey
PARTNERS
2Day Productions Berlin
Nevigo (Articy Draft)
@ -609,8 +608,6 @@ gavrant
duncanlarsen1
SPECIAL EDITION CONTRIBUTORS
OverDev
gavrant
LoAndEvolve
jdsmith2816
H4wkeye
@ -625,8 +622,6 @@ sitch
Hortophyll
Wildscribe
TieflingGrimoire
LevinLozenges
Lirk
BUGTRACKER ADMINISTRATION
Dennis Weich
@ -652,14 +647,12 @@ NifSkope by NifTools
NifMerge by Turulo
ChunkMerge by skyfox69
FNIS by Fore
Sniff by zilav
Unfuzer by greentea101
UIExtensions by expired6978
Flat Map Markers SSE, Stay At The System Page, Yes Im Sure by Ryan McKenzie
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
Widescreen Scale Removed by SkyHorizon
Better Dialogue Controls by ecirbaf
Unofficial Enderal Port (fs.dll) by Hishutup
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).
- Fixed an exploit allowing to collect more gold from containers (reported by LevinLozenges).
- All localizations have been brought up to date.
Engine patches:
- Automatically detects and warns about form type collisions when using incompatible Skyrim mods.
- Included GOG Memory (VRAM) Leak Fix by DwemerEngineer.
Lirk:
- Fixed several issues with weapon impact sounds.

View File

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

View File

@ -15,6 +15,7 @@
#include "Patches/AttachLightHitEffectCrash.h"
#include "Patches/PluginsTxtPatch.h"
#include "Patches/FormTypeCollisionDetector.h"
#include "Patches/GogVramLeakFix.h"
#include "Patches/ForceLanguage.h"
#include "Patches/MenuAspectRatioFix.h"
@ -31,6 +32,7 @@ static std::map<std::string, bool> g_settings{
{ "ForceBorderless", true },
{ "AttachLightHitEffectCrashFix", true },
{ "AutoScaleHeroMenu", true },
{ "GogVramLeakFix", true },
{ "MenuAspectRatioFix", true },
{ "LoadScreenFrameFix", true }
};
@ -73,6 +75,11 @@ namespace {
if (message->type == MessagingInterface::kPostLoad) {
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")) {
logger::info("Installing light attach crash fix...");
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.
// 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.
// 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>
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,
// so restoring the table mode is a no-op on every runtime.
//
// The mode-restoration approach follows Widescreen Scale Removed by SkyHorizon
// (https://www.nexusmods.com/skyrimspecialedition/mods/136793). The table is re-derived from the
// 1.6.640/1.6.1170 binaries (see CLAUDE.md for the method) and the implementation is original.
// Based on Widescreen Scale Removed by SkyHorizon (GPL-3.0)
// https://www.nexusmods.com/skyrimspecialedition/mods/136793
namespace MenuAspectRatioFix
{
using ScaleModeType = RE::GFxMovieView::ScaleModeType;
@ -86,10 +85,6 @@ namespace MenuAspectRatioFix
{ "MagicMenu"sv, ScaleModeType::kNoBorder },
{ "MessageBox"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 },
{ "TrainingMenu"sv, ScaleModeType::kNoBorder },