README.md 3.8 KB

Ember development scripts

mission_ember.lua currently implements only the opening landing combat slice. It is not a complete mission controller. The initial six-squad selection needs an in-game playtest. Bridge interaction, later encounters, authored checkpoints, dialogue and mission completion remain to be implemented.

The original installed SDK inspected on 2026-09-04 lacks the opening squad definitions. This controller intentionally reports the missing binding before publishing any gameplay state. Build this branch and regenerate the SDK first; the scenario-scoping fix in the squad linker addresses object-key collisions between campaign and arcade content. Generation must still verify runnable member counts, actor bindings and anchors. The isolated SDK generated in build/sdk-generated now passes these checks for the initial six opening squads. Do not remove checks or supply replacement enemies.

After regeneration, copy this directory's contents to Sunrise/scripts beside the generated Sunrise/sdk/lua directory in the game artifact tree. The runtime selects mission_ember.lua by the activity name. Enable the existing server.activation.mission_scripting setting.

The controller declares region 64 at startup and waits for the client to hold it before spawning enemies. Enemy clear requires evidence that every watched squad existed and now has no live members. Duplicate clear events do not advance twice, and removed squads must be observed alive again. Region transit and script reload do not reset the encounter. Encounter:reset is available for a future confirmed checkpoint callback; this version does not infer a wipe from region transit.

Fresh launches declare the opening powerhouse state through initial_state. The installed state.activity.arrival_overrides must also include mission_ember with bubble: 8 and slice_set: 64; the arrival router otherwise chooses the first live bubble (the reactor area). The branch's bundled defaults include this override. Existing settings need the row added explicitly. Restart the game after changing arrival settings.

The combat-clear callback displays the authored bridge-control directive. It does not move the bridge, complete the activity or silently proceed through unimplemented encounters.

Run local checks from the repository root:

lua5.4 tests/mission_ember_encounter_test.lua
lua5.4 tests/mission_ember_controller_test.lua
python -m unittest discover -s tests -p 'test_*.py'
g++ -std=c++23 -O1 -g -fsanitize=address,undefined -fno-omit-frame-pointer \
    tests/squad_reference_scope_test.cpp -lcrypto -o /tmp/ember-squad-reference-test
ASAN_OPTIONS=detect_leaks=0 /tmp/ember-squad-reference-test

Leak detection is disabled in this command because it cannot run under the sandbox's tracing; address and undefined-behavior instrumentation remain enabled. The C++ test uses synthetic identities and exercises the production reference resolver. Lua tests model the context API; they do not substitute for a live mission run.

Generate a local SDK inventory without committing package data:

python tools/inspect_mission_sdk.py /path/to/Sunrise/activity_sdk.pack \
    --shard /path/to/Sunrise/sdk/scenarios/80B3C09E-HASH.pack \
    --output /tmp/mission-ember-inventory.json

The current landing test places ten SDK squads (the original six and the four available bonus-support squads), using their authored default counts. Bonus-wave timing remains unverified; the missing bonus-anchor and far-side definitions are not substituted. Startup snaps the six bridge devices closed and resets the bridge objective after the initial state is published. The region callback no longer redundantly selects that state. Bridge interaction and extension still need scripting; this test checks its initial state only. Server/client info logging is installed to expose refused spawn and device requests on the next fresh launch.