feat: the cast on the site, and a first-run onboarding flow in the game - #70
Merged
Merged
Conversation
Asked for: more character development on nightcell7.com, and a gameplay onboarding flow. THE CAST The story bible (PRD §7.5 to §7.7) has a supporting cast, four factions and MIRAGE, and the site showed none of them: two dossiers and nothing else. - packages/game-core/src/cast.ts holds them as data: Jonas Vale, Director Mara Vey, Colonel Arman Daryan, Silas Kade; the Nightcell Program, the Security Directorate, Orison Strategic and the International Verification Mission; MIRAGE. The site and the game both read it, so no surface can describe a person differently. - /characters: the protagonists as a matched pair, the supporting cast with faction, role and which campaign you meet them in, the factions, MIRAGE, and the fiction notice. - Each dossier gains "Who they answer to" (Vey / Daryan) and "Who they cross paths with" (Vale, Kade), the same shape for both sides. - Linked from the home page's Two perspectives section and the footer. Public copy, under the home-page timeline's rule: who these people are and what the player sees early, never what the campaigns reveal. Vale's death is already public on that timeline; who authorised the cleanup and what Nightcell 7 designates are not. cast.test.ts refuses those reveals, any Arabic-script text while Farsi awaits native review (docs/content-and-culture.md), and a Daryan written as a villain, and holds both protagonists' circles to the same size (§14.3). ONBOARDING A first-time player got every option at once and was then dropped into Team Deathmatch against four bots with no guidance. - A briefing on the deploy gate: which institution the chosen side belongs to and whose story it is, from the same cast data; what the yard is; that the two sides can never share a colour. Re-renders on a side change. - A coach in the yard that teaches one control at a time, in the order PRD §10.1 introduces systems (move, look, sprint, crouch, jump, fire, reload, switch, frag), and advances only when the player actually does the thing, never on a timer. It measures each step against a baseline, so "switch" means changing slot and "frag" means spending one; it waits while the player is dead, because a respawn resets both and would complete steps by itself; it counts turns across the +-pi wrap correctly. - Skippable from the gate. The cursor is locked in play, so a skip button in the yard could not be clicked; Esc brings the gate up and the button is there. A live region announces each step. Remembered in nc7.onboarded; a blocked storage counts as onboarded rather than nagging forever. - Logic is pure in apps/game/src/onboarding.ts, 12 tests. Also fixed: the side blurbs on the gate still said "Cyan band" and "Orange band", which #62 made wrong; the player now chooses the colour. Verified: a real build under the gameplay capture tool shows the briefing on the gate, the coach on step 1 ("W A S D · Move"), and the coach advancing to "Mouse · Look around" once the scripted player walks. /characters and both dossiers render with no horizontal overflow at 1280 or 390 px. pnpm check green, 369 tests. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ThreatCrush Security Scan9 finding(s) HIGH/CRITICAL: 4 | MEDIUM: 5
Snippets are redacted; ThreatCrush never prints matched credential material. |
Merged
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.
You asked for more character development on nightcell7.com, and a gameplay onboarding flow.
The cast
The story bible (PRD §7.5–§7.7) defines a supporting cast, four factions and MIRAGE, but the site showed none of them: two dossiers and nothing else.
packages/game-core/src/cast.tsholds them as data, and both the site and the game read it, so no surface can describe a person differently:/characterspage with:Spoiler and content rules. The page follows the home-page timeline's rule: say who these people are, never what the campaigns reveal. Vale's death is already public on that timeline. Who authorised the cleanup, and what "Nightcell 7" designates, are not.
cast.test.tsfails the build if:docs/content-and-culture.md),Onboarding
A first-time player used to get every option at once, then was dropped into Team Deathmatch against four bots with no guidance.
A briefing on the deploy gate. It says:
It re-renders when you change side.
A coach in the yard. It teaches one control at a time, in the order PRD §10.1 introduces them: move, look, sprint, crouch, jump, fire, reload, switch, frag. It moves on only when you actually do the thing, never on a timer.
Skipping. The cursor is locked during play, so a skip button in the yard couldn't be clicked. Press Esc to bring up the gate, and Skip training is there. Each step is announced to screen readers. Finishing or skipping is remembered in
nc7.onboarded. If browser storage is blocked, the game treats you as onboarded rather than showing the coach every time.The logic is a pure module,
apps/game/src/onboarding.ts, with 12 tests.Also fixed: the side descriptions on the gate still said "Cyan band" and "Orange band". Since #62 you choose your side's colour, so those were wrong.
Verified
W A S D · Move)Mouse · Look aroundonce the scripted player walks/charactersand both dossiers render with no horizontal scrolling at 1280 px and 390 px.pnpm checkgreen, 369 tests.🤖 Generated with Claude Code