Jump to content

Skimpy Armor Keyword Resource REDUX 1.0.2


1 Screenshot

About This File

image.jpg.630dff35b6e83310457852ac3bd6fa8a.jpg

 

📄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

Optionally but recommended:

 

💥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:

  1. Modders need to patch armors/clothing with exposure keywords.
  2. 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!
fXBwian.th.png


What's New in Version 1.0.2

Released

1.0.2

  • Fixed API manfunction issue.
  • Added keyword[] function getBaseKeywords(int type, bool isFemale) global native
  • Added keyword[] function getAdditionalKeywords(int type, bool isFemale) global native

 

1.0.1 Reuploaded

  • Uploaded recompiled non-debug version not verbose with /O2 /Ob2 flags.

 

1.0.1

  • The logic has been updated. Now keywords are not collected from the character (WornHasKeyword), but each item worn by the character on each layer is evaluated, and the most covering one is selected. This is the only way I can think of to avoid false positives due to strange styles (when, for example, items such as blouses are worn together with jackets and have the same Top type). This does not apply to accessory keywords — they are still collected from the characters (WornHasKeyword).


Other Files from Evi1Panda


×
×
  • Create New...