Ostranauts
Install with App

Details

Latest version
0.9.50
Last Updated
First Uploaded
Downloads
1K
Likes
1
Size
18MB
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 artist: boru_m (discord) (They do commissions, for more info https://linktr.ee/Borumaboru)

General assistance: Robyn (i.e. mamallama) Very informative and helped give pointers and sanity check me early on.

Project New Skin for Ostranauts

Project New Skin is an 18+ content mod for the game Ostranauts. It has been developed with the understanding and verification of the game's developers.

This mod introduces nudity and related character customization options. It's built not just to add content, but to serve as a foundational framework for other modders. By touching on several core game systems, it provides a practical example for anyone looking to create their own custom clothing and character mods.

Discussion and bugs can be reported here https://discord.gg/7DZ5MQS3Ts

Disclaimer: This is an early C# and BepInEx project. While stable, it serves as a proof-of-concept and a learning tool. You may encounter limitations, unexpected behavior, or my own piss poor coding practices.


Features

  • Nudity System: Replaces the default character model with a system that supports nudity. This is not a simple texture swap; it's integrated into the game's paperdoll system.
  • Expanded Character Customization:
    • Separates biological sex from gender presentation.
    • Adds breast/genital size customization.
  • Modder Framework: Provides a template and a DLL patch that allows other modders to create clothing that is compatible with this mod and the vanilla game.

alt text

Installation

This mod has two required parts: the JSON files (the base mod) and a DLL patch. You must install both for the mod to function correctly. Here is a video installation guide https://www.youtube.com/watch?v=HBrD95uAjPY.

  1. Install FFU: Install from the discord channel Here or their gitlab Here
  2. Install BepInEx: Required for FFU, but wanted to add anyways.
  3. Install the DLL: Place the mod's .dll file into your Ostranauts/BepInEx/plugins folder.
  4. Install the JSON data: Put the NewSkinBase under Ostranauts\Ostranauts_Data\Mods folder in your game installation directory.

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.