Jump to content

[mod] Vulnerability Matters


Dharkx

Recommended Posts

Posted (edited)

Vulnerability Matters


Gone are the days of pawns who are incapable of violence, or are without any clothes or armor to protect them, from being invulnerable.

 

Mod Description

 

Expands RimJobWorld’s pre-existing pawn vulnerability system with new configurable modifiers which will cause a pawn to be more or less vulnerable, based on gender, age, body type, combat capability, melee skill, body coverage exposure, tagged apparel visibility/protection, environmental and other conditions.

 

Features

 

Adds new configurable pawn vulnerability modifiers in Mod Settings, based on:

  • Gender (male and female)
  • Age (young and old age)
  • Body type (hulk, thin and fat)
  • Combat related ability (equipped range and melee weapon, incapable of violence)
  • Melee threshold penalty system (penalty per missing level below threshold)
  • Exposure and body coverage with apparel rules by gender (Nudist and ideology exemptions)
  • Wearing only underwear, skimpy clothing, tight clothing, bondage apparel, or protective gear (more exposed = more vulnerable)
  • In darkness (low visibility)
  • Experiencing cold or hot temperatures
  • Thirst need, and when actively having a shower or bath (Dubs Bad Hygiene mod patch)

 

How RJW Vulnerability Works

 

All pawns have a vulnerability level, with RimJobWorld's default value set to 120% (adjusted in RJW's mod settings).

 

If a pawn's vulnerability level reaches or exceeds the target threshold, they may be considered a victim, and may targeted by other pawns whose vulnerability stat is lower than the victim pawn's.

 

Vulnerability is built from two types of effects:

 

  • Percent values act as multipliers.
    • 100% means no change
    • Above 100% increases vulnerability
    • Below 100% reduces vulnerability
  • Offset values are direct additions or subtractions.
    • Positive values increase vulnerability
    • Negative values reduce vulnerability
    • 0 disables the effect

 

RimJobWorld already covers things like melee skills (positive only), health, body types (thin & hulk), food and rest need. This mod expands and adds many more considerations, as detailed further below.

 

Vulnerability Modifiers

 

Below is a list of all the pawn vulnerability stats modifiers added by this mod and their default values.
 

All modifiers can be adjusted or disabled in the mod settings:

Spoiler
  • Gender:
    • Male multiplier: x90%
    • Female multiplier: x110%
  • Age:
    • Young max age: 25
    • Young age: +0.10
    • Young age gender: Male & Female
    • Old min age: 50
    • Old age: -0.10
    • Old age gender: Male & Female
  • Body Type:
    • Body type Hulk: -0.20
    • Body type Thin: +0.20
    • Body type Fat: +0.10
  • Environment:
    • Darkness: x115%
    • Cold Temperature: x110%
    • Hot Temperature: x110%
  • Combat:
    • Equipped range weapon: -0.15
    • Equipped melee weapon: -0.15
    • Low melee skill threshold: 5
    • Penalty per missing level: +0.10
    • Incapable of violence: +0.50
  • Needs (Dubs Bad Hygiene):
    • Urgently thirsty: x110%
    • Dehydrated: x140%
    • Shower: +0.25
    • Bath: +0.30
  • Exposure:
    • Exposed nude top: +0.30
    • Exposed nude bottom: +0.40
    • Bondage collar: +0.25
    • Bondage outfit: +0.35
    • Underwear top only: +0.15
    • Underwear bottom only: +0.20
    • Skimpy top only: +0.10
    • Skimpy bottom only: +0.12
    • Tight top only: +0.05
    • Tight bottom only: +0.06
  • Protection:
    • Vest protection: -0.15
    • Armor protection: -0.25
  • Coverage Rules:
    • Males require covered: Bottom
    • Females require covered: Top and Bottom
    • Nudists exempted: Enabled

 

 

Body Coverage Exposure

 

The mod evaluates clothing coverage by body region rather than by the entire outfit as a single item. The exposure checks focus on the pawn's torso and legs because those are the body part groups used for top and bottom coverage decisions.

 

A body region counts as covered when at least one worn apparel item covers that body part group and is not treated as an exposed or non protective item. If an item is tagged as Vulnerability_Exposed, it is treated as exposing that body region for coverage checks unless a more specific top or bottom coverage tag is present for the same region. This lets the mod distinguish between genuinely covering clothing, underwear style coverage, skimpy or tight covers, and clothing that is visually present but still effectively exposing the pawn.

 

The mod also supports gender specific coverage requirements. For example, a male pawn may only need legs covered, while a female pawn may require both torso and legs covered before the exposure penalty is ignored. Nudists trait pawns and nudist ideologies can bypass those rules depending on your settings.

 

Apparel Tags

 

  • Apparel tags are used to classify apparel items for exposure and coverage rating.
  • You can manually edit apparel tags using the mod 'Character Editor'.
  • If an apparel item has not been patched, it is considered as a normal apparel item that provides full coverage.
  • Apparel items can have multiple tags.
    • For example a mini dress may have Vulnerability_SkimpyTop and Vulnerability_Exposed (provides skimpy top coverage 'Visible skimpy bottom', and no coverage around the waist). If the pawn is not wearing another apparel item that covers the 'Legs', for example pants, it will be county as 'Exposed nude bottom', but it they are wearing an apparel tagged with Vulnerability_UnderwearBottom, then it will be counted as 'Visible underwear bottom'.

 

Apparel Tags:

Spoiler
  • Vulnerability_Exposed
    • (provides no coverage)
  • Vulnerability_UnderwearTop
    • (apparel examples: bra, bikini top)
  • Vulnerability_UnderwearBottom
    • (apparel examples: panties, briefs)
  • Vulnerability_SkimpyTop
    • (apparel examples: tank top, open chest top or jacket)
  • Vulnerability_SkimpyBottom
    • (apparel examples: skirt or very short shorts)
  • Vulnerability_TightTop
    • (apparel examples: tight shirt or latex top)
  • Vulnerability_TightBottom
    • (apparel examples: leggings or tight pants)
  • Vulnerability_BondageCollar
    • (apparel example: slave collars)
  • Vulnerability_BondageOutfit
    • (apparel example: body strap)
  • Vulnerability_Vest
    • (apparel example: flak vest)
  • Vulnerability_Armor
    • (apparel example: marine armor)

 

 

Required Mods

 

  1. Harmony
  2. RimJobWorld

 

Patched Mods


Patched Apparel Mods:

 

Recommended Mods

 

 

Expands RJW/gameplay around nudity and privacy:

 

Future Plans

Pending feedback and suggestions.

 

  • Adjust current default mod vulnerability stats from user feedback (are they to high or to low?)
  • Add more mod patches
  • Add more vulnerability conditions
  • Add new events that can occur for a pawn with low vulnerability, besides the usual...  

 

Mod Development and AI Usage Disclaimer

This mod was made from me, a new mod developer, but as a disclaimer - it was created heavily with the assistance of AI.

Send through any mod related issues, feedback or suggestions.
 

Previous Updates Changelogs

 

Spoiler

Version 1.0.3

(2026-09-09)

This update adds mod support for Dubs Bad Hygiene, expands the mod settings layout, and improves clothing and exposure wording along with the RJW pawn Vulnerability stats UI.
 

Added:

- Added mod support for Dubs Bad Hygiene.
  - Added low thirst vulnerability.
  - Added hygiene activity vulnerability for pawns actively showering or bathing, with separate configurable offsets for showers and baths.
- Added a new "Vulnerability Matters - Clothing & Exposure" section to the pawn Vulnerability stat breakdown.
- Added grouped clothing and exposure categories in the stat breakdown for improved readability:
  - Nude Exposure
  - Minimal Coverage
  - Revealing Clothing
  - Protective Gear
  - Bondage Apparel
- Added a new Vulnerabilities settings tab.

Changed:

- Moved the Environment vulnerability modifiers to the new Vulnerabilities settings tab.
- Renamed the mod settings tab Exposure to Clothing & Exposure.
- Renamed the mod settings tab Patches to Apparel Patches.
- Updated the Clothing & Exposure settings tab labels and tooltips.

Fixed:

- Removed leftover underwear debug scan logging and related log spam.

 

Version 1.0.2

(2026-09-08)
 

Added:

- Added body type vulnerability modifiers for Hulk, Thin, and Fat.
- Added equipped ranged weapon vulnerability modifier.
- Added body type and weapon entries (with hyperlinks) to the Vulnerability pawn stats breakdown.
- Added updated tooltips and localized stat lines for new modifiers.

Changed:

- Reworked and cleaned up the mod settings general tab layout and options.
- Updated README.md.

Removed:

- Removed RJW default body type stat visibility while the mod is enabled.
 

Version 1.0.1 

(2026-09-08)
 

Added:
- Added coverage recognition for RJW body parts 'Chest' and 'Genitals'.

- Patched Mod: Vanilla Apparel Expanded Accessories
  - Added apparel tag: Vulnerability_Exposed:
    - VAEA_Apparel_BattleBanner
    - VAEA_Apparel_MiniTurretPack
    - VAEA_Apparel_Quiver

 

Version 1.0.0 

(2026-09-07)

 

Added:
- Initial release of Vulnerability Matters.
- Configurable vulnerability modifiers for gender, combat capability, melee skill, exposure, and darkness.
- Apparel tag system for body coverage, underwear, skimpy, tight, bondage, and protection categories, including Vulnerability_Exposed, Vulnerability_UnderwearTop, Vulnerability_UnderwearBottom, Vulnerability_SkimpyTop, Vulnerability_SkimpyBottom, Vulnerability_TightTop, Vulnerability_TightBottom, Vulnerability_BondageCollar, Vulnerability_BondageOutfit, Vulnerability_Vest, and Vulnerability_Armor.
- Compatibility patch support for supported apparel mods.
- Pawn vulnerability stat explanation breakdown with aggregated totals and item links for applicable apparel.
- Mod settings UI with grouped controls and tooltips.
- Localization split for settings, patches, and pawn stat explanations.

Changed:
- Expanded RJW vulnerability handling beyond base values with mod driven tuning.
- Added tag based compatibility checks across supported apparel packs.

Notes:
- Requires Harmony and RimJobWorld.
- Compatible with supported patched apparel mods listed in the README.

 


  • Submitter
  • Submitted
    09/07/26
  • Category
  • Requirements
    Rimworld 1.6, Harmony, RimJobWorld
  • Install Instructions

    Same install process used for all other mods:

    • Download ZIP folder > Extract > 'Vulnerability-Matters' folder outside of the first layer 'Vulnerability-Matters' folder.
    • Place the 'Vulnerability-Matters' folder in your Rimworld Mods folder.
    • Ensure that the install path is: Rimworld/Mods/Vulnerability-Matters
      • (this folder will show all the files and folders, such as: LICENCE, README, CHANGELOG, LoadFolders, 1.6 and About)

     

    • The mod can be safely added or removed mid save and does not require a new game.

     

    Mod Load Order:

    • Harmony (required)
    • RimJobWorld (required)
    • Patched mods (recommended but not required)
    • Vulnerability Matters

 

Edited by Dharkx
  • Dharkx changed the title to [mod] Vulnerability Matters
Posted

Hi all,

First mod I've posted here.

Please send through any feedback for current content, or suggestions for new content!

Posted (edited)
11 hours ago, DaMan1 said:

Looks really cool, but it just expands how vulnurability is computed right? This mod doesn't add anything mechanic wise, right?

 

Yep correct.

The current state of the mod essentially only adds new pawn vulnerability modifiers to make a pawn more or less vulnerable based on the extensive list of adjustable new modifiers added (all listed in the Default Mods Settings section), which also includes consideration for a pawn's apparel and body being exposed.

New gameplay mechanics for actions against pawns with low vulnerability may potentially be added in the future, based on any interesting feedback or suggestions that I could look at implementing.

Edited by Dharkx
Posted
7 hours ago, Dharkx said:

 

New gameplay mechanics for actions against pawns with low vulnerability may potentially be added in the future, based on any interesting feedback or suggestions that I could look at implementing.

 

From the few years of playing RJW with rape enabled I sometimes noticed scenarios simulating Defeat Rape:

Once everyone on side in a large battle went down, a victor or 2 would automatically rape a loser.

But it felt like it became more unreliable over time, either from me trying to mess with RJW settings or RJW updates during Rimworld DLC Expansion.

It feels like it's now either related to the Rapist Trait or Precept/Meme or Winning Enemy Mechs to ever get it going off. It never triggered if the player colonists were the winning side.

 

Maybe that might spark something for you, like say downed (Which I thought was probably the main reason why it happened for me) or shackled/arrested, or some kind of combat defeat Ideology precept

Posted
20 hours ago, McLovin3 said:

 

From the few years of playing RJW with rape enabled I sometimes noticed scenarios simulating Defeat Rape:

Once everyone on side in a large battle went down, a victor or 2 would automatically rape a loser.

But it felt like it became more unreliable over time, either from me trying to mess with RJW settings or RJW updates during Rimworld DLC Expansion.

It feels like it's now either related to the Rapist Trait or Precept/Meme or Winning Enemy Mechs to ever get it going off. It never triggered if the player colonists were the winning side.

 

Maybe that might spark something for you, like say downed (Which I thought was probably the main reason why it happened for me) or shackled/arrested, or some kind of combat defeat Ideology precept


"Combat defeat" is an idea I was already thinking about implementing in some way in the future. So good idea to bring up.

I'll write down your ideas including for the "
combat defeat Ideology precept" and "colonists being on the winning side".

Posted
13 hours ago, DeadSomething said:

it doesn't create subfolders, it creates botched unreadable files all in the main folder

Screenshot_20260909_200243.jpg

13 hours ago, DeadSomething said:

the folder tree in the 1.0.3 update is botched.

 


Odd. I don't see this issue on my end and I have just re-downloaded v1.0.3 from the site.

Extract path is Vulnerability-Matters-v1.0.3\Vulnerability-Matters

Are you still having this issue? If yes try again if you haven't already, or try extracting the folders through another method. If still having issues, does v1.0.2 work fine? I did change the .zip name/folders in the upload from v1.0.2 > v1.0.3.

No one else has reported any download or file issues for v1.0.3 or any version as of yet.

Screenshot 2026-09-10 171848.png

Posted

it worked fine with the previous version.
i already tried two different tools for extraction (Ark and Archive Manager) which i also used for all other mods i manually downloaded.
i'll redownload now and see if it works now.

Posted
42 minutes ago, DeadSomething said:

it worked fine with the previous version.
i already tried two different tools for extraction (Ark and Archive Manager) which i also used for all other mods i manually downloaded.
i'll redownload now and see if it works now.


I've just released a new version of the mod (v1.0.4) which has added/changed a few things.

You can try again and see how it goes. If it still doesn't work as you expect it to for those extraction software's, try rename the .zip to "Vulnerability-Matters" and retry.
 

Posted

could you add single gender race and gene lists to StatPart_Gender for ignoring race/pawn with gene plus inverted for flipping values

both rjw genes and alpha genes add single gender genes, various HAR races are single gender

        public List<string> SingleGenderRace = new List<string>();
        public List<string> SingleGenderGene = new List<string>();
        public List<string> InvertedRace = new List<string>();
        public List<string> InvertedGene = new List<string>();
        // replace sMale, sFemale and sEnable with your settings
        public bool ActiveFor(Pawn pawn, out float amount)
        {
            var sFemale = 110;
            var sMale = 90;
            var sEnable = true;
            var statPart = RJWStatDefOf.Vulnerability.GetStatPart<StatPart_Gender>();
            amount = 1f;
            if (pawn == null || !sEnable) return false;
            var SGenR = statPart.SingleGenderRace ?? new List<string>();
            var SGenG = statPart.SingleGenderGene ?? new List<string>();
            if (SGenR.Contains(pawn.def.defName)) return false;
            else if (pawn.genes != null)
            {
                foreach (var g in SGenG)
                {
                    var gDef = DefDatabase<GeneDef>.GetNamedSilentFail(g);
                    if (gDef == null) continue;
                    if (pawn.genes.HasActiveGene(gDef)) return false;
                }
            }
            var invert = false;
            var InvR = statPart.InvertedRace ?? new List<string>();
            var InvG = statPart.InvertedGene ?? new List<string>();
            if (InvR.Contains(pawn.def.defName)) invert = true;
            else if (pawn.genes != null)
            {
                foreach (var g in InvG)
                {
                    var gDef = DefDatabase<GeneDef>.GetNamedSilentFail(g);
                    if (gDef == null) continue;
                    if (pawn.genes.HasActiveGene(gDef))
                    {
                        invert = true;
                        break;
                    }
                }
            }
            var tmp = 1f;
            switch (pawn.gender)
            {
                case Gender.Male:
                    tmp = invert ? sFemale : sMale; break;
                case Gender.Female:
                    tmp = invert ? sMale : sFemale; break;
            }
            if (Mathf.Approximately(tmp, 0)) return false;
            if (Mathf.Abs((float)(tmp * 0.01) - 1) < 0.01f) return false;
            amount = tmp;
            return true;
        }

rjw addition already adds a more advanced vulnerability by age which accounts for HAR and VRE androids

    really old are more vulnerable and really young are exponentially more vulnerable

Posted (edited)
19 hours ago, Dharkx said:


I've just released a new version of the mod (v1.0.4) which has added/changed a few things.

You can try again and see how it goes. If it still doesn't work as you expect it to for those extraction software's, try rename the .zip to "Vulnerability-Matters" and retry.
 

thanks, will do and report back

EDIT: yep, that looks much better :)

Screenshot_20260911_114117.jpg

Edited by DeadSomething
Posted
3 hours ago, DeadSomething said:

thanks, will do and report back

EDIT: yep, that looks much better :)

Screenshot_20260911_114117.jpg


good to see. If you have any future issues with anything let me know

Posted
14 hours ago, ESeeker said:

could you add single gender race and gene lists to StatPart_Gender for ignoring race/pawn with gene plus inverted for flipping values

both rjw genes and alpha genes add single gender genes, various HAR races are single gender

        public List<string> SingleGenderRace = new List<string>();
        public List<string> SingleGenderGene = new List<string>();
        public List<string> InvertedRace = new List<string>();
        public List<string> InvertedGene = new List<string>();
        // replace sMale, sFemale and sEnable with your settings
        public bool ActiveFor(Pawn pawn, out float amount)
        {
            var sFemale = 110;
            var sMale = 90;
            var sEnable = true;
            var statPart = RJWStatDefOf.Vulnerability.GetStatPart<StatPart_Gender>();
            amount = 1f;
            if (pawn == null || !sEnable) return false;
            var SGenR = statPart.SingleGenderRace ?? new List<string>();
            var SGenG = statPart.SingleGenderGene ?? new List<string>();
            if (SGenR.Contains(pawn.def.defName)) return false;
            else if (pawn.genes != null)
            {
                foreach (var g in SGenG)
                {
                    var gDef = DefDatabase<GeneDef>.GetNamedSilentFail(g);
                    if (gDef == null) continue;
                    if (pawn.genes.HasActiveGene(gDef)) return false;
                }
            }
            var invert = false;
            var InvR = statPart.InvertedRace ?? new List<string>();
            var InvG = statPart.InvertedGene ?? new List<string>();
            if (InvR.Contains(pawn.def.defName)) invert = true;
            else if (pawn.genes != null)
            {
                foreach (var g in InvG)
                {
                    var gDef = DefDatabase<GeneDef>.GetNamedSilentFail(g);
                    if (gDef == null) continue;
                    if (pawn.genes.HasActiveGene(gDef))
                    {
                        invert = true;
                        break;
                    }
                }
            }
            var tmp = 1f;
            switch (pawn.gender)
            {
                case Gender.Male:
                    tmp = invert ? sFemale : sMale; break;
                case Gender.Female:
                    tmp = invert ? sMale : sFemale; break;
            }
            if (Mathf.Approximately(tmp, 0)) return false;
            if (Mathf.Abs((float)(tmp * 0.01) - 1) < 0.01f) return false;
            amount = tmp;
            return true;
        }

rjw addition already adds a more advanced vulnerability by age which accounts for HAR and VRE androids

    really old are more vulnerable and really young are exponentially more vulnerable


hello. I don't really play with any different gender types/races/genes from vanilla, so trying to understand this.
 

To confirm, are you asking for this exact behavior in the Vulnerability gender stat part?
 

- If a pawn’s race defName is in the “SingleGenderRace” list, ignore the gender multiplier completely
- If a pawn has an active gene from the “SingleGenderGene” list, ignore the gender multiplier completely
- If a pawn’s race defName is in the “InvertedRace” list, swap the male/female percentages
- If a pawn has an active gene from the “InvertedGene” list, swap the male/female percentages
- Otherwise, use the normal Gender Male/Female percentages from the mod settings

Also, are you asking for this to be just hardcoded values in the stat part itself, or also to be implemented as mod setting lists using defNames?

Posted
4 hours ago, Dharkx said:


hello. I don't really play with any different gender types/races/genes from vanilla, so trying to understand this.
 

To confirm, are you asking for this exact behavior in the Vulnerability gender stat part?
 

- If a pawn’s race defName is in the “SingleGenderRace” list, ignore the gender multiplier completely
- If a pawn has an active gene from the “SingleGenderGene” list, ignore the gender multiplier completely
- If a pawn’s race defName is in the “InvertedRace” list, swap the male/female percentages
- If a pawn has an active gene from the “InvertedGene” list, swap the male/female percentages
- Otherwise, use the normal Gender Male/Female percentages from the mod settings

Also, are you asking for this to be just hardcoded values in the stat part itself, or also to be implemented as mod setting lists using defNames?

not hardcoded since certain HAR mods have unofficial addon mods that enable/disable single gender

HAR races I use/found:

    <li Class="dharkx.rjw.vulnerability.matters.StatPart_VulnerabilityAge">
        <SingleGenderRace>
            <li>Moosesian</li><li>Alien_Miho</li><li>Yuran_Race</li><li>MeowKurin</li>
            <li>VV_Vivi</li><li>Arachne</li>
            <li>Alien_Mucus</li><li>Rjw_Slime_Blue</li>
            <li>Alien_Moyo</li> <!-- 'Moyo2.0-Blood stained business' Alien_Moyo appear to have low sexual dimorphism(with RJW Addition reduces it further) -->
            <li MayRequire="qyt.patch.GloomyDragonian">Dragonian_Race</li> <!--'only female gloomy dragonian'(qyt.patch.GloomyDragonian) makes Dragonian_Race female only-->
            <li>Anty</li><li>AT_Hiveguard</li><li>AT_dreadnought</li><li>AT_Oppressor</li><li>AT_Lacerator</li><li>AT_TriJaw</li> <!-- 'Anty the war ant race' warmonger ant-girls, integrated RJW compatibility with base Vulnerability at 0.5 -->
        </SingleGenderRace>
        <SingleGenderGene>
            <li>rjw_genes_female_only</li><li>rjw_genes_male_only</li>
            <li>AG_Female</li><li>AG_Male</li>
            <li>VREA_AG_Female</li><li>VREA_AG_Male</li> <!-- VRE Android prefixes genes with 'VREA_' -->
        </SingleGenderGene>
        <InvertedRace>
            <li>Rakkle</li> <!-- 'Rakkle (unofficial update)' males appear(thumbnail) similar with female clothes(bikini) -->
        </InvertedRace>
        <InvertedGene />
    </li>

 

mods enabling males for female only race: 'Male <Maru/Ratkin/Rabbie>' for <Maru/Ratkin/Rabbie>, 'Male Kurin'(id: odysseylotus.malekurin) for Kurin_Race(Kurin HAR Edition),

    'Male Wolfein Continue' for Wolfein_Race, 'Male <Kiiro/Milira> Expanded'(femboy, virtually identical to female) for '<Kiiro/Milira>_Race'

    <!-- replace 'Male Race Mod' with each of the 7 male mods and 'Race Name' with respective race -->
    <Operation Class="PatchOperationFindMod">
    <mods>
        <li>Male Race Mod</li>
    </mods>
    <nomatch Class="PatchOperationAdd">
        <xpath>Defs/StatDef[defName="Vulnerability"]/parts/li[@Class="dharkx.rjw.vulnerability.matters.StatPart_VulnerabilityAge"]/SingleGenderRace</xpath>
        <value>
            <li>Race Name</li>
        </value>
    </nomatch>
    </Operation>

 

anties(all types), dragonian, ratkin(female), rabbie(female) use thin as default bodytype

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...