Ostranauts
Install with App

Details

Latest version
0.9.11
Last Updated
First Uploaded
Downloads
552
Likes
1
Size
26MB
Dependants

Categories

Tags

NSFW

WARNING 18+ YEARS OR OLDER

This mod is consider 18+ years or older, if you are under that age, get out of here. Otherwise the FBI (in USA)/CIA (outside USA) will find you, break you knee caps, and take all your V-bucks.

For those above the legal age, if your not into NSFW content, understand, there is only really references to "Human antaomy". As of writting, this framework DOES NOT HAVE anything that be a trigger, it is basically softcore at the moment. I assume you be here to learn tips and tricks.

Credits

Amazing artists:

boru_m (discord) - Made the skins and clothing (They do commissions, for more info https://linktr.ee/Borumaboru)

ErisFati (Twitter)/ prototype4665 (Discord) - Made all the shirt variants! https://x.com/ErisFati?t=NNWnN5zyMB5pidum5_uz1g&s=09

Paroxysm (discord) - Made underwear variants

This Addon adds in New Skin Compatible clothing. Seperated into different mod.


For Modders: Creating Compatible Clothing

You can design clothing that works in the vanilla game but gains special properties when Project New Skin is active (e.g., changing shape based on breast size).

Core Concept: Layers and Conditions

The mod's DLL patch intercepts the game's UpdateClothingVisibility method to manage how clothing and body parts are displayed. It checks items in rendering layers, from the outside in.

  • Breast Layers: NewSkinTitRSlot, NewSkinTitLSlot, NewSkinBraSlot, shirt_in, shirt_mid, shirt_out
  • Genital Layers: NewSkinVagSlot, NewSkinShaftSlot, NewSkinBallsSlot, NewSkinUnderpantSlot, pants_in, pants_mid, pants_out

By default, any standard vanilla clothing item will hide all "New Skin" body parts and clothing layers beneath it. To make your item compatible, you must add specific conditions to its JSON definition.

The Magic: Dynamic Sprite Swapping

The core of this system is its ability to change an item's sprite based on the character's body. Instead of creating dozens of item variants in json, you create one item and let the mod's DLL swap the image path dynamically. It all works with the images instead.

This is done by overwriting the strPortraitImg property of an item in real-time based on the character's traits and the conditions you set on your item.

How-To Example: Making a Compatible Bra

Let's use the included sports bra as an example.

1. Define the Item in JSON

Here is the definition for the sports bra in condowners_underwear.json.

{
    "strName": "NewSkinSportsBra",
    "strNameShort": "Plain White Sports Bra",
    "strItemDef": "NewSkinSportsBra",
    "strDesc": "New Skin Sports Bra",
    "strNameFriendly": "Plain White Sports Bra",
    "strType": "Item",
    "aInteractions": ["EquipItem", "DropItem", "PickupItem"],
    "aStartingConds": ["IsNewSkin=1.0x1", "IsNSBra=1.0x1","IsRacialNewSkin=1.0x1","IsNSBreastSizeMatters=1.0x1"],
    "mapCondTolerance": [],
    "mapPoints": [],   
    "mapChargeProfiles": ["Normal"],
    "mapGUIPropMaps": null,
    "strPortraitImg": "paperdoll/clothing/PortNewSkinUnderwear/portNewSkinSportsBra",
    "strAudioEmitter": "ItmClothGeneralSound",
    "mapSlotEffects": ["NewSkinBraSlot", "NewSkinSportsBra"],
    "jsonPI": null
  }

If you are appending to a preexist shirt (or one that based on ItmTShirt01), since all vanillia shirts are based on ItmTShirt01, I did this

[
  {
    "strName": "ItmTShirt01",
    "aStartingConds": [
      "--ADD--",
      "IsNSBreastSizeMatters=1.0x1"
    ]
  }
]

This means I find were vanillia calls that existing shirt, and I add in sprites with correct names for the sizing. If no existing sprite exists for said shirt, it gets ignored and defaults to flat, this logic takes place in the dll. AKA its vanillia safe, and you can make shirts that default to vanillia blanks (have your default be vanillia safe) make sure your shirts link to a non sized version.

2. Key Conditions Explained

The magic happens in aStartingConds.

  • IsNewSkin=1.0x1: Required. This tells the system your item is compatible. Otherwise it will treat it as if it were vanillia.
  • IsNSBreastSizeMatters=1.0x1: Tells the system this item's sprite should change based on the character's breast size.
  • IsRacialNewSkin=1.0x1: For items that show skin (like underwear or a cleavage-baring top). This tells the system to factor in the character's race when choosing a sprite, ensuring skin tones match.
  • IsNSBreastVisible=1.0x1 / IsNSGenitalsVisible=1.0x1: Use this on items (like harnesses or certain lingerie) that should not hide the body parts underneath them.

3. Follow the Naming Convention

The DLL finds the correct sprite by modifying the base strPortraitImg with suffixes. Your image files must follow this naming scheme precisely.

alt text

Base Image Name: strPortraitImg value (e.g., portNewSkinSportsBra)

Formula: BaseName + [Size] + [Race] + .png

  • [Size]:
    • Flat
    • Small
    • Medium
    • Big
  • [Race]:
    • A (Caucasian)
    • B (East Asian)
    • C (African)

Example File List:

You must have a sprite for every possible combination your conditions require, plus a default "base" version. Even if some images are identical, the files must exist with the correct names. I did this as a kindness, it is a million times easier to do this than add a bunch of condowners, and also way more optimized.

/images/paperdoll/clothing/PortNewSkinUnderwear
|-- portNewSkinSportsBra.png              // Base version (linked in JSON)
|-- portNewSkinSportsBraFlatA.png         // Flat, Race A
|-- portNewSkinSportsBraFlatB.png         // Flat, Race B
|-- portNewSkinSportsBraFlatC.png         // Flat, Race C
|--
|-- portNewSkinSportsBraSmallA.png
|-- portNewSkinSportsBraSmallB.png
|-- portNewSkinSportsBraSmallC.png
|--
|-- portNewSkinSportsBraMedA.png
|-- portNewSkinSportsBraMedB.png
|-- portNewSkinSportsBraMedC.png
|--
|-- portNewSkinSportsBraBigA.png          
|-- portNewSkinSportsBraBigB.png          
|-- portNewSkinSportsBraBigC.png

alt text As you can see, even though the base portNewSkinSportsBra.png might be identical to portNewSkinSportsBraFlatA.png, both must exist for the system to work.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.