Pregnancy Normalmap Swapper NG is a rewrite of Pregnancy Normalmap Swapper by handroid, reimplemented from scratch as a pure C++ SKSE plugin. The original mod used an ESP with Papyrus scripts, this version replaces all of that with a native DLL, eliminating the ESP dependency and any save-game impact.
The plugin automatically swaps body normal map textures based on RaceMenu body morph values. As a morph like `PregnancyBelly` increases, the plugin transitions through progressive texture stages for smooth visual progression.
No ESP. No save-game impact. Everything happens at runtime — install or remove at any time.
Features:
- Automatic normal map swapping driven by RaceMenu/SKEE body morphs
- Monitor multiple morphs simultaneously with configurable combine modes (additive, average, maximum)
- Per-race texture support with auto-detection of texture stages
- Weight-variant textures (maps actor weight to different texture sets)
- Race alias via `Use.txt` (vampire races can share base race textures)
- Papyrus ModEvent API (`PNSUpdateRequest`) — backward-compatible with the original PNS
- Force-update hotkey (default: LShift+LAlt+Y, configurable)
- Periodic polling with configurable interval
- Works on player and NPCs automatically — no SPID needed
- Drop-in replacement for PNS v2.x (same texture layout, same API, no ESP required)
Normal map textures are NOT included. You need a compatible texture pack such as dw's Pregnant Normal Maps for CBBE 3BA.
Requirements
- SKSE (Skyrim Script Extender)
- Address Library for SKSE Plugins
- RaceMenu (provides the body morph and NiOverride APIs this plugin depends on)
- A compatible normal map texture pack placed in `Data/textures/PNS/`
Install Instructions
- Extract the archive into your Skyrim `Data/` folder, or install with your mod manager
- Install a compatible normal map texture pack into `Data/textures/PNS/`
- (Optional) Edit `Data/SKSE/Plugins/PNS-NG/Config.json` to customize settings
- Launch the game through SKSE
Your folder structure should look like:
Data/
├── SKSE/Plugins/
│ ├── PregnancyNormalmapSwapperNG.dll
│ └── PNS-NG/
│ └── Config.json
└── textures/PNS/
└── _Default/
└── female/
├── femalebody_1_msn_p1.dds
├── femalebody_1_msn_p2.dds
└── ...
Upgrading from PNS v2.x: Remove the old mod/plugin (keep the textures), install this version.
Credits:
- Pregnancy Normalmap Swapper by handroid — the original mod this is based on
-
SKSE
Changelog:
Quotev1.0.2
Fixed
- Partition p1 could be applied when the morph value was 0. SKEE sometimes reports a tiny epsilon instead of exact zero. Added tolerance so values within 0.01% of the range minimum are treated as zero (no override).
Changed
- Include documentation files (docs/ and README.md) in the mod zip package
v1.0.1
Fixed
- Texture partitions now documented as starting at `p1`, no `p0` texture is needed. When the morph value is at or below the minimum, the plugin removes the overlay and restores the original normal map automatically. Existing `p0` files on disk are harmless but ignored.
- Updated README and texture authoring guide to reflect 1-based partitions.
v1.0.0
Initial release as Pregnancy Normalmap Swapper NG — a full rewrite of PNS v2.x.
Features
- Pure C++ SKSE plugin, zero ESP, zero save-game impact
- Automatic normal map swapping based on RaceMenu/SKEE body morphs
- Multiple morph support (`MorphNames` array) with configurable combine mode (`MorphCombineMode`)
- Per-morph key aggregation modes: additive, averaged, maximum (`MorphMode`)
- Cross-morph combination modes: additive, average, maximum (`MorphCombineMode`)
- Per-race texture support with auto-detection of partition count
- Weight-variant textures mapped from actor weight
- Race alias via `Use.txt` for vampire/variant races
- Papyrus ModEvent API (`PNSUpdateRequest`) — backward-compatible with PNS v2.x
- Force-update hotkey configurable as an array of DirectInput scan codes
- Periodic polling with configurable interval
- Actor filtering (gender, keywords, child exclusion)
- Config at `Data/SKSE/Plugins/PNS-NG/Config.json`
- Linux cross-compilation support via `clang-cl` + `xwin`
- Drop-in replacement for PNS v2.x (no ESP, same texture layout, same API)
Edited by Muzako
What's New in Version 1.0.2
Released
v1.0.2
Fixed
- Partition p1 could be applied when the morph value was 0 — SKEE sometimes reports a tiny epsilon instead of exact zero. Added tolerance so values within 0.01% of the range minimum are treated as zero (no override).
Changed
- Include documentation files (docs/ and README.md) in the mod zip package
SKSE Team