v0.3.2
Fixes
- Prospecting pick node search silently did nothing. Node Search Mode never printed "no ore nearby" or any quantity result (Density Search Mode still worked). Two fields added for the node-search optimization had no initializer run under the runtime patcher, so the first lookup threw before any chat message could be sent. Fixed by lazily initializing on first use.
- Animation lookups allocated a string every frame.
AnimatorBase.animsByCodeused the default ordinal comparer in the shipped API assembly, so every animated entity's animation-state lookup lowercased its animation code on every call. The source-tree fix existed but had no Cecil target and never reached players; it now ships via a dedicated API patch. - A missing Cecil type target could fall an install back to vanilla.
Optimum.OptimumOptiTimeGuardwas absent from the engine's type-injection list, so any install exercisingGetMigrationMessage()failed self-consistency verification. - The version string stuck at 0.3.0/0.3.1 across releases.
Performance (opt-in, default off)
Dressed NPCs (traders, villagers) re-tesselating their shape and gear could cost 50-230ms in a single frame, most visible when several load in at once (a caravan arriving, entering a village). Four settings target this, configurable only via ModConfig/optimum.json for now:
EntityTesselationFrameBudget: caps how many dressed-entity re-tesselations run per frame, spreading the rest across following frames.EntityOutfitShapeCache: reuses the fully assembled gear shape and resolved textures for outfit combinations already built once.EntityOutfitAnimatorCache: reuses the built animator (pose graph) across entities sharing an outfit combination instead of rebuilding it every re-tesselation - the largest remaining cost in this path.EntityOutfitTexturePrewarm: inserts every outfit variant's textures into the atlas during the loading screen instead of on first encounter mid-gameplay.
Measured via .optimum stutterwatch, together these reduced per-call cost from 58-230ms down to 7-9ms in real gameplay testing.
Diagnostics
- New
.optimum stutterwatch <ms>command attributes per-frame cost to Optimum's own subsystems, complementing vanilla's.debug logticks.
Notes
- Targets Vintage Story 1.22.5.
- Source-only release. See the wiki for install instructions.