Use the JSON Schema shipped at Scripts/staticSwitcher/schema/replacerSchema.json in your YAML editor. It describes the stable authoring API: root module shape, conditions, actions, enum values, and range forms. The schema rejects mixed static/instance modules, static modules using instance-only top-level once, stale condition names, invalid priority values, and random action ranges that omit max.
Runtime validation is lighter than the schema. SSS warns about unknown top-level keys, modules with neither replace_meshes nor instances, and mixed root shapes. Validate in the editor before installing a module.
Debug logging
Enable StaticSwitcherEnableDebug in the OpenMW settings menu. It defaults to false. SSS then emits verbose [ SSS ] debug and information messages. The setting is operational; module behavior still comes from YAML. These messages can show:
- module discovery and load counts;
- object activation and batch progress;
- condition failures and OR-list results;
- instance rule matches, once skips, and chance misses;
- static module skips, mesh matches, missing meshes, and chain limits;
- delayed deletion progress.
Warnings and errors ignore the debug checkbox. Look for the SSS prefix in openmw.log or the OpenMW console.
A practical diagnosis order
- Confirm the YAML is below the discovered VFS prefix and has a supported extension.
- Confirm the module is one pipeline, not a mixed root.
- Validate record IDs, cell names, coordinates, content-file reference numbers, and case-sensitive VFS paths.
- For a static module, check that the source mesh matches the object's record mesh and that the replacement mesh exists.
- For an instance module, temporarily remove
once, narrow conditions, and inspect the action order and chance values. - Check whether the target is a supported object type. Inventory actions require an Actor or Container; lock/key/trap actions require a lockable object; actor-only conditions return false for other types.
- If a disabled object is expected to change on re-entry, redesign the rule: disabled objects do not reliably become active again for SSS.
For runtime timing and save/load behavior, use Lifecycle. For the exact field contract, use Module Format and Schema.