3.3 KiB
RuneWaker recipe schema
Two recipes keep environment conversion separate from population/mechanics. Paths are project-relative unless an environment variable supplies the preserved source root.
Environment recipe
Required top-level fields:
schemaVersion: recipe format version.slug: HealerMan dungeon ID and asset directory name.title: display/source title.source: preserved WDB, primary ROS, config, and entrance evidence.coordinateSystem: source axes, units, and direction units.navigation: Recast settings.partitionmay selectwatershedormonotone;forceTiledis an explicit source-geometry workaround when a compact solo heightfield cannot triangulate its contours.review: human review states.exceptions: known limitations retained in metadata.
source fields:
rootEnvironmentVariable/relativeDefault: source-root resolution.resourceRoot: normallyResource.wdb: WDB path relative to the source root.model: primary ROS relative toResource.dungeonConfig/dungeonConfigId: server catalog join.entryLua/entryConstantPrefix: authoritative entry constants; orentryCoordinates: explicit position/direction withreviewRequired.
Optional source.wdbAssembly fields:
mode:all-rosby default, orprimary-onlyfor a deliberate compatibility build.dynamicPlacements: reviewed dynamic object selectors. Each entry requires a stableid,kind,evidence, and either an exact WDBguidor normalizedresource; optionalinitialStateandcollisiondescribe the runtime contract.
Valid ROS placements not selected as dynamic are static. Filename hints are reported for review but never infer stateful behavior. Non-ROS descriptors, invalid transforms, missing resources, and exporter failures remain explicit unsupported records in the placement manifest.
The full placement transform is preserved as:
threeMatrix = S * inverse(primaryTRS) * placementTRS * inverse(S)
S = scale(metersPerSourceUnit, metersPerSourceUnit, -metersPerSourceUnit)
Population recipe
Required fields:
dungeonId,zoneId, andruntimeIdPrefix.expectedActiveRowsandexpectedBossSpawnsafter the first refresh.files: snapshot, generated source, reports, environment/nav, actor outputs.source: source-root, catalogs, backup paths, SQL extraction instance.actors: unique reviewed source ROS models.templates: classification, display, combat, actor, and mechanics mappings.deferred: explicit later-pass list.
Template classifications are combat, boss, deferred-object, or
unclassified. Generation refuses unclassified rows and combat/boss rows
without a valid actor.
Optional template fields:
title,archetype,primaryColor,accentColor,visualScale;hasLoot,spawnMask,objectiveNamePattern;combat: health/damage multipliers, movement, and leash overrides;attacks: reviewed HealerMan attack definitions;reason: why an object is deferred;source: forensic image/model/classification evidence.
expected* values may be null only in a fresh scaffold. The explicit
forensic refresh with --update-recipe pins them. A recipe should not be treated
as production-ready until all classifications/models and counts are reviewed.