参考链接:
术语综述
名词解释
- Twine2是低代码视觉小说编写软件,能够导入导出源代码,及将其编译为HTML单文件。
- Twee3是Twine2编写的视觉小说的源代码文本格式,经编译后得到HTML单文件;具体规范:Twee 3 Specification (v3.0.2)
- SugarCube2是Twee的一种格式规范;详细文档:SugarCube v2 Documentation
- TwineScript是SugarCube2在JavaScript基础上修改得到的代码格式,用于Twee3中,可经SugarCube2解析得到对应的JavaScript代码
- Tweego是命令行编译器,仅能将Twee3编译为HTML单文件
以DoL项目为例,使用的是经修改后的SugarCube2格式规范下的Twee 3源代码,并用Tweego编译得到的HTML单文件。
- Story(故事)是对Twine2项目经编译构建得到的结果,有故事名称、文章列表、元数据以及故事格式组成。
- Passage(文章)是Twee3格式下每个故事的基本单位,由文章标题、文章标签(可选)、文章元数据(可选)以及文章内容组成。
- Macro(复用函数)是SugarCube2规范中基本等价于其他语言“函数”的对象,由函数名与函数参数组成。在TwineScript中可由特殊的复用函数
<<widget>>定义,在JavaScript中由Macro.add()添加。
故事加载流程
Tweego 编译流程
Tweego对故事的编译相对简单,只有读取-处理-输出三步。其读取的文件简单分为以下几类:
- Twee文件(.twee/.tw, .twee2/.tw2),不推荐Twee2格式
以文章作为基本单位分割,每个文章具有标题(名称)、标签、元数据以及内容 - Html文件(.htm/.html)
将其看作已被处理过得到的结果,将其反向拆解为组成故事的各个结构。 - 样式文件(.css, .js)
将样式表文件看作具有[stylesheet]标签的文章、将js文件看作具有[script]标签的文章,文件名作为文章名,按照文章处理。 - 字体文件
将其看作以base64加载的样式表文件,进而按照样式表文件处理。 - 媒体文件(图片、音频、视频与字幕(.vtt))
分别将其以base64加载后,以文件名作为文章名称、分别以[Twine.image],[Twine.audio],[Twine.video]与[Twine.vtt]作为文章标签,进而当做文章处理。
其余格式均忽略,不做处理。
输出结果默认为单个Html文件,这也是Twine2默认的输出结果,如DoL游戏文件那样。此外也可以以压缩包形式输出。
Tweego的核心处理流程为将项目所有文件整合为单个Html文件的过程,此过程涉及SugarCube2编译所使用的Html模板中的{{STORY_NAME}}和{{STORY_DATA}}参数。STORY_NAME由故事名称转义而来,STORY_DATA则包含上述所有读取文件的数据,其中:
- 所有含有
[stylesheet]标签的文章内容直接拼接,由<style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css">…</style>所包裹 - 所有含有
[script]标签的文章内容直接拼接,由<script role="script" id="twine-user-script" type="text/twine-javascript">…</script>所包裹 - 其他的所有常规文章,逐个由
<tw-passagedata pid="…" name="…" tags="…" position="…" size="…">…</tw-passagedata>所包裹,其中pid为自增唯一标识符;然后拼接。
在以上各自拼接完成后,将三者拼接,并用<tw-storydata name="…" startnode="…" creator="…" creator-version="…" ifid="…" zoom="…" format="…" format-version="…" options="…" hidden>…</tw-storydata>所包裹,作为STORY_DATA替换模板中的原文,并最终得到单个Html文件作为结果。