implemented skill system according to designdocuments

This commit is contained in:
2026-08-15 08:09:29 +02:00
parent f8def361fa
commit 063e94f6eb
95 changed files with 2924 additions and 4 deletions
@@ -14,9 +14,29 @@ Bouncer: Evening. Name on the list?
You: Depends who's asking.
-> I'm on the list.
<<set $claimed_to_be_on_list = true>>
Bouncer: ...you're not on the list.
Bouncer: But it's slow tonight. Go on.
<<set $went_inside = true>>
<<check persuasion standard>>
<<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("intimidation") >= 2>>
<<check intimidation 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>>
@@ -0,0 +1,18 @@
// Passive skill commentary. Fired by CommentarySystem, never <<jump>>ed to.
// One node per (context, skill) pair; if a skill has nothing to say about a
// context, simply omit the node and it won't be considered.
title: Commentary_Entrance_Queue_paranoia
---
Paranoia: The man three back hasn't looked at his phone once. Nobody waits like that.
===
title: Commentary_Entrance_Queue_read_room
---
Read the Room: Everyone here is pretending they're not cold.
===
title: Commentary_Entrance_Queue_streetwise
---
Streetwise: Door's been "slow tonight" for forty minutes. That's a price, not a queue.
===
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 26e9b5dea1744e39a5fe59bb1bc20fa7
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 94073015eacc34c1d8fc6786e43d60ca, type: 3}
@@ -18,4 +18,13 @@ title: Declarations
// 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>>
<<declare $check_total = 0 as number>>
<<declare $check_dc = 0 as number>>
<<declare $check_modifier = 0 as number>>
<<declare $check_degree = "" as string>>
<<declare $check_skill = "" as string>>
===
@@ -0,0 +1,22 @@
// Scratch node for verifying the skill-check plumbing. Not part of the story.
// Point DialogueRunner.startNode at "Debug_SkillCheck" to run it, then set it
// back to "Start" when you're done.
title: Debug_SkillCheck
---
Narrator: Skill check harness.
<<check persuasion standard>>
<<if $check_result>>
Narrator: Passed. Rolled {$check_roll}, total {$check_total} against DC {$check_dc}.
<<else>>
Narrator: Failed. Rolled {$check_roll}, total {$check_total} against DC {$check_dc}.
<<endif>>
// Explicit numeric DC plus a situational modifier.
<<check deduction 16 2>>
Narrator: Deduction came out {$check_degree}.
// Deliberate typo: should log an error and continue, not deadlock.
<<check nosuchskill standard>>
Narrator: Survived the bad skill id.
===
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: e497c84fe7bd48ea8c828ac1702f79bf
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 94073015eacc34c1d8fc6786e43d60ca, type: 3}