Files
nightclub-arcadia/NightclubArcadia/Assets/Dialogue/Characters/ChevalierCassianThal.yarn
T
lennartandClaude Opus 5 bb0f2b760c give the runtime code assemblies, a build entry point, and fix two names
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]>
2026-08-25 21:01:27 +02:00

151 lines
6.5 KiB
Plaintext

// Everything Ser Cassian Thal ever says.
//
// These nodes share a title, which makes them a node group. Callers just
// `<<detour Chevalier_Cassian_Thal_Talk>>` and Yarn runs the most specific variation whose
// `when:` conditions pass. Adding a new variation later means adding a node,
// not editing a growing <<if>> chain.
//
// Each variation sets $went_inside so the calling scene knows the verdict.
title: Chevalier_Cassian_Thal_Talk
position: 44,-117
---
<<if $spoke_to_chevalier_cassian_thal>>
Chevalier Cassian Thal: Well met good sir.
<<else>>
<<set $spoke_to_chevalier_cassian_thal = true>>
Narrator: You introduce yourself to the man. He takes measure before bowing his head and tipping his forehead with a half-open fist.
Chevalier Cassian Thal: {$player_name_full}, nice to meet you. I'm Chevalier Cassian Thal of Basel and Cyprus.
THE FLOAT: His name reeks of money. Old money.
<<check provenance Hard>>
<<if $check_result>>
PROVENANCE: Basel? Makes total sense. But which connections does this old codger have to Cyprus?
-> Inquire further about Cyprus.
<<detour SC101_Inquire_Cypurs_Chevalier_Cassian_Thal_Talk>>
-> Leave it be.
<<endif>>
<<endif>>
<<if $saw_knights_atlantean_cross_on_place_card eq true and $had_the_estate_drink eq true>>
<<detour SC101_Hook_Asks_Candidate_Chevalier_Cassian_Thal_Talk>>
<<endif>>
===
title: SC101_Inquire_Cypurs_Chevalier_Cassian_Thal_Talk
position: -175,95
---
<<set $inquired_about_cyprus = true>>
Chevalier Cassian Thal: Oh, a sharp question, {$player_name_full}.
Narrator: The knight laughs.
Chevalier Cassian Thal: I assume you should ask your friend Mr. Doss, I am of no right to reveal this connection.
<<if $looking_for_doss eq false>>
<<set $looking_for_doss = true>>
Narrator: Mr. Doss?
PROVENANCE: Mr. Doss. We need to find him, appraise him, document our findings, file them, cross-reference them ...
<<else>>
CONFLUENCE: There he is again: Mr. Doss.
<<endif>>
===
title: SC101_Hook_Asks_Candidate_Chevalier_Cassian_Thal_Talk
position: 146,85
---
<<if $inquired_about_cyprus>>
Chevalier Cassian Thal: This were a lot of questions. Now tell me something about yourself, old chap.
<<endif>>
<<detour SC101_Asks_Candidate_Chevalier_Cassian_Thal_Talk>>
<<if $declared_candidate_to_chevalier_cassian_thal>>
Narrator: Chevalier Cassian Thal turns towards the head of the table again, just, when another man stands up.
<<jump SC102_Table>>
<<endif>>
===
title: SC101_Asks_Candidate_Chevalier_Cassian_Thal_Talk
position: 157,261
---
<<set $winner = top_skill($self_lean_made_asset, "asset", $self_lean_journalist, "journalist", $self_lean_inheritor, "inheritor")>>
<<set $previous_winner = $winner>>
<<if $winner eq "asset">>
Narrator: He leans in and whispers:
Chevalier Cassian Thal: I assume you are here to observe the gathering in the interest of ... our friends of the Vaselian Concordat?
-> Yes, I am.
<<set $self_lean_made_asset += 1>>
<<detour SC101_Declares_Asset_Chevalier_Cassian_Thal_Talk>>
-> You must be mistaken.
<<set $self_lean_journalist += 1>>
<<set $self_lean_inheritor += 1>>
<<detour SC101_Deny_Candidate_Chevalier_Cassian_Thal_Talk>>
<<elseif $winner eq "journalist">>
Chevalier Cassian Thal: I got the feeling I may read my answers in tomorrow's newspaper.
Narrator: He says it with a boyish grin, as if he is sure he hasn't disclosed anything contentious.
-> You actually may.
<<set $self_lean_journalist += 1>>
<<detour SC101_Declares_Journalist_Chevalier_Cassian_Thal_Talk>>
-> No, I got nothing to do with newspapers and such!
<<set $self_lean_made_asset += 1>>
<<set $self_lean_inheritor += 1>>
<<detour SC101_Deny_Candidate_Chevalier_Cassian_Thal_Talk>>
<<else>>
Chevalier Cassian Thal: You probably look to settle your parent's debts?
FACEWORK: He doesn't seem emotional about it, he is just interested.
-> I actually am.
<<set $self_lean_inheritor += 1>>
<<detour SC101_Declares_Inheritor_Chevalier_Cassian_Thal_Talk>>
-> Oh, I don't know about any debt, I hope they didn't borrow money from you?
<<set $self_lean_journalist += 1>>
<<set $self_lean_made_asset +=1>>
Chevalier Cassian Thal: Oh god, no, they didn't borrow anything from us.
CONFLUENCE: Us?
<<detour SC101_Deny_Candidate_Chevalier_Cassian_Thal_Talk>>
<<endif>>
===
title: SC101_Declares_Asset_Chevalier_Cassian_Thal_Talk
position: -9,670
---
<<set $declared_candidate_to_chevalier_cassian_thal = true>>
Narrator: Chevalier Cassian Thal looks knowingly and cannot hide a little smirk.
Chevalier Cassian Thal: Well, then let us hope the ... others follow the Knight's compromise.
Narrator: He winks at you.
FACEWORK: He seems to know more about us, than we know about ourselves. Though if we back out now he will become suspicious.
===
title: SC101_Declares_Journalist_Chevalier_Cassian_Thal_Talk
position: -222,667
---
<<set $declared_candidate_to_chevalier_cassian_thal = true>>
Narrator: Chevalier Cassian Thal laughs.
Chevalier Cassian Thal: Well, then let me give you something to write about: You and your readers will be surprised to hear, what you will witness in a second.
CONFLUENCE: He can hardly hide his smirk.
===
title: SC101_Declares_Inheritor_Chevalier_Cassian_Thal_Talk
position: 207,664
---
<<set $declared_candidate_to_chevalier_cassian_thal = true>>
Chevalier Cassian Thal: You may very well get your chance this week, my boy.
FACEWORK: His look is benevolent, nearly fatherly.
CONFLUENCE: What should our parents have done, that requires repayment?
===
title: SC101_Deny_Candidate_Chevalier_Cassian_Thal_Talk
position: 436,260
---
Chevalier Cassian Thal: Oh, I am rarely wrong in matters like these. Though enlighten me: What else could have been your wish coming here?
FACEWORK: He looks genuinely interested.
<<set $winner = top_skill($self_lean_made_asset, "asset", $self_lean_journalist, "journalist", $self_lean_inheritor, "inheritor")>>
<<if $previous_winner == $winner>>
-> No, you are totally right, indeed.
<<if $winner == "asset">>
<<detour SC101_Declares_Asset_Chevalier_Cassian_Thal_Talk>>
<<elseif $winner == "journalist">>
<<detour SC101_Declares_Journalist_Chevalier_Cassian_Thal_Talk>>
<<else>>
<<detour SC101_Declares_Inheritor_Chevalier_Cassian_Thal_Talk>>
<<endif>>
-> Actually ...
<<detour SC101_Asks_Candidate_Chevalier_Cassian_Thal_Talk>>
<<else>>
<<detour SC101_Asks_Candidate_Chevalier_Cassian_Thal_Talk>>
<<endif>>
===