安裝
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。