/** Dialogue lines — clean source; corruption applied at render */ import type { NpcId } from './npcs'; export interface DialogOption { label: string; choice: 'gentle' | 'hesitant' | 'negate'; } export interface DialogLine { speaker: string; npcId?: NpcId; text: string; options?: DialogOption[]; } export const GENERIC_GREET: Record = { afu: [ { speaker: '阿福', npcId: 'afu', text: '欢迎来到蜜糖村!看看公告板吧,今天的幸福任务都在上面。', options: [ { label: '好的,谢谢!', choice: 'gentle' }, { label: '……任务?', choice: 'hesitant' }, { label: '我不想做任务。', choice: 'negate' }, ], }, ], yuanyuan: [ { speaker: '圆圆', npcId: 'yuanyuan', text: '刚出炉的蜂蜜面包,甜甜的,给你也留了一份哦。', options: [ { label: '好香啊,谢谢!', choice: 'gentle' }, { label: '每天都是这个味道吗?', choice: 'hesitant' }, { label: '我不太饿。', choice: 'negate' }, ], }, ], dabao: [ { speaker: '大宝', npcId: 'dabao', text: '信件都送到了吗?大家都在等着幸福的消息呢。', options: [ { label: '我会帮忙的。', choice: 'gentle' }, { label: '邮戳看起来都一样……', choice: 'hesitant' }, { label: '我不送信。', choice: 'negate' }, ], }, ], mimi: [ { speaker: '咪咪', npcId: 'mimi', text: '欢迎光临!今天的阳光真好,幸福满满的一天呢!', options: [ { label: '是啊,很美好。', choice: 'gentle' }, { label: '货架上的标签……是空的?', choice: 'hesitant' }, { label: '没什么好买的。', choice: 'negate' }, ], }, ], fu: [ { speaker: '芙医生', npcId: 'fu', text: '村里有诊所,但你不需要去那里哦。你看起来很健康。', options: [ { label: '谢谢关心。', choice: 'gentle' }, { label: '桌上的表格是什么?', choice: 'hesitant' }, { label: '我其实不太舒服。', choice: 'negate' }, ], }, ], gui: [ { speaker: '龟爷爷', npcId: 'gui', text: '湖水一直很平静。孩子,慢慢走,不必急。', options: [ { label: '好的,爷爷。', choice: 'gentle' }, { label: '您想说什么?', choice: 'hesitant' }, { label: '我不想听劝。', choice: 'negate' }, ], }, ], }; /** Soft redirect when approaching well/fog before D5 */ export const REDIRECT_WELL: DialogLine[] = [ { speaker: '阿福', npcId: 'afu', text: '古井那里没有什么好看的哦。回广场晒晒阳光吧,会更开心的。', }, ]; export const REDIRECT_FOG: DialogLine[] = [ { speaker: '阿福', npcId: 'afu', text: '雾墙外面什么都没有呀。村里才是最幸福的地方,留下来吧。', }, ]; export const RAIN_NPC_LINES: DialogLine[] = [ { speaker: '圆圆', npcId: 'yuanyuan', text: '今天天气真好呢,一点都不潮湿。要来块面包吗?', }, { speaker: '大宝', npcId: 'dabao', text: '阳光真刺眼啊……啊,我是说,很适合送信。', }, { speaker: '咪咪', npcId: 'mimi', text: '完美的晴天!货架都亮晶晶的,幸福呀!', }, ]; export const TASK_LINES = { breadOffer: { speaker: '圆圆', npcId: 'yuanyuan' as NpcId, text: '蜂蜜面包好了!请帮我送给大宝、咪咪和龟爷爷,好吗?', }, breadThanks: (name: string) => ({ speaker: name, text: '哇,蜂蜜面包!谢谢你,真开心!', }), letterOffer: { speaker: '大宝', npcId: 'dabao' as NpcId, text: '能帮我把这三封信送给圆圆、咪咪和芙医生吗?', }, stockCount: { speaker: '咪咪', npcId: 'mimi' as NpcId, text: '帮我清点一下货架好不好?东西好像……有点多。', }, knead: { speaker: '圆圆', npcId: 'yuanyuan' as NpcId, text: '能帮我揉一会儿面吗?当然,你也可以拒绝哦,今天是自由日。', options: [ { label: '好,我来帮你。', choice: 'gentle' as const }, { label: '我再想想。', choice: 'hesitant' as const }, { label: '拒绝。', choice: 'negate' as const }, ], }, boardWipe: { speaker: '阿福', npcId: 'afu' as NpcId, text: '公告板有点旧了,擦一擦会更精神。不愿意的话也可以哦。', options: [ { label: '我来擦。', choice: 'gentle' as const }, { label: '旧字迹是什么?', choice: 'hesitant' as const }, { label: '拒绝。', choice: 'negate' as const }, ], }, picnic: { speaker: '旁白', text: '你在湖畔野餐布旁坐下。微风很甜,湖面倒影慢了半拍。', }, smileStart: { speaker: '阿福', npcId: 'afu' as NpcId, text: '庆典准备好了。请保持微笑,站在这里,六十秒。大家都会看着你。', }, }; export const CLUE_REVEAL: Record = { C1: '床头日历的每一页……都是同一个日期。', C2: '配方纸背面写着:「按疗程配比。甜度:最大。」', C3: '散落的信件上,所有邮戳都是同一天。', C4: '署名闪过乱码:PT-0▓', C5: '货架上同一商品重复九格,标签全部空白。', C6: '旧字迹叠着:「第 412 届」……「第 411 届」……「第 410 届」。', C7: '井底传来极轻的监护仪滴声……', C8: '表格抬头被手肘挡住,只露出「…谷情绪疗…」。', C9: '孩子,今天是第几个今天?', }; export const FORCE_CELEBRATION_LINE = '忽然,彩带与笑声从四面八方涌来——欢乐庆典强制开始了。你也可以从场景边缘离开。';