Skip to content

喊叫

在某些情况下, 角色会触发特定的对话并作为气泡显示在其头顶。

这些对话写在 CharaText 表格中, 而你的角色则在 idText 单元格中填入该对话的 ID 将其链接。

单元格calmfovaggrodeadkill
触发冷静视线激怒亡语击杀

您还可以在每个条目中插入 自定义音频 标签,使其成为有声音的喊叫,例如,"你不能通过!!<sound=gandalf,0.8>" 在触发此喊叫时,有80%的概率播放ID为 gandalf 的音频。

对话

想添加一些角色来聊天吧时的对话, 可以在 LangMod/**/Dialog/ 文件夹中准备一个 dialog.xlsx 表格。

img

此表格的格式与游戏的对话表格 Elin/Package/_Elona/Lang/_Dialog/dialog.xlsx 相同, 但你只需 unique 表格和包含你角色 ID 的那一行。

此处 ID 和角色 ID 相同。

剧情

剧情是通过多选项对话和附加动作构成的丰富交互系统。

要为角色定义自定义剧情, 请使用 addDrama_剧情表名称 标签, CWL将自动定向该剧情。

自定义剧情表必须放置在 LangMod/**/Dialog/Drama/ 文件夹下, 且名称需与标签匹配。例如:使用 addDrama_drama_example 时需对应Dialog/Drama/drama_example.xlsx文件。

重要: 您只需提供 1 份剧情表,它可以放置在任何语言子文件夹中。CWL支持在同一表格内提供多语言的本地化。

制作时可参考游戏内置剧情表 Elin/Package/_Elona/Lang/_Dialog/Drama, 或含有模板的Tiny Mita范例:

img

热重载

剧情表支持在游戏运行时编辑保存后热重载。

基础结构

剧情表按从上至下顺序执行, 由多行剧情单元构成。每行剧情单元包含以下列(由首行定义):

  • step:标记后续行为剧情步骤起点, 直至遇到下一个step标记
  • jump:执行该行时跳转的目标步骤
  • if/if2:执行条件。若同时存在if2列, 则需同时满足两个条件
  • action:执行的动作
  • param:动作参数
  • actor:当前说话角色 ID, 用于多人对话场景。默认 tg。后缀 ? 以显示名称为 ???
  • id:文本行唯一标识(仅文本行必需)
  • text_XX/text_JP/text_EN:实际对话内容。XX 为语言代码,例如 text_CN, text_ZHTWtext 列将作为缺失语言代码的备选。

剧情通过步骤串联执行, 每个步骤包含若干行剧情单元, 可混合对话/动作/条件判断。

main是默认起始步骤, end是默认结束步骤。自定义步骤名请避免使用下划线_flag前缀, 以免与内部步骤冲突。

剧情动作

文本行需要玩家输入(点击/按键)继续到下一行, 动作行(choice除外)连续执行且不可与文本共存(若共存则忽略文本)。

常用动作:

动作参数说明
injectUnique插入"Let's Talk"及一些通用步骤
choice为文本添加选项(需配合textjump)
choice/bye插入默认告别选项
cancel设置右键/ESC键行为(需配合jump, 通常是end)
setFlagflag, 值(可选)设置flag值(默认1)
reload重新加载剧情,以便应用当前剧情中所做的任何flag更改。需配合jump,通常是main这并不是指热重载,开发时热重载只需要你保存文件更改并再次打开对话即可
enableTone启用对话语气转换
addActor添加角色标识(actor列填写新ID时自动触发)
invoke方法名调用方法
setBG图片名(可选)设置背景图(支持Texture文件夹自定义png), 为空时则清除
BGMBGM ID切换背景音乐, 详见Sound 音频/BGM
stopBGM停止BGM
lastBGM停止并恢复之前BGM
sound音效ID播放音效, 详见Sound 音频/BGM
wait时长暂停执行(秒), 通常用于等待动画效果
alphaIn持续时间淡入效果(秒)
alphaOut持续时间淡出效果
alphaInOut持续时间, 等待时间, 持续时间先淡入, 等待, 再淡出
fadeIn时长, white/black(可选)渐显(白/黑)
fadeOut时长, white/black(可选)渐隐
fadeInOut持续时间, 等待时间, 持续时间先渐显, 等待, 再渐隐
hideUI过渡时间隐藏界面(结束剧情时恢复)
hideDialog隐藏对话框(需配合wait使用)
end直接结束剧情
addKeyItem关键物品ID给予玩家关键物品
drop物品ID在玩家位置生成物品
addResource资源类型, 数量添加家园资源
shake屏幕震动
slap扇剧情所有者角色
destroyItem物品ID从背包移除指定物品
focus立即聚焦镜头到剧情所有者
focusChara角色ID, 速度(可选)移动镜头到同地图角色
focusPC速度(可选)聚焦玩家角色
unfocus重置镜头
destroy角色ID移除同地图角色
save存档
setHour小时数设置游戏时间

多参数使用 ,(逗号)分隔,中间不要有空格

触发条件

通过 if/if2 列添加该行的条件判断:

条件参数说明
hasFlagflag玩家拥有非零值flag
!hasFlagflag玩家无flag或值为零
hasMelilithCurse玩家有Melilith诅咒
merchant玩家在商人公会
fighter玩家在战士公会
thief玩家在盗贼公会
mage玩家在法师公会
hasItem物品ID玩家持有指定物品
isCompleted任务ID玩家已完成指定任务

条件格式为 条件,参数, 支持扩展表达式:

=,test_flag,1
,counter,20
>,flag,0
!,flag,69

大多数情况下, 只需要在表格中使用 if 列。如果需要更复杂的条件, 可以插入一个新列, 并将首行值设置为 if2

条件判定

if仅在剧情表加载时判定一次,这意味着您无法动态启用/禁用行。请使用 reload 或 CWL 的 invoke* 拓展条件。

剧情拓展

在使用剧本表内置的 action 时未能达到预期效果?需要更多条件检查?CWL 允许您在 DLL 中添加自定义拓展方法,并在剧本表中调用它们。

Mod Help集成

有时您可能想为玩家提供一些提示,以便他们更好地体验您精彩的剧情故事。通过使用CWL制作模组,您可以使用Mod Help 来提供定制的帮助页面。