implemented NPC system and working bartender conversation
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
// Everything the bartender ever says.
|
||||
//
|
||||
// These nodes share a title, which makes them a node group. Callers just
|
||||
// `<<detour Bartender_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: Bartender_Talk
|
||||
---
|
||||
<<if $spoke_to_bartender>>
|
||||
<<if $revealed_fugue_to_bartender>>
|
||||
Bartender: Ah, still hazy? A drink?
|
||||
<<else>>
|
||||
Bartender: Ah, {$player_alias}. A drink?
|
||||
<<endif>>
|
||||
-> Yes, please.
|
||||
<<detour SC101_Hook_Drink_Bartender_Talk>>
|
||||
-> No, I have questions.
|
||||
<<detour SC101_Hook_Questions_Bartender_Talk>>
|
||||
<<else>>
|
||||
<<set $spoke_to_bartender = true>>
|
||||
Bartender: Ah, {$player_alias}, back again?
|
||||
Narrator: What does he mean? "Back again?"
|
||||
-> Back? I have never been here.
|
||||
<<set $revealed_fugue_to_bartender = true>>
|
||||
Narrator: The bartender squints with a critical look.
|
||||
FACEWORK: He will tell on you. This is the face of a man who is not only here to tend the bar, but to watch, to observe. And to report back to his masters.
|
||||
Bartender: I could have sworn you are {$player_alias}, weren't you with Mr. Doss a few days ago?
|
||||
<<if $looking_for_doss neq 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>>
|
||||
<<set $self_lean_made_asset += 1>>
|
||||
Bartender: What can I get ya?
|
||||
-> What can you recommend?
|
||||
<<detour SC101_Hook_Drink_Bartender_Talk>>
|
||||
-> Yes. I'll take the usual.
|
||||
Narrator: The bartender doesn't even flinch, while taking ingredients from the bar.
|
||||
PROVENANCE: We cannot remember these substances.
|
||||
AMNESTY: Is this really our favorite drink?
|
||||
<<set $self_lean_inheritor += 1>>
|
||||
<<detour SC101_Hook_Drink_Bartender_Talk>>
|
||||
-> I am, and I have a few questions.
|
||||
<<detour SC101_Hook_Questions_Bartender_Talk>>
|
||||
<<endif>>
|
||||
<<enter_environment>>
|
||||
===
|
||||
|
||||
title: SC101_Hook_Drink_Bartender_Talk
|
||||
---
|
||||
Bartender: One Estate coming right up.
|
||||
<<if $had_the_estate_drink>>
|
||||
Narrator: He puts another amber drink before you.
|
||||
<<else>>
|
||||
<<set $had_the_estate_drink = true>>
|
||||
Narrator: He puts a deep amber drink before you.
|
||||
HOUSE POUR: It smells like old wood, oak, which went sour with age, like a library shelf that's been rained on once and dried wrong.
|
||||
Narrator: You take a sip.
|
||||
HOUSE POUR: Deceptively soft. Brown sugar, a little burnt. Vanilla that's actually oak-tannin doing an impression of vanilla.
|
||||
<<endif>>
|
||||
AMNESTY: Is that the taste of our favorite drink? I cannot remember ...
|
||||
-> Yes, it is!
|
||||
<<if $had_the_estate_drink neq true>>
|
||||
<<set $self_lean_inheritor += 1>>
|
||||
HOUSE POUR: Long, dry, faintly bitter - gentian root or scorched citrus pith - and it doesn't fade so much as recede, like it's waiting to be poured again.
|
||||
<<else>>
|
||||
HOUSE POUR: Long and dry, it recedes again.
|
||||
<<endif>>
|
||||
-> I don't think so.
|
||||
<<if $had_the_estate_drink neq true>>
|
||||
<<set $self_lean_inheritor -= 1>>
|
||||
HOUSE POUR: Bitter, at the end. Like it's waiting to be poured again.
|
||||
<<else>>
|
||||
HOUSE POUR: Still bitter.
|
||||
<<endif>>
|
||||
===
|
||||
|
||||
title: SC101_Hook_Questions_Bartender_Talk
|
||||
---
|
||||
Bartender: Sure, what do you want to know?
|
||||
-> Question 1
|
||||
Bartender: Answer 1
|
||||
<<detour SC101_Hook_Questions_Bartender_Talk>>
|
||||
-> Question 2
|
||||
Bartender: Answer 2
|
||||
<<detour SC101_Hook_Questions_Bartender_Talk>>
|
||||
-> Nothing.
|
||||
Bartender: Alright.
|
||||
===
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 582cd3b2ab9274b8ca0737660a0d6b1a
|
||||
guid: 6b8ac538a619b45b8a197ad048a94505
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
@@ -1,65 +0,0 @@
|
||||
// Everything the bouncer ever says.
|
||||
//
|
||||
// These nodes share a title, which makes them a node group. Callers just
|
||||
// `<<detour Bouncer_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: Bouncer_Talk
|
||||
when: once
|
||||
---
|
||||
Bouncer: Evening. Name on the list?
|
||||
You: Depends who's asking.
|
||||
-> I'm on the list.
|
||||
<<set $claimed_to_be_on_list = true>>
|
||||
<<check placement routine>>
|
||||
<<if $check_result>>
|
||||
Bouncer: ...you're not on the list.
|
||||
Bouncer: But it's slow tonight. Go on.
|
||||
<<set $went_inside = true>>
|
||||
<<else>>
|
||||
Bouncer: Nobody's on the list tonight. Especially not you.
|
||||
<<set $went_inside = false>>
|
||||
<<endif>>
|
||||
-> Let me through. <<if skill_rank("undisclosed") >= 2>>
|
||||
<<check undisclosed hard -1>>
|
||||
<<if $check_degree == "critical_success">>
|
||||
Bouncer: ...yeah. Yeah, okay.
|
||||
<<set $reputation += 2>>
|
||||
<<set $went_inside = true>>
|
||||
<<elseif $check_result>>
|
||||
Bouncer: Fine. Don't make it a thing.
|
||||
<<set $went_inside = true>>
|
||||
<<else>>
|
||||
Bouncer: Try that again and you're talking to the pavement.
|
||||
<<set $reputation -= 1>>
|
||||
<<set $went_inside = false>>
|
||||
<<endif>>
|
||||
-> Actually, I'll head home.
|
||||
Bouncer: Smart choice.
|
||||
<<set $went_inside = false>>
|
||||
===
|
||||
|
||||
title: Bouncer_Talk
|
||||
when: $is_vip
|
||||
---
|
||||
Bouncer: Didn't even see you there. Go on in.
|
||||
<<set $went_inside = true>>
|
||||
===
|
||||
|
||||
title: Bouncer_Talk
|
||||
when: $claimed_to_be_on_list
|
||||
---
|
||||
Bouncer: Still not on the list, I assume.
|
||||
Bouncer: Go on, before I change my mind.
|
||||
<<set $went_inside = true>>
|
||||
===
|
||||
|
||||
title: Bouncer_Talk
|
||||
when: always
|
||||
---
|
||||
Bouncer: Back again.
|
||||
<<set $went_inside = true>>
|
||||
===
|
||||
@@ -18,16 +18,6 @@ title: Declarations
|
||||
// How much the door staff likes you.
|
||||
<<declare $reputation = 0 as number>>
|
||||
|
||||
// Set when the player has tried the "I'm on the list" line at least once.
|
||||
<<declare $claimed_to_be_on_list = false as bool>>
|
||||
|
||||
// The bouncer's verdict, read by the scene that called him.
|
||||
<<declare $went_inside = false as bool>>
|
||||
|
||||
// Smart variable: derived, not stored. Can never drift out of sync with
|
||||
// $reputation, so there's nothing to remember to update.
|
||||
<<declare $is_vip = $reputation > 10>>
|
||||
|
||||
// Written by <<check>> (YarnSkillCommands). Never <<set>> these by hand.
|
||||
<<declare $check_result = false as bool>>
|
||||
<<declare $check_roll = 0 as number>>
|
||||
@@ -56,12 +46,16 @@ title: Declarations
|
||||
<<declare $found_made_asset_testimony = false as bool>>
|
||||
<<declare $found_made_asset_document = false as bool>>
|
||||
<<declare $found_made_asset_intuition = false as bool>>
|
||||
|
||||
<<declare $found_journalist_object = false as bool>>
|
||||
<<declare $found_journalist_testimony = false as bool>>
|
||||
<<declare $found_journalist_document = false as bool>>
|
||||
<<declare $found_journalist_intuition = false as bool>>
|
||||
|
||||
<<declare $found_inheritor_object = false as bool>>
|
||||
<<declare $found_inheritor_testimony = false as bool>>
|
||||
<<declare $looking_for_doss = false as bool>>
|
||||
<<declare $had_the_estate_drink = false as bool>>
|
||||
<<declare $found_inheritor_document = false as bool>>
|
||||
<<declare $found_inheritor_intuition = false as bool>>
|
||||
|
||||
@@ -79,6 +73,8 @@ title: Declarations
|
||||
<<declare $errand_door_list = false as bool>>
|
||||
<<declare $errand_find_contact = false as bool>>
|
||||
<<declare $errand_ask_about_name = false as bool>>
|
||||
<<declare $spoke_to_bartender = false as bool>>
|
||||
<<declare $revealed_fugue_to_bartender = false as bool>>
|
||||
|
||||
// Player name substitution. Uppercase [PC] in the Skill Bible means the full,
|
||||
// formal form (STANDING ORDER, PROVENANCE); lowercase [pc] means the familiar
|
||||
@@ -87,4 +83,10 @@ title: Declarations
|
||||
// Defaults are placeholders; naming the PC is design's call.
|
||||
<<declare $player_name = "Vesper" as string>>
|
||||
<<declare $player_name_full = "Vesper Adaire" as string>>
|
||||
|
||||
// Club alias. Smart variable: deterministically derived from $player_name via
|
||||
// AliasNameGenerator.alias_name (hash-seeded pick from two word pools), so it
|
||||
// is never in sync-drift and never <<set>> by hand. Same real name always
|
||||
// yields the same alias; the alias itself bears no resemblance to the input.
|
||||
<<declare $player_alias = alias_name($player_name) as string>>
|
||||
===
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
// The door. Scene files stay thin: they set the stage, detour into character
|
||||
// nodes for the actual talking, then branch on the outcome.
|
||||
//
|
||||
// No longer reached from SC-101: that exit now calls <<enter_environment>>
|
||||
// and steps out of dialogue instead of jumping here. The game's
|
||||
// DialogueRunner entry is `Start` in Scenes/SC101.yarn.
|
||||
|
||||
title: Entrance_Door
|
||||
---
|
||||
Narrator: Neon bleeds across wet asphalt. The queue hasn't moved in ten minutes.
|
||||
<<detour Bouncer_Talk>>
|
||||
<<if $went_inside>>
|
||||
<<jump Entrance_Inside>>
|
||||
<<else>>
|
||||
<<jump Entrance_Outside>>
|
||||
<<endif>>
|
||||
===
|
||||
|
||||
title: Entrance_Inside
|
||||
---
|
||||
Narrator: The bass hits you like a wall.
|
||||
===
|
||||
|
||||
title: Entrance_Outside
|
||||
---
|
||||
Narrator: The night swallows you back up.
|
||||
===
|
||||
@@ -1,10 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cb0faaa47fe2440d78e49de30f921218
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 11500000, guid: 94073015eacc34c1d8fc6786e43d60ca, type: 3}
|
||||
Reference in New Issue
Block a user