Evi1Panda Posted February 15 Posted February 15 Skimpy Armor Keyword Resource REDUX View File 📄Please note: This mod is a fork and development of the original Skimpy Armor Keyword Resource mod by @twistedtrebla. Before diving into the detailed description, I’d like to thank the author for the SAKR idea and for his wonderful mods! ⚙️Requirements OldGen game (1.10.163). F4SE (OG ver) CommonLibF4 (OG ver) Optionally but recommended: FO4Edit M8r98a4f2's Complex Item Sorter for using clothes autopatcher. 💥Motivation I’m a big believer in natural, seamless gameplay where mechanics emerge organically from the player’s actions — without any “magic buttons”. Pressing a hotkey to “activate slut mode” or “switch to hunter mode” completely shatters immersion and turns role-playing into a clunky simulator full of toggles. What I loved about the original SAKR idea was treating the degree of clothing exposure as a quantifiable stat. This lets modders tie it directly into dialogues, quests, perks, spells, and effects. NPCs can react to your outfit automatically — no manual switches required. ☕ Why even bother with this? On its own, it doesn't do much. Like any framework, it first needs to be supported by modders (who need to make patches for clothing and mods that will use it). 🎯 For modders: Use the new ActorValue ClothesExposureValue in your quests, dialogues, perks, spells, MGEFs, conditions, etc. Build mechanics that depend on how revealing (or conservative) the character’s outfit is. 🎯 For players: Eventually you’ll get natural, immersive reactions: NPCs responding to your outfit, your character reacting to others, or even NPCs reacting to each other. Things flow smoothly without breaking gameplay — e.g., to earn caps as a prostitute, you just dress like one… no magic button needed. 🤪 In simple terms: This is a powerful concept, but scaling it globally is tough. For everything to shine, two things must happen: Modders need to patch armors/clothing with exposure keywords. Modders need to create content that actually reads and reacts to ClothesExposureValue. The possibilities are endless: perks that get stronger the more exposed you are, dialogues unlocked only when dressed provocatively enough, raunchy NPC chit-chat, enemy behavior (raiders might let a scantily-clad “working girl” into their camp instead of shooting on sight), companion reactions (e.g., Ivy refusing anything with low exposure), and so on. The only real limit is modder creativity and adoption. ⭕Main issues with the original mod: Only supported female player characters (and only the player). No easy way to use it in other mods without heavy Papyrus wrappers. Couldn’t track exposure on NPCs. Hard-coded keywords — impossible to expand or tweak without recompiling. Not an ESL-flagged plugin. ✅ What’s been improved / added in this REDUX fork: Plugin converted to ESL — doesn’t eat into your precious 255 plugin limit. Core logic ported to C++ (F4SE plugin) — nice performance and deeper engine integration. New ActorValue ClothesExposureValue added to all actors (player + every NPC). Value auto-updates on cell load / equip change. Fully usable in perks, dialogue conditions, magic effects, quests — zero Papyrus scripts needed. Track changes via the event OnExposeValueChange(Actor akActor, int aiValue). Full male support — added matching _MALE keyword sets; exposure now works for any gender. JSON-based configuration — all keywords, categories, and exposure levels are loaded from an external JSON file. Add new keywords, tweak values, or override logic without touching the plugin or recompiling anything. 🧐 How it works (simple explanation) Every actor now has a hidden stat similar to Strength or Agility — ClothesExposureValue — that measures how revealing their current outfit is. Everything happens under the hood: the value updates automatically when gear changes. Modders can read it anytime (via conditions or scripts), and listen for updates via the event. For players, it’s simple: dress skimpy (or modest) depending on what you want to achieve in-game. 🤖Description of the mechanics of calculating exposure Spoiler General principles Each item of clothing/armor must have one or more keywords from the SAKR set. The absence of keywords means that the item is not taken into account in calculations (as if it were not worn in terms of exposure). All exposure values (exposureLevel) range from 0 to 100. The character's total exposure is calculated using the formula: max(ExposureTop, ExposureBottom) + AccessoriesBonus (with a subsequent limit of 0 to 100). Keyword categories (for female and male) The following types are defined in JSON (each gender has its own set): ArmorTop / ArmorBottom — armor covering the upper/lower body. Used first. If the exposureLevel value of such armor is less than 100, it completely determines the exposure of the corresponding part of the body (Top or Bottom), and deeper levels (Bra, Panty, etc.) are ignored. If exposureLevel = 100 (for example, armor that does not cover anything), the calculation moves to the next level. Top / Bra — for the upper body (after taking ArmorTop into account). Top — basic outer clothing (T-shirts, blouses, etc.). Bra — underwear/swimwear, only taken into account if Top is absent or has exposureLevel = 100 (sheer). Pants / Skirt / Panty — for the lower body (after taking ArmorBottom into account). Pants — pants, shorts. Skirt — skirts. Panty — underwear, taken into account if Pants/Skirt are absent or have exposureLevel = 100. Accessories — accessories that do not cover primary areas but affect perception (stockings, shoes, materials). Their values are summed up and added to the total. Detailed calculation of body part exposure The following algorithm is used for each body part (upper/lower): Collect all keywords for items worn that relate to that body part. Divide them into main keywords (keywords in JSON) and additional keywords (additionalKeywords). For the main keywords, the maximum exposureLevel value among those present is selected. If there are no main keywords, the part is considered uncovered (exposed 100, if there are no other levels). The sum of the values of all additional keywords is added to this value (taking into account that additional keywords may be on different items). The result is limited to the range 0..100. This is the exposure of the given part (for example, ExposureTop or ExposureBottom). Special case: Sheer (exposureLevel = 100) Keywords with exposureLevel = 100 (e.g., *TagSheer) denote transparent/semi-transparent material. If the main keyword for a part has a value of 100, it means that this part is actually not covered (there is clothing, but it is transparent), and the calculation moves to the next level (Top → Bra, Pants/Skirt → Panty). At the same time, additional keywords at this level can still contribute (e.g., fit, fabric transparency), but they will be taken into account at the next level. Examples Women's keywords (excerpt) Top sakr_kwd_topFull (0) — completely covers the chest. sakr_kwd_topCleavage (40) — neckline. sakr_kwd_topLowCutCleavage (60) — deep neckline. Additional: sakr_kwd_topTagTankTop (+5), sakr_kwd_topTagCropTop (+10), sakr_kwd_topTagSheer (+100, translates to Bra). Bra sakr_kwd_braNormal (70) — regular bra. sakr_kwd_braBikini (80) — bikini. sakr_kwd_braMicroBikini (95) — micro bikini. sakr_kwd_braTagSheer (+100, sheer). Pants sakr_kwd_pantsLong (0) — long pants. sakr_kwd_pantsShorts (25) — shorts. sakr_kwd_pantsHotPants (50) — hot pants. sakr_kwd_pantsThong (75) — thongs (as pants). Additional: tight fit (+5), sheer (+100). Men's keywords (similarly, with the suffix _MALE) ActorValue and event The SAKR_Exposure characteristic is automatically present for all actors (players, NPCs). Updates occur when: a cell is loaded (an actor appears); equipment change (via the OnObjectEquipped / OnObjectUnequipped event); manually via the recalculateActorRating(Actor akActor) function call. When the value changes, a standard OnExposeValueChange(Actor akActor, int aiValue) event is generated, which can be used in scripts for reactions (e.g., dialogues, effects). JSON flexibility The Data\F4SE\Plugins\SAKR.json file contains a complete description of all keywords. Its structure is as follows: { “description”: [ ... ], // explanations (do not affect logic) “KeywordsSet”: [ { “gender”: “female”, “types”: [ { “typeName”: “ArmorTop”, “keywords”: [ { “desc”: “...”, “edid”: “...”, “plugin”: “...”, ‘formid’: “...”, “exposureLevel”: 0 }, ... ] }, { “typeName”: “Top”, “keywords”: [ ... ], “additionalKeywords”: [ ... ] // additional tags }, // ... other types ] }, { “gender”: “male”, “types”: [ ... ] } ] } Fields: edid — Editor ID of the keyword (must match the one in ESP). plugin — name of the ESP/ESM where the keyword is defined. formid — Form ID in hex (relative, without module number). exposureLevel — contribution to exposure (integer, usually 0..100, but can be small for additional ones). You can add new keywords or change values by simply editing the JSON. The plugin will automatically pick up the changes when the game is launched (restart required). ⚠️Clothing patching Instead of RobCo patchers that are difficult to control, Complex Sorter from M8r is used. But you can use RobCo if you like it more. Ready-made plugins for Complex Sorter are provided, which add the necessary keywords to popular clothing from well-known mods. If desired, you can easily supplement or modify the patches for your build. Complex Sorter rules are used to automatically add keywords to items from popular mods. Ready-made plugins are included in the archive. They work as follows: find items by name, EditorID, or other criteria; add the corresponding SAKR keywords. have fallback for every A-Torso and U-Torso armor - if there is no specific rules then add fullTop and fullBottom keywords. If you want to add support for other clothing, edit the Complex Sorter rules or create your own patch in xEdit @KinataHoru has made a great web tool that will make creating patches even easier! С++ source code is here If you'd like to support the ongoing development, you can donate here. It's never required but always deeply appreciated! Submitter Evi1Panda Submitted 02/15/2026 Category WIP / Beta Requirements
Franco Cozzo Posted February 15 Posted February 15 Is this a drop-in replacer? Or will people need to change their current setups for this to work?
Evi1Panda Posted February 15 Author Posted February 15 (edited) 46 minutes ago, Franco Cozzo said: Is this a drop-in replacer? Or will people need to change their current setups for this to work? No, at this stage, I would not recommend changing anything at all. Although this file is esm, it is still marked as esl and loads in the id space for esl (original mod is real esm). Replacing it in the game will most likely cause bad processes, resulting in many scripts losing their properties. This is a concept. It's quite complicated to implement globally. For everything to work, two things need to happen: modders need to start making patches for clothing, and modders need to start making mods where ActorValue from this mod is used. Many useful things could be implemented. For example, perks that are enhanced by the exposure. Or dialogues in mods that are only available if the player is dressed openly enough. Or, let's say, salacious dialogues between NPCs. Or, let's say, the attitude of enemies - raiders may well let a prostitute into their base if she is dressed like a prostitute and not like Rambo. Taking into account how the companion is dressed. Or, for example, Ivy will refuse to equip clothes with low exposure value. Returning to your question, sorry for getting sidetracked, no, it doesn't work as a simple replacement - it is need to be supported from other mods. So far, I've only made a patch for Sex Harassment. Edited February 15 by Evi1Panda 3
4503kg Posted February 16 Posted February 16 SAKR.logTrying to create a new save using this mod, it looks like it very very slowly loads each actor in the game one by one (as you can see by the timestamp in the attached log). Very cool concept and noble goal, but unfortunately I think it's not "production ready" just yet.
Evi1Panda Posted February 16 Author Posted February 16 (edited) 49 minutes ago, 4503kg said: SAKR.logTrying to create a new save using this mod, it looks like it very very slowly loads each actor in the game one by one (as you can see by the timestamp in the attached log). Very cool concept and noble goal, but unfortunately I think it's not "production ready" just yet. Oh, I guess you have game/document folder placed on hdd. Actually, I just forgot that I was using a debug build, and your performance issue is related to the log. My mod does not noticeably affect the loading speed in the most demanding locations. SAKR.log The 1.5-second delay is due to the fact that values are updated 1.5 seconds after the last change of clothing on the npc — this is an optimization mechanism to avoid unnecessary calculations. This is not particularly important for the player, as the calculations are generally negligible, but if you have a large number of NPCs undressing/dressing, this will significantly reduce costs. ps. Uploaded non-debug version. SAKR.log Edited February 16 by Evi1Panda
not a BT shirt Posted February 16 Posted February 16 when i installed this mod, all of my current SAKR files for all my outfit mods got changed in game to 0 as if the mod wasnt working the way it should be
Evi1Panda Posted February 16 Author Posted February 16 (edited) 2 hours ago, not a BT shirt said: when i installed this mod, all of my current SAKR files for all my outfit mods got changed in game to 0 as if the mod wasnt working the way it should be That's right. It was never intended to be a direct replacement of original mod. It's an evolution. The authors of the modifications need to support this mod, only then will you see the effect. This mod has different keyword addresses (in the ESL address space) and a different API. I made a patch for Sex Harassment, and examples of how to make patches for clothing using M8r's Complex Sorter. I may post some patches later, but to be honest, I only use Sexual Harassment with this modification and Titshirt. I will post a patch for Titshirt soon. Similarly, in order for the patches to be applied to clothing, you need to rebuild the Complex Sorter patch. You need to rebuidl with the Clean/New option. Edited February 16 by Evi1Panda
twistedtrebla Posted February 18 Posted February 18 Sorry I didnt get back to you in time. You are free to fork the mod. Being that the mod is supposed to be a framework, my only ask is that whatever changes you make, you maintain backward compatibility with the original mod. Meaning, mods that were made for the original mod should keep working with your new changes. Having competing or conflicting frameworks is not ideal for any of us. Anyway, good luck and have fun!
Evi1Panda Posted February 18 Author Posted February 18 3 hours ago, twistedtrebla said: Sorry I didnt get back to you in time. You are free to fork the mod. Being that the mod is supposed to be a framework, my only ask is that whatever changes you make, you maintain backward compatibility with the original mod. Meaning, mods that were made for the original mod should keep working with your new changes. Having competing or conflicting frameworks is not ideal for any of us. Anyway, good luck and have fun! Thank you for your reply, for the excellent idea, and for your permission. There is a slight problem with backward compatibility. This is because I would very much like the mod to be in the ESL address space and not take up a limited amount of ESP, which means that it is not possible to provide identical formIDs. This is not a question of competition. In this case, does it make sense to duplicate the native global API through the quest version? There is no other way, as custom events are only sent through quests. Perhaps, since there are not many modifications that support SAKR yet, it would be easier and more correct to rework them? Initially, that's what I wanted to do — make it fully backward compatible — but I ran into this problem. Besides, even in harassment, direct keyword retrieval is used (PlayerHelper script). Maybe I shouldn't have used a similar name for the plugin... But in the end, does it make sense to use both at the same time? I repeat, this is not a question of competition at all. I'm just thinking out loud right now.
Lokikun Posted February 18 Posted February 18 I dunno how viable it would be. Is there no way to track the moved keywords somehow? Something similar for fallout like skyrim merge mapper? But instead of letting it search for the original SAKR you make them point it back to your version, with the old keywords preserved.
Evi1Panda Posted February 18 Author Posted February 18 (edited) 1 hour ago, Lokikun said: I dunno how viable it would be. Is there no way to track the moved keywords somehow? Something similar for fallout like skyrim merge mapper? But instead of letting it search for the original SAKR you make them point it back to your version, with the old keywords preserved. No, I don’t know of any such method. Right now, there are very few mods that use SAKR. In the beginning, making a mod like this in ESP format wasn’t the best decision. However, now we’re on the right side — the ESL side. For example, just like AAF.esm. But in the case of AAF.esm, mistakes made early on can no longer be easily fixed, whereas with SAKR we can thank the heavens that the mod didn’t gain huge popularity yet — so we won’t have to rework dozens of mods just to switch to the correct side! In general, whenever you see a mod that isn't ESL (or ESPFE), you should always and without exception ask the author: why isn't it ESL/ESPFE? 95% of all mods can be ESL. Edited February 18 by Evi1Panda
Samhsay Posted February 18 Posted February 18 Does it work with object modifications? Some of them makes clothes more or less skimpy.
Evi1Panda Posted February 18 Author Posted February 18 (edited) 40 minutes ago, Samhsay said: Does it work with object modifications? Some of them makes clothes more or less skimpy. Honestly, I don't think this actually works with mods right now. It pulls keywords from the base object. But you're right — I should work on this. Again, it would require the mod to add the necessary keyword itself. Edited February 18 by Evi1Panda
KinataHoru Posted February 19 Posted February 19 I was so impressed by your work that I decided to create a web tool that automatically generates rules for m8r sorter based on your template. If anyone is interested, I already have the following features working: importing edid and formid lists keyword placement exporting rules for sorter importing patches for robco to convert them to m8r sorter There is still a lot of work to be done, but the basic functions are already working. I will publish it on GitHub Pages soon. 2
Samhsay Posted February 19 Posted February 19 I think this thing needs robco parser for using RubberDuck repo or users own patches.
KinataHoru Posted February 19 Posted February 19 1 hour ago, Samhsay said: I think this thing needs robco parser for using RubberDuck repo or users own patches. No. I just need to read the robco patch and compare formid and edid. This Robcopatch can be created manually or with any other tool—it doesn't matter.
Evi1Panda Posted February 19 Author Posted February 19 3 hours ago, KinataHoru said: I was so impressed by your work that I decided to create a web tool that automatically generates rules for m8r sorter based on your template. If anyone is interested, I already have the following features working: importing edid and formid lists keyword placement exporting rules for sorter importing patches for robco to convert them to m8r sorter There is still a lot of work to be done, but the basic functions are already working. I will publish it on GitHub Pages soon. Wow that is cool! Thank you for this!
N.Gamma Posted February 21 Posted February 21 Question: In your version, if you don't enter any keywords for outfits, are the characters or NPCs considered naked? That was something that always bothered me about the original mod. With the SL Aroused keywords mod for Skyrim, which does pretty much the same thing as the Skimpy Armor keyword in Fallout 4, all clothing items are considered fully clothed if they don't have keywords. I find that much more pleasant and immersive.
Evi1Panda Posted February 21 Author Posted February 21 (edited) 2 hours ago, N.Gamma said: Question: In your version, if you don't enter any keywords for outfits, are the characters or NPCs considered naked? Yes, that is why fallback uses in m8r patch. Fallback adds to all Torso TobFull and BottomFull kwd, all A-Torso ArmorTopFull and U-ArmorBottomFull kwd. Fallback uses if there is no any other SAKR keyword on item. Edited February 21 by Evi1Panda
N.Gamma Posted February 21 Posted February 21 (edited) 1 hour ago, Evi1Panda said: Yes, that is why fallback uses in m8r patch. Fallback adds to all Torso TobFull and BottomFull kwd, all A-Torso ArmorTopFull and U-ArmorBottomFull kwd. Fallback uses if there is no any other SAKR keyword on item. If I understand correctly, when creating the m8r patch, I have to check SAKR, then all armor and outfits will be considered non-naked. Can I then integrate skimpy keywords for the outfits that are skimpy using the RobCo patcher without having to recreate the m8r patch? Edited February 21 by N.Gamma
KinataHoru Posted February 21 Posted February 21 Alpha is ready. https://kinatahorulust-droid.github.io/FO4-Patching-Multitool/ There is also a tool for creating robco-lvli for weapons with a clever dependency system that protects against weapon duplication in lists. Well, because why not, lol
Evi1Panda Posted February 21 Author Posted February 21 5 hours ago, N.Gamma said: If I understand correctly, when creating the m8r patch, I have to check SAKR, then all armor and outfits will be considered non-naked. Can I then integrate skimpy keywords for the outfits that are skimpy using the RobCo patcher without having to recreate the m8r patch? Sorry for the long wait for a response! Yes, of course, in the end it doesn’t matter how your keyword ended up on the base item. I believe that scripts and RobCo add a keyword specifically to the basic form of the item. But modifications, I believe, add keywords specifically to an instance of an item, this is somewhat different. I will deal with this nuance a little later to ensure that this method also works. 1
Evi1Panda Posted February 21 Author Posted February 21 (edited) 1 hour ago, KinataHoru said: Alpha is ready. https://kinatahorulust-droid.github.io/FO4-Patching-Multitool/ There is also a tool for creating robco-lvli for weapons with a clever dependency system that protects against weapon duplication in lists. Well, because why not, lol Thank you so much for this tool, i will add link to description! Edited February 21 by Evi1Panda
KinataHoru Posted February 24 Posted February 24 Hmm, something's off. Seems like the original sorter is either broken or there's something else going on. And I guess I jumped the gun releasing my tool (-: I only had sakr and More_Clothes_Textures.esp active in FO4Edit. Ran the sorter, expecting the script to just automatically add all the keywords for me. But here's what actually happened: it completely ignored the entire More_Clothes_Textures.esp. On the vanilla clothes, it added the default tags: sakr_kwd_pantsLong, sakr_kwd_topFull, plus the male versions of those keywords. That's odd. Even if the script didn't work for More_Clothes_Textures.esp, the plugin should still have gotten the default keywords. But they're not there. Here's my setup before sorting, with the plugin list:
Evi1Panda Posted February 24 Author Posted February 24 (edited) You can test rules for any form in sorter's options. Edited February 24 by Evi1Panda
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now