About SDR

Section last updated on May 15 2021 14:13.

Sneaking Detection Recalibrated (SDR) replaces Oblivion's detection system. It is a deep, complex, and significant rewrite that alters many aspects of the game: detection, vision, hearing, movement, magical effects, and more. It also introduces new concepts, game settings, functions, actor values, and magic.

This documentation is divided up into broad topics, which then go into further detail as follows:

  • The About section includes this introduction as well as terminology used, a feature list overview, playing tips, a brief history, credits, and contact/legal information.
  • The Installing, Updating, and Tweaking section covers how to install or update SDR, as well as modify SDR's game settings.
  • The Game Mechanics section provides details on how to tweak features that directly impact the detection formula, including Vision, Hearing, Movement, Gear, Sneaking, and new Race/Creature Traits.
  • The Magic section covers changes and options made to Invisibility, Chameleon, Detect Life, and the Night-Eye magic effects. It also covers the three new magic effects introduced by SDR: Blind, Deafen, and Muffle.
  • The AI Behavior section covers changes made to how other actors engage/disengage in combat, search for the player, react to projectiles, use detection magic, manage followers, and other factors.
  • The Technical Support section covers known bugs, how to address performance issues, mod compatibility information, and other technical/miscellaneous information that may be of interest.
  • Intended for modders, the Modder's Guide provides details on the inner workings of SDR, how your mod can interact with it, and descriptions of the new SDR OBSE plugin functions and features that you can utilize.
  • The Version Changes section lists all of SDR's changes per series/version.

If there are any points that could use clarification, general comments, corrections, suggestions, or any other questions you may have, please contact me through the SDR Nexus Forum.

Terminology

Section last updated on May 15 2021 14:13.

For consistency, the following terminology is used throughout this documentation:

Actor: Any "living" thing that you can interact with, which includes all NPCs, Creatures and the Player.

Clean Save: This refers to creating a saved game with no magic effects active, not being in combat, in a relatively safe space, with few if any observers. There are two variations on this:

  • Full: This means all SDR files should be uninstalled before making the save.
  • Partial: This means that the SDR.esm file and sdr.dll file should still be installed and active, but the other files should be disabled.

Creature: Any "living" thing that isn’t an NPC, including animals, undead, monsters, Daedric critters, etc.

FOV (Field of View): This is the range in degrees in which an object can be seen by the observer. There are two sub-types:

  • Binocular FOV is the range in which both eyes can see the Target.
  • Peripheral FOV is the range in which only one eye can see the Target.

FPS (Frames per Second): A frame is a "slice" frozen from real time. When frames are put together in sequence, you get the illusion of flowing movement and actions. The higher the FPS rate, the smoother and more realistic the game play will feel. Film is at 24 fps. European television is at 25 fps. American television is at 30 fps. Some of the "hyper real" digital movies are at 48 fps. The average person can notice inconsistencies up to around 60 fps. Above that, the graphics get significantly smoother with less motion blur - but it usually requires a combination of high end graphics cards and monitors that are capable of displaying high fps accurately with minimal refresh lag. Below 24 fps, you are likely to notice a significant degradation of quality to the point where it may be unplayable.

Game World: This is which "world" you are playing in, which for most people will be Oblivion. But there is a total conversion mod called "Nehrim" that uses the resources of Oblivion, but has different races, geography, classes, storyline, rules, etc. SDR looks for the "Nehrim.esm" file or the "Oblivion.esm" file to determine which game world is being used, and adapts accordingly.

HUD (Heads Up Display): This is the top level interface of the game that displays statistics about the player, health levels, the compass, active spell effects, etc.

LOS (Line of Sight): This means that the observer has a direct unblocked view of the Target. Oblivion determines LOS first by checking if the Target is within the observer’s field of view and then determines if there are any obstacles in the way that prevent the observer from seeing the Target.

Mastery Level: This refers to the "perk" mastery level of a skill, which provides certain benefits at various mastery levels. Internally Oblivion assigns the five levels a value of 0 through 4.

0 = Novice
1 = Apprentice
2 = Journeyman
3 = Expert
4 = Master

NPC (non-player-character): Any actor based on one the races (Humans, Elves, Khajiit, Argonian, Dremora, Golden Saints, Dark Seducers, etc.) which are controlled by the game engine. NPCs can have skills, attributes, spells, equipment, etc. just like the player's character, as well as converse with the player's character. In contrast, creatures do not have skills or classes.

NPC Children: In the default Oblivion world there are only adult NPCs. However, there are a few mods out there that add children. They require patches in order for me to account for them, otherwise they will behave as adults. Check the mod-compatibility section to see which mods that add children are accounted for, and let me know if I have missed any.

Observer: The actor that is making the detection check.

Partial Clean Save: This refers to creating a saved game with only the SDR.esp file and dependent mods inactive while still keeping SDR.esm active. Otherwise the same conditions apply as a No magic effects shouactive, not being in combat, in a relatively safe space, with few if any observers.

PC (player's character / player): The character that you control.

PlayerRef: The internal pointer that the construction set uses to identify the player character actor reference object.

Token: A token is an object that is added to an actor's inventory that cannot be seen. It has no weight, and cannot be added or removed from an Actor other than through scripting. The token has a script and custom variables attached to it that allow the actor to interact with the game environment in special ways. SDR uses tokens for tracking summoned creatures as well as sprinting actors.

Target: The subject of the Observer's detection check or an attack, depending on the context.

Units: The standard for measuring distance. 22 units = 1 foot.

Feature List

Section last updated on May 15 2021 14:13.

SDR has numerous built in features, most of which can be tweaked through .ini settings.

The Detection Formula

The default Oblivion detection formula has been completely replaced with SDR's formula. It takes into account numerous factors which include but are not limited to:

  • Lighting conditions that affect observers as well as targets.
  • Changes in how line of sight is calculated.
  • New calculations for how visual and hearing attributes and abilities impact detection.
  • Revised rules for Chameleon, Invisibility, Detect Life, and Night-eye magic effects.
  • Revised calculations for how much noise is made based on movement rate, type of movement, and terrain.
  • Sound created by all equipped gear in use, not just boots, as well as actions such as equipping/unequipping weapons.
  • Other factors such as fatigue levels, health levels, environmental distractions, etc.
  • Factors created by other 3rd Party mods that interact with SDR.

Derivative Features

The process of overhauling the detection formula naturally led to rewriting other aspects of Oblivion's game mechanics as well as introducing new content such as:

  • Creating a system of custom actor values
  • New racial and creature traits such as hearing/vision types with ranges of acuity.
  • Introducing binocular and peripheral vision, with realistic values applied to different creatures/races.
  • New Blind, Deafen, and Muffle magic effects and magic items that can be used by both the player and NPCs.
  • New Detect Life shader effects, with variations depending on the context of who/what is casting the spell and who/what is being looked at.
  • Dynamically changing Night-Eye visual effect shaders for the player.
  • Options for fading/transparent actors when they are sneaking. Applies to player and NPCs.
  • Many new options for how to customize sneak attack damage multipliers.
  • Revamped and more realistic system for determining sneaking, walking, and running movement rates as well as an additional sprint option.
  • New calculations for fatigue, in line with the new movement rules.
  • Alternate methods of gaining Sneak experience through stealth and assassinations.
  • Revised rules for how NPCs use magic that could be useful for detecting targets.
  • Revised rules for how NPCs search for targets and stay in combat mode, based on SM Combat Hide (with permission).
  • New Sneak perks such as bypassing pressure plates and tripwires.

Other Considerations

SDR works out of the box, but can be customized with the SDR Game Settings Tweak.ini file

Unlike other stealth mods, SDR does not directly modify any skills to affect the detection result, making it compatible with leveling and other similar skill based/reliant mods.

It's flexible enough to adapt to other mods, resulting in sneaking being a much more challenging and strategic experience - especially in combination with certain mods that enhance the SDR experience.

There are Mod compatibility patches built in to SDR for mods like:

Bare Necessities
Basic Primary Needs
Children of Cyrodiil
Custom Spell Icons
Druid Mod Remade
Enhanced Music and Control 2
Nehrim
Oblivion Reloaded
Oblivion XP
Real Sleep Extended
Thieves' Arsenal

Playing Tips

Section last updated on May 15 2021 14:13.

  • Start with the default settings, and see how it goes.
  • Stick to the shadows
  • Stay out of line of sight
  • If you are stuck in line of sight of an enemy, don't move.
  • Don't sneak around wearing heavy armor or holding big obnoxious weapons.
  • Any light (torches, spell effects, casting spells, being set on fire, etc.) can give away your position.
  • Wait to move until your opponents are either moving or conversing with each other.
  • Don't wait 'til the last second to draw your weapon, it might give you away.
  • If you get too close to someone and "collide" with them, they will probably detect you.

In general, even at low Sneak skill levels, as long as you are very cautious and stay out of the line of sight and out of the light, you should be able to sneak up behind most people. At higher Sneak skill levels, especially if complemented by high levels in related skills, you could be very deadly indeed. But if you get overly cocky, you can still get spotted and squashed.

The History of SDR

Section last updated on May 15 2021 14:13.

If you are reading this, at some point you probably have wanted the "perfect load order" with the "best of the best" mods. Even with Wrye Bash, you can very easily hit the 255 esp/esm limit. In my quest to reduce my mod count, I learned about the Construction Set and various techniques of merging mods together. The various stealth mods I had seemed like as good a place as any to start.

But when I looked under the hood, I realized that none of them really worked the way I thought they did, and some didn't work at all like they were advertised. A vision came to me of how I wanted sneaking to really work, and shortly thereafter, I found myself knee deep in learning how to mod. I was a little late to Oblivion, and although there wasn't as much modding happening with Skryim on the horizon, I kept at it anyway, and on March 1st, 2011, I released the first version of SDR.

Although I think the underlying concept for detection had a solid foundation, I felt there was a lot of room for improvement. Either elements of detection weren't dealt with properly, or just not dealt with at all. Following are some of my thoughts on the various bits and pieces that led to the insanity that is SDR.

Hacking the Formula

First up on the list was figuring out how the detection formula worked, and then how to hack it. That credit goes to JRoush, who not only deciphered Oblivion's detection formula, but handed me a basic OBSE .dll plug-in that has allowed me to replace the detection process entirely. That plugin was first introduced in Series 3, and I have expanded upon it considerably since then.

To learn more about Oblivion's actual detection formula, you can find it here: Category:Detection

Effects of Invisibility and Chameleon

It bothered me that if you were Invisible or had 100+ Chameleon, you were 100% undetectable no matter how much noise you made. The original Oblivion documentation implied that they could still hear you, but on the back end it turned out not to be the case. SDR fixed it so that Invisibility and Chameleon no longer impact the audio aspect of detection.

In addition, it always bothered me that you could be invisible, run around carrying a lit torch, and nobody would notice you. SDR has options that will cancel any normal Invisibility magical effect on you if you are holding a lit torch or are under a Light magical effect. There are also options to have torches and Light spells modify the effectiveness of the Chameleon magical effect.

Not Just the Boots!

The original formula only took into account the weight of your boots for determining how much noise you made. SDR takes into account all of your gear, as well as how you use it, when determining sound penalties.

Lighting

In the default Oblivion system, only the lighting on the player factors in. But if you have ever been near a camp-fire and try to stare out in the dark, or be out in the dark staring at the campfire, a more realistic approach is to take into account the lighting on the Observer, and not just the Target. SDR does this.

Proximity

In the default Oblivion system, you could be standing right in the path of a creature, and it could bump into you and go around you without realizing you were there. SDR makes that nearly impossible now with automatic collision detections.

Standing Still is Smart

In standard Oblivion, an NPC could be right next to you, you could turn in place, but they wouldn't detect you. SDR has an option that has you make noise when you turn in place. It's about half of the sound you would make if you were walking. But sometimes, that is all it takes to be heard or seen.

The Algorithm of Sound

In the Oblivion default, light and sound are basically treated the same at the same distance. But in reality, they function very differently. Light continues directly until it is blocked by something, while sound loses energy exponentially as it travels, but can wrap around corners. I did my best to replicate these phenomena.

Life Detection

One of the major advantages that the player had in default Oblivion was the use of the Detect Life spell which other actors never used. SDR levels the playing field by incorporating Detect Life into the detection formula and providing methods for other actors to be granted and use Detect Life spells to their advantage. There are even more nuances to how Detect Life works in SDR, which you can read more about in that section.

New Spells and Audio/Visual Effects

As a natural offshoot of all the detection changes, I felt there needed to be new spells that would affect one's ability to detect or be detected. In Series 6, SDR introduced Blindness, Deafness, and Muffle spells. Blindness and Deafness can be used against your enemies, but your enemies can use them against you too. Muffle allows you to quiet your own footsteps, and at higher levels silence them all together.

CAVS: The Custom Actor Value System

Despite being able to replace the formula (or maybe because of it), performance became an issue as the scripted formulas became more complex. The only way to fix it was to port as much of the detection formula and supporting calculations as possible into SDR's OBSE .dll plug-in. This required inventing and entirely new way to create, store, modify, and retrieve custom actor values. None of the available plugins had the flexibility I needed, so I invented the CAVs system, first implemented in SDR's 8 series. This significantly improved performance and allowed me to keep and expand on the majority of the new features. You can learn more about how CAVs works in the Modder's Guide: CAVs section.

Changing Other Stuff

I could go on and on, but I'd just be repeating what is covered elsewhere. So to sum up, there is a LOT going on with SDR that really forces you to rethink how to sneak around. If you really want to get a full sense of the history, start at the very end of this documentation with the Series 1 change logs and work your way back up.

Credits, Thanks, and Tools Used

Section last updated on May 15 2021 14:13.

First of all, there are SO many people that deserve thanks and kudos, I have undoubtedly forgotten some. For that I apologize. If you feel I have left out your name in error, please let me know.

Bethesda Softworks

For creating Oblivion, and wasting a hell-of-a-lot-of-my-time.

JRoush

An uber personal thanks to JRoush who disassembled the actual Oblivion.exe and provided me with the initial .dll plug-in that could hook the detection formula as well as some great advice on how to approach the project. If you get a chance, check out these mods which were really helpful in the early development of SDR:

Kyoma

Kyoma pitched in and added a couple of great features to the SDR OBSE plug-in. One allows you to capture the exact detection value without re-triggering the detection, and the other automatically kills all detection by someone who is dead.

The OBSE / CS Wiki Team

Their contributions to the modding community deserve no end of thanks. I'd especially like to thank Scruggsy, Ianpatt and DragoonWraith for helping me learn to tweak the new Sneaking Detection Recalibrated OBSE plug-in.

ShadeMe

A big hats off to ShadeMe for his Construction Set Extender, Runtime Script Profiler, the new OBSE, and various programming tips and expertise. I mean, seriously, it's totally ridiculous how valuable he's been.

Alenet

Super thanks to Alenet for handing me the last piece of the puzzle that allowed me to port the entire detection formula out of the scripts and into the plugin for series 9. w00t!

TES Nexus

The one-stop-shop resource for authors and players.

Codes, Ideas, and Under-the-hood

I'd like to thank the following folks who personally allowed me to borrow ideas and coding from their mods:

Cross-Compatibility

Thanks to the modders that helped me set up cross compatibility with their mods, and their input in general:

Mods That Inspired

A special thanks to the modders/mods that inspired me to take a stab at this (pun intended):

Series 8 Alpha Tester Extraordinaire

  • Supierce

Beta Testers

A big giant hat tip and nod of appreciation to the folks that took time to beta-test the various pre-release versions, as well as their contributions to the discussion threads.

  • AfroKing
  • Alt3rnlty
  • anithinks
  • Arthmoor
  • Artorius
  • bart1965
  • Demni
  • Didden
  • dreamed1
  • Dubiousness
  • Durakwolle
  • HeyYou
  • hfffoman
  • jaime74
  • Kobal
  • LogicDragon
  • lonewolf_kai
  • maura amalia
  • maczopikczo
  • Mijaja
  • omletted
  • Oromish
  • panther512
  • Question2
  • sean144800
  • thinkdude
  • WalkerInShadows

And finally...

I'd like to thank the following for their feedback, suggestions, and contributions to the SDR public forum threads and/or advice in the OBSE / CSE forums when I ran into some tight programming spots.

  • abraXas
  • Algryon
  • Alliria
  • Alphanos
  • AndalayBay
  • Aries144
  • beebee
  • bluesky404
  • CarlosS4444
  • charon711
  • Decrepit
  • emptythe
  • forli
  • Foxzero
  • garx
  • gyshall
  • Illius
  • iRFNA
  • JdeRau
  • Jupiah
  • Kirtai
  • KloHunt3r
  • Maegraer
  • Mahjers
  • mar3usmc
  • Marshmallow
  • MatH
  • Nephenee13
  • OuijaU
  • Peter ID
  • Princess Bridget
  • Psymon
  • selerna
  • Shadowborn
  • spookyfx
  • strudo
  • swingguy0
  • Tekada
  • Tomlong75210
  • visibledark
  • wetblanket
  • whalecakes
  • wkomarecki
  • xxx_tricky_xxx
  • zombiemold

Tools Used

Conclusion

Section last updated on May 15 2021 14:13.

I really do hope this manual will be useful to you. If you can't figure something out, please contact me, and I will do my best to help when I have time. Feedback and suggestions are welcome, but not guaranteed to be implemented.

Contacting me

Before posting a bug report, please do the following:

  • Make sure that you have the latest version installed
  • Make sure you have read all support documentation, especially in regards to mod compatibility
  • When posting your bug, include which version of SDR you are using, and which version of OBSE you have installed

Please post bug reports and suggestions in the SDR Nexus Forum

If I don't answer a forum post soon enough, or if there is something seriously wrong, or you have an idea that just can't wait, please feel free to send me a private message through my Nexus forums account.

Licensing / legal

  • You must have purchased a copy of the TESIV: Oblivion game from Bethesda Softworks.
  • Use of this mod in its current state is free.
  • Because there are elements of the code in this mod that were written by other people, redistribution of this mod, or use of any of the code is forbidden without getting permission from either myself or the person who created the code.
  • I also request that I be informed of any patches made for SDR and another mod. Otherwise it affects my ability to provide decent technical support.
  • You may not modify, repackage, or redistribute the SDR content under any circumstances, save after my death. In which case you can do whatever you want.
  • Please contact me via the SDR Nexus Forum if you have any questions or need permission for something.


Thanks!
saebel

Shadow hide you...

Installing, Updating, and Tweaking

Section last updated on May 15 2021 14:13.

This section explains best practices for installing, updating, and tweaking SDR. Even if you are familiar with installing mods, SDR has a very complex installation structure, so I highly recommend reading these instructions thoroughly. It might save you a headache later.

Version Identification

Mods use various methods of version numbering to track differences between releases, troubleshooting, and compatibility between mods.

SDR uses S.IRB => Series . Iteration Revision Build, for example: 9.123.

A Series change is all encompassing. It requires completely uninstalling the old version and doing a "clean save" before installing the new version.

Iterations tend to indicate major changes in infrastructure or adding a new feature.

Revisions tend to be relatively minor updates such as modifying an existing feature or adding mod compatibility.

Builds tend to be minor fixes that are released as a separate smaller "hotfix" download in addition to the entire package.

Prior to version 8.230, SDR versions were displayed as 8.#.#.b#. This caused issues with TESMM's installer package / conversion data, so the extra decimal points and "b" were dropped.

Overview of Installation Process

  1. Install mod management and sorting tools
  2. Install prerequisites and optional dependencies
  3. Install SDR
  4. Run BOSS to sort load order
  5. Tweak the various .ini files
  6. Run Oblivion

Upgrading to Series 9

IMPORTANT! If you are upgrading from a version of SDR prior to series 9, including series 9 beta versions, please do the following:

  1. Back up any SDR .ini files you were using to a different directory.
  2. Note any SDR specific spells or items that your character has if you want to restore them later.
  3. Completely uninstall the prior version using the proper procedure depending on your version: Uninstalling SDR.
  4. Install the new version per the instructions below.
  5. Copy over any old setting tweaks from the previous version, but verify they still work first! Many game settings have had their names changed, and some have been removed all together.
  6. Run Oblivion and use the console to restore any spells or items that may have been lost from the previous version. The form IDs are in the SDR's New Content section of the Modder's Guide.

Mod Management/Sorting Tools

Section last updated on May 15 2021 14:13.

Mod Managers

Mod Managers are used for installing mods in a specific order and rearranging the load order manually.

There are only two "saebel sanctioned" methods for installing SDR: Wrye Bash or The Elder Scrolls Mod Manager (TESMM).

Wrye Bash provides a clean method of installing/uninstalling the mod using an installation wizard. It also has a "bashed patch" that allows you to merge SDR's game world .esps into a single 'Bashed Patch' .esp file, thus freeing up more slots for other mods. SDR's installation package was tailored to it. Requires Wrye Bash v307 or later. Wrye Bash is the recommended installer for SDR.

The Elder Scrolls Mod Manager (TESMM) isn't as feature-rich as Wrye Bash, but it is simpler to use. I provide omod conversion data so you can make an omod file out of the SDR installer package, including a TESMM version of the installation wizard. Currently the TESMM omod conversion data is not available at this time, but will be made available in a future release.

Important! I will not support any other mod manager or method of installation, including manual installation. This is non-negotiable.

BOSS Sorting Tool

Once you have installed SDR, you will need to make sure that the load order is correct. Although you could manually sort them using your mod manager, using the Better Oblivion Sorting Software (BOSS) sorting tool will make things easier for you.

There are other sorting tools out there such as LOOT. However, they don't work well, and I do not support them.

Prerequisites

Section last updated on May 15 2021 14:13.

Depending on what features you want to use, you must download and install some prerequisite mods:

Oblivion Script Extender (OBSE) : version 21.4 + : Required

The Oblivion Script Extender is a modder's resource that expands the scripting capabilities of Oblivion. If OBSE is not installed, SDR won't be able to run at all.

Engine Bug Fixes : version 1.9 + : Highly Recommended

Engine Bug Fixes is an OBSE plugin containing bug fixes for the Oblivion game engine. One fix in particular addresses an issue where Horses, Trolls, and Land Dreaughs do not register having a light level. That means the game thinks that they are always in total darkness, which makes them nearly undetectable by other NPCs. SDR doesn't have a work around for this issue, and EngineBugFixes is the only known solution.

Menu Que : version 16b + : Required for SDR's Blindness Magic Effect

Menu Que allows SDR to temporarily hide/alter certain parts of the HUD when the player is hit by SDR's new Blindness magic effect. If Menu Que is not installed, the Blindness effect will be automatically disabled, and you won't be able to use it on your opponents. Fair is fair, right?

Oblivion Reloaded : version 6.4.0 + : Optional for SDR's Blindness Magic Effect and/or SDR's Dynamic Night-Eye Shaders

Oblivion Reloaded is a major overhaul that changes many aspects of the game, especially the graphics. But it can be challenging to get working for some people. If you can get it to work, it is the recommended option for SDR's Blindness magic effect and SDR's dynamic Night-Eye shaders. If you choose not install Oblivion Reloaded, you can use Scanti's Switch Night-Eye Shader plugin as an alternative, which is included as a courtesy in SDR's installation package.

Enhanced Music and Control 2 (EMC2) : version 1.21 + : Optional for SDR's Deafness Magic Effect

EMC2 combines features from the older Enhanced Music and Control and Sound Commands plugins, and can be used to enable SDR's Deafness magic effect. If you choose not to install EMC2, you can use the Sound Commands plugin as an alternative, which is included as a courtesy in SDR's installation package.

Custom Spell Icons : version 3.1 + : Optional for SDR's Blind, Deafen, and Muffle magic effects

Custom Spell Icons allows you to replace existing spell icons and assign spell icons to script-based spells. I created my own icons for SDR's Blind, Deafen, and Muffle magic effects, which require Custom Spell Icons to see them. Note that if you are using Oblvion Magic Extender or plan to, it conflicts with Custom Spell Icons, so you can only install one.

Sneaking Detection Recalibrated (SDR) : version 9001 : Required

It may seem obvious, but you'd be surprised. Of course you will need to install SDR's files. Note that there are two types of files you can download. One is the full package, which includes all the files needed. The second is a "Hotfix" package, which provides only the files needed to bring previously installed versions up to date. If there is a major update, there may not be a "Hotfix" package available.

SDR OBME Additions : version TBD* : Optional

This supplemental mod is designed to be used in conjunction with SDR and the Oblivion Magic Extender which turn Blind, Deafen, and Muffle into real magic effects that you can use to create custom spells and magic items. It also allows you to use SDR's spell icons for Blind, Deafen, and Muffle.

* My apologies, but the current version SDR OBME Additions has not been updated for series 9 yet. But it's on my list.

Installation Instructions

Section last updated on May 15 2021 14:13.

Installation Package Breakdown

The SDR installer package contains folders known as "sub-packages". All files in each sub-package are listed relative to the Data directory where they will be installed. If there are more than one sub-package with the same numerical prefix, only select/install one of them.

If you use the recommended installer wizard, it will guide you through the installation process, selecting the appropriate sub-packages and tweaking .ini options as you go.

Important! The installation package structure changed from version 9.000 to 9.001, for sub-package sections 00 through 03.

Top Level Files

Along with all the sub-packages, you will find two files at the top level of the SDR installer package: SDR-Read This First.txt and Wizard.txt.

SDR-Read This First.txt is a short introduction with a link to this website.

Wizard.txt is the installation wizard for Wrye Bash. Unless you know what you are doing, don't edit the wizard. If you do edit the wizard, and you break it, I will not support it. You will have to either figure it out for yourself or re-download the SDR installer package.

00 OBSE

This is the sdr.dll OBSE required sub-package with the following set of core files:

  • OBSE\plugins\sdr.dll
  • OBSE\plugins\sdr_default.ini

sdr.dll

For SDR to work, a custom sdr.dll OBSE plugin was created that does several things:

  • Hooks and replaces Oblivion’s detection results with SDR's own detection formula.
  • Adds a custom function for returning the raw detection level of a detection check.
  • Adds custom functions that allow you to determine skill mastery level, foot-weight, and other features that are specific to SDR's functionality.
  • Introduces the Custom Reference Value system (CRVs), which is SDR's own method for creating, storing, modifying, and retrieving new actor values.
  • Provides a method for creating/storing/retrieving your own .ini settings.
  • Adds numerous game settings to customize SDR’s detection formula and features.

To learn more about these features, please see the Modder's Guide.

sdr_default.ini

This is the default sdr.ini settings in case you munch your sdr.ini file and want to go back and refer to the original settings.

01 ESM ESP

This is the main SDR.esm/SDR.esp required sub-package with the following set of core files:

  • SDR.esm
  • SDR.esp
  • textures\menus\Icons\SDR\misc\sdrMessageIcon.dds
  • textures\menus\Icons\SDR\quest\sdr.dds

SDR.esm

This core master file has two primary functions:

  • Holds special function calls that can be used by SDR as well as 3rd party mods.
  • Stores all of SDR's spells, abilities, magic effects, scrolls, tomes, and magic items.

SDR.esp

This core plugin file handles all the game mechanics. SDR won't run properly without it.

sdrMessageIcon.dds

Whenever SDR sends a message to the HUD, it will have this icon to the far left:

sdr.dds

There is an SDR Quest icon that you will never see in game. It was added to work around a bug with the WryeBash bashed patch. It looks like this:

02 Worldspace - Nehrim

This sub-package contains the SDR_Nehrim.esp which has the following features for Nehrim compatibility:

  • Modifies scripts to apply the Journeyman Sneak Perk that allows bypassing tripwires and pressure plates
  • Adds the Master level Blind, Deafen, and Muffle spells to specific vendors

This file can be merged into the Bashed Patch if you are using Wrye Bash.

02 Worldspace - Oblivion

This sub-package contains the SDR_Oblivion.esp which has the following features for Oblivion compatibility:

  • Modifies scripts to apply the Journeyman Sneak Perk that allows bypassing tripwires and pressure plates
  • Adds the Master level Blind, Deafen, and Muffle spells to specific vendors
  • Addresses a compatibility issue with Oblivion's Aleswell quest

This file can be merged into the Bashed Patch if you are using Wrye Bash.

03 Detection Formula Script Overrides

This sub-package has a pair of example files intended for modders who want to use their own custom scripted detection formula instead of SDR's. Please read the Detection Hook section in the Modder's Guide before installing either of these files!

SDR_DetectionHookOverride.esp

This example file is for overwriting the already existing detection hook formula in the SDR.esp file. Allowing you to use your own custom detection formula as well as SDR's other features.

SDR_CustomScriptedDetectionFormula.esp

This example file is for use in place of the SDR.esm and SDR.esp files. You will still need the sdr.dll OBSE files however.

10 SDR OBSE Plugin ini

This sub-package installs the sdr.ini file to the OBSE\Plugins folder. See Tweaking section for more details.

If the installation wizard detects that the sdr.ini file is already there, it will not automatically overwrite it.

11 Game Setting Tweaks ini

This sub-package installs the SDR Game Settings Tweaks.ini file to the Ini\SDR folder. See Tweaking section for more details.

If the installation wizard detects that the SDR Game Settings Tweaks.ini file is already there, it will not automatically overwrite it.

12 Race Creature Trait Tweaks ini

This sub-package installs the SDR Race Creature Trait Tweaks.ini file to the Ini\SDR folder. See Tweaking section for more details.

If the installation wizard detects that the SDR Race Creature Trait Tweaks.ini file is already there, it will not automatically overwrite it.

20 DNES for Oblivion Reloaded

This sub-package installs the shader and .ini files required to use SDR's Dynamic Night-Eye Shader system with Oblivion Reloaded.

20 DNES for Shader Switcher

This sub-package installs the shader files required to use SDR's Dynamic Night-Eye Shader system with Scanti's Night-Eye Shader Switcher.

30 Blindness HUD Textures

This sub-package installs some mesh and texture files that are used to temporarily hide icons in the HUD that can give away your location when the player is hit by the Blindness magic effect.

31 Blindness for Oblivion Reloaded

This sub-package installs the shader and .ini files required to use SDR's Blindness magic effect with Oblivion Reloaded.

31 Blindness for Shader Switcher

This sub-package installs the shader files required to use SDR's Blindness magic effect with Scanti's Night-Eye Shader Switcher.

40 Shader Switcher Plugin

This sub-package installs Scanti's Night-Eye Shader Switcher OBSE plugin, which will be required if installing either Shader Switcher version of Blindness or DNES and you are not using Oblivion Reloaded.

41 Shader Switcher Dev Nighteye

This sub-package should not be installed unless you are planning on tinkering with the Night-Eye Shaders designed for the Night-Eye Shader Switcher Plugin.

42 Shader Switcher Dev Blind

This sub-package should not be installed unless you are planning on tinkering with the Blindness Effect Shaders designed for the Night-Eye Shader Switcher Plugin.

50 DDLS Textures

This sub-package installs texture files needed for SDR's Dynamic Detect Life System.

51 DDLS Nehrim

This sub-package installs the SDR_DDLS_Nehrim.esp file which only cancels out the default Detect Life shader in the Nehrim world space, thus allowing the SDR.esp file to handle Detect Life shaders without overlapping the original.

This file can be merged into the Bashed Patch if you are using Wrye Bash.

51 DDLS Oblivion

This sub-package installs the SDR_DDLS_Oblivion.esp file which only cancels out the default Detect Life shader in the Oblivion world space, thus allowing the SDR.esp file to handle Detect Life shaders without overlapping the original.

This file can be merged into the Bashed Patch if you are using Wrye Bash.

60 Sound Commands Plugin

This sub-package installs the Sound Commands plug-in, which is needed for SDR's Deafness magic effect if you choose not to install Enhanced Music and Control 2. If both Sound Commands and EMC2 are detected, SDR will use EMC2.

70 Spell Icons

This sub-package installs the textures needed for the custom spell icons for the new Blind, Deafen, and Muffle spells and magic items. But to see them in the actual game, you need to install the Custom Spell Icons plugin as described in the prerequisites section.

80 Patch for Reneer's Guard Overhaul

Reneer's Guard Overhaul (RGO) modifies how guards react to player crimes and behavior. Some kinks in RGO were causing some issues with SDR’s intended functions. Reneer gave me permission to create a patch, which ended up becoming an extensive rewrite of the code to make it more efficient and somewhat interactive with SDR when it came to guard behavior. Changes include:

  • RGO's "following guards" are not included as SDR player companions.
  • Adds a delay between when the player starts sneaking and when an RGO guard decides to follow the player.
  • It looks for the RGO .ini file in the Ini/SDR directory. That way if you uninstall it, the original RGO .ini file will remain intact. The settings are no different than the original, so please refer to RGO’s documentation for how to use it.
  • Takes advantage of OBSE (v21+ required) to make RGO more efficient.
  • Many of the scripts are much more efficient with fewer lines of code.
  • The guard ring now checks to see if the owner of the ring is still a guard in case their class gets switched, and if not, removes the ring.
  • Better tracking of which guards are/are not following the player.
  • New option to remove the RGO configuration ring from inventory and only use the .ini file.
  • .ini file now has a setting that allows you to restore the configuration ring.
  • Initialization script does a better job at tracking version changes.
  • If new installation or new version is detected, then user will be prompted to decide if they want to go with the .ini file or the configuration ring at that time.
  • Changed the token distribution system from using an area spell to a sub-section of a quest script that rolls through all high actors in the area every 3 seconds.
  • Removed the spell compatibility configuration variable from the .ini (no longer necessary).
  • Removed aoe spells and Reneer’s magic paintbrush as they are no longer necessary.

In all other ways it is functionally identical and I do not intend to change it. The SDR_patch_RenGuardOverhaul.esp and RGO for SDR.ini file are included in the sub-package. You must have Reneer’s Guard Overhaul installed: Reneer's Guard Overhaul Nexus page.

Installer Images

This folder is not a sub-package. It contains the images used for the Wrye Bash installation wizard.

omod conversion data

This folder is not a sub-package. It contains the configuration files needed to create an omod file for TESMM out of the SDR installer package.

Note: this folder is not in the current release, but will be made available in the future.

Installing

Following are the steps for installing SDR by the two of the approved methods.

Installing with Wrye Bash

  1. Download and install OBSE separately.
  2. Download and install the other prerequisites.
  3. Download the Sneaking Detection Recalibrated package or SDR Hotfix package to the "Oblivion (or Nehrim) Mods\Bash Installers" folder
  4. Run Wrye Bash.
  5. Install the mod from the installers tab using the built in wizard. USE THE WIZARD! You will miss important options if you don't!
  6. After installing, you may have to apply some .ini tweaks depending on what options you selected. Follow Wrye Bash's instructions for applying the tweaks. If you can't figure it out, please refer to the tweaking instructions.
  7. After you have installed the SDR mod, go to the mods tab and activate all files with "SDR" in the name.
  8. Run BOSS to sort the load order. (see below)
  9. If desired, rebuild the bashed patch to merge and deactivate the merged files.
  10. VERIFY the following OBSE plug-ins were installed:
    Data\OBSE\Plugins\sdr.dll
    Data\OBSE\Plugins\SoundCommands.dll (if Enhanced Music and Control 2 is not installed)
    Data\OBSE\Plugins\SwitchNightEye.dll (if you chose to install it and are not using Oblivion Reloaded)
  11. Launch Oblivion using the OBSE Loader.

Installing with TES Mod Manager (TESMM)

NOTICE: These instructions will be made available in a future release when the omod converstion files are made available.

Adjusting Load Order

Load order is determined by date and very important to resolving mod conflicts. You can use tools like TESMM and WryeBash to change the modification dates of the various mods or just drag and drop the mods into the desired order.

Automated Load Order Sorting - BOSS

The best tool for sorting load orders is the BOSS (Better Oblivion Sorting Software). It will sort your mods for you based on thousands of mods that have been submitted to the system, with tags, suggestions, and all kinds of information.

NOTICE: At the moment, the Boss Master List does not have SDR's new files/file structure for series 9. So until it gets updated, please use the Manual Load Order Sorting instructions below.

Manual Load Order Sorting

These are my following recommendations if you are manually sorting the mods:

SDR.esm

Sort to the last of the .esm list, after Custom Spell Icons and Custom Speel Icons - OBME. There are no other .esm's that use SDR as a master as of this time.

SDR.esp

Sort to somewhere in the middle of the pack. If there are other mods that tweak movement, detect life shaders, or anything stealth related, then you should have this mod sorted after them.

SDR_Oblivion.esp /SDR_Nehrim.esp

This file should be sorted immediately after SDR.esp

RenGuardOverhaul_PatchForSDR.esp

If you installed this, it needs to load after RenGuardOverhaul.esp

All other SDR patch files

These can load up at any position after the SDR.esp file and before the Wrye Bash bashed patch.

Updating Instructions

Section last updated on May 15 2021 14:13.

When you need to update to a new version of SDR, please follow these guidelines. The update's read me will tell you which of the three following methods you should use: overwrite, partial clean save, and full clean save. When SDR detects a version number change, in addition to the usual procedures, it will also do a "reboot" and recalculate race/creature traits.

When you install/update to a new version, make sure to use the wizard again. It will automatically detect whether or not you have any tweak files installed and make sure not to overwrite them. You should also double check to see if any of your tweak settings are still valid in the new version. Refer to the version log for details on changes.

Overwriting

In the vast majority of cases, when you upgrade between versions, you will only need to install the new version over the old and you will be good to go.

Partial Clean Save

In some cases, you may be instructed to do a "partial clean save" before installing the new version. This method will allow you to update the mechanics portion of SDR without losing any of the spells, magic items, etc. that were added to support the new Blindness/Deafness/Muffle magic systems. Follow these steps:

  1. With SDR fully active, find a spot where there aren't any other actors nearby, make sure you are not in combat, and that there are no active magic effects.
  2. Create a saved game.
  3. Exit Oblivion.
  4. Before launching Oblivion again, make sure that the SDR.esp and SDR_Oblivion.esp (or SDR_Nehrim.esp) are deactivated. But keep SDR.esm active!
  5. Wrye Bash users: You may need to rebuild the bashed patch.
  6. Launch Oblivion and load the last save game.
  7. Save the game in a new save game slot.
  8. Exit Oblivion game.
  9. Back up any .ini tweak files.
  10. Uninstall the old version of SDR.
  11. Install the new SDR. Make sure you use the installation Wizard so you don't accidentally overwrite any existing .ini tweak files!
  12. Update the load order and activate the .esm/.esps.
  13. Wrye Bash users: Rebuild the bashed patch if desired.
  14. Double check your .ini tweaks against the change log to see if any were altered since the last version.
  15. Launch Oblivion and load the saved game.
  16. You should be good to go and the player and other actors should still have any spells, powers, and magic items that were assigned to them.
  17. Start sneaking!

Full Clean Save

In extremely rare cases, you may be instructed to do a full clean save. The unfortunate side effect is that you will lose any spells or magic items that you have acquired. Follow these steps:

  1. With SDR fully active, find a spot where there aren't any other actors nearby, make sure you are not in combat, and that there are no active magic effects.
  2. Create a saved game.
  3. Exit Oblivion.
  4. Back up any .ini tweak files.
  5. Uninstall the old version of SDR.
  6. Launch Oblivion, load the saved game.
  7. Save the game.
  8. Exit Oblivion.
  9. Install the new SDR. Make sure you use the installation Wizard so you don't accidentally overwrite any existing .ini tweak files!
  10. Update the load order and activate the .esm/.esps.
  11. Wrye Bash users: Rebuild the bashed patch if desired.
  12. Double check your .ini tweaks against the change log to see if any were altered since the last version.
  13. Launch Oblivion and load the saved game.
  14. Use the console to manually add any spells or magic items that you lost. See the SDR New Content section for information on how to do that.
  15. You should be good to go! Start sneaking!

Tweaking Settings

Section last updated on May 15 2021 14:13.

There are several files that are used to track and tweak various game settings, and they are handled in different ways.

SDR Game Setting Tweaks.ini

This file can be found in the Data\ini\SDR folder. It is the primary method for tweaking/adjusting all the main features being used for SDR. The default version that gets installed comes with the following core feature included:

  • Dynamic Detect Life Shaders system
  • Dynamic Night-Eye Shaders system
  • Blindness Magic system
  • Deafness Magic system
  • Muffle Magic system
  • Install new Blindness, Deafness, and Muffle spell icons

If you used the Wrye Bash Wizard, the above features should already be set to the proper values depending on your choices and whichever mods are already installed. Otherwise you can manually modify them, as well as any other settings in this guide, as follows...

To adjust SDR's features to taste, merely copy, paste, and tweak the code provided into the SDR Game Settings Tweaks.ini file. If you upgrade to a newer version of SDR, double check your tweaks as the settings may have changed between versions!

There are three types of game settings, which are identified by the first letter of the setting:

i = integer, which is always a whole number (-100, -34, 0, 12, 42, 10234, etc.)
f = float, which can be a whole number or decimal (1.23, -21.5, 12, 0.0005, etc.)
s = string, which is text inside quotes ("Please endorse this mod on the Nexus.")

Integer and float settings are modified using this syntax:

SetNumericGameSetting iSDRsGameSettingName 4; {5} notes about setting
SetNumericGameSetting fSDRsGameSettingName 2.8; {3.2, Obv: 2.7}

String game settings are modified using this syntax:

SetStringGameSettingEX "sSDRsGameSettingName|StringValue"; {"Default"}

Everything after a semi-colon is ignored and can be used for notes. The value in the { } is the default setting. That way if you copy the info into the SDR Game Settings Tweaks.ini file and go back and look at it later, it will remind you what the default value was. If a setting overlaps an Oblivion game setting, the Oblivion default value will be listed using "Obv:" as the indicator.

SDR Race Creature Trait Tweaks.ini

This file can be found in the Data\ini\SDR folder. It is used to either tweak the new SDR traits of a given race/creature, or to add new races/creatures that are not included in the default list. Complete details on how the new race/creature trait system works and how to tweak them can be found here: Race/Creature Traits.

sdr.ini

The sdr.ini file is found in the Data\OBSE\plugins folder. It stores all the default game settings as well as back ups of certain Oblivion.ini settings while certain Visual/Audio FX are active, just in case Oblivion crashes. While you *could* alter the sdr.ini file to change the game settings, I recommend *only* doing so if you are 100% sure that the change you are making is going to be permanent. Otherwise, I highly recommend using the SDR Game Setting Tweaks.ini file instead.

Game Mechanics

Section last updated on May 15 2021 14:13.

This section covers changes in Game Mechanics, including the Detection Formula, Vision, Hearing, Movement, Gear, Sneaking, and Race/Creature Traits.

Actor Update Queue

SDR uses a quest script that queues up all the high processing actors and fires off a series of scripts at various intervals to do different things. Without going too deep into the details, following is a chart for how often certain types of data and actions are checked for any given actor:

SecondsUpdates
.1Checks race/trait initialization status, distance to player, death check, unconsiousness check, sneaking/chameleon/transparency state
.5Checks combat with player, equip/unequip state, velocity, mounted state, movement, terrain
1Effective Chameleon value, summoned creatures/followers, Dynamic Detect Life shaders for NPCs, and SM Combat Hide AI Behavior
2Effective Sneak Skill, health/fatigue effects, running backwards, alert levels, max detection levels for player sneak skill advancement
4Invisibility snuffing check, gear updates, sprint checks for non-player actors, NPC dialog/talking detection penalty checks
8Vampirism status, NPC combat shout checks, NPC detection casting

Detection Formula

Section last updated on May 15 2021 14:13.

This section covers how detection works, which formula to use, and game setting options that allow you to tweak the results. The vast majority of game settings that affect the detection formula are in this section. However, there are a few detection formula related settings that are presented in other sections because they make more sense in those contexts.

Who Does Detection Checks and When

You cannot turn off or even temporarily disable detections. It is hardwired into the game and absolutely necessary for actors to be able to interact with each other. In my research, I have noticed the following general default behavior when it comes to Observers (those who make detection checks) and Targets (the focus of a detection check):

  • Observers...
    • must be a creature or non-player actor.*
    • must be alive.
    • must be currently in "high processing" mode. See Actor Processing Types below.
    • must be within the "active area".
  • Potential Targets...
    • must be actors. They cannot be objects.
    • can be dead.
    • must be within the current maximum detection distance of the Observer.
  • Detection checks...
    • are made by an Observer every .3 seconds
    • are made against all potential Targets within a single frame
    • are made against all potential Targets, whether the Target is sneaking or not. Sneaking just affects the chances of being detected.

* SDR provides a method to calculate the nearest equivalent of a reverse detection check, treating the player ref as if it were an NPC. This is used for the NPCs Fade While Sneaking feature.

Actor Processing Types

This is my best guess on what the processing types are based on various articles I've read.

High Processing actors are those that are actively loaded within a certain "activity range" of the player, this includes dead actors. They *might* also be actors that are key in ongoing quests as their actions may impact other events.

It *may* be possible to temporarily force an actor to be high processing for a few frames by checking the distance between that actor and the player.

Mid-high Processing actors are generally those that were in recently visited cells that are not currently loaded. This allows them some functionality and can be quickly loaded into a high processing state if they are reloaded.

Mid-low, and Low Processing actors don't do much and are hard to identify because they usually aren't anywhere near the player in order for detection to kick in. They might possibly be disabled actors, but I can't be sure.

It is possible to force Mid-high, mid-low, and low processing actors to make detection checks, but they will most likely fail to detect anything anyway.

Active Area

The "active area" seems to be a ~17,000 unit radius around the player. Below is a relatively accurate representation of the imperial isle divided up into its 4096x4096 unit cells. The "active area" around the player is the red circle.

Additional notes:

  • This limit is probably hardwired into the game. I am unaware of any setting that can change this.
  • Once an actor travels beyond the limit, they stop making detection checks.*
  • I think an actor also stops being a potential Target after traveling beyond that point (not sure).

*My assumption is that when an actor travels beyond the 17,000 unit range, they are dropping from "high processing" into "mid-high", but I'm not sure.

Detection Formula to Use

You can choose which detection formula to use with the following tweak:

SetNumericGameSetting iSDRsDetectionSystem 1; {1} 0 = use Oblivion's, 1 = use SDR's, 2 = use custom script

If you are having performance issues, or just don't like SDR's detection formula but want SDR's other features, then option "0" might be a good option. You can find out more about Oblivion's detection formula here: Oblivion Wiki: Category: Detection.

Otherwise, the default behavior is to use SDR's formula, option "1".

If you want to use your own detection formula, read the sdrSetDetectionLevelHook entry in the *Extended Functionality section of the Modder's Guide to learn how. Once you have created the scripts and calculations needed to hook your formula, select option "2" for this setting.

Oblivion Detection Game Settings

SDR was built around a number of Oblivion game settings. Only change them with good reason.

Warning: There are other mods, such as broad overhauls or other stealth related mods, which might change these Oblivion settings. So if things get unexpectedly weird, you may need to check the other mods for conflicts.

Detection Distance

Observers only make detection checks against Targets that are within the maximum detection distance of the Observer.

When the player is in an interior location, the default is 1500 units, which is approximately 68.18 ft./20.78 m. You can change that setting here:

SetNumericGameSetting fSneakMaxDistance 1500; {Obv: 1500}

When the player is in an exterior location, the following multiplier is applied to the interior setting above, resulting in a default of 3000 units, which is approximately 136.36 ft./41.56 m.

SetNumericGameSetting fSneakExteriorDistanceMult 2.0; {Obv: 2.0}

Detection Level Thresholds

These are the lowest detection levels required for an Observer to detect the Target. Which threshold kicks in depends on the behavior of the Observer towards the Target. Lower settings (towards -100) favor Observers. Higher settings (towards 0) favor Targets. They should never be all 0s or above 0, otherwise weird things happen.

Unseen Threshold

This threshold seems to only apply if the Observer is not hostile towards the Target, such as actors that are part of the same faction. This should always be 0. Hostile Observers supposedly use the Lost threshold, although I have not personally confirmed this.

SetNumericGameSetting fSneakUnseenMin 0; {0}

Noticed Threshold

This threshold is what seems to determine the AI behavior of "what's that?" or "I thought I heard something." They haven't actually detected the Target yet, but an AI search package might kick in that puts them on alert.

SetNumericGameSetting fSneakNoticedMin -20; {Obv: -20}

Lost Threshold

This threshold is what seems to determine the AI behavior of "he was just here a minute ago!" It seems to apply to Observers who had previously detected the Target but has since lost them. They are no longer in combat, and although alert, are not actively searching for the Target.

SetNumericGameSetting fSneakLostMin -20; {Obv: -20}

Combat Threshold

This threshold kicks in when the Observer is in combat with the Target. The detection level has to fall below this threshold before the Observer loses the Target. This has a significant impact combined with other factors which makes ditching someone who is combat with you extremely difficult at the default settings.

SetNumericGameSetting iAICombatMinDetection -50; {Obv: -50}

Alternative Settings

If you feel that sneaking is too difficult, you can change these settings to make it a little easier to lose people after you have already been detected. I would keep the changes proportional, for example: 0 / -10 / -10 / -25 or 0 / -4 / -4 / -10.

3rd Party Mods

Keep in mind that other mods may change these thresholds, especially large-scale overhauls. If these mods are loaded after SDR or if the changes they make are scripted and their scripts run after SDR's does, then their settings may override any tweaks that you make.

Core SDR Formula Components

There are many settings that affect detection: unit/feet conversions, how often detection checks are made, maximum detection distances, detection level thresholds, etc. Most of those should, in my opinion, not be altered, but they are made available if you really want to mess with them.

However, one area you can adjust fairly easily is the overall balance of the core detection formula.

There are four components to SDR's detection formula: Visual, Audio, Skill, and Meta. Each component has many elements that go into them. However, there is a general multiplier for each component that determines how much weight the component has in the detection formula result. Once all of these components are calculated and added together, there is a general "base detection offset" adjustment that is applied. Adjusting these five settings is the simplest method to tweak the balance without messing with the complex calculations that are under the hood.

Visual Component

The Visual component takes into account line of sight, peripheral/binocular vision, light levels, Invisibility/Chameleon effects, etc. The visual component total can never fall below 0. The following multiplier weights the Visual component in relation to the other components.

SetNumericGameSetting fSDRsVisualCheckMult 1.5; {1.5}

Audio Component

The Audio component takes into account movement, noise made by terrain, noise made by gear, talking/dialogue, deafness, etc. The Audio component total can never fall below 0. The following multiplier weights the Audio component in relation to the other components.

SetNumericGameSetting fSDRsAudioCheckMult 1.9; {1.9}

Skill Component

The Skill component is a contest between the Observer's effective sneak skill and the Target's effective sneak skill. It takes into account a variety of factors. The Skill component can either be a positive or negative result. The following multiplier weights the Skill component in relation to the other components.

SetNumericGameSetting fSDRsSkillCheckMult 1.1; {1.1}

Meta Component

The Meta component takes into account miscellaneous / metaphysical factors such as the Observer's health, fatigue, detect life effects, and factors contributed by other 3rd party mods. The Meta component can result in either a positive or negative adjustment. The following multiplier weights the Meta component in relation to the other components.

SetNumericGameSetting fSDRsMetaCheckMult .6; {.6}

Base Detection Offset

This is the number is applied after the other four components are added together.

SetNumericGameSetting iSDRsDetBaseOffset -20; {-20}, Obv: -25

Miscellaneous Detection Factors

Following are miscellaneous settings that impact the detection formula.

Automatic Detection upon Collision

If the Target collides with the Observer, this option allows you to force an automatic detection if the Observer is awake and alert. Line-of-sight, Invisibility, Chameleon, or any other factors are completely ignored.

Collision is assumed if the Target gets within the iSDRsCollisionDistance of the Observer.

SetNumericGameSetting iSDRsCollisionDistance 75; {75 units}
SetNumericGameSetting iSDRsCollisionBonus 100; {100}, 0 disables

Maximum Detection Velocity

Velocity is used in calculating audio, visual, and meta detection factors. Although it's *possible* to go faster than 900 units/second (if you are a cheetah and sprinting at max speed), it is unlikely. So, for the sake of simplifying my formulas and prevent possible weird errors, any velocity above the max will be treated as the maximum. Not worth messing with, but here it is:

SetNumericGameSetting iSDRsMaximumVelocity 900; {900} (in units/second)

Visual Component Detection Factors

Following are settings that impact the Visual component of the detection formula.

Visual Motion Factor Modifier

Whenever the Target moves, the chance of being detected visually increases based on how fast they are moving and their size (determined by their height/scale). How effective this movement adjustment is can be altered with the setting below. Changing this setting can have extreme consequences, so I do not recommend modifying it by more than .1 or .2 in either direction.

SetNumericGameSetting fSDRsVisualMotionFactorMult 1.0; {1.0} [.8 to 1.2]

Light Level Offset

This offset is applied as an adjustment to an Actor's light level before any other adjustments are made. If you increase it above 0, no one will ever be considered to be in total darkness.

SetNumericGameSetting iSDRsLightLevelOffset 0; {0, Obv: 5}

Swimming Light Level Multipliers

These settings adjust the effective light level hitting the Target if they are swimming or underwater.

SetNumericGameSetting fSDRsVisualSwimmingMult .5; {.5}
SetNumericGameSetting fSDRsVisualUnderwaterMult .5; {.5}

Sleeping Visual Modifier

Technically, it is possible to detect changes of light through the eyelids. So rather than eliminate the visual factor entirely, I've provided an option to reduce its effectiveness. This multiplier is applied to the sight calculation if the Observer is sleeping.

SetNumericGameSetting fSDRsVisualSleepMult 0.1; {0.1}, 0 disables

Headless Creatures/NPCs Can’t See

It bothered me that headless zombies were just as good at spotting me as other zombies. So, I added this feature. The following setting forces creatures tagged as having "no head" to be the equivalent of 100% blind, which equals 0 detection in the Visual category.

SetNumericGameSetting iSDRsHeadlessCantSee 1; {1}, 0 disables

Oh No! Headless Zombies!

Audio Component Detection Factors

Following are settings that impact the Audio component of the detection formula.

Base Audio Movement Penalty

This is the minimum sound penalty you will receive when moving in any way. Other sound penalties are added to this.

SetNumericGameSetting iSDRsAudioMovementPenaltyBase 1; {1} 0=fixed, 1=scaled
  • Fixed is a single value (8) which applies whether you are sneaking or not.
  • Scaled has a higher starting value (16), which is offset by 2x your mastery level in Acrobatics. If you are sneaking, it is further offset by 2x your mastery level in Sneak. Mastery levels range from 0 (Novice) to 4 (Master), so when you master both, the penalty is completely negated.

Turning In Place Sound Multiplier

The amount of noise made when you turn is much less than the noise you make when walking (default is half), however, it does become critical when creatures are walking right past you. If a creature is in close proximity, and has line of sight of you, your best bet is to not move at all until they pass you. How quickly you turn is not considered due to performance drain tracking the speeds.

SetNumericGameSetting fSDRsAudioTurningMult .5; {.5}

Landing Sound Multiplier

This is the multiplier applied to your feet/boots when you land after a fall or jump.

SetNumericGameSetting fSDRsAudioLandingMult 1.7; {1.7}

Swimming Sound Multiplier

This modifies how much sound you are making when swimming on the surface or diving.

SetNumericGameSetting fSDRsAudioMultSwim .1; {.1}

Flying Sound Multiplier

This modifies how much sound a creature makes when actively flying (has to have wings).

SetNumericGameSetting fSDRsAudioMultFly .1; {.1}

Ground Surface Type Multipliers

These multipliers are applied to the foot sound penalty when walking, running, or sprinting on the given surface material.

SetNumericGameSetting fSDRsMultTerrainStone 0.8; {0.8}
SetNumericGameSetting fSDRsMultTerrainGrass 0.9; {0.9}
SetNumericGameSetting fSDRsMultTerrainMetal 1.6; {1.6}
SetNumericGameSetting fSDRsMultTerrainWater 1.4; {1.4}
SetNumericGameSetting fSDRsMultTerrainWood 1.2; {1.2}
SetNumericGameSetting fSDRsMultTerrainSnow 1.5; {1.5}
SetNumericGameSetting fSDRsMultTerrainDefault 1.0; {1.0}

Sleeping Hearing Modifier

Although technically sleeping doesn't stop you from hearing, your brain isn't tuned in to the environment. This multiplier impacts the overall audio factor if the Observer is asleep.

SetNumericGameSetting fSDRsAudioSleepMult 0.4; {0.4}

Headless Creatures/NPCs Can’t Hear

It bothered me that headless zombies were just as good at hearing me as other zombies. So I added this feature. The following setting forces creatures tagged as having "no head" to have 0 detection in the Audial category.

SetNumericGameSetting iSDRsHeadlessCantHear 1; {1}, 0 disables

Equipping/Unequipping Weapon Audio Bump

There is a bump in sound penalty due to the noise created while drawing/sheathing a weapon.

SetNumericGameSetting iSDRsAudioEquipBump 10; {10}
SetNumericGameSetting iSDRsAudioUnequipBump 10; {10}

Combat Audio Penalty

If a Target is in combat, it's assumed they are making noise because of the actions involved: yelling, swinging swords, loosing arrows, etc. This is a flat bump that is added to other core audio elements before distance and other factors are taken into account.

SetNumericGameSetting iSDRsAIAudioTargetInCombatBonus 25; {25}, 0 negates

Talking Audio Penalty

This adds a bonus to the Observer's Audio check if the target is talking.

SetNumericGameSetting iSDRsAIAudioTalkPenalty 20; {20}, 0 = disables

Skill Component Detection Factors

Following are settings that impact the Skill component of the detection formula.

Effective Sneak Skill (ESS)

The sneak skill is essential when it comes to a number of calculations in the detection formulas. Sometimes the character's current sneak skill is used. Other times that skill level is adjusted based on several factors to provide an "Effective Sneak Skill" (ESS), which is used in the Skill vs. Skill check portion of the detection formula and elsewhere. No matter how many penalties are applied, an ESS cannot fall below zero.

Effective Sneak Skill Cap

Oblivion caps the ESS to 100 by default, regardless of any boosts over 100 due to spells or magic items. The following game setting allows you to change the cap to any value from 100 up to 250.

SetNumericGameSetting iSDRsSkillEffectiveSneakCap 120; {120}, Obv: 100, Min/Max:100/250

Uncapper Plugins

There are a few uncapper plugins out there, which would normally impact effective sneak skill, but they are ignored by SDR in favor of the setting above. So you may wish to set iSDRsSkillEffectiveSneakCap to a value more in line with those uncapped settings. If you are interested in checking any of the uncapper plugins out, you can find out more informaiton about them here:

JRoush's AV Uncapper
Elys' Uncapper v 0.96
Elys' Uncapper v 0.98

AV Uncapper is more flexible and has more features, but Ely's Uncapper is simpler to use.

Sneak Skill Effectiveness When Not Sneaking

At the time a detection check is made against a Target, if the Target is actively sneaking, they get the full amount of their ESS. If the actor is not sneaking, their ESS is reduced to some degree using the following formula:

Modified ESS = ESS2 / iSDRsSkillEffectiveSneakCap (rounded down)

For example, a Target with a 30 Sneak and cap of 120, will have an ESS of 7.5 (30*30/120). With the default cap of 120, even a Master at Sneak with a skill of 100 would still only have an ESS of 83 if they aren't sneaking.

Adjustments Due to Luck

I didn't like Oblivion's Luck adjustment formula because the lows and highs were too extreme. So, I borrowed AV Uncapper's diminishing returns technique. There are three settings that impact how the Luck attribute is applied to ESS:

This setting is the baseline Luck. No adjustments are applied to those with Luck at this level.

SetNumericGameSetting fSDRsActorLuckSkillOffset 50; {50}

This setting impacts the calculations for both penalties and bonuses.

SetNumericGameSetting fSDRsActorLuckSkillDecayRate 1.02; {1.02}

This setting only impacts the calculations for bonuses.

SetNumericGameSetting fSDRsActorLuckSkillGrowthRate .504; {.504}

To preview how these settings work and test variations, check out SDR's Formulas.

Auto-Moving Effective Sneak Skill Penalty

This penalty is applied to the player if you have auto-moving toggled on (whether sneaking or not). If you are on "auto-pilot" then you are probably bumping into things and making noise. The penalty is modified by your velocity factor (the faster you go, the more noise you make) and then subtracted from your current ESS actor value. It will not drop you below 0.

SetNumericGameSetting iSDRsAutoMovePenalty 10; {10}, 0 disables

Reality Mods

The following three mods are "reality" mods. If you don't keep up with your sleep, hunger, or thirst needs, it will affect the player's ESS.

Bare Necessities – Oblivion Only

Nexus: Bare Necessities

This feature taps into Bare Necessities’ "needs" value and penalizes the player's ESS by x pts for each need point that has been accumulated beyond the initial needs point threshold. The default threshold is 16, so for every need point accumulated after the 16, the ESS will begin to be penalized accordingly. With the default needs multiplier, a Master sneaker could go up to 48 hours before their ESS was rendered completely useless.

These default values are based on the default values of the Bare Necessities mod, so if you change the bare necessities mod, make sure to adjust these settings accordingly.

SetNumericGameSetting iSDRsBNapplyPatch 1; {1}, 0 disables
SetNumericGameSetting iSDRsBNneedsThreshold 16; {16}
SetNumericGameSetting fSDRsBNneedsPenaltyMult 1.25; {1.25}

Basic Primary Needs – Oblivion/Nehrim

Nexus: Basic Primary Needs

Basic Primary Needs covers a variety of needs: hunger, thirst, sleep, drunkenness, and caffeine. The first four provide penalties, and the last one provides a bonus. The penalty / bonus applied is a percentage of the maximum based on how severe the effect is using the HUD status bars to determine how hungry/thirsty/sleepy/etc. the player is. Effects are cumulative.

SetNumericGameSetting iSDRsBPNapplyPatch 1; {1}, 0 disables
SetNumericGameSetting iSDRsBPNmaxAdjHunger 10; {10}, 0 disables
SetNumericGameSetting iSDRsBPNmaxAdjThirst 10; {10}, 0 disables
SetNumericGameSetting iSDRsBPNmaxAdjSleep 20; {20}, 0 disables
SetNumericGameSetting iSDRsBPNmaxAdjDrunk 20; {20}, 0 disables
SetNumericGameSetting iSDRsBPNmaxAdjCaffeine 20; {20}, 0 disables

Real Sleep Extended – Oblivion/Nehrim

Nexus: Real Sleep Extended

This player's ESS is penalized by x pts for each hour past Optimal Wake Time.

SetNumericGameSetting iSDRsRSEapplyPatch 1; {1}, 0 disables
SetNumericGameSetting iSDRsRSEhourlyPenalty 2.5; {2.5}

FYI: If you have more than one of the reality mods installed, SDR will only use the first one it finds in the order listed above that has the "applyPatch" for that mod set to 1 and skip the rest.

Sleeping Skill Multipliers

If the Observer is sleeping, this is the multiplier applied to their ESS, depending on their "GetSleep" state.

SetNumericGameSetting fSDRsSkillSleepMult0 1.0; {1.0} awake
SetNumericGameSetting fSDRsSkillSleepMult1 0.8; {0.8} loading sleeping idle
SetNumericGameSetting fSDRsSkillSleepMult2 0.6; {0.6} preparing to sleep
SetNumericGameSetting fSDRsSkillSleepMult3 0.4; {0.4} sleeping
SetNumericGameSetting fSDRsSkillSleepMult4 0.6; {0.6} preparing to wake

Target Attacked Observer Modifiers

These settings determine if the Observer gets a bonus to detect the Target if the Target successfully attacks the Observer. It reflects the Observer's ability to determine the direction/origin of the attack, and thus the attacker. The bonus only lasts until the next detection check, but will be calculated each time the Observer is attacked by the Target.

SetNumericGameSetting iSDRsOnAttackedOption 3; {3}, 0 disables, 1=fixed, 2=Int Check Opt A, 3=Int Check Opt B

On Attacked Options

0 = Disables this feature.
1 = This guarantees that the Observer will get the full bonus if the Target attacked them.
2 = Requires the Observer to make an intelligence check to see if they can determine the direction/origin before getting the bonus. A number between 0 and 100 is randomly generated. If the number generated is equal to or below the Intelligence Check threshold of the Observer then they get the bonus.
3 = This is the same as 2 except if they fail the intelligence check they will get a portion of the bonus that is determined by how close they come to making the check.

On Attacked Int Check Modifier

This multiplier is applied to the Observer's Intelligence attribute to determine the Int Check threshold. The higher the value, the more likely the Observer will make a successful check.

SetNumericGameSetting fSDRsOnAttackedIntCheckMod 1.0; {1.0}

On Attacked No LOS Modifier

This setting further adjusts the Intelligence Check threshold if the Observer does not have line of sight of the attacker.

SetNumericGameSetting fSDRsOnAttackedNoLOSmod 0.3; {0.3}

On Attacked Detection Bonus

This is the maximum bonus granted to the Observer. In addition to the adjustments determined by iSDRsOnAttackedOption, this bonus is also modified by distance and other factors such as invisibility.

SetNumericGameSetting iSDRsOnAttackedDetectionBonus 100; {100}

Dialog Penalty

This penalty to an NPC's Skill check is applied because being focused on a conversation makes them less observant of their environment. The penalty is also modified by the angle of view to the Target if the Observer has LOS.

SetNumericGameSetting iSDRsAISkillDialoguePenalty 20; {20}, 0 = disables

Alert Factors

An "Alert Level" is a general rating of how alert someone is to what is going in their surroundings. 0 is at the bottom of the scale, and indicates the least amount of alertness, short of being asleep or unconscious.

AI Package/Procedures Alert Level Base

The base "Alert" value is determined by the type of AI package / sub-procedure that is currently running. This will range from 0 to 9 points.

Sneaking Alert Level Adjustment

If the detector is sneaking, their alert level will increase from 0 to 4 points, depending on Mastery level in the Sneak skill (Novice to Master). Creatures use their Stealth trait.

Recent Kill Alert Level Adjustment

Following applies to version 9.010 +

After a recent kill, a check is made every five seconds to see if other actors stumble across it and react to it. Depending on their confidence/aggression and a bit of a random element, they will receive an alert level bonus of 0 to 3 points.

These reaction checks are only made if:

  • The actor is not already in combat.
  • The actor is not one of the player's "friendly followers"
  • The actor has direct line of sight of the corpse
  • The actor can detect the corpse.
  • The corpse is not of the "undead" variety, because, how could you possible tell if it's fresh?
  • The actor is not already on alert due to a fresh kill.

You can decide how long the "fresh kill" check routine runs on the corpse and how long any "panic" alerts last using the following setting:

SetNumericGameSetting iSDRsReactFreshKillAlerts 3; {3}, 0 disables
0 = disables
1 = 30 seconds
2 = 45 seconds
3 = 60 seconds

Alert Level Offset

Once the base and adjustments are calculated, they will be offset by the following setting:

SetNumericGameSetting iSDRsAlertLevelOffset 0; {0}

If you want to make it easier to avoid detection, decrease the offset. If you want to make it harder, increase the offset. I would not go outside of a range of -5 to 5 however.

Alert Factor

After the Alert Value has been offset, it is then further tweaked and multiplied by the following:

SetNumericGameSetting fSDRsAlertFactor 0.05; {0.05}

The result is added to 1 and the new number is factored into the detector's Sneak skill level when calculating detection checks for the Skill component. For example, let's say that the observer's current alert level is 0, and you have an offset of -5:

1.0 + ((0 - 5) * 0.05) = .75

That means the detector will only use 75% of their normal effective Sneak skill for detection purposes.

Meta Component Detection Factors

Following are settings that impact the Meta component of the detection formula.

Observer's Health / Fatigue

If you are injured, you are in pain, and it is much more difficult to focus. A similar principle applies to fatigue. The more exhausted you are, the more difficult it is to concentrate.

The two settings here are the *maximum* penalty someone can possibly have in each category.

SetNumericGameSetting iSDRsDetMaxAdjHealth 10; {10}, 0 disables
SetNumericGameSetting iSDRsDetMaxAdjFatigue 20; {20}, 0 disables

Movement

Section last updated on May 15 2021 14:13.

Movement is so tied in with detection that logic led me to overhauling the movement system. Movement rates have changed in all categories: sneaking, walking, running, sprinting, and running backwards. There are changes to associated fatigue rates too. In addition, the changes apply to everyone, not just the player. Yes, that means other NPCs and creatures can sprint too. This results in what I feel is a much more realistic "moving" experience (pun intended).

There are many custom game settings used to create the movement calculations. However, you may not even want to use SDR's movement rules for a variety of reasons. This setting turns on or off SDR's revamped movement system.

SetNumericGameSetting iSDRsMovementRevamped 1; {1}, 0 disables.

0 = Turns off SDR's movement rules, letting Oblivion or other mods decide.

1 = Turns on sprinting and revised running movement rules. Tweak sub-settings to taste.

Sprinting

Sprinting is a burst of speed over short distances in a short period of time.

Given the right conditions, a non-player actor might sprint until it either runs low on fatigue or the conditions change.

The player must choose to sprint by holding down the sprint key while running. As long as the running/sprint key combination is pressed, the player will continue to sprint until they get so tired they are forced to drop down into a run or walk.

SetNumericGameSetting iSDRsSprintKey 47; {47, "V"}

For a list of other key code assignments, visit: CS Wiki: OnKeyDown.

Sprinting & Combat

When sprinting, the ability to defend yourself, let alone attack, is extremely difficult. The multipliers below represent how effective each of an actor's defense skills are when sprinting. The values should range between 0 and 1, where 0 means that the skill is useless and 1 means the skill is unaffected.

SetNumericGameSetting fSDRsSprintMultEffectiveArmorHeavy .2; {.2}
SetNumericGameSetting fSDRsSprintMultEffectiveArmorLight .5; {.5}
SetNumericGameSetting fSDRsSprintMultEffectiveBlock .8; {.8}

Movement Rates

This section allows you to set the movement rates for walking, running, sprinting, sneaking, and moving backwards.

A lot of time was spent analyzing actual world-class sprinters, marathon runners, and average competitors. I studied real world walking, running, and sprinting paces, and then used those as a reference to recreate those same paces in Oblivion. The result is a much more realistic running system that allows you to both jog for long distances as well as sprint for short ones. The fastest movement rates were calculated based on world class athletes and simulating their stats, gear, and athleticism within Oblivion.

If you want to learn more about how effective walking and running speeds are calculated in Oblivion, visit: CS Wiki: Movement Game Settings.

Walking Movement Rates

These settings determine the low and high end of the spectrum when it comes to the walking speed of NPCs and the Player. Creature min/max walk rates are left unchanged from Oblivion defaults.

SetNumericGameSetting fSDRsMoveCharWalkMin 80; {80}, Obv: 90
SetNumericGameSetting fSDRsMoveCharWalkMax 130; {130}, Obv: 130

Running Movement Rates

Default Oblivion running speeds fall somewhere in between a jog and a sprint, which makes sense if you only have one running option. However, by introducing Sprinting the running speed needs to be adjusted down accordingly. SDR's running pacing imitates that of doing a half-marathon. For beginning characters with low athletics and wearing lots of gear, it will feel much slower than what you are used to, but after a while it will feel very natural. And at high levels of Strength, Endurance, and Athletics, you will be the equivalent of a world-class marathon runner.

Warning: If you tweak these running settings too much, you could seriously overpower your movement rate when sprinting at higher levels. These things are intertwined, so be very careful.

SetNumericGameSetting fSDRsRunMoveMult 1.8; {1.8}, Obv: 3.0
SetNumericGameSetting fSDRsRunMoveMultAthletics 1.4; {1.4}, Obv: 1.0

The first setting determines the multiplier applied to the Walk velocity when an actor runs. The second setting determines the multiplier applied to the Athletics skill.

Sprinting Movement Rates

The top speed of any given race/creature is determined by a Sprint Factor that is assigned as one of the new Race/Creature Traits. Whenever an actor decides to sprint, the Sprint Factor is used to determine what the target velocity should be. Their Speed attribute is then temporarily modified for the duration of the sprint to meet that target, and then returned to normal when they stop sprinting.

Sneak Movement Rate

This feature allows you to change the base sneak movement multiplier. This multiplier is applied to your walking/running/sprint speed when you are in Sneak mode. The default Oblivion multiplier is .6, which I’ve always felt that was a wee bit high, so I dropped the default down to .5.

SetNumericGameSetting fSDRsMoveSneakMult .5; {.5}, Obv: .6

Moving Backwards Rate

In the default Oblivion game, you are able to move backwards at the same velocity as moving forwards, which is not particularly realistic. This feature will temporarily reduce your speed attribute and athletics skill accordingly. The default values are based on my research into events that were specifically geared towards walking backwards. Some notes to consider:

  • It automatically detects movement direction and adjusts accordingly.
  • Sprinting is not possible when moving backwards.
  • This impacts the Player and NPCs, but not Creatures.
SetNumericGameSetting fSDRsBackwardsMoveMult .4; {.4}, 0=disables

Warning: There are a number of mods that also implement walking backwards rules. So, make sure that only one of them is actively applying that feature.

Fatigue Calculations - Running

This feature overhauls fatigue calculations based on the new movement rates. Regardless of how good your stats are (Strength, Agility, Endurance, Willpower), unless you have special magical reinforcements, running of any kind will drain fatigue. How long you last will depend on your stats, weight carried, and athletics skill.

At the default settings, someone with maxed out stats of 100 in all key attributes and skills can run for about 4.3 minutes in-game, the real-life equivalent of a two-hour marathon. Someone at the low end with stats of 20 in all key attributes and skills can run for about 16 seconds in-game, the real-life equivalent of running for about 8 minutes straight before being exhausted.

SetNumericGameSetting iSDRsFatigueRunOption 1; {1}, 0 disables.

If you are using another fatigue mod, you can disable this option and still use the other movement related changes.

Fatigue burned when running

These settings determine how much fatigue is burned per second when running. The formula is:

Fatigue burned = (fSDRsFatigueRunBase + (fSDRsFatigueRunMult * Encumbrance/MaxEncumbrance)) * fPerkAthleticsXXFatigueMult

This setting establishes the base fatigue for running as well as sprinting.

SetNumericGameSetting fSDRsFatigueRunBase 11.0; {11}, Obv: 8.0

This multiplier is applied to the total encumbrance the actor has, accelerating fatigue loss.

SetNumericGameSetting fSDRsFatigueRunMult .05; {.05}, Obv: 0.0

Athletics perk adjustments

The last item in the formula above represents the Athletics Perk Adjustment. There is a different multiplier for each mastery level:

SetNumericGameSetting fSDRsFatigueAthleticsMultNovice 1.20; {1.20}, Obv: 1.0
SetNumericGameSetting fSDRsFatigueAthleticsMultApprnt 1.14; {1.14}, Obv: .75
SetNumericGameSetting fSDRsFatigueAthleticsMultJrnymn 1.08; {1.08}, Obv: .5
SetNumericGameSetting fSDRsFatigueAthleticsMultExpert 1.02; {1.02}, Obv: .25
SetNumericGameSetting fSDRsFatigueAthleticsMultMaster 0.96; {0.96}, Obv: 0

Fatigue regeneration

These two settings determine how much fatigue you regenerate per second. The formula is:

fatigue regenerated = fFatigueReturnBase + fFatigueReturnMult * Endurance
SetNumericGameSetting fSDRsFatigueReturnBase 8.0; {8.0}, Obv: 10.0
SetNumericGameSetting fSDRsFatigueReturnMult .01; {.01}, Obv: 0

Player Running Fatigue Limitations

The following settings only apply to the player. As long as your fatigue is at least the % of the Upper threshold, you can start running. You can continue to run until your fatigue drops below the lower threshold. Then you will be forced to walk. You cannot run again until your fatigue reaches the upper threshold again.

SetNumericGameSetting fSDRsFatigueRunLowerLimit .1; {.1}, Obv: 0
SetNumericGameSetting fSDRsFatigueRunUpperLimit .2; {.2}, Obv: 0

Fatigue Calculations - Sprinting

Because sprinting can be activated independently of the running fatigue settings, Sprinting has its own set of fatigue settings. When you sprint, you burn a tremendous amount of fatigue.

A multiplier of 1 or less means sprint fatigue effects will not be applied.

SetNumericGameSetting fSDRsFatigueSprintBurnMult 3.4; {3.4}, 1 disables

Sprint Fatigue Update Cycle

This setting determines how often fatigue is updated in seconds when an actor is sprinting. The default rate seemed to be the smoothest in play-testing. Recommended range is .1 to .5, don't go below .1 or above 1.

SetNumericGameSetting fSDRsFatigueSprintUpdateRate .1; {.1} [.1 to .5]

Player Sprinting Fatigue Limitations

These setting apply to the Player and NPCs. As long as fatigue is at or exceeds the upper threshold (40% by default) an actor can start sprinting. They can continue to sprint until fatigue drops below the lower threshold. They will then be forced to run. They cannot sprint again until fatigue reaches the upper threshold again.

SetNumericGameSetting fSDRsFatigueSprintLowerLimit .3; {.3}, 0=no limit
SetNumericGameSetting fSDRsFatigueSprintUpperLimit .4; {.4}, 0=no limit

Gear

Section last updated on May 15 2021 14:13.

What you wear impacts your field of view, your hearing, and how much noise you make.

HINT: Daedric armor is not great for avoiding detection, seeing anything, or hearing anything.

Helmets and Hoods

Helmets and Hoods impact your ability to see and hear, so it's important to be able to determine what an actor is wearing on their head.

Determining Headwear

It is easy to determine if an actor is wearing a helmet and whether it is heavy armor or light armor.

In default Oblivion, the only other possible thing you can put on your head is a hood. However, there are mods out there that add other head wearable objects like circlets - which should not impact detection. To work around this, SDR looks at the name of the object and does a keyword search for "Hood".

But for those that play with Oblivion in other languages, the word may be different. So, you can use this setting to change the keyword to what is best for your native language.

SetStringGameSettingEX "sSDRsHeadgearHoodText|Hood"; {Hood}

Headgear Impact on Field Of View

The more protective a helmet is, the more it reduces your field of view. Anyone who has ever worn a helmet will know exactly what I mean. If you install mods that change the base armor ratings of objects, you may need to adjust the multiplier accordingly. Magical bonuses to the armor, the wearer's skill, and any improvements due to Armorer workmanship are ignored.

This setting is the base degree change by which the field of view is reduced:

SetNumericGameSetting fSDRsHeadgearFOVDegreeBase 4.0; {4.0}

The field of view is calculated as:

190 - (HelmetArmorRating * fSDRsHeadgearFOVDegreeBase)

Note that if the helmet encloses the entire head, the degree base is increased by * 1.5.

Since hoods aren't armor, they have a separate setting that sets a fixed Field of View restriction.

SetNumericGameSetting iSDRsHeadgearFOVHood 120; {120}

Headgear Impact on Hearing

This setting applies a multiplier to the base armor rating of the helmet, determining the % effectiveness of the wearer's ability to hear a Target. If other mods tweak the armor ratings of Helmets, you may want to adjust this setting accordingly.

SetNumericGameSetting fSDRsHeadgearHearingPenaltyMult 2.0; {2.0}, 0 disables.

Hoods use the weight of the hood as a "thickness" to come up with a base value equivalent to a helmet's armor rating. If other mods adjust armor ratings, you may wish to change this value to something that is proportional to the armor value changes.

SetNumericGameSetting fSDRsHoodHearingMult 1.0; {1.0}, 0 disables.

Gear Type Audio Multipliers

SDR takes into account all of your gear, not just boots. There are three different categories: Footwear, Equipped Gear, and Unequipped Gear. Footwear is whatever is on your feet. Equipped includes all actively selected "bulky" gear: armor, weapons, shields, clothing, etc., but not things such as rings or amulets. Unequipped is everything else - basically whatever is in your "backpack".

The sound made by each of these categories is the combined weight in each category multiplied by the game setting below. These base sound penalties are then further modified by velocity of movement and other variables. If you make the setting 0, that category will make no sound.

SetNumericGameSetting fSDRsAudioGearMultFootwear .20; {.20}
SetNumericGameSetting fSDRsAudioGearMultEquipped .05; {.05}
SetNumericGameSetting fSDRsAudioGearMultUnequipped .01; {.01}

Sneaking

Section last updated on May 15 2021 14:13.

In addition to changing how the Effective Sneak Skill is calculated and the Sneaking movement rates covered earlier, there are other changes as well, such as how Sneak skill points are earned, revised Sneak Mastery Level Perks, and the new Fading while Sneaking visual effect.

Gaining Sneak Skill Points

There are two important changes for how one gains sneak skill points.

Sneaking Skill-ups: SDR significantly changes how you earn points for sneaking around. Rather than a flat amount regardless of distance, the bonus varies based on the closest potential detector and ignores detection levels of actors that are following the character.

Assassination Skill-ups: SDR provides a new way to gain points if you make a successful "clean kill" without being detected by anyone.

If the player has reached the maximum base Sneak skill level, they will not be awarded more points. In regular Oblivion, the maximum is 100, but this can be increased if you have an uncapper mod such as AV Uncapper or Elys' Uncapper.

Note: If Oblivion XP is detected, SDR's Sneak skill-up systems will be automatically disabled. Other than Oblivion XP, SDR's Sneak skill up system should be compatible with other leveling mods.

Sneak Skill-up Ranges

These settings determine the range at which points are awarded for either Sneaking or Assassination. Ranges are in units (22 units = 1 foot):

SetNumericGameSetting iSDRsSkillUpRangeClose 220; {220, 10 ft / 3.05 m}
SetNumericGameSetting iSDRsSkillUpRangeLong 1430; {1430, 65 ft / 19.81 m}
  • At the long range and beyond, the player will receive 0 points.
  • From long to close, the player will receive a fraction of the normal award amount, in proportion to the distance.
  • At the close range and closer, the player will receive the full award amount.

Sneak Skill-up Message

SDR's method for increasing Sneak XP bypasses the normal ways of doing things, which has the side effect of disabling the usual "Your Sneak skill increased" message and sounds.

SDR has programming to replicate those features. However, if you would prefer to suppress those messages, you can do so with these settings:

SetNumericGameSetting iSDRsSkillUpSuppressIncreaseMsg 0; {0}, 1 suppresses
SetNumericGameSetting iSDRsSkillUpSuppressIncreaseSound 0; {0}, 1 suppresses

Alternate Sneaking Skill-Up System

SDR provides an alternative method that replaces the default Oblivion Sneaking skill-up system.

SetNumericGameSetting iSDRsAltSneakSkillUpSystem 1; {1} 1=SDR, 0=Oblivion

SDR grants points under the following conditions:

  • Player is sneaking.
  • Player is undetected*.
  • The closest potential Observer must be within sneak skill-up range/distance.
  • Player is moving at a minimum velocity**.

* Detection levels from summoned/companion followers are ignored.

** The minimum velocity is calculated from the fMoveCharWalkMin * fMoveSneakMult game settings. With SDR's default settings, that would be 40 u/s or approximately 2 feet/second.

Justification for Minimum Velocity: This feature stops you from earning points by "sneaking" into walls or corners when you know you can't be seen. Since velocity is used to determine how much sound you make, walking into a wall or corner is at or near a 0 velocity, which means you won't be heard. The reality is no one would be walking in place in a corner for any reason unless they were brain damaged or a comedian. So SDR looks at how fast the actor is travelling, and if it is below the minimum velocity it treats them as standing still for the purpose of gaining sneak skill up points.

Base Sneak XP Points Awarded

This setting determines the maximum amount of sneak skill experience points that can be awarded per second before adjusted by the distance factors described above.

SetNumericGameSetting fSDRsAltSneakSkillUpAmount 1.0; {1.0}

As a reference, Oblivion's skill-up distance is 1000, but awards the same amount of points regardless of distance from observer to player. Oblivion's default sneak xp is .75/second, for Nehrim it is .55/second. I recommend a rate of 1.0 for Oblivion and .75 for Nehrim to fall in line with their progression since the total will be adjusted due to distance from closest Observer.

No Points from Sleeping Observers

Since it is extremely easy to sneak around sleeping people, anyone who is sleeping is ignored when determining who the closest potential non-following Observer is when determining points.

SetNumericGameSetting iSDRsAltSneakIgnoreSleepers 1; {1}, 0 disables

Assassination Sneak Skill-Ups

To balance out the increased difficulty in gaining sneak skill points through standard sneaking, I've added an Assassination option that grants sneak skill points on the event of a clean kill while undetected.

SetNumericGameSetting iSDRsAltAssnSkillUpSystem 1; {1}, 0 disables

In order to get the award, the following conditions must be met:

  • Player must be sneaking
  • Player must not have been in direct combat for at least 8 seconds
  • Player must not have reached maximum in their Sneak skill
  • Player must not be detected* by the target or anyone else
  • Target must not be alarmed / have weapon out
  • Target must not be essential
  • Target must be within the Skill Up Long Range (see above)

*Companions and summoned followers' detection of the player are ignored.

Base Assassination Skill-up Amount

This is the base skill up amount awarded for a clean "Assassination" shot.

SetNumericGameSetting fSDRsAltAssnSkillUpAmount 3.0; {3.0}

This base amount is then modified by a number of additional factors...

Target Level Handicap

Experience points are awarded based on the level difference between the player and the target. The more that the level of the target is above yours, the more points you get and vice versa. This option lets you increase/decrease their effective level to make gaining points easier/harder. The bigger the number, the easier it will be to gain experience through assassinations.

SetNumericGameSetting iSDRsAltAssnTargetLevelHandicap 2; {2}, 0=no handicap

The level difference is then factored to determine what multiplier should be applied to the base experience point amount. There is one factor if the target's effective level is less than the player's (below the line) and another if it is greater than the player's (above the line).

SetNumericGameSetting fSDRsAltAssnAboveTheLineAdj .25; {.25}
SetNumericGameSetting fSDRsAltAssnBelowTheLineAdj .2; {.2}

The formula for calculating the multiple is:

1.0 + ((TargetAdjLevel - PlayerLevel) * (Above or Below TheLineAdj))

If the result is 0 or less, then the player is at too high a level to gain any experience points for the kill.

Poison Kill Modifier

This setting is applied if the death blow was caused by poison and not a direct hit by the player. By default, it somewhat reduces the amount of xp award, because killing by poison is much easier than a single strike. If you don't want it to have any penalties, set the modifier to 1.0.

This feature requires the Poison Kill Credit bug fix to be applied.

SetNumericGameSetting fSDRsAltAssnMultPoison .75; {.75}, 1.0 disables

Sleeping Kill Modifier

This setting is applied if the death blow occurs while the Target is asleep (GetSleeping == 3). Because it's much easier to sneak up on a sleeping person undetected, I personally feel you shouldn't get as big of a bonus. If you disagree, change it.

SetNumericGameSetting fSDRsAltAssnMultSleeping .3; {.3}, 1.0 disables

HUD Assassination Message

Normally you will get a message in the HUD with successful kills. You can suppress it if desired:

SetNumericGameSetting iSDRsAltAssnShowMessage 1; {1}, 0 disables

NPCs will be "assassinated" and creatures "neutralized".

Sneak Mastery Perks, Revised

The following settings apply to the various optional perks that are connected to the player's Sneak skill mastery level. In some cases, they modify existing perks. In other cases, they replace perks that are made obsolete due to the new SDR detection formula.

Sneak Attack Damage Multipliers

Select which set of multipliers you wish to use for sneak attacks.

SetNumericGameSetting iSDRsPerkSneakAttackMultOpt 1; {1}, Obv: 0
Setting Novice Apprentice Journeyman Expert Master
# Description Melee Ranged Melee Ranged Melee Ranged Melee Ranged Melee Ranged
0 Unmodified * 4x 2x 6x 3x 6x 3x 6x 3x 6x 3x
1 Challenging ** 2x 1x 3x 1.5x 4x 2x 5x 2.5x 6x 3x
2 Extended 4x 2x 6x 3x 8x 4x 10x 5x 12x 6x
3 Curved 4x 2x 5x 3x 7x 4x 10x 6x 14x 9x
4 Deadly 4x 2x 6x 3x 9x 5x 13x 8x 18x 12x

* Makes no changes to the default values, allowing another mod (such as OOO/FCOM) to alter them, or you can customize them directly with the settings below.

** Challenging is especially recommended in combination with mods that increase the normal damage of weapons, such as Duke Patrick's melee and archery combat mods.

Custom values for melee sneak attacks

SetNumericGameSetting fPerkSneakAttackMeleeNoviceMult 4; {Obv: 4}
SetNumericGameSetting fPerkSneakAttackMeleeApprenticeMult 6; {Obv: 6}
SetNumericGameSetting fPerkSneakAttackMeleeJourneymanMult 6; {Obv: 6}
SetNumericGameSetting fPerkSneakAttackMeleeExpertMult 6; {Obv: 6}
SetNumericGameSetting fPerkSneakAttackMeleeMasterMult 6; {Obv: 6}

Custom values marksman missile sneak attacks

SetNumericGameSetting fPerkSneakAttackMarksmanNoviceMult 2; {Obv: 2}
SetNumericGameSetting fPerkSneakAttackMarksmanApprenticeMult 3; {Obv: 3}
SetNumericGameSetting fPerkSneakAttackMarksmanJourneymanMult 3; {Obv: 3}
SetNumericGameSetting fPerkSneakAttackMarksmanExpertMult 3; {Obv: 3}
SetNumericGameSetting fPerkSneakAttackMarksmanMasterMult 3; {Obv: 3}

Apprentice Perk - Run while Sneaking

The only apprentice perk used to be the sneak attack multiplier option. Since that has been extended throughout all mastery levels, I added a new "Perk" for the apprentice level to make things more interesting. With this option enabled, you won't be able to run and sneak until you are at least an Apprentice in Sneak. This rule only applies to the player.

SetNumericGameSetting iSDRsPerkRunWhileSneaking 1; {1}, Obv: 0
  • 0 = can always run while sneaking
  • 1 = can only run while sneaking after attaining Apprentice level mastery in Sneak
  • 2 = can never run while sneaking

Journeyman Perk - Bypass Pressure Plates and Tripwires

SDR’s detection formula wipes out the Journeyman perk of being able to ignore the weight of boots, so a new replacement perk has been added. Actors with a Journeyman mastery level of Sneak can bypass most pressure plates and tripwire traps without setting them off, as long as they are in sneak mode and moving at a walking pace. Running or sprinting through them, sneak mode or not, will still set them off.

SetNumericGameSetting iSDRsPerkTripWiresPressurePlates 1; {1}, Obv: 0

Important! This feature requires that SDR_Oblivion.esp/SDR_Nehrim.esp be installed and active for whichever game world you are playing.

Expert Perk - Sprint While Sneaking

SDR's detection formula wipes out the Expert perk of being able to run without any sneak penalties. Instead it has been replaced with an option that allows sprinting while sneaking. By default, you can't sprint and sneak at the same time until you have reached the Expert mastery level. However, you can change this setting as follows:

SetNumericGameSetting iSDRsPerkSprintWhileSneaking 1; {1}
  • 0 = can always sprint while sneaking
  • 1 = can only sprint while sneaking after attaining Expert level mastery in Sneak
  • 2 = can never sprint while sneaking

These rules apply to the player as well as all NPCs if sprinting has been made available to them.

Important! This feature requires that SDR's Movement Revamped rules be activated. If you are using another mod to handle sprinting instead of SDR's system, the sprint while sneaking perk setting will be ignored.

Fading When Sneaking

SDR has the option to make actors transparent while sneaking. The transparency is measured in "alpha" units, where 1.00 is 100% visible, and 0.0 is completely invisible. The alpha state is updated every .1 seconds for all actors. This provides the smoothest fade in/fade out visual transitions. This is hardwired into the scripting and cannot be modified by any game setting. The moment an actor stops sneaking, they immediately pop back into their default transparency (usually 100%, unless they are naturally transparent like a ghost).

Note: An active Chameleon or Invisibility magic effect will take precedence and override any Fade While Sneaking effect.

Player Fades While Sneaking

This setting allows the Player to fade while sneaking. The alpha value is based on the highest detection level of the player by all Observers, ignoring those following the player.

SetNumericGameSetting iSDRsFadeSneakPlayer 1; {1}, 0 disables

NPCs Fade While Sneaking

If enabled, applies to all actors that are sneaking, including the Player's followers. The alpha value is based on the Player's detection level of the actor.

SetNumericGameSetting iSDRsFadeSneakNPCs 1; {1}, 0 disables

Detection Level Offset

For both scenarios, there is a detection "offset", which determines at what detection level the fading starts to kick in. Therefore, transparency will not necessarily provide an accurate detection level. That means you could be partially faded, but still detected, which should keeps things a bit more interesting.

SetNumericGameSetting iSDRsFadeSneakLevelOffset 50; {50}

Transitional Fading Timing

When in sneak mode, the transparency target value can change from moment to moment. But to prevent any sudden jarring changes, the amount that one fades in and out changes in small increments over time. This setting determines the maximum alpha value change per second.

SetNumericGameSetting fSDRsFadeSneakAmountPerSecond .25; {.25}, 0 disables

A 0 setting disables transitional fading and makes the new transparency value kick in instantly. But it looks like crap, so I don't recommend it.

Player Minimum Opacity

This option makes it convenient to be able to see what you are doing when the Player would normally be completely transparent. Pick a bare minimum alpha value between 0 and 1.00. 0 = you can become completely invisible, 1.00 = you will always be solid/visible.

SetNumericGameSetting fSDRsFadeSneakPlayerMinOpacity .30; {.30}

Race/Creature Traits

Section last updated on May 15 2021 14:13.

There are several changes to the traits and abilities that the various races and creatures have.

NPC base foot-weight

Foot-weight impacts detection. It does not represent the actual weight of the feet, but more along the lines of how noisy your steps are. So although larger creatures generally have heavier foot-weights than smaller creatures, there will be the occasional exception.

Although creatures are assigned a foot-weight, for some unknown reason races were not. My guess is that the game designers assumed that all NPCs would be wearing some kind of footwear that would make noise. But that created a loophole which allowed a player to go barefoot and not make any noise at all!

SDR closes the loop hole by assigning a base foot-weight to all NPC races. This foot-weight is further modified by an actor's size scale and their race's weight scale and then stored as part of the custom actor values that are calculated when their actor token is first added.

SetNumericGameSetting fSDRsBaseNPCFootweight 6; {6} 

For creatures, their base foot-weight is modified by their scale. The largest creature foot weight in default Oblivion is 27 (Xivilai). If by chance an actor's foot-weight exceeds 30, it will be capped at 30.

Detection magic (DM) assignment probability

This custom race/creature trait works in conjunction with the NPC Detection Magic feature and determines the probability of an actor being assigned some form of detection magic:

0 = Will not be assigned detection magic
1 = Might be assigned detection magic, test for Detect Life, then maybe Night-Eye
2 = Guaranteed to be assigned a Detect Life spell

See the AI Behavior: NPC Detection Magic section for complete details on how this feature works.

Auricular motion (AM)

This represents the ability of the race/creature to "dial in" to the direction the sound comes in, also known as sound localization. The ability is connected to how maneuverable the outer ears are:

Value Type Description
0 Swiveling Swiveling means that the ears can move independently and turn up to 180 degrees. This essentially allows for at least one ear to face in any direction with minimal, if any, head movement. Animals such as cats and horses have swiveling Auricular Motion.
1 Flexible Flexible means that the ears can move a little bit, usually around 30 to 60 degrees, allowing for improved directional recognition. Creatures like Imps, Scamps, and Minotaurs have flexible Auricular Motion.
2 Rigid Rigid means that the ears don't move, and so to tune one has to turn their head to get a better idea of where the sound is coming from. Humans and most of the other races have rigid Auricular Motion.
3 Omnidirectional Omnidirectional means that the creature doesn't have ears like birds or mammals do. They sense sound coming from all directions, but lack the aural organs to tune in to the direction as well other races and creatures. Fish, reptiles (including Argonians), insects, spiders, plant-based creatures, and certain kinds of magical creatures like Will-O-the-Wisps have omnidirectional Auricular Motion.

Auricular Motion and Line of Sight

Generally speaking, it's a little easier to focus on sounds that originate from within line of sight. Therefore, there is a penalty to the overall hearing factor when the target is not in line of sight. The base penalty is…

SetNumericGameSetting fSDRsAudioNoLOSPenalty 0.1; {0.1}, 0=no penalties

This penalty is multiplied by the Auricular Motion value (0, 1, 2, or 3) and then subtracted from 1. With the default settings, if the Observer does not have line of sight of the target, an Observer would have penalties depending on their Auricular Motion type as follows:

SwivelingNo penalty
Flexible10% penalty
Rigid20% penalty
Omnidirectional30% penalty

Hearing Acuity (HA)

This trait loosely represents how good the hearing is of the race/creature. There are five levels of Hearing Acuity: Deaf (0), Impaired (1), Fair (2), Acute (3), and Superior (4).

The five types have different multipliers indicating their effectiveness. Each race / creature type is assigned a level of hearing acuity. There are also special rules for vampires.

Deaf

Deaf means that the race/creature cannot pick up any remote vibrations or use sound in any manner to detect others. The audio detection factor for the deaf will always be 0. By default, no creature or race is deaf, except for things like mannequin NPCs, which don't really interact or move, but still need to be assigned values.

Impaired Hearing

Impaired hearing indicates reduced hearing effectiveness until the sounds come within a closer range. This applies to creatures with very bad hearing or creatures without normal ears that pick up on scents or vibrations nearby (such as reptiles, spiders, and insects).

SetNumericGameSetting fSDRsHearingMultImpaired .5; {.5}

Fair Hearing

Fair hearing applies to humans and those that can hear at similar distances and frequencies.

SetNumericGameSetting fSDRsHearingMultFair 1.0; {1.0}

Acute Hearing

Those with Acute hearing can pick up more details at longer distances and within a wider range of frequencies than Fair. This includes dogs, wolves, and elves, among others.

SetNumericGameSetting fSDRsHearingMultAcute 1.2; {1.2}

Superior Hearing

Superior hearing is the best one can have. This includes great cats, Khajiit, deities, and dragons, among others.

SetNumericGameSetting fSDRsHearingMultSuperior 1.5; {1.5}

Hearing Acuity, Distance, and the Detection Formula

With SDR, I tried to recreate the math behind how sound travels and apply it to the detection formula. The volume of sound drops by 6 decibels every time the distance doubles. That means the fall off is pretty fast in close quarters but then levels out at greater distances. Based on my research, I came up with the following formula to imitate this behavior:

dFactor = Distance Factor = (1 – (current distance / max distance)) * (hearing acuity multiplier).

aFactor = Audio Factor = the resulting multiplier applied to the base noise the target is making.

Following are some example numbers using the formula above:

Distance FactorAudio Factor
1.00.921658596
0.9843750.768815853
0.8750.355794696
0.750.220447898
0.50.12519654

Vampires and Scalable Hearing Acuity

This option allows a vampire's hearing acuity to improve as it progresses through the stages of the disease. It can never fall below their natural hearing acuity.

SetNumericGameSetting iSDRsHearingVampiresScalable 1; {1}, 0 disables

Vision Types (VT)

In Oblivion's default system, every race and creature has the same visual abilities and limitations as everyone else. SDR adds some variety to make things more interesting.

SDR has five innate vision types that are assigned to the various races/creatures: Blind, Poor, Standard, Night, and Divine. These vision types are handled by the New Actor Traits assignment system and can be modified using the SDR Game Setting Tweaks.ini. Regardless of what type of vision someone has, no one can see in total darkness.

Blind

Blind means the race/creature cannot see and cannot use sight to detect others.

Poor Vision

Poor means the race/creature has trouble distinguishing shapes until objects are closer. In game mechanics terms, the distance factor penalty is applied twice to those with poor vision.

Standard Vision

Standard vision is the default. The distance factor penalty only applies once.

Night Vision

Those races/creatures that have Night vision innately are considered to have it active all the time. It is not magical. It is a fundamental physical ability that they can't turn off. Conceptually, SDR treats the Night-Eye spell as just a magical implementation that alters the caster's eyes to mimic the eyes of a race/creature that has Night vision naturally.

On a physiological level, SDR treats those with night vision as though they have more rods and cones which allow them to absorb more light. However, in bright light, they experience a bit of sensory overload, causing some tunnel vision and loss of some of their visual acuity.

Game mechanics wise, this allows those with Night vision to see better when there is less light, however, by default they still can't see anything in total darkness, nor is their vision any better in bright light.

Unlike default Oblivion which just multiplies everything x3, SDR uses a curve for those with Night Vision that increases the brightness in low light conditions. But as light levels approach maximum, the benefit decreases until it is negated. For the player, you have some options as to how you want Night-Eye visual effects to work. Complete details can be found in the Magic: Night-Eyesection.

Innate Night Vision Assignment

If your character's race has Night Vision innately, you have three options for how you would like innate night vision to work.

SetNumericGameSetting iSDRsNightEyeInnate 1; {1} 0=none, 1=ability, 2=power

None: This means you won't get any Night Vision power, even if your character's race is supposed to have it innately. Do this if you want the challenge. However, that won't stop other actors from having it innately.

Ability: Night-vision is granted as an Ability and is active all the time. This was designed to be used in conjunction with SDR's new Dynamic Night-Eye Shaders (DNES), which are significantly less visually annoying than Oblivion's default Night-Eye shader. So, if you aren't using DNES, then you probably don't want this option.

Power: Night-vision is granted as a Power. When you use the power, it adds/removes the ability. Best choice for those who aren't using DNES or just want the flexibility.

Divine Vision

Divine should only be assigned to the most intelligent, powerful, mystic beings such as Balrogs, Dragons, Deities, and Lich Kings. It has all of the advantages of Night vision, it reduces all distance penalties by 50%, and can potentially see right through Invisibility / Chameleon magic.

SetNumericGameSetting iSDRsDivineBypassesInvisibility 1; {1}, 0 disables
SetNumericGameSetting iSDRsDivineBypassesChameleon 1; {1}, 0 disables

Divine vision doesn't actually dispel the Invisibility / Chameleon effect. But the spells are ignored when it comes to determining detection results.

Note: If you decide to give "Divine" vision to the race of your player character, there is no programming built in for what that would look like visually, because you shouldn't have it.

Field Of View (FOV) and Line of Sight (LOS)

With default Oblivion, regardless of physiology all creatures and races have a 190 degree field of view and see equally well at all angles.

SDR introduces options to create customized settings for binocular and peripheral fields of view for all races/creatures.

Binocular Vision (BV)

Binocular vision is the range in which both eyes can see an object. This allows the Observer to have depth perception and be focused on the Target, and greatly improves their ability to notice anything in that range. Creatures that have both eyes towards the front of their head looking forward tend to have a wide binocular field of view, and are usually omnivore/carnivore/predator types.

Peripheral Vision (PV)

Peripheral vision is the range in which only one eye can see. Placement of the eyes on one's head determines the range. For people, it is about 190 degrees. For cows and horses, it's nearly 360 degrees. Creatures that have eyes on the sides of their head tend to have a much wider peripheral field of view, and are usually herbivores and prey for predators.

Line of Sight Calculations

Oblivion cuts off all line of sight calculations at +/- 95-degrees. SDR fudges things a bit with its own version of GetLOS that also loosely incorporates the extended peripheral ranges beyond +/- 95-degrees and takes into account things such as helmets and detect life.

Field of View Mechanics Example

The above graphic demonstrates the peripheral and binocular field of view ranges for a typical humanoid which is 190 degrees of peripheral vision and 120 degrees of binocular vision.

The binocular field of view extends 60 degrees in either direction from the axis of the Observer staring straight ahead.

The closer the Target is to the main axis line of sight, the better chance the Observer has to see the Target. With SDR's default settings, that can be up to 20%.

The peripheral field of view extends from the 60 to 95 degree range in either direction from the axis line. The further out on the edge of the field of view, the more difficult it becomes to see the Target. With SDR's default settings, that can be up to -40%.

Beyond the 95 degree line, the Observer will not have line of sight of the Target.

This setting determines how you want to the field of view game mechanics to work.

SetNumericGameSetting iSDRsFOVMechanics 2; {2}, 0 disables, 1=basic, 2=extended
0 = Use Oblivion’s default approach with a 190-degree FOV for everyone and no adjustments for binocular/peripheral vision.
1 = Use SDR’s peripheral/binocular system but cuts off peripheral vision at Oblivion’s default 190 degrees.
2 = Use SDR’s entire peripheral/binocular system. However, it may return some unexpected results beyond Oblivion's hardcoded 190-degree cut-off due to the limitations of my workarounds.

The great thing about option 2 is that it will make sneaking up on animals and other creatures that have a greater than 190-degree field of view much harder. No longer can you be sure that sneaking up behind something guarantees you won’t be spotted.

Visual Angle Scaling

If you have selected option 1 or 2 for utilizing extended fields of view, you can set multipliers that improve or penalize the overall sight detection. If you selected 0, these settings are ignored.

fSDRsFOVmaxBonus is the maximum multiplier bonus (added to 1) that you can get if the Target falls within the Observer's binocular field of view, staring straight ahead. With the default setting, that would be * 1.2.

SetNumericGameSetting fSDRsFOVMaxBonus .2; {.2}

fSDRsFOVmaxPenalty is the maximum penalty (subtracted from 1) that you can get when the Target is at the farthest reaches of one's peripheral vision. With the default setting, that would be * 0.6.

SetNumericGameSetting fSDRsFOVmaxPenalty .4; {.4}

At the exact border between Binocular and Peripheral there would be no bonus/penalty, resulting in a multiplier of 1. I do not recommend going much higher than the default values, otherwise the variance might start getting really whacky when you compare the range for 0 degrees to the edge of the peripheral vision, but that's entirely up to you.

Line of Sight and the 3rd Person Camera bug

One of the bugs in oblivion is that line of sight from the player's perspective is calculated from the camera's point of view. In first person mode, this isn't an issue. But in third person, it means that someone directly behind you is considered to be in line of sight.

This causes several issues with my calculations and formulas, as well as other problems, such as being able to see an NPC sneak up on you from behind when they should be invisible to you with the NPCs Fade When Sneaking feature turned on.

The peripheral vision addition fixes that bug and calculates true line of sight from the player's perspective. In game play, if there is an NPC behind you and sneaking, and you are using the 3rd camera point of view, you may not always be able to see them.

SDR's alternative sdrGetLOSAlt function uses the original LOS function as well as SDR's extended field of view, Invisibility, Chameleon, and Detect Life. If this is something you want to use in your own mod, more information about it and how to apply it can be found in the Modder's Guide:Extended Functionality section.

Player Field of View

The way Oblivion is set up, the Player has a distinct disadvantage. Although humans have binocular vision in about 120-degree range and peripheral up to 190 degrees, the game only allows the player to see a 75-degree field of view on screen by default. This gives a pretty significant detection advantage to NPCs over the player.

Messing with the player's FOV can cause weird things if not handled properly. And since there are already a number of mods that have dealt with this issue, SDR does not include this feature.

If you want to experiment with a mod that does this, try Troy Bayliss' FOV Modifier mod. Oblivion Reloaded also has a player FOV altering feature.

Sprint Factor (SF)

When an actor sprints, their top speed is determined by the "Sprint Factor", which varies by race and creature type. The factor was determined by researching top speeds of various animals and in-game testing to figure out what the multiplier would need to be in order to reach those maximum velocities.

Setting a Sprint Factor to 1.0 means the actor cannot sprint. I decided unilaterally that all undead can't sprint, so they all have a SF of 1.0.

Because the physiology is similar enough, most bipeds have a Sprint Factor of 3.0. With the other movement settings changes, that puts a human that has 80-100 in Speed and Athletics on par with a modern day Olympic runner and those with 30-50 in Speed and Athletics on par with what an average person in relatively good health can do.

Height scale plays a factor in determining speed. That means taller creatures will sprint faster than shorter ones, even though they all have the same 3.0 SF. I tweaked the 3.0 SF up or down in some cases based on the physiology of the bipedal race/creature.

Creatures were on case by case basis. Apparently just because two different creatures have the same height and speed factor, animations have different speeds as well. So, for a good chunk of them, I had to do some in-game testing to see if the multiplier that would get them to their top speed was actually working correctly.

From my observations during testing, Sprint Factors greater than 5.0 were just too unnatural when they kicked in, even for creatures that were supposed to be fast like mountain lions. So, I made sure to not to have any Sprint Factors greater than 5.0. You are free to experiment.

Warning: If you have any mods that significantly modify the base speeds of creatures that are already in the game, they will have an impact on their sprinting. So be aware.

And please report any weirdness that you experience. It's a brand-new feature.

Race/Creature Trait Assignments

Following is a list of all the included races/creatures and their new traits' default values. To tweak any of them, or add races/creatures from mods not accounted for, copy and paste the desired lines of code into the SDR Race Creature Trait Tweaks.ini file and adjust to taste.

The list includes all creatures and races from Oblivion, Shivering Isles, the Race Balancing Project, MMM, MOO, Francesco's Creatures, Cyrodiil Upgrade Overhaul, and a variety of others. They are grouped by category/type of race/creature so that if you need to add to the list or want to change a group, it should be relatively easy for you to find them.

Traits list key

DM = Chance of being assigned detection magic

0 = None
1 = Chance (randomly determined)
2 = Guaranteed

AM = Auricular Motion

0 = Swiveling
1 = Flexible
2 = Rigid
3 = Omnidirectional

HA = Hearing Acuity

0 = Deaf
1 = Impaired
2 = Fair
3 = Acute
4 = Superior

VT = Vision Type

0 = Blind
1 = Poor
2 = Standard
3 = Night
4 = Divine

PV = Peripheral Vision FOV (in degrees, 0 to 360)

BV = Binocular Vision FOV (in degrees, 0 to 360)

SF = Sprint Factor (multiplier, 1.0 disables, 3.0 for humanoids)

Standard Race/Creature Trait Assignments

; Default values assigned if a creature or race is not recognized
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:2,VT:2,PV:190,BV:120,SF:3.0^Default Creature sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Default NPC sdrQ.sTraitsCustom
; Argonians
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:3,HA:2,VT:2,PV:240,BV:90,SF:3.0^Argonian sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:240,BV:90,SF:3.0^Argonian Child sdrQ.sTraitsCustom
; Atronachs
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.5^Atronach Fire sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:4,VT:2,PV:190,BV:120,SF:1.0^Atronach Frost sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:2.0^Atronach Storm sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:2,PV:190,BV:100,SF:1.5^fiends sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.5^FlameAtronach sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:2,PV:190,BV:120,SF:3.0^FleshAtronach sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:4,VT:2,PV:190,BV:120,SF:1.0^FrostAtronach sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:2.0^StormAtronach sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.5^Thorn Elemental sdrQ.sTraitsCustom
; Baliwogs
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:3,PV:220,BV:120,SF:2.0^Baliwog sdrQ.sTraitsCustom
; Balrogs
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:1,HA:4,VT:4,PV:190,BV:120,SF:2.0^Balrog sdrQ.sTraitsCustom
; Bats
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:4,VT:3,PV:240,BV:90,SF:3.0^Bat sdrQ.sTraitsCustom
; Bears
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:190,BV:120,SF:5.0^Bear sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:190,BV:120,SF:5.0^Francesco's Bears sdrQ.sTraitsCustom
; Beholders
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:3,HA:1,VT:2,PV:360,BV:180,SF:3.0^Beholder sdrQ.sTraitsCustom
; Boars, Pigs
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:4,VT:1,PV:300,BV:60,SF:3.5^Boar sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:4,VT:1,PV:300,BV:60,SF:3.5^CUOpig sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:4,VT:1,PV:300,BV:60,SF:3.5^Francesco's Boars sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:4,VT:1,PV:300,BV:60,SF:3.5^Pig sdrQ.sTraitsCustom
; Bugs
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:300,BV:100,SF:3.0^Beetle sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:4,VT:3,PV:320,BV:40,SF:2.5^Elytra sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:3.0^swarm sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:160,SF:3.0^Wasp sdrQ.sTraitsCustom
; Butchers
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:2.5^Butcher sdrQ.sTraitsCustom
; Cats, Big
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:4,VT:3,PV:280,BV:130,SF:5.0^Francesco's Lions sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:4,VT:3,PV:280,BV:130,SF:5.0^MountainLion sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:4,VT:3,PV:280,BV:130,SF:5.0^Panther sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:4,VT:3,PV:280,BV:130,SF:5.0^Tiger sdrQ.sTraitsCustom
; Cats, Small
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:4,VT:3,PV:200,BV:140,SF:5.0^Cat sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:4,VT:3,PV:200,BV:140,SF:5.0^CUOBlackCat sdrQ.sTraitsCustom
; Cattle
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:350,BV:80,SF:3.0^Bull sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:350,BV:80,SF:3.0^Calf sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:350,BV:80,SF:3.0^Cow sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:350,BV:80,SF:3.0^CUOcalf sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:350,BV:80,SF:3.0^CUOcow sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:350,BV:80,SF:3.0^CUOox sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:350,BV:80,SF:3.0^Ox sdrQ.sTraitsCustom
; Chickens
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:3,VT:3,PV:300,BV:30,SF:3.0^Chicken sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:3,VT:3,PV:300,BV:30,SF:3.0^CUOchicken sdrQ.sTraitsCustom
; Clannfears
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:3,VT:2,PV:260,BV:60,SF:4.0^Clanfear sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:3,VT:2,PV:260,BV:60,SF:4.0^Clannfear sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:3,VT:2,PV:260,BV:60,SF:4.0^Clannfear Variants sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:3,VT:2,PV:260,BV:60,SF:4.0^Francesco's Clannfear sdrQ.sTraitsCustom
; Daedric Races
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Aureal sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Daedra Seducer sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Dark Seducer sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Dremora sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:3,PV:190,BV:120,SF:3.0^FireDemon sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Golden Saint sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^GoldenSaint sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Mazken sdrQ.sTraitsCustom
; Daedroths
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:320,BV:40,SF:2.0^Daedroth sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:320,BV:40,SF:2.0^Daedroth Variants sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:320,BV:40,SF:2.0^Francesco's Daedroths sdrQ.sTraitsCustom
; Deer
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:2,VT:3,PV:280,BV:50,SF:5.0^Deer sdrQ.sTraitsCustom
; Deities
set sdrQ.sTraitsCustom to sv_Construct %z|DM:2,AM:2,HA:4,VT:4,PV:190,BV:120,SF:3.0^Jyggylag sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:2,AM:1,HA:4,VT:4,PV:190,BV:180,SF:1.0^MehrunesDagon sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:2,AM:2,HA:4,VT:4,PV:190,BV:120,SF:3.0^Sheogorath sdrQ.sTraitsCustom
; Dogs, Wolves, Foxes
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:240,BV:60,SF:5.0^Dog sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:240,BV:60,SF:5.0^Francesco's Wolves sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:3,VT:3,PV:240,BV:60,SF:5.0^Hound sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:240,BV:60,SF:5.0^Wolf sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:240,BV:60,SF:5.0^Wolf Variants sdrQ.sTraitsCustom
; Dragons, Wyverns, etc.
set sdrQ.sTraitsCustom to sv_Construct %z|DM:2,AM:0,HA:4,VT:4,PV:320,BV:50,SF:3.0^Dragon sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:0,HA:3,VT:3,PV:320,BV:50,SF:3.0^FlyingDragon sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:0,HA:3,VT:2,PV:320,BV:50,SF:3.0^Francesco's Wyverns sdrQ.sTraitsCustom
; Dreughs
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:190,BV:120,SF:2.0^bgRideDreugh sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:190,BV:120,SF:2.0^Francesco's LandDreugh sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:190,BV:120,SF:2.0^LandDreugh sdrQ.sTraitsCustom
; Durzog
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:3,VT:3,PV:260,BV:50,SF:3.0^Durzog sdrQ.sTraitsCustom
; Elephants and Mammoths
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:4,VT:1,PV:190,BV:50,SF:3.0^Mammoth sdrQ.sTraitsCustom
; Elven Races
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:3,PV:190,BV:120,SF:3.0^AQWorkerRace sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Ayleid sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Chimer sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Chronicler 2 sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:3,PV:190,BV:120,SF:3.0^Dark Elf sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:3,VT:3,PV:190,BV:120,SF:3.0^Dark Elf Child sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:3,PV:190,BV:120,SF:3.0^Hidden Elf sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^High Elf sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^High Elf Child sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:3,PV:190,BV:120,SF:3.0^Sea Elf sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Watcher sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Wood Elf sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Wood Elf Child sdrQ.sTraitsCustom
; Equines
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:3,VT:3,PV:350,BV:65,SF:5.0^Francesco's Horses sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:3,VT:3,PV:350,BV:65,SF:5.0^Horse sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:3,VT:3,PV:350,BV:65,SF:5.0^Horses sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:3,VT:3,PV:350,BV:65,SF:5.0^mrsiikasdonkey sdrQ.sTraitsCustom
; Fish
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:1,PV:300,BV:70,SF:3.0^Clear Stream Fish sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:1,PV:300,BV:70,SF:3.0^Eel sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:1,PV:240,BV:30,SF:3.0^Francesco's Slaughterfish sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:1,PV:300,BV:70,SF:3.0^Saltwater Fish sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:1,PV:240,BV:30,SF:3.0^SlaughterFish sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:1,PV:300,BV:70,SF:3.0^xulcfFishs sdrQ.sTraitsCustom
; Ghosts
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:3,PV:190,BV:120,SF:1.0^Ghost sdrQ.sTraitsCustom
; Ghouls
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.0^Ghoul sdrQ.sTraitsCustom
; Giants
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:2.0^CUOhillgiant sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:220,BV:120,SF:2.0^Francesco's FrostGiant sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:2.0^Francesco's Hillgiant sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:220,BV:120,SF:2.0^FrostGiant sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:2.0^Giant sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:2.0^Hillgiant sdrQ.sTraitsCustom
; Gnarls
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:2,PV:210,BV:120,SF:1.5^Gnarl sdrQ.sTraitsCustom
; Goblin
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:140,SF:3.0^Francesco's Goblins sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:140,SF:3.0^Goblin sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:140,SF:3.0^Goblin Variants sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:140,SF:3.0^wustegoblin sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:140,SF:3.0^wüstenGoblin sdrQ.sTraitsCustom
; Golems
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.0^CUOfleshgolem sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.0^Fleshgolem sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.0^Francesco's FleshGolem sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:2,PV:190,BV:120,SF:1.0^Francesco's Golems sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.0^GateKeeper sdrQ.sTraitsCustom
; Grummites
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:3,HA:2,VT:3,PV:210,BV:160,SF:3.0^Grummite sdrQ.sTraitsCustom
; Guars
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:2,PV:300,BV:40,SF:3.0^Francesco's Guar sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:2,PV:300,BV:40,SF:3.0^Guar sdrQ.sTraitsCustom
; Human Races
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Akavirian sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Alessian Youth sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Bearded Nord sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Breton sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Breton Child sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Chronicler 1 sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:190,BV:120,SF:1.0^Ghost Race sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Imperial sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Imperial Child sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Imperial Youth sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^MannimarcoRace sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^No Speech Imperial sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Nord sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Nord Child sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Reavers sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Redguard sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Redguard Child sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Redguard Youth sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Vampire Race sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Wethyl sdrQ.sTraitsCustom
; Hungers
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:3,PV:170,BV:100,SF:3.0^Francesco's Hunger sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:3,PV:200,BV:80,SF:3.0^Hunger sdrQ.sTraitsCustom
; Imps, Gargoyles, Demons
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:1,HA:3,VT:2,PV:190,BV:120,SF:3.0^CUOgargoyle sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:1,HA:4,VT:3,PV:190,BV:120,SF:3.0^Francesco's Demon sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:1,HA:3,VT:2,PV:190,BV:120,SF:3.0^Francesco's Gargoyle sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Francesco's Imps sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:1,HA:3,VT:2,PV:190,BV:120,SF:3.0^Gargoyle sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Imp sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Imp Variants sdrQ.sTraitsCustom
; Khajiit Races
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:4,VT:3,PV:280,BV:130,SF:3.0^Francesco's Pahmer sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:0,HA:4,VT:3,PV:170,BV:90,SF:4.0^Khajiit sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:4,VT:3,PV:170,BV:90,SF:4.0^Khajiit Child sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:0,HA:4,VT:3,PV:170,BV:90,SF:3.0^Modrath sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:1,HA:3,VT:3,PV:190,BV:120,SF:3.0^Ohmes sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:0,HA:4,VT:3,PV:190,BV:120,SF:3.5^Ohmes-raht sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:0,HA:4,VT:3,PV:190,BV:120,SF:3.5^Ohmes-rahtU sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:0,HA:4,VT:3,PV:280,BV:130,SF:3.0^Pahmer sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:0,HA:4,VT:3,PV:190,BV:120,SF:3.5^Tabaxi sdrQ.sTraitsCustom
; Liches
set sdrQ.sTraitsCustom to sv_Construct %z|DM:2,AM:2,HA:3,VT:4,PV:190,BV:120,SF:1.0^CUOlichking sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:3,PV:190,BV:120,SF:1.0^Francesco's Liches sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:3,PV:190,BV:120,SF:1.0^ivellon-lich sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:3,PV:190,BV:120,SF:1.0^Lich sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:2,AM:2,HA:3,VT:4,PV:190,BV:120,SF:1.0^lichking sdrQ.sTraitsCustom
; Lycanthropes
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:3,HA:2,VT:2,PV:320,BV:40,SF:3.0^Francesco's Werecrocodile sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:3,PV:190,BV:120,SF:3.0^Lycan sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:1,HA:4,VT:3,PV:240,BV:60,SF:3.0^Werewolf sdrQ.sTraitsCustom
; Mechanicals
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:1.0^Centspider sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:1.0^CUODwemercentspider sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:0,VT:2,PV:190,BV:120,SF:1.0^DwemerImmortalNPC sdrQ.sTraitsCustom
; Mimics
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:1,PV:360,BV:360,SF:1.0^Mimics sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:1,PV:360,BV:360,SF:1.0^zmimics sdrQ.sTraitsCustom
; Minotaurs
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:230,BV:100,SF:2.0^Francesco's Minotaurs sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:230,BV:100,SF:2.0^Minotaur sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:230,BV:100,SF:2.0^Minotaur Variants sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:230,BV:100,SF:2.0^Morihaus Race sdrQ.sTraitsCustom
; Misc. Undead
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.0^Talking Head sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:190,BV:120,SF:1.0^torturedsoul sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:190,BV:120,SF:1.0^Undead sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.0^Untoter sdrQ.sTraitsCustom
; Mud Crabs
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:1,PV:280,BV:140,SF:1.0^Francesco's Mudcrab sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:1,PV:280,BV:140,SF:1.0^MudCrab sdrQ.sTraitsCustom
; Mummies
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.0^mmm-stx sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.0^Mummy sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.0^Rittermumie sdrQ.sTraitsCustom
; Ogres
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:2.5^Francesco's Ogres sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:2.5^Ogre sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:3.0^Ogre Mage in Human form sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:2,VT:2,PV:190,BV:120,SF:2.5^Ogre Variants sdrQ.sTraitsCustom
; Orcish Races
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:140,SF:3.0^Orc sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:3,VT:2,PV:190,BV:140,SF:3.0^Orc Child sdrQ.sTraitsCustom
; Plant Monsters
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:0,PV:220,BV:120,SF:3.0^WaterDragon sdrQ.sTraitsCustom
; Rats and Rabbits
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:4,VT:1,PV:320,BV:60,SF:5.0^Francesco's Rats sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:4,VT:1,PV:320,BV:60,SF:5.0^Rat sdrQ.sTraitsCustom
; Scalons / Murk Dwellers
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:3,VT:3,PV:210,BV:160,SF:3.0^MurkDweller sdrQ.sTraitsCustom
; Scamps, Hernes, Morphoids
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:2,PV:190,BV:120,SF:3.0^Francesco's Herne sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:2,PV:190,BV:120,SF:3.0^Francesco's Morphoid sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:4,VT:2,PV:190,BV:120,SF:3.0^Francesco's Scamp sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:2,PV:190,BV:120,SF:3.0^Herne sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:2,PV:190,BV:120,SF:3.0^Morphoid sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:4,VT:2,PV:190,BV:120,SF:3.0^Scamp sdrQ.sTraitsCustom
; Shambles
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:280,BV:60,SF:1.0^Shambles sdrQ.sTraitsCustom
; Sheep and Goats
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:330,BV:40,SF:5.0^Francesco's Goats sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:3,PV:300,BV:40,SF:5.0^Sheep sdrQ.sTraitsCustom
; Skavens (Rat People)
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:1,HA:4,VT:2,PV:320,BV:60,SF:3.0^mmmskaven sdrQ.sTraitsCustom
; Skeeps (Sheep People)
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:1,HA:3,VT:3,PV:250,BV:80,SF:3.0^skeep sdrQ.sTraitsCustom
; Skeletons
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:190,BV:120,SF:1.0^Francesco's Skeletons sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:190,BV:120,SF:1.0^Reaper sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:190,BV:120,SF:1.0^Skeleton sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:190,BV:120,SF:1.0^Skeleton Variants sdrQ.sTraitsCustom
; Slimes, Sludges, Oozes
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:0,PV:360,BV:360,SF:1^Ooze sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:0,PV:360,BV:360,SF:1^slimes sdrQ.sTraitsCustom
; Spider Daedra
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^Spider Daedra sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^SpiderDaedra sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:3.0^SprigganSpider sdrQ.sTraitsCustom
; Spiders
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:1,PV:220,BV:110,SF:3.0^CUOhairyspider sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:2,PV:280,BV:120,SF:3.0^Francesco's GiantSpider sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:2,PV:280,BV:120,SF:3.0^FrostBiteSpider sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:2,PV:280,BV:120,SF:3.0^GiantSpider sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:1,PV:220,BV:110,SF:3.0^Spider sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:1,PV:220,BV:110,SF:3.0^Spinne sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:1,VT:1,PV:220,BV:110,SF:3.0^Tarantula sdrQ.sTraitsCustom
; Spriggans
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:1,HA:3,VT:2,PV:190,BV:120,SF:2.5^Francesco's Seducer sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:2.0^Spriggan sdrQ.sTraitsCustom
; Statues and Mannequins
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:0,VT:0,PV:0,BV:0,SF:0^Marble Mannequin sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:0,VT:0,PV:0,BV:0,SF:0^Wooden Mannequin sdrQ.sTraitsCustom
; Swamp Stalkers
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.5^Swampstalker sdrQ.sTraitsCustom
; Trolls
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:3,PV:250,BV:150,SF:3.0^Francesco's Trolls sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:3,PV:250,BV:150,SF:3.0^NightmareTroll sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:3,PV:250,BV:150,SF:3.0^Troll sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:3,PV:250,BV:150,SF:3.0^Troll Variants sdrQ.sTraitsCustom
; Umberhulks
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:230,BV:120,SF:2.5^uberhulk sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:230,BV:120,SF:2.5^uberhulklara sdrQ.sTraitsCustom
; Wisps, Sprites
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:3.0^EvilSprite sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:3.0^GoodSprite sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:3.0^WillOTheWisp sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:3.0^WispBalefulSpirit sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:3.0^WispEidolon sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:3.0^WispHiggs sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:3.0^WispSmallGod sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:3.0^WispVafurlogi sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:3.0^WispVattelys sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:3.0^WispVirvatuli sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:3,HA:2,VT:2,PV:360,BV:360,SF:3.0^WispWillOTheWisp sdrQ.sTraitsCustom
; Wraiths
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:3,PV:190,BV:120,SF:1.0^Francesco's Wraiths sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:3,PV:190,BV:120,SF:1.0^Wraith sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:3,PV:190,BV:120,SF:1.0^Wraith Variants sdrQ.sTraitsCustom
; Xivilai
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:2.0^Xivilai sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:2.0^Xivilai Variants sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:1,AM:2,HA:3,VT:2,PV:190,BV:120,SF:2.0^XivilaiLord sdrQ.sTraitsCustom
; Zombies
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:240,BV:90,SF:1.0^Argonian Zombie sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:190,BV:120,SF:1.0^Francesco's Zombies sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:190,BV:120,SF:1.0^Zombie sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:240,BV:90,SF:1.0^Zombie Argonian sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:190,BV:120,SF:1.0^Zombie Boss sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:2,PV:190,BV:120,SF:1.0^Zombie Elf sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:190,BV:120,SF:1.0^Zombie Imperial sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:1,HA:3,VT:2,PV:170,BV:90,SF:1.0^Zombie Khajiit sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:2,VT:1,PV:190,BV:140,SF:1.0^Zombie Orc sdrQ.sTraitsCustom
set sdrQ.sTraitsCustom to sv_Construct %z|DM:0,AM:2,HA:1,VT:1,PV:190,BV:120,SF:1.0^Zombie Standard sdrQ.sTraitsCustom

Identifying Races

SDR identifies races of NPCs using the "GetRace" function to capture the race name. If you have a foreign language version of Oblivion, then you may need to take into account alternate spellings depending on your local language.

Identifying Creatures

SDR identifies creatures using the folder name that holds the skeleton.nif file. For example: "\Data\Meshes\Creatures\TheModName\CreatureName\skeleton.nif" -> " CreatureName ".

Creatures that use the same model path folder will be treated the same. For example a dog, a wolf, and an undead demon dog all end up with the same traits because they all use the same Dog\skeleton.nif folder/file. To assign different traits to the undead demon dog, you would:

  1. Create a copy of the "Dog" folder
  2. Rename it to "DemonDog"
  3. Create a mod that repoints the model path of the skeleton.nif to the "DemonDog" folder
  4. Create a custom SDR race/creature trait entry for "DemonDog" in the SDR Race Creature Trait Tweaks.ini file.

Duplicate Creatures/Races

If a race has the same name as a creature folder, Xivilai for example, the last instance will "win".

You will also run into scenarios where the exact same creature is added multiple times. This is because the mod that added the creature created a unique folder name for that creature in their setup files. So if there is "Ox" and "Fran’s Oxes" and "CUOox", even though they all refer to the same creature, all three entries need to be there.

Rebooting Actor Traits


Orcish Reboots

Eventually, there may come a time in which you either add or modify the traits of a particular race/creature after you have already started game play. Or perhaps you have decided to enable/disable one of the new Blind, Deafen, or Muffle magic effects. To avoid having to do a clean save with SDR deactivated, a "reboot" hassle-free option has been created, which will reset, reinitialize, and recalculate all the base traits of all actors. To activate a reboot, in console mode type the following:

startquest sdrQReboot

Hit enter, then exit the console. You will then get a pop up message that presents an option to keep or replace all assigned spells. This includes detection magic that can be used against the player and the spells that have been given to a spell merchant to sell.

The Keeping Assignments option keeps any spells that have already been assigned while updating all the other traits. The only exception is if any of the new magic effects have been disabled, all spells associated with the disabled magic effects will be removed from actors that have them.

The Replacing Assignments option wipes out any spells that were previously granted and then replaces them as if the actor token was being assigned to the actor for the first time.

Important! Performing a reboot does not just apply to the current save game you are playing. It will impact any save game you load from that point forward, assigning/reassigning spells as you selected.

Note: If SDR detects a version change, all actors will be reinitialized automatically and silently, but keep any assigned spells (if they still exist). But if there is a reboot mismatch as well as a version mismatch, the reboot settings will take priority.

Under the Hood:SDR tracks a "reboot" sequence number that it saves in the OBSE/plugins/sdr.ini file, and uses as reference to detect if a reboot was requested since the last time an actor was initialized. That reboot id is also stored with each actor along with the SDR version, to make sure that they don't keep getting rebooted over and over again.

Magic

Section last updated on May 15 2021 14:13.

In addition to changes to how Invisibility, Chameleon, Detect Life, and Night-Eye work, SDR introduces three new types of magic: Muffle, Deafen, and Blind.

Invisibility

Section last updated on May 15 2021 14:13.

Following are changes SDR has made to Invisibility.

Invisibility and Detection

Oblivion's detection formula makes an invisible actor completely undetectable. This is contrary to the description of Invisibility in the official Oblivion game manual which implies you can be heard.

Therefore, SDR rewrites the rules on Invisibility and its impact on the four core detection components. Invisibility is 100% effective against the Visual component, but has no effect on the Audio or Meta components. For the Skill component, someone with a high skill level might be able to pick up little clues that someone is there, such as foot-prints or stirring of dust. Therefore, you can set how effective Invisibility is against the Skill component. Choose a value from 0.0 (completely ineffective) to 1.0 (100% effective).

SetNumericGameSetting fSDRsInvisSkillCheckEffectiveness .9; {.9}

Torches and Invisibility

In default Oblivion, you can run around invisible, carrying a lit torch that everyone can see, and no one seems to notice a floating torch wandering around. The following option will cancel any Invisibility spell on an actor holding a lit torch.

SetNumericGameSetting iSDRsInvisCanceledByTorches 1; {1}

Light Spells and Invisibility

For reasons similar to those for torches, the following option will cancel any Invisibility spell if the subject also has an active Light magic effect, whether cast on them or through a magic item.

SetNumericGameSetting iSDRsInvisCanceledByLightSpell 1; {1}

Chameleon

Section last updated on May 15 2021 14:13.

Following are changes SDR makes to the Chameleon effect.

Chameleon and Detection

Chameleon is 100% effective against the Visual component but has no effect on the Audio or Meta components. For the Skill component, choose a value from 0.0 (completely ineffective) to 1.0 (100% effective).

SetNumericGameSetting fSDRsChamSkillCheckEffectiveness .6; {.6}

Note: If Chameleon and Invisibility are both active, only the detection rules for Invisibility are used.

Torches, Light Spells, and Chameleon

Torches and Light spells cannot dispel a Chameleon effect. However, they can offset the potency of Chameleon's impact on the detection formula.

Pick a multiplier from 0 to 1.0. 0 negates Chameleon's effectiveness. 1 makes Chameleon 100% effective. And everything in between reduces Chameleon's effectiveness proportionally.

SetNumericGameSetting fSDRsChamTorchEffect .1; {.1}
SetNumericGameSetting fSDRsChamLightEffect .5; {.5}

If a torch is held and a Light spell is active at the same time, the adjustments are multiplied. With the default settings, this would reduce Chameleon's effectiveness in the detection formula to 5% of its normal value, rendering it basically useless.

Note: These settings only affect the detection formula. They have no impact on visuals or alter the effect's power value.

Chameleon Refraction Visual Effect

The default Chameleon refraction visual effect always bothered me. Regardless of how good your Chameleon is, 5% feels the same as 95%. This game setting lets you turn the refraction effect off and replace it with a transparent alpha shader that makes the differences between 10%, 30%, and 50% Chameleon much more obvious. This change applies to everyone with a Chameleon effect.

SetNumericGameSetting iSDRsChamUseRefraction 0; {0}, Obv: 1

Using Refraction When Needed

With refraction turned off, high levels of Chameleon can make you nearly invisible. This option will turn on refraction for just the player until your Chameleon value drops below the threshold.

SetNumericGameSetting iSDRsChamUseRefractionWhenNeeded 75; {75}, 0 disables

Note: once your total Chameleon effect is 100 +, you will be completely invisible, no refraction, no nothing, regardless of the settings. There is no way around that to the best of my knowledge.

Detect Life

Section last updated on May 15 2021 14:13.

In the default Oblivion game, Detect Life is limited in scope and is only useful for the player. SDR makes several major changes:

  • Non-player actors can now be assigned and cast Detect Life spells.
  • An active Detect Life spell now impacts the Meta component of the caster's detection checks.
  • Detect Life now has variations on who it works on, under what conditions, and what the shaders look like.

Detect Life and SDR's detection formula

Assuming Detect Life works on the Target, there is a maximum bonus the observer can apply to the Meta component of the detection formula.

SetNumericGameSetting iSDRsDDLSMaxBump 50; {50}, 0 disables

Setting this to 0 will prevent Detect Life from affecting the detection formula. Otherwise the bump is modified by the factors below, and then modified by the distance factor between the Observer and the Target.

Intelligence Adjustment

If activated, this modifies the bonus by a multiple of the Observer's Intelligence attribute/100. So if the Observer's intelligence was 30, then the bonus would be only 30% of the maximum.

SetNumericGameSetting iSDRsDDLSApplyInt 1; {1}, 0 disables

Velocity Adjustment

Ever notice how when you are watching the Detect Life effect, if the Target moves, the faster they move the more difficult it is to track where they are? This option allows for the velocity of the Target to impact how effective the Detect Life bump is. With SDR's default settings, the fastest anyone can possibly go is around 900 units / second.

The base factor applied against the adjusted Detect Life bump is (1 – (velocity/900)). This factor is further modified by the following multiple:

SetNumericGameSetting fSDRsDDLSVelocityFactor 1.0; {1.0}, 0 disables

Sleeping Adjustment

Since Detect Life works through walls, in theory it would work through closed eyelids. Being asleep, your brain functionality would still be relatively shut down. But if an actor has an active Detect Life effect, due to a ring or some other magic item, the following setting represents how effective it is when the actor is asleep:

SetNumericGameSetting fSDRsDDLSSleepMult 0.3; {0.3}, 0 disables

The Dynamic Detect Life System (DDLS)

The DDLS provides variations for how Detect Life works depending on who is casting the spell, who the targets are, and new Detect Life shader options.

Enabling the Dynamic Detect Life System

In order for the effect to work, the following steps have to be taken. Otherwise, if any of the required files or settings are missing, it will be disabled.

Install the supporting sub-packages provided by SDR

If you are using Wrye Bash and SDR's installer wizard, it will detect which worldspace you are in and install the correct files to support it.

If you are installing in manually, you will need the following files:

For the Oblivion world space, install the "51 DDLS Oblivion" sub-package.

For the Nehrim world space, install the "51 DDLS Nehrim" sub-package.

In addition, you will need to install the "50 DDLS Textures" sub-package.

Tweak the SDR Game Settings Tweaks.ini

Set the iSDRsDDLSActivate according to the chart below.

; Dynamic Detect Life Shaders system.
; 0 = disable
; 1 = enable
SetNumericGameSetting iSDRsDDLSActivate 1

To let Oblivion or another mod control how Detect Life works, do not install the above referenced packages and set the iSDRsDDLSActivate game setting to 0 in the SDR Game Setting Tweaks.ini file. This disables DDLS, but still allows Detect Life to be factored into the detection formula.

Setting the conditions in which Detect Life works

Actors are grouped into three main categories: mortals, undead, and Daedra. Mortals include two sub-groups: "Normals" and "Vampires".

Following are various options for determining which types of actors and under what conditions Detect Life works along with their default values. For each setting you will see a "GroupVsGroup", where the first group is the Observer and the second group is the Target.

; Normals vs ...
SetNumericGameSetting iSDRsDDLSwNormalVsUndead 0; {0}, 0 disables, 1 enables
SetNumericGameSetting iSDRsDDLSwNormalVsDaedra 0; {0}, 0 disables, 1 enables
; Vampires vs ...
SetNumericGameSetting iSDRsDDLSwVampireVsUndead 1; {0}, 0 disables, 1 enables
SetNumericGameSetting iSDRsDDLSwVampireVsDaedra 0; {0}, 0 disables, 1 enables
; Undead vs ...
SetNumericGameSetting iSDRsDDLSwUndeadVsMortal 1; {1}, 0 disables, 1 enables
SetNumericGameSetting iSDRsDDLSwUndeadVsUndead 0; {0}, 0 disables, 1 enables
SetNumericGameSetting iSDRsDDLSwUndeadVsDaedra 0; {0}, 0 disables, 1 enables
; Daedra vs ...
SetNumericGameSetting iSDRsDDLSwDaedraVsMortal 0; {1}, 0 disables, 1 enables
SetNumericGameSetting iSDRsDDLSwDaedraVsUndead 0; {0}, 0 disables, 1 enables
SetNumericGameSetting iSDRsDDLSwDaedraVsDaedra 1; {0}, 0 disables, 1 enables

Some of the above settings may seem like a no-brainer. For the rest, you can read about my choices for the defaults below.

My logic for the default settings

There is no setting for Normal vs Vampire or Vampire vs Normal because Vampirism is a curable disease, which means Vampires fall into the mortal group. Besides, if Detect Life could be used to filter out Vampires, they would either be all cured or hunted to extinction. So Detect Life will always work for mortals against other mortals.

Since the undead are not really alive, by default they cannot be detected by normal people, but they can be detected by vampires who have superior senses and strong ties to the undead. The rare few undead that are capable of casting Detect Life can, however, detect the lives of mortals, but not Daedra or other undead.

Since Daedra are creatures from another dimension, I feel that they have a completely different "spirit". So their version of Detect Life tunes in to other Daedra, but not mortals or the undead. Likewise, mortals cannot use Detect Life to detect Daedra.

Identifying undead

Although most undead are flagged, there may be modified undead NPCs or Creatures that aren't flagged for some reason. SDR compensates for this by checking to see if an NPC or creature has one of several "Ghost" shader effects. In addition, SDR also checks for full or partial race/creature name matches against a list of undead key words. The default list includes: Geist, Gespenst, Ghost, Lich, Phantom, Skelet, Spectr, Undead, Untot, Wraith, Zombi.

You can also add your own undead key words to a custom list by copying the following line of code into the SDR Race Creature Traits Tweaks.ini file and editing it accordingly.

set sdrQ.sUndeadCustom to sv_Construct "%z|UndeadName" sdrQ.sUndeadCustom

You can either use the full name or a part of the name as the key word. If you only use part of the name, make sure that the partial key word only applies to undead types.

Identifying Daedra

Although most Daedra are flagged, there may be modified NPCs or Creatures that aren't for some reason. SDR compensates for this by checking for full or partial race/creature name matches against a list of Daedric key words. The default list includes: Atronach, Aureal, Auroran, Balrog, Clannfear, Daedr, DarkSeducer, Dark Seducer, Dremora, GoldenSaint, Golden Saint, Hell Hound, Herne, Hunger, Jyggalag, Knight of Order, Lesser Balrog, Mazken, Ogrim, Scamp, Sheogorath, Vermai, Xivilai.

You can also add your own to a custom list of Daedra key words. To do so, copy the following line of code into the SDR Race Creature Traits Tweaks.ini file and edit accordingly.

set sdrQ.sDaedraCustom to sv_Construct "%z|DaedraName" sdrQ.sDaedraCustom

You can either use the full name or a part of the name as the key word. If you only use part of the name, make sure that the partial key word only applies to Daedric types.

Detect Life visual shader variations

To add some more variety, you can customize which shaders are used for each entity type. There are 24 possible shaders to pick from. #1 is a duplicate of the default Oblivion shader. The special shaders will only kick in if the Observer can use Detect Life on the Target as described above.

SetNumericGameSetting iSDRsDDLShaderMortal to 2; {2} Saebel Purple
SetNumericGameSetting iSDRsDDLShaderUndead to 4; {4} Saebel Blue
SetNumericGameSetting iSDRsDDLShaderDaedra to 5; {5} Saebel Yellow

In addition, because vampires have heightened senses, you can choose to assign vampires a special shader for scenarios in which the player is a vampire, allowing the player to sort out Normals from other Vampires. In all other scenarios, vampires will be assigned the Mortal shader.

SetNumericGameSetting iSDRsDDLShaderVampire to 3; {3} Saebel Red

Previewing the Detect Life Shaders

You can cycle through and preview the available Detect Life shaders by applying them to your character and viewing yourself in 3rd person. To do so, open the console with the ` key, and type in the following:

SetNumericGameSetting iSDRsDDLShaderDemo 1; {0}

This will activate a Detect Life Shader Demo quest.

  1. Hold down the right Shift key and press PgUp or PgDown to switch between shaders.
  2. To see the name and number of the current shader effect, open the console mode with the ` key.
  3. Write down the ones you like and for which purpose you are going to use them.
  4. When you are done, you can stop the demo by going into the console and typing: SetNumericGameSetting iSDRsDDLShaderDemo 0
  5. Exit the game.
  6. Copy over whichever shader settings you want to change into the SDR Game Settings Tweaks.ini file.
  7. Assign shader numbers as desired to the custom shader settings and save.
  8. Relaunch the game, and you should be good to go!

Detect Life shaders and actor alpha values

Some Detect Life shaders have a "membrane" effect which outlines the whole body and any equipment the actor may have. However, that aspect is tied into their alpha/transparency value. That means if the actor is sneaking or has a chameleon effect, the membrane will disappear proportionally. This will not affect the "inner" particle effect, which will always be present regardless of alpha/transparency factors.

Night-Eye

Section last updated on May 15 2021 14:13.

SDR provides an alternative to the default Night-Eye shader that comes with Oblivion. It is a dynamic effect that changes depending on how much light is hitting the player, with gradual changes of the effect over time, simulating your eyes adjusting to changes in the light.

I spent quite a bit of time researching how night vision works with various animals compared to humans to provide a reference for developing the dynamic Night-Eye shader effect. It's not a perfect simulation, but it is relatively close. I also feel is is more realistic, immersive, and much less annoying than Oblivion's default.

Enabling the Dynamic Night-Eye Effect

In order for the effect to work, the following steps have to be taken. Otherwise, if any of the required files or settings are missing, it will be disabled.

Install Oblivion Reloaded or Switch Night-Eye Shader Plugin

Oblivion Reloaded (v 6.4.0+) has to be downloaded and installed separately. You can do that here.

A customized version of the Switch Night-Eye Shader plugin is included in SDR's installer "40 Shader Switcher Plugin" sub-package.

Install the supporting sub-packages provided by SDR

If you are using Wrye Bash and SDR's installer wizard, it will detect if Oblivion Reloaded is installed, and install the correct files to support it. Otherwise it will install the files needed for the Shader Switcher Plugin.

If you are installing in manually, you will need the following files:

For Oblivion Reloaded, install the "20 DNES for Oblivion Reloaded" sub-package.

For Shader Switcher, install the "20 DNES for Shader Switcher" sub-package.

Tweak the SDR Game Settings Tweaks.ini

Set the iSDRsDNESActivate according to the chart below.

; Dynamic Night-Eye Shaders system.
; 0 = disable (use Oblivion's default shader or some other mod's shader)
; 1 = enable with provided Shader Switcher plugin
; 2 = enable with Oblivion Reloaded plugin
SetNumericGameSetting iSDRsDNESActivate 1

How the Night-Eye shader effect works

How the actual effect renders depends on which plugin you are using for the effect, along with the Night-Eye ambience level.

Scanti's Night-Eye Shader Switcher

In order for the effect to work, 101 different shaders had to be created and copied into two different folders for a total of 202 .pso files in the "20 DNES for Shader Switcher" sub-package. These shaders are fixed. The only way to alter them is to create new ones and replace them. Instructions on how to do that are detailed later in the Shader Experiments section.

Oblivion Reloaded

If Oblivion Reloaded is installed, you can tweak the overall effect in the Data\Shaders\OblivionReloaded\NightEye\sdrNightEye.ini file. There are three sets of settings for three different environments: Interior locations, Exterior locations, and Underwater locations.

[Interior]
; Interior NightEye Settings
fNEYEBrightness   =48.0000
fNEYEColorMix     =28.0000
fNEYETunnelFactor =45.0000
fNEYEBalanceR     =40.0000
fNEYEBalanceG     =36.0000
fNEYEBalanceB     =40.0000
fNEYESaturationR  =22.0000
fNEYESaturationG  =42.0000
fNEYESaturationB  =40.0000

[Exterior]
; Exterior NightEye Settings
fNEYEBrightness   =46.0000
fNEYEColorMix     =30.0000
fNEYETunnelFactor =50.0000
fNEYEBalanceR     =41.0000
fNEYEBalanceG     =35.0000
fNEYEBalanceB     =44.0000
fNEYESaturationR  =19.0000
fNEYESaturationG  =35.0000
fNEYESaturationB  =42.0000

[UnderWater]
; Underwater NightEye Settings
fNEYEBrightness   =44.0000
fNEYEColorMix     =32.0000
fNEYETunnelFactor =40.0000
fNEYEBalanceR     =35.0000
fNEYEBalanceG     =38.0000
fNEYEBalanceB     =41.0000
fNEYESaturationR  =15.0000
fNEYESaturationG  =40.0000
fNEYESaturationB  =38.0000

Note that all numbers scale from 0 to 100.

fNEYEBrightness: This is how bright the 2D image of the screen gets in relation to the amount of light hitting the player character. It may seem obvious to go for the highest brightness for the maximum advantage. However if you set it too high, exteriors in broad day light may be blown out.

fNEYEColorMix: This determines what the mix is between the effect and the original colors, adjusted by the amount of light hitting the player. A lower value skews it towards the Night-Eye mix. A higher value skews it toward the original input colors.

fNEYETunnelFactor: Tunnelfactor determines how strong the tunnel vision effect is in bright light. Lower values means less of a tunnel effect. The idea of the effect is to replicate squinting when your sensitive eyes are overloaded with bright light.

fNEYEBalanceR,G,B: Balance determines how much red, green, or blue is emphasized in the effect in relation to the other colors.

fNEYESaturationR,G,B: Saturation determines how "heavy" the color is. Lower values push towards greyscale. Higher values mean more vibrant color.

If you want to tinker around with the settings and preview the effect outside of the game, there are some tools available to you covered in the Shader Experiments section. The average for each of the above settings is the equivalent of the fixed effect when using Scanti's Night-Eye Shader Switcher plugin

Night-Eye ambience level

Oblivion's default Night-Eye ambience level is .75, which is very harsh combined with SDR's Night-Eye effect. Also, setting the ambience level to anything but 0 brightens all the dark areas to the extent that even areas in total darkness that have no light sources will be totally visible. From my perspective, that defeats the concept. But if that's what you prefer, you only need a minor tweak. I would recommend from .10 to .25* at most. Mind you, if you change this value, it will also be applied to the detection formula, which will help creatures/NPCs detect you.

SetNumericGameSetting fSDRsDNESAmbience 0; {0} Obv: .75

* Even an ambient level of .000000001 is a massive change from 0. So my guess is that it's some kind of post process filter that is disabled entirely when the value is set to 0, or there is some sort of minimum, regardless of setting, if set above 0.

Blind

Section last updated on May 15 2021 14:13.

Oblivion actually has a Blindness actor value that was incorporated into the original detection formula. It was only used for the Blind Moth Monks whose vision degrades over time until they go blind. With SDR's new actor traits and new blindness magic effects, you can blind and be blinded in new ways. Oh what fun!

SetNumericGameSetting iSDRsBlindnessActivate 1; {1}, 0 disables

Enabling Blindness magic

In order for the effect to work, the following steps have to be taken. Otherwise, if any of the required files or settings are missing, it will be disabled.

Install Oblivion Reloaded or Switch Night-Eye Shader plugin

Oblivion Reloaded (v 6.4.0+) has to be downloaded and installed separately. You can do that here.

A customized version of the Switch Night-Eye Shader plugin is included in SDR's installer "40 Shader Switcher Plugin" sub-package.

Install MenuQue plugin

MenuQue has to be downloaded and installed separately. You can do that here.

Install the supporting sub-packages provided by SDR

If you are using Wrye Bash and SDR's installer wizard, it will detect if Oblivion Reloaded is installed, and install the correct files to support it. Otherwise it will install the files needed for the Shader Switcher Plugin.

If you are installing in manually, you will need the following files:

For Oblivion Reloaded, install the "31 Blindness for Oblivion Reloaded" sub-package.

For Shader Switcher, install the "31 Blindness for Shader Switcher" sub-package.

In addition, you will need to install the "30 Blindness HUD Textures" sub-package.

Tweak the SDR Game Settings Tweaks.ini

Set the iSDRsBlindnessActivate according to the chart below.

; Blindness Magic system.
; 0 = disable
; 1 = enable with provided Shader Switcher plugin
; 2 = enable with Oblivion Reloaded plugin
SetNumericGameSetting iSDRsBlindnessActivate 1

Blindness and the Detection Formula

Blindness applies 100% to the Visual component and any visual portions of the Skill component. It has no impact on the Audio or Meta components.

Blind Effects on the Player

If the player is hit by a Blind spell, you will experience something that simulates macular degeneration. If the power of the effect is 100 or more, the screen will be completely black. Otherwise the middle of the screen will have a big, black fuzzy blind spot and the periphery will be blurry. In addition, to really make sure you are "blind", the compass, local map, world map, and other HUD display components that give away location or nearby actors/objects are disabled for the duration.

Tip: Dispel potions or spells become really important, otherwise you could get slaughtered very quickly if you are in the midst of combat.

How the actual effect renders depends on which plugin you are using for the effect.

Scanti's Night-Eye Shader Switcher

In order for the effect to work, 101 different shaders had to be created and copied into two different folders for a total of 202 .pso files in the "31 Blindness for Shader Switcher" sub-package. These shaders are fixed. The only way to alter them is to create new ones and replace them. Instructions on how to do that are detailed later in the Shader Experiments section.

Oblivion Reloaded

If Oblivion Reloaded is installed, you can tweak the overall effect in the Data\Shaders\OblivionReloaded\Custom\sdrBlindness.ini file. There is one setting available:

[Default]
; Severity of Blindness Effect
fBLNDseverity=50.0000

The setting provides a range of intensity for the effect that is mostly noticeable in the less powerful or diminishing returns Blind spells. You can choose an intensity level of 0 to 100. But even at the lowest intensity, there will still be an obnoxious blindness effect. If you want the most obnoxious, set the intensity to 100. The default of 50 is the equivalent of the fixed effect when using Scanti's Night-Eye Shader Switcher plugin.

Deafen

Section last updated on May 15 2021 14:13.

Deafness doesn't exist in default Oblivion, so SDR added it as a Custom Actor Value "iCavDeafness" which parallels the Oblivion Blindness stat. New spells and potions have been added that allow you deafen others or be deafened.

Enabling Deafness magic

In order for the effect to work, the following steps have to be taken. Otherwise, if any of the required files or settings are missing, it will be disabled.

Install Enhanced Music and Control 2 or Sound Commands plugin

Enhanced Music and Control 2 has to be downloaded and installed separately. You can do that here.

A customized version of the Sound Commands plugin is included in SDR's installer "60 Sound Commands Plugin" sub-package.

If both Sound Commands and EMC2 are detected, SDR will use EMC2.

Tweak the SDR Game Settings Tweaks.ini

Set the iSDRsDeafnessActivate according to the chart below.

; Deafness Magic system.
; 0 = disable
; 1 = enable with provided Sound Commands plugin
; 2 = enable with Enhanced Music Control 2 plugin
SetNumericGameSetting iSDRsDeafnessActivate 1

Deafness and the detection formula

The deafness effect applies completely to the Audio component and for the audio portion of the Skill component of the detection formula. It has no impact on the Visual or Meta components.

Deafness Effects on the Player

Since deafness spells have been added to the NPCs' levelled lists, it is entirely possible that they might cast one at you. Should this happen, the following is what you can expect to experience:

While deafness is at 100 +, all sound (including footsteps, voices, environmental effects, and music) will be muted. In addition, all general and dialogue-subtitles will be disabled.

For deafness effect levels below 100, sound levels will be reduced by a percentage in proportion to the strength of the effect.

When it comes to dialogue subtitles, you have the option to determine when you will be able to start seeing them again. The default threshold for when they return is when deafness falls below 70.

SetNumericGameSetting iSDRsDeafnessDialogue 70; {70}

When it comes to music, you have the option to disable music for the entire duration, which prevents you from relying on music cues to let you know when combat has started.

SetNumericGameSetting iSDRsDeafnessHasNoMusic 1; {1}, 1 mutes, 0 fades in/out

When the spell effect ends, all sound and subtitles are restored to their original volumes.

Muffle

Section last updated on May 15 2021 14:13.

Muffle doesn't exist in default Oblivion, so SDR added it as a new magic effect which reduces any noise made by the feet/footwear of the target by a % equal to the magnitude of the effect. There are both spells and enchanted items that provide this new form of magic.

Enabling Muffle magic

In order for the effect to work, the following steps have to be taken. Otherwise, if any of the required files or settings are missing, it will be disabled.

Tweak the SDR Game Settings Tweaks.ini

Set the iSDRsMuffleActivate according to the chart below.

; Muffle Magic system.
; 0 = disable
; 1 = enable
SetNumericGameSetting iSDRsMuffleActivate 1

Muffle and the detection formula

This effect applies to both the Audio component of the detection formula that calculates penalties made by foot movement as well as the actual volume of sound the footsteps make by the player during game play. The current value of the Muffle effect for any given actor is tracked in the "iCavMuffle" custom actor value.

Unfortunately, SDR cannot muffle the sounds made by the player when you land from a jump or fall. Nor does it alter the footsteps made by an individual NPC or creature that have the Muffle effect on them. Those volume levels are hardwired into the game engine, and there is nothing I can do about it. But on the back end, the detection formula will still treat those actors as muffled, even if the actual volume level of the sound being played does not reflect that. This is not considered a bug so much as a hardcoded restriction of the game with no workaround.
AI Behavior

Section last updated on May 15 2021 14:13.

In order to provide balance to all the features and enhancements elsewhere, I felt it was necessary to tweak how NPCs and Creatures behave.

Followers

Section last updated on May 15 2021 14:13.

Followers are actors that… well… follow other actors.

Follower types

There are two types of followers: summoned and companions.

Summoned followers

Summoned Followers are creatures that were brought forth through magic to follow the summoner and fight/defend on their behalf.

Whenever anyone casts a summoning spell, SDR looks for that event, and flags for that actor to do a summoning check. As it goes through the list of summoned followers, SDR does two things:

  1. It adds a "summoned" token to the summoned creature so that it can mimic the summoner's behavior. The token is removed when the creature dies or the spell ends.
  2. It saves and associates the RefID of the actor who summoned it.

The second feature allows you to get the ID of the summoner from the target creature – something that wasn't possible before (to the best of my knowledge). If any modders want to take advantage of it, please refer to SDR's Modder's Guide: Extended Functionality section.

Companion followers

Companion Followers are any follower that was not summoned by magic*. Only the player is checked for companion followers.

*In some cases, there may be mods with special scripted summoning spells that do not register as a summoned person/creature. Usually these are special NPCs, and they will be treated like a regular follower instead of a summoned one.

Summoned followers mimic leader's actions

This provides an option for summoned followers to mimic the action of their summoner. If the leader runs, the followers run. If the leader sneaks, the followers sneak. These rules don't apply if they are in combat. Beyond that, the followers will act however their AI sees fit.

SetNumericGameSetting iSDRsSummonsMimicSummoner 1; {1}, 0 disables

Most creatures, actually probably all of them, do not have special sneaking animations unless provided for by a third party mod. So if you have a creature following you, and you go into sneak mode, it may seem like they aren't sneaking either. However, as far as the game is concerned, they are. There are just no animations for it.

The "mimic actions" feature is made possible by assigning a "token" to the summoned follower. The token is automatically removed on death or at the end of the spell.

Player friendly followers

Not all followers of the player will behave the same. Those that are "friendly" towards the player will have their detection levels of the player ignored when it comes to the Alternate Sneak Skill-Up System and the Player Fades While Sneaking immersion feature. Therefore, it's important to identify which of the player's followers is "friendly" and which are not.

Player's summoned followers

All summoned followers are automatically friendly towards the player and stay that way unless the player attacks them.

Player's companions

For companions, there are a couple of rules/options to be aware of:

Guards can't be friendly

This setting allows you to make sure that no one flagged as a guard can be a "friendly" follower. This is important, because you want their detection levels to count against you when increasing sneak skill or fading while sneaking, and making them friendly prevents that. This is an important setting because there is an SDR feature in which a guard will follow the player if they are acting suspiciously.

SetNumericGameSetting iSDRsNoFriendlyGuards 1; {1}, 0 disables

Poor Disposition

This setting makes sure that only followers that meet the minimum required disposition towards the player will be counted as a friendly.

SetNumericGameSetting iSDRsFollowerDispoThreshold 10; {10}, 0 disables

Left Behind

Sometimes a companion can be left behind. Any companion who is more than the max exterior detection distance will be temporarily dropped from the player's friendly list until they catch up. The default max exterior detection distance is 3000 units ~ 136.4 feet ~ 41.56 meters

Combat

If you attack your companion and they engage in combat with you, they will no longer be friendly.

AI Detection Magic

Section last updated on May 15 2021 14:13.

This feature assigns Detect Life and/or Night-Eye spells and powers to NPCs and Creatures, and then establishes rules for them to actually use them. The original code was created by Migck and then donated to SDR.

This setting turns on/off the whole NPC detection magic subset of features.

SetNumericGameSetting iSDRsDetMagicActivate 1; {1}, 0 disables

Assigning spells/powers

These settings determine if an actor is assigned a Detect Life and/or a Night-Eye spell/power. Each actor is only tested once when their SDR actor traits are first assigned and only one power/spell will be assigned. Being assigned a spell is determined by several factors:

  • Child NPCs do not get assigned any detection magic. Child NPCs can only be added by 3rd party mods and require a patch. Please contact me if you want to make sure that SDR is "aware" of a specific Child mod.
  • Vampire NPCs are a special case and are automatically assigned the equivalent of the Hunter's Sight lesser power as their detection magic.
  • All other actors can potentially be assigned detection magic, depending on their race/creature trait Detection Magic (DM) assignment probability setting:
    0 = Will not be assigned detection magic
    1 = Might be assigned detection magic, test for Detect Life, then maybe Night-Eye
    2 = Guaranteed to be assigned a Detect Life spell
  • NPCs will first be tested for Detect Life.
  • Failing that, NPCs will be tested for a Night-Eye spell if they don't already have innate night vision assigned as a racial vision trait.
  • Creatures will only be tested for Detect Life, since their creature vision trait assignment covers whether or not they have the innate "always active" version of Night-Eye.

Base chance for spell assignment

If the actor's detection magic (DM) probability is set to 1, then a check is made to see if they are assigned anything. The chance of being assigned a spell is based on the skill level of the appropriate school (in the case of NPCs) or their Magic stat (in the case of creatures). For NPCs only, if the skill is a Major skill of the class, their chance is enhanced by the following multiplier:

SetNumericGameSetting fSDRsDetMagicMajorMult 1.35; {1.35}

NPCs also get additional modifiers depending on their class specialization:

SetNumericGameSetting fSDRsDetMagicSpecMultCombat 0.85; {0.85}
SetNumericGameSetting fSDRsDetMagicSpecMultMagic 1.00; {1.00}
SetNumericGameSetting fSDRsDetMagicSpecMultStealth 1.15; {1.15}

For example: (BaseAV Mysticsim) * 1.35 (if Mysticism Major Skill) * 1.15 (if Stealth specialized)

A random number from 0 to 100 is generated. If it falls below the chance needed, the actor is assigned the highest level spell that the actor's skill/magic level will allow for that spell type.

Casting detection spells

The spells/powers are not used all the time, only under certain conditions:

  • The actor must actually have a spell or power they can cast
  • The actor must not be invisible or be casting other spells
  • The actor must not already have the spell effect active on them
  • If the actor already detects the player, they will not cast the spell
  • If the GetDetectionLevel vs the player = 1 (unseen) they will not cast
  • They must make a "casting check" to decide to cast the spell.
  • Checks are made every 8 seconds.

The casting check

A random number from 0 to 100 is generated. If the number is below the "casting check threshold", they will cast the spell. The casting check threshold = the actor's intelligence + the light level bonus.

The light level bonus increases as the amount of light hitting the actor decreases. So as the environment gets darker, and it becomes more challenging to see, the more likely the actor will cast some form of detection magic.

Light levels are scaled from 0 (total darkness) to 100 (max light). The bonus is calculated by: (100 - current light level) * this setting:

SetNumericGameSetting fSDRsDetMagicLightLevelCastFactor .25; {.25}

For example with the default settings, if the light level is 40, the casting check threshold would be increased by 15 points -> (100 - 40) * .25 = 15.

SM Combat Hide for SDR

Section last updated on May 15 2021 14:13.

Strategy Master gave me permission to adapt and incorporate his SM Combat Hide mod into SDR because the two were incompatible. It is activated with the following setting:

SetNumericGameSetting iSDRsSMCHActivate 1; {1}, 0 disables

Ending "combat mode" for the player with no combatants

This feature runs checks to see if there are any actors nearby that are in combat with the player. If no one is engaged in combat with the player after the following duration, and the combat alarm for the player is still on, it will be forced off.

SetNumericGameSetting iSDRsSMCHSecondsNoCombat 20; {20}

Player stays hidden timer

If the player can avoid line of sight from his attacker for the following duration, it will force an end to combat against the player and switch the attacker into an explore/alert mode.

SetNumericGameSetting iSDRsSMCHSecondsPlayerHidden 30; {30}

Exploration package assignment

An actor must have this minimum confidence level and be either a guard or more aggressive than their disposition to the player to be assigned one of the exploration packages.

SetNumericGameSetting iSDRsSMCHConfidenceLevel 15; {15}

If the actor qualifies for an exploration package, they will be assigned the "walk" version if their confidence level is below this threshold:

SetNumericGameSetting iSDRsSMCHConfidenceWalkLevel 70; {70}

Otherwise, they will be assigned the "run" version.

Exploration package timer

This setting determines how many seconds in real time an exploration package will last before the game's normal AI behavior will take over, assuming it isn't interrupted by another higher priority package.

SetNumericGameSetting iSDRsSMCHSecondsExplore 20; {20}

NPC dialogue timer

This timer determines how often an NPC says "Where did he/she go?" while exploring.

SetNumericGameSetting iSDRsSMCHSecondsDialogue 10; {10}

NPC alert timer

This timer determines how often an NPC is checked for their alert status while exploring.

SetNumericGameSetting iSDRsSMCHSecondsAlert 5; {5}

The NPC must have the following aggression level or higher to go into alert mode:

SetNumericGameSetting iSDRsSMCHAggressionLevel 80; {80}

Miscellaneous Features

Section last updated on May 15 2021 14:13.

There are three miscellaneous features that have been added to series 9: Combat Shouts, Tailing Guards, and Projectile Tracking.

Combat shouts

The Combat Shouts feature allows for actors that are in combat with the player to "shout". Any nearby potential allies to the shouter will "know" that there is something up and start looking for the player. If the ally is already in combat, the shout is ignored.

SetNumericGameSetting iSDRsReactCombatShouts 1; {1}, 0 disables

Responding to a shout is not automatic or guaranteed. There are several factors involved including the potential ally's ability to detect the shouter, their disposition towards the shouter, the personality of the shouter, and a bit of a random element.

Tailing guards

This feature is very similar to Reneer's Guard Overhaul following guard feature with a couple of minor variations. You can set the delay time for when a guard starts/stops following the player. Setting it to 0 disables the feature.

SetNumericGameSetting fSDRsGuardFollowDelay 4.0; {4.0}, 0 disables

A guard will start following the player if:

  • There are no other guards currently following the player already
  • The player is either sneaking or has a weapon out
  • The guard is able to detect the player

If RGO is detected, then SDR's version will automatically be disabled. However, if you have the SDR for RGO Patch installed, it will also use the same delay setting above when combined with RGO. RGO Guards that follow the player will not be counted as a friendly follower.

Projectile tracking

This feature tracks all projectiles (arrows, magic balls, magic fogs, and magic bolts) that are released by any actor, whether they are the player, NPCs, or creatures. If a projectile comes near another actor without striking them, there is a chance that the actor may detect the projectile, determine its approximate origin, and engage in combat to hunt down the source of the projectile.

SetNumericGameSetting iSDRsProjectileTracker 1; {1}, 0 disables

Important! The projectile tracking feature makes Sneak skill ups by "clean kill" attempts very challenging. Because if you don't hit your target and kill them on the first shot, they might detect the missed projectile and go into combat mode. Once that happens, you lose any chance of getting a Sneak skill up bonus for a clean kill.

Tracking the Projectiles

There is an event handler that is set to capture whenever an actor releases an arrow or casts a spell. When that happens, the projectile is added to an array of projectiles.

The array is then processed at the same interval that detection checks are made. By default, that is .3 seconds. It goes through the array, checking each projectile in the list, removing those that no longer exist or have fallen below a velocity threshold of 100 units per second (which indicates that the projectile has hit a target). Those that are still active are checked for detection.

Projectile Detection Checks

There are numerous factors that determine if an actor detects a projectile and how they react:

  1. The actor must be alive, enabled, and not already in combat.
  2. The projectile must pass within the projectile detection distance of the actor. The distance varies by projectile type. Distances are in units, where 22 units = 1 foot:
    SetNumericGameSetting iSDRsProjectileDetDistanceArrow 110; {110, 5'}
    SetNumericGameSetting iSDRsProjectileDetDistanceBall 220; {220, 10'}
    SetNumericGameSetting iSDRsProjectileDetDistanceFog 110; {110, 5'}
    SetNumericGameSetting iSDRsProjectileDetDistanceBolt 440; {440, 20'}
  3. The actor must have a higher aggression than their disposition towards the projectile source. This prevents an actor from reacting to friendly fire and attacking an ally.
  4. A detection threshold must be calculated using the following formula:
    ((Base + Type) * FOV mod) + (Intelligence * LOS mod)
  5. The base detection threshold uses the following setting:
    SetNumericGameSetting iSDRsProjectileDetBase 25; {25}
  6. The projectile type bump uses the following settings:
    SetNumericGameSetting iSDRsProjectileDetBumpArrow 10; {10}
    SetNumericGameSetting iSDRsProjectileDetBumpBall 15; {15}
    SetNumericGameSetting iSDRsProjectileDetBumpFog 5; {5}
    SetNumericGameSetting iSDRsProjectileDetBumpBolt 20; {20}
  7. The field of view modifier is determined by calculating where the projectile is in the field of view of the target using the heading angle of the target in relation to the projectile on the x/y axis. Currently, z axis is ignored, because it gets too complicated:
    • Binocular FOV: * 1.2
    • Peripheral FOV: * .8
    • Outside of FOV: * .4
  8. The intelligence bump is determined by the target's LOS of the projectile's source:
    • Direct line of sight (binocular FOV): full intelligence bonus
    • Indirect line of sight (peripheral FOV): half intelligence bonus
    • No line of sight or detect life only: one fourth intelligence bonus
  9. Once the threshold is determined, a random number from 0 to 100 is generated.

If the number is below the threshold, the actor immediately engages in combat with the projectile source and combat rules takes over. Otherwise, the actor is set to go "on alert".

Technical Support

Section last updated on May 15 2021 14:13.

SDR is a very complex mod. There are limits to my abilities to account for every scenario and overall balance. Inevitably something weird might happen or something isn't functioning like it used to. This section provides information and tools for you to, hopefully, figure out and fix what is going on without assistance. However, if you are still having problems, please post your issue in the SDR Nexus Forum.

Debugging

Section last updated on May 15 2021 14:13.

Because of the extensive number of features, SDR provides several debugging options. By default, all debugging features are turned off for performance reasons. However, you can either manually activate a debug game setting through the console or through the SDR Game Tweaks.ini file.

Known bugs and their fixes

The following bugs are known and have fixes for them.

The Night-Eye white screen effect

The NightEyeSwitcherShader.dll will sometimes cause a whited out effect when the Night-Eye shader effect is active. One of the following solutions should work:

  • Check to make sure you have the latest drivers installed for your graphics card.
  • Check to make sure these shaderfolders/files are installed in the following directory:
    Data\Shaders\hdr.nighteye
    Data\Shaders\nighteye
    In each folder you should see either 101 or 202 sdr_*_*.pso files. If there is a different number, then you may have the wrong set of shaders installed. Delete the two folders and reinstall SDR.
  • If you see "dev.nighteye" and "hdr.dev.nighteye" folders in the Shaders directory, delete them. They are not needed for game-play.
  • It's possible the shader variables didn't initialize properly. Try going into console mode with the ` key and type in "startquest sdrQreboot" to reboot and reinitialize SDR.
  • If the above doesn't work, and you are using HDR, you may want to try switching to Bloom or none.
  • In your Oblivion.ini file, use the following setting: bUseHardDriveCache=0. In my case, mine is set to 1, and I don't have the issue, but this worked for another user.
  • If you recently upgraded from a version prior to 8.2xx, you might have needed to do a "clean save" with SDR completely uninstalled first.
  • Backup/rename/delete your Oblivion.ini file altogether and let the game create a new default one.

If none of the above work, I'm not sure what to tell you. If you figure out a new fix, please let me know so that I can post the information here.

The feature comes from the following mod: Night-Eye Shader Switcher. You can try further inquiries on that web-page.

If all else fails, you may have to disable SDR's Night-Eye and Blind features.

The light level bug

There is a function called GetActorLightAmount which normally returns a float from 0.00 (complete darkness) to 100.00 (fully lit). This is a very important part of the detection process, because if the target is in complete darkness, then the observer cannot see them, which is about 1/3 of the detection formula.

However, there is a strange bug which seems to only affect Horses, Trolls, and Land Dreaughs. Regardless of the actual lighting conditions, GetActorLightAmount always returns 0.00 for them. This has been fixed by the mod Engine Bug Fixes, which fixes a whole slew of other issues too. I *highly* recommend that you install this mod.

The "poison kill credit" bug

There is a bug in Oblivion where if the final death blow is caused by a poison effect, the player doesn't always get credit for the kill. A fix has been added for this that can be activated with the following setting:

SetNumericGameSetting iSDRsPoisonBugFixApply 1; {1}, 0 disables.

The code was generously provided by Andalay Bay from the Oblivion XP Update mod.

Note: if Oblivion XP Update is detected, SDR will not apply the fix since Oblivion XP Update will already be handling it and it would cause a conflict.

Game crashes with Oblivion Reloaded + SDR's Dynamic Night Eye Shaders

When you enable dynamic night eye for OR, the game crashes after it has loaded into the main menu. This is most likely caused by you having an older version of Oblivion Reloaded installed. You need to have version 6.4.0 or later in order for the Dynamic Night Eye Shader and Blindness Effects to work properly.

Reported bugs with no fixes (yet)

The following bugs have been reported, but do not have a fix yet.

Alternate Sneak skill-up system bug

Status: Reported, not verified.

Reported with versions: pre 9000 beta

I noticed a bug with SDR's Alternate Sneak Skill-Up system. Every time I level up Sneak, while it does contribute to my character level up, if I increase it and my number of increased major skills reaches 10, the game does not give me the prompt to rest and level up. Furthermore, if I level up Sneak exclusively and no other attribute governed by Agility, I do not get any bonuses to Agility when leveling up. Both of these issues go away when I disable SDR's skill-up system and use the default Oblivion method.

Auto-move bug

Status: Reported, not verified.

Reported with versions: pre 9000 beta

I've been using 9.0 for awhile now; nothing much to note except that I occasionally get stuck in auto-move for some reason. I'm not sure if it's this mod causing it or not, but I do recall it happening in sneak mode before.

Deafness environmental sound bug

Status: Verified.

Reported with versions: 9000 - 9001

When the Deafness effect is applied to the player, sometimes the current environmental sound file will continue to play in the background until it comes to the end of the loop or the Deafness effect ends. All the other sounds get muted like they should though.

NPCs never exit alert state bug

Status: Reported, not verified.

Reported with versions: pre 9000 beta

The mod - series 9 - works fine, except for the fact that NPCs never exit the alert state, if for whatever reason they enter combat they'll remain forever with their weapons unsheathed and fists raised while going about their business. The only fix I found was disabling/enabling but it's temporary, and it comes back next fight.

Shattering frozen enemies bug

Status: Reported, not verified.

Reported with versions: pre 9000 beta

I've had issues with shattering frozen enemies from critical magic effects from mods such as Supreme Magicka's and Unnecessary Violence's special magicka effects. I get CTD when shattering the enemy myself. The fire and lightning criticals are fine, but some problem with the frozen enemy being converted into the ice chunk mesh causes CTD. No problem after disabling SDR_Mechanics.esp (note: renamed to SDR.esp)

Debugging SDR

When SDR debugs a feature, it sends messages to the console which are not normally seen during live game-play.

Accessing the console

To toggle console mode on and off, press the ` key. When in console mode, the game pauses (except for music) and allows you to enter in commands and view the most recent messages.

For a complete list of console commands, visit The Unofficial Elder Scrolls: Oblivion:Console wiki page.

Live streaming option

You can have a live stream of these messages sent to your screen during game play as follows:

  • Enter console mode with the ` key
  • Type in "tdt" (toggle debug text) to toggle displaying the console text in real time.
  • Exit the console mode.

ConScribe option

ConScribe is an OBSE plugin which saves everything that is sent to the console to an external text file for later review. I highly recommend it, especially since you can only go back about 20 lines or so via the console during game play. It is particularly helpful for me to help trouble shoot any issues if you can provide a ConScribe log. It can be downloaded here: Conscribe.

Debugging game settings

Following are all the game settings for debugging the various features in SDR:

Debugging startup/initialization

Whenever you start a new session or load a saved game, SDR goes through numerous routines to make sure that game settings are properly configured, user customized settings are applied, and core features, functions, and arrays are initialized so that SDR will work.

SetNumericGameSetting iSDRsIniDebug 1; {1}, 0 disables, 1 simple, 2 verbose
0 = Disables. No initialization message will display.
1 = Simple. A single one-line message is sent to the console when SDR has initialized and displays which version is installed.
2 = Verbose. An extremely detailed breakdown of every single aspect of SDR that is loaded, enabled, and disabled.

Debugging detections

There are several methods for debugging detections.

Method A: In console mode, type "swdp" and hit enter. It will display a list of all actors currently detecting the player.

Method B: In console mode:

  • Use the mouse an click on an actor. That will set them as the Observer.
  • Type in "tds", a space, and then the form ID of the Target. For example, to target Baurus:
  • tds 00032A17
  • Hit enter.

This generates a streaming list of detection stats on the right side of the screen.

  • If you do not specify a Target form ID, the Player will be selected as the Target by default.
  • To turn off the stats, type "tdt" again.
  • To switch to a different Observer, you have to toggle off the stats first, select the new Observer, and run "tds *formID*" again.

Method C: This method prints a single line of text to the console output stream of each detection made by an Observer to a Target with basic detection information. The Observer and Target are selected using "tds" in Method B. Which Observer/Target combinations are output depends on the following game setting:

SetNumericGameSetting iSDRsDetectionDebug 0; {0}, 0 turn off, 1 = Observer to Target, 2 = detections by Observer, 3 = detections of Target, 4 = all detections
Option 0 turns off the output.
Option 1 sends only detections of the Observer to the Target
Option 2 sends all detections made by the selected Observer towards all available Targets.
Option 3 sends all detections made by potential Observers to the selected Target.
Option 4 sends all detections made by all active Observers against all potential Targets.

Note: If you toggle off the Method B detection stats with "tds", the Observer/Target combination you selected will remain in memory until you use tds to select a new Observer/Target. That means you can still use Method C even after you have toggled off the right side stats.

Debugging alert levels/factors

To debug, use the following setting:

SetNumericGameSetting iSDRsAlertFactorDebug 0; {0} 1 enables

Debugging movement

If you want to debug the player's movement type, velocity, and movement penalty factor:

SetNumericGameSetting iSDRsMovementDebug 0; {0}, 1 enables

Debugging sprinting

If you want to debug sprinting specifically:

SetNumericGameSetting iSDRsSprintDebug 0; {0}, 1=simple/player, 2=verbose/player, 3=verbose/all

Debugging max/closest detectors

To debug Max Detector and Closest Detector, use the following:

SetNumericGameSetting iSDRsDetectorValidationDebug 0; {0} 1 enables

Debugging alternate Sneak skill-up

Shows debug information with details of how many points the player is earning while sneaking.

SetNumericGameSetting iSDRsAltSneakDebug 0; {0}, 1 enables

Debugging assassinations/clean-kills

This option will print a message to the console every time the player makes an "assassination attempt" on another actor with detail info on success or reasons for failing.

SetNumericGameSetting iSDRsAltAssnDebug 0; {0}, 1 enables

Debugging actor initialization

To debug how traits and spell assignments are initially assigned to an actor, use the following setting:

SetNumericGameSetting iSDRsActorDataDebug 1; {0}, 0 disables, 1=brief, 2=verbose 
1 = Prints a message when an actor has been initialized with their base race/traits.
2 = Same as 1 above, + more detailed info on what traits are being assigned to the actor during the initialization process.
3 = Same as 2 above, except that it dumps out the resulting entire array of CAVs data that was set.

Debugging the Dynamic Detect Life System

You can feedback printed to the console whenever an SDR Detect Life shader is applied or removed from an actor.

SetNumericGameSetting iSDRsDDLSDebug 1; {0}

Debugging the Dynamic Night-Eye Shader system

The following setting will assist you in debugging the Dynamic Night-Eye Shader (DNES) system.

SetNumericGameSetting iSDRsDNESDebug 1; {0}, 1 enables

Debugging Blindness effects

To debug the Blinding shader effects on the player, use the following:

SetNumericGameSetting iSDRsBlindnessDebug Debug 0; {0}, 1 enables

Debugging Deafness effects

To debug deafness effects on the player, use the following:

SetNumericGameSetting iSDRsDeafnessDebug 0; {0}, 1 enables

Debugging the Muffle effect

To debug the muffled effects on the player, use the following:

SetNumericGameSetting iSDRsMuffleDebug 0; {0}, 1 enables

Debugging summoned creatures tracking

You can debug checking summoned creatures with the following setting:

SetNumericGameSetting iSDRsDebugSummonsChecking 0; {0}, 1 disables

Debugging AI casting of detection magic

Sends message to console whenever an actor casts a Detect Life / Night-Eye power.

SetNumericGameSetting iSDRsDetMagicDebug 0; {0}, 1 enables

Debugging SM Combat Hide for SDR

The following can be used for debugging the adapted SM Combat Hide for SDR features.

SetNumericGameSetting iSDRsSMCHDebug 0; {0} 1 enables

Debugging projectile tracking

The following debug setting prints out one message to the console whenever an actor is within detection distance of a projectile and a second if they engage in combat to hunt the source.

SetNumericGameSetting iSDRsProjectileTrackerDebug 0; {0} 1 enables

Debugging the poison kill credit bug fix

This option will print debugging messages to the console when the poison fix script runs.

SetNumericGameSetting iSDRsPoisonBugFixDebug 0; {0}, 1 enables.

Performance Issues

Section last updated on May 15 2021 14:13.

There is nothing more frustrating that playing Oblivion at a lovely 45-60 FPS or more and then hitting an area where it suddenly drops down to 30 FPS or less. At those speeds, Oblivion becomes challenging if not impossible to play.

Here are some common causes for low performance:

  1. Mods that add significant content in a small area. (Better Cities Waterfront District, for example)
  2. Mods that add high resolution unoptimized graphics (Most texture pack mods)
  3. Mods that increase population density (Crowded Cities for example)
  4. Mods that greatly increase the complexity of AI behavior (such as SDR)
  5. Mods that are inefficiently designed and have memory leaks
  6. Too many mods installed
  7. Anti-Virus programs
  8. Low-end hardware (core processor speed, RAM, graphics card, etc.)
  9. Graphics card drivers either need to be updated or rolled back.
  10. Oblivion Game is installed in the "Program Files" directory (that's been known to cause lots of problems)

For more information on optimizing Oblivion, including links to tools and resources, I suggest starting here: Stabilization & Optimization.

SDR's performance hit

Oblivion's default detection formula is extremely simple with a negligible performance drain. If you are curious about the original Oblivion detection formula, as well as details on performance issues, it has been covered extensively here: Oblivion CS Wiki - Category: Detection.

In order to deliver a heightened level of realism, SDR's detection formula is much more complex, and therefore has a much higher impact on performance.

Population density and the detection formula

Having more actors in a given area not only impacts the graphics processing, but also each actor's AI has to be processed as well, including how they interact with other objects/actors in the area. Processing load increases exponentially with the increase of population density since every actor interacts with every other actor within the same radius of space. In combination with mods that make the behavior of actors more complex, that can have a brutal impact on performance.

For example, assuming the default Oblivion game settings and that all actors are within 1500 units of each other, following is the number of detection checks that are made every .3 seconds:

# of Live Actors
(including player)
in Active Area
# of Detection Call's*
/ .3 seconds
10
34
625
11100
21400
31900

At the high end, that's potentially 2700 detection checks per second! Now granted, population density isn't usually so high as to generate that many checks. However, in my stress tests, with fully loaded mods that added lots of actors into concentrated areas, I've seen it hit over 2000 detection calls per second in extreme circumstances.

* Note: These numbers do not include detection checks against dead actors. Although dead actors do not make detection checks, live actors do run detection checks on dead actors. It is necessary in order for live actors to check corpses and trigger quest stages.

SDR's performance history

Prior to series 8, SDR's performance used to be dreadful when the detection formula was entirely scripted.

With Series 8, most of the components of the detection formula got moved into SDR's OBSE .dll plugin. With it there was a performance improvement of anywhere from 40-60%, possibly more, compared to prior versions. Generally speaking, only high density population areas cause any lag now.

With Series 9, more steps were taken to move as many calculations as possible out of the scripts and into the sdr.dll OBSE plugin and to make the remaining scripts as efficient as possible. Some features were simplified and others completely dropped from previous versions to improve overall performance. Thus SDR shouldn't cause any performance problems for most. But series 9 is still fairly new, and hasn't been stress tested under extreme population density scenarios.

Identifying which mods cause performance issues

To identify if SDR or another mod is causing a performance hit, take the following steps:

  • Note the FPS with your current active load order in whichever area you are having a performance hit.
  • Save the game and exit Oblivion.
  • Disable SDR.esm, SDR.esp, and any dependent mods from the active load order.
  • Load the saved game and check your FPS.
  • If performance improves, SDR *might* be part of the problem. There could be other mods that cause the issue in conjunction with SDR.
  • Exit Oblivion and disable any mods that add lots of actor content to the game world area with the low FPS issues.
  • Load the saved game and check your FPS.
  • If performance improves, try keeping those mods disabled and reenable SDR.
  • If performance stays the same with SDR enabled but with the other mods disabled, that means that it's the combination that is causing the issue.

At this point, you only have a few options:

  1. Try some techniques for optimizing Oblivion as a whole (see link above).
  2. Try some of SDR's performance improvement settings.
  3. Try turning off some of SDR's features.
  4. Try uninstalling SDR completely, make a clean save, and reinstalling SDR.
  5. Either disable SDR or disable the other mods.

SDR feature troubleshooting

It is entirely possible that just a single feature of SDR could be causing a performance hit. One way to identify the problem is to turn off various SDR features one by one and see what happens.

The most likely culprit is the detection formula itself. Try SDR using Oblivion's formula: Detection Formula to Use

Features you may want to consider disabling in most likely order of stress are:

SM Combat Hide for SDR feature
SDR's Projectile Tracking feature
SDR's Recent Kill Alert feature
SDR's Alternate Sneak Skill up feature
SDR's Revamped Movement feature

The other features in SDR should have a negligible impact on performance. The only other feature that could be affecting performance is SDR's CAVs method of storing custom actor values. All kinds of Custom Actor Values are calculated and updated at various intervals. And while I have tried to spread them out to make sure that they are only updated when absolutely necessary, in a high population density area, there will be a drain on performance.

SDR performance improvement settings

If after optimizing Oblivion SDR is still causing problems, there are a couple of game settings you can tweak by adding them to the SDR Game Setting Tweaks.ini file.

Detection timer

This value represents how often in seconds an actor makes detection checks against all other actors within the current max detection distance.

SDR's scripting and updating is based on the assumption that the timer setting will range from .3 to .5 seconds. I do not recommend going above or below that range.

SetNumericGameSetting fDetectionTimerSetting .3; {Obv: .3} [.3 to .5]

Warning: Changing this game setting will have a significant impact on performance and immersion. If you reduce the turnaround time, it will decrease performance as the number of detection calls per second increase significantly. If you increase the turnaround time, there will be a performance boost, but detection calls may not be made in a timely manner which might disrupt some of the intended realism.

Min/max FPS thresholds

During game play, SDR's main quest re-evaluates the current FPS rate every five seconds. It then compares it to two game settings: iSDRsDetectMinFPS and iSDRsDetectMaxFPS.

Whenever the FPS drops below the iSDRsDetectMinFPS setting, SDR is flagged to use Oblivion's default detection formula instead of SDR's.

SetNumericGameSetting iSDRsDetectMinFPS 0; {0} 0 disables, else min FPS

This flag will remain in effect until the FPS rises above the iSDRsDetectMaxFPS setting, at which point SDR's detection formula will kick back in and continue to be used until FPS drops below the minimum threshold again.

SetNumericGameSetting iSDRsDetectMaxFPS 0; {0} 0 disables, else max FPS

If you always want to use SDR's detection formula, regardless of performance issues, set both settings to 0, which is the default. Otherwise, I would recommend setting the values to be about 5-10 FPS above your "comfort zones". That means if you normally get annoyed when FPS hits 25, set the iSDRsDetectMinFPS to 30. If your preferred base-line FPS is 40, set iSDRsDetectMaxFPS to 45. This will ensure that the game doesn't "jerk" back and forth between the two formulas.

Performance is still bad?

If you have gotten to this point, and you have exhausted all your options, it's quite possible that SDR has a design flaw that is causing the performance problem. If you think that's the case, and you want me to look into it, please post the following information on the forum:

  • A description of the issue
  • The conditions under which the performance hit happens so that I can try to recreate it. This includes your location and actions at the time.
  • Your load order
  • What steps you have taken to address / identify the issue
  • If possible, a link to a copy of your game saves.

Note that I do not have a lot of free time, so I can't guarantee that I will be able to resolve your issue. However, the more information you provide, the more likely I will take a look.

Distance and Units of Measure

Section last updated on May 15 2021 14:13.

In working on SDR, I had to learn a lot about the game mechanics. One of the trickiest part was understanding "units" within the game, how they convert to real world numbers, and deciding which distance values in units to use for various settings.

Units of measure in Oblivion

Oblivion uses 'units'(u) to measure everything. For instance, exterior cells are 4096 x 4096 u, velocity is calculated in u/second, etc. The only indication of how units convert to real-world measurements is the fMagicUnitsPerFoot game setting, which by default is 22. Although you *could* change it, I don't recommend it. I have no idea what problems it might cause.

For humanoid NPCs, a "scaling" factor is used, with 1.0 being the base. The height of an adult male Imperial at 1.0 scale is a little over 132.44 u (132.44036865 to be more precise), which (at 22 u/foot) converts to approximately six feet and a quarter inch tall. To get a sense of how the various NPC races compare, have a look at the following chart. Male Bosmers are the shortest at 5' 5". Altmers are around 6' 7.5"

If you are curious about human height in the real world, you can visit the Wikipedia page on human height.

What the human eye sees

I've done a bit of research and have put together a very rough estimate of what your eyes would be seeing at different distances. This was done using a virtual reality program with a "35 mm" camera using a "58 mm" lens, which is supposed to be as close as you can get to a human's perspective of objects in relation to each other.

Following are the shots. The subject was placed at distances in feet (the smaller number) and Oblivion units (the larger number).

Detection and level of detail

What I find interesting is how much detail you lose the further out you go. It almost seems exponential. So in the context of detection, yes it is possible that someone might see you at a distance, but there isn't enough detail to determine exactly who/what you are, and therefore detection is discounted beyond that range. In outdoor settings there tends to be more light and fewer obstacles, so it kind of makes sense that the maximum detection range is double that of interiors.

Unfortunately, the images that I created do not correspond well with what is actually displayed in Oblivion. Characters/creatures at those distances appear to be smaller, implying a different focal length was used when determining perspective. So the jury is still out on what the exact best settings are.

Sound and distance

One of the other considerations when determining maximum detection distance is how far sound can travel. Since sound is a significant component of SDR's detection system, I think it's important to consider what maximum range the sound would travel when determining interior and exterior distances. With interiors, there tends to be more objects and walls in the way, so sound won't travel nearly as far as when in exterior settings. In addition, sound bounces around a lot and gets absorbed. So even though one hears a sound, it may be challenging to identify what it is and determine where it is coming from.

Conclusion on detection distances

Ultimately after all of that research, I decided to keep the default interior max detection distance at 1500 units. I don't recommend increasing it beyond that as you will run into performance issues. I also don't recommend making it shorter than that because there seems to be other features and AI behavior coded to that 1500 unit distance, which can make things funky if you change it.

All of SDR's other distance related default settings are built around the 1500 unit detection distance and thoroughly tested for effectiveness. So if you do decide to mess with the default maximum, you may want to tweak the others as well.

Miscellaneous Questions and Answers

Section last updated on May 15 2021 14:13.

Following are some common questions I have received and their respective answers.

How did you decide on what numbers to use for the various race/creature traits?

Lots and lots and lots and lots of research: Wiki articles, scientific studies, web-sites that specialize in particular species, looking at the actual .nif models for the fantastical creatures using protractor overlay tools, reading up on myths and legends, relying on my own roleplaying experience, extrapolating from the other data to make up for the gaps, flat out guessing, etc.

Are you going to build something like this for Skyrim?

No.

Do you have future plans for this mod in Oblivion?

Only bug fixes, performance improvements, and mod compatibility patches.

Is (insert mod name here) compatible with SDR?

See the Mod Compatibility section for the most up-to-date information.

Can I merge the plugins using Wrye Bash or Gecko's "Merge Plugins" function?

Yes, to some extent. The list of .esm/.esps that SDR provides are as follows:

  • SDR.esm
  • SDR.esp
  • SDR_Oblivion.esp *
  • SDR_Nehrim.esp *
  • SDR_DDL_Oblivion.esp *
  • SDR_DDL_Nehrim.esp *
  • SDR_patch_RenGuardOverhaul.esp

SDR.esm and SDR.esp should not be merged into anything else, as there may be other mods looking for them by name.

Those marked with an * are safe to merge because they don't add any new content. They only modify existing content. If using Wrye Bash, you can merge them into the bashed patch. If using Gecko, you should merge them into the SDR.esp.

I'm not sure about SDR_patch_RenGuardOverhaul.esp. It needs to work with RGO. I suppose you could try merging those two together with Gecko or merging it into the Bashed patch. But I have no idea if that will work, nor do I intend to try it. If anyone does try this, let me know how it goes and I can update this section. You would not want to merge the RGO patch into SDR.esp though, as that would make SDR.esp dependent on RGO.

What should the load order be?

See the Installation Instructions / Load Order section.

You have .ini settings for 3rd party mods that I do not have installed. Do I need to do anything?

No. SDR will only apply settings for 3rd party mods if the mod is detected in the active load order.

Sneaking actually seems easier with SDR than standard Oblivion. What gives?

The main idea of SDR is to make the experience more realistic, so if you know what you are doing and taking advantage of the shadows, then yes it may seem easier. Your experience may also depend on what other mods you have installed. SDR is more sophisticated and therefore more sensitive to indirect changes. For example, mods that make areas darker such as Cava Obscura will make sneaking easier. On the other hand, mods like T.I.E. will make sneaking harder, since many NPCs have significantly higher sneak/stealth scores than in their default Oblivion incarnations. Take a look at the Mod Compatibility section for recommended settings. You can also tweak SDR's settings to make it more challenging.

Does SDR interact with the AV Uncapper plug-in?

As of series 9, SDR no longer interacts directly with AV Uncapper to determine the maximum effective Sneak skill level. But other than that, there is no problem using AV Uncapper in conjunction with SDR.

Do I still need the Add Actor Values OBSE plug-in?

As of series 8, the sdr.dll OBSE plug-in uses its own method for storing and retrieving custom actor values and no longer relies on Add Actor Values.

Vetoed Suggestions

Section last updated on May 15 2021 14:13.

SDR is a very complex mod. It covers a lot of things, but not everything, and certainly not everything I or other players would like to have. Following are suggestions I have received and the reasons why I chose not to implement them.

How about penalties for specific sounds?

I've already looked into trying to capture and evaluate specific sounds and volumes, including weapon strikes, spell casting, sounds made walking on various surfaces, wing flaps, etc. and it's very, very difficult. Actually, it's pretty much impossible to come up with a reasonable way of doing it without overtaxing the system and causing a lot more work and flaws. So everyone gets a pass on this. The player gets the advantage.

I'm striking a rock with my sword. I hear a sound, but there is no sound penalty...

I'd love to add that, but I was unable to capture when that event happens, plus, see above.

How about light and sound for spell casting?

Light is already taken care of automatically. If you cast a spell and it sheds light, it will increase the amount of light on the caster and anything else within its area of effect. As for sound, same problem as addressed above.

Shouldn't feather/burden make you quieter/noisier?

Those spells already do so by adjusting your encumbrance. However, you can use the new Muffle spells to reduce how much noise you make.

Expanded explanation: The original description of the feather effect in the Oblivion user manual is: "Temporarily reduces the target's encumbrance. The magnitude is the units of weight removed from encumbrance." For burden it's: "Temporarily increases the weight carried by the target. The magnitude is the amount of weight being added." From my perspective, these spells automatically offset or add to the amount of sound you make by tweaking your overall encumbrance, which affects how heavy your footsteps will be on the terrain.

Have you considered doing magical sneak attack damage multipliers?

Considered it, tried it, but in practice it doesn't follow the rest of the logic of SDR, so I threw it out. From my perspective, sneak attacks do more damage because:

  1. You are using a precision weapon.
  2. The target is unaware of the attack until after it has struck.
  3. The target is not moving or defending themselves, allowing you to target a weak spot that would cause the extra damage.

But if you look at a magical attack, it's a completely different combat form:

  1. Magical attacks are imprecise, and the effects usually cover either an area or are distributed across the body: fire balls, drain health, shocking touch, etc.
  2. Magic attacks tend to give off a lot of light and sound, which doesn't make them "stealth worthy".
  3. A magical attacker can remain undetected after casting a fireball if far enough away, but that doesn't prevent the defender from seeing the attack coming, unlike shooting an arrow. So if the attacker can see the attack, even if they fail to dodge it, it doesn't make sense that they should take more damage just because they can't see the source of the attack.
  4. The magnitude of the damage is determined by the amount of energy put into the spell at the time it is released, not the detected/undetected state of the caster.
  5. There is already a system in place to amplify magical attack damage: weakness spells.

Even if there was a special Shadow Magic that had no light or sound effects, the nature of the magical energy being delivered in an imprecise form would negate the sneak attack bonus. A similar logic is applied to two-handed weapons, which also do not get multipliers for successful sneak attacks. If you want the best of both worlds, use enchanted weapons. However, if you really like the idea of magical Sneak attack bonuses, and want to give it a whirl, there is already a mod that does this: Supreme Magicka.

I miss the "Only allow Night-Eye while sneaking" option. Can I have it back?

This was my reasoning for removing the feature:

  1. From my perspective, night vision is an organic thing, and the idea that it only works when you are crouching doesn't make a whole lot of sense.
  2. There is an issue with certain combat mods that use sneaking for ducking techniques which get really weird when the visuals keep blinking back and forth during combat.
  3. I have a general "if it applies to one, it should apply to all" rule, which meant that natural night-eye would be invalidated for nearly everyone else since very few NPCs sneak, giving a huge advantage to the player.
  4. Performance is a big issue. Every line of code makes a difference. I decided that the feature wasn't worth the performance hit when I was simplifying the code. It was either that or lose the toggle and I felt more people would be upset about losing the toggle.
  5. Removing the lines of code does not prevent a player from only using it while sneaking. It shifts the burden on to the player to remember to toggle it off when they aren't sneaking, although I imagine there are probably some hot key mods that might set up some key combos to do that for them.

If I sneak up behind someone when I am holding a torch but I am not in their line of sight, do they notice the change in light?

They used to, but not anymore as of series 8. As much as I want to include that feature, I decided that the amount of programming involved and the performance hit that it caused wasn't worth the extremely rare moments and very subtle impact to the detection calculations when these circumstances kicked in. Just role-play it - don't sneak up on someone when carrying a torch.

Why isn't there a setting for the player's companions to mimic the player's actions like there is for summoned creatures?

There used to be an option prior to series 9. But there are too many companion mods out there that have specific scripting to handle those situations already. I felt it was best to let other mods handle that kind of behavior, rather than have to deal with all the overlapping and potential conflicts that would be created.

Mod Compatibility

Section last updated on May 15 2021 14:13.

Here are some guidelines to determining potential conflicts with SDR:

What to look for

A mod will definitely conflict if it:

  • Attempts to overhaul detection/sneaking/game settings and formulas in similar ways to SDR
  • Significantly changes the Sneak values of NPCs (minor changes won't matter much)

Mods that conflict but are usually resolvable with .ini settings are those that:

  • Alter the Chameleon refraction effect
  • Modify any of the three main scripts that handle Oblivion's intermediary standard pressure plates and tripwires action triggers
  • Alter the Night-Eye shader effect
  • Alter how NPCs handle Detect Life and Night-Eye magic effects
  • Alter how NPCs hunt down the player after detection
  • Provide a sprinting option
  • Revise the rules on movement rates for walking, running, and movimg backwards.
  • Revise the rules on fatigue depletion/regeneration when running.
  • Change the Sneak Attack Damage Multipliers
  • Other miscellaneous minor features of SDR that won't break SDR as a whole, but might break a particular feature of it.

Using SDR with other mods

SDR works with other mods in a variety of ways.

  • Designed for SDR : These mods were created specifically to work with SDR.
  • SDR Friendly : SDR is designed to interact with these mods, usually with a patch.
  • Compatible : These mods are compatible out of the box, with no known conflicts.
  • Semi-Compatible : These mods have minor conflicts with SDR that can be resolved through .ini settings, changes in load order, installation choices, or via a patch.
  • Unconfirmed Incompatible : These mods have been reported as having a conflict, but the conflict/resolution has not been confirmed.
  • Incompatible : These mods have direct conflicts with SDR, and should not be used in conjunction with it.

OBSE plug-in compatibility

To my knowledge, SDR's sdr.dll OBSE plug-in does not conflict with any other OBSE plug-ins. However, there may be conflicts with some of the other plugins SDR uses. Make sure to double check compatibility information on for each mod and plug-in you install. For example, mods that use the Custom Spell Icons OBSE plug-in are not compatible with those that use the OBME plug-in.

Have a recommendation? Need to report a conflict?

If you find a mod that you think complements SDR and would like to recommend it, or if you have come across a mod that you think conflicts with SDR, please post it in the SDR Nexus Forum, along with any notes or recommended settings (either in SDR's ini, or in the mod's ini) that help make it work.

Designed for SDR

The following mods were designed to interact directly with SDR's features and require SDR to be installed as a master.

Sneaking Detection Recalibrated OBME additions

Download Link: TES Nexus

Requirements: Oblivion, SDR.esm, OBME

Brief Description: This add-on turns the Blindness, Deafness and Muffle scripted spell effects into three new OBME magical effects, which allow them to be included in custom spell making and enchanting. It also adds blindness/deafness spells to enemy NPCs, as well as a few new magic items for the player to find and use.

Warning: Custom Spell Icons conflicts with OBME. So if you have Custom Spell Icons installed, you cannot use SDR OBME additions.

NOTE: This mod is *not* compatible with series 9 at the moment. But hopefully will be soon.

SDR Friendly

SDR was designed to either interact with the following mods or has built in patches that provide compatibility with them:

Bare Necessities

Download Link: TES Nexus

Interaction: SDR applies penalties to detection based on lack of sleep or hunger values pulled from Bare Necessities.

Basic Primary Needs

Download Link: TES Nexus

Interaction: SDR applies penalties to detection based on lack of sleep, hunger, and thirst values pulled from Basic Primary Needs.

Children of Cyrodiil

Download Link: Emma's Website / TES Nexus

Interaction: SDR recognizes the child actors and so does not assign them certain features and abilities that are restricted to adults.

Druid Mod Remade

Download Link: TES Nexus

Interaction: SDR detects if the player is in "transformation" mode and makes sure that the correct alpha state is implemented.

Enhanced Music and Control 2 (EMC2)

Download Link: TES Nexus

Interaction: If SDR detects EMC2, it will use it for SDR's Deafness magic effect. Without EMC2, you will need the Sound Commands plugin, which is included in SDR's installation package. If both EMC2 and Sound Commands are detected, SDR will use EMC2.

Oblivion Reloaded

Download Link: TES Reloaded website

Interaction: SDR can use Oblivion Reloaded's shader system for SDR's Blind magic effect and SDR's Dynamic Night-Eye Shader system. Without Oblivion Reloaded, Scanti's Night-Eye Shader Switcher plugin is required, which is included in SDR's installation package. It is recommended that you only use one or the other.

Oblivion XP Update

Download Link: TES Nexus

Interaction: Oblivion XP Update is an alternative method for increasing experience points and improving the character. SDR also has some alternate methods of increasing Sneak skill. However, if Oblivion XP Update is detected, SDR's methods are disabled automatically. Same applies to the Poison Bug fix that is included in Oblivion XP as well as SDR.

Real Sleep Extended

Download Link: TES Nexus

Interaction: SDR applies penalties to detection based on lack of sleep values pulled from Real Sleep Extended.

Reneer's Guard Overhaul

Download Link: TES Nexus

Interaction: Normally, guards automatically detect and follow the player, even when the player should be undetected, along with other features that undermine how SDR is intended to work. Install the SDR Patch for Reneer's Guard Overhaul that comes with SDR's Installation Package to resolve the conflicts.

Thieves Arsenal

Download Link: TES Nexus

Interaction: SDR detects when an actor is paralyzed or knocked out using Thieves Arsenal weapons/tokens and applies detection penalties accordingly. SDR also recognizes the street urchin as a child actor.

Compatible Mods

The following mods do not directly interact with SDR, but have been recommended by players as enhancing the overall stealth/adventuring experience in combination with SDR. There are no known conflicts with any of these mods at this time. Also, if a mod you are interested in is not listed on this page, assume that it *is* compatible, unless you experience otherwise. This list is as of SDR series version 9.x.x. If you have not updated yet, please do so before registering any complaints.

Overhaul Mods

Environmental Mods

AI Behaviour Mods

Crime and Punishment

  • Crime has witnesses : The player can remove Bounties for crimes by either killing the witnesses or coercing (Disposition 100) the witnesses to not report the crime.
  • Hear No Evil : Hear No Evil adds a new layer to gameplay and strategy to Oblivion by making the distance sound travels vary according to your environment.
  • No Psychic Guards Harder Fix :
  • SM Regional Bounty : Provides regional bounties, no-psychic guards, guard knockouts and the option for diminishing bounties as well.
  • Crime and Guard Overhaul with Regional AND Provincial bounty : This mod provides regional and provincial bounties, designed with such mods as Deserts of Aquinas and Valenwood Improved in mind. It also attempts to take the best features from such excellent mods as Reneer's Guard Overhaul, making use of developments in OBSE to vastly improve efficiency. As well as adding in a number of new features.

Lockpicking / Chest Cracking

  • Morrowind Lockpicking : This mod gets rid of the lockpicking minigame and introduces Morrowind's realtime lockpicking system to Oblivion. It also features lockpicks of different quality, each with a unique texture.
  • SM Security and Lockbash : Forces you to "pay" a number of lockpicks to access a lock based on your security skill. Also implements a power-attack based lock bashing system.
  • Zumbs Lockpicking Mod OBSE : This mod features an alternative to the lockpicking minigame, complete with three equipable lockpicks, a brand new lockpicking algorithm, an experience system, and criminal charges if you're seen!

Disguise and Deception

Movement

Stealthy Magic Related Mods

  • Silence : Prevents being able to converse with PCs while under silence effect
  • Stealthier Magic : Available through the T.I.E. page.
  • Stealthy Absorbs and Drains v1 : This mod makes Absorb and Drain Attribute and Skill spells non-hostile if your skill in the corresponding school AND your sneak skill are both higher than the casting cost of the spell.
  • Supreme Magicka : Allows attack multipliers for successful sneak attacks with magic

Interface Mods

  • No Sneak Eye : Replaces sneak eye with an invisible texture.
  • HUD Status Bars : Allows you to mod the HUD. Below is suggested alternative code that makes the sneak eye reflect how much light is hitting the player, rather than detection level.
; ==== An alternative sneak icon
; It displays amount of light falling on the player, by going from transparent grey (with no light),
; to opaque yellow (with much light).  It only displays when you're sneaking, but does not indicate
; whether you are seen or not (since that is immersion-breaking).  The Sneak Icon displays at the
; bottom, about 20% in from the left border.
set tnoHSB.hud_visible to sv_Construct  "Player.IsSneaking" ; Only visible when sneaking
set tnoHSB.hud_val to sv_Construct      "GetActorLightAmount"
set tnoHSB.hud_max to sv_Construct      "100"
set tnoHSB.hud_color_max to             HUDcolorYellow      ; Color is yellow when in full light
set tnoHSB.hud_color_min to             HUDcolorGrey        ; ...and gradually changes towards grey
; in less light
set tnoHSB.hud_type to                  1                   ; Icon doesn't change
set tnoHSB.hud_custom to sv_Construct   "Misc\sneak_eye"
set tnoHSB.hud_custom_w to              64                  ; Icon base size
set tnoHSB.hud_custom_h to              50
set tnoHSB.hud_size to                  HUDmagicWidth       ; Width equal to the spell icon
set tnoHSB.hud_alpha to                 255                 ; Max alpha is fully opaque
set tnoHSB.hud_alpha_min to             50                  ; Min alpha is alpha 50
set tnoHSB.hud_alpha_inv to             0                   ; Lowest alpha when no light is
; falling on it
set tnoHSB.hud_alpha_vis to             100                 ; Reach max (255) when in full light
set tnoHSB.hud_x to                     20                  ; X pos 50 = centered
set tnoHSB.hud_y to                     100                 ; Y pos 50 = centered
SetStage tnoHSB 10

Visual Effects

  • Initial Glow : This removes the persistant glow effect on enchanted armors (and weapons?) - useful in combination with NPCs fade while sneaking so that those with magical armors aren't given away by their glow effect.
  • Effect drain shader initial glow only : Initial Glow missed a spot, so add this too.

Combat Mods

Companion Mods

All companion mods *should* be compatible. Yes that includes Vilja.

Leveling Mods

All leveling mods *should* be compatible. However, you may want to double check for settings that might conflict with SDR's alternative Sneak skill-up system.

Race and Creature Mods

SDR has .ini settings that handle many of the more popular mods, plus, users can add any missing races/creatures using the provided format. The following mods already have their creature/races incorporated into SDR's default .ini settings.

  • Cyrodiil Upgrade Overhaul
  • Francesos Creatures and Items - v5
  • Martigen's Monster Mod - v3.8
  • Race Balancing Project
  • Maskar's Oblivion Overhaul

Stealth Mods

There are lots of stealth related mods out there. They will pretty much either conflict or they won't. The ones that conflict are listed below in the Incompatible Mods section. If you are looking for stealth related weapons, armor, clothing, or quests, or other stealth game mechanic mods not listed above, you should check out Running 4 Cover's Stealth Mods forum thread.

Miscellaneous Mods

The vast majority of other kinds of mods will be compatible. A few that may have had issues reported but have been cleared are listed below.

Semi-Compatible

The following mods have conflicts that can be resolved either by changing the load order, tweaking an .ini file setting, or installing a patch. The following compatibility issues are only as of SDR series 9. If you have an earlier version of SDR, please upgrade first before registering any complaints.

Cava Obscura

Issue: Sneaking becomes way too easy.

  • Cause : The darker areas reduce the starting point of detection when it comes to lighting, which makes it too easy to hide from your enemies.
  • Resolution : Try this setting in your SDR Game Setting Tweaks.ini:
    SetNumericGameSetting iSDRsLightLevelOffset 5
    You have to be careful not to set this value too high, otherwise it becomes way too easy to get spotted.
  • Notes : The "sweet spot" will be different for everyone, so there is no hard set rule on this. You will just have to experiment until it feels right. The best way to test it is to create a new character with the bare minimum skills, and go into a dark dungeon, and see what that is like, and then force the Sneak skill to be 100, see what that is like, and then force add chameleon gear and spells to max out chameleon, and see what that is like.

Detect Life Effect and Night-Eye Shader

Issue: Alters the Night-Eye shader effect.

  • Cause : SDR has it's own dynamic Night-Eye shader effect. Having both mods active could cause problems.
  • Resolution : Either disable SDR's effect in the SDR Game Setting Tweaks.ini file or disable kuerteeNightEyeShader.esp.

Issue: Alters the Detect Life shader effect.

  • Cause : SDR has it's own detect life shader effects. Having both mods active could cause problems.
  • Resolution : Either disable SDR's effects in the SDR Game Setting Tweaks.ini file or disable kuerteeDetectLifeEffect.esp.

Duke Patrick's Combat Archery

Issue: Walking Backwards feature conflict

  • Cause : Both SDR and Combat Archery have similar reduction of speed when walking backwards but different programming. Having both active at the same time might double the reduction.
  • Resolution : Pick one or the other. I recommend keeping SDR's because it is more tied in to the overall revision on running/sprinting/etc. Duke Patrick has a feature that looks for stumbling if you are moving backwards, but it is not directly connected to his running backwards modification. In addition, DP's system only affects the player while SDR's affects all NPCs.
    Option A: Disable setting in Duke Patrick's - Combat Archery.ini:
    set A1RunBackAndFall.BackwardSpeedMod to 0 ; .5 default
    Option B: Disable setting in SDR Game Setting Tweaks.ini:
    SetNumericGameSetting fSDRsBackwardsMoveMult 0 ; {.4}, 0 disables

Duke Patrick's Magic you can Believe in

Issue: Conflicts with Night-Eye and Detect Life shaders.

  • Cause : Reported that this mod uses its own system (unconfirmed by me).
  • Resolution : Pick one or the other to handle auto-nighteye/detectlife. I am not familiar with DP's mod, but if you want to disable SDR's, you can do so with the following game settings:
    SetNumericGameSetting iSDRsDDLSActivate 0
    SetNumericGameSetting iSDRsDNESActivate 0
            

Duke Patrick's Melee Combat No Recoil

Issue: Running/Sprinting conflict

  • Cause : Duke Patrick's Combat Mod changes the fRunMult setting and has it's own sprinting conflict.
  • Resolution Option 1 : Disable SDR's revamped movement feature in the SDR Game Setting Tweaks.ini file.
    SetNumericGameSetting iSDRsMovementRevamped 0
  • Resolution Option 2 : Disable DP's sprint feature in the DP Melee Combat .ini file.
    set aadpfatigue.DashSpeedMod to 0

Haldar's Mod Pack

Issue: Fading NPCs While Sneaking conflict

  • Cause : The "disappearing NPCs while sneaking" part of the mod conflicts with SDR's.
  • Resolution : Either disable that part of Haldar's Mod Pack, or disable SDR's NPCs fade while sneaking option in the SDR Game Setting Tweaks.ini:
    SetNumericGameSettings iSDRsFadeSneakNPCs 0

Maskar's Oblivion Overhaul (MOO)

Issue: SDR's Sneak Attack Multiplier settings are ignored when used with MOO.

  • Cause : MOO overwrites SDR's changes to the Sneak Attack Multipliers.
  • Resolution Option 1 : Disable MOO's sneak attack option in the Maskar's Oblivion Overhaul.ini. You do not need to comment out all the "set Moo.ini_fPerkSneakAttackxxx" settings:
    set MOO.ini_damage_sneak to 0
  • Resolution Option 2 : Use MOO's sneak attack multipliers in the Maskar's Oblivion Overhaul.ini file, adjust to taste, and disable SDR's sneak attack multipliers in the SDR Game Setting Tweaks.ini file:
    SetNumericGameSettings iSDRsPerkSneakAttackMultOpt 0
  • Resolution Option 3 (for use in conjunction with OOO) : Use MOO's sneak attack multipliers in the Maskar's Oblivion Overhaul for compatibility.ini file, adjust to taste, and disable SDR's sneak attack multipliers in the SDR Game Setting Tweaks.ini file:
    SetNumericGameSettings iSDRsPerkSneakAttackMultOpt 0

OOO / FCOM

Issue: Changes to the Sneak Attack Multipliers made by OOO/FCOM are overwritten, and I want to use OOO/FCOM.

  • Resolution : Change SDR's sneak attack option in the SDR Game Setting Tweaks.ini file:
    SetNumericGameSetting iSDRsPerkSneakAttackMultOpt 0

Running Revised, with sprinting, fatigue, configurable

Issue: Conflicts's with SDR's system for handling running and fatigue

  • Resolution : Either do not use Running Revised, or disable SDR's system in the SDR Game Setting Tweaks.ini file:
    SetNumericGameSetting iSDRsMovementRevamped 0

Supreme Magicka

Issue: Conflicts with detect life shaders.

  • Cause : Supreme Magicka has its own system for detect life shaders.
  • Resolution 1 : Deactivate Supreme Magicka's shaders om the SupremeMagicka.ini file:
    set SMDetectLifeOn to 2.
  • Resolution 2 : Deactivate SDR's DDLS in the SDR Game Setting Tweaks.ini file:
    SetNumericGameSetting iSDRsDDLSActivate 0.
  • Note: Do NOT set SMDetectLifeOn to 0, even if sounds like it will do the job. It will end up adding the original default Oblivion shader on to whatever else SDR has, creating multiple effects.

Issue: Conflicts with detect life effects.

  • Cause : Supreme Magicka has its own rules for detect life effects, which can negate the effectiveness of Invisibility and Chameleon spells. Although this doesn't technically break anything in SDR, it does conflict with the overall design of SDR's detection system.
  • Resolution : If you want to keep with SDR's intended design, look for the SupremeMagicka.ini file and use the following settings:
    set zzSMTokenScript.bAIDetectLife to 0
    set zzSMTokenScript.bVampireDetectLife to 0
            

Issue: Targets resist magic attacks if you are sneaking and undetected. (reported, unconfirmed)

  • Cause : Unknown.
  • Resolution : Unknown.

Incompatible Mods

The following mods are not compatible with SDR and should not be used in conjunction with it.

  • Amulet of Greed: Conflicts with many of SDRs features, most of which cannot be disabled in AoG and/or SDR.
  • Attack and Hide: Conflicting game setting changes
  • Deadlier sneaking: Game setting and other conflicts
  • Duke Patrick's Fresh Kills Now Alert The NPCs: Conflicts with SDR's recent kill alert level system
  • Duke Patrick's Near Miss Magic And Arrows Alert The Target: Conflicts with SDR's projectile tracking alert system
  • More Realistic Sneaking BETA v17: Many many conflicts
  • More Realistic Sneaking with Throat Slitting: Many many conflicts
  • Phitt's sneak penalties: Many many conflicts
  • Proximity Based Sneak Penalties: Many many conflicts
  • Reneers NPC Sneak Mod: Conflicts with NPC's fading while sneaking feature
  • SM Combat Hide*: Breaks SDR's detection magic features
  • Sneaky Summons*: broken when combined with SDR
  • Stealth Overhaul: Game setting and many other conflicts, alters Sneak skill
  • Stealth Overhaul Redux: Game setting and many other conflicts, alters Sneak skill

*note: a version of this mod is now built in to SDR with permission of the mod's creator.

SDR's Formulas

Section last updated on May 15 2021 14:13.

This section provides an inside look into some of the formulas that SDR uses. The Excel worksheets will have the formulas and let you experiment with variable settings to see what the outcome would be in-game.

Because it takes a lot of time to assemble these, I will only add content if requested.

Effective Sneak Skill

I borrowed a diminishing returns function from the Add Actor Values mod in order to calculate Luck's impact on Effective Sneak Skill. The default settings for this are Offset: 50, DecayRate: 1.02, and Growth Rate: .504.

To see what the results are for various Sneak/Luck combinations, and to experiment with the settings yourself, you can download the worksheet here: Effective Sneak Skill / Luck Worksheet.

Uninstalling SDR

Section last updated on May 15 2021 14:13.

So either SDR just wasn't working out for you or you were instructed to completely uninstall a prior version before upgrading to a new one. Either way, please follow these instructions. SDR is a complex mod, and you could have some "leave behinds" if you skip any of the steps.

SDR should be uninstalled in two stages. First follow the pre-removal instructions, then follow the uninstall instructions.

Pre-removal instructions

There are two different sets of pre-removal instructions, one for if you are uninstalling a pre series 6 version of SDR, and another if you are uninstalling from a series 6 or later version.

Instructions for series 6 and later

  1. In the game, find a spot where your character is safe with no one else around. A player home or empty room in a house is best.
  2. Make sure you are not sneaking, moving, and that none of the following magic effects are active on the player: Invisibility, Chameleon, Night-Eye, Detect LifeBlind, Deafness, and Muffle.
  3. Open the console (typically with the ` character)
  4. Type the following: startquest sdrQUninstall (it may also be sdrUninstall or sdrUninstallQ, depending on which version you are running.
  5. Hit enter, then exit the console
  6. A pop up message box will ask if you want to uninstall SDR. Click on the "Uninstall" option.
  7. SDR will revert all changes to Chameleon refraction, alpha value transparency and auto-nighteye features, as well as disable and restore any relevant settings that SDR may have changed.
  8. After it finishes reverting everything, SDR will automatically create a save game.
  9. Exit the game.
  10. Deactivate and uninstall the mod (see below)

Pre-series 6 instructions

  1. In the game, find a spot where your character is safe with no one else around. A player home or empty room in a house is best.
  2. Make sure you are not sneaking, moving, and that none of the following magic effects are active on the player: Invisibility, Chameleon, Night-Eye, and Detect Life.
  3. Save the game
  4. Exit the game
  5. Deactivate and uninstall the mod (see below)

Uninstalling Instructions

Depending on what version you have and how you installed it, please follow the appropriate uninstalling instructions below:

Wrye Bash uninstall

  1. Back up any SDR related .ini files in case you are updating to a new version.
  2. Run Wrye Bash
  3. Go to the installer tab
  4. Select the SDR package
  5. Right click, and select "uninstall"
  6. (optional) Right click, and select "delete" to permanently remove the file from the BASH installers folder.
  7. Unless you are planning on installing a newer version of SDR or any other mods, you should rebuild the bashed patch at this time, if you have one.

The Elder Scrolls Mod Manager (TESMM) uninstall

  1. Back up any SDR related .ini files in case you are updating to a new version.
  2. Launch TESMM
  3. Select the SDR package on the right and click on the "Deactivate" button
  4. (optional) Delete the SDR omod file from the OBMM\mods directory.
    1. Right click the SDR package on the right and select "Delete"
    2. Comfirm to permanently delete

For Wrye Bash and TESMM...

Manually VERIFY the following OBSE plug-ins and .ini files were deleted:

Data\OBSE\Plugins\SDR_obse.dll
Data\OBSE\Plugins\sdr.dll
Data\OBSE\Plugins\sdr.ini
Data\OBSE\Plugins\sdr_default.ini
Data\OBSE\Plugins\SwitchNightEye.dll * If not being used by another mod
Data\OBSE\Plugins\SoundCommands.dll * If not being used by another mod
Data\ini\SDR (entire folder)

Manual uninstall

Delete any and all of the following files from your Data directory while the game is not running:

For series 9 files

You should be using Wrye Bash or TES Mod Manager to do this. See above.

For series 8 files

  • SDR.esm
  • SDR_Nehrim.esp
  • SDR_Oblivion.esp
  • the "docs\Sneaking Detection Recalibrated" folder (it may also be "docs\SDR")
  • the "ini\SDR" folder
  • OBSE\Plugins\sdr.dll
  • the "Textures\SDR" folder
  • the "Textures\menus\Icons\SDR" folder
  • Shaders\hdr.nighteye\sdr_*.pso
  • Shaders\nighteye\sdr_*.pso
    * note: delete all the .pso files with the "sdr_" prefix
  • RenGuardOverhaul_PatchForSDR.esp (if installed)

For series 6-7 files

  • SDR.esm
  • SDR_Perks And Patches [Nehrim].esp
  • SDR_Perks And Patches [Oblivion].esp
  • SDR_Detect Life Shader Patch [Nehrim].esp
  • SDR_Detect Life Shader Patch [Oblivion].esp
  • the "docs\Sneaking Detection Recalibrated" folder
  • the "ini\SDR" folder
  • OBSE\Plugins\SDR_obse.dll
  • the "Textures\SDR" folder
  • the "Textures\menus\Icons\SDR" folder
  • Shaders\hdr.nighteye\sdr_*.pso
  • Shaders\nighteye\sdr_*.pso
    * note: delete all the .pso files with the "sdr_" prefix
  • RenGuardOverhaul_PatchForSDR.esp (if installed)

For series 1-5 files

  • SDR_Core.esp
  • SDR_NPC Behavior.esp (for pre 4.5.0 versions)
  • SDR_Thieves Arsenal Patch.esp (for pre 5.0.0 versions)
  • SDR_Perks And Patches (Nehrim).esp
  • SDR_Perks And Patches (Oblivion).esp
  • the "docs\Sneaking Detection Recalibrated" folder
  • ini\SDR Core.ini
  • ini\SDR NPC Behavior.ini (for pre 4.5.0 versions)
  • ini\SDR Perks And Patches - Nehrim.ini
  • ini\SDR Perks And Patches - Oblivion.ini
  • OBSE\Plugins\SDR_obse.dll
  • Shaders\hdr.nighteye\sdr_*.pso
  • Shaders\nighteye\sdr_*.pso
    * note: delete all the .pso files with the "sdr_" prefix

3rd Party Pre-requisites

If you installed any of the following mods as a pre-requisite for SDR, and know for sure that no other mods are using them, you may wish to uninstall them as well:

  • Menu Que (series 9 and later)
  • Oblivion Reloaded (series 9 and later)
  • Enhanced Music and Control 2 (series 8 and later)
  • OBME Additions for SDR (series 7 and later)
  • Custom Spell Icons (series 6 and later)
  • Add Actor Values (series 7 and earlier)
Modder's Guide

Section last updated on May 15 2021 14:13.

This guide reveals the inner workings of SDR for modder's who wish to utilize SDR's features for their own mods.

Disclaimer

SDR is EXTREMELY complicated. Mess with SDR at your own risk! Although I am fairly confident everything will work as intended, I will not take responsibility for someone else altering any of the functions, settings, or features outside their intended use.

Certain parts of this mod you shouldn't touch. Others you must take great caution with. I will point out both. If you do not heed this, it could jack up SDR. The last thing I need is people complaining to me that SDR doesn't work when it turns out that your mod broke it. So if you use SDR as a resource for your mod, I would appreciate you letting me know. My time is valuable, and I don't want to be tracking down reported problems only to find they were caused by a third party mod I was unaware of.

Other than that, I hope you find this guide useful. I am open to ideas, suggestions, corrections, critiques, etc. Although I can't guarantee that I will make any changes. If you do decide to use SDR as a resource, I am more than happy to help if I have the time. Thanks and good luck!

Topics covered

The Modder's Guide section covers the following topics:

  • Internal game settings
  • External game settings
  • Extended functionality
  • The Custom Actor Values System (CAVs)
  • SDR's CAVs
  • New magic effects
  • New content
  • Tutorials on how to tweak the Blind and Night-Eye shaders

Additional modder resources

In addition to this guide, there are additional resources for you to work with:

SDR's dll OBSE source code

The SDR OBSE Plug-in source files have all the code that I used to create the sdr.dll. So feel free to pop open the hood and look around. (Also if you have any suggestions, questions, or notice anything weird, let me know)

Will be made available at a later date.

SDR's esp/esm scripts

This package includes text files of all the scripts used by the various SDR files included in the Nexus downloaded package.

They have .es4 extensions, which lets you read them in the CSE scripting syntax highlighting by downloading Notepad ++ and importing the OblivionScript.xml as a language file.

Will be made available at a later date.

Internal Game Settings

Section last updated on May 15 2021 14:13.

SDR introduces many of its own custom game settings. The vast majority of them are exposed and made available to the player to modify using the instructions in the Tweaking Settings section. However, there are some hidden game settings that you may want to know about if you are creating a mod that will interact with SDR.

The purpose of these settings is to track the status of various features and functions so that scripts can call upon them. They are dynamically determined during live play, and (except where noted) should not be modified under any circumstances. Let the SDR.esm and SDR.esp handle setting their values, otherwise you could cause significant problems.

However, it may be useful to get their values if your mod depends on these features. You can do so with the GetGameSetting function. For example:

Let iSomeVariable := GetGameSetting iSDRsSettingName

SDR ESM game Settings

The following settings are used for tracking session, initialization, and CAVs processes in the SDR.esm file.

iSDRsVersionOBSE

This game setting is used to store the current version of OBSE installed. The SDR.esm main quest script performs the check, determines the version, and then stores it in the game setting. The value will be 0 until after the SDR.esm session start script populates it with the active OBSE version number. While it is at 0, or if the OBSE version is less than 214 (21.4), the iCAVsEnabled and iSDRsEnabled game settings will never be set to 1, thus preventing all other scripts in SDR.esm and SDR.esp from running. This is a fail-safe to make sure there are no errors or crashes in case a user has an earlier version of OBSE installed. Users will be warned with a pop up message if they have a missing or incorrect version of OBSE installed.

iSDRsESMSessionStarted

This game setting flaggs when the SDR.esm file has finished its game session startup sequence. It makes sure that the SDR.esp session startup sequence does noot happen until the SDR.esm sequence is complete.

iCAVsMasterMapID

This holds the ID for the master map that contains all CAVs stored by all mods. This setting has to be populated first before any CAV functions can work. Changing this value will mess everything up.

iCAVsModGroupArrayID

This holds the ID for the reference array that stores all Mod|Group combinations and assigns them Group IDs. This setting has to be populated first before any CAV functions can work. Changing this value will mess everything up.

iCAVsEnabled

This setting flags that the CAV system is available for use. By default it is reset to 0 every time a saved game is loaded or a new game is started. It is then flagged with a "1" once the SDR.esm initialization is completed. This setting has to be populated first before any CAV functions can work. Changing this value will mess everything up.

iCAVsDebugCleaningArrays

By setting this to 1, you will get debug information printed to the console when CAV data of inactive mods and deleted/invalid refs get cleaned. It's best to set this setting in the SDR Game Setting Tweaks.ini file.

SetNumericGameSetting iCAVsDebugCleaningArrays 1; {0}, 1 enables

Version, reboot, validation, and initialization game settings

The following settings are used for tracking session, initialization, reboot, version information, and validation processes in the SDR.esp file.

iSDRsEnabled

Whenever a saved game is loaded or a new game is started, this setting is set to 0 to prevent all SDR related scripts from running until SDR is completely initialized. Once the initialization is completed, the setting is set to 1, and the scripts will function normally. During the initialization period, the detection formula will use Oblivion's default formula, since using SDR's will not work properly until after initialization is complete.

iSDRsRebootNumber

The reboot quest wipes out and replaces all SDR assigned CAVs. It should only be done if there are any significant game setting changes or changes in the mod load order and there are no new versions of SDR.

The Reboot ID Number is used to track the current reboot iteration. It is pulled from the sdr.ini file and populated into the iSDRsRebootNumber game setting variable for the duration of the session.

Whenever the user runs the "startquest sdrQReboot" command from the console, it gets incremented by 1 in the setting and the .ini file. This makes sure that the reboot process will also kick in for any save games made prior to the reboot.

iSDRsRebootReassign

This value is pulled from the sdr.ini file and populated into this game setting variable for the duration of the session.

This is the flag that determines whether or not actors will keep their current spell assignments or have them replaced when their CAVs are rebooted after a "sdrQReboot" quest is launched.

iSDRsVersion

SDR uses the following system for tracking each release: Series / Iteration / Revision / Build. To the player, this displays as S.IRB in the console when initializing, for example: 9.206. Internally, these numbers are concatenated into a single integer: SIRB or 9206.

The current version of SDR is hardcoded into the sdrSessionStart script in the SDR.esp file. When a new game session is started, the version is stored in the iSDRsVersion game setting. This game setting serves several purposes:

  1. When Oblivion is first launched for a new game session, this game setting defaults to 0 until the session start script finishes initializing.
  2. You can use GetGameSetting iSDRsVersion to verify a required SDR version for your mod, in case there is a specific feature in your mod that is only available in conjunction with a specific version of SDR.
  3. When a saved game is loaded or new game is started, the iSDRsVersion is validated against a stored version quest variable. If the stored version is different than the game setting version, then actor CAVS and default traits are recalculated automatically without the user having to use the reboot quest. The new version is then passed to the quest variable to be saved.

Note: if SDR.esp is not enabled, GetGameSetting iSDRsVersion will always return 0.

Ideas for use:

  1. Check to see if the current version meets a minimum requirement.
  2. Check to see if the current version meets a maximum requirement.

So something like this could work:

Let sdrInstalledVersion := GetGS iSDRsVersion
If sdrInstalledVersion < 9000
; Do stuff
MessageBox "SDR WARNING!  The version of SDR installed is a pre-series 9 release version.  Etc. Etc."
; Do more stuff.
Endif

Detection related game settings

The following game settings are used for tracking detection related features and functions.

fSDRsDetectionRangeCurrent

This game setting holds the current detection range. With default settings this will be 1500 in interior cells and 3000 in exterior cells. It is stored here so that the sdr.dll detection formula can easily access the current maximum detection range for its calculations.

iSDRsDruidModPatchApplied

This game setting flags whether or not the Druid Mod is installed and should patch the character's alpha state when "transformed" into another creature.

iSDRsLowFPS

This game setting flags whether or not the user is in Low FPS mode, as determined by the iSDRsDetectMinFPS game settings and the current FPS. If it is flagged on, then SDR's detection formula is bypassed, and Oblivion's formula kicks in.

iSDRsPlayerCurrentAutoMovePenalty

This game setting tracks the current movement penalty of the player if they are in auto-move mode. This will have a negative adjustment on the player's effective sneak skill when trying to avoid detection.

iSDRsRealityModPatchApplied

This game setting flags which reality mod, if any, is installed and being incorporated into SDR's formulas for calculating effective Sneak skill for the player.

0 = none
1 = Bare Necessities
2 = Basic Primary Needs
3 = Real Sleep Extended

fSDRsRealityModPlayerSkillAdj

This game setting holds the current adjustment to the player's effective sneak skill as determined by whichever reality mod is active.

Dynamic Detect Life System (DDLS)

iSDRsDDLSEnabled

This game setting flags whether or not the Dynamic Detect Life Shader system is enabled. SDR.esp's session start script checks to see if the iSDRsDDLSActivate game setting is set to 1 and whether or not the supporting DDLS textures have been installed. If so, it flags iSDRsDDLSEnabled to 1. If not, it sets it to 0.

Dynamic Night-Eye Shaders (DNES)

iSDRsDynamicNightEyeEnabled

This game setting flags whether or not the Dynamic Night-Eye Shaders (DNES) are enabled. SDR.esp's session start script checks to see if the iSDRsDynamicNightEyeActivate game setting is set to 1 or 2, whether or not the necessary plugin is installed (Switch Night-Eye Shader or Oblivion Reloaded), and whether or not the supporting shader files are installed. If the requirements are met, it flags iSDRsDynamicNightEyeEnabled to be 1 or 2 depending on which plugin is being used. If not, it sets it to 0.

iSDRsDNESActiveShader

This game setting only comes into play when using scanti's Switch Night-Eye Shaders variant. It holds the id number of which Night-Eye shader is currently active. This is important for making sure only one Night-Eye shader is active at any given time. It's all handled by the sdrFXScantiUpdateNightEye script in the SDR.esp.

Blind magic effects

iSDRsBlindnessEnabled

This game setting flags whether or not SDR's Blindness Magic Effects are enabled; allowing the player to cast blinding spells and be blinded in return. SDR.esp's session start script checks to see if the following requirements are true:

  • iSDRsBlindnessActivate game setting is set to 1 or 2, depending on which plugin is installed (Switch Night-Eye Shader or Oblivion Reloaded)
  • MenuQue OBSE plugin installed
  • SDR's "30 Blindness HUD Textures" sub-package is installed
  • Either the "31 Blindness for Oblivion Reloaded" sub-package or the "31 Blindness for Shader Switcher" sub-package is installed.
    • If the Oblivion Reloaded option is chosen, then it needs to be downloaded and installed separately. In addition, the Data\OBSE\Plugins\OblivionReloaded.ini file needs to have the [Main]:CustomEffects setting set to = 1
    • If the Shader Switcher option is chosen, then the "40 Shader Switcher Plugin" sub-package also needs to be installed.

If the requirements are met, it flags iSDRsBlindnessEnabled to be 1 or 2 depending on which plugin is being used. If not, it sets it to 0.

iSDRsBlindnessActiveShader

This game setting only comes into play when using scanti's Switch Night-Eye Shaders variant. It holds the id number of which Blind shader is currently active. This is important for making sure only one Blind shader is active at any given time. It's all handled by the sdrFXScantiUpdateBlindness script in the SDR.esp.

Additional Blind effect HUD game settings

When the blindness effect kicks in, Oblivion gets redirected to replacement files provided by the "30 Blindness HUD Textures" sub-package. These files combined with other scripting trickery makes it impossible for the HUD to give away any information about the player's location or what is in front of them when hit by a Blind effect.

When the blindness effect ends, SDR looks to these game settings to redirect Oblivion back to the original files and other menu and Oblivion.ini settings to restore the HUD:

sSDRsCompassFile0
sSDRsCompassFile1
sSDRsCompassFile2
sSDRsCompassFile3
sSDRsCompassFile4
sSDRsEnemyHealthMesh
sSDRsSneakEye
fSDRsHUDMapWidth
fSDRsHUDMapHeight
fSDRsHUDInfoNameX
fSDRsHUDInfoDestX
iSDRsHUDDisableDynamicCrosshair
iSDRsHUDCrosshair
fSDRsHUDHealthBarHeight
fSDRsHUDHelathBarWidth

Deafness magic effects

iSDRsDeafnessEnabled

This game setting flags whether or not the new Deafness Magic Effects are enabled; allowing the player to cast deafening spells and be deafened in return. Enabling them requires the following:

  • iSDRsDeafnessActivate game setting set to 1 or 2, depending on which plugin is installed (either the Sound Commands plugin or the Enhanced Music and Control 2 plugin (EMC2))
  • If Sound Commands is chosen, then the "41 Sound Commands Plugin" sub-package needs to be installed.
  • If EMC2 is chosen, it must be downloaded and installed separately

If the requirements are met, it flags iSDRsDeafnessEnabled to be 1 or 2 depending on which plugin is being used. If not, it sets it to 0.

EMC2 has a better design, so if both Sound Commands and EMC2 are installed and detected, SDR will always use the EMC2 command set.

Additional Deafness effect HUD game settings

In order to mute and restore volume levels or hide and restore subtitles for the Deafness effect, the following game settings are also used:

fSDRsMaxVolumeMusic
fSDRsMaxVolumeMaster
fSDRsMaxVolumeVoice
fSDRsMaxVolumeEffects
fSDRsMaxVolumeFoot
iSDRsGeneralSubtitles
iSDRsDialogueSubtitles

Muffle magic effects

iSDRsMuffleEnabled

This game setting flags whether or not the new Muffle Magic Effects are enabled; thus allowing the player to cast muffle spells. Enabling them requires the following:

  • iSDRsMuffleActivate game setting set to 1 (default)

No other additional plugins or files are required.

fSDRsMuffleMaxFootVolume

SDR uses this game setting to store and restore the fPlayerFootVolume Oblivion.ini game setting. For the duration of the effect, SDR modifies the fPlayerFootVolume setting in proportion to the magnitude of the muffle effect. When the effect ends, SDR restores the Oblivion.ini setting.

Following guards

iSDRsFollowingGuardsEnabled

This game setting flags whether or not a guard can follow the player around. If RGO is installed, this setting will always be 0, allowing RGO to determine what guards do. This flag is set to 1 under the following conditions:

  • There are currently no other guards following the player
  • The player is sneaking, or the player has a weapon drawn

If these conditions are met, then every 4 seconds (default) a check is made to see if a guard within detection range can detect the player, and if so, they will follow the player until the player either stops sneaking or sheathes their weapon.

Debugging

fSDRsErrorResult

This game setting is set to -99999.0. It is used as an error code to determine if a function has failed or is out of range.

sSDRsDebugRefObserver

This game setting tracks whichever ref was selected in console mode as the debug Observer using detection debugging method B. It allows sdr.dll to retrieve the ref to filter what debugging detection data should be sent to the console.

sSDRsDebugRefTarget

This game setting tracks whichever ref was selected in console mode as the debug Target using detection debugging method B. It allows sdr.dll to retrieve the ref to filter what debugging detection data should be sent to the console.

iSDRsTestMode

This game setting adds or removes test spells and potions to the player so that all of the new magic features can be tested. Setting this value to 0 (default) does nothing. Setting it to 1 adds the potions and spells if missing. Setting this value to 2 removes the test spells and potions if they exist.

External Game Settings

Section last updated on May 15 2021 14:13.

Series 9 adds a new sdr.ini file and a new sdr_default.ini file to the Data\OBSE\Plugins directory.

The two files are structured the same with all the ini settings being grouped together by section, followed by a list of setting keys and their values.

The sdr.ini file serves two purposes. First, it sets the default values of all the matching internal global game settings created by the sdr.dll. Second, it tracks the status of a number of features and the game session.

The sdr_default.ini file is the "last resort" and holds the default settings for SDR as well as the default Oblivion.ini settings that SDR modifies, in case everything else goes completely wrong somehow and you need to restore them to the sdr.ini.

If you have intentionally modified the Oblivion.ini file settings, you may want to crack open the sdr_default.ini and see if any of the settings you changed in the Oblivion.ini are in the sdr_default.ini too. If so, I would update them to match. But do so at your own risk!

The vast majority of the .ini settings are the default values of what gets loaded into the internal global variables. Although these settings can be altered here, it is recommended that players use the SDR Game Settings Tweaks.ini file system instead, as those are session based, and not permanent.

Below the full set of default game settings are two sets of settings which users should not modify. They are used by SDR during the game session to track various things. Those settings are as follows:

[Tracking] settings

These settings track the state of the game and the active state of Blind, Deafen, and Muffle magic effects.

sWorldspace=0

When a game session is launched, SDR will determine if the game is Oblivion or Nehrim and set this value accordingly.

bNoCrash=1

This setting is used to detect whether or not there was a CTD (Crash to Desktop) in the middle of gameplay.

When a new game is started, or a saved game is loaded, this setting is flipped to 0. When exiting the game through one of the various menu options, it is flipped back to 1. So, if there is a CTD, it never gets flipped back to 1. Each time a game session is launched, SDR looks at that value. If it is still a 0, that indicates there was a CTD. At which point, SDR will check to see if any of the new blindness/deafness/muffle effects were active at the time of the crash, and if so, restore any Oblivion.ini settings that may have been altered before clearing the flag.

iRebootNumber=0

This is used to track which "reboot" iteration you are on. Actors that do not have the current reboot number stored with their profile will be reinitialized with default traits. This allows a reboot to work across multiple saves.

bRebootReassignSpells=0

This setting flags whether or not to reassign spells to actors/merchants when an actor's defaults are rebooted.

bHUDElementsHidden=0

This flags whether or not various HUD elements are currently hidden due to the effects of a blind spell cast on the player's character. This value is compared to the player's current blindness state, and if there is a mismatch, SDR will either hide or show the HUD elements accordingly.

bDeafnessActive=0

This flags whether or not the deafness effect is currently active. It is accessed and compared to the player's current deafness value to determine whether or not to change volume settings or backup/restore Oblivion.ini settings.

bMuffleActive=0

This flags whether or not the muffle effect is currently active. It is accessed and compared to the player's current muffle value to determine whether or not to change volume settings or backup/restore Oblivion.ini settings.

[OblivionIni] settings

These settings restore HUD features hidden during a Blind effect on the player.

bDisableDynamicCrosshair=0
bCrossHair=1
fHealthBarHeight=4.0000
fHealthBarWidth=40.0000

These settings restore dialogue subtitles that are disabled during a Deafen effect on the player.

bGeneralSubtitles=0
bDialogueSubtitles=1

This setting restores the player's foot volume after the Muffle effect ends.

fPlayerFootVolume=0.9000

Extended Functionality

Section last updated on May 15 2021 14:13.

Following are the new functions that are officially available for modders to use. There are others, but they should only be used by SDR, so they are not listed.

Scripted Custom Functions - SDR.esm

There are a number of script based custom functions that are located in the SDR.esm file. If you wish to use them for your mod, you will need to use SDR.esm as a master.

sdrCAVsAssignDataSetOfCAVs

This scripted function assigns a set of default custom actor values to the calling reference.

ref.Call sdrCAVsAssignDataSetOfCAVs iGroupID aNewCAVs iDebug

It makes a copy of the default CAVs array that was passed, and stores it in the parent mod->ref ID->group ID array. If there was any data stored there previously, it will be overwritten. This function should only be called when first initializing an entire set of data for a reference or if the data needs to be reset to the defaults. If the iDebug option is set to 1, it will print out confirmation. Please make sure to only use this feature for CAVs data groups you create for your own mod.

sdrCAVsRemoveRefGroupData

This scripted function clears the CAVs array of a specific group ID for the calling reference.

ref.Call sdrCAVsRemoveRefGroupData iGroupID

It uses the reference to find the parent mod name string key and core ref ID map key to find and delete the data stored for the specific data Group. Please make sure to only use this feature for CAVs data groups you create for your own mod.

sdrGetArrayID

This scripted function will return the Array ID # of the passed array.

array_var aMyArray
short iMyArrayID
Let iMyArrayID := sdrGetArrayID aMyArray

sdrGetCellActors

This scripted function returns an array of actor references that meet the filtering criteria passed by the parameters.

array_var aActorList
Let aActorList := sdrGetCellActors cellDepth processLevelFilter skipDead skipDisabled skipInCombat

There are five parameters that need to be passed. All are integers.

Cell Depth

This is how many cells deep to look in relation to the player. Each cell depth beyond 0 increases the surveyed area exponentially (0:1 cell, 1:9 cells, 2:25, 3:49, 4:81, etc.) which will significantly increase the number of references, especially in large, densely populated exterior spaces. So use cautious judgment with just how much needs to be processed and how often the process gets called. Use the scaled map below of the Imperial City Isle as a reference:

Process Level Filter

Per the Elder Scrolls Contruction Set Wiki and OBSE documentation, Process level determines how frequently the game updates an actor's AI. In general, the closer an actor is to the player, the more likely they are to be in high processing. The further away an actor is, the more likely they are to be in low processing.

- 1=no filter
0=high processing actors only
1=mid-high processing actors only
2=mid-low processing actors only
3=low processing actors only

According to the CS Wiki/OBSE Docs:

  • High processing actors are generally all the actors loaded in an interior cell, or for an exterior location, the set of cells adjacent to and including the player's current cell.
  • Middle-high actors generally include those in cells that are not currently loaded but which have recently been visited by the player.
  • There is no informaiton about what cause an actor to be in a "Middle-low" state.
  • Low actors are generally those in unloaded cells.
  • Skip Dead Actors

    Just because an actor is dead, does not mean it is no longer being processed by the Oblivion AI. Use this parameter to skip dead actors.

    0 = Do not skip, 1 = skip dead actors

    Skip Disabled Actors

    A disabled actor is prevented from being rendered and interacting with other objects and actors. It does not necessarily mean the actor is not being processed at some level. Use this option to skip disabled actors.

    0 = Do not skip, 1 = skip disabled actors

    Skip Actors in Combat

    Actors in Combat are always in high-processing. But if you have some reason to skip Actors in Combat, select this option.

    0 = Do not skip, 1 = skip actors in combat

    OBSE Functions - Custom Actor Values system (CAVs)

    The following functions are used as part of SDR's Custom Actor Value System (CAVs). Please read up on that system before you use these functions in your mod.

    sdrGetCAVsGroupID

    (int) ref.sdrGetCAVsGroupID string:GroupName int:CreateIfMissing string:ModName int:CheckIfLoaded

    Function retrieves the group ID for a specific mod/group combination, with the option to create if missing and check if the mod is active. The group ID is necessary for all other CAVs related functions. It is recommended that this function be called once at the begining of an initialization script and the result stored in a quest variable for future use. Variables are as follows:

    • Group name: required. Ideally should not conflict with existing group names if you are creating your own. For example, don't use "SDR" as your group name, it is reserved.
    • Create if missing: optional, default is 0. Set to 1 if you want to create the group if it doesn't exist. Only select this option if your mod needs to create the group ID.
    • Mod name: optional, default is mod name of calling script. Specify this value if you are looking up the group ID created by a mod other than the one calling this function.
    • Check if loaded: optional, default is 1. This will make sure the parent mod of the group is loaded before proceeding.

    If there are any errors, such as the group ID not existing or the parent mod not being loaded, the result will return "-1". In the below example, if "MyMod.esp" was to call the following function...

    Let iGroupID := sdrGetCAVsGroupID "MyGroupName" 1

    ... the result would be that "MyMod.esp|MyGroupName" would be added to the master group list and return the index value as the group ID to be stored in the iGroupID variable.

    Note that group ID "0" is reserved for SDR's CAVs. So there is no need to call sdrGetCAVsGroupID "SDR" 0 "SDR.esm".

    Do not create group IDs for mods that are not your own! This is a bad thing.

    sdrGetCAVsData

    (array) ref.sdrGetCAVsData int:GroupID

    Returns an array of the entire set of a data for a group ID for the calling reference. The below example would return all the CAVs SDR has stored for the player.

    Let aDataArray := PlayerRef.sdrGetCAVsData 0

    sdrGetCAVsNum

    (float) ref.sdrGetCAVsNum int:GroupID string:DataType

    Function retrieves a number from a calling reference's CAV data group array type or -99999.0 if there an error.

    Let iCurrentStrength := rActor.sdrGetCAVsNum iGroupID "iStrengthCurrent"

    sdrGetCAVsRef

    (ref) ref.sdrGetCAVsRef int:GroupID string:DataType

    Function retrieves a reference from a calling reference's CAV data array type. If there is no reference stored, returns 0/null.

    Let rReference := rActor.sdrGetCAVsRef iGroupID "rStoredReference"

    sdrGetCAVsStr

    (string) ref.sdrGetCAVsStr int:GroupID string:DataType

    Function retrieves a string from a calling reference's CAV data array type or returns an empty string if missing.

    Let sString := rActor.sdrGetCAVsStr iGroupID "sStoredString"

    sdrModCAVsNum

    (float) ref.sdrModCAVsNum int:GroupID string:DataType num:ModAmount

    Function modifies the current value of a calling reference's CAV data array type by the passed amount. Result is the modified number if successful or -99999.0 if there is an error. This is the recommended method for modifying CAV values.

    Let iBump := 12
    rActor.sdrModCAVsNum iGroupID "iStrengthCurrent" iBump
    

    sdrSetCAVsNum

    (bool) ref.sdrSetCAVsNum int:GroupID string:DataType num:Value

    Function sets the value of a calling reference's CAV data array type. It can be a float or an integer. Result is 1 if successful, 0 if it fails. It can be called on any reference to store data linked to that reference. For example:

    Let iTemp := rActor.GetAV strength
    rActor.sdrSetCAVsNum iGroupID "iStrengthCurrent" iTemp
    

    Unless you have a good reason for it, such as setting the initial value for a variable or you know for sure the value should be overwritten, use sdrCAVNumMod instead.

    sdrSetCAVsRef

    (bool) ref.sdrSetCAVsRef int:GroupID string:DataType ref:Reference

    Stores a reference in a calling reference's CAV data array type. Result is 1 if successful, 0 if it fails.

    rActor.sdrSetCAVsRef iGroupID "rStoredReference" rReference

    sdrSetCAVsStr

    (bool) ref.sdrSetCAVsStr int:GroupID string:DataType string:String

    Stores a string in a calling reference's CAV data array type. Result is 1 if successful, 0 if it fails.

    rActor.sdrSetCAVsStr iGroupID "sStoredString" "MyString"
    ; or
    rActor.sdrSetCAVsStr iGroupID "sStoredString" $SomeVariable
    

    OBSE Functions - Get/Set Ini Values

    These functions allow you to modify an .ini file that uses "[section] key=" format. Although an ini file variable could be called anything, SDR looks for specific indicators, which makes it easier for it to process the type based on the setting's first letter:

    b = a Boolean (1 or 0)
    f = a float/decimal value, can be positive or negative
    i = an integer, can be positive or negative
    s = a string

    If you are modifying someone else's .ini file, you are stuck with their naming conventions. If you are creating your own, I would recommend using the prefix standards.

    For example a file located at "Data\Ini\MyMod.ini" might be structured something like this:

    [SectionName]
    bBooleanVar=1
    fFloatVar=3.145
    iIntegerVar=12
    sStringVar=Imperial
    

    sdrIniNumGet

    (float) sdrIniNumGet string:filepath string:section string:key

    Function retrieves a numeric value from a section/key pair in an .ini file. It works with integers (i), floats (f), and Booleans (b). Result is a float or 0 if it fails to find a value.

    Let iValue = sdrIniNumGet "Data\Ini\MyMod.ini" "Section" "iKey"

    sdrIniNumSet

    (bool) sdrIniNumSet string:filepath string:section string:key float:value

    Function sets a numeric value (integer, float, or Boolean) for a section/key pair in an .ini file. Result is 1 if successful. If there is no "i", "f", or "b" pre-fix, it will be treated as a float. Example:

    sdrIniNumSet "Data\Ini\MyMod.ini" "Section" "fKey" fValue

    You can also just state the number directly…

    sdrIniNumSet "Data\Ini\MyMod.ini" "Section" "fKey" 3.14

    sdrIniStrGet

    (string) sdrIniStrGet string:filepath string:section string:key

    Function retrieves a string value from a section/key pair in an .ini file or null if it fails.

    Let sValue := sdrIniStrGet "Data\Ini\MyMod.ini" "Section" "sKey"

    sdrIniStrSet

    (bool) sdrIniStrSet string:filepath string:section string:key string:value

    Function sets a string value for a section/key pair in an .ini file. Result is 1 if successful. Example:

    sdrIniStrSet "Data\Ini\MyMod.ini" "Section" "sKey" $sValue

    You could also just set the string directly…

    sdrIniStrSet "Data\Ini\MyMod.ini" "Section" "sKey" "StringValue"

    OBSE Functions - Mastery Levels

    Mastery levels are determined by the base, unmodified AV level of a skill.

    Base AV Skill RangeMastery Level #Description
    0 to 240Novice
    25 to 491Apprentice
    50 to 742Journeyman
    75 to 993Expert
    100 +4Master

    SDR needs to determine mastery levels for some of its internal calculations. Creatures don't have Skill Mastery Levels in the game, but SDR needs the equivalent, and therefore has functions for determining them. You might decide to use this too for some reason. OBSE v21 has a function for calculating an NPC's Skill Mastery Level, but it can be inaccurate because it uses the current total AV, not the base unmodified AV, which is what SDR needs.

    sdrGetCreatureSkillMasteryLevel/sdrGetCSkML

    (int) refCreature.sdrGetCreatureSkillMasteryLevel combat
    (int) refCreature.sdrGetCSkML combat
    

    Returns the equivalent Creature Skill Mastery Level by type ("combat", "magic", "stealth").

    sdrGetCreatureSkillMasteryLevelC/sdrGetCSkMLC

    (int) refCreature.sdrGetCreatureSkillMasteryLevelC 0
    (int) refCreature.sdrGetCSkMLC 0
    

    Returns the equivalent Creature Skill Mastery Level by code (0 = combat, 1 = magic, 2 = stealth).

    sdrGetSkillMasteryLevel/sdrGetSkML

    (int) refNPC.sdrGetSkillMasteryLevel Sneak
    (int) refNPC.sdrGetSkML Sneak
    

    This function returns the NPC Skill Mastery Level by actor value (sneak, athletics, etc.).

    sdrGetSkillMasteryLevelC/sdrGetSkMLC

    (int) refNPC.sdrGetSkillMasteryLevelC 31
    (int) refNPC.sdrGetSkMLC 31
    

    This function returns the Skill Mastery Level by AV code (31, 13, etc.). A complete list can be found on the OBSE website's documentation page.

    Miscellaneous OBSE Functions

    The following functions provide new features that were not previously available in OBSE/Oblivion. Some of these functions are alternatives to previously existing ones. Others provide brand new functionality.

    sdrGetBaseRefID

    (int/long) ref.sdrGetBaseRefID

    Function returns an integer of a Ref Form ID's hexadecimal value stripped of the index. For example, if the form ID at runtime is 2301AF2B, it strips off the "23", leaving just the 01AF2B and converts that into an integer. SDR uses it as an array map key for the second tier of CAVS, but you might find it useful for your own purposes.

    Let iTemp := PlayerRef.sdrGetBaseRefID

    How Hexadecimals Work

    If you are unfamiliar with hexadecimals, the first digit represents a number from 0 to 15 using 0-9 and A-F, the next is in multiples of 16, and so on. 0x is the symbol for hexadecimal. So the PlayerRef (0x00000014) = (1x16) + (4) = 20. For more info, read the wiki article on hexadecimals.

    Form IDs, Hexadecimals, and the Maximum Mod Limit

    The use of the hexadecimal system for form IDs is one of the reasons there is a mod limit. The mod index of the first two digits can only go from 00 to FF, or 0 to 256. 00 is reserved for the game world (Oblivion.esm/Nehrim.esm). FF is reserved for dynamically created references. So that means you can have up to 254 additional .esm/.esp files loaded.

    sdrGetDistance2

    (float) sdrGetDistance2 float:x1 float:y1 float:z1 float:x2 float:y2 float:z2

    Calculates the distance between a pair of xyz coordinates within the same world-space. SDR uses it to calculate the velocity of an actor over a given distance within a time frame.

    sdrGetFollowers

    (array) ActorRef.sdrGetFollowers int:type

    Returns list of only summoned followers (type = 2), only normal followers (type = 1), or all followers (type = 0 or undeclared).

    sdrGetFootweight

    (float) ActorRef.sdrGetFootweight

    Function returns the foot-weight attribute of the calling actor.

    If a creature, it calculates the foot weight as follows:

    CreatureFootWeight = BaseFormFootWeight * CurrentScale / BaseFormScale

    If a race, it calculates the foot weight as follows:

    NPCFootWeight = fSDRsBaseNPCFootweightGameSetting * CurrentScale * RaceWeight

    sdrGetHeight

    (float) ActorRef.sdrGetHeight

    Returns approximate height of the actor in inches, using the bounding box, a ratio of 22 units / feet, and takes into account scaling. If there is an error, it will return a height of -1. This function is called and stored as CAV for SDR when an actor is initialized. So alternatively, you could just do:

    Let iHeight := ActorRef.sdrGetCAVsNum 0 "iCAVsActorHeight"

    sdrGetIsSummoned

    (bool) ActorRef.sdrGetIsSummoned

    Returns 1 if the actor was summoned by a summoning spell or magic effect. This function requires SDR.esp to be active and running, as SDR.esp tracks and tags all actively summoned creatures and who summoned them.

    sdrGetLOSExtended

    (int) ActorRef.sdrGetLOSExtended TargetActorReference

    This groundbreaking function expands on GetLOS and takes into account SDR's extended peripheral field of views, restrictions by headgear, Invisibility, Chameleon, and Detect Life.

    It returns 0 if no direct line of sight, 1 if in direct line of sight within 190 degrees field of view, and 2 if within indirect line of sight in the extended peripheral view beyond 190 degrees.

    In addition, if they are within field of view and within an active Detect Life range of the observer, 10 will be added to result. So a result of 0, 1, or 2 becomes 10, 11, or 12.

    If the target is Invisible or has 100+ Chameleon, it will be treated as no direct line of sight (which GetLOS does not do), but the target can still can be detected with Detect Life.

    sdrGetParentModName

    (string) ref.sdrGetParentModName

    Returns the parent mod name of the calling actor or object reference, for example…

    PlayerRef.sdrGetParentModName

    … would return "Oblivion.esm". Returns "Dynamic" if the calling reference was generated on the fly during the game session and is not linked to a specific mod.

    sdrGetRawDetectionLevel

    (int) actorRef.sdrGetRawDetectionLevel actorRef:target bool:forceupdate

    Function returns the current raw detection level between two actors. Result is an integer that ranges from -100 to 500+. Optional second parameter is Boolean and will force an update of the detection level to be used by the game. Calling reference cannot be the player.

    sdrGetRawDetectionLevelPlayer

    (int) sdrGetRawDetectionLevelPlayer actorRef:target

    Oblivion does not make detection calls from the player's perspective. This function calculates detection from the player's perspective, treating the player as though an NPC. No calling reference is needed. Only the detection target is required. Result is an integer that ranges from -100 to 500+. SDR uses this function for the NPCs Fade While Sneaking feature.

    sdrGetRelativeTimeStamp/sdrGRTS

    (float) sdrGetRelativeTimeStamp
    (float) sdrGRTS

    Creates a real-time timestamp in seconds (float) relative to how much time has passed in the game, adjusted to timescale..

    sdrGetSummoner

    (reference) ActorRef.sdrGetSummoner

    Returns whatever reference is stored as the target's summoner if the target is a summoned actor. Returns null if there is no summoner or the summoner could not be determined. This function requires SDR.esp to be active and running, as SDR.esp tracks and tags all actively summoned creatures and who summoned them.

    sdrMinMax

    (float) sdrMinMax float:value float:minimum_value float:maximum_value

    Makes sure a value falls within a given range. If the value is below the minimum, it returns the minimum. If the value is above the maximum, it returns the maximum.

    Let fEncumbrance := PlayerRef.GetAV encumbrance
    Let fEncumbranceAdj := sdrMinMax fEncumbrance 0 300
    

    OBSE Functions - Restricted

    These OBSE functions are limited in scope and are of no use to you as a modder. I am only listing them to be thorough.

    sdrCalcDetectLifeShaderNum

    This function calculates which Detect Life shader number to use for SDR's Dynamic Detect Life System (DDLS). This value is updated regularly and can be retrieved using:

    Let iTemp := actorRef.sdrCAVNumGet 0 "iCAVsDetectLifeEffectNum"

    sdrGetSprintFatigueBurn

    Calculates what the fatigue burn multiple is per second when sprinting based on athletics, encumbrance, and other factors.

    Added as of version 9.010

    sdrGetVolumeFactor

    Takes xyz values and returns a float. Used for calculating approximate mass of actor and how that impacts elements of SDR's detection formula.

    sdrUpdateStealthCAV

    This function updates SDR's own CAV "iCAVsEffectiveSneakSkill" version of the effective Stealth/Sneak skill of the calling reference. It is updated regularly. Do not use this function! If you want to get the current effective SDR sneak skill level, use the following instead:

    Let iTemp := actorRef.sdrCAVNumGet 0 "iCAVsEffectiveSneakSkill"

    OBSE Functions - Hooking the Detection Formula

    This section covers how to use SDR's OBSE plugin to hook the detection formula for your own purposes, overwriting SDR's formula.

    IMPORTANT! If you are doing this for a mod you are going to publicly release, you MUST disclose in a prominent and obvious way that your mod will replace SDR's detection systems. You must also tell me about this mod and where it can be downloaded so that I can list it under the mod compatibility conflicts section. I DO NOT want to have a bunch of people complaining that SDR doesn't work, only to find out that it's your mod causing the problems and I didn't know about it.

    sdrSetDetectionLevelHook

    Registers a function script as a callback for detection calculations. This is the key for how SDR replaces Oblivion's detection formula. If you want to use your own detection formula, you can either do so with SDR enabled or SDR disabled. Either of these techniques as described below have been tested and work.

    Option A: With SDR enabled

    This will allow you to use all of the other SDR features, but replace SDR's formula with your own.

    Step 1: Create an .esp

    Create an .esp file that uses SDR.esp as a master.

    Step 2: Overwrite the detection hook script

    Use the .esp to overwrite SDR's sdrEHDetectionCallHook script to be something like:

    scn sdrEHDetectionCallHook ; this is the script called by the sdr_obse.dll plugin.  Applies to all actors except the player.
    
    ; Pass-through Function Variables
    short iDetectorHasLOS            ; 1 if actor has line of sight to target, 0 otherwise
    float fDistanceToTarget            ; distance (in game units) from actor to target
    short iDetectorAttackedByTarget    ; 1 for a single call after target attacks actor, 0 otherwise
    long iDetectionLevel        ; detection level as calculated by vanilla formula
    
    ; Internal Variables
    ref rActorDetector            ; actor making the detection check
    ref rActorTarget            ; target of detection check
    long iDetectionLevelNew
    
    Begin function { iDetectorHasLOS, fDistanceToTarget, iDetectorAttackedByTarget, iDetectionLevel }
    
        Let rActorDetector := GetSelf
        Let rActorTarget := GetContainer
    
        ; Enter in your formula here.  Example below increase original detection level by 25.
        Let iDetectionLevelNew := iDetectionLevel + 25
    
        SetFunctionValue iDetectionLevelNew
    
    End
        
    Step 3: Tweak the .ini

    The last step is to add the following to your SDR Game Setting Tweaks.ini file:

    SetNumericGameSetting iSDRsDetectionSystem 2

    Option B: With SDR disabled

    In this case, if you are using Wrye Bash, you will want to only select the following packages during the installation process:

    00 Core
    10 SDR OBSE Plugin ini

    After you select them, deselect SDR.esm and SDR.esp. This will make sure you only install the sdr.dll and sdr.ini files. Then you will have to create your own .esp with one quest and the following four scripts: one quest, two event handler function scripts, and the detection hook function script.

    Following are the scripts I created for a simple "CustomScriptedDetectionFormula.esp". I created and saved them in the order listed below, and attached the quest script to a new quest, and made sure it was "Start Game Enabled". The scripts should look something like this:

    Detection Hook
    scn scriptDetectionCallHook ; this is the script called by the sdr_obse.dll plugin.  Applies to all actors except the player.
    
    ; Pass-through Function Variables
    short iDetectorHasLOS            ; 1 if actor has line of sight to target, 0 otherwise
    float fDistanceToTarget            ; distance (in game units) from actor to target
    short iDetectorAttackedByTarget    ; 1 for a single call after target attacks actor, 0 otherwise
    long iDetectionLevel        ; detection level as calculated by vanilla formula
    
    ; Internal Variables
    ref rActorDetector            ; actor making the detection check
    ref rActorTarget            ; target of detection check
    long iDetectionLevelNew
    
    Begin function { iDetectorHasLOS, fDistanceToTarget, iDetectorAttackedByTarget, iDetectionLevel }
    
        Let rActorDetector := GetSelf
        Let rActorTarget := GetContainer
    
        ; from this point forward, you do your calculations to come up with a new detection result.
        ; Example below increase original detection level by 25.
        Let iDetectionLevelNew := iDetectionLevel + 25
    
        ; INSERT YOUR CODE HERE
    
        ; Set your resulting detection level here
        SetFunctionValue iDetectionLevelNew
    
    End
    
    New Game Event Handler
    scn scriptNewGame
    
    ref rHookScript
    
    Begin Function{}
        Let rHookScript := scriptDetectionCallHook
        sdrSetDetectionLevelHook rHookScript
    End
    
    Load Game Event Handler
    scn scriptLoadGame
    
    short bOK
    ref rHookScript
    
    Begin Function{bOK}
        Let rHookScript := scriptDetectionCallHook
        sdrSetDetectionLevelHook rHookScript
    End
    
    Quest Script
    scn scriptQuest
    
    float fQuestDelayTime
    
    Begin MenuMode 1044
    
        if fQuestDelayTime != 1
            set fQuestDelayTime to 1
        endif
    
        if GetGameRestarted == 1
            ; Set up event handlers
            SetEventHandler "OnNewGame" scriptNewGame
            SetEventHandler "PostLoadGame" scriptLoadGame
            ; Make sure the system will use your custom scripted function
            SetNumericGameSetting iSDRsDetectionSystem 2
        endif
    End
    

    Custom Actor Value System (CAVs)

    Section last updated on May 15 2021 14:13.

    The Custom Actor Value System allows SDR and other mods to create, set, modify, and retrieve custom actor values, settings, status, character traits, and other information.

    Background

    Originally SDR used the Add Actor Values plug-in, which was great for the longest time. As awesome as it was, eventually SDR became too complex. In order to improve performance, I needed to move all the calculations into the sdr.dll OBSE plugin. But I couldn't figure out how to call AAV's functions from there, so I came up with an alternative method that was entirely within SDR.

    Fortunately, the Custom Reference Value System (CAVs) I came up with seems to be working, and doesn't appear to have much, if any, performance impact compared to AAV. Nor does there seem to be any measurable bloat or loss in performance compared to the pre-CAVs system.

    SDR.esm and CAVs

    The SDR.esm mod stores the master map that holds all the CAVs data in the aCAVsMasterMap quest variable. It also has quests and scripts that automatically clean up after mods that are no longer active and references that are either invalid or have been deleted. In order to use SDR's CAVs system for your mod, you don't have to have SDR.esm as a parent necessarily, but it will need to be active in the load order, so you might as well make it a parent. The SDR.esp is not required, however.

    WARNING! Other than dumping the array contents, do not call any functions on the aCAVsMasterMap directly. That could serious jack up the system. Use the CAVs custom functions described in the previous section instead.

    CAVs data structure

    CAVs uses a multi tiered array system for storing and retrieving data that looks something like this:

    Tier 1 (blue): Master string map of all mods that have references with CAV data stored.
    Tier 2 (red): Numeric map of all references with CAVs data belonging to the parent mod.
    Tier 3 (green): Numeric map of all data groups of CAVs data belonging to parent reference.
    Tier 4 (purple): String map of the data set belonging to the parent CAVs group.
    Tier 5 (orange): The string/value pair of CAVs data being stored. Holds integers, floats, reference pointers, or strings.

    Tier 1 – Active mod string map

    The top tier is the "Master" string map of all the active mods that have references with stored values. The mod name is used as a string key for each key:value pair, with the value being a map of all the references linked to that mod (Tier 2).

    For example, if I dump the aCAVsMasterMap array, it would look something like this:

    ** Dumping Array #19 **
    Refs: 1 Owner 08: SDR.esm
    [ DLCFrostcrag.esp ] : (Array ID #31)
    [ Dynamic ] : (Array ID #45)
    [ Oblivion.esm ] : (Array ID #24)
    

    Mods are not added to the master array until a reference from that mod is assigned CAVs data.

    The "Dynamic" entry is for references that are not hardcoded to a specific mod and are generated on the fly. Those reference form IDs have a "FF" prefix.

    Tier 2 – Active reference numeric map

    Thhis tier is a numeric map of all the active references associated with the parent mod.

    Tier 3 – CAVs data groups numeric map

    This tier lists any CAVs data group IDs that are assigned to the reference. Data groups are identified by an ID number, and are assigned using sdrGetCAVsGroupID function described previously. 0 is reserved for SDR.

    Tier 4 – CAVs Data String Map

    This tier is a string map array of all the CAVs data associated with the group ID for the calling reference of the parent mod. For example:

    [ avStealth ] : 48
    [ refTarget ] : (refpointer)
    [ sTargName ] : Shady Sam
    

    Tier 5 – CAVs Data

    At the bottom tier is where the actual CAVs data is stored. This is where the CAVs OBSE functions kick in:

    ref.sdrSetCAVsNum GroupID "avStealth" 45
    ref.sdrModCAVsNum GroupID "avStealth" -2
    ref.sdrGetCAVsNum GroupID "avStealth"
    ref.sdrSetCAVsRef GroupID "refTarget" refObject
    ref.sdrGetCAVsRef GroupID "refTarget"
    ref.sdrSetCAVsStr GroupID "sTargName" $refObject
    ref.sdrGetCAVsStr GroupID "sTargName"
    

    When an sdr/Get/Set/Mod/CAVs/Num/Ref/Str function is called on a reference, the process is as follows:

    • First it uses sdrGetParentModName to determine the name of the parent mod of the calling reference. Then it retrieves the tier 2 numeric map of references associated with that mod/key.
    • Second, it uses sdrGetBaseRefID to strip off the first two digits of the hexadecimal form ID of the reference, converts the remainder into an integer, and uses that as the numeric key to look up/generate the tier 3 numeric map of CAVs groups assigned to the reference. This allows you to change the load order of mods without losing any data or creating duplicate entries for the same reference.
    • Third, it uses the passed Group ID to find the CAVs group's tier 4 data set associated with that group ID for that reference.
    • Fourth, it uses the passed string "key" of the data type to find the tier 5 key/value pair of the CAV.
    • Fifth, it either set, modifies, or retrieves the stored value, depending on which function is being called.

    Creating your own CAVs data

    Although its main purpose was for storing actor related data for SDR, I've set it up so that the CAVs system can be used by any mod to store data for any reference with an eight digit hex Form ID: weapons, armor, spells, etc. The examples below assume that you are using SDR.esm as a parent mod so that you can utilize some of the extended script functions available in it.

    Managing CAVs data groups

    To store your own CAVs, you MUST create your own CAVs data group with the sdrGetCAVsGroupID function. Do NOT use SDR's data groups!

    The group should have a name that is unique to your mod. You can also create multiple groups for different purposes if you so desire. For instance, one data group could only be meant for creatures, another for weapons, another for NPCs, etc.

    Because you don't know what mods the user is going to install, or in what order, or have active at any given time, it is important that any group IDs are captured/generated at the start of a new game or a loaded save game. You should use sdrGetCAVsGroupID to retrieve the ID or generate it if missing, and then store the result in a quest variable that you can easily access. Make sure that no features that rely on the group ID kick in until the value is populated. I recommend incorporating it into the process to an initialization script that is tied to OBSE event handlers for OnNewGame and PostLoadGame. For example:

    scn GameLoadRoutine ; called by new game or post load game event handlers.
    
    Begin Function{}
        ; miscellaneous code here
        Let myQuest.iEnableScripts := 0 ; prevents scripts from activating until initialization is complete
    
        ; code for getting the group IDs
        Let myQuest.iMyGroupId := sdrGetCAVsGroupID "myGroupName" 1
        Let myQuest.iMyOtherGroupId := sdrGetCAVsGroupID "myOtherGroupName" 1
    
        ; other code
        Call BuildDefaultAVs
    End
    

    Creating a Default Data Set for Actors

    Although you could just add CAV data one piece at a time, if you have a default set of CAVs data that would regularly apply, it's more efficient to apply the entire set of default data all at once, and then tweak the individual pieces that need updating.

    In this example, there is already an "array_var aDefaults" in the "myQuest" quest script.

    scn BuildDefaultAVs
    
    Begin Function{}
        ; creates the string map
        Let myQuest.aDefaults := ar_Construct StringMap
    
        ; assigns the default values
        Let myQuest.aDefaults["avDataSetAssigned"] := 1 ; 1 = Data set has been assigned, 2 = updated, 0 = no data yet
        Let myQuest.aDefaults["avActorType"] := 0 ; 0/NPC, 1/Creature
        Let myQuest.aDefaults["avPerception"] := 50 ; Scale of 0 to 100
        Let myQuest.aDefaults["avCharisma"] := 50 ; Scale of 0 to 100.
    
        ; stores the array id for later use
        Let myQuest.iDefaultArrayID := sdrGetArrayID myQuest.aDefaults
    
    End
    

    Once you have your default set of data, you can use the sdrSetCAVsData function to set the data. The following script assumes you have already stored the group ID and array ID needed using the scripts above:

    scn AssignDefaultCAVs
    
    ref rActor
    
    Begin Function{rActor}
        rActor.sdrSetCAVsData myQuest.iMyGroupId myQuest.iDefaultArrayID
    End
    

    Leave No Trace

    One potentially major issue with CAVs is save-game bloat, which could hinder performance as the amount of CAVs data stored continues to increase over time. To keep things nice and tidy, the following features have been implemented in the SDR.esm:

    • Whenever a game is loaded, all CAVs entries for deleted refs, invalid refs, and refs from inactive mods are cleared out.
    • Whenever a game is saved, all CAVs entries for deleted or invalid refs are cleared out.

    And as of series 9, the SDR.esm handles the cleaning for *all* mods using the CAV's system. You're welcome.

    SDR's Custom Actor Values

    Section last updated on May 15 2021 14:13.

    This section covers all the new Actor Values that SDR uses. It is fine to retrieve/get the values stored in any of them using the sdrGetCAVsNum, sdrGetCAVsRef, and sdrGetCAVsStr functions. In the vast majority of cases, however, it is best that you do not modify the values without a very good reason. There are some exceptions that are tagged as "Modder Friendly" and will be covered in more detail after the list.

    When calling SDR's custom actor values, use 0 for the group ID.

    Overview of SDR's Actor Values

    Following is a list of all the SDR custom actor values sorted by category.

    CAV NameDefault Modder FriendlyDescription
    Actor Traits
    iCAVsActorType 0 0 = invalid, 1 = Player, 2 = Adult NPC, 3 = Child NPC, 4 = Creature
    iCAVsActorCategory 0 0 = NPC race, 1 = Creature, 2 = Undead, 3 = Daedra
    sCAVsRaceCreature "n/a" The name of the race or creature
    fCAVsAlphaBase 1 Alpha Value (transparency) 0 to 1, 1 equals solid
    iCAVsVisionType 2 0 = blind, 1 = poor, 2 = standard, 3 = night, 4 = divine
    iCAVsVisionPV 190 Peripheral field of view range
    iCAVsVisionBV 120 Binocular field of view range
    iCAVsAuricularMotion 2 How well the ears can move to determine directionality, 0 = swiveling, 1 = flexible, 2 = fixed, 3 = omnidirectional
    iCAVsHearingAcuity 2 How well the actor can hear. 0 = deaf, 1 = impaired, 2 = fair, 3 = acute, 4 = superior
    iCAVsHearingCurrent 2 The current hearing acuity of the actor. Usually this is the iCAVsHearingAcuity, but it may be modified by spell effects or other conditions/scenarios.
    fCAVsFootWeight 6.0 This is the "foot-weight" of the actor. Used for calculating "foot slot" gear penalties.
    iCAVsActorHeight 67 This is the height of the actor in inches.
    iCAVsActorWeight 160 This is the base weight of the actor, based on their race scale/weight and strength. Only applies to NPCs and the player to calculate mounted rider mass.
    fCAVsActorVolume 0 This is the volume factor calculated from the bounding box when the actor is standing upright, adjusted for scale.
    fCAVsActorVolumeMountRiderAdj 0 This is the adjustment to be applied to the fCAVsActorVolume. Calculated from mount and rider status.
    fCAVsSprintFactor 3.0 a.k.a. "SF". This is the multiplier used to calculate the bump in speed when sprinting.
    Actor Skills
    iCAVsEffectiveSneakSkill 0 SDR's Effective Sneak/Stealth/Perception AV. Uses either Sneak skill for races or Stealth attribute for Creatures, and then modifies it with SDR's own calculations.
    Magical Effects
    iCAVsChameleon 0 SDR's adjusted Chameleon value, modified by active light spells or holding torches.
    iCAVsChameleonLast 0 SDR's adjusted Chameleon value, modified by active light spells or holding torches.
    iCAVsDeafness 0 How deaf the actor is. On a scale of 0 to 100 where 100 is completely deaf. This is a "fixed" physical attribute that parallels Oblivion's Blind attribute.
    fCAVsDeafnessTemp 0 This is a scripted or magical "adjustment" that combines with iCAVsDeafness to determine total current deafness. Returns to 0 after effect ends.
    fCAVsBlindnessTemp 0 This is a scripted or magical "adjustment" that combines with the actor's Blindness attribute to determine total current blindness. Returns to 0 after effect ends.
    iCAVsMuffle 0 0 = no muffling, 100 = 100% muffled. Should be an integer value.
    rCAVsDetectionSpellPower 0 Stores the reference form ID for the detection spell/power that the actor can use.
    iCAVsDetectLifeEffectNum 0 The Detect Life Shader Number assigned to the actor. Determines which visual effect, if any, gets applied if actor is within player's Detect Life range.
    iCAVsCheckSummons 0 Flags that the actor should do a sweep for all summoned followers.
    iCAVsIsSummoned 0 Flags that the actor was summoned.
    rCAVsSummoner 0 The reference form ID of the actor that summoned the actor.
    Actor Gear
    fCAVsEncumbranceFeet 0 Total weight of gear equipped in Feet slot.
    fCAVsEncumbranceEquipped 0 Total weight of all equipped gear, including hands & feet, but not rings, amulets, torches, tail slot, or slots not normally used.
    fCAVsEncumbranceUnequipped 0 Total weight all gear the actor is carrying, minus equipped gear. For mounts, this includes the rider's weight + the rider's encumbrance.
    fCAVsHeadgearHearingPenalty 0 When wearing a helmet, Armor Rating is applied. With hood, pseudo armor rating is applied based on thickness/weight of hood.
    iCAVsVisionPVGearAdj 190 Peripheral field of view, adjusted by headgear
    iCAVsUnEquipStatus 0 0 = no action, 1 = equipping, 2 = unequipping
    Actor Statuses
    iCAVsVampirismStatus 0 Tracks how strong the vampirism disease is in an actor. 0 = not a vampire
    iCAVsIsUnconscious 0 1 = unconscious. Factors in Oblivion's and other methods of unconsciousness such as those created by 3rd party mods.
    iCAVsInCombat 0 Flags whether or not the actor is in combat. Important for various detection and other calculations.
    iCAVsInCombatWithPlayer 0 Flags whether or not the actor is in combat with the Player. Important for assassination Sneak skill up calculations.
    iCAVsIsPlayerFriendlyFollower 0 Flags that the actor is a follower who is friendly towards the player and should be ignored for special sneak related functions.
    Movement Related
    iCAVsTerrainType 0 The type of terrain the actor is currently treading on
    fCAVsPosX 0 The most recent x coordinate of the actor
    fCAVsPosY 0 The most recent y coordinate of the actor
    fCAVsPosZ 0 The most recent z coordinate of the actor
    iCAVsVelocity 0 The number of units / per second that the actor is traveling at
    fCAVsMotionFactor 1.0 The modifier to detection based on how fast the actor is travelling
    iCAVsMoveType 0 How the actor is moving: 0 = standing still, 1 = turning in place, 2 = walking, 3 = running, 4 = sprinting, 5 = in air, 6 = flying, 7 = swimming, 8 = diving, 9 = riding
    iCAVsMoveTypeMount 0 If the actor is riding, this is the movement type of the mount.
    iCAVsIsSprinting 0 1 = is in Sprint mode and has a sprint token, 0 is not Sprinting
    iCAVsIsLanding 0 Flags whether or not actor is landing from a jump or fall.
    iCAVsJumpState 0 0 = not jumping, 1 = is jumping.
    iCAVsIsRunningBackwards 0 0 = not moving backwards, 1 = running or moving backwards, 2 = running backwards
    fCAVsChangeSpeed 0 The Speed change required to adjust for running backwards.
    fCAVsChangeAthletics 0 The Athletics change required to adjust for running backwards.
    Detection Formula related
    iCAVsIsSneaking 0 Flags if the actor is currently in sneak mode or not
    iCAVsIsTalkingPenalty 0 The adjustment to apply to the detection formula if the actor is currently talking.
    iCAVsIsInDialoguePenalty 0 The adjustment to apply to the detection formula if the actor is currently in a conversation with another character.
    rCAVsLastTarget 0 The target ref of the most recent attack made by the actor.
    rCAVsLastAttacker 0 The ref of the most recent attacker who attacked the actor.
    iCAVsHealth 0 The modifier to detection based on health of the observer.
    iCAVsFatigue 0 The modifier to detection based on fatigue of the observer.
    iCAVsAutoDetectionFail 0 Flags whether or not the actor can detect anything. Not used by SDR directly. Exposed for 3rd party mods.
    iCAVsAlertLevelBase 0 This represents the alerted state of the actor based on their current AI Package/Procedure and whether or not they are sneaking.
    iCAVsAlertLevelAdj 0 This is a flexible adjustment to the base that can be modified up or down by a 3rd party mod.
    iCAVsAlertLevelFreshKill 0 This is the alertness bump the actor gets when they have come across a fresh kill.
    fCAVsxObserverAdj 0 Adjustments to the observer's chance to detect. It is meant to be tweaked by third-party mods.
    fCAVsxTargetAdj 0 Adjustments to the target's chance to avoid detection. It is meant to be tweaked by third-party mods.
    Queue and Version/Reboot Syncing
    iCAVsVersionSync 0 The version of SDR at the time the actor's data was last initialized
    iCAVsRebootSync 0 The reboot number at the time the actor's data was last initialized
    Timers for SM Combat Hide for SDR
    iCAVsTimerNoLOS 0 SM Combat Hide for SDR: The number of seconds that the actor has not had line of sight of the player.
    iCAVsTimerAlertCheck 0 SM Combat Hide for SDR: The number of seconds remaining before making a dialogue check.
    iCAVsTimerDialogueCheck 0 SM Combat Hide for SDR: The number of seconds remaining before making an alert check.

    Modder Friendly SDR Actor Values

    This section covers the modder friendly actor values in more detail and how you can use them.

    iCAVsHearingCurrent

    This is the current Hearing Acuity of the actor. Hearing Acuity is a core racial/creature trait that applies to an entire species. If an individual becomes fully or partially deaf, then the thing to do is modify the Deafness actor values rather than the Hearing Acuity.

    With this CAV, you can choose to temporarily change an actor's hearing acuity for the duration of a spell, such as giving them the equivalent of cat-like hearing for example.

    One variation, which is already built in to SDR, is the effect of the vampire disease. As the disease progresses, the vampire's Hearing Acuity improves at each stage until it reaches stage four. In that particular feature, the actual Hearing Acuity used is always going to be the greater of either the natural Hearing Acuity for the race or that of the vampire disease.

    However, for your own effects, you can pretty much create whatever rule you want.

    iCAVsDeafness

    Although Oblivion provides a Blindness actor value, they do not have one for Deafness, so I added it. Because the game engine has no rules for such things, the deafness attribute has absolutely no impact on an NPC's ability to interact with other people. They can have entire conversations with no problem. It only impacts their ability to detect people via the sound factor element of SDR's detection formula.

    When deafness is applied to the player, however, it will reduce the overall volume that the player hears.

    If you decide to alter the base iCAVDeafness attribute, it should be because the target has a permanent deafness effect. Maybe it's hearing loss in one ear, or something of that kind, or perhaps they were subjected to a disease. For temporary effects, please use fCAVsDeafnessTemp.

    fCAVsDeafnessTemp

    This is the CAV for temporary deafness effects, whether through scripts, poison, magic effects, etc. Because there could be more than one mod or effect altering this value, please make sure to use sdrModCAVsNum to increase/decrease the value accordingly. Generally speaking, you would be increasing the value at the beginning of the effect and decreasing it by the same amount at the end.

    When the combined totals of iCAVsDeafness and fCAVsDeafnessTemp reach 100 or above, the target is completely deaf. Otherwise sound is "heard" in volumes proportional to the amount of combined deafness factors / 100. For the player, this means the actual volume of noise will be muted.

    fCAVsBlindnessTemp

    This is the CAV for temporary blindness effects, whether through scripts, poison, magic effects, etc. Because there could be more than one mod or effect altering this value, please make sure to use sdrModCAVsNum to increase/decrease the value accordingly. Generally speaking, you would be increasing the value at the beginning of the effect and decreasing it by the same amount at the end.

    When the combined totals of Blindness and fCAVsBlindnessTemp reach 100 or above, the target is completely blind, otherwise vision quality is proportional to the amount of combined blindness factors / 100. For the player, this will be an actual blindness visual effect.

    iCAVsMuffle

    This actor value is specific to the Muffle magic effect. Detection-wise it reduces the sound penalty that the actor makes with their feet/footwear in proportion to value of iCAVMuffle /100. For the player, it reduces the volume of the footsteps. Because there could be more than one mod or effect altering this value, please make sure to use sdrModCAVsNum to increase/decrease the value accordingly. Generally speaking, you would be increasing the value at the beginning of the effect and decreasing it by the same amount at the end.

    iCAVsAutoDetectionFail

    If this attribute is set to 1, it flags the detection formula to force the actor to fail their next detection check with a result of -100. The flag is immediately cleared after the forced failure. Use with discretion.

    iCAVsAlertLevelAdj

    Alert levels are determined by AI Package and AI Procedures. The two are determined and combined, adding up to a total of 0-9. The iCAVsAlertLevelAdj is then added to this base. The combined total is then tweaked by other calculations and settings to impact the detection formula.

    There is no programming that populates this value. It is reserved for use by third party modders. Because there could be more than one mod or effect altering this value, please make sure to use sdrModCAVsNum to increase/decrease the value accordingly. Generally speaking, you would be increasing the value at the beginning of the effect and decreasing it by the same amount at the end.

    fCAVsxObserverAdj, fCAVsxTargetAdj

    These actor values are used in SDR detection formula as part of the Meta factor. However there is no programming in the SDR.esm or the sdr.dll that populates a value for them. They are dedicated and reserved for use by third party modders.

    cMetaAdj = ((dDetectLifeAdj * fDistanceFactor) + avxObserver + avxTarget + dFatigue + dHealth) * fMetaCheckMult

    fCAVxObserverAdj is called by the observer reference. fCAVxTargetAdj is called by the target reference.

    The final detection formula is:

    iNewDetectionLevel = iBase + cVisualAdj  + cAudioAdj + cSkillAdj + cMetaAdj

    That means that with either of these actor values, you could completely counter all the other factors combined. This makes it a very powerful loophole and should be exploited judiciously. Overall detection levels tend to range from -100 to 100+, so I would recommend not altering the fCAVsxObserverAdj or fCAVsxTargetAdj values by more than +/- 20 points maximum.

    Positive values will increase the chance for detection, while negative values will decrease the chance of detection.

    Should you decide to use these actor values in your mod for whatever reason, I *really* want to know about it. Also, you should assume that other modders may want to use this exploit too. Because there could be more than one mod or effect altering this value, please make sure to use sdrModCAVsNum to increase/decrease the value accordingly. Generally speaking, you would be increasing the value at the beginning of the effect and decreasing it by the same amount at the end.

    SDR's New Magic Effects

    Section last updated on May 15 2021 14:13.

    Following is some additional information on the new Blind, Deafen, and Muffle magic effects.

    Oblivion.ini file considerations

    In order to emulate a realistic experience for the player when the Blind, Deafen, and Muffle magic effects are applied, portions of the Oblivion.ini file settings are tweaked so the player can experience the full intended effect.

    SDR backs up and tracks the status of these settings and the magic effects in the OBSE\plugins\sdr.ini file. When the effect ends, those settings are restored to the Oblivion.ini.

    SDR is also smart enough to detect loading different save games so that the effects are properly updated depending on the status of the player. In addition, every time you exit the game, SDR checks to see if any of the effects are active, and if so, restores those Oblivion.ini settings and clears any active effect flags.

    Finally, there is also a system in place that detects whether or not Oblivion crashed since the last session. If so, it will check to see if there were any active effects at the time, and if so, restore those settings and clear the active flag. Then when you load a saved game, it will automatically force a check to see if there are any active effects saved with the game, and if so, apply them accordingly.

    So, you shouldn't have to worry about manually restoring Oblivion.ini settings. But just in case, copies of the original settings are stored in OBSE\plugins\sdr_default.ini for your reference.

    Magic effect types

    There are two types of magic effects: fixed and diminishing.

    Fixed magic effects

    A fixed magic effect has a fixed effect strength that stays the same for the entire duration of the effect. This is the standard magic effect type that you encounter in Oblivion and is also the standard for the new Muffle, Blind, and Deafen magic effects when used with spells, scrolls, and enchanted items.

    Diminishing magic effects

    A diminishing magic effect is a new concept introduced in SDR, and applies only to Deafen and Blind magic effects that are applied via traps or poisons. These effects start off at maximum strength for the first 1/6th of the spell's duration. Thereafter the effect slowly wears off and vision/hearing gradually returns to normal as the effect duration reduces.

    For example, a Target is hit by a poisoned blade with a diminishing blindness effect that is set to last 120 seconds. For the first 20 seconds, the Target will be 100% blind. Thereafter the blindness strength degrades 1% per second until vision returns to normal when the effect ends.

    Warning on Area Effect Spells

    Some of the Blind and Deafen spells are area effect. So be careful that you or your followers aren't caught in the radius when they impact the target or you could be affected.

    Blind

    There are two different AVs that combine to determine total effective Blindness.

    Blindness actor value

    The Blindness AV is built into Oblivion. As far as I know, it is only used by the Blind Moth Priests. If you are creating some sort of effect and want to cause permanent damage, this is the actor value you will want to modify.

    Temporary blindness custom actor value

    The Temporary Blindness AV is new via SDR's Custom Actor Values using the key fCAVsBlindnessTemp. This is the one you will want to modify for effects caused by spells or traps or pretty much anything that will wear off eventually given enough time.

    Impact on detection

    If the combined total between the two values is 100 or over, the target is completely blind. This voids the entire sight factor and any portion of the skill factor that is sight related in the detection formula. Anything below 100 will receive partial blindness in proportion.

    Effects on the player

    When applied to the player, the visual effect is a completely black screen at 100+ blindness, and from there it degenerates into a big black dot with blurred colors around the periphery. This visual effect emulates macular degeneration.

    To further give a sense of being blind, any HUD element that would give away position or indicate what is in front of you is temporarily blanked, relocated, disabled, or made transparent. When the blindness effect ends, those HUD elements are restored.

    Prerequisites

    In order for the blindness visual effects to work on the player, there are a lot of pre-requisites.

    • Oblivion Reloaded or scanti's Switch Night-Eye Shader plugin for the shader effect
    • MenuQue for disabling or making invisible certain elements of the HUD
    • Temporary HUD replacement textures supplied by SDR

    Oblivion.ini file setting alterations

    The following .ini File Settings are temporarily altered during a blindness effect:

    SectionKeyDefault ValueTemp Value
    GamePlaybDisableDynamicCrosshair01
    GamePlaybCrossHair10
    GamePlayfHealthBarHeight4.00000
    GamePlayfHealthBarWidth40.00000

    Deafen

    There are two custom actor values that combine to determine total effective Deafness:

    Deafness actor value

    Unlike Blindness, there is no Deafness actor value built into the Oblivion game. So SDR simulates it with the iCAVsDeafness custom actor value. This is the one to use to reflect permanent full or partial hearing loss, such as going deaf in one ear, etc.

    Temporary deafness custom actor value

    The Temporary Deafness AV is also a custom actor value using the key fCAVsDeafnessTemp. This is the one you will want to modify for effects caused by spells or traps or pretty much anything that will wear off eventually given enough time.

    Impact on detection

    If the combined total between the two values is 100 or over, the target is completely deaf. This voids the entire audio factor and any portion of the skill factor that is audio related in the detection formula. Anything below 100 will receive partial deafness in proportion. This will not, however, prevent the actor from engaging in dialogue with other actors. There's no way around that.

    Effects on the player

    When applied to the player, the audio is a completely muted at 100+ deafness. Below that, the audio is muted proportionally to the strength of the effect.

    To further give a sense of being deaf, general subtitles are turned off for the duration and dialogue subtitles are turned off for deafness values greater than 70 (default game setting).

    When the deafness effect ends, volume levels and subtitle settings are restored to their original values.

    Prerequisites

    In order for the deafness audio effects to work on the player, the only prerequisite is to have either the Sound Commands (SC) or Enhanced Music and Control 2 (EMC2) plugin installed. EMC2 does everything Sound Commands does and more, so it is the recommended option and will be used by default if both are detected as being installed. Sound Commands comes with SDR as an optional sub-package in the installer package.

    Oblivion.ini file setting alterations

    The following .ini File Settings are temporarily altered during a deafness effect:

    SectionKeyDefault ValueTemp Value
    GamePlaybDialogueSubtitles10 or 1 depending on deafness level
    GamePlaybGeneralSubtitles00

    Muffle

    The muffle effect is a non-hostile spell that is normally cast on oneself. The effect mutes the footstep volume of the target in proportion to the strength of the effect.

    Muffle actor value

    SDR uses the iCAVsMuffle custom actor value to track the current muffle effect on an actor.

    Effects on the player vs. NPCs

    In the detection formula, the effect offsets or possibly nullifies the feet/footwear portion of the sound penalties created by walking/running/sprinting. This applies to all actors with the effect.

    The audio experience is completely different. The game engine is hardwired to only separate out the foot volume for the player. If you were to alter the foot volume of a non-player, you would end up altering it for all of them. Therefore only the player's footsteps volume will be muted when the player has the active effect.

    If an NPC has the effect, you won't know it because you will still be able to hear their footsteps. However, I didn't program anything specific to have NPCs use the spell. So the odds of them having the spell, let alone casting it, are very slim. It is possible that they might have magic foot wear with a Muffle enchantment. But again, that is also a very slim chance.

    This gives a definite advantage to the player in that regard, but I think it helps in the overall balance in two ways:

    • It's not too overpowering since it only affects sound made by the feet. The jingling of other gear, including drawing and sheathing weapons, can still be heard.
    • The player has a limited field of view in actual game play due to monitor size restrictions. That field of view is by default 75, and can only go as high as 120, where it starts looking really warped. NPCs on the other hand can utilize their full peripheral range of 190 degrees (at the minimum), which gives them an advantage of being able to spot the player before the player can spot them.

    Prerequisites

    There are no prerequisites. SDR uses the Oblivion.ini to create the muted footsteps effect for the player.

    Oblivion.ini file setting alterations

    The following .ini File Settings are temporarily altered during a blindness effect:

    SectionKeyDefault ValueTemp Value
    AudiofPlayerFootVolume.9000Proportional to Muffle strength, with max at the default value

    Incorporating the new spells/effects in your mod

    There are already several pre-made Blind, Deafen, and Muffle magical effects, spells, potions, etc. that are in SDR.esm. Just about all of them are dynamically added to the leveled lists, so there is already a chance that NPCs might have the spells, magic items, scrolls, etc. Beyond the leveled lists, you have a few options for how to use these new effects. For either option, it will require having SDR.esm active and as a parent to your mod.

    Option 1: Create your own

    If none of the existing items/effects suit your needs, you can of course create your own. Feel free to use the pre-existing ones as a template to go off of, but please do not modify them as there may be other mods that utilize them.

    Option 2: Use what already exists in the SDR.esm

    You can either grant the spell or item to NPCs and hope that their AI will use them, or you can force cast them on the player using some scripting. Included in the next section is a list of all the existing spells, magic effect scripts, items, potions, and poisons in SDR.esm. The Form ID is only limited to the last six hex-digits for the sake of convenience/space. But since you are using SDR.esm as a parent, all you have to do is reference the Editor ID.

    Testing the Spells, Effects, Shaders, etc.

    If you want to see how these features work first hand right away, there are some test spells and potions that you can add to your character that force blindness, deafness, and muffle effects on the player as well as other spells that allow you test a variety of SDR features and scenarios.

    In order to activate test mode, add this to you SDR Game Settings Tweak.ini file:

    SetNumericGameSetting iSDRsTestMode 0; {0}, 0=no change, 1=add, 2=remove

    When activated, this option automatically adds test versions of Invisibility, Chameleon, Detect Life, Muffle, Deafen, Blind, Light, Dispel, and Night-Eye if you don't have them. The Deafen and Blind spells are tweaked to apply to you, so you can experience them first-hand. Light has both a self and target option so you can see how it affects Invisibility. Use Dispel to see how it impacts Blind and Deafen.

    • Setting the option to 1 will add the spells if missing.
    • Setting the option to 2 will remove the spells if found.
    • Setting the option to 0 doesn't do anything, since that is the default behavior.

    The check is made only once each time a saved game is loaded. I suppose you could keep the spells and exploit this setting, but it's only meant for testing the features to see if they working properly.

    SDR's New Content

    Section last updated on May 15 2021 14:13.

    New content for players

    This section covers all the new content that is meant for players to purchase, learn, or acquire through adventuring. There are three ways of acquiring the new content: buy them, find them, or cheat.

    All items have been added to the leveled lists, which means that merchants might have them in stores, or you might find the items as loot in treasure chests or on the person of an NPC.

    Spells have also been added to the leveled lists, so you might encounter a hostile NPC who can use the new Blind and Deafen spells against you!

    Purchasing spells

    There is always a chance that a merchant who offers spells as a service will have the new spells for sale. It is semi-randomly determined at the time you first encounter them. The base chance is calculated as follows:

    SchoolSkillLevel + (Intelligence/2) + (Mercantile/4) - (SpellMasteryLevel*20)

    A random number is then generated from 1 to 100. If the number is lower than or equal to the base chance, they are assigned the spell. Only Novice through Expert spells are randomly assigned this way. Also, normally merchants are only checked once to see if they are assigned the spells. There is an option to use the "reboot" utility quest which will give you an option to replace whatever has been assigned by a new batch of randomly determined spells.

    The Master Level spells can only be acquired from certain vendors:

    Blind Deafen Muffle
    Oblivion Delphine Jend Delphine Jend Raminus Polus
    Nehrim Nara Nara Maius

    Cheating

    You can always manually add the spells, items, etc. using the command console and adding the item using its form ID. A complete list of all the new contents and their form IDs follow. For instructions on how to use the console to add an item, please visit this wiki tutorial.

    New content for players reference tables

    Following are tables with all the new Muffle, Blinding, and Deafening spells, scrolls, tomes, potions, and enchanted items meant for players.

    All Form IDs have the first two mod index digits dropped to save space and because the index will change anyway depending on load order.

    Note: All of the items referenced below are stored in the SDR.esm, so make sure to look up the index number of SDR.esm when using the console to add them.

    New items for players

    Following are all the items that can be found in loot or purchased in stores. The enchanted weapons only have enchantments. The armor and clothing have both an enchantment (for list purposes) and a script (for adding and removing the enchantment ability).

    Weapons, Armor, Rings, Robes, and Shoes
    Form IDEditor IDNameEnchantmentScript
    010801sdrStaffStaff of BedazzlingsdrEnStaffNONE
    010802sdrWarhammerSkull RingersdrEnWarhammerNONE
    011500sdrEnchLeatherBootsMufflingBoots of Softened StepssdrEnAppMuffle10sdrEnchMuffle10
    011501sdrEnchLeatherCuirassMufflingCuirass of QuietsdrEnAppMuffle20sdrEnchMuffle20
    011503sdrEnchRingMuffleBrassBase Ring of MufflingsdrEnAppMuffle15sdrEnchMuffle15
    011504sdrEnchRingMuffleBrassPearlRing of MufflingsdrEnAppMuffle20sdrEnchMuffle20
    011505sdrEnchRingMuffleBrassTopazGrand Ring of MufflingsdrEnAppMuffle25sdrEnchMuffle25
    011510sdrEnchRobeMuffleRobe of SilencesdrEnAppMuffle30sdrEnchMuffle30
    011521sdrEnchClothingShoesMuffle15Moccasins of the MonksdrEnAppMuffle15sdrEnchMuffle15
    011522sdrEnchClothingShoesMuffle25Scarpines of the ScoutsdrEnAppMuffle25sdrEnchMuffle25
    011523sdrEnchClothingShoesMuffle35Buskins of the BurglarsdrEnAppMuffle35sdrEnchMuffle35
    011524sdrEnchClothingShoesMuffle50Brogues of the RoguesdrEnAppMuffle50sdrEnchMuffle50
    Scrolls
    Form IDEditor IDNameEnchantment
    011102sdrScrollBlind2ApprenticeSun GlaresdrEnScrollBlind2Apprentice
    011103sdrScrollBlind3JourneymanFlashing BurstsdrEnScrollBlind3Journeyman
    011104sdrScrollBlind4ExpertRazzle DazzlesdrEnScrollBlind4Expert
    011105sdrScrollBlind5MasterBlinding BlastsdrEnScrollBlind5Master
    011112sdrScrollDeafen2ApprenticeWhip CracksdrEnScrollDeafen2Apprentice
    011113sdrScrollDeafen3JourneymanSound WavesdrEnScrollDeafen3Journeyman
    011114sdrScrollDeafen4ExpertThunderclapsdrEnScrollDeafen4Expert
    011115sdrScrollDeafen5MasterDeafening RoarsdrEnScrollDeafen5Master
    011122sdrScrollMuffle2ApprenticeDampen NoisesdrEnScrollMuffle2Apprentice
    011123sdrScrollMuffle3JourneymanSuppress SoundsdrEnScrollMuffle3Journeyman
    011124sdrScrollMuffle4ExpertMuffle MovementsdrEnScrollMuffle4Expert
    011125sdrScrollMuffle5MasterInaudiblesdrEnScrollMuffle5Master
    Tomes
    Form IDEditor IDNameSpell Added
    011002sdrTomeBlind2ApprenticeSun Glare TomesdrBlind2Apprentice
    011003sdrTomeBlind3JourneymanFlashing Burst TomesdrBlind3Journeyman
    011004sdrTomeBlind4ExpertRazzle Dazzle TomesdrBlind4Expert
    011005sdrTomeBlind5MasterBlinding Blast TomesdrBlind5Master
    011012sdrTomeDeafen2ApprenticeWhip Crack TomesdrDeafen2Apprentice
    011013sdrTomeDeafen3JourneymanSound Wave TomesdrDeafen3Journeyman
    011014sdrTomeDeafen4ExpertThunderclap TomesdrDeafen4Expert
    011015sdrTomeDeafen5MasterDeafening Roar TomesdrDeafen5Master
    011021sdrTomeMuffle1NoviceSoften Steps TomesdrMuffle1Novice
    011022sdrTomeMuffle2ApprenticeDampen Noise TomesdrMuffle2Apprentice
    011023sdrTomeMuffle3JourneymanSuppress Sound TomesdrMuffle3Journeyman
    011024sdrTomeMuffle4ExpertMuffle Movement TomesdrMuffle4Expert
    011025sdrTomeMuffle5MasterInaudible TomesdrMuffle5Master
    Poisons and Potions
    Form IDEditor IDNameScripted EffectDuration
    010101sdrPotionBlind01Weak Poison of BlindingsdrMEBLNDDiminishing15
    010102sdrPotionBlind02Poison of BlindingsdrMEBLNDDiminishing30
    010103sdrPotionBlind03Strong Poison of BlindingsdrMEBLNDDiminishing45
    010104sdrPotionBlind04Lethal Poison of BlindingsdrMEBLNDDiminishing60
    010201sdrPotionDeafen01Weak Poison of DeafeningsdrMEDEAFDiminishing15
    010202sdrPotionDeafen02Poison of DeafeningsdrMEDEAFDiminishing30
    010203sdrPotionDeafen03Strong Poison of DeafeningsdrMEDEAFDiminishing45
    010204sdrPotionDeafen04Lethal Poison of DeafeningsdrMEDEAFDiminishing60
    010301sdrPotionMuffle01Weak Potion of MufflingsdrMEMFFL02030
    010302sdrPotionMuffle02Potion of MufflingsdrMEMFFL03030
    010303sdrPotionMuffle03Strong Potion of MufflingsdrMEMFFL05030

    New spells for players

    These are the spells intended for the actors to cast/sell/purchase/teach/etc.

    Form IDEditor IDNameScripted EffectDurationArea
    018230sdrMuffle1NoviceSoften StepssdrMEMFFL01030Self
    018231sdrMuffle2ApprenticeDampen NoisesdrMEMFFL02030Self
    018232sdrMuffle3JourneymanSuppress SoundsdrMEMFFL03030Self
    018233sdrMuffle4ExpertMuffle MovementsdrMEMFFL05030Self
    018234sdrMuffle5MasterInaudiblesdrMEMFFL08030Self
    018241sdrBlind2ApprenticeSun GlaresdrMEBLND04030Target
    018242sdrBlind3JourneymanFlashing BurstsdrMEBLND060405
    018243sdrBlind4ExpertRazzle DazzlesdrMEBLND0805010
    018244sdrBlind5MasterBlinding BlastsdrMEBLND1006020
    018251sdrDeafen2ApprenticeWhip CracksdrMEDEAF07030Target
    018252sdrDeafen3JourneymanSound WavesdrMEDEAF080405
    018253sdrDeafen4ExpertThunderclapsdrMEDEAF0905010
    018254sdrDeafen5MasterDeafening RoarsdrMEDEAF1006020

    New content for modders

    If you are a modder, you can create your own spells, items, and traps using the scripted spell effects, enchantments, and abilities that follow.

    Enchantments

    Following are the various enchantments that are assigned to weapons, armor, clothing, and scrolls. For the Effect type, B = Blind, D = Deafen, M = Muffle.

    Form IDEditor IDEffectDurationArea
    014610sdrEnAppMuffle10None*n/aSelf
    014615sdrEnAppMuffle15None*n/aSelf
    014620sdrEnAppMuffle20None*n/aSelf
    014625sdrEnAppMuffle25None*n/aSelf
    014630sdrEnAppMuffle30None*n/aSelf
    014635sdrEnAppMuffle35None*n/aSelf
    014650sdrEnAppMuffle50None*n/aSelf
    014502sdrEnScrollBlind2ApprenticeB 40%30Target
    014503sdrEnScrollBlind3JourneymanB 60%405
    014504sdrEnScrollBlind4ExpertB 80%5010
    014505sdrEnScrollBlind5MasterB 100%6020
    014512sdrEnScrollDeafen2ApprenticeD 70%30Target
    014513sdrEnScrollDeafen3JourneymanD 80%405
    014514sdrEnScrollDeafen4ExpertD 90%5010
    014515sdrEnScrollDeafen5MasterD 100%6020
    014521sdrEnScrollMuffle1NoviceM 10%30Self
    014522sdrEnScrollMuffle2ApprenticeM 20%30Self
    014523sdrEnScrollMuffle3JourneymanM 30%30Self
    014524sdrEnScrollMuffle4ExpertM 50%30Self
    014525sdrEnScrollMuffle5MasterM 80%30Self
    014700sdrEnStaffB 100% / D 100%10 / 20Target
    014750sdrEnWarhammerB 80% / D 100%10 / 20Touch

    *These Enchantments are place holders for enchanted clothing and armor so that the "Enchantment" can be displayed in lists. The actual update/removal of effects is handled by scripts attached to the items that add/remove magic "ability" type spells which are associated with the new spell icons. This avoids the enchantments being assigned generic "scripted" icons.

    Spells

    Spells for enchanted items

    These spells are abilities that are added and removed to the target whenever the associated enchanted object is added or removed.

    Form IDEditor IDNameScripted EffectDurationArea
    018410sdrAbMuffle10Enchantment: Muffle 10%sdrMEMFFL010n/aSelf
    018415sdrAbMuffle15Enchantment: Muffle 15%sdrMEMFFL015n/aSelf
    018420sdrAbMuffle20Enchantment: Muffle 20%sdrMEMFFL020n/aSelf
    018425sdrAbMuffle25Enchantment: Muffle 25%sdrMEMFFL025n/aSelf
    018430sdrAbMuffle30Enchantment: Muffle 30%sdrMEMFFL030n/aSelf
    018435sdrAbMuffle35Enchantment: Muffle 35%sdrMEMFFL035n/aSelf
    018450sdrAbMuffle50Enchantment: Muffle 50%sdrMEMFFL050n/aSelf

    Spells for traps

    The following spells are meant to be used as magical traps. SDR does not currently use them in the game. They are made available here as a modder's resource. All trap spells are of the "diminishing" spell type. In addition to the Blindness or Deafness effect, they also cause some health damage, just to give it an extra kick.

    Form IDEditor IDNameScripted EffectDurationAreaDmg
    018301sdrSpellTrapBlind01Blind Trap - WeaksdrMEBLNDDiminishing1555
    018302sdrSpellTrapBlind02Blind Trap - AvgsdrMEBLNDDiminishing301010
    018303sdrSpellTrapBlind03Blind Trap - StrongsdrMEBLNDDiminishing451515
    018304sdrSpellTrapBlind04Blind Trap - LethalsdrMEBLNDDiminishing601520
    018311sdrSpellTrapDeafen01Deafen Trap - WeaksdrMEDEAFDiminishing1555
    018312sdrSpellTrapDeafen02Deafen Trap - AvgsdrMEDEAFDiminishing301010
    018313sdrSpellTrapDeafen03Deafen Trap - StrongsdrMEDEAFDiminishing451515
    018314sdrSpellTrapDeafen04Deafen Trap - LethalsdrMEDEAFDiminishing601520

    Magic effect scripts

    Following are all of the scripted magic effects that are attached to the various spells, enchantments, and wearable enchanted items. If you decide to create your own, this is where you will be pulling your scripted effects from.

    Form IDEditor IDScripted Effect
    Muffling Scripted Spell Effects
    002010sdrMEMFFL010Increases the target's "iCAVsMuffle" CAV by 10 for the duration
    002015sdrMEMFFL015Increases the target's "iCAVsMuffle" CAV by 15 for the duration
    002020sdrMEMFFL020Increases the target's "iCAVsMuffle" CAV by 20 for the duration
    002025sdrMEMFFL025Increases the target's "iCAVsMuffle" CAV by 25 for the duration
    002030sdrMEMFFL030Increases the target's "iCAVsMuffle" CAV by 30 for the duration
    002035sdrMEMFFL035Increases the target's "iCAVsMuffle" CAV by 35 for the duration
    002050sdrMEMFFL050Increases the target's "iCAVsMuffle" CAV by 50 for the duration
    002080sdrMEMFFL080Increases the target's "iCAVsMuffle" CAV by 80 for the duration
    002100sdrMEMFFL100Increases the target's "iCAVsMuffle" CAV by 100 for the duration
    Muffling Enchanted Item Scripts
    004010sdrEnchMuffle10Adds/Removes sdrAbMuffle10 spell ability
    004015sdrEnchMuffle15Adds/Removes sdrAbMuffle15 spell ability
    004020sdrEnchMuffle20Adds/Removes sdrAbMuffle20 spell ability
    004025sdrEnchMuffle25Adds/Removes sdrAbMuffle25 spell ability
    004030sdrEnchMuffle30Adds/Removes sdrAbMuffle30 spell ability
    004035sdrEnchMuffle35Adds/Removes sdrAbMuffle35 spell ability
    004050sdrEnchMuffle50Adds/Removes sdrAbMuffle50 spell ability
    Deafening Scripted Spell Effects
    005000sdrMEDEAFDiminishingAdds 120 points to target's "fCAVsDeafnessTemp" CAV, which diminishes over time
    005070sdrMEDEAF070Increases the target's "iCAVsDeafness" CAV by 70 for the duration
    005060sdrMEDEAF080Increases the target's "iCAVsDeafness" CAV by 80 for the duration
    005080sdrMEDEAF090Increases the target's "iCAVsDeafness" CAV by 90 for the duration
    005100sdrMEDEAF100Increases the target's "iCAVsDeafness" CAV by 100 for the duration
    Blinding Scripted Spell Effects
    007000sdrMEBLNDDiminishingAdds 120 points to target's "fCAVsBlindnessTemp" CAV, which diminishes over time
    007040sdrMEBLND040Increases the target's Blindness AV by 40 for the duration
    007060sdrMEBLND060Increases the target's Blindness AV by 60 for the duration
    007080sdrMEBLND080Increases the target's Blindness AV by 80 for the duration
    007100sdrMEBLND100Increases the target's Blindness AV by 100 for the duration

    Shader Experiments

    Section last updated on May 15 2021 14:13.

    There are two sets of shaders that SDR uses: Dynamic Night-Eye Shader effects and the Blindness Magic Shader effects. There are also two different methods for implementing them: Scanti's Switch Night-Eye Shader plugin and the Oblivion Reloaded Plugin.

    Scanti's Switch Night Eye Shader Method

    If you want to alter the Night Eye or Blind shaders for use with Scanti's plug-in, the development shaders I created for the effects can be found in the SDR installation package in the following folders:

    • 41 Shader Switcher Dev Nightey
    • 41 Shader Switcher Dev Blind

    Complete instructions for altering, encoding, and creating replacement shaders are available in the documentation for Scanti's Night Eye Shader Switcher mod.

    Oblivion Reloaded Method

    SDR Series 9 introduces a new dynamic Night-Eye shader and Blindness shader for use with Oblivion Reloaded that you can tweak yourself. However, you won't have to redo the entire shader. All you have to do is modify the proper .ini files. Details on how to do this are already covered in the sections on the Blind magic effect and the NightEye magic effect.

    However, even though you can modify the settings, it will be hard to know what the look and feel will be for any given setting. Without some method of previewing, you don't have much of a choice but to use trial and error to tweak the effect until it feels right.

    Previewing the effects in Shazzam

    On the bright side, there is a tool which I used to develop the shaders that you can use to preview the effects: Shazzam. For your convenience, I have put together a shader preview package that has all the files you need to preview the shader effects before you change the settings. Follow these instructions:

    1. Download the Shader Experiment Package.
    2. Unpack the zipped files into a folder of your choice. It will have the following files:
      • Shazzam_v1.5.Setup.exe
      • sdrBlindness_OR_shazzam_variables.fx
      • sdrNightEye_OR_shazzam_variables.fx
      • ScreenShotSampler_01.jpg
      • ScreenShotSampler_02.jpg
      • ScreenShotSampler_03.jpg
    3. Install Shazzam into the directory of your choice.
    4. Launch Shazzam
    5. Load up the .fx file
      • Select "File"
      • Select "Open Shader File..." (Control-O)
      • Navigate to the ShaderExperimentPackage folder
      • Select either the sdrBlindness_OR_shazzam_variables.fx or the sdrNightEye_OR_shazzam_variables.fx file
      • Click on "Open"
      • Do NOT alter the file!
    6. Load up the .jpg preview image
      • Select "File"
      • Select "Open Image File..." (Control-I)
      • Navigate to the ShaderExperimentPackage folder
      • Select one of the sampler images provided or select a screenshot of your own making.
    7. In the top section, among the tabs starting with "Custom Image", click on the last "Compare" tab to view the original image side by side with what will be the filtered image.
    8. Compile the shader and apply it to the image by pressing the "F7" key. If you get an error message, you will have to change the settings:
      • In the far left column, click on "Settings"
      • Under Target Framework, select "WPF PS_3"
      • Recompile the shader with the "F7" key.
    9. Apply the compiled shader to the image with the "F5" key.
    10. Select the "Tryout (adjust settings)" tab in the lower section.

    At this point, you should now have a window split three ways. The original image is on the top right, the shader effect image is on the top left, and the setting sliders will appear below.

    Working with Shazzam's tryout settings: Blindness FX

    Load up sdrBlindness_OR_shazzam_variables.fx for the effect and ScreenshotSampler_03.jpg for the image. Compile it, apply it, and switch to the Tryout tab.

    You will see two variables, each with four settings: XYZW. For both variables, you can ignore all but the "X" variables.

    TES_SDR_Blindness_Value

    The X component represents the player's current blindness value, and will range from 0 (not blind) to 100 (totally blind). SDR handles the calculations for you, and will dynamically update the shader as the player's blindness value changes. To see what the effect would look like at different blindness levels, move the X slider back and forth.

    TES_SDR_Effect_Severity

    The X component represent the "Blindness Severity", which is the fBLNDseverity setting in the sdrBlindness.ini. It determines how severe the blindness effect is, relative to player's current Blindness Value. It ranges from 0 (not too severe) to 100 (very severe). Move the slider back and forth to get a sense of how severe the blind effect will appear, relative to the selected blindness value of the other slider. Try different combinations, notate which severity level feels right to you, and update the sdrBlindness.ini file accordingly.

    Working with Shazzam's tryout settings: NightEye FX

    Load up sdrNightEye_OR_shazzam_variables.fx for the effect and either ScreenshotSampler_01.jpg or either ScreenshotSampler_02.jpg for the image. The sample images were designed specifically for previewing the NightEye shader effect. Each image compiles four screen shots as well as a color wheel. The "LL#" for each screen shot is the light level that was hitting the player at the time the screen shot was taken. Compile it, apply it, and switch to the Tryout tab.

    SpellInput

    This variable is reserved by Oblivion and would normally be used for the NightEye shader, but SDR bypasses its original purpose completely. Changing any of the X, Y, Z, or W settings will have no impact on the shader.

    TESR_SDR_NIGHTEYE_LightLevel

    This variable only uses the X component. The Y, Z, and W components are ignored. It's used by SDR to pass the current light level that is hitting the player character at any given moment. Light levels range from 0 (no light/total darkness) to 100 (full daylight/very bright nearby torch light). Use the X slider to change the light level to match the LL number in the sampler screenshots to get a sense of what the NightEye effect would look like at the same light level that the screen shot was taken at.

    TESR_SDR_NIGHTEYE_Factors

    This variable only uses the X, Y, and Z components. The W component is ignored.

    The X component represents the "Brightness Factor", which is the fNEYEBrightness setting in the sdrNightEye.ini file. This setting determines how much the night-eye effect brightens the input image. At 0, there is no brightness increase. It can go as high as 100.

    The Y component represents the "Color Mix Factor", which is the fNEYEColorMix setting in the sdrNightEye.ini file. This setting determines how much of the resulting image comes from the original image vs. the fully altered version of the image by the other settings. 0 leans towards the night eye color scheme. 100 leans towards the original input color. The color mix factor will also be dynamically affected by the light level hitting the player. The more light hitting the player, the more the color will lean towards the original and vice versa.

    The Z component represents the "Tunnel Factor", which is the fNEYETunnelFactor setting in the sdrNightEye.ini file. This setting determines how much of a tunnel vision effect kicks in with the night-eye effect. It scales from 0 (no tunnel) to 100 (very tunneled, about 50% visability). This effect is then modified by the amount of light hitting the player. A light level of 0 = 0% of the effect is applied, and a light level of 100 = 100% of the effect is applied. The purpose of the effect is to replicate the eyes being overloaded by too much light in bright areas, forcing the observer to squint.

    TESR_SDR_NIGHTEYE_Balance

    This variable only uses the X, Y, and Z components. The W component is ignored. The three settings represent the overall color mix of the night eye effect between the three primary colors in relation to each other. The ranges for each setting goes from 0 to 100. If all three numbers are the same, the resulting balance is exactly the same as the input image.

    The X component represents the "Red Balance", which is the fNEYEBalanceR setting in the sdrNightEye.ini file.

    The Y component represents the "Green Balance", which is the fNEYEBalanceG setting in the sdrNightEye.ini file.

    The Z component represents the "Blue Balance", which is the fNEYEBalanceB setting in the sdrNightEye.ini file.

    TESR_SDR_NIGHTEYE_Saturation

    This variable only uses the X, Y, and Z components. The W component is ignored. The three settings represent the saturation level of each of the three primary colors. The ranges for each setting goes from 0 to 100. 0 is completely desaturated and 100 is fully saturated (original input color).

    The X component represents the "Red Saturation", which is the fNEYESaturationR setting in the sdrNightEye.ini file.

    The Y component represents the "Green Saturation", which is the fNEYESaturationG setting in the sdrNightEye.ini file.

    The Z component represents the "Blue Saturation", which is the fNEYESaturationB setting in the sdrNightEye.ini file.

    Variations depending on environment

    As a reminder, SDR provides three entirely different set of NightEye shader settings: Interior, Exterior, and Underwater. SDR checks regularly to see where the player is, and if the location changes, will swap over to proper environmental settings. So take that into account when deciding on the settings you want to use.

    Version Changes

    Section last updated on May 15 2021 14:13.

    For the sake of brevity, except for the most recent list of changes, all beta and unreleased versions are excluded, and their changes folded into the following official release. For any series before 9, all changes for the entire series have been rolled up into one summary.

    Series 9

    Section last updated on May 15 2021 14:13.

    First version release: 9.000 - July 4, 2018

    9.010

    Released July 21, 2018

    Update Notes

    Important! There have been many changes to the SDR.esp. It is highly recommended that if you are updating from 9.000 or 9.001, you do a partial clean save with only the SDR.esm mod active before uninstalling SDR completely and installing the new version. Otherwise if you have any Blind, Deafen, or Muffling spells or magic items, you will lose them.

    Documentation

    Updated online documentation for the following sections:

    • Game Mechanics: Detection: Skill Component Detection Factors: Alert Factors: Recent Kill Alert Level Adjustments
    • Modder's Guide: Extended Functionality: OBSE Functions - Restricted: added sdrGetSprintFatigueBurn
    • Modder's Guide: Extended Functionality: OBSE Functions - Restricted: removed sdrSetCAVsData
    • Modder's Guide: Custom Actor Value System (CAVs)
    • Modder's Guide: SDR's Custom Actor Values
    • Modder's Guide: SDR's New Magic Effects
    • Modder's Guide: SDR's New Content
    • Modder's Guide: Shader Experiments

    sdr.dll

    • Added new custom function sdrGetSprintFatigueBurn for calculating sprint fatigue burn multipliers.
    • Removed game setting: iSDRsReactFreshKillAlertCheckTimerMax
    • Removed game setting: iSDRsReactFreshKillOnAlertTimerMax
    • Added game setting: iSDRsReactFreshKillAlerts
    • Removed Function: sdrSetCAVsData

    sdr.ini / sdr_default.ini

    Updated to reflect game setting changes per above.

    SDR.esm

    • Added fresh kill alert spells and scripted spell effects. Not meant for modders or players

    SDR.esp

    • Removed queueing system and switched back to a token system for updating custom actor values.
    • Changed how fresh kill timers work, switched to a token based system
    • Revised scripts structure to be (hopefully) more efficient)
    • Revised how actors are initialized with CAVs data
    • Removed CAV: fCAVsFreshKillTimeout
    • Removed CAV: iCAVsActorQueue
    • Removed CAV: iCAVsIsDead
    • Removed CAV: fCAVsDistToPlayer
    • Fixed issue with character alpha calculations for those with Chameleon but with refraction turned on.
    • Added checks for which Detection formula is active before calling various sub-script routines that only apply to SDR's detection formula.

    9.001

    Released July 10, 2018

    Installer Package

    • Split up 00 Core sub-package into 00 OBSE and 01 ESM ESP sub-packages.
    • Renamed "01 Worldspace" sub-packages to be "02 Worldspace" sub-packages.
    • Added new "03 Detection Formula Override Examples" optional sub-package.
    • Updated the installer wizard to adjust for the above changes.
    • Changed the default behavior of the Auto-Wizard to *not* install any of the three .ini files if they already exist so that they would not be automatically overwritten.

    Documentation

    Updated online documentation for the following sections:

    • Technical Support: Debugging
    • Technical Support: Performance Issues
    • Modder's Guide: Internal Game Settings
    • Modder's Guide: External Game Settings
    • Modder's Guide: Extended Functionality

    sdr.dll

    • Updated the "Toggle Detection Stats" overwrite to display which detection formula is being used (Oblivion, SDR, or Custom Script) as well as the original detection value.
    • Fixed error with sdrModCAVsNum OBSE function where it was returning the amount by which the value was to be modified and not the new modified value.
    • Updated the sdrGetHeight OBSE function to return -1 if there was an error instead of a default height of 72.

    SDR.esm

    • Fixed the sdrCAVsRemoveRefData function script so that it only removes the CAVs for a specific group ID for the calling ref, rather than all CAVs for the calling ref.

    SDR.esp

    • Fixed issue with Speed values not being restored after actor stops running backwards.

    9.000

    Released July 4, 2018

    Documentation

    • Consolidated, updated, and moved all the documentation into a single web-page source that can be downloaded.

    Installation Package

    • Revised the installation package folder/file structure.
    • Changed, renamed, removed, or added new files to the installation package.
    • Updated the installation wizard for Wrye Bash installs.

    sdr.dll

    • Revamped the detection formula: corrections, changes in formula, and more efficient/simpler calculations.
    • Overhauled the Custom Actor Value system to be more efficient and more flexible.
    • Overhauled the custom game settings and how default values are set.
    • Lots of changes made to the structure of the SDR.dll
    • Moved more calculations and processing out of the scripts and into the SDR.dll
    • Added option to use your own detection formula, instead of only picking between SDR's and Oblivion's.
    • SDR now uses its own game setting for Effective Sneak Skill cap and completely ignores any uncapper plugins (such as AV Uncapper or Elys' Uncapper).
    • Revised how detection debugging works by replacing Oblivion's debug stats text with SDR's.

    SDR.esm

    • Moved some of the session start/initialization sequence out of SDR.esp into SDR.esm.
    • Added, removed, renamed, or revised many of the scripts.
    • Made the cleanup of inactive mod and deleted/missing reference CAVs data built into the quest script so that other mods using the system no longer have to create or call these functions.

    SDR.esp

    • Renamed SDR_Mechanics.esp to SDR.esp
    • Added, removed, renamed, or revised many of the scripts.
    • Split up the initialization sequence so that some of it happens on game launch and some of it happens on game load.
    • Moved Sprint Factor settings into the Race/Creature Traits feature.
    • Revised the shader visuals for Blindness and Night-Eye magic effects, added options and support for Oblivion Reloaded.
    • Renamed, removed, or added many custom actor value names.
    • Created a more efficient system of activating actor status updating scripts on a schedule that doesn't require tokens.
    • Revised how the Dynamic Detect Life System (DDLS) system works with more options for which group can detect what and simpler choices for shader types.

    Series 8

    Section last updated on May 15 2021 14:13.

    First version release: 8.220 - January 27, 2015
    Last version release: 8.250 - March 12, 2015

    This series focused on expanding features, moving more of the processing into the .dll, performance boosts, bug fixes and other tweaks. Following is a summary of all the new features/changes in series 8:

    File Structure Changes

    • Moved all possible Perks and Patches features into the SDR.esm file
    • Rolled the Detect Life patch .esps into Perks and Patches .esps.
    • Renamed Perks and Patches files to be simply SDR_Oblivion.esp and SDR_Nehrim.esp. Made sure they can be merged into the Wrye Bash bashed patch.
    • Changed name of sdr_obse.dll to sdr.dll
    • Added Blindnes visual effects files to the night-eye shader folders
    • Upgraded custom spell icon files
    • Added custom detect life shader files

    Documentation changes

    • Merged content of the .ini reference file into the .pdf manual and renamed it Player's Handbook
    • Revised overall structure/design of Player's Handbook and updated/expanded all sections to match all the changes.
      • Added EMC2 to the Optional OBSE plug-in section.
      • Revised the required/optional files section for (hopefully) clearer comprehension.
      • Updated with new/revised game settings
      • Revised Gaining Sneak Experience section, including expanded descriptions of how velocity works in relation to Sneak skill up experience
      • Consolidated sections dealing with Invisibility/Chameleon into one section.
      • Consolidated sections dealing with Detect Life into one section.
      • Consolidated sections dealing with Muffle/Deafness/Blindness into one section.
      • Split off Fade While Sneaking into its own section.
      • Updated Introduction -> Installing SDR
      • Updated Visual Factor Formula Settings -> Lighting Settings -> Scaled Lighting Multiplier
      • Updated Muffle, Deafness, and Blindness Effects -> Deafness/Muffle Effects on the Player -> Oblivion.ini Audio Settings
      • New/revised section for assassination skillup.
      • Revised Troubleshooting / Debug section. Mainly editing as follows:
        • Moved Conclusion to the end of the introduction section.
        • Moved Assassination UI setting to end of the assassination section.
        • Removed UI Initialization message setting.
    • New Modder's Pack with a manual, archive of all scripts, the source code for the .dll and the visual effects hlsl files available for download by 3rd party modders who want to create mods that interact with SDR.
      • Added descriptions for the following functions:
        • sdrGetDistance2
        • sdrReturnDiminishedPercentChameleon
        • sdrReturnDiminishedPercentBlindness
      • Corrected sdrGetDetectLifeNum to sdrCalcDetectLifeShaderNum
      • Updated custom actor values descriptions as follows:
        • corrected avIsTalking to avIsTalkingPenalty
        • corrected avInDialogue to avInDialoguePenalty
        • added avInCombatWithPlayer
      • Updated Custom obse/sdr.dll functions -> Useful Functions -> sdrIniSet
      • Updated Custom obse/sdr.dll functions -> Useful Functions -> sdrIniGet
    • Updated entire website with revised design and content.
      • Combined Tech Support and Q & A into one page and made some minor tweaks/corrections.
      • Updated Mod Compatibility page with info for Children of Cyrodiil and Enhanced Music and Control 2.
      • Updated Installer page with info for using Oblivion Mod Manager with the new omod conversion data.

    Version numbering system change

    The additional periods and the "b" have been dropped from the version. This makes installing SDR compatible with Oblivion Mod Manager's system when using Wrye Bash's omod conversion data, which is limited to a single ".". In addition, dropping the "b" will hopefully eliminate confusion as folks thought it represented "beta" rather than "build".

    The revised nomenclature is: 8.xxx = S.IRB = Series.Iteration Revision Build

    This change only impacts how the version is displayed, and won't impact any internal systems or 3rd party version checking which drops all periods and letters (e.g.8230).

    Programming changes

    • OBSE version 21.1 or later now required for SDR.
    • Optimized all scripts and functions to improve overall performance
    • Created new CAV system for creating/storing/modifying/retrieving custom actor values.
    • Created programming to auto-sweep and clean up CAV arrays for dynamic references that were deleted from the game.
    • Removed the requirement for the Add Actor Values OBSE plug-in
    • Revised how checking for OBSE version works and updated OBSE related error messages to be easier to read with more instructions.
    • Removed "Sneak Skill Clean up" feature that was set up for fixing pre-4.0 SDRs. No longer needed, and there are other tools that can help.
    • Revised how tokens are distributed to actors and initialized. Includes new Child NPC token system.
    • Created a "reboot" quest/system that allows you to reinitialize SDR from the console - avoiding the need for using a clean save technique. It replaces the master data array and forces all tokens on all actors to reinitialize. Recommended if you change settings that would apply to various races/creatures.
    • Revised how SDR starts up to improve initialization times and prevent scripts from running until initialization is complete.
    • Fixed issue where when the game is first launched, the "brightness" of whichever saved game was loaded was much brighter than it should have been.
    • Fixed issue with SDR being disabled after being initialized.
    • Fixed issue with Max Detection Level being set to 0 on a new launch with no max detector reference. Now correctly sets to -100 if there is no max detector.
    • Removed terrain/OBSE version warning message since OBSE 21 is now required.
    • Created new version check variable to allow third party mods to validate which version of SDR is installed in case there is specific version pre-requisite criteria for interoperability.
    • Resolved issues with volume management and EMC2 / Sound Commands compatibility.
    • User can change master volume in audio menu and settings will not only be stored/remembered through the game session, but also saved to a backup sdr.ini file in case the game CTDs while the player is under a deafness effect. This will make sure that game loads with the proper max volume levels at all times before applying deafness/muffle effects (if there are any).
    • Rebooting/Updating SDR was clearing out all the Custom Actor Values, nullifying any active Deafness/Muffle/Blindness effects if the player saved the game, loaded it, and then rebooted it. This has been fixed. Initial set of Custom Actor Values will only be added when the token is first added. Any reboots will merely force refresh of data for actor traits, etc.
    • Revised to be backwards compatible with OBSE v20. v21 is necessary for Oblivion XP compatibility and for capturing terrain type and how it affects the sound of your footsteps. You will get a one time warning the first time SDR determines you have v20 installed instead of v21.

    sdr.dll OBSE plug-in

    • Rebuilt .dll using OBSE v21 source code.
    • Added new iSDRsVersion gamesetting for version tracking.
    • Created new "Get Parent Mod Name" function which directly retrieves the name of the parent mod of a ref.
    • Created new "Get Core Ref ID" function which strips the first two digits from the hexadecimal ref ID and converts it into an integer.
    • Created new "Get/Set/Mod" functions for use with SDR's new custom actor value (CAV) system.
    • Created new functions for calculation the Mastery Level equivalent for Creature skills (combat/magic/stealth).
    • Created new function for determining which detection formula to use.
    • Created new function for calculating which detect life shader number to assign.
    • Added two functions to calculate deteriorating returns for blindness/chameleon in order to work with AV Uncapper settings/formulas.
    • Created a few additional new functions whose sole purpose was to optimize script performance, and thus are not particularly useful outside the SDR/Detection system.
    • Moved the entire detection formula out of the SDR.esm and into the sdr.dll
    • Modified sdr's stealth av calc function to to work with AV Uncapper settings/formulas if detected.
    • Added/Changed various game settings to support all the changes to SDR.
    • Verified/cleaned up all game settings
    • Removed all game settings that are no longer in use.
    • Added the following new game settings:
      • fSDRsAltMinVelocity (default 25)
      • iSDRsSuppressSkillIncreaseMsg (default 0)
      • iSDRsSuppressSkillIncreaseSound (default 0)
      • iSDRsASkUpCloseDistance (default 220)
    • Changed the following game settings:
      • fSDRsAltSkillUpAmount (default corrected from .1 to 1.0)
    • Merged iSDRsAllowMuffle and iSDRsAllowDeafness into iSDRsAllowAudioEffects
    • Added new sdrGetDistance2 function that calculates the distance between two sets of xyz coordinates:
      • sdrGetDistance2 x1 y1 z1 x2 y2 z2
    • Added new sdrMinMax function that makes sure a value falls within a range. If below min, sets to min. If below max, sets to max.
    • Added new commands to get/set .ini values that can be stored in .ini files. Details of usage are in the Modder's Resource Manual.
    • Added back in the scaled lighting adjustment. Default remains at 0. Increase if you want a challenge. Details are in the SDR Player's Handbook in the Visual Factor Formula Settings in the Lighting Settings section.
    • New/revised game settings for assassination skillup section.
    • Removed game setting for UI message for SDR initialization. Only the console will receive initialization messages now.

    .ini file changes

    • Two new ini files are automatically generated: sdr.ini in the Data/OBSE/plugins directory and OblivionBackup.ini in the Data/Ini directory. These are different from the SDR Tweaks.ini file and should not be messed with unless you know what you are doing.

    Detection rule/formula changes

    • Replaced "Detection Package" system with "Detection Formula" system
    • Changed internal settings to use 22 units/foot for all measurement standards
    • Added new game settings to determine multiplier penalties to sleeping actors depending on their "GetSleeping" state.
    • Revised how the flag for the player being attacked by an actor works. Parallels the "on attacked" system that actors used when the player or other actors attack them.
    • Removed "Force Detection Level of Followers feature".
    • Created a work around for an Oblivion bug in which three types of creatures have a light level of 0, regardless of actual lighting conditions. This bug only seems to affect horses, trolls, and land dreaugh, although I've only tested the Oblivion creatures. The work around is going to look for ANY creature that returns a light amount of 0. Then depending on the circumstances and distance from the player they will be assigned a "best guess" light amount value. This is not ideal, but the best I can do at the moment.
    • Changed calculations for determining visual angle.
    • Changed calculations for determining audial angle.
    • Modified how helmets affect sound factor calculations. No longer a multiplier but a - penalty depending on helmet type.
    • Modified how helmets affect LOS calculations.
    • Hoods now impact LOS/peripheral vision at a value of 1 (vs. a fur helmet of 2)
    • Revised/expanded various checks made before detection formula is called. Tests for things like being dead, unconscious, SDR being initialized, token assigned, etc.
    • Minor tweak to how main quest checks/resets detection level thresholds
    • Provided two different settings for No LOS audio detection modifiers. One for interiors and one for exteriors.
    • Changed the default base detection setting to -20 and removed the distance factor adjustment to it.
    • Renamed the "Miscellaneous" detection factor category to be "Meta" category.
    • Moved Detect Life calculations into the "Meta" category.
    • Revised Sight portion of detection formula to account for Invisibility/Chameleon correctly.
    • Changed audio check modifier and skill check modifier defaults to 1.0.
    • Removed short range distances and exponential lighting bonus calculations for performance reasons

    Spell/Magic changes

    • Revised how deafness/blindness/muffle spells function as well as minor name changes and form ID changes.
    • Revised how new spells are added to vendors
    • Added new trap oriented blindness/deafness spells for use by 3rd party modders.
    • Added new Muffle/Blindness/Deafness potions for use by 3rd party modders. Also added the same potions to the Oblivion and Nehrim loot leveled lists.
    • Tweaked how Night-Eye / detect life powers are assigned to NPCs/Creatures to be more accurate and efficient.
    • Revamped under what conditions NPCs cast their assigned detect life / Night-Eye spell/power.
    • Fixed the textures for the Detect Life Shader effects for the following DL Shaders:
      1. Default Oblivion Shader
      12. Bg208's Shader
      13. Migck's Blue Shader
    • Blindess Effects Changes
      • If the Switch Night-Eye Shader .dll plug-in is not detected, all Blindness related features will be disabled.
    • Deafness/Muffled Effects Changes
      • Added deafness audio effects compatibility for Enhanced Music Control 2
        If both Sound Commands and EMC2 are detected, EMC2 will be used and Sound Commands ignored.
      • Revised sequence of starting script to make sure default sound .ini values were loaded before volume levels were reset.
      • Revised how audio effects are calculated and applied
      • When afflicted by deafness, sound volumes are now reduced at the Master and Music levels.
      • Sound volumes are not restored when in menu mode, however, they are restored whenever the game is exited, making sure that your Oblivion.ini values are maintained.
      • By default, Oblivion.ini settings used are pulled from SDR settings and saved to Oblivion.ini, this helps protect the system in case there is a crash in the middle of a game session. This feature can be disabled, and only the Oblivion.ini used as the source.
      • Swapped out a number of global game settings with quest variables
      • Renamed nearly all audio effect variables, as well as added new ones, and removed old ones. Rather than add a complete breakdown here, please refer to the Player's Handbook for all the changes.
      • Fixed visual look of Muffle spell icon.
      • When player is 100% deaf, subtitles are turned off for dialogue and general.
      • When player is partially deaf, subtitles are returned to the default setting. General subtitles are turned off.
      • When player has complete hearing functionality, all subtitles are restored to default settings.
      • Modified debug settings for audio effects to account for changes.
      • Moved updating/modifying the leveled lists feature to a separate function called later during initialization.
      • Fixed spelling of "Muffling" for potions.

    Player Audio/Visual changes

    • Updated player blindness visual effects
    • Minor changes to how deafness is applied to the player
    • Overhauled entire custom Detect Life Shader system, adding new shaders and removing many that were incompatible.
    • Fixed issue with the detect life shaders demo. It now has a separate quest which allows the player script to be more efficient.
    • Tweaked how the night-eye visual effects work
    • Removed option to have night-eye toggle only when in sneak mode
    • Set up player FOV setting to be ignored if left at default so other mods can control it.
    • Removed upper and lower player FOV limits.

    Movement changes

    • Overhauled system for running/sprinting with realistic fatigue and movement rates. Includes rules that allow NPCs to sprint and rules for slowing movement when moving backwards.
    • Revised how actor velocity is calculated and stored
    • Removed the landing/jumping/splashing feature. It wasn't working properly and was impeding performance.
    • Improved code for detecting surface type the player is walking on. Can now determine when an actor is wading through water.
    • Added new follower token that forces an actor to run/sneak if the player is doing the same

    "On Death" changes

    • Added Poison Fix script so that Player can get a kill if target dies due to poison from player attack. Adapted from Oblivion XP with permission and adjusted for SDR's system.
    • Added On Death Event dispatcher to the poison fix and Oblivion XP Compatibility. Requires Oblivion XP Update version 3.4.2 +. If version 3.4.1 or earlier is detected, SDR's poison script will be automatically ignored due to conflicts.
    • Fixed issue in poison script / OB XP compatibility that was giving double kill points when player killed target in first blow with poisoned weapon.
    • Made changes to the On Death Event Handler to resolve unexpected returns, alpha values on death, the "always detected" bug, and the carrion rat problem (see below).
    • Token script now checks for GetDead and removes the token if true. Hopefully combined with the OnDeath Handler changes, this will resolve the carrion rat problem of tokens being removed from corpses and left on the ground.

    Transparency changes

    • Revised how actor transparency is calculated and updated
    • Revised how "Ghosts" and related alpha values are determined when tokens are first added.
    • Fixed issue where NPCs with 100+ chameleon were not completely invisible.
    • Removed Disposition towards player factor for Sneak alpha calculations

    Sneak Perk changes

    • Tweaked how bypassing tripwires and pressure plates work
    • Added scripting to prevent running while sneaking when Sneak is at Novice mastery.
    • Added Apprentice Perk that allows for running while sneaking.

    Sneak Skill-up Experience Systems Changes

    • Revised how alternate sneak skill up points are awarded
    • Added option for sneak skill up system to ignore sleeping potential detectors.
    • Revised min/max skill up distance default settings to be 220 / 1100 units (10 ft / 50 ft) accordingly.
    • If Oblivion XP is detected, alternate sneak skill up system is automatically disabled.
    • Revised how Max Detector and Closest Detector are determined, stored, and updated.
    • Fixed alternate skill up calculatons.
    • Fixed velocity calculations so that movement rate in any direction is calculated correctly. Velocity is updated every .5 seconds for each NPC/Creature/Player.
    • Simplified the debug conditions and data when using the alternate skill up system.

    Assassination Skillup changes

    • Revised how Assassination skill up feature works.
    • Revamped how Assassination skill up points are calculated and awarded via Oblivion XP. Requires Oblivion XP Update version 4.3.1 or later. If an earlier version is detected, points won't be awarded.
    • Added new target sleeping multiplier game setting for assassination skill ups.
    • Tweaked debugging assasinations.
    • Fixed assassination/sneak skill up bumps so that if the next skill level is reached, a message with the drum noise is played to match the other skill ups. Message / sound can be suppressed with new game settings below. Message uses Oblivion string game settings, so it should be compatible with all languages.
    • Revised formula for calculating Assassination skillup points.
    • Now uses dynamic/scaling distance as a modifier instead of "close"/"ranged".
    • Assassination attempts must be made within detection range to get points now.
    • Creatures are now "Exterminated" and NPCs "Assassinated".
    • Game Settings have been overhauled, refer to the Player's Handbook / Assassination section.
    • Oblivion XP / Assassination compatibility fixes, including:
      • Resolved issues with Assassination attempts and passing on XP to Oblivion XP.
      • Revised text sent to Oblivion XP for successful assassinations.
      • Corrected base assassination XP calculation to account for attributes for Oblivion XP.

    AI Behavior

    • Fixed issue where followers continued to mimic what the player did, even when the mimic player option was disabled.

    SM Combat Hide for SDR changes

    • Moved SM Combat Hide features into separate token system.
    • Created two separate tokens for handling SM Combat Hide. One for Adult NPCs, one for Creatures.
    • Created a new array/system to determine when the player is in a cell in which SM Combat Hide features should be suspended. The list is rebuilt whenever a saved game is loaded, so depending on the conditions at the time, cells may or may not be added to / dropped from the list.
    • Added trap for the tutorial quest so that SM Combat Hide is suspended in certain cells until after Emperor dies.

    AV Uncapper / Elys Uncapper Compatibility

    • Added programming and calculations to SDR.esm and sdr.dll that are more "aware" of the uncapper plug-ins if detected
    • Allows for diminishing return calculations for Chameleon and Blindness.
    • Allows for revised calculations when determining effective Sneak skill.
    • Allows for accurately calculating the Sneak skill cap when determining skill up points to be awarded.

    Debug option changes

    • Revamped how tokens are debugged.
    • Revamped how detection calls are debugged.
    • Revised detection detail debugging.
    • Added special debugging for overall performance checking that tracks the number of detection calls made per second.
    • Revised how the Active Features list is constructed and displayed for easier reading in the console
    • Removed the debug setting that used to handle the OBSE warning as it is no longer necessary.

    RenGuardOverhaul_PatchForSDR.esp (v2.8)

    • Found and removed source of string save game bloat.

    Installation Package

    • Changed BAIN installation folder package structure and wizard
      • Correctly detects if SDR Tweaks.ini file is there and if so, deselects the package
      • Looks to see if Enhanced Music Control 2.dll is installed, and if so, deselects Sound Commands Package
    • Removed the Dev versions of the VFX shader packages. They are available as a separate download as part of the Modder's Resource Pack.
    • Changed the folder/file structure of the package, making Sound Commands optional
    • Added omod conversion data so same download will work for OBMM as well as Wrye Bash. Includes script that replicates BAIN Wizard installation procedures.

    Series 7

    Section last updated on May 15 2021 14:13.

    First version release: 7.0.0 - June 23, 2013
    Last version release: 7.3.1 - January 30, 2014

    This series focused on bug fixes and simplifying user customization and support documentation, along with a few minor tweaks here and there. Following is a summary of all the new features/changes in series 7:

    SDR.esm

    • Moved and renamed the Perks and Patches .ini settings and variables into SDR.esm.
    • Fixed issue where all actors encountered were being added to an internal array that was only supposed to track actors that were transparent.
    • Fixed the sdrUninstall quest script so that null or invalid references are skipped when attempting to set their transparency.
    • Fixed issue where the base alpha value was incorrectly being saved and retrieved for the sdrUninstall quest script.
    • Added check to make sure default Alternate Sneak Skill up system does not kick in if Oblivion XP is detected.
    • Added .ini option so that you can have both the Alternate Sneak Skill up system and Oblvion XP running concurrently, if that's what you really want.
    • Fixed issue where if after a clean save and install, and the player was in an exterior cell, all detection levels were broken until the player moved into an interior cell.
    • Fixed issue where if SDR custom detect life shaders were turned off, it wasn't stopping an attempt to apply them to NPCs, causing console spam.
    • Fixed OnCellChange script to check interior cells to see if they are flagged to behave as exterior cells, and then update the detection distances and everything else associated with cell changes accordingly.
    • Updated the initialization portion of tokens to do a "run once" of updating actor values with an "initialization" mode to bypass certain features such as innate chameleon abilities that should be in effect immediately rather than fading in.
    • Removed the option of having "silence spells" (which were only intended to stop someone from casting magic) also make the target of the spell noiseless.
    • Altered game mechanics on temporary blindness/deafness spells / magic effects.
    • Fixed issue where waiting/sleeping did not cancel or reduce duration of visual/audio effect even though the magical effect had ended.
    • Additional pre-cautions to make sure that NPCs/Creatures that have not been fully initialized with all the new settings or are disabled do not utilize the new detection system.
    • Created a quest (startquest sdrrsq) that can be started in the console to allow a user to add the new SDR custom spells to their character in the event that a clean save upgrade from prior version wiped them out.
    • Added "Balrog" and "Lesser Balrog" to the "inclusions" list of Daedra (they are referred to as Daedra in MMM docs, but not flagged as such in construction kit).
    • Fixed a bug where reloading the game was toggling Auto-Night-Eye off unexpectedly for characters with innate night vision. Default behavior when you begin a new game with SDR is that auto-night-eye will be toggled off. From that point forward, the game will remember your most recent toggle choice and turn on/off auto-night-eye accordingly when you load a saved game.
    • Fixed startup quest so that SDR will initialize with a new game/character. (It was only initializing after saving and reloading a game)
    • In order to (hopefully) prevent the issue where victims of an attack can't seem to detect their attacker, these game settings have been changed to the following defaults:

      • fSneakUnseenMin 0
      • fSneakNoticedMin -20 (was 0)
      • fSneakLostMin -20 (was 0)
      • iAICombatMinDetection -40 (was 0)
      • iSDRsBaseValue -65 (was -25)
      • iSDRsDetectionAdjInCombat -> iSDRsBehaviorAdjInCombat 18
      • iSDRsDetectionAdjSearching -> iSDRsBehaviorAdjSearching 15
      • iSDRsDetectionAdjHostile -> iSDRsBehaviorAdjHostile 12
      • iSDRsBehaviorAdjDefault 9 (new)
      • fSDRsSoundCheckMult 1.5 (was 1.0)
    • *NOTE: on the above settings, the first four are HARDCODED and cannot be altered. The SDR main quest script checks every 10 seconds and resets them if some other mod changes these values. The nearest equivalent to those thresholds are the Behavior Combat/Hostile/Searching/Default settings, so tweak those up/down accordingly. The formula applies the value in four areas, so when considering how much to increase/decrease by, multiply by 4. For example, a value of 9 will add a total of 36 points, 10 will add 40 points, etc.

    SDR.ini

    • Renamed the SDR Core.ini file to just SDR.ini
    • Added the revised Perks and Patches .ini settings into the SDR.ini file, allowing SDR Tweaks.ini file to be used to tweak the perks and patches .ini settings in addition to the SDR.ini settings.
    • Added more races to the race/creature traits lists, including the following:
      Race/Creature NameCategorySource Mod
      AkavirianHuman RacesReclaiming Sancre Tor
      Alessian YouthHuman RacesReclaiming Sancre Tor
      AQWorkerRaceElven RacesLet The People Drink!
      AyleidElven RacesKnights of the Nine - Revelation (1.3.7)
      ChimerElven RacesKnights of the Nine - Revelation (1.3.7)
      Chronicler 1Human RacesDark Brotherhood Chronicles
      Chronicler 2Elven RacesDark Brotherhood Chronicles
      Ghost RaceHuman RacesBetter Cities Resources (5.3.3)
      GiantGiantsMartigen's Monster Mod (3.8)
      Imperial YouthHuman RacesReclaiming Sancre Tor
      MannimarcoRaceHuman RacesMannimarco Revisited
      Marble MannequinStatutes and MannequinsReznod Mannequins (3.0)
      ModrathKhajiit RacesReclaiming Sancre Tor
      Ohmes-rathUKhajiit RacesIntegration
      Morihaus RaceMinotaursKnights of the Nine - Revelation (1.3.7)
      No Speech ImperialHuman RacesKnights of the Nine - Revelation (1.3.7)
      Ogre Mage in Human FormOgresBetter Cities Resources (5.3.3)
      ReaversHuman RacesMartigen's Monster Mod (3.8)
      Redguard YouthHuman RacesReclaiming Sancre Tor
      Spider DaedraSpider DaedraDark Brotherhood Chronicles
      Talking HeadHuman RacesKnights of the Nine - Revelation (1.3.7)
      UndeadHuman RacesMartigen's Monster Mod (3.8)
      WatcherElven RacesDark Brotherhood Chronicles
      WethylHuman RacesKvatch Rebuilt
      Wooden MannequinStatutes and MannequinsReznod Mannequins (3.0)
      Zombie ArgonianArgoniansMartigen's Monster Mod (3.8)
      Zombie BossHuman RacesMartigen's Monster Mod (3.8)
      Zombie ElfElven RacesMartigen's Monster Mod (3.8)
      Zombie ImperialHuman RacesMartigen's Monster Mod (3.8)
      Zombie KhajitKhajitMartigen's Monster Mod (3.8)
      Zombie OrcOrcsMartigen's Monster Mod (3.8)
    • The SDR.ini file is no longer loaded. All default settings are loaded internally and user desired changes loaded from the SDR Tweaks.ini file. SDR.ini file should only be used as a reference by the player. This was done to reduce technical support headaches.

    SDR Perks and Patches

    • [Oblivion/Nehrim]: Removed the SDR Perks and Patches - Oblivion/Nerhim.ini file from the installation package as it is no longer needed.
    • [Oblivion/Nehrim]: Fixed issues that were preventing Perks and Patches .esp from initializing.
    • [Oblivion/Nehrim]: Minor changes to how it reads and checks versions for compatibility between the .eps and the .esm.
    • [Oblivion/Nehrim]: Changed how they are initialized to make sure that they aren't running when the main SDR.esm is initializing and then stops the main PP quest from running after the PP initialization is over. This improves performance and reduces the chance of the Perks and Patches features from being run/intialized when they shouldn't.
    • [Oblivion/Nehrim]: Expanded the number of Merchants that can sell the new SDR spells, but higher level spells won't be available unless the character is of a higher level. Who has the spells? There are five merchants that sell the blindness/deafness spells, and two that sell the muffle spells. You'll just have to find them. Although Maius, Nara, and Utilia still sell them. In Oblivion, the new Saebel NPC sells them, and can usually be found in the Arboretum.
    • [Oblivion]: Fixed issue in which encountering the Saebel NPC was spamming "add spell" messages to the console.
    • [Oblivion]: Found an alternate method to add the Saebel NPC to the Arboretum so that SDR Perks and Patches[Oblivion].esp no longer requires to be in a special load order relative to other mods (such as Better Cities).
    • [Oblivion]:Changed the Aleswell Invisibility effect from 80 Chameleon to 100 Chameleon to make compatible with no refraction option.
    • [Oblivion]: Removed the 'Find Saebel' test quest entirely.

    SDR_OBSE.dll

    • New function (kindly provided by Kyoma!): sdrGetDetectionLevel2 can pull the actual detection number, not just 0 to 4 but -100 to 1000+, for any detection pair.
    • Removed the following game settings:
      iSDRsSilencePerk game setting
      fSDRsTempDeafRecoveryRate
      fSDRsTempBlindRecoveryRate
    • Added the following game settings:
      sdrQ.vDurationTempBlind
      sdrQ.vDurationTempDeaf

    SwitchNightEyeShaders.dll

    • Created customized version (5.1) that suppresses console spam when shaders are successfully assigned unless flagged with an optional 1 as a second parameter.

    Omod installer

    • Fixed bad 'endif' in installer script. Also added check to always ask if the user wants to install the tweaks.ini file, since OBMM cannot detect if the tweaks file exists or not.
    • OBMM Installer wizard no longer checks OBSE version. It was set to check for a minimum 20, but user with 21 were getting installation errors.

    .ini User Guide.pdf

    • Updated to reflect the changes since series 6 through 7.1.0.

    Series 6

    Section last updated on May 15 2021 14:13.

    First version release: 6.0.0 - May 30, 2013
    Last version release: 6.2.3 - June 22, 2013

    This series expanded and improved upon the Detect Life shader options, how Detect Life impacts the detection formula, made a system-wide attempt an improving performance, rewrote the detection formula, and had numerous other tweaks and fixes. Following is a summary of all the new features/changes in series 6:

    File Changes

    • Renamed all files.
    • Made SDR Core.esp into SDR.esm master file.
    • Swapped out ( ) with [ ] for sub-files for better reading by game engine in Oblivion loader.
    • Renamed and moved all .ini files into a data\ini\SDR sub-folder
    • Created a SDR Tweaks.ini file to store your favorite changes which will override whatever settings are in the SDR Core.ini. This allows you to tweak the settings without overwriting the core.ini.
    • Redesigned the .ini files to allow for collapseable sections for those who use Notepad ++ and want to install a custom language style
    • Updated both Oblivion and Nehrim Perks and Patches files to use SDR.esm as a master

    Detection Formula Changes:

    • Rewrote nearly the entire formula, almost from the ground up.
    • Default Oblivion detection formula is no longer used as a backup when performance is low. Instead a somewhat lighter "no frills" version of the SDR detection formula is used instead.
    • Oblivion threshold system no longer thwarts blindness or no LOS when detector is in combat with target.
    • Added new detection package (7) that dynamically determines which formula variant to use based on current fps.
    • Redesigned how peripheral/binocular vision works.
    • Revised and expanded race/creature traits to include the following:
      • Hearing quality (5 posibilities, ranging from deaf to superior)
      • Hearing type (3 possibilities, depending on ear structure)
      • Vision quality (5 possibilities, ranging from blind to night)
      • Customized peripheral vision field of view
      • Customized binocular vision field of view
    • Added adjustments to vision/hearing impairment depending on the type of helmet worn.
    • Added scaling improved hearing for vampires depending on the stage of their vampirism.
    • Removed invisibility/chameleon magic effect to be able to affect the sound factor.
    • Added new temporary blindness, deafness, and temporary deafness actor values.
    • Added in code to correctly capture and use the new deafness and temporary deafness actor effects in the sound portion of the detection formula.
    • Added calculations that take into account wind and rain for calculating the sound factor.
    • Removed the "is riding horse" multiplier. Mounts are handled differently.
    • Moved the "on attacked" detection bonus into the skill factor check only.
    • Rewrote the formula for how day/twilight/night vision thresholds are calculated.
    • Rewrote how jumping/landing works with sound penalties.
    • Fixed minor error in how movement type is calculated.
    • Changed the Sleeping Skill factor from a flat penalty to a multiplier
    • Changes to calcuating actor's base weight:
      • Fixed sound formula when calculating impact/weight of feet when landing/splashing/walking/running.
      • Replaced calculations for determinig creature/race weight with system using "foot weight" base plus encumbrance.
      • Added new "sdrGetCreatureFootweight" function to SDR_OBSE.dll.
      • Removed iSDRsApplyMassToFootsteps game setting as it is no longer used.

    Game settings

    • Completely replaced the use of Oblivion's fSneak game settings with SDR's system
    • Added numerous game settings to support the new system
    • Removed a few game settings that were no longer being used
    • Created new sdr_obse.dll to support the new game settings

    New Detect Life Features:

    • Expanded to seven different options for how Detect Life works, taking into account the undead, vampires, and daedra, along with the option for a custom shader for each scenario.
    • Over 50 custom Detect Life shaders to choose from, provide by various modders (with permission).
    • Option to use keyboard commands to rapidly demo the shaders on the player so you can determine which ones you would like to use for the new custom detect life shader options.
    • Rewrote the scripts for processing and applying Detect Life settings to detection formulas and effect shaders.
    • Updated compatibility information for Supreme Magicka in regards to detect life shader conflicts.
    • Bundled in Tejhon's Detect Life texture as part of the file package in a new textures\SDR sub-folder.
    • Repointed Saebel Blue shader to use an Oblivion.bsa texture instead of a BG magic EV.bsa texture.

    NPC/Player Token Changes:

    • SDR now recognizes when a new version of SDR has been installed or if the token distribution spread has changed since the last load. This forces the tokens to reinitialize and means that using a "clean save" technique should not be necessary when updating SDR to future versions after this release.
    • Changed the NPC Token Script delay timer to a frame timer for more flexibility and efficiency.
    • Removed the OnDeath script handler and replaced it with code in the NPC token script.

    Transparency Calculations:

    • Rewrote how the NPC/Player transparency was being calculated.
    • Fixed formula for alpha value calculations for creatures that have an unusual base alpha value due to magical effects.

    New spells

    • Added spells that cause temporary deafness/blindness.
    • Added blindness visual effect when player is blinded.
    • Added deafness audio effect when player is deafened.
    • Added SoundCommands.dll OBSE plug-in as part of the installation to support new deafness effects.
    • Added "Muffle" spells. When cast on the player, the volume of the player's footsteps reduces in proportion to the magnitute of the muffled magic effect.
    • Added NPC "Saebel Blackston" to Oblivion Perks and Patches. He sells the new spells. You can find him somewhere in the Imperial City. Try the Arboretum first. Other places to look are the Arcane University courtyard, Waterfront District, and the All Saints Inn in the Temple District.
    • Added leveled spells to the SDR.esm and scripted in adding them to the leveled lists with the SDR Perks and Patches (Oblivion).esp. That means your enemies will be able to cast temporary deafness and temporary blindness spells at you. You are in for a nasty shock! (Thanks to migck for the code.)
    • Added custom spell icons for blindness, deafness, and muffle magic effects (requires Custom Spell Icon plugin).
    • Added two new game settings that allow you to disable/enable all blindness/deafness spells, effects and formula calculations
    • Updated Perks and Patches (Oblivion) to take into account new game settings. If allow blindness/deafness/muffle is turned off, those respective spells will not be available for purchase from Saebel Blackston
    • Updated Perks and Patches (Nehrim) to add the new temp blindness/deafness spells to the LL2CreatureLich100 and MOB05MagierRandomSpell spell leveled lists. So watch out.
    • Updated Perks and Patches (Nehrim) to add the new SDR spells to Nehrim merchants as follows:
      Maius : Muffle spells (if iSDRsAllowMuffling is set to 1)
      Nara: Blinding Attack spells (if iSDRsAllowBlindness is set to 1)
      Utilia: Deafening Attack spells (if iSDRsAllowDeafness is set to 1)
    • Updated all muffle/blindness/deafness effects/spell scripts to not function if the relevant allow muffle/blindness/deafness setting is disabled.
    • Updated all detection formula scripts to ignore blindness/deafness if the relevant allow blindness/deafness setting is disabled.

    SDR Core.ini file

    • Added: vPlayerFootstepsVolume - determines the default volume of player's footsteps.
    • Added: sdrQ.vBlindnessMultiplier - determines how powerful the blindness visual effect is.
    • Added: settings to allow you to change the path of the custom spell icons if you don't like the ones I provided.
    • Added: sdrQ.vPlayerFOV - default set to Oblivion's default of 75 (resolves issues players were experiencing).
    • Changed: iSDRsLightingBumpTorch game setting from 20 to 10
    • Changed: iSDRsLightingBumpLightSpell game setting from 10 to 5
    • Changed: lighting multiplier if on fire from *10 to *5
    • Changed: sdrQ.vCompanionDispoThreshold setting from 40 to 10.

    Followers

    • Changed how followers are calculated.
    • Summoned creatures now run/sneak if their summoner is also running/sneaking.

    Alternate Sneak Skill up system

    • Added alternate Sneak skill-up system that is more challenging and realistic.
    • Revised description for alternte sneak skill up to recommend default setting of .75 for points awarded if playing Nehrim.
    • Modified various settings and code to support the new alternate skill up system better.
    • Added option for displaying sneak skill up debugging, including current % towards next sneak skill level.

    Assassination Skill up system

    • Added assassination skillup option to SDR Perks and Patches [Nehrim] mod.
    • Fixed how assassination skillups are handled in the Perks and Patches mods.

    Auto-Night-Eye

    • Cleaner method of auto-adjusting Night-Eye shaders, now varies with player's vision threshold.
    • Tweaked the Auto-nighteye start up behavior to only load shaders if Auto-night game setting is set to 1, the shader switcher plug-in is installed, and the shaders are installed.

    Miscellaneous Changes:

    • Reviewed and rewrote all scripts to improve overall effiency.
    • Changed how auto-moving impacts sneaking and detection.
    • Added option to customize the POV the player has when looking at the screen to change from the default 75 to an .ini settable amount.
    • Added feature that makes uninstalling SDR less painful by undoing any Chameleon refraction/auto-nighteye/transparency settings.
    • Updated all scripts to make sure that if SDR is disabled for any reason that the scripts won't execute.

    Documentation

    • Updated the user manual (.ini User Guide.pdf) to cover all the new .ini settings, how to get the new spells via Perks and Patches, and a resource guide for 3rd party mod developers that want to use SDR features.

    Installers

    • Updated WryeBash Installer Wizard to automatically select the SDR Tweaks.ini sub-package if SDR.esm is not detected as being installed already.

    Mod Compatibility

    • Created new patch for Reneer's Guard Overhaul that has more efficient scripts, is SDR friendly, and allows you to completely remove the configuration ring and only use the .ini file.
    • If you have Better Cities installed, you need to load SDR Perks and Patches [Oblivion].esp before any/all of the following:
      - Better Cities Full.esp
      - Better Cities Full - B&M Edition.esp
      - Better Imperial City.esp
      - the Better Cities IC Arboretum.esp

    Series 5

    Section last updated on May 15 2021 14:13.

    First version release: 5.0.0 - December 20, 2012
    Last version release: 5.0.1 - December 22, 2012

    This series was short lived, but added some new features and made enough changes to justify a new series number. Following is a summary of all the new features/changes in series 5:

    Changes to SDR Core.esp

    • The "sdrIniQ." has been changed to "sdrQ." for all the quest variables.
    • A number of quest variables have been converted into game settings.
    • Created an alternative skill up system when sneaking.
    • Added new options for detection bonuses upon successful attacks.
    • Added option to keep auto-move while sneaking, but with a penalty.
    • Added new game settings and multipliers to take into account the terrain being walked/run on.
    • Added new modifiers for overall encumbrance.
    • Added new options to detect life options in regards to vampires and the undead.
    • Revised calculations for determining when NPCs check to cast Night-Eye/Detect Life spells.
    • Fixed bug that returned out of the NPC token script too early when a Night-Eye/Detect Life spell was cast.
    • Improved programming surrounding "Player Fades While Sneaking" features, including new option to ignore followers' detection of the player when calculating alpha fade.
    • General minor bug fixes and tweaking/review of all scripts to maximize efficiency.

    Changes to SDR Perks And Patches.esp

    • Added more challenging sneak attack multiplier scaling, which is now the new default, in the SDR Perks and Patches .ini file. Also note that I've moved the numbers around. If you want to use your old setting, unless it is the default vanilla (0), just add 1 to what your previous setting was. The new default setting is:
      set sdrPPiniQ.vSAttackOpt to 1
      MeleeRanged
      Novicex2x1
      Apprenticex3x1.5
      Journeymanx4x2
      Expertx5x2.5
      Masterx6x3

    Changes to SDR Thieves Arsenal Patch.esp.

    • This patch has been folded into the SDR Core.esp, and is no longer needed.

    Changes to SDR_obse.dll plugin.

    • Revised SDR_obse.dll to handle new game settings.

    Changes to requirements.

    • Requires OBSE v21 + for terrain features.

    Series 4

    Section last updated on May 15 2021 14:13.

    First version release: 4.0.0 - November 26, 2011
    Last version release: 4.5.5 - June 6, 2012

    This series had some major changes. It renamed the main .esp from "Sneaking Detection Recalibrated" to "SDR_Core", made it masterless and created separate Perks and Patches.esps for Oblivion/Nehrim. It also introduced new actor values and thus the need for the Add Actor Values OBSE plug-in. Following is a summary of all the new features/changes in series 4:

    General updates:

    • Updated / revised entire SDR website.
    • Updated .ini User Guide.pdf manual.
    • Renamed all the SDR .esp files

    SDR_Core.esp:

    • .esp made masterless and no longer requires Oblivion.esm
    • Various improvements to script calculations and overall efficiency.
    • New custom actor values to improve detection formula performance
    • Token Changes:
      • Tokens added back to all actors to process detection related actor values and other features
      • Revised initialization and token script functions for greater accuracy and flexibility
      • Corrected issue with Tokens not being distributed with Easy Detection package.
      • Resolved missing mesh issues when dealing with Carrion Rats.
    • OBSE Changes:
      • Corrected issue with capturing whether or not OBSE was installed, and detecting which version.
      • SDR will now always be disabled if missing any required OBSE plug-ins, instead of defaulting to Easy Detection package.
    • Revised "Sneak Skill Cleaning" feature to only apply to persistent actors, and can be turned on/off as needed
    • Detects if Perks and Patches is installed, and then runs the Perks and Patches initialization quest after main SDR is initialized when game is started/loaded.
    • Added option for debugging/viewing all game settings (requires Conscribe). To use, follow these steps after installing ConScribe and the new Sneaking Detection Recalibrated.esp:
      1. Launch Oblivion
      2. Load a saved game
      3. Wait a few seconds after the Sneaking Detection Recalibrated Initialization message
      4. Exit the game
      5. Go to the following directory: (drive:\dir\)Oblivion\Data\ConScribe Logs\Per-Mod
      6. Open the following file: ini SDR game settings dump.log
      There you will see a list of all the Oblivion game settings and custom game settings that SDR uses and what their values are. [note: the console message when initializing will say it's version 4.0.2, because I forgot to update that bit, whoops.]
    • Formula Changes:
      • Revised and upgraded many of the detection sub-formulas (Sight/Skill/Sound)
      • New formula change in terms of how movement penalties/multipliers are calculated and applied.
      • Movement Penalties now calculated dynamically based on the movement rate.
      • Added break points to prevent the advanced formulas and scripts from firing when either the detector or the target was disabled.
      • Changed the auto-collision feature to be disabled if the detector is in a deep sleep (GetSleeping = 3)
      • Added the option to force the detection level of followers when running detection checks against the player.
      • Added two additional detection packages: 5 = manually toggle through 0 to 4, 6 = dynamically adjusts depending on the number of creatures / NPCs in the area and the threshold settings.
    • Removed splashing/landing tracking from non-player actors.
    • Transparency rules:
      • Revised rules for calculating transparency and refraction
      • Added "edged" outline effect of player if they have a high Chameleon rating.
      • Added setting to default back to refraction effect for player Chameleon values of 100+
      • Creatures can now fade while sneaking (if they are capable of sneaking)
      • Added option for the player to fade while sneaking, depending on how well the player is detected.
    • Vision changes:
      • Made Peripheral Vision features more specific in terms of which races/creatures they apply to based on the "skeleton.nif" path of the base creature form.
      • New Day Vision/Twilight Vision/Night Vision options, with user customizable lists in the SDR Core.ini file, and modified effects.
      • Added new auto-updating dynamic Night-Eye effect that changes color/brightness/peripheral blur depending on the lighting conditions. Includes Scanti's SwitchNightEyeShaders OBSE plug-in, bundled in.
      • Added optional SDR_PurgeNightEyeVisualEffect.esp for removing the "permanent" Night-Eye effect if the end user decides to uninstall SDR at some point in the future.
    • Added new features to assign Detect Life and Night-Eye abilities and spells to NPCs, as well as rules to use them
    • Added a version of SM Combat Hide, tailored for SDR. (with permission)
    • Minor changes to initialization messages, with option for verbose list of active features of both the Core and Perks and Patches printed to the console on startup.
    • Modified the non-line-of-sight moving light sources calculations. Detectors were picking up moving light sources, even though they were on the other side of a wall because they were within the "radius" and did not have "line-of-sight". So I added the requirement that the target has to have line of sight of the detector. It's not ideal, but the alternative is worse, and there is no method I am aware of to pick two points and determine what and what kind of obstructions are in the way between them.
    • Revised calculations for determining an actor's unconscious state.

    Perks And Patches.esps - OB = Oblivion, NH = Nehrim

    • Secondary perks and patches features split off into separate .esps that are oriented to the game world (Oblivion or Nehrim) - they fold in features from the previous SDR Mod Compatibility patch.
    • Identifies link to main Sneaking Detection Recalibrated.esp and disables itself if either SDR is disabled, or SDR version is not minimum version required for Perks and Patches.
    • Does not automatically initialize on its own at game start/load.
    • OB: Added option to make assassination experience bonus either flat or scaled.
    • OB: Added option to customize exactly what the experience bonus is, with separate settings for melee and bow/staff assassinations.
    • OB/NH: Moved Sprinting features previously in main Sneaking Detection Recalibrated.esp over to Perks and Patches.
    • OB/NH: Made "X" the default sprint key instead of the grab key to reduce the number of mod conflicts.
    • NH: Added same Journeyman Sneak perk of bypassing basic pressure plate traps and tripwires that was in Perks and Patches for Oblivion to the Perks and Patches for Nerhim.
    • Modified description of Journeyman Sneak perk if Detection Package is > 0.

    SDR_OBSE.dll

    • Added/changed/removed many custom game settings

    New Requirements

    • New OBSE plug-in required: Add Actor Values

    .ini Settings

    • Revised/simplified .ini structure
    • Added Token Performance optimization options to the .ini settings.
    • Revised default minimum token delay time to reflect changes to the token script.
    • Added variables to determine how much a given armor/cloth category can be off-set with skills.
    • Added max chameleon value cap, before effectiveness is calculated.
    • Revised and expanded options for debugging detection of Player.
    • Added option to restrict advanced detection calls to player or certain groups, improving performance.
    • Added new Peripheral Vision customizable lists.
    • Added new "collision" bump
    • Revised the default SDR Core.ini settings for the transparency minimum of the player (visual only):
      set sdrIniQ.vPlayerMinTransparency to 40 ; SDR: 40
      set sdrIniQ.vBaseChamAlpha to 80 ; SDR: 80
    • Removed the following .ini line of code, as it is no longer used:
      setnumericgamesetting iSDRsDbgNoLOS 0 ; SDR: 0, 1 enables
    • Added the following SDR Core.ini settings:
      set sdrIniQ.vEdgedEffectThreshold to 75 ; SDR: 75
      set sdrIniQ.vUseRefractionWhenNeeded to 1 ; SDR: 1, 0 Disables
      set sdrIniQ.dbgPlayerTransparency to 0 ; SDR: 0, 1 enables
    • Added the following SDR Core.ini settings:
      These are for the dynamic detection package adjustment
      set sdrTokenQ.vThreshold3 to 10 ; SDR: 10
      set sdrTokenQ.vThreshold2 to 15 ; SDR: 15
      set sdrTokenQ.vThreshold1 to 5 ; SDR: 5
      set sdrTokenQ.vThreshold0 to 25 ; SDR: 25
      These are for assigning the manual detection package toggle keys.
      set sdrIniQ.vDetectionToggleKeyUp to 52 ; SDR: 52 . (>)
      set sdrIniQ.vDetectionToggleKeyDown to 51 ; SDR: 51 , (<)
      set sdrIniQ.vDetectionToggleKeyMod to 157 ; SDR: 157 Cntrl (Right)
      This setting debugs the detection package, and shows number of creatures, NPCs, followers, and FPS.
      set sdrIniQ.dbgDetectionPackage to 0 ; SDR: 0, 1 enables
    • Revised the following SDR Core.ini settings:
      set sdrIniQ.vDetectionPackage to 6 ; SDR: 6 / Obv: 0

    Mod Compatibility

    • Added compatibility for Bare Necessities
    • Added compatibility for Basic Primary Needs
    • Changed third party mod penalties to just a general adjustment that can be applied to the detector and/or the target to simplify 3rd party mod programming.
    • Added recommendation for Sneak icon settings when working with HUD Status Bars.

    Website & Documentation

    • Updated Change Long on web site.
    • Revised the .ini User Guide to be easier to read in terms of spacing, table of contents, and feature headers.
    • Updated .ini User guide to reflect all the new changes.
    • Added new Modder's Resource Pack web page that covers how 3rd party mods can interact with SDR.
    • Added optional Thieves Arsenal Patch that prevents unconscious actors from detecting the player or from attempting to cast Detect Life / Night-Eye spells.

    Installers

    • Added OBMM version, with installer wizard.
    • Added BAIN installer wizard to WryeBash installation package.

    Series 3

    Section last updated on May 15 2021 14:13.

    First version release: 3.0.0 - October 13, 2011
    Last version release: 3.1.0 - October 23, 2011

    This series was the first really big jump in overall design, introducing a custom OBSE SDR.dll plugin that completely replaced Oblivion's default detection formula. In addition, this dedicated website was created for support. Following is a summary of all the new features/changes in series 3:

    Revised Infrastructure:

    • New OBSE plug-in dll that completely replaces Oblivion detection with my own system
    • Moved a couple of custom user function scripts out of the .esp and into the .dll as custom functions to hopefully boost performance
    • Moved several options out of the three Basic/Advance/Hardcore package settings into a separate "Immersion" settings section.
    • Player Immersion requires a token for the special player based immersion features (like sprinting or snuffing invisibility)
    • NPC Immersion requires a token for the special NPC based immersion features (like NPCs fade while sneaking)
    • This will now give you the option to play a less immersive game without tokens to help boost performance.
    • .ini and detection formula are reorganized into Sight / Sound / Skill / Miscellaneous categories for easier processing and user customization
    • Detection between NPCs now functions exactly as it would between an NPC and the player
    • Removed scripting for tracking companions (no longer necessary)
    • More efficient codes and various bug fixes.
    • Revised how the initialization script functions for greater accuracy.

    Revised Effects Of Invisibility / Chameleon

    • Invisibility is no longer 100% effective across the board
    • Separate ini settings for Chameleon / Invisibility across all three major detection categories
    • Minimum transparency amount for Chameleon with "No Refraction" is now customizable in the .ini file

    Expanded / Revised Movement

    • Expanded movement types to take into account combinations drawn from: not moving, turning in place, walking, running, jumping, sprinting, in air, flying, swimming, underwater, etc.
    • Updated all sight / sound detection factors per the new movement types.
    • Added a number of .ini settings to allow customization of movement type effects

    Sight / Sound / Skill Factor Changes

    • Added trap for if character is on fire, and if so they get a light bump bonus of 10 * the torch bump.
    • Bumps for moving light sources on target when target has LOS of detector but detector does not have LOS of target, and detector is within radius of moving light source.
    • Added sound detection bump against the player every time he lands / splashes down from being in air.
    • Added sound penalties for drawing/sheathing your weapon, dynamically modified by actions and weapon type.
    • Revised how weapon and gear penalties are calculated
    • Added penalties to detection if detector is significantly hurt / fatigued
    • Added skill factor bump multiple for crimegold on an actor
    • Added bump for value of equipped gear / clothing, with adjustments due to detector's mercantile skill. Ini settable

    Other Detection Formula Changes:

    • Changed the short range bump to be on a linear scale, rather than short bursts at three pre-set distances. User can now customize the max bump, as well as the minimum and maximum range of the bump zone.
    • Added infrastructure for 3rd Party Mods to inject bonuses/penalties to detecting the player directly into SDR's detection formula, and includes:
      • Four quest variables that are used by SDR's detection formula.
      • Each variable applies to either the Audio, Visual, Skill or Overall detection formulas.
      • A script that can be run remotely to update the variables using the "RunScriptLine" OBSE funciton.
      • Example .esp, and documentation are still forth coming.

    Player Token Immersion Features

    • Added Sprinting, including revised running rates, fatigue burn, defensive adjustments, and detection adjustments.
    • Journeyman perk replaced with ability to walk over pressure plates and through trip wires while sneaking.
    • Expert perk replaced with ability to sprint while sneaking.
    • Revised the descriptions of the Journeyman and Expert description when sneak levels up to those mastery levels.

    NPC Token Immersion Features

    • Only distributed to NPCs (not creatures)

    Assassination Skillups

    • New feature that replaces Marksman Skillup from v2, gives bumps towards next Sneak Skill level for undetected kills.
    • Added two different handicaps for assasinations, one for melee attacks, and another for bow/staff attacks.

    Miscellaneous

    • Broke up sleeping effects into different settings for each of the different categories (sight, sound, skill)
    • Added "mounted" multiplier that is applied towards Sound and Sight detections if target is riding something.

    Mod Compatibility

    • Oblivion XP: provided xp award option for successful assassinations.
    • Real Sleep Extended: penalties stack up against your Sneak skill for the purposes of avoiding detection if you don't get enough sleep
    • Removed the SneakSkill game detail override and replaced with SetDescription OBSE functions so that SDR would not override the sneak skill up increment amounts settings. Helps compatibility with all mods that affect skill leveling.
    • Revised how Sneak Attack Multiplier settings are called/loaded to allow option to avoide conflict with other mods that overwrite the same settings. (OOO for example).
    • Created SDR Compatibility Patches.esp to resolve unique compatibility issues with specific 3rd party mods. Downloadable as a separate .esp.

    Documentation

    • Completed rewrite of .pdf manual
    • Completed rewrite of .ini
    • Updated readme.txt
    • New dedicated website: http://www.saebel.net/sdr.php

    Series 2

    Section last updated on May 15 2021 14:13.

    First version release: 2.0.0 - May 25, 2011
    Last version release: 2.0.6 - August 1, 2011

    This series made major changes that affected detection. It also introduced new peripheral vision optios, Chameleon refraction/alpha replacement, Sneaking transparency for NPCs, and sneak movement rates. Following is a summary of all the new features/changes in series 2:

    General Changes

    • Broke scripts up into smaller functions that could be called from player and NPCs alike.
    • Overhauled scripts and variable naming conventions to be more efficient.
    • Completely redid almost every formula, and rebalanced default .ini settings accordingly (see below)
    • Included option to load SDR with default settings if .ini is missing. User is warned with a message box if that occurs.
    • Rewrote the messages that pop up when you advance to Apprentice / Journeyman / Expert / Master in Sneak.
    • Added option for removing Sneak boosting bonuses for NPCs that are followers of the player.
    • Added option to have Light magic effects auto-cancel Invisibility. (off by default)
    • Made torch/light spell effects on Chameleon effectiveness into separate ini settings.
    • Split up the disable auto-move and sleeping detection adjustments to allow for better inter-mod compatibility
    • Added option to reduce proximity bonuses to detectors if Oblivion determines player is still in line of sight while detector is sleeping. (40% reduction by default)
    • Removed the scaled movement rate while sneaking feature. It was causing too many problems.
    • Added option to directly set sneak speed multiplier. It applies to anyone sneaking, regardless of Sneak skill level. Default is .5, vanilla Oblivion is .6.
    • Minor performance scripting improvements
    • Updated / Corrected Readme.txt file
    • Updated / Corrected User Manual.pdf file
    • Updated / Corrected .ini file with revised default settings
    • Revised calculations of "true" Sneak skill levels

    Basic Settings

    • Revamped the sneak movement speed / sneak mastery so that it applies equally (mostly) to NPCs and player, as well as provide more customization flexibility.
    • Fixed bug where custom light level offset was being replaced by old SDR light level offset programming that I forgot to delete.

    Advanced Settings

    • Reduced the default combat penalty adjustment from 50 to 35
    • Reduced the default light penalty multiplier to 1 to accommodate the new Hardcore formulas.

    Hardcore Settings

    • NPCs that hold a lit torch will now also have any invisibility effects cancel out on them if the option is selected for players in Basic settings.
    • Changed the short range boost from two distances to three, as well as increased the range and penalty multiplier of each.
    • Reduced Tracking of suspicious activity bonus to 30
    • Revised how bumps for torches and light spells work, and provided user customizable settings
    • Added new option for exponential curved lighting bonus to be spotted, rather than just a linear one. The degree of bonus can be changed in the ini settings.
    • Added new peripheral vision adjustments. Ini settings allow adjustment to scale, as well as option to disable for creatures and Argonians.
    • Added new option to replace Chameleon effect with alpha shading. Applies to player and NPCs.
    • Added option for NPCs to become more transparent if they are sneaking. Transparency amount depends on how well they can sneak in comparison to player's Sneak skill and other environmental factors.
    • Added a sub-setting that adjusts how well you can see someone based on their disposition towards you, making it much easier to see allies, and harder to see enemies.

    Debug Settings

    • Removed debug text for sneak movement multiplier when sneak mastery goes up as it no longer applies.
    • Added debug text option to show NPC Alpha channels and factors that go into calculating them.
    • Added option to supress initialization message. (off by default)
    • Added option to display message whenever an NPC start/stops following the player. (off by default)

    Series 1

    Section last updated on May 15 2021 14:13.

    First version release: 1.0.0 - March 1, 2011
    Last version release: 1.0.4 - April 4, 2011

    This is the series that started it all. A major experiment in re-defining how detection works, sneaking, and how the player interacts with other NPCs. Unfortunately the original feature list is long gone, so all that is available are the changes made after the initial release:

    General Changes

    • Changed tokens to side weapon slots instead of ring slots.
    • Updated manual to reflect changes.
    • OBMM Installer version added.

    Basic Settings

    • Added option to set scaled movement values to taste
    • Moved light level offset from Hardcore to Basic Settings
    • Made the light level offset a fully customized number, instead of just 1 or 0

    Advanced Settings

    • Added option to set minimum detection levels.

    Hardcore Settings

    • Added audio gear penalties to detectors if they are moving
    • Increased the initial short range boost radius from 6 feet to 9 feet.
    • Added option to give bonus to detector to track a sneaking player if noticed.
    • Added line of sight movement penalties/bonuses to detectors and player
    • Fixed the disable auto-move feature. Instead of disabling auto-move or tapping the auto-move control, it now detects if the character is sneaking in auto-move mode and taps the backwards move key once, thus canceling the auto-move.

    Major changes to how torches/light spells work in regards to detection.

    • Holding a torch will cancel all chameleon effect as long as the torch is out.
    • Having a "light" magical effect on the player halves the chameleon benefits.
    • Holding a torch will double the overall light penalties on the player.
    • Having a "light" magical effect on the player will increases the overall light penalties by 50%: This means that even with maxed out chameleon and sneak, lighting a torch is a bad idea. Casting a light spell in close range might also be a bad idea, although sometimes you can get away with it if you do not move.
    • Fortify, Drain, and Absorb Sneak effects on the detectors are now taken into account when adjusting Sneak skills.
    • New Hardcore Setting added - Sneak Skillup Interior Range: Customizes the range at which you increase your sneak skill in interior settings.

    New Hardcore Extended - AV Uncapper optional settings added:

    • Requires AV Uncapper OBSE plugin
    • Uncaps the detection level limit of the detector.
    • Prevents Chameleon and Blindness from ever reaching 100, using a logarithmic formula of diminishing returns. See user guide for details.

    Debug Settings

    • Added Gear Sound penalties of NPCs to be displayed in the NPC detection modifiers debug text.
    • Added short range bump to be displayed in the NPC detection modifiers debug text.

    Documentation

    • Completed Sneaking Detection Recalibrated .pdf manual