繁體中文
English 简体中文 繁體中文
Methodox 首頁

Novella

型別: 視覺小說框架
包: Divooka.Novella(Novella 工具箱),位於 Divooka Compute 的 Game Development 工作負載中;C# 程式集 Novella.Core 和 Novella
上下文: 過程式(Routine 和 Events 圖)、資料流(Flows 和 Function 圖)、C#,以及純指令碼資料夾
設計: RFC 170
狀態: 第 1 次迭代,即改版版本。本次迭代中,引擎、其指令碼語言、其 Divooka 包、Explore 示例以及示例遊戲均已就緒。

The Red Thread,Novella 的示例遊戲

Novella 是 Parcel NExT 的視覺小說框架。遊戲就是資料:一個由標籤和語句組成的故事,故事所引用的定義(角色、影像、變換、轉場、音訊),一份配置和一個主題。同一個遊戲可以從指令碼資料夾、C# 程式、Divooka 過程式圖或 Divooka 資料流圖的預覽中執行,並且在每種方式下的遊玩效果都相同。

它的功能目標是與最廣泛使用的視覺小說引擎 Ren'Py 對等,因此熟悉 Ren'Py 的作者一眼就能認出這種指令碼語言。它的 API 和程式設計風格則是自己的:條件和賦值使用一種小巧、安全的表示式語言;故事需要的除此之外的任何東西,都是用 C# 或 Divooka 實現的命令;需要 Python 的遊戲可以選擇啟用它,以程式碼塊的形式通過 IronPython 執行真正的 Python。故事甚至完全不必是指令碼:C# 和 Divooka 節點可以寫出相同的故事資料,包括條件和對變數的更改。

製作遊戲的方式

方式 你編寫的內容 執行方式
指令碼資料夾 .novella 指令碼檔案,與遊戲的影像、聲音和字型放在一起 NovellaPlayer run <folder>
C# 一個 NovellaGame 或其派生類,故事寫在指令碼中、用 C# 故事構建器編寫,或寫成即時指令碼 game.Run() 開啟一個視窗
Divooka 建立並執行遊戲的 Routine 或 Events 圖,或者把遊戲描述為資料(直到其條件、效果和場景)的 Function 圖 執行圖,或從其 Custom Preview 中游玩某個定義

故事本身可以用四種方式編寫:寫成指令碼;在 C# 中用故事構建器編寫,無需指令碼;在 C# 中寫成即時指令碼,即一個本身就是故事的過程;以及寫成 Divooka 節點,可以是函式式的(把序列、條件、效果和場景構建為資料),也可以是過程式的(Events 圖中的即時指令碼)。它們最終殊途同歸:無論用什麼編寫遊戲,產生的都是一個故事及其定義,並由同一個執行時來播放。指令碼資料夾只需幾行程式碼就能變成 C# 程式,Divooka 圖可以從文件自己的庫中載入同樣的指令碼,而指令碼、構建出的標籤和場景可以混合在同一個故事中。

define config.title = "The Garden"
character q "Qinglan" color "#c0392b" image qinglan

label start:
    scene bg garden with fade
    show qinglan smile at right with dissolve
    q "You came."
    menu:
        "I did.":
            q "Then sit with me a while."
        "I was passing.":
            q smile "Of course you were."
    return

功能

  • 類似劇本的指令碼語言。 縮排構成程式碼塊;對話就是說話者加一句帶引號的臺詞。支援標籤、跳轉、帶參數的呼叫、帶條件的選單、if/elif/else、while、變數和持久變數。參見指令碼語言參考。
  • 無需登記的影像。 影像檔案按其路徑命名(sprites/qinglan/smile.png 即 qinglan smile);缺失的影像會繪製為佔點陣圖,因此在任何美術素材完成之前就能遊玩故事;分層影像可以組合服裝和表情,而不必為每種組合準備一個檔案。
  • 舞臺。 帶位置、z 順序和圖層的 show、hide 和 scene;ATL 風格的動畫時間線(屬性、緩動函式、暫停、用於幀動畫的圖片行、repeat、block、parallel、choice、time、on show/replace/hide、contains、function),在讀檔或回滾後會精確重放;能夠自行播放動畫的影像,例如閃爍的蠟燭;近五十種內建轉場,從 dissolve 和 fade 到 pixellate、irisin、pushleft,以及通過遮罩實現的影像溶解。
  • 文字。 Ren'Py 的文字標籤(粗體、顏色、字型大小、字型、用於假名注音和拼音的 ruby、{w}、{p}、{nw}、{fast}、{cps})、[variable] 插值、NVL 頁面、置中文字、側邊影像和打字音效。
  • 聲音和影片。 音樂、音效、語音和環境音通道,支援淡入淡出、佇列和迴圈;按臺詞 id 自動配音;全屏影片和影片精靈。
  • 遊戲自己的介面。 一種介面語言,包含容器、網格、框架和可滾動視口,if、for 和 use,介面變數、按鈕、進度條、文字欄位、計時器和按鍵,每一幀都根據故事的變數重新佈局:物品欄、狀態列、地圖、謎題板。它可以顯示在故事上方,也可以被呼叫來向玩家提問;可以在指令碼中寫成 screen,也可以用 C# 或節點編寫;更復雜的需求可以使用 C# 類。
  • 鍵盤、滑鼠和手柄。 每個介面,包括遊戲自己的介面,既可以用鍵盤和滑鼠操作,也可以用手柄操作。
  • Python,如果遊戲需要的話。 python: 和 init python: 程式碼塊通過 IronPython 執行真正的 Python,並可使用其標準庫;它們設定的內容(包括物件和字典)會隨故事一起存檔、讀檔和回滾,它們定義的函式可以在任何表示式中呼叫。
  • 玩家期望的每一個介面。 主選單、遊戲選單、帶縮圖的存檔和讀檔、偏好設定、歷史記錄、畫廊、音樂空間、成就、關於、幫助、確認和通知,全部由一個主題設定樣式——主題是純資料,即使不用任何一張影像也能工作。
  • 樣式。 與 Ren'Py 一樣,樣式是帶有父樣式以及 hover_、selected_、insensitive_ 和 visited_ 變體的具名外觀。每個內建介面都用樣式繪製,主題也由樣式組成,因此故事可以細化遊戲外觀的某一部分,給某個角色一個專屬的對話視窗,把選項按鈕做成帶懸停圖片的圖片,或者用 {style=name} 給一句臺詞中的某個詞著色。參見樣式。
  • 無需指令碼的故事。 流暢的 C# 故事構建器和 Divooka 節點,每一種都能表達指令碼語言所能表達的內容,從臺詞、選單、條件和效果,到動畫、分層影像、翻譯、介面和 Python 程式碼塊;場景,即 Novella One 的配置模型(一個背景、音樂、臺詞以及故事接下來的去向);以及用於實現節點無法組合出的邏輯的 Function 圖。它們產生的故事都與指令碼產生的相同,因此存檔和回滾的方式也相同;唯一的區別是,它們傳給標籤、命令或介面的實參是在構建故事時就固定下來的值,而指令碼傳遞的實參是表示式。
  • 存檔、讀檔和回滾。 每句臺詞、每個選單和每次輸入都是一個檢查點;玩家可以向後和向前回滾、跳過已讀文字、自動前進、快速存檔和讀檔,而讀檔會精確還原畫面,包括隨機抽取的結果。
  • 翻譯。 逐句翻譯和字串翻譯直接寫在指令碼中,引擎自身的介面已翻譯為簡體中文、繁體中文和日語。
  • 面向作者的工具。 根據檔案檢查故事的 lint 工具,帶有標籤跳轉功能的開發者主控台,遊玩時重新載入指令碼,以及為每一步儲存一張帶說明的螢幕截圖的無頭通關測試。

梅林中的對聯選項

帶對話視窗的 CG

簡體中文版的同一款遊戲

頁面

  • 安裝:在 Divooka 和 C# 中從哪裡取得 Novella。
  • 入門:分別從指令碼資料夾、C# 和 Divooka 製作第一個遊戲。
  • 概念:故事、標籤、場景、角色、影像、舞臺、執行器、檢查點、存檔、用程式碼編寫的故事、即時指令碼,以及鍵盤和手柄控制。
  • 指令碼語言:完整的參考,附帶示例。
  • 主題設定:每一項配置和主題設定、它們所對應的內建樣式、字型、九宮格影像和介面翻譯。
  • 樣式:帶父樣式和狀態的具名外觀、內建樣式,以及在指令碼、C# 和節點中應用於介面、角色和臺詞片段的樣式。
  • 在 Divooka 中使用 Novella:工具箱、過程式圖和函式式圖,以節點形式呈現的條件、效果、場景、動畫、介面和樣式,Function 圖中的邏輯、預覽和嵌入的資源。
  • 開發:C# API、故事構建器、自訂命令、作為資料和作為類的介面,以及無頭測試。
  • 示例:Explore 示例和示例遊戲 The Red Thread。
  • 與 Ren'Py 的功能對等:哪些已支援、哪些部分支援、哪些尚未提供。

參考資料

  • RFC 170 - Framework - Novella:設計文件。
  • DevLog 20250512 Visual Novel Game Framework (Highlights),作者 Charles Zhang(dev.to),介紹最初的設計 Novella One。
  • DevLog 20250516 NovellaOne, A Visual Novel Game Framework - Early Introduction,作者 Charles Zhang(dev.to)。