Skip to content

feat(walls): model deterministic visual-variant groups #224

Description

@zoeyrose

Parent: atrinik/classic#332

Outcome

Add an authored, validated content representation for opt-in deterministic visual-variant groups so render-equivalent walls can vary without encoding that choice as a different gameplay archetype.

The first fixture is the existing fwall_sand1a/fwall_sand1b pair. The schema must remain useful to later generated forms/materials and coordinate with #61's stable semantic visual-family catalog rather than deriving identity from paths or face-table order.

Scope

  • Define stable visual-family/group IDs, canonical member IDs/order, optional integer weights and authored seed, fixed/automatic mode, and a required complete fallback face.
  • Declare the shared wall form/compatibility identity needed to prove members are interchangeable for presentation.
  • Extend the canonical content schema, parser/generator, documentation, and validation. Do not hide the contract in unknown free-form object properties even if Classic currently preserves them.
  • Validate referenced face existence and compatibility across dimensions, alpha silhouette/anchor, draw_double, animation/turning, glow, visibility blocking, and gameplay-significant archetype fields.
  • Emit deterministic runtime metadata for Classic without changing existing face IDs or deleting the legacy a/b archetypes.
  • Coordinate names/ownership with the reusable recipe generator so one family can later name generated members without a parallel ID system.

Validation cases

  • Valid two-member full-wall group using the sand faces.
  • Stable order independent of source discovery or packaging order.
  • Explicit fixed a and fixed b representations plus automatic selection.
  • Missing face, duplicate member, zero/negative/overflowing weight, unknown version, and missing fallback.
  • Same-size but different silhouette/anchor, different dimensions, animation, glow, draw_double, or gameplay semantics.

Acceptance criteria

  • The authored format has a version, stable semantic identity, deterministic canonicalization, and generated documentation/schema artifacts where required.
  • Reordering files or runtime face numbers does not reorder members or change selection test vectors.
  • The sand group validates while every incompatible fixture fails with a field/member-specific diagnostic.
  • Fixed selection is representable without inventing a duplicate gameplay archetype, while both existing sand archetypes remain valid fixed legacy identities.
  • A missing/unknown group or unsupported version names an ordinary complete fallback and cannot produce a partial presentation.
  • Generated Classic metadata is byte-identical across repeated clean builds and carries exact input identity/provenance.
  • The schema explicitly remains opt-in; unregistered wall objects and exceptional families retain their current singular face/animation behavior.

Non-goals

  • Editing production maps; that is the sand-pilot child.
  • Generating new pixel art or extracting templates from flattened PNGs.
  • Applying generic variation to arbitrary same-sized faces.
  • Replacing the stable identity/catalog work already owned by #61.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Fields

    Priority

    None yet

    Start date

    None yet

    Target date

    None yet

    Effort

    None yet

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions