import type { DialogueGraph } from '@rpg/engine';
/**
* Диалоги NPC как графы для DialogueRunner (по docs/world.md, акт 1).
* Мила — безгласная: говорит шёпотом, коротко. Ирвин — экономит дыхание.
*
* Флаги сюжета:
* met_elder — познакомились с Ирвином
* quest_bells_taken — Ирвин дал задание о колокольчиках
* quest_bells_done — колокольчики собраны и посажены (акт 1, дальше)
* met_mila — познакомились с Милой
* got_cloth — Мила дала вощёное полотно
*/
export const DIALOGUES: Record<string, DialogueGraph> = {
elder_first: {
start: 'greet',
nodes: {
greet: {
speaker: 'Старейшина Ирвин',
text: 'Вернулся. Хорошо. Слышал гул на закате? Это пепел дышит у прудов.',
next: 'ask'
},
ask: {
speaker: 'Старейшина Ирвин',
text: 'Три поляны лунных колокольчиков там, у Серых прудов. Если не собрать цветы до выдоха — задохнутся.',
next: 'task'
},
task: {
speaker: 'Старейшина Ирвин',
text: 'Собери. Посади здесь, на лугу. Поляна без цветов — поляна без завтра.',
next: 'give'
},
// Узел-действие: выдача задания без реплики.
give: { setFlags: ['met_elder', 'quest_bells_taken'], next: 'ring' },
ring: { speaker: 'Звонарь', text: 'Прозвоню дорогу до прудов и вернусь до темноты.' }
}
},
elder_repeat: {
start: 'waiting',
nodes: {
waiting: { speaker: 'Старейшина Ирвин', text: 'Цветы ждут у прудов, звонарь. А пепел не ждёт.' }
}
},
// Сдача квеста: выбирается в talkTo, когда собрано достаточно цветов.
elder_hand_in: {
start: 'count',
nodes: {
count: {
speaker: 'Старейшина Ирвин',
text: 'Три цветка. Живые. Сажай у тропы, звонарь. Серая земля примет.',
next: 'accept'
},
accept: { setFlags: ['quest_bells_done'], next: 'ring' },
ring: { speaker: 'Звонарь', text: 'Пусть гудят. Это твой голос, Ирвин, — теперь в земле.' }
}
},
trader_first: {
start: 'stop',
nodes: {
stop: {
speaker: 'Торговка Мила',
text: '*звонит ручным колокольчиком дважды* ...Стой.',
next: 'warn'
},
warn: {
speaker: 'Торговка Мила',
text: 'У прудов... свежий накат. Дышать поверх — голос отдашь. Как я отдала.',
next: 'gift'
},
gift: {
speaker: 'Торговка Мила',
text: 'Держи вощёное полотно. На губы. И звони тихо — пепел не буди.',
next: 'give_cloth'
},
give_cloth: { setFlags: ['met_mila', 'got_cloth'], next: 'reply' },
reply: { speaker: 'Звонарь', text: 'Спасибо, Мила. Верну и полотно, и голос — твой точно.' }
}
},
// Повторная Мила: до сдачи квеста. Ветка по вару motes — видит моты в сумке.
trader_repeat: {
start: 'quiet',
nodes: {
quiet: {
speaker: 'Торговка Мила',
text: '*колокольчик один раз* ...Звони тихо. Пепел просыпается от гулкого.',
next: 'motes_note'
},
motes_note: {
speaker: 'Торговка Мила',
text: '*замечает искру в сумке* ...Моты? Серая земля с искрой — редкость. Принеси три — поменяю на соль.',
whenVar: { key: 'motes', op: 'ge', value: 1 }
}
}
},
// Мила после посадки: крючок акта 1.
trader_after: {
start: 'listen',
nodes: {
listen: {
speaker: 'Торговка Мила',
text: '*смотрит под ноги* ...Слышишь? Гул снизу. Это разъезд. Это Машина дышит.',
end: true
}
}
}
};