Skip to content

Commit b66a7dd

Browse files
authored
Merge pull request #24 from Dear-Modding-FO4/feat/more-engine-fix-ports
feat: more engine fix ports
2 parents 07f13bc + dd24342 commit b66a7dd

22 files changed

Lines changed: 1060 additions & 13 deletions

.Build/F4SE/Plugins/Addictol.toml

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ bSaveAddedSoundCategories = true
5353
# Blocks the use of incorrect COM interface initialization settings for mods.
5454
bCOMInit = true
5555

56+
# Raises the bloom render-target resolution to reduce flicker on bright pixels (sun glints, neon, fire). Cost scales with nBloomScale.
57+
bHighResBloom = false
58+
59+
# Marks the process as DPI-aware so menus and cursor track correctly on high-DPI desktops.
60+
bDpiScaling = true
61+
5662

5763
[Fixes]
5864

@@ -144,14 +150,35 @@ bWorkbenchSound = true
144150
# Removes unused ActorCause data from projectiles when a cell is unloaded to reduce save size.
145151
bActorCauseSaveBloat = true
146152

153+
# Fixes a CTD when loading animations with high-bit-set 16-bit event IDs.
154+
bAnimSignedCrash = true
155+
156+
# Fixes a startup CTD on non-English Windows installs caused by Bethesda.net response headers containing non-ASCII characters.
157+
bBethesdaNetCrash = true
158+
147159
# Fixes a crash when a shader can't be found for a given technique id.
148160
bUtilityShader = true
149161

150162
# Automatically sets PipBoy Cursor Constraints based on PipBoy resolution for controllers.
151163
bPipBoyCursorConstraints = true
152164

153-
# Fixes a CTD when loading animations with high-bit-set 16-bit event IDs.
154-
bAnimSignedCrash = true
165+
# Fixes a bug where the muzzle-flash light keeps illuminating the scene after the flash ends.
166+
bMuzzleFlashLight = true
167+
168+
# Fixes the exclusive-fullscreen Alt-Tab hang by forcing the swap chain to borderless-windowed at creation and blocking DXGI's auto Alt+Enter handler.
169+
bAltTabFullscreen = true
170+
171+
# Fixes a CTD when scrapping or wiring after a settlement mod has been removed, by cleaning up orphan power-grid entries left behind by deleted references.
172+
bPowerGridScrap = true
173+
174+
# Fixes animated statics (fans, signs, generators) that stop animating after save/load until cell unload+reload.
175+
bAnimatedStaticReload = true
176+
177+
# Fixes wrong specular lighting on the first-person viewmodel caused by the eye-position vector missing the engine's per-frame light offset.
178+
bViewmodelShading = true
179+
180+
# Fixes the first-person viewmodel getting blurred by depth-of-field (iron-sight ADS, dialogue camera) by re-rasterizing it after the DoF pass.
181+
bDofFix = true
155182

156183

157184
[Warnings]
@@ -199,6 +226,9 @@ bIgnorePreInstallBias = false
199226
# Delay (ms) before the deferred quit-to-desktop flag is set. Lets the UI/menu unwind so cleanup can't deadlock (needs bSafeExit fix).
200227
nQuitGameDelayMs = 1000
201228

229+
# Bloom render-target downsample factor (needs bHighResBloom). 1 = full screen (highest quality, highest GPU cost), 2 = half (recommended), 4 = vanilla quarter, 8 = eighth.
230+
nBloomScale = 2
231+
202232

203233
[Profiler]
204234

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include <AdModule.h>
4+
5+
namespace Addictol
6+
{
7+
class ModuleAltTabFullscreen :
8+
public Module
9+
{
10+
public:
11+
ModuleAltTabFullscreen();
12+
virtual ~ModuleAltTabFullscreen() = default;
13+
14+
[[nodiscard]] virtual bool DoQuery() const noexcept override;
15+
[[nodiscard]] virtual bool DoInstall([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
16+
[[nodiscard]] virtual bool DoListener([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
17+
[[nodiscard]] virtual bool DoPapyrusListener([[maybe_unused]] RE::BSScript::IVirtualMachine* a_vm) noexcept override;
18+
};
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include <AdModule.h>
4+
5+
namespace Addictol
6+
{
7+
class ModuleAnimatedStaticReload :
8+
public Module
9+
{
10+
public:
11+
ModuleAnimatedStaticReload();
12+
virtual ~ModuleAnimatedStaticReload() = default;
13+
14+
[[nodiscard]] virtual bool DoQuery() const noexcept override;
15+
[[nodiscard]] virtual bool DoInstall([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
16+
[[nodiscard]] virtual bool DoListener([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
17+
[[nodiscard]] virtual bool DoPapyrusListener([[maybe_unused]] RE::BSScript::IVirtualMachine* a_vm) noexcept override;
18+
};
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include <AdModule.h>
4+
5+
namespace Addictol
6+
{
7+
class ModuleDofFix :
8+
public Module
9+
{
10+
public:
11+
ModuleDofFix();
12+
virtual ~ModuleDofFix() = default;
13+
14+
[[nodiscard]] virtual bool DoQuery() const noexcept override;
15+
[[nodiscard]] virtual bool DoInstall([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
16+
[[nodiscard]] virtual bool DoListener([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
17+
[[nodiscard]] virtual bool DoPapyrusListener([[maybe_unused]] RE::BSScript::IVirtualMachine* a_vm) noexcept override;
18+
};
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include <AdModule.h>
4+
5+
namespace Addictol
6+
{
7+
class ModuleDpiScaling :
8+
public Module
9+
{
10+
public:
11+
ModuleDpiScaling();
12+
virtual ~ModuleDpiScaling() = default;
13+
14+
[[nodiscard]] virtual bool DoQuery() const noexcept override;
15+
[[nodiscard]] virtual bool DoInstall([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
16+
[[nodiscard]] virtual bool DoListener([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
17+
[[nodiscard]] virtual bool DoPapyrusListener([[maybe_unused]] RE::BSScript::IVirtualMachine* a_vm) noexcept override;
18+
};
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include <AdModule.h>
4+
5+
namespace Addictol
6+
{
7+
class ModuleHighResBloom :
8+
public Module
9+
{
10+
public:
11+
ModuleHighResBloom();
12+
virtual ~ModuleHighResBloom() = default;
13+
14+
[[nodiscard]] virtual bool DoQuery() const noexcept override;
15+
[[nodiscard]] virtual bool DoInstall([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
16+
[[nodiscard]] virtual bool DoListener([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
17+
[[nodiscard]] virtual bool DoPapyrusListener([[maybe_unused]] RE::BSScript::IVirtualMachine* a_vm) noexcept override;
18+
};
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include <AdModule.h>
4+
5+
namespace Addictol
6+
{
7+
class ModuleMuzzleFlashLight :
8+
public Module
9+
{
10+
public:
11+
ModuleMuzzleFlashLight();
12+
virtual ~ModuleMuzzleFlashLight() = default;
13+
14+
[[nodiscard]] virtual bool DoQuery() const noexcept override;
15+
[[nodiscard]] virtual bool DoInstall([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
16+
[[nodiscard]] virtual bool DoListener([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
17+
[[nodiscard]] virtual bool DoPapyrusListener([[maybe_unused]] RE::BSScript::IVirtualMachine* a_vm) noexcept override;
18+
};
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include <AdModule.h>
4+
5+
namespace Addictol
6+
{
7+
class ModulePowerGridScrap :
8+
public Module
9+
{
10+
public:
11+
ModulePowerGridScrap();
12+
virtual ~ModulePowerGridScrap() = default;
13+
14+
[[nodiscard]] virtual bool DoQuery() const noexcept override;
15+
[[nodiscard]] virtual bool DoInstall([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
16+
[[nodiscard]] virtual bool DoListener([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
17+
[[nodiscard]] virtual bool DoPapyrusListener([[maybe_unused]] RE::BSScript::IVirtualMachine* a_vm) noexcept override;
18+
};
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
3+
#include <AdModule.h>
4+
5+
namespace Addictol
6+
{
7+
class ModuleViewmodelShading :
8+
public Module
9+
{
10+
public:
11+
ModuleViewmodelShading();
12+
virtual ~ModuleViewmodelShading() = default;
13+
14+
[[nodiscard]] virtual bool DoQuery() const noexcept override;
15+
[[nodiscard]] virtual bool DoInstall([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
16+
[[nodiscard]] virtual bool DoListener([[maybe_unused]] F4SE::MessagingInterface::Message* a_msg = nullptr) noexcept override;
17+
[[nodiscard]] virtual bool DoPapyrusListener([[maybe_unused]] RE::BSScript::IVirtualMachine* a_vm) noexcept override;
18+
};
19+
}

Addictol/Source/AdConfigValidation.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace Addictol
1717
"bFacegen", "bMemoryManager", "bSmallBlockAllocator", "bScaleformAllocator",
1818
"bBSMTAManager", "bBSPreCulledObjects", "bINISettingCollection",
1919
"bArchiveLimits", "bInputSwitch", "bFasterWorkshop",
20-
"bSaveAddedSoundCategories", "bCOMInit"
20+
"bSaveAddedSoundCategories", "bCOMInit", "bHighResBloom", "bDpiScaling"
2121
}},
2222
{ "Fixes", {
2323
"bGreyMovie", "bPackageAllocateLocation", "bInitTints", "bLODDistance",
@@ -29,6 +29,9 @@ namespace Addictol
2929
"bBakaMaxPapyrusOps", "bPapyrusGCBug", "bCreateD3DAndSwapchain",
3030
"bCheckInternetAccess", "bStolenPowerArmorOwnership", "bManyItems",
3131
"bCombatMusic", "bWorkbenchSound", "bActorCauseSaveBloat",
32+
"bAnimSignedCrash", "bBethesdaNetCrash",
33+
"bMuzzleFlashLight", "bAltTabFullscreen", "bPowerGridScrap",
34+
"bAnimatedStaticReload", "bViewmodelShading", "bDofFix",
3235
"bUtilityShader", "bPipBoyCursorConstraints"
3336
}},
3437
{ "Warnings", {
@@ -39,7 +42,7 @@ namespace Addictol
3942
"uScaleformPageSize", "uScaleformHeapSize",
4043
"nSleepTimer", "nMaxLockCount",
4144
"bInteriorNavCutMultiThreading", "nMaxPapyrusOpsPerFrame",
42-
"bIgnorePreInstallBias", "nQuitGameDelayMs"
45+
"bIgnorePreInstallBias", "nQuitGameDelayMs", "nBloomScale"
4346
}},
4447
{ "Profiler", {
4548
"bProfiler", "bESPProfiler", "bESPSubHooks", "bDLLProfiler",

0 commit comments

Comments
 (0)