故事
在冒险旅途中,你会遇见形形色色的人物。故事模块为你提供了一个记录这些角色的框架——它可以存储角色的基本资料、背景描述,以及随着剧情推进而逐渐揭示的“印象”片段。当玩家在游戏中结识新角色后,这些信息将汇集在菜单中的“故事”面板里,供随时翻阅回味。
声明一个角色
在 game.config.ts 中,你可以通过 char 字段来声明所有可能出场的角色。每个角色都有一个唯一的 ID 作为标识。
typescript
export default Adv.defineConfig({
// ... 其他配置
character: {
oldHunter: {
name: '老猎人',
desc: '隐居在森林深处的神秘猎人,据说曾独自猎杀过巨龙。',
impression: [
'他说话时总是不自觉地抚摸那把旧弓。',
'老猎人似乎很讨厌城里的贵族。',
],
},
forestSpirit: {
name: '森林妖精',
desc: '守护这片森林的小小精灵,喜欢恶作剧但心地善良。',
impression: [],
},
},
})- 外层的
oldHunter和forestSpirit是角色的唯一 ID,后续的剧情代码中将通过这个 ID 引用对应的角色。 - 角色一经声明,便可用于对话、选项条件、检定修正等任何需要提到某个具体人物的地方。
角色配置项
每个角色使用 ADVUserCharacter 对象进行配置,它支持以下属性:
| 参数名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
name | string | '' | 角色的名字,将显示在故事面板和对话相关的提示中。强烈建议填写一个有辨识度的名称。 |
desc | string | '' | 角色的背景描述。可以是一小段话,概括角色的来历、性格或外貌特征。允许使用 HTML。 |
impression | string[] | [] | 对该角色的“印象”列表。每一项都是一条简短的信息,比如一句台词、一段回忆或一个观察。随着剧情发展,你可以通过代码动态追加新的印象。 |
📌 什么是“印象”?
印象是你(或玩家)对该角色逐渐了解的过程。初次见面可能只有一个模糊印象,随着冒险深入,你会解锁更多关于他的故事片段。这些片段会依次出现在故事面板的角色页中,就像一本不断补全的日记。
认识角色
角色有一个内置的 know 属性,类型为布尔值,默认为 false。只有当 know 为 true 时,这个角色才会出现在“故事”面板中,否则对玩家完全隐藏。
当你编写剧情时,可以自由控制玩家何时“认识”某个角色:
typescript
// 将老猎人标记为已认识
Adv.char.oldHunter.know = true;这样,在玩家与该角色首次见面后,调用上述代码即可让他出现在故事面板。
动态追加印象
角色的印象列表支持在游戏运行时动态扩充,你可以通过以下方式添加新的片段:
typescript
Adv.char.oldHunter.impression.push(
'他提到自己有个失踪多年的女儿,眼神中闪过一丝痛苦。'
);每次添加的新印象都会立即反映在故事面板中,让玩家感受到自己对人物的了解正在逐步加深。
在剧情中引用角色
除了故事面板,角色信息还可以用于对话或选项的文本中,以提供更生动的描写:
typescript
Adv.appendDialog('meet-hunter', {
script: [
`一个身影从树后走了出来,那是位${Adv.char.oldHunter.name}。`,
`他对你说:<i>"我已经很久没见到陌生人了。"</i>`,
],
next: 'hunter-choice',
});