Project gameplay policies
Engine components supply reusable mechanics. Projects own victory rules, possession choices, death presentation, and decisions about when to seek cover.
Existing version-one attachments migrate at aggregate project read boundaries:
| Former built-in | Project script | Responsibility |
|---|---|---|
| Squad Control | Party Control | Membership, cycling, possession and death handoff |
| Team Roster | Battle Roster | Counts, elimination events and win/draw presentation |
| Corpse | Death Presentation | Fall, fade, collision release, revival and removal |
| AI Mover's health-based cover fields | Cover Tactics | Health threshold, hold time and cooldown |
These are ordinary editable project scripts, installed only when existing content needs them. New projects receive none. Native Health events, Team queries, controller control-source commands, Sprite Renderer commands, and AI Mover's explicit cover request provide the reusable mechanisms. [Output] exposes runtime values to inspectors and HUD bindings without persisting them. Typed map outputs are addressable by key in HUD bindings.
Party Control uses the ordered Scene.FindInGroup query so unrelated scenery does not consume its script list capacity. Query scans still respect execution budgets. Death Presentation initializes its Health observers when first enabled and reconciles a revival missed while disabled.
Forward migration
The migration works on detached project, scene and prefab records before hydration or export. It preserves authoring fields, attachment enabled state, scene ownership, Flow action/event references, and HUD expressions. Former possession keys and bumper bindings become project input actions. Cover Tactics executes before its AI Mover; health decisions are no longer embedded in native navigation. Project-level references and replacement declarations persist in the same write before hydration. Literal text, variable/asset keys, and quoted expression text remain unchanged.
Project declarations compile from current source or the existing last-known-good recovery path before transformed content can load. Conflicting declarations, missing required replacement components, unsupported native versions, and script references that require manual conversion stop migration with an actionable error. Behavior assets with retired component references also stop migration: their source must be explicitly converted before retrying. No failed migration overwrites those source bytes.
Editor asset reads use a project-scoped normalized view, so shared prefab storage is not rewritten for one project. Loaded scenes save through the normal scene path; unopened scenes migrate when read. Server, IndexedDB and folder-backed projects share this path. Authoring-folder reads, package imports/exports, and the standalone player use the same aggregate migration. Reopening migrated content is idempotent.
Target selection
A newly attached Ranged Weapon uses auto to select its own nearest enemy. Choose mover to share an eligible AI Mover target, with nearest-enemy fallback. Version-one weapon attachments migrate to mover to retain their behavior. Ballistic resolves swept impacts at the earliest eligible target or obstacle; obstacles win ties, and a finite positive launch speed overrides its default.