Finish the NPC dialogue

This commit is contained in:
Pyrex 2025-02-23 13:44:33 -08:00
parent a7024728ba
commit b0226d5d4b
2 changed files with 71 additions and 44 deletions

View File

@ -1,9 +1,16 @@
import { Architecture, LoadedNewMap } from "./newmap.ts";
import { Grid, Point } from "./engine/datatypes.ts";
import { getThralls } from "./thralls.ts";
import {
getThralls,
thrallCharm,
thrallLore,
thrallParty,
thrallStealth,
} from "./thralls.ts";
import {
LadderPickup,
ThrallCollectionPlatePickup,
ThrallPickup,
ThrallPosterPickup,
ThrallRecruitedPickup,
} from "./pickups.ts";
@ -16,7 +23,7 @@ const BASIC_PLAN = Grid.createGridFromMultilineString(`
##### A # # D #####
##### ## ## #####
# ## ## ## ## #
#bB Ee#
#bB . Ee#
# ## ## ## ## #
##### ## ## #####
##### C # # F #####
@ -63,6 +70,11 @@ export function generateManor(): LoadedNewMap {
cell.architecture = Architecture.Floor;
cell.pickup = new LadderPickup();
break;
case ".":
cell.architecture = Architecture.Floor;
// TODO: Debug objects can be spawned here
// cell.pickup = new ThrallPickup({id: 5});
break;
case " ":
cell.architecture = Architecture.Floor;
break;

View File

@ -97,6 +97,10 @@ export function getThralls() {
// Their initial check is, generally, the initial check of the
// thrall n-2 or thrall n+1 (ex: Party's initial check is Stealth
// or Lore)
//
// I then made some swaps:
// - Garrett gets Flatter instead of Respect Elders
// - Monica gets Respect Elders instead of Flatter
export let thrallParty = table.add({
label: "Garrett",
sprite: sprThrallParty,
@ -112,18 +116,19 @@ export let thrallParty = table.add({
options: [
{
skill: () => stealth1, // Disguise
locked: '"What\'s wrong, Garrett?"',
locked: '"What\'s up?"',
failure:
"\"If you're not a large pile of money, don't talk to me.\"\n\nHe sobs into his ice cream.",
unlockable: "*look like a large pile of money*",
success: "He scoops you eagerly into his wallet.",
},
{
skill: () => lore0, // Respect Elders
locked: "TODO",
failure: "TODO",
unlockable: "TODO",
success: "TODO",
skill: () => charm0, // Flatter
locked: "Ask him how much he's winning",
failure: 'He rolls his eyes at you. "A billion."',
unlockable: "Tell him he's cute",
success:
"He looks at you like no one has ever told him that before, and blushes. You hold his wing and feel his pulse rise.",
},
],
},
@ -186,16 +191,17 @@ export let thrallLore = table.add({
options: [
{
skill: () => stare1, // Hypnotize
locked: "TODO",
failure: "TODO",
unlockable: '"I\'m a wolf too."',
locked: '"I\'m a wolf too."',
failure: '"AROO?" He shakes his head no.',
unlockable: 'Zonk him. "I\'m a wolf now."',
success:
"He blinks a few times under your gaze -- then touches your muzzle -- then his own -- then arfs submissively.",
},
{
skill: () => bat0, // Screech
locked: "TODO",
failure: "TODO",
locked: "Try to yowl",
failure:
"He sniffs at your collar. You don't _seem_ like a Wolf Scout.",
unlockable: '"Wolf Scouts AWOO!"',
success:
"Taken aback at how well you know the cheer, he freezes -- then joins you with a similar howl.",
@ -254,23 +260,24 @@ export let thrallBat = table.add({
},
initialCheck: {
label:
"That's Monica. You've seen her cook on TV! Looks like she's enjoying a kiwi flan.",
"That's Monica, the evil judge from MasterCook. A bit older than you, and you don't age anymore. She's enjoying a kiwi flan -- it looks good.",
options: [
{
skill: () => party1, // Rave
locked: "TODO",
failure: "TODO",
unlockable: "Slide her a sachet of cocaine.",
locked: "Act crazy to get her attention",
failure: '"I -- you -- you know we\'re not being filmed, right?"',
unlockable: "Flash your eyes like a TV camera",
success:
"\"No way. Ketamine if you've got it.\" You do.\n\n(It's not effective on vampires.)",
"The clash of light and color causes some kind of flashback.\nYou convince her that she's on set. She agrees to follow you backstage.",
},
{
skill: () => charm0, // Flatter
locked: "TODO",
failure: "TODO",
unlockable: '"You\'re the best cook ever!"',
skill: () => lore0, // Respect Elders
locked: '"That looks good."',
failure:
"\"It's not.\" She eats it with such relish it's hard to tell.",
unlockable: "Not as good as they used to be",
success:
'"Settle down!" she says, lowering your volume with a sweep of her hand. "It\'s true though."',
'"Certainly." She seems pleased that you understand.\n\n"Teach me to make a real one?"',
},
],
},
@ -334,17 +341,18 @@ export let thrallCharm = table.add({
options: [
{
skill: () => lore1, // Brick by Brick
locked: "TODO",
failure: "TODO",
unlockable: '"Wanna see my crypt?"',
locked: `Ask for vampire facts`,
failure: `He eagerly describes the cape, the coffin, the crypt, the castle -- a whole lot of stuff you don't necessarily don't have.`,
unlockable: `Talk about your manor`,
success:
'He salivates -- swallowing hard before he manages, in response to the prospect, a firm "YES!"',
"You describe your manor for a while without inviting him. He salivates -- swallowing hard before he manages, in response to your comments, to beg for a peek.",
},
{
skill: () => stealth0, // Be Quiet
locked: "TODO",
failure: "TODO",
unlockable: "Say absolutely nothing.",
locked: "Get your fangs in his face",
failure:
'"Wow. You\'re -- wow! Wow! Wow!"\n\n"And what\'s more --" you say, giving him far too much of a desirable thing.',
unlockable: "Say absolutely nothing",
success:
"His mind overflows with fantasy, and when you let a glint of fang peek through, he claps his arms affectionately around your supercold torso.",
},
@ -405,17 +413,21 @@ export let thrallStealth = table.add({
options: [
{
skill: () => bat1, // Flap
locked: "TODO",
failure: "TODO",
unlockable: "Hang upside-down and offer her a martini.",
success: "\"You're ADORABLE!\" She's yours forever.",
locked: "Drink cherry soda with your fangs",
failure:
'"Wow! That\'s incredibly cool," she says. Her eyes scan the other patrons. "Can I get you anything?"',
unlockable: "Hang upside-down and offer a drink",
success:
'"You\'re ADORABLE!" Her attention is yours alone and she offers to follow you home.',
},
{
skill: () => stare0, // Dazzle
locked: "TODO",
failure: "TODO",
unlockable: "TODO",
success: "TODO",
locked: "Show her some sparks",
failure:
'"Neat trick!" she says. She blinds you with a glowstick, then heads back into the crowd.',
unlockable: "Trap her in a tunnel of light",
success:
"She blushes bright peach, unable to perceive any exit until you approach -- close enough to feel her warm, warm breath. She plants a kiss on your lips.",
},
],
},
@ -481,15 +493,18 @@ export let thrallStare = table.add({
locked: "\"How many Rs in 'strawberry'?\"",
failure:
"It generates an image of a sad fruit shrugging in a muddy plantation.",
unlockable: "TODO",
success: "TODO",
unlockable: '"Do you want to come home with me?"',
success:
"It generates an image of a happy robot riding the shoulders of a tiny little bat.",
},
{
skill: () => party0, // Chug
locked: "TODO",
failure: "TODO",
unlockable: "Drink a whole bottle of ink.",
success: "TODO",
locked: "Check its fluid levels",
failure:
"It submits to your examination, revealing ordinary quantities of robot blood, robot lubricant, Ener-G, and headlight fluid.",
unlockable: "Drink its battery",
success:
"The sulfuric acid doesn't burn you. This somehow makes Ridley want to hang out with you.\n\n(Ridley is weird.)",
},
],
},