powerofthree's Tweaks v1.8.1
powerofthree's Tweaks
Requirements
- SKSE64 2.0.20 (SE) OR SKSE64 2.1.5+ (AE)
- Visual C++ Redistributables 2019
- Address Library for SKSE Plugins
Description
A collection of bug fixes and tweaks not covered by other plugins.
Fixes are bugfixes or other game improvements.
Tweaks are optional gameplay or immersion features.
Experimental options are untested, and may possibly cause unforeseen side-effects. Only enable this if you know what you're doing.
Each of these settings can be configured in po3_Tweaks.ini (in Data/SKSE/Plugins). Config file will auto regenerate if missing and new settings will be appended to the file with future updates.
Fixes (default : enabled)
Distant Ref Load Crash
Fixes loading crash caused by missing 3D on distant references. This may be caused by mods such as Windhelm Bridge Tweaks.
Map Marker Placement
Allows placing map markers near fast travel destinations when fast travel is disabled.
Enable 'Can't Be Taken Book' Flag
Restores 'Can't be taken' book flag functionality. Books can be read but not taken into inventory, if this flag is enabled in book records.
Projectile Range Fix
Adjusts range of projectile fired while moving to maintain consistent lifetime. This is a working implementation of the LE fix found here.
CombatToNormal Dialogue Fix
Fixes bug where LostToNormal dialogue triggers in place of CombatToNormal, ie. combat ends and NPCs say "must have scared them off".
Cast Added Spells on Load
Fixes issue where added spells are dispelled and not reapplied on NPCs upon loading.
Cast No Death Dispel Spells on Load
No-death-dispel flagged spells are reapplied on dead NPCs upon loading.
IsFurnitureAnimType Fix
Patches IsFurnitureAnimType condition function so it works on furniture references (previously, it only worked on actors currently using said furniture).
Light Attach Crash
Fixes crash when lights (torches, magelight, quicklight, etc) get attached to unloaded actors.
No Conjuration Spell Absorb
Adds NoAbsorb flag to all conjuration spells missing this flag.
EffectShader Z-Buffer Fix
Fixes effectshader z-buffer rendering so particles can show through objects (for non detect-life shaders)
ToggleCollision Fix
Patches ToggleCollision console command to toggle object collision for selected console references
Skinned Decal Delete
Immediately delete skinned decals when they're marked for removal (ie. removing bloody armor)
Jumping Bonus Fix
Jump height is multiplied by 1% per point of JumpingBonus actor value
- Toggle Global AI Fix
TAI console command/Debug.ToggleAI() function disables/enables all loaded NPC AI
- Use Furniture In Combat
Use furniture in combat and prevent getting forced out of furniture when attacked. Default is player only
0 - off, 1 - player only, 2 - player and NPCs
- Offensive Spell AI
Check spell condition validity before NPCs equip offensive spells (mages won't keep spamming sun spells against non-undead)
- Breathing Sounds
Fix creature breathing sounds persisting after cell change
- Load EditorIDs
Loads editorIDs for skipped forms. EditorIDs can now be used in console commands (player.placeatme dlc1serana).
Tweaks (default: disabled)
Faction Stealing
Items will be marked stolen until player is friendly with all present members of faction. This attemps to fix a vanilla mechanic described here.
Voice Modulation (default: 1.0)
Applies voice distortion effect on NPCs wearing face covering helmets. A value of 1.0 has no effect; pitch is directly proportional to value.
Recommended setting (0.85-0.90), values lower than this will cause audio to desync with subtitles and lipsync.
Game Time Affects Sounds
Scales sound pitch based on time multiplier, eg. Slow Time will cause all sounds to be low pitched.
Dynamic Snow Material
Applies snow material to all statics with directional snow/snow texturesets, eg. Footprints mod will work on snowy wooden planks and roads.
Disable Water Ripples On Hover
Levitating NPCs and player (vampire lord, dragon priest, wispmother, netch, etc) will not trigger water ripples when hovering over water.
Screenshot Notification To Console
Displays screenshot notification as a console message.
No Attack Messages (default: 0)
Disables critical hit/sneak notifications.
Sit To Wait
Player can only wait when sitting down.
Disable God Mode (default: 0)
Disables god/immortal mode.
Grabbing Is Stealing
Grabbing owned items counts as stealing.
Load Door Activate Prompt (default: 0)
Replaces load door activate prompts with Enter and Exit.
1 - replaces prompt (Open Breezehome -> Enter Breezehome)
2 - replaces prompt and cell name when moving from interior to exterior (Open Skyrim -> Exit Sleeping Giant Inn)
No Poison Prompt (default: 0)
Disables poison confirmation messages.0 - off, 1 - disable confirmation, 2 - show other messages as notifications (may clip with inventory menu), 3 - both
Silent Sneak Power Attacks
Prevent player shouting during power attacks if sneaking
Experimental (default : disabled)
Fast GetRandomInt()
Speeds up Utility.GetRandomInt function calls by decoupling it from framerate.
Fast GetRandomFloat()
Speeds up Utility.GetRandomFloat function calls by decoupling it from framerate.
Clean Orphaned ActiveEffects
Removes orphaned active effects from NPCs that had ability perks but lost them (eg. SPID didn't distribute perks to NPCs this run)
Update GameHour Timers
Updates game timers (eg. potion duration) when advancing time using GameHour.SetValue papyrus function
Stack Dump Timeout Modifier
How many seconds before Papyrus will start dumping script stacks (vanilla : 30 seconds).Setting this to 0 will disable the timeout (warning: this may result in a locked state if Skyrim can't dump stacks).
For SKSE Plugin developers
The TESForm `GetFormEditorID` virtual function is unchanged, and still returns an empty string (for forms that normally discard editorIDs).
This is because the function is called in several places that would risk a buffer overflow (eg. when naming ArmorAddon ninodes).
powerofthree's Tweaks provides an alternative method to get a form's editorID, using the exported function "GetFormEditorID".std::string GetFormEditorID(const RE::TESForm* a_form)
{
static auto tweaks = GetModuleHandle(L"po3_Tweaks");
static auto func = reinterpret_cast<_GetFormEditorID>(GetProcAddress(tweaks, "GetFormEditorID"));
if (func) {
return func(a_form->formID);
}
return "";
}
Example of how to use this in your plugin