視覺小說製作系統:管線、技術架構與 QA
整理模組化視覺小說 SOP 的階段閘門、Ren’Py 專案結構、在地化資料流、變更導向 QA 與發行邊界。
視覺小說製作系統:管線、技術架構與 QA
定位/對應既有頁
本頁是 Projects/Creative/visual novel production system 的技術補充。它描述一套可重用的製作 SOP、文件路由與驗收契約,不是一款已完成或已 release 的遊戲,也不是任何作品的發售證明。
目前可確認的是 v2 系列 SOP、範例 manifest 與發行前檢查方法;單部作品是否真的具備這些目錄、腳本、素材、測試結果與平台 build,仍要到該作品 repository 驗證。
已確認技術
文件路由而非單一巨型規格
系統把責任拆成:
- 入口 README:文件地圖、規則優先序與任務路由。
- 文字與多語 SOP:正文、人物聲線、有限潤稿 loop、繁中 MVP 與在地化。
- 製作規格:Ren’Py、素材、演出、UI、音訊、QA、隱私與發行邊界。
- 出版前清單:正式包、權利、商店資訊、簽章與發售停止條件。
- locale 模組:各目標語言的語用與檢查規則。
- 單部 Project Contract:覆蓋全域預設,保存該作品真正的範圍與例外。
Agent 依任務只讀必要文件與必要章節,例如文字工作不預載完整技術 QA,單一語言不預載其他語言全文。這個路由本身就是控制 context、token 成本與誤改範圍的技術設計。
技術基底
SOP 的量產預設為:
- Ren’Py 8.x。
- 1920×1080 虛擬畫布、16:9。
- 離線可玩,不要求帳號、後端或外部服務才能閱讀主體內容。
- Windows 與 macOS 是預設桌面目標;Web/HTML5、Android 與 iOS 預設不製作、不測試、不封裝。
- 非 16:9 顯示器保留比例與完整構圖,使用 letterbox/pillarbox,而不是拉伸或任意裁切。
這些是 SOP 預設,不是已完成平台清單;單部 Project Contract 可以改變範圍。
建議專案分層
project/
├── README.md
├── ASSETS.md
├── project-manifest.json
├── game/
│ ├── script.rpy
│ ├── story_*.rpy
│ ├── assets.rpy
│ ├── audio_slots.rpy
│ ├── gallery_music_room.rpy
│ ├── options.rpy
│ ├── gui.rpy
│ ├── screens.rpy
│ ├── tests/testcases.rpy
│ ├── tl/<locale>/
│ ├── images/<category>/
│ └── audio/<category>/
├── artwork/
├── source-audio/
├── docs/
└── tests/
責任分配要點:
script.rpy只保留入口、角色定義與必要狀態。- 正文分到
story_*.rpy,避免入口檔成為巨型檔案。 - 劇本呼叫語意音訊槽,不直接散寫實體音檔名稱。
ASSETS.md記錄缺口、建議路徑、狀態與暫代方案。project-manifest.json宣告標題、版本、尺寸、平台、語言、故事檔、結局、CG、音訊需求與隱私排除。- checker 應比較 manifest 與
options.rpy等實作值,不假設兩者自然同步。 TEST-RESULTS.md只保存目前候選版、環境、核心結果、已知限制與批准狀態,不寫重複流水帳。
資料流/演算法
階段閘門
Project Contract
→ Gate A 範圍、manifest、素材缺口
→ Gate B 繁中校準場景與保留場景
→ Gate C 可連續閱讀的繁中全文候選+snapshot 鎖定
→ Gate D 映射 Ren’Py、素材、UI、音訊與演出
→ Gate E 繁中本機候選版驗收
→ Gate F 其餘五語在地化與六語整合
→ Gate G 使用者批准後才建立與交付平台包
每一 Gate 完成自己的可驗收 artifact 後停止。方向、權利、正式發行與已定義人工驗收點才等待使用者;階段內的安全工作不需要每小步重問。
繁中文字到 Ren’Py
- 以 Project Contract、場景卡與角色卡產生繁中基礎稿。
- 首次交付前做一次場景化潤稿,處理資訊順序、對話承接、人物反應、聲線與可演出節拍。
- 以認知負荷、初次閱讀、對話與人物三路診斷標記問題,審查者只標記、不直接改稿。
- 合併重複標記,只接受有證據的 P0/P1;P2 不能單獨觸發新一輪。
- 第二輪只定向重寫已接受範圍,之後只驗修改段與相鄰對話。
- 兩輪後仍有 P0 就交由人工處理,不再無限全文美化。
- 繁中先以可從頭讀到結局的 Markdown 交付;使用者以 snapshot ID 鎖定後,才映射成 Ren’Py statement/label。
嚴重度定義:
- P0:事實、分支、人物知識或意思錯誤,必修。
- P1:明顯影響理解、人物或對話,應修。
- P2:品味微調,不可單獨啟動新一輪全文重寫。
這個固定兩輪上限防止 Agent 因自評分數或主觀偏好持續改寫,並讓「何時停止」成為可驗收規則。
校準與保留測試
- 先選一個約 15~30 個玩家可見文字區塊的校準場景,涵蓋至少兩名角色、新資訊、立場摩擦與一次狀態改變。
- 再選一個規則建立時未使用、而且類型不同的保留場景。
- 兩個場景必須使用同一規則;不能為了讓保留場景過關臨時加特例。
- 兩者通過後才凍結 SOP 版本並展開全文。
這相當於把「一段看起來不錯」和「規則具有基本泛化能力」分開。
多語資料流
台灣繁中是人工內容驗收基準。其他五語在繁中本機測試完成、準備正式上架前才一次整合。
每句重要內容的翻譯輸入不只包含原文,還可包含:
- statement/translation ID。
- 場景卡與角色聲線卡。
- 六欄詞彙與姓名映射。
- 表面意思、真正意圖、不可直說內容、情緒方向、不可改變事實與可自由在地化範圍。
每個目標語言做兩種審查:
- 在地語感審查:自然搭配、禮貌、句尾、節奏與人物聲線。
- 語意/狀態審查:事實、伏筆、稱呼、人物知識與選項代價。
整合後只修接受的段落,再驗修改段、詞彙表與有效 translation ID。沒有母語人工審校時,只能標記為 Agent 在地化候選版,不能宣稱母語商業審校。
Manifest 驅動
範例 manifest 提供可機器讀取的宣告層,主要欄位包含:
- schema version、作品 title、slug 與版本。
- engine、虛擬尺寸、目標平台與 Web 開關。
- 支援語言。
- story files、篇幅政策、一般與偏離結局。
- 字型、品牌圖、封面、視窗圖示、必要圖片與事件 CG 狀態。
- 音樂語意槽與必要 SFX。
- 不得進公開包的 privacy exclusions。
manifest 是「預期狀態」;真正驗證要由 checker 對照檔案存在性、Ren’Py 設定與正式包內容,不能只檢查 JSON 可解析。
音訊與資產
- 劇本只呼叫語意槽,讓同一故事事件不綁定特定音檔。
- 繁中 snapshot 鎖定後,從已確認的動作建立一次動作/音效對照,再回寫 Ren’Py。
- 音效先批次檢查解碼、峰值、響度與刺耳高頻,再抽驗代表場景與停止時機。
- 素材權利紀錄保存來源、作者、授權、日期、修改與輸出檔名。
- 私人參考、生成中間稿、原始音訊、憑證、cache、存檔與測試資料不能進 Git 或玩家包。
測試驗證
SOP 採「依變更分類」而不是每次跑全套:
| 變更類型 | 必要驗證 |
|---|---|
| 純文字/錯字 | 修改段與前後文;章節完成時 lint |
| label/選項/變數 | 內容檢查、lint、受影響路線 smoke |
| 角色/背景/CG | manifest、尺寸、載入、變更場景、代表接觸圖 |
| UI/transform | lint、相關 testcase、桌面截圖 |
| 音訊 | 動作對照、manifest、批次技術檢查、代表播放場景 |
| 單一語言 | 有效 ID、詞彙表、修改段與雙重審查 |
| 本機候選版 | 靜態檢查、lint、一次完整 native smoke、本機啟動 |
| 批准後發行 | 指定平台 build、簽章、checksum、上傳後驗收 |
全域測試規則:
- Fail fast:前一步失敗先修,不繼續更昂貴的檢查。
- 同一 source snapshot 的完整 smoke 最多一次。
- 修正後只重跑失敗項與直接依賴。
- 純對白或錯字不自動使既有 native smoke 失效。
- UI、素材、音訊、label、變數或引擎設定改變時,才跑對應功能測試。
- 沒有目標平台實機或 VM 時必須標記「尚未實機驗證」,不能用結構檢查冒充實測。
本頁所依據的資料夾是 SOP 與範例 manifest;沒有單部遊戲的 .rpy 實作、build、checksum 或 TEST-RESULTS 可供本次驗證。因此上表是已定義的驗收契約,不是已經執行通過的測試報告。
部署/執行邊界
- 正式封裝前必須有明確的 source snapshot、版本、平台與語言集合。
- 只有使用者明確批准的 snapshot 才能建立批准平台的包。
- 玩家可見內容、版本、公開素材或設定再變更時,原批准失效,回到受影響驗收層。
- 正式流程包含 Force Recompile、build 分類、敏感檔掃描、代表 smoke、簽章、checksum 與上傳後遠端檔案核對;各項是否實際需要依平台與發行方式決定。
- Web 與行動平台不在預設範圍;不能因 Ren’Py 支援某平台就寫成已測試或已上架。
- macOS/Windows 的簽章、notarization、平台後台與商店審查屬發行階段,不應預先寫成完成狀態。
- 真正不能公開的檔案不能靠 archive 或封裝保密;只要進玩家包,就應假設可被技術性擷取。
限制
- 這套系統目前是文件化 SOP,不是已完成的自動化製作框架。
- 範例目錄、manifest 與 checker 契約不代表每部作品已實作相同檔案。
- 量產數量、平台、語言與內容範圍都是可被 Project Contract 覆蓋的預設,不是硬編碼產品承諾。
- Agent 在地化不能取代母語級商業審校;未審校時必須誠實標示。
- 自動 lint、靜態檢查與 smoke 不能取代實際閱讀、操作、平台安裝與權利審查。
- 發行平台規則會變動,正式操作前仍須回到當期官方文件與後台要求。
- SOP 無法證明某部遊戲已完成、已封裝、已簽章、已通過商店審查或已 release。
公開邊界
可公開:文件路由、階段閘門、Ren’Py 目錄責任、manifest schema 類型、文字有限 loop、多語資料流、變更導向 QA、隱私與發行停止原則。
不公開:任何單部作品的未公開故事、角色設定、完整劇本、私人肖像、原始或未採用素材、生成 prompt、原始音訊、測試存檔、憑證、簽章資料、帳號資訊、成本、定價、合作對象、權利談判與商務開發備忘錄。公開 Wiki 也不把內部審美偏好或私人來源誤寫成已對外承諾。
Source of truth
../ScopeCut_Projects/visual-novel-production-sop/README.md../ScopeCut_Projects/visual-novel-production-sop/project-manifest.example.json../ScopeCut_Projects/visual-novel-production-sop/視覺小說製作規格與創作偏好.md../ScopeCut_Projects/visual-novel-production-sop/小說文字撰寫與多語在地化SOP.md../ScopeCut_Projects/visual-novel-production-sop/出版前商業決策與上架檢查清單.md../ScopeCut_Projects/visual-novel-production-sop/locales/
上述文件是 SOP 現況的 source of truth。單部作品的實作、測試與發行狀態必須以該作品自己的 Project Contract、manifest、原始碼、測試結果與 build 紀錄為準。