No project code is in Assembly-CSharp any more. Five assemblies: Core (no dependencies), Locomotion.Math, Skills, Game (everything else under Scripts), and StarterAssets. Game is one assembly rather than one per area, which is what the plan assumed. Measuring the dependency graph first found three cycles, all through UI — CharacterPanelView reaches into Dialogue, PlayerControlLock into Player, and UILayerBootstrap into Cinematics — plus two edges a using-scan cannot see, because NPCStandIn is in the global namespace. Assemblies cannot be circular, so splitting further means relocating those three files. That is a code-movement task, not an asmdef task, and nothing needs it yet. StarterAssets had to get an assembly of its own. It had none, so it lived in Assembly-CSharp, and an asmdef assembly cannot reference the predefined assemblies — four runtime files use it, and all four would have stopped compiling. The payoff is immediate: BootstrapTests no longer needs reflection to reach NPCStandIn and CinemachineFollowsPlayer, which is exactly why Phase 3 wanted this. Assets/Editor/PlayerBuild.cs is the headless build entry point. It reads the enabled scenes, asserts Bootstrap is scene 0 because the player opens scene 0 on launch, honours the -buildOutput the CLI forwards from -o, and calls EditorApplication.Exit(1) on anything short of Succeeded — without which Unity exits 0 on a build that produced nothing and CI goes green on it. Verified end to end: a 172MB .app in about two minutes. Two renames, both different from what the plan described. DialougueSkillComparison.cs contains a class called SkillFunctions — the filename never matched the type, so it is now SkillFunctions.cs. The two .yarn files with spaces in their names lost the spaces rather than becoming kebab-case, which would have made them inconsistent with Bartender.yarn and SC101.yarn; spaces were the actual problem. Both renames preserved their .meta GUIDs, and the yarnproject graph keys and the two character sheets were updated. EditMode 42/42, PlayMode 5/5, YarnCheck 9 files / 35 nodes, make build green. Co-Authored-By: Claude Opus 5 <[email protected]>
71 lines
2.6 KiB
Markdown
71 lines
2.6 KiB
Markdown
---
|
|
id: bradford-kane
|
|
name: Bradford Kane
|
|
chr: —
|
|
yarn_file: Assets/Dialogue/Characters/BradfordKane.yarn
|
|
status: planned
|
|
scenes: [SC101]
|
|
---
|
|
|
|
# Bradford Kane
|
|
|
|
> **Effectively unwritten.** `Bradford_Kane_Talk` contains one line — `<<set
|
|
> $spoke_to_bradford_kane = true>>` — and nothing else. The chair menu already offers him as an
|
|
> option in every variation, so a player can introduce themselves to him and receive silence.
|
|
> This is the most visible gap in SC-101.
|
|
|
|
## Who they are
|
|
|
|
*Unwritten.* What exists: he is the gentleman on the protagonist's **right** at the table, the
|
|
one seated further from the head than Chevalier Cassian Thal. That is the whole of it.
|
|
|
|
The structural role is available and worth taking deliberately: the chair scene currently has
|
|
one talker and one silence, and the menu variations (`Left_Not_Right`, `Right_Not_Left`, `Both`)
|
|
are already built to track both conversations independently. The architecture is waiting for him.
|
|
|
|
## How they speak
|
|
|
|
*Unwritten.* One constraint worth honouring: he should not be a second Chevalier. Cassian Thal
|
|
is courteous, archaic and institutional. If Kane is also old money at ease, the table has one
|
|
voice twice. The name reads American against Thal's continental title — that contrast is free
|
|
and probably should be used.
|
|
|
|
## Verbal tics
|
|
|
|
*Unwritten.* Maximum two.
|
|
|
|
## What they never say or do
|
|
|
|
*Unwritten.*
|
|
|
|
## What they know
|
|
|
|
| They know | True? | Reveals when | Records |
|
|
|---|---|---|---|
|
|
| — | — | — | `$spoke_to_bradford_kane` (set, currently unused by any branch) |
|
|
|
|
The candidate registry lists **testimony** clues as `Planned` for all three candidates, with no
|
|
`sceneId`. Kane is the obvious carrier for at least one: he is already placed, already
|
|
reachable, and already has a flag recording that the player met him.
|
|
|
|
## What they are wrong about
|
|
|
|
*Unwritten.*
|
|
|
|
## Their read on the protagonist
|
|
|
|
*Unwritten.* Note the design constraint before choosing one: Chevalier Cassian Thal already
|
|
implements the "mirror the leading lean back at the player" mechanic. Kane should not repeat it.
|
|
A contrast would be stronger — a figure who reads the protagonist as one specific thing and
|
|
does not update, or one who declines to guess at all.
|
|
|
|
## One line that is 100% them
|
|
|
|
*Unwritten. Write this first — it is the cheapest way to find out who he is.*
|
|
|
|
## Open threads
|
|
|
|
Everything. Before drafting, fill the vault character sheet (`[[Character Sheet Handbook]]`) —
|
|
§1 placement and §2 the two truths — because he does not yet have a faction row, and writing him
|
|
before that is exactly the failure mode that document exists to prevent.
|