RimScent Modding Guide

Updated as of January 19th, 2026

If you're reading this, you're probably interested in adding RimScent support to your mod (or someone else's mod). This guide will only cover how to support your own mod, BUT the way these systems work mean they can easily be done via XML patching.

Supporting ThingDefs

Let's start basic, you have a filth ThingDef that smells bad. The filth might look something like:

<ThingDef ParentName="BaseFilth">
  <defName>Filth_EvilRottenAss</defName>
  <label>rotten ass filth</label>
  <statBases>
    <Beauty>-30</Beauty>
    <Cleanliness>-10</Cleanliness>
  </statBases>
  <graphicData>
    <texPath>Things/Filth/Spatter</texPath>
    <color>(131, 34, 34, 180)</color>
  </graphicData>
  <filth>
    <ignoreFilthMultiplierStat>true</ignoreFilthMultiplierStat>
    <disappearsInDays>35~40</disappearsInDays>
    <rainWashes>true</rainWashes>
    <cleaningWorkToReduceThickness>70</cleaningWorkToReduceThickness>
    <canFilthAttach>true</canFilthAttach>
    <cleaningSound>Interact_CleanFilth_Fluid</cleaningSound>
  </filth>
</ThingDef>

All you'd have to do to add support, is add this within the ThingDef:

1
2
3
4
5
<modExtensions>
    <li Class="RimScentReworked.ModExtension_Scent">
        <thought>EvilRottenAssThoughtDef</thought>
    </li>
</modExtensions>

and of course, you need your own ThoughtDef:

<ThoughtDef>
    <defName>EvilRottenAssThoughtDef</defName>
    <durationDays>1</durationDays>
    <stackLimit>1</stackLimit>
    <stages>
        <li>
            <label>evil rotten ass</label>
            <description>Wow this smells like fucking shit, actually disgusting vile putrid smell!</description>
            <baseMoodEffect>-9001</baseMoodEffect>
        </li>
    </stages>
</ThoughtDef>

and... you're done! You've added support for RimScent. Congratulations! Everything else gets handled automatically.
Building defs that are flickable only emit their scent if flicked on, building defs that are refuelable only emit their scent if fueled.

This same process; adding the proper modExtensions node and creating a custom ThoughtDef is applicable to every single ThingDef in RimWorld.

Supporting Apparel

Now let's say you have some apparel that you think should decrease a pawn's smelling sensitivity by... 69%. The process is slightly different here, but largely the same. All you need to add is this:

1
2
3
<equippedStatOffsets>
    <RimScent_SmellSensitivity>-0.69</RimScent_SmellSensitivity>
</equippedStatOffsets>

and that's it! The mod will handle the rest. If you wanted to increase a pawn's sensitivity by triple, that would look like this:

1
2
3
<equippedStatOffsets>
    <RimScent_SmellSensitivity>3</RimScent_SmellSensitivity>
</equippedStatOffsets>

it really is that simple.

Supporting Hediffs

Let's say now you want to add a hediff that makes double's someone's smelling capability. Well, there's two ways you could go about this and both are valid! You could either do this:

1
2
3
4
5
6
7
<stages>
  <li>
    <statOffsets>
      <RimScent_SmellSensitivity>2</RimScent_SmellSensitivity>
    </statOffsets>
  </li>
</stages>

or you could do this:

<stages>
  <li>
    <capMods>
      <li>
        <capacity>RimScent_Smell</capacity>
        <offset>2</offset> <!-- alternatively use postFactor, it's up to you -->
      </li>
    </capMods>
  </li>
</stages>

It's also possible to make Hediffs that other pawns can smell! To do that, it looks like this:

<HediffDef>
    <defName>SmellyHediff</defName>
    <label>stinky smelly hediff</label>
    <description>makes you stinky.</description>
    <hediffClass>HediffWithComps</hediffClass>
    <comps>
        <li Class="HediffCompProperties_Disappears">
            <disappearsAfterTicks>30000</disappearsAfterTicks>
            <showRemainingTime>True</showRemainingTime>
        </li>
    </comps>
    <modExtensions>
        <li Class="RimScentReworked.ModExtension_Scent">
            <thought>RimScent_StinkyThought</thought>
        </li>
    </modExtensions>
</HediffDef>

Supporting TraitDefs

This section is probably the most useless because most people don't want trait clutter, but maybe it's useful to you. Here's the code for the Anosmic trait:

<TraitDef>
    <defName>RimScent_Anosmic</defName>
    <commonality>0.03</commonality>
    <degreeDatas>
        <li>
            <label>anosmic</label>
            <description>{PAWN_nameDef} has no sense of smell. While {PAWN_pronoun} cannot enjoy pleasant aromas, {PAWN_pronoun} is also completely immune to foul odors, smoke, and biological stenches.</description>
            <statOffsets>
                <RimScent_SmellSensitivity>-999</RimScent_SmellSensitivity>
            </statOffsets>
        </li>
    </degreeDatas>
</TraitDef>

and also the Dysomic trait:

<TraitDef>
    <defName>RimScent_Dysosmic</defName>
    <commonality>0.03</commonality>
    <degreeDatas>
        <li>
            <label>dysosmic</label>
            <description>{PAWN_nameDef}'s olfactory system is wired backwards. {PAWN_pronoun} finds the smell of rot, filth, or smoke strangely alluring, while fresh rain or clean air makes {PAWN_objective} feel uneasy.</description>
        </li>
    </degreeDatas>
    <modExtensions>
        <li Class="RimScentReworked.ModExtension_Dysomic" />
    </modExtensions>
</TraitDef>

Supporting WeatherDefs and Game Conditions

Do you have a custom event or weather that you want to be smelly? Well guess what? If you've read this far, you already know exactly how to do this! It's literally the exact same as the ThingDef section. Add your modExtension node, create a custom ThoughtDef, and RimScent will handle it from there.

End!

Edit

Pub: 16 Jan 2026 08:54 UTC

Edit: 19 Jan 2026 09:44 UTC

Views: 143