Skip to main content

Ruleset Capability Audit

This audit records what the current ruleset data, runtime, Creator, validation, tests, and documentation actually support. It is the implementation baseline for the Ruleset Contract.

Audit date: 2026-07-26

Bundled baseline: eldiron.official 1.0.0, schema 1, draft

The bundled ruleset passes its current structural/reference validator with zero errors and zero warnings. That result does not mean every declared field is executed by the runtime.

Delivery Goal

Deliver a coherent, documented, creator-editable Ruleset v1 that supports both sandbox and class/level-based games through level 10, contains no official-game-specific runtime branches, keeps test_projects/Hideout2D.eldiron as the canonical integration project, and can grow to level 30 without another representation redesign.

The goal is reached when:

  • the official level-1-to-10 progression and content form a playable, internally balanced vertical slice
  • project-owned standalone rules can omit races, classes, levels, spells, or other optional modules without inheriting official assumptions
  • ordinary ruleset extensions require data and assets, not Rust branches
  • icons and procedural FX have reusable fallbacks and explicit validation
  • the typed runtime contract, Creator-facing descriptions, tests, and documentation describe the same behavior
  • the frozen released starter remains unchanged until the canonical test project is promoted for a release

Status Legend

StatusMeaning
CompleteImplemented across the applicable surfaces and covered by meaningful tests
FunctionalMain runtime path works; authoring, validation, or coverage still has gaps
PartialSome behavior exists, but important declared behavior is missing
Catalogue onlyData can be stored, displayed, or inspected but is not enforced
MissingTarget capability does not exist

Loading, Packaging, And Overrides

CapabilityCurrent evidenceStatusRequired next step
Bundled official selectionConfig selects an embedded id/version; official parts and assets are compiled into eldiron-ruleset; rules and shared asset lookup now use typed RulesetSelectionFunctionalRoute selection through the future shared package loader
Project overrideNested TOML tables merge over the selected official source; scalars and arrays replaceFunctionalDocument deletion and array semantics; add origin inspection
Project-owned standalone rulessource = "project" treats Game / Rules as the complete rulesetFunctionalValidate required capabilities and improve Creator startup templates
External ruleset packageOnly the bundled official package is registered; official assets use compile-time listsMissingAdd manifest discovery, package asset loading, import/export, and version checks
Derived distributable rulesetNo public extends package contract or explicit removal mechanismMissingDefine schema-2 inheritance, removal, conflict, and migration rules
Schema and engine compatibility enforcementResolution rejects unsupported selected/declared schema versions, selection/source mismatches, invalid minimum versions, and engines older than the declared minimumFunctionalAdd explicit schema migration and compatibility-range policies
Update policiesupdate_policy is present in project config but is not consumed by the resolverCatalogue onlyDefine pinned/patch/compatible/latest behavior or remove the field until implemented
Typed resolved representationResolvedRuleset now exposes typed actions with kind, unique intent bindings, target, range, requirements, costs, effects, cooldown, recipe, invocation bindings, and presentation; typed optional identity defaults and semantic attribute roles; typed class resource gains; typed invocation schemes; typed conditions with duration, stacking, immunity traits, tags, modifiers, and periodic effects; typed derived stats with parsed dependencies and bounds; and a typed equipment policy with slots, categories, handedness, occupied slots, class permissions, and avatar anchors. Other domains remain generic TOMLPartialAdd typed items, complete progression/race/class definitions, and field-origin data incrementally

Identity, Characters, And Progression

CapabilityRuntimeCreator/toolsValidation/tests/docsStatus
Global, race, and class defaultsApplied in documented order while preserving authored keysRules can be edited and inspectedRuntime default/loadout/progression tests and docs existComplete
Starting loadoutsClass equipment and inventory are applied unless startup attributes are explicitRuleset item templates sync into projectsReference validation and runtime tests existComplete
Class level gains and unlocksGeneric resource_gains pairs and primary attributes grow per level; unlocks.level_N is the sole gameplay owner of abilities/spells; Warrior, Cleric, and Ranger have complete 1/2/4/6/8/10 pathsClass inspector derives its full ability/spell list from unlocks and action bars expose future locked entriesValidation covers resource attribute references, unlock ranges, acquisition actions, action-bar references, and duplicate ownership; tests cover custom resource names, level-10 capstones, and runtime authorizationComplete
XP thresholds, kill XP, and level-upExplicit XP table and level-up runtime paths existTerminal and Creator inspectors expose XPMonotonic/max-level validation and progression tests existFunctional
Derived statsTyped, cycle-validated formulas for MAX_HP, MAX_MP, INIT, DMG, POWER, and SPEED compose ordinary/derived attributes and condition modifiersTOML remains directly authorable; action UI evaluates the same formulasServer tests cover dependencies, condition composition, action predicates, and regeneration caps; schema and official-rule docs define syntaxFunctional
Configurable semantic attributesOptional typed [attributes.roles] mappings drive health, maximum health, level, experience, weapon damage, and armor across damage/healing/respawn, XP, formulas, equipment summaries, graphical placeholders, avatar damage feedback, and terminal widgets; class growth and action costs name arbitrary resourcesRole mappings, resource gains, and typed cost maps are directly TOML-authorable; duplicate Game Settings ownership and the spell-specific MP path were removedValidation checks role, class-growth, and action-cost references; tests use VITAL/VITAL_CAP, RANK/RENOWN, HARM/WARD, and FOCUS, and prove classless rules do not invent official attributes or raceFunctional
Class equipment permissionsA cached typed policy enforces weapon and armor categories for classes while leaving classless actors unrestrictedClass summaries and text widgets expose themValidator checks references and starting loadouts; runtime tests cover startup, drag/drop, commands, and classless actorsComplete
Optional races/classes/levelsProject rules may omit identity defaults, classes, and progression without validation warnings; standalone runtime tests cover classless/level-less actions, UI no longer invents the official Warrior class, and XP formulas cannot advance beyond an authored capNo module capability UI; some inspectors still assume official-shaped identityResolver/runtime/UI contract tests and docs existPartial
Creature templatesCharacters can carry race/class/faction attributesNo ruleset creature catalogueNo reusable creature-template schemaMissing

Disposition And Factions

CapabilityCurrent evidenceStatusRequired next step
Race relationsHuman/Orc/Skeleton relation tables drive base dispositionFunctionalKeep as a configurable or legacy fallback
Reputation thresholdsPer-race/general reputation modifies dispositionFunctionalGeneralize target and storage semantics
Faction attributeSame named faction is friendly; different or missing factions fall back to neutral behaviorPartialAdd ruleset-defined faction relations and faction reputation
Separation of biology and allegianceDocumentation says race is not a faction, but official hostility still begins with race relationsPartialIntroduce faction definitions and make race relation an explicit fallback

Actions, Abilities, And Spells

CapabilityCurrent evidenceStatusRequired next step
Typed attack actionsThe unique action bound with intent = "attack"—regardless of id—and custom/named attack actions share player execution, targeting/range/cooldown, weapon or rules-path damage, ammunition, item costs, follow-attack damage, client state/description, and icon fallback; resolved actions are cached per region and refreshed when rules changeFunctionalRemove remaining raw-table helpers from non-attack branches
Damage/healing spellsKnown-spell checks and application work; target, range, arbitrary typed resource/item costs, effect source, cooldown, and FX consume the cached resolved action, while spell definitions own identity and roll dataFunctionalType spell identity/roll data and retire the raw spell adapter
Gathering actionsSkill, target, range, item costs, output effect, and cooldown consume the resolved action; the resource branch owns node identity, depletion, respawn, inventory transfer, and messagesCompleteRemove duplicated action/resource output ownership in schema 2
Craft actionsTyped kind, recipe reference, item costs, and cooldown select the existing recipe executor; recipe requirements, inputs, outputs, quality, and messages workFunctionalConsolidate action/recipe ownership and validate acquisition paths
Classless sandbox actionsA project-owned standalone ruleset with no classes or progression executes skill-gated mining, item/world-position targeting, typed take, script events, lockpick-on-chest source/target actions, actor/target attribute predicates, and transactional actor/target state modificationsFunctionalAdd broader world-state effects
Runtime action targetTagged entity, item-with-optional-owner, and world-position targets flow from selected-action entity/item clicks, 2D terrain clicks, and text commandsFunctionalAdd 3D position picking, area/shape targets, and explicit multi-target collections
Source item plus targetScript-event actions declare an owned item source, optionally select its exact instance through use_action, expose its id in the event payload, and apply success-only condition wear/destructionFunctionalGeneralize sources to built-in effects and world-position/multi-target payloads
Generic action executorTyped policy selects attack, spell, gather, craft, take, and script-event branches; domains still have specialized application codePartialUnify damage/healing/item application while retaining domain-specific world-state handlers
Generic effect vocabularyResolved actions type damage, healing, give-item, take, script-event, attribute/resource modification, and apply/remove-condition effects; conditions type stack-scaled periodic damage, healing, and numeric changes; authoritative state application executes through typed pathsPartialAdd movement, spawn, and a general multi-effect failure policy
GuardThe official action applies the typed guarded condition to self; it grants effective ARMOR +2 for two seconds, expires authoritatively, keeps base ARMOR unchanged, appears on Warrior/Cleric action bars, and reuses the round-shield iconCompleteExtend the same condition path to additional official content
Fire SparkA generic damage action, roll, particles, and FUL words-of-power binding execute through the normal spell path; no official class unlocks itFunctional exampleAdd it to a game-specific acquisition path only when that game wants fire magic
Critical hitsCritical roll and multiplier are declared and documentedCatalogue onlyDefine roll timing, rounding, UI/event payload, validation, and tests
Global/default cast cooldownDefaults are declaredPartialDefine precedence and prove runtime use with tests
Cast timeSpell and legacy projectile cast-time paths exist, but the official resolved action path does not have one clearly canonical ownerPartialMove timing into the unified resolved action
Script extension hooksItems and characters run scripts; actions can be invoked by script and may queue a validated named script event with a typed target payload after policy checksFunctionalAdd requirement/target/cost hook phases with explicit success/failure semantics
Optional invocation schemesTyped token-sequence schemes and per-action bindings resolve phrases server-side into the cached ordinary action catalogue; validation rejects unknown schemes/tokens, excess length, and phrase collisions; Stonefall uses LO VI without a script translationFunctionalAdd schema-driven generic token widgets and Creator inspection

Combat And Equipment

CapabilityCurrent evidenceStatusRequired next step
Dice rolls and attribute bonusesWeapon, ability, spell, and unarmed rolls are parsed and executedCompleteCentralize roll evaluation in the resolved rules layer
Damage kinds and reductionPhysical, arcane/spell, and fire tables apply outgoing modifiers and defense reductionFunctionalValidate complete damage-kind semantics and add scenario coverage
Weapon category range/cooldownThe ordered typed equipment.weapon_slots list selects the primary equipped weapon; category data drives attacks, host script source context, graphical UI, and terminal stats without [game] slot duplication or official slot-name guessesCompleteType the remaining weapon item/category data to reduce repeated table lookups
AmmunitionMatching stack quantity is required and consumedCompleteAdd content-level acquisition/availability checks
Armor aggregationEquipped armor attributes contribute to reduction, graphical UI, and terminal stats through the same typed equipment.armor_slots policy used by equip validationFunctionalType armor item/category attributes and add broader damage-kind scenarios
Item quality/condition damageBoth scale weapon damage and crafted items receive quality/conditionFunctionalDocument exact curve and add repair/wear rules
Handedness and slot conflictsTyped category policy expands two-handed weapons across weapon slots and supports category-owned occupies_slots such as shields occupying off_handEnforced transactionally at every production equip path, with conflict and inventory-preservation testsComplete
Damage formula ownershipWeapon and unarmed damage tables execute; an optional ruleset-mapped weapon_damage attribute and class progression damage remain additional fallback/data sourcesPartialDefine canonical weapon/unarmed/spell formula precedence

Items, Economy, Crafting, And World Rules

CapabilityRuntimeValidation/testsStatus
Ruleset item templatesDefinitions sync into normal project item templates with identity and presentationExtraction/sync tests existComplete
Stacks and quantitiesMaterials, ammunition, reagents, inputs, and outputs decrement correctly; stacks merge only when quality and condition also match, while aggregate queries total matching stacksUnit/runtime coverage existsFunctional
Containers and corpse lootBags/corpses use containers; death drops inventory/equipped items and despawns empty corpsesDeath/loot tests existFunctional
Loot tablesCorpse transfer exists, but reusable weighted treasure/drop tables do notRoadmap onlyMissing
NPC respawnDelay, health restoration, loadout reset, and corpse cleanup are rules-ownedRuntime tests existFunctional
Economy and currency pickupBase currency, display conversion, starting wealth, and monetary items workUnit/runtime coverage existsFunctional
Shop price policyItem worth exists; complete buy/sell/vendor modifiers are not part of the official rulesetLimitedPartial
Recipes, quality, and use-based skill gainRequirements, skill, materials, output, quality calculation, deterministic success-based advancement, skill caps, and mastery margins workEnd-to-end ritual-chain and skill-gain tests existFunctional
Crafting stationsRecipes declare stations, but full station targeting/availability enforcement is not establishedLimitedCatalogue only
DurabilityTorch demonstrates time-based condition drain and destructionDurability tests existFunctional
General repair/wearRoadmap onlyNoneMissing
Resource regenerationArbitrarily named [resource_regen.<attribute>] entries run in real-time seconds and name their maximum attribute; the official rules use MPRuntime tests cover configured resources, caps, and active-state gatingComplete

Conditions, Traits, And Creatures

CapabilityCurrent evidenceStatusRequired next step
Timed conditionsTyped definitions, apply/remove effects, permanent or timed duration, replace/refresh/stack/ignore policies, maximum stacks, active-state mirrors, expiry, deterministic stack-scaled additive/multiplicative/bounded modifiers, periodic damage/healing/numeric changes, stable source attribution, lifecycle events, apply/active/tick/remove particle phases, serialized timing/stack/source restoration, transient-FX rebuilding, validation, UI descriptions, and runtime tests are implementedFunctionalAdd derived-stat expressions and an optional wall-clock/offline expiry policy
Immunities and vulnerabilitiesRace traits materialize as entity string lists; action predicates consume them and condition application checks immune_traits without race-specific codePartialAdd trait-driven damage vulnerabilities/resistances and periodic-effect policies
Creature typeRace/class attributes can approximate itMissingAdd creature type/tags independently from race
Undead/SkeletonOfficial Skeleton selects a distinct bundled avatar copy and materializes undead/skeletal; level-4 Clerics can use the words/action-bar-compatible Turn Undead action, whose generic target predicate rejects living creatures transactionally and whose generic turned condition weakens POWER/SPEED with full particlesFunctional vertical sliceReplace the copied atlas; add faction/template composition, loot, vulnerabilities, and localization

Presentation, Assets, And Localization

CapabilityCurrent evidenceStatusRequired next step
Official avatar/icon/tile assetsCompile-time bundled assets load by official id/version; optional typed equipment.avatar_anchors maps arbitrary ruleset slot names onto generic main/off avatar frame anchorsComplete for officialMove registration to package manifests
Project asset overrideMatching project avatars and assets can replace bundled defaultsFunctionalApply the same policy to third-party packages
Item visual fallbackItems render from richer avatar/tile/template paths or an explicit icon; absent item icons resolve through validated ui.item_icon_fallbacks by ruleset kind/default and are materialized during ruleset-template syncFunctionalAdd optional icon composition and a presentation coverage report
Action icon fallbackRules actions resolve an explicit icon, a matching required ability/spell/action icon, then validated semantic healing/condition/kind/default mappingsFunctionalAdd optional icon composition and Creator previews
Semantic procedural FX fallbackExplicit action/condition stages win; validated ruleset-authored role/stage mappings provide shared presets, state actions now spawn their action FX, and conditions rebuild persistent active particlesFunctionalAdd travel-path execution beyond the existing spell path and Creator previews
Icon generation and attributionicons.toml downloads Game-icons masks and writes attributionFunctional for officialSupport aliases, composition, local sources, package output, and unresolved reports
Icon registrationOfficial textures are listed manually through compile-time macrosPartialGenerate the asset registry from the package manifest
Ruleset paletteOfficial palette drives rules-owned visuals and generated iconsFunctionalMake palettes package-owned and optional
Localized runtime messagesOfficial English defaults merge with project locale overridesFunctionalPackage locale discovery and completeness reports
Localized definition names/descriptionsMost names/descriptions are hardcoded English in rules TOMLPartialAdd locale keys with display fallbacks

Creator And Tooling

CapabilityCurrent evidenceStatusRequired next step
Raw project rules editingGame / Rules exposes TOML editing and diagnosticsFunctionalAdd schema-aware completion and structured forms
Ruleset selectionGame / Settings exposes official/project fieldsFunctionalAdd package browser and derived ruleset selection
InspectorsConsole/terminal list, show, summarize, roll, class, item, recipe, XP, and validate commands existFunctionalMake all inspectors consume ResolvedRuleset
Item synchronizationCreator creates/refreshes ruleset-backed item templatesFunctionalGeneralize asset/package origin and conflict handling
Override origin/diffEffective TOML can be inspected, but field origin and minimal override are not visualizedMissingAdd inherited/effective/source views and “override this value”
Fork/import/exportNo first-class ruleset package workflowMissingAdd Create From, import, export, and package validation
Hot reloadProject rules participate in normal project reload/play workflowsPartialDefine deterministic package and asset hot reload

Validation And Testing

Existing Strengths

The current validator checks several important relationships:

  • dice syntax and positive bonus divisors
  • XP table keys, monotonic values, and maximum-level coverage
  • weapon/armor categories and slots
  • damage-kind references
  • item, icon, ability, spell, recipe, skill, class, and resource references
  • crafting skill-gain booleans and non-negative numeric policy values
  • race defaults and relations
  • class unlock and loadout references
  • selected visual references

Runtime regression tests cover:

  • character defaults, loadouts, progression, and explicit overrides
  • the development Hideout2D project loading, resolving the current ruleset model and typed attack/damage-spell/healing-spell actions, retaining the authored Skeleton, resolving official visuals, and synchronizing item templates without rewriting the project
  • race hostility, faction behavior, and attack targeting
  • weapon damage, cooldowns, range, ammunition, and armor
  • spell costs, targets, cooldowns, healing, damage, and events
  • a project-owned classless, level-less sandbox ruleset with skill-gated mining
  • classless item/world-position actions, script payloads, typed take, range rejection, and inventory-full rollback
  • explicit and automatic source-tool selection, wrong/missing tool rejection, source payload identity, durability wear, and destruction
  • custom actor predicates for scalar equality, numeric bounds, and string-list membership, including matching client disabled state
  • target predicates with entity-target validation, server enforcement, direct spell/Basic Attack coverage paths, and UI requirement descriptions
  • transactional actor/target attribute and resource modifications, scalar set, numeric add, fixed/dynamic clamps, self targeting, and failed-requirement rollback
  • optional invocation-scheme parsing, case/whitespace normalization, token and length validation, collision rejection, and server intent resolution
  • death, corpse loot, and NPC respawn
  • resource gathering and respawn
  • crafting inputs, outputs, stack merging, quality, use-based skill gain, and the official raw-material → reagent → reusable-equipment ritual chain
  • resource regeneration and durability

The focused rusterix ruleset test suite is a required gate for this audit. Crafted arrows with different quality or condition intentionally remain separate stacks; inventory totals aggregate those stacks rather than treating the first matching stack as the total.

Missing Validation Layers

The validator does not yet prove:

  • that every declared field has a runtime consumer
  • that an ability or spell has an executable action
  • that every item has an acquisition path
  • that every class has useful level coverage
  • that icons/locales/assets resolve through all fallbacks
  • that recipes are reachable and non-circular
  • that custom modules can be omitted safely
  • that balance stays within defined envelopes

Current Duplication And Ambiguity

These ownership conflicts should be settled before schema 2:

  1. Runtime still accepts legacy spell-side execution/FX fields even though the official ruleset now assigns spell identity/roll data to spells and targeting, costs, cooldown, result, invocation, and FX to actions.
  2. Runtime still accepts legacy ability-side execution fields even though the official ruleset now assigns ability identity/roll data to abilities and execution to actions.
  3. Resource and gather action both describe output and timing-related behavior.
  4. Recipe and craft action both describe the craft operation.
  5. Weapon category, item attributes, item damage table, class progression damage, and the mapped weapon-damage attribute overlap.
  6. Race relations and the faction attribute both participate in disposition without a full faction relation model.
  7. Rich item visuals and icon glyphs have separate precedence chains; these are documented and validated, but Creator does not yet preview the full resolved presentation report.

Priority Backlog

Foundation

  1. Add schema-1 RawRuleset and ResolvedRuleset types. Implemented as the initial migration boundary; domain typing remains incremental.
  2. Enforce schema and minimum engine compatibility. Implemented for exact schema support and minimum engine versions; compatibility-range policy remains.
  3. Add a shared loader interface for official, project-owned, and packaged rulesets.
  4. Record source origin for every resolved definition and field.

Canonical Execution

  1. Define typed requirements, costs, targets, rolls, and effects. Implemented for current action targets, ranges, requirements, resource/item costs, and the initial damage/healing/item/take effects.
  2. Migrate Basic Attack end to end without behavior changes. Implemented for server execution, intent derivation, client state/description, and icon fallback, with resolved actions cached per region and refreshed when rules change.
  3. Consolidate spell/ability/action ownership. Implemented for official schema 1: abilities/spells own identity and roll data; actions own target, range, requirements, costs, cooldown, result, invocation, and FX. Legacy raw adapters remain until schema 2.
  4. Migrate gather and craft through resolved actions. Execution selection and action policy are migrated; schema-2 generation and removal of action/resource/recipe duplication remain.

Authoring And Distribution

  1. Add explicit inheritance/removal semantics and a schema migrator.
  2. Add package manifests, assets, locales, import/export, and Creator package selection.
  3. Add icon inheritance/composition and presentation completeness checks. Implemented for explicit, matching-definition, semantic role/kind, and default icon/FX fallbacks with reference validation; composition and a Creator coverage report remain.
  4. Generate factual rulebook/reference tables from resolved rules.

First New Vertical Slice

  1. Add typed factions, traits, conditions, and creature templates. Traits and the first typed condition runtime are implemented.
  2. Add Skeleton with undead/skeletal traits, faction behavior, combat interactions, loot, avatar, icon fallbacks, tests, and generated docs.

Milestone Acceptance Gates

Typed Schema-1 Resolver

  • Official schema-1 TOML resolves without behavior changes.
  • Official plus project override resolves through the new model.
  • Project-owned standalone rules resolve without an official base.
  • test_projects/Hideout2D.eldiron is migrated and remains green.
  • Unknown and unsupported schema versions fail clearly.

Typed Basic Attack

  • Target, disposition, range, requirement, cooldown, ammunition, roll, quality, condition, damage reduction, event, message, audio, and FX data have one resolved path.
  • Existing official attack behavior and tests remain unchanged.
  • A project-owned standalone ruleset can define its own Basic Attack through the public schema.

Classless Sandbox Actions

  • A project-owned standalone ruleset can omit classes and progression.
  • Skill-gated world actions resolve and execute without a class or level.
  • Entity, item, and world-position targets retain their target kind through execution.
  • A source-tool action can distinguish and wear the exact owned item instance used against its target.
  • The action owns its targeting, range, costs, effects, script event, and cooldown.
  • Domain definitions such as resource nodes describe world state rather than making the official progression model mandatory.

Documentation Synchronization

  • Factual class, item, action, spell, recipe, and progression tables are generated from ResolvedRuleset.
  • Embedded TOML examples are parsed in tests.
  • Documentation generation/checking runs in CI.

Skeleton Vertical Slice

  • Skeleton is composed through public race/type/trait/faction/template capabilities.
  • No Skeleton-specific Rust branch is required.
  • A third-party ruleset can use the same capabilities.
  • Runtime, Creator, validator, tests, icons, localization, and generated documentation are all complete.

Current progress: the public race definition, editable bundled avatar copy, race-default trait materialization, race relations, trait-consuming target predicates, and trait-aware condition immunity are implemented. Creature templates, faction composition, deeper combat interactions, loot, localization, and final atlas art remain.

Audit Sources

The audit is grounded primarily in:

  • crates/ruleset/src/lib.rs
  • crates/ruleset/src/cli.rs
  • crates/ruleset/rulesets/eldiron/v1/*.toml
  • crates/rusterix/src/server/region.rs
  • crates/rusterix/src/server/region_host.rs
  • crates/rusterix/src/client/widget/mod.rs
  • creator/src/docks/data.rs
  • creator/src/docks/console.rs
  • crates/shared/src/rulesets.rs
  • the current Rules, Official Rules, Rules In Eldiron, localization, audio, and player-input documentation

This document should be updated when a capability changes status. A feature is not complete merely because one table or code path exists.