v2.2.0-pre1
Pre-release
Pre-release
·
957 commits
to main
since this release
What's New
NIF Sprite Rendering
New sprite-gen CLI command for rendering 3D item models from BSA archives into PNG sprites.
- Extracts NIF meshes from BSA, converts Xbox 360 big-endian to little-endian, and renders textured sprites
- DDS texture decoding with automatic BSA texture resolution
- Gore cap filtering (BSDismemberSkinInstance body part ranges 100-299)
- Isometric view mode (
--iso) for body armor and larger items - Fixed endian bulk-swap bug that cross-contaminated multi-byte sub-fields in 4-byte structs (BodyPartList, HalfTexCoord, HavokFilter)
NPC Head Rendering
New render npc command for generating NPC head sprites with full FaceGen support.
- Base head mesh loading from RACE records via BSA
- FaceGen NIF override (per-NPC mesh from FaceGen directory)
- EGM mesh morphs: 50 symmetric + 30 asymmetric morph targets applied via FGGS/FGGA coefficients
- EGT texture morphs: 256x256 RGB deltas upscaled with bilinear interpolation to DDS resolution
- Hair, eyes, and head parts (eyebrows, beards) from HAIR/EYES/HDPT records
- NPC appearance resolution merging NPC_ and RACE coefficients
Unified CLI Commands
New format-agnostic commands that auto-detect file type (ESM, DMP, ESP):
search text/hex— text or hex byte pattern search across any binary filestats— categorized record type statisticslist— browse reconstructed records with type and filter optionsshow— inspect record detail by FormID or EditorIDdiff— compare records between any two files
Code Quality
- Massive refactoring: 5 batches of file splitting enforcing ~500-line limit across ~50 files
- New unit tests for extracted helper classes (EsmEditorIdValidator, RecordValidator, SemdiffRecordParser)
- Test suite refactored with shared helpers and ~35 parameterized theories
- All SonarQube and Roslyn analyzer warnings resolved (~336 warnings)
- CLI commands migrated from EsmAnalyzer to main project
Full Changelog: v2.1.0-pre.1...v2.2.0-pre1