安装
Novella 是同一个框架,可通过三种方式使用:作为 Divooka 包、作为运行脚本文件夹的命令行播放器,以及作为 C# 程序集。
在 Divooka 中
Novella 即 Divooka.Novella 包,在包选择器中列于 Game Development 下,名为 Novella Visual Novels,与 Glaze 并列。它添加了 Novella 工具箱、用于 Events 图的 Novella Application 基类型、可在 Properties 面板中游玩游戏的自定义预览,以及 Plugins > Frameworks > Novella > Run Novella Game 菜单项。用法参见 在 Divooka 中使用 Novella。
| 发行版 | Novella 的包含方式 |
|---|---|
| Divooka Compute | 包含在 Standard 及更高层级中。启动界面提供 Game Development 工作负载,它把平台基础、图编辑器基本组件、Glaze(带帧循环、精灵和输入的实时游戏)以及 Divooka.Novella 组合在一起,用于制作供人游玩的游戏文档。 |
| Divooka Explore | 始终包含:Explore 附带其示例包所需的每个包,而示例包中有一个 Visual Novel 文件夹。 |
无需另行安装任何东西:该包自带运行时(绘图、音频解码和视频均为托管代码;使用 Python 的故事通过 IronPython 运行,其标准库位于程序旁的 PythonLib/ 中),游戏存档保存在用户的应用程序数据文件夹下(在 Windows 上为 %AppData%/Novella/<game id>)。从编辑器中播放的预览将存档保存在内存中,从不触及该文件夹。
两个发行版的区别参见 编辑器。
NovellaPlayer:用于脚本文件夹
NovellaPlayer 运行仅由一个文件夹构成的游戏:.novella 脚本,以及它们所用的图像、声音、字体和视频。它是不需要写代码时作者使用的工具。它位于 Parcel NExT 源代码树的 Parcel.NExT/Frameworks/Novella/Novella.Player 中,尚未纳入 Divooka 发行版,因此请使用 .NET 10 SDK 构建它:
dotnet run --project Parcel.NExT/Frameworks/Novella/Novella.Player -- run "C:\Games\The Garden"
它的命令:
| 命令 | 作用 |
|---|---|
NovellaPlayer run <folder> [--label name] [--developer] |
在窗口中游玩游戏;--label 从某个标签而非 start 开始,--developer 打开开发者控制台和重新加载功能。 |
NovellaPlayer lint <folder> |
将故事与其文件进行核对并打印每个问题;如果其中有错误,以退出码 2 退出。 |
NovellaPlayer shoot <folder> --out <dir> [--steps 40] [--every 1] [--choices 0,1,0] [--input text] [--label name] [--reading 0.5] |
以无头方式通过真实控件游玩,为每次交互保存一张 PNG 以及描述它的文本文件,外加一份文字记录;可跳过的影片会先截图,1.5 秒后点击跳过。如果缺少文件、脚本失败或故事卡住,以退出码 3 退出。 |
NovellaPlayer bench <folder> [--frames 120] |
在一行台词逐字显示时为各帧计时,并报告中位数和范围。 |
在脚本设置 define config.title 之前,游戏标题默认为文件夹的名称。
在 C# 中
从 .NET 10 程序引用 Novella 项目:
<ItemGroup>
<ProjectReference Include="..\..\Frameworks\Novella\Novella\Novella.csproj" />
</ItemGroup>
Novella 引入了 Novella.Core(故事模型、脚本语言和运行时,除 .NET 外不依赖任何东西)以及表现层;表现层使用 Divooka.Graphics.Canvas 和 ShadowGUI 绘图,使用 Divooka.Audio.IO 解码音频,通过 VideoFoundation 播放视频,并通过 SFML 打开窗口。VideoFoundation 是 Parcel NExT 仓库中位于 External/VideoFoundation 的外部克隆(获取方法见 External/README.md),因此请在构建前获取它。只需要故事运行时的程序或测试可以只引用 Novella.Core;C# 故事构建器也在其中。
故事中含有 Python 的游戏还需引用 Novella.Python,它通过 Parcel NExT 的 Python 包(Packages/Divooka.Scripting.Python,基于 IronPython 3.4.2)运行 Python。该包会把 Python 标准库以 PythonLib/ 的形式复制到程序旁,来源是 External/PythonForDivooka_StandardLibraries,由 External/Setup.ps1 克隆。没有这个克隆时,游戏仍可构建,但会给出警告,其 Python 只能使用 IronPython 内置的模块(如 math 和 time)运行,因此 import random、os 和 json 会失败;如果故事的代码块只保留故事变量,则照常运行,但如果留下了 Python 必须保留的数据(如字典或对象),就会因错误而停止,并指出无法保留的内容,因为要把它保留在存档中需要该库的 pickle。程序中没有任何代码调用它:当故事含有 Python 时,引擎会在游戏旁按名称找到它,因此从不编写 Python 的游戏可以不包含它,也就不携带 Python。Divooka 包和 NovellaPlayer 已经引用了它。
<ItemGroup>
<ProjectReference Include="..\..\Frameworks\Novella\Novella.Python\Novella.Python.csproj" />
</ItemGroup>
API 参见 开发,完整程序参见 Parcel NExT 源代码树中的 TestPrograms/Novella.RedThread。