Glossary
Glossary 用来解释 NovaMark 中反复出现的概念词。
如果你看到这些词时不太确定它们的区别,可以优先查这里。
VM(虚拟机)
NovaMark 的 VM 是负责执行脚本、推进剧情、更新状态的核心运行时。
它不直接绘制界面,也不决定动画、布局、HUD 或存档 UI;它只负责把故事推进到下一个离散状态点。
相关文档:
运行时状态(Runtime State / NovaState)
运行时状态是宿主真正要消费的数据快照。它通常包含当前场景、变量、背包、角色定义、对话、选项、背景、BGM、立绘与文本配置等。
你可以把它理解为:
引擎在某一个时刻,告诉渲染器“现在应该显示什么”。
相关文档:
宿主(Host)
宿主是承载 NovaMark VM 的外层应用。它可以是 CLI、Web 前端、桌面客户端、移动端 App,或任何能够调用运行时接口的程序。
宿主负责:
- 接收玩家输入
- 调用
advance()/choose() - 读取运行时状态
- 决定 UI、动画、音频与存档行为
渲染器(Renderer)
渲染器是把运行时状态转成界面的那一层。NovaMark 的渲染器是“哑”的:它不拥有剧情逻辑,只负责呈现状态。
这意味着同一个 .nvmp 游戏包可以对应多个渲染器实现,例如:
- Text Mode
- Web Chat / Web VN
- Native GUI
.nvmp 游戏包
.nvmp 是 NovaMark 的单文件分发格式。它会把脚本、编译后的内容结构和资源数据打包成一个可分发文件。
这意味着:
- 分发时不需要额外整理资源目录
- 平台接入方只需要加载一个包文件
- Web / Native / CLI 可以消费同一个游戏包
场景(Scene)
场景是故事的主要组织单位。你可以把它理解为“一个章节内的片段”或“一个故事节点”。
通常由 #scene_xxx "标题" 开始定义。
标签(Label)
标签是场景内部的局部跳转点,通常写作 .label_name。
它常用于:
- 让选项跳到场景内部某个位置
- 把一个场景拆成多个小片段
- 组织较长的分支内容
对话(Dialogue)
对话是角色说出的文本,通常写作:
角色名: 对话内容对宿主来说,对话通常会进入当前状态里的 dialogue 字段,再由渲染器决定如何展示。
旁白(Narration)
旁白是没有说话人名称的叙述文本,通常写作:
> 月光透过树梢洒落。它常用于环境描写、动作说明、系统提示等。
选择(Choice)
选择是让玩家决定后续走向的交互节点。通常由问题行和多个选项组成。
? 你要做什么?
- [探索周围] -> .explore
- [原地等待] -> .wait检定(Check)
检定表示一次显式的成功 / 失败判断,通常使用 @check、@success、@fail、@endcheck 结构。
它适合:
- 骰子表达式
- 属性比较
- 资源条件验证
变量(Variable)
变量是脚本中的内部状态,一般用 @var 定义、用 @set 修改。
它适合保存:
- 数值
- 字符串
- 布尔条件
- 剧情内部标志
物品(Item / Inventory)
物品是面向玩家可见的状态项,通常会被展示到 UI 上。常见命令包括 @item、@give、@take。
它既可以是传统道具,也可以是货币、HP、San 值之类的可显示资源。
标记(Flag)
标记用于记录关键剧情节点或长期状态,通常使用 @flag 设置,并通过 has_flag() 判断。
它适合保存:
- 是否见过某角色
- 是否解锁隐藏路线
- 是否完成某个关键事件
结局(Ending)
结局表示一次正式的故事完成状态,通常使用 @ending 触发,并可通过 has_ending() 判断。
它与普通分支的区别在于:结局通常会被平台记录为“已解锁结果”,用于回顾、成就或多周目系统。
快照(Snapshot)
快照是某一时刻的运行时状态保存结果。NovaMark 当前区分两类:
- 正式二进制存档
- 调试 / 工具使用的 JSON 快照
渲染提示(Rendering Hint)
渲染提示是脚本给渲染器的表现建议,例如:
transitionpositionopacityloopvolume
这些字段表达的是创作者意图,不代表引擎内部存在完整时间轴系统。真正如何播放、过渡、淡入淡出,取决于宿主和渲染器实现。
advance() / choose()
这是宿主最核心的两个推进动作:
advance():继续推进剧情,直到遇到下一个需要宿主处理的状态点choose():告诉引擎玩家选中了哪个选项,并继续剧情
如果你在做平台接入,理解这两个动作比理解所有语法细节更重要。