added a path to SC102 from SC101

This commit is contained in:
2026-08-16 13:52:48 +02:00
parent 6f2225f911
commit bea880a999
11 changed files with 318 additions and 28 deletions
+64
View File
@@ -0,0 +1,64 @@
{
"cSpell.enableFiletypes": [
"yarnspinner"
],
"cSpell.languageSettings": [
{
"languageId": "yarnspinner",
"patterns": [
{
"name": "yarn-commands",
"pattern": "/<<[^>]*>>/g"
},
{
"name": "yarn-expressions",
"pattern": "/\\{[^}]*\\}/g"
},
{
"name": "yarn-variables",
"pattern": "/\\$[a-zA-Z_][a-zA-Z0-9_]*/g"
},
{
"name": "yarn-markup",
"pattern": "/\\[[^\\]]*\\]/g"
},
{
"name": "yarn-hashtags",
"pattern": "/#[a-zA-Z_][a-zA-Z0-9_:-]*/g"
},
{
"name": "yarn-node-markers",
"pattern": "/^(---|===)$/gm"
},
{
"name": "yarn-headers",
"pattern": "/^(title|tags|position|color|colorID|tracking|custom|style):.*/gm"
},
{
"name": "yarn-character-names",
"pattern": "/^\\s*[A-Za-z_][A-Za-z0-9_]*(?=:)/gm"
},
{
"name": "yarn-comments",
"pattern": "/\\/\\/.*$/gm"
}
],
"ignoreRegExpList": [
"yarn-commands",
"yarn-expressions",
"yarn-variables",
"yarn-markup",
"yarn-hashtags",
"yarn-node-markers",
"yarn-headers",
"yarn-character-names",
"yarn-comments"
]
}
],
"cSpell.words": [
"Cassian",
"Thal",
"Vaselian"
]
}
@@ -8,6 +8,7 @@
// Each variation sets $went_inside so the calling scene knows the verdict. // Each variation sets $went_inside so the calling scene knows the verdict.
title: Bartender_Talk title: Bartender_Talk
position: -121,-60
--- ---
<<if $spoke_to_bartender>> <<if $spoke_to_bartender>>
<<if $revealed_fugue_to_bartender>> <<if $revealed_fugue_to_bartender>>
@@ -56,6 +57,7 @@ title: Bartender_Talk
=== ===
title: SC101_Hook_Drink_Bartender_Talk title: SC101_Hook_Drink_Bartender_Talk
position: 116,222
--- ---
Bartender: One Estate coming right up. Bartender: One Estate coming right up.
<<if $had_the_estate_drink>> <<if $had_the_estate_drink>>
@@ -85,6 +87,7 @@ AMNESTY: Is that the taste of our favorite drink? I cannot remember ...
=== ===
title: SC101_Hook_Questions_Bartender_Talk title: SC101_Hook_Questions_Bartender_Talk
position: -139,224
--- ---
Bartender: Sure, what do you want to know? Bartender: Sure, what do you want to know?
-> Question 1 -> Question 1
@@ -1,18 +1,19 @@
// Everything Ser Cassian Thal ever says. // Everything Ser Cassian Thal ever says.
// //
// These nodes share a title, which makes them a node group. Callers just // These nodes share a title, which makes them a node group. Callers just
// `<<detour Ser_Cassian_Thal_Talk>>` and Yarn runs the most specific variation whose // `<<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, // `when:` conditions pass. Adding a new variation later means adding a node,
// not editing a growing <<if>> chain. // not editing a growing <<if>> chain.
// //
// Each variation sets $went_inside so the calling scene knows the verdict. // Each variation sets $went_inside so the calling scene knows the verdict.
title: Chevalier_Cassian_Thal_Talk title: Chevalier_Cassian_Thal_Talk
position: 44,-117
--- ---
<<if $spoke_to_chevalier_cassian_thal>> <<if $spoke_to_chevalier_cassian_thal>>
Chevalier Cassian Thal: Well met good sir. Chevalier Cassian Thal: Well met good sir.
<<else>> <<else>>
<<set $spoke_to_chevalier_cassian_thal = true>> <<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. 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. 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. THE FLOAT: His name reeks of money. Old money.
@@ -24,10 +25,15 @@ title: Chevalier_Cassian_Thal_Talk
-> Leave it be. -> Leave it be.
<<endif>> <<endif>>
<<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 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}. Chevalier Cassian Thal: Oh, a sharp question, {$player_name_full}.
Narrator: The knight laughs. 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. Chevalier Cassian Thal: I assume you should ask your friend Mr. Doss, I am of no right to reveal this connection.
@@ -39,3 +45,106 @@ Chevalier Cassian Thal: I assume you should ask your friend Mr. Doss, I am of no
CONFLUENCE: There he is again: Mr. Doss. CONFLUENCE: There he is again: Mr. Doss.
<<endif>> <<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>>
===
@@ -27,6 +27,10 @@ title: Declarations
<<declare $check_degree = "" as string>> <<declare $check_degree = "" as string>>
<<declare $check_skill = "" as string>> <<declare $check_skill = "" as string>>
// Used by top_skill
<<declare $winner = "" as string>>
<<declare $previous_winner = "" as string>>
// Candidate lean. Three permanently-live readings of who the PC is; they are // Candidate lean. Three permanently-live readings of who the PC is; they are
// not mutually exclusive and never resolve. Writers <<set>> these; no code // not mutually exclusive and never resolve. Writers <<set>> these; no code
// reads them. There is deliberately NO derived "winning candidate" variable — // reads them. There is deliberately NO derived "winning candidate" variable —
@@ -97,4 +101,6 @@ title: Declarations
// Character dialogue gates // Character dialogue gates
<<declare $spoke_to_chevalier_cassian_thal = false as bool>> <<declare $spoke_to_chevalier_cassian_thal = false as bool>>
<<declare $spoke_to_bradford_kane = false as bool>> <<declare $spoke_to_bradford_kane = false as bool>>
<<declare $inquired_about_cyprus = false as bool>>
<<declare $declared_candidate_to_chevalier_cassian_thal = true as bool>>
=== ===
@@ -1,15 +1,61 @@
{ {
"projectFileVersion": 4, "projectFileVersion": 4,
"sourceFiles": [ "sourceFiles": [
"**/*.yarn" "**/*.yarn"
], ],
"excludeFiles": [ "excludeFiles": [
"**/*~/*", "**/*~/*",
"./Samples/Yarn Spinner*/*" "./Samples/Yarn Spinner*/*"
], ],
"localisation": {}, "localisation": {},
"baseLanguage": "en", "baseLanguage": "en",
"compilerOptions": { "compilerOptions": {
"diagnosticsSeverity": {} "diagnosticsSeverity": {}
} },
"projectName": "NightclubArcade",
"authorName": [
"LennartGrabowski"
],
"editorOptions": {
"yarnScriptEditor": {
"projectGraphPositions": {
"Bartender.yarn": {
"x": 282,
"y": 12
},
"Bradford Kane.yarn": {
"x": 1320,
"y": 2287
},
"Chevalier Cassian Thal.yarn": {
"x": 1794,
"y": 2275
},
"Commentary.yarn": {
"x": 12,
"y": 231
},
"Common.yarn": {
"x": 12,
"y": 12
},
"Chair.yarn": {
"x": 840,
"y": 1072
},
"Debug.yarn": {
"x": -1,
"y": 483
},
"SC101.yarn": {
"x": 820,
"y": -3
},
"SC102.yarn": {
"x": 2734,
"y": 2559
}
}
}
}
} }
@@ -8,27 +8,40 @@
// Each variation sets $went_inside so the calling scene knows the verdict. // Each variation sets $went_inside so the calling scene knows the verdict.
title: Chair_Interaction title: Chair_Interaction
position: -334,-601
--- ---
Narrator: An empty chair with a place card: {$player_name}. Narrator: An empty chair with a place card: {$player_name}.
-> Sit down. -> Sit down.
<<set $sat_down_at_table = true>> <<set $sat_down_at_table = true>>
Narrator: You sit down between two very distinguished gentlemen. <<detour SC101_Hook_Sitting_Chair_Interaction>>
<<if $spoke_to_chevalier_cassian_thal eq true and $spoke_to_bradford_kane eq true>>
<<detour SC101_Hook_Both_Chair_Interaction>>
<<elseif $spoke_to_chevalier_cassian_thal eq true and $spoke_to_bradford_kane eq false>>
<<detour SC101_Hook_Left_Not_Right_Chair_Interaction>>
<<elseif $spoke_to_chevalier_cassian_thal eq false and $spoke_to_bradford_kane eq true>>
<<detour SC101_Hook_Right_Not_Left_Chair_Interaction>>
<<elseif $spoke_to_chevalier_cassian_thal eq true and $spoke_to_bradford_kane eq true>>
<<detour SC101_Hook_Both_Chair_Interaction>>
<<else>>
<<detour SC101_Hook_First_Sitting_Chair_Interaction>>
<<endif>>
-> Not yet. -> Not yet.
<<enter_environment>> <<enter_environment>>
===
title: SC101_Hook_Sitting_Chair_Interaction
position: -328,-360
---
Narrator: You sit down between two very distinguished gentlemen.
<<if $spoke_to_chevalier_cassian_thal eq true and $spoke_to_bradford_kane eq true>>
<<detour SC101_Hook_Both_Chair_Interaction>>
<<detour SC101_Hook_Sitting_Chair_Interaction>>
<<elseif $spoke_to_chevalier_cassian_thal eq true and $spoke_to_bradford_kane eq false>>
<<detour SC101_Hook_Left_Not_Right_Chair_Interaction>>
<<detour SC101_Hook_Sitting_Chair_Interaction>>
<<elseif $spoke_to_chevalier_cassian_thal eq false and $spoke_to_bradford_kane eq true>>
<<detour SC101_Hook_Right_Not_Left_Chair_Interaction>>
<<detour SC101_Hook_Sitting_Chair_Interaction>>
<<elseif $spoke_to_chevalier_cassian_thal eq true and $spoke_to_bradford_kane eq true>>
<<detour SC101_Hook_Both_Chair_Interaction>>
<<detour SC101_Hook_Sitting_Chair_Interaction>>
<<else>>
<<detour SC101_Hook_First_Sitting_Chair_Interaction>>
<<detour SC101_Hook_Sitting_Chair_Interaction>>
<<endif>>
=== ===
title: SC101_Hook_First_Sitting_Chair_Interaction title: SC101_Hook_First_Sitting_Chair_Interaction
position: -320,-51
--- ---
-> Look at the details of the place card. -> Look at the details of the place card.
<<detour SC101_Hook_Place_Card_Chair_Interaction>> <<detour SC101_Hook_Place_Card_Chair_Interaction>>
@@ -36,9 +49,12 @@ title: SC101_Hook_First_Sitting_Chair_Interaction
<<detour Chevalier_Cassian_Thal_Talk>> <<detour Chevalier_Cassian_Thal_Talk>>
-> Introduce yourself to the gentleman on your right. -> Introduce yourself to the gentleman on your right.
<<detour Bradford_Kane_Talk>> <<detour Bradford_Kane_Talk>>
-> Stand up.
<<enter_environment>>
=== ===
title: SC101_Hook_Left_Not_Right_Chair_Interaction title: SC101_Hook_Left_Not_Right_Chair_Interaction
position: -95,-48
--- ---
-> Look at the details of the place card. -> Look at the details of the place card.
<<detour SC101_Hook_Place_Card_Chair_Interaction>> <<detour SC101_Hook_Place_Card_Chair_Interaction>>
@@ -46,9 +62,12 @@ title: SC101_Hook_Left_Not_Right_Chair_Interaction
<<detour Chevalier_Cassian_Thal_Talk>> <<detour Chevalier_Cassian_Thal_Talk>>
-> Introduce yourself to the gentleman on your right. -> Introduce yourself to the gentleman on your right.
<<detour Bradford_Kane_Talk>> <<detour Bradford_Kane_Talk>>
-> Stand up.
<<enter_environment>>
=== ===
title: SC101_Hook_Right_Not_Left_Chair_Interaction title: SC101_Hook_Right_Not_Left_Chair_Interaction
position: 134,-32
--- ---
-> Look at the details of the place card. -> Look at the details of the place card.
<<detour SC101_Hook_Place_Card_Chair_Interaction>> <<detour SC101_Hook_Place_Card_Chair_Interaction>>
@@ -56,9 +75,12 @@ title: SC101_Hook_Right_Not_Left_Chair_Interaction
<<detour Chevalier_Cassian_Thal_Talk>> <<detour Chevalier_Cassian_Thal_Talk>>
-> Talk to Bradford Kane. -> Talk to Bradford Kane.
<<detour Bradford_Kane_Talk>> <<detour Bradford_Kane_Talk>>
-> Stand up.
<<enter_environment>>
=== ===
title: SC101_Hook_Both_Chair_Interaction title: SC101_Hook_Both_Chair_Interaction
position: 363,-36
--- ---
-> Look at the details of the place card. -> Look at the details of the place card.
<<detour SC101_Hook_Place_Card_Chair_Interaction>> <<detour SC101_Hook_Place_Card_Chair_Interaction>>
@@ -66,9 +88,12 @@ title: SC101_Hook_Both_Chair_Interaction
<<detour Chevalier_Cassian_Thal_Talk>> <<detour Chevalier_Cassian_Thal_Talk>>
-> Talk to Bradford Kane. -> Talk to Bradford Kane.
<<detour Bradford_Kane_Talk>> <<detour Bradford_Kane_Talk>>
-> Stand up.
<<enter_environment>>
=== ===
title: SC101_Hook_Place_Card_Chair_Interaction title: SC101_Hook_Place_Card_Chair_Interaction
position: -296,331
--- ---
Narrator: You take the place card and take a look. Narrator: You take the place card and take a look.
<<check provenance Hard>> <<check provenance Hard>>
@@ -25,11 +25,13 @@
// Body stays neutral on purpose: no lean, no candidate attachment. // Body stays neutral on purpose: no lean, no candidate attachment.
title: Start title: Start
position: -17,-276
--- ---
<<jump SC101_Desk>> <<jump SC101_Desk>>
=== ===
title: SC101_Desk title: SC101_Desk
position: -19,-36
--- ---
<<set $seen_sc_101 = true>> <<set $seen_sc_101 = true>>
<<set $visited_desk = true>> <<set $visited_desk = true>>
@@ -44,6 +46,7 @@ Narrator: You're drawn toward a seat — toward a waiting conversation you didn'
=== ===
title: SC101_Hook_MadeAsset title: SC101_Hook_MadeAsset
position: -40,567
--- ---
CONFLUENCE: One: the seating chart's alphabetical. Two: one gap in it, held open past the start time. Three, and three is the one, {$player_name}: whoever printed this knew you'd be late to your own arrival. Which means somebody in this room has already met you, {$player_name}, and you're the only one who doesn't know it. CONFLUENCE: One: the seating chart's alphabetical. Two: one gap in it, held open past the start time. Three, and three is the one, {$player_name}: whoever printed this knew you'd be late to your own arrival. Which means somebody in this room has already met you, {$player_name}, and you're the only one who doesn't know it.
<<set $found_made_asset_intuition = true>> <<set $found_made_asset_intuition = true>>
@@ -51,6 +54,7 @@ CONFLUENCE: One: the seating chart's alphabetical. Two: one gap in it, held open
=== ===
title: SC101_Hook_Journalist title: SC101_Hook_Journalist
position: -299,452
--- ---
FACEWORK: His hands gave it away before his face did — a flinch toward you, checked, turned into reaching for a drink that wasn't there. That's not a stranger's hands. What did you do to earn that flinch? FACEWORK: His hands gave it away before his face did — a flinch toward you, checked, turned into reaching for a drink that wasn't there. That's not a stranger's hands. What did you do to earn that flinch?
<<set $found_journalist_intuition = true>> <<set $found_journalist_intuition = true>>
@@ -58,6 +62,7 @@ FACEWORK: His hands gave it away before his face did — a flinch toward you, ch
=== ===
title: SC101_Hook_Inheritor title: SC101_Hook_Inheritor
position: 335,366
--- ---
STANDING ORDER: You are standing in a doorway, {$player_name_full}. That's the whole of what's certain. Build outward from there — a person who starts anywhere else is a person coming apart in public. STANDING ORDER: You are standing in a doorway, {$player_name_full}. That's the whole of what's certain. Build outward from there — a person who starts anywhere else is a person coming apart in public.
<<set $found_inheritor_intuition = true>> <<set $found_inheritor_intuition = true>>
@@ -65,6 +70,7 @@ STANDING ORDER: You are standing in a doorway, {$player_name_full}. That's the w
=== ===
title: SC101_Hook_Neutral title: SC101_Hook_Neutral
position: 87,310
--- ---
HOUSE POUR: Cigar smoke, spilled aperitif, and under it — cold, sharp — the ammonia bite of a floor mopped in a hurry, love. Someone's trying to make this room smell like money. It smells like panic with good cologne on top. HOUSE POUR: Cigar smoke, spilled aperitif, and under it — cold, sharp — the ammonia bite of a floor mopped in a hurry, love. Someone's trying to make this room smell like money. It smells like panic with good cologne on top.
=== ===
@@ -0,0 +1,6 @@
// SC-102 — The figure at the head of the table just stood up.
title: SC102_Table
---
Figure at the head of the table: "Welcome."
===
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 717dc562b961f41c49f5615fb8415f67
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 94073015eacc34c1d8fc6786e43d60ca, type: 3}
@@ -0,0 +1,13 @@
using UnityEngine;
using Yarn.Unity;
public class SkillFunctions : MonoBehaviour
{
[YarnFunction("top_skill")]
public static string TopSkill(float a, string aName, float b, string bName, float c, string cName)
{
if (a >= b && a >= c) return aName;
if (b >= a && b >= c) return bName;
return cName;
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: f7e92eaa5873f456281db864a1a7871b