Repository navigation
Conversation
strike_nokris/strike_nokris.lua drives the Nokris strike: opening crystals and relic knight, ritual gauntlet, arena carrier rounds, portal, three shielded boss phases and the chest. Helpers load as strike_nokris.<module>. The completion model ends at the accepted result; no reward or exit commands follow it, and MISSION COMPLETE is raised through context:complete_mission.
objective.assign maps the script's integer task group onto the generated mission.TaskGroup handles and the squad's slot; revisions are gated natively. objective.count reads the authored group count from those handles.
0.5.0 replaces the visible directive entry in place and clears it with clear_directives(); the lane rotation and the disabled former entry drew a stray marker under the new type-68 layout.
The type-30 occupancy monitor on slot 43 never reports a change under the 0.5 DLL, so SQ_TUNNEL_START never spawned and the tunnel support and ogre room never populated behind it.
0.5.0 slot handles carry no objective_count, so the assert raised a Lua error the moment the arena entrance admitted the first carrier round and the VM stopped; no carrier knight was ever placed.
Same 0.5.0 slot-handle difference as the serial carriers: the field is absent, so the assert would have faulted the VM at the first shield phase.
A re-placed squad slot's second lifetime reports no alive field on 0.5, so round 3 was never adopted and round 4 was never placed.
A re-placed carrier slot reports no alive count on 0.5 and keeps objective revision 1. The first report of the replacement lifetime blocked the fight with carrier_population_unknown, so a lost relic ended the boss encounter.
Place the same-wave sibling squads the reconstruction left out (gauntlet, tunnel, arena acolytes and carrier escorts, third arena support wave), run arena carrier rounds three and four on their own fresh slots, and summon the boss-room G squads on each return to damage. Every added squad is optional: an unresolvable or refused one is skipped, never a route block. Dialogue gains the intel line, the opening relic hint, the chant reaction and Nokris's four taunts.
Records each gate the server sees in nokris.server_phase; the native reaction still drives the fight. Gates compare ten-bit levels because the clamp holds the boss at the first level at or above each floor.
The provider admits a phase when the boss squad's damage state reaches the clamp level for the next floor (880/614/338 of 1023). The client hook's reaction is now a fallback: it is held for 1.5 s and starts a phase only if the server never reported it, since a dropped lane-2 frame at a gate would otherwise stall the fight. The portal opens from either source and takes the boss generation from the model. nokris.phase_source records which source started each phase. Defeat, completion and the gate release stay with the native owner.
Phases and their portals start only from the server's replicated boss health. The hook's gate reaction is ignored; it keeps the capture sequence current for its death event. A gate sample that arrives before the model can take it is held, because the clamp keeps the level flat and the sample never repeats.
Scene spawns bind the combatant first, so the entry population now takes a combatants list and commits the binding a frame ahead of the type-1 placement. Atom and ability programs need the squad-bound actor. The damage-state wrap is diagnostic: on 86657 the client sends one type-2 Sense at spawn and never republishes, so it records nothing.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Draft until stanuwu/Sunrise#128 is merged. The script calls API that only exists on that branch (
set_squad_attachment,set_mission_effect,set_volume_active,release_native_phase,complete_native_encounter,on_event_trigger_state,on_event_native_reaction,bind_combatant_to_squad), so it won't run on current master. It also needs that branch to report replicated squad damage to Lua ason_event_damage_state; without it the boss never leaves phase 1.This adds Strange Terrain, the Nokris strike, as
strike_nokris/. It follows the 0.5 layout:strike_nokris/strike_nokris.luais the entry point and everything else is required asstrike_nokris.<module>. Nothing outside that folder is touched.What's in it
strike_nokris/tests/: the optional entry population, and the phase provider replayed against a recorded fight's health timeline (NOKRIS_HEALTH_CSV).Not done
alive_count; the last health sample in a fight is well above zero.Testing
Ran it in game on build 86657 against the Sunrise branch above, most recently a full strike with all three phases starting server-side. Both Lua tests pass offline. I'll re-run once that PR settles and its API names are final, then take this out of draft.