implemented NPC system and working bartender conversation

This commit is contained in:
2026-08-15 19:02:01 +02:00
parent be63c21e15
commit f89781d78b
18 changed files with 1042 additions and 160 deletions
@@ -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,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>>
===