Skip to content

Model structural surfaces and free-air elevation #12

Description

@zoeyrose

Important

This issue is implemented in the fresh MIT-licensed Go server under the replacement program. Its gameplay and content-design decisions remain authoritative. C, CPython, classic packet, file-path, and enum details in the preserved specification are historical evidence only; do not copy, translate, or structurally port GPL implementation code.

Replacement implementation contract

Make stable SurfaceID, support height, collision, lighting, and free-air elevation foundational Go world concepts. Generated protocol contracts and the shared Rust renderer/editor model consume them directly; there is no interim legacy sub-layer representation.

The server remains authoritative, consumes versioned compiled content, and exposes bounded generated Game Protocol 1 messages. Pure rules may use a specifically approved typed CEL environment. Starlark is not part of this issue unless the separate residual-scripting decision explicitly approves it.

Required verification

  • Preserve every observable rule, balance decision, disclosure boundary, and anti-exploit invariant from the specification below.
  • Add deterministic Go unit/property tests and wrapper-managed scenario coverage at the appropriate integration boundary.
  • Add bounded malformed-input and persistence-failure cases where this feature accepts content, network, or stored data.
  • Add Go/Rust protocol conformance fixtures for every new cross-process field; the client must not reconstruct authoritative rules from prose.
  • Demonstrate that implementation and tests contain no copied GPL source/test material and execute no runtime Python.
Preserved product/design specification and historical implementation notes

Parent and roadmap

Outcome

Complete Stage B by replacing the seven-slot elevation/light/damage model with explicit bounded structural surfaces and free-air elevation.

Scope

  • Give each walkable/structural surface stable local identity, elevation, terrain/collision properties, and light samples.
  • Make living, item, effect, projectile, movement, falling, damage, and animation state reference a surface or explicit free-air elevation.
  • Migrate lighting and wire state to the bounded surfaces that actually exist.
  • Update authored schema, content, editor, checkers, scripts/plugins, runtime save/load, fixtures, and consumers together.

Superseded path / cleanup target

Remove NUM_SUB_LAYERS, author-facing/runtime sub_layer, sub-layer mailboxes, and residual numeric layer semantics after no current consumer remains.

Acceptance criteria

  • Movement, falling, collision, exits, lighting, damage placement, and linked physical depths operate on explicit surfaces.
  • Authored and mutable state preserve stable surface identity across save/reload and delivery.
  • No client/server/editor/checker/script consumer requires numeric sub-layers.
  • The old seven-sublayer model is deleted without flattening linked physical maps.

Validation baseline

Before: ordered display is modernized but gameplay/elevation still depends on slots 0–6.

After: explicit structural surfaces own support, height, collision, light, and event placement.

Run movement/falling/collision/light/damage matrices, multi-storey fixtures, save/reload/snapshot tests, whole-content validation, server checks, and native builds.

This issue is a bounded child of atrinik/atrinik#156. The parent remains open until every sibling child is complete.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    Status
    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions