S4V3R
Version: 1.32
S4V3R is a brutally opinionated autosave manager with simplistic options and an extremely lightweight performance footprint.
- Download the mod from Here
- Extract the zip to a location of your choosing.
- Paste the location you extracted it to into the form below, hit
Generate Config, and paste the result into openmw.cfg.
Where would you like to install this mod?
# S4V3R Data Directories
data=C:/Games/OpenMW-Mods/S4V3R/.
# S4V3R Content Files
content=S4V3R.esp
Overview
S4V3R is my own take on save management, intended to maintain as few options as actually make sense whilst also not breaking the bank in the Lua profiler or your download count.
It tries to offer the most sane defaults it can:
- Saves every nine minutes
- Keeps a rotating stack of ten slots
- Saves when entering and exiting combat
- Saves when finishing character creation
- Empty, but customizable, save prefixes.
All of the above options are configurable. With the default settings, this gives you about an hour and a half of backups, alongside your combat saves.
As of version 1.1, S4V3R also offers an Ironman option which will delete all saves which S4V3R generated upon your death. Naturally, this is disabled by default.
As of version 1.2, S4V3R will NOT make combat start/end saves when the target is not in combat with you directly. Additionally, this feature is extended to support Sosnoviy Bor's Follower Detection Util as well.
If you have FDU installed, then S4V3R will also account for your followers being targeted by enemies.
Customizable save prefixes were added in version 1.3.
Note that combat saves don't consume your autosave budget, nor does your start save - so with the defaults, you have a rolling total of 13 saves.
Interop for Scripters
S4V3R doesn't have a lot to offer in terms of interface, but it tries to expose everything it can. Please let me know if you'd like to see the interface extended.
When a save is triggered, two events are emitted:
- MENU scope:
S4V3R_MENU_TriggerSave - PLAYER scope:
S4V3R_PLAYER_SaveComplete
You may subscribe to either event depending on the exact timing you require. Additionally, you can register a save handler through the interface using I.S4V3R.addSaveCompletionHandler.
Interface fields:
---@param handler fun(saveName: string, saveSlot: integer): boolean?
addSaveCompletionHandler = function(handler)
assert(
type(handler) == 'function',
'S4V3R.addSaveCompletionHandler was passed a non-function value!'
)
saveCompletionHandlers[#saveCompletionHandlers + 1] = handler
end,
---@return boolean canSave
canSave = function() return sinceLastSave >= SaveInterval and allowedToSave() ~= nil end,
---@return integer
getCurrentSaveSlot = function() return saveSlot end,
---@return integer
getMaxSaves = function() return MaxSaveSlots end,
---@return number timeBetweenSaves
getSaveInterval = function() return SaveInterval end,
---@return number timeRemaining
untilNextSave = function() return SaveInterval - sinceLastSave end,
version = 1,Credits
All code in this repository was generated by Dave Corley under the GPL3 License.
Please enjoy my content, hack away as you please, and respect the freedoms of your fellow creators in the meantime.