語涵編譯器介紹
摘要: 語涵編譯器是一個目前(2023-04-01)仍在開發(fā)中的視覺小說輔助開發(fā)工具,主要功能是實現(xiàn)從視覺小說劇情文本(如 Word 文檔格式的劇本)到常見視覺小說引擎的腳本(如 RenPy 腳本)的轉(zhuǎn)換,包括自動錄入和演出。本文首次公開介紹該開發(fā)項目,并描述部分設(shè)計特性和理念。
背景和介紹
隨著越來越多開源免費的開發(fā)工具的出現(xiàn),“視覺小說”這種弱游戲性、以講故事為主的游戲已經(jīng)成為最容易制作的游戲類型之一。由于不同視覺小說游戲的程序部分的功能高度一致,有時只有像故事劇本、美術(shù)和音樂資源等素材不同,所以為減少程序部分的重復(fù)開發(fā),大部分視覺小說游戲在項目結(jié)構(gòu)上分為兩部分:(1)引擎,負責(zé)游戲的程序部分,以及(2)演出腳本和素材,負責(zé)游戲的內(nèi)容部分。打個比方,如果餐廳想要提供外賣服務(wù),他們不需要親自招聘外賣員,而是可以與外賣平臺簽約,由他們組織的外賣員進行遞送。在這個例子中,外賣員(視覺小說引擎)提供的遞送服務(wù)(程序)對各個餐廳都是相似的,所以餐廳在提供外賣服務(wù)(視覺小說游戲)時只需要準(zhǔn)備食物(素材)。這樣,同一個視覺小說引擎可以用于不同的視覺小說,減少了重復(fù)開發(fā)的浪費。在像 RenPy, NVLMaker + KiriKiri 這樣的免費引擎與開發(fā)工具的幫助下,視覺小說的開發(fā)只需要準(zhǔn)備演出腳本和素材即可,小規(guī)模團體甚至個人開發(fā)者也可以利用閑暇時間完成自己的視覺小說作品。
然而,相較于更成熟的現(xiàn)代軟件工程體系,視覺小說的開發(fā)流程仍有值得改進的地方。語涵編譯器立項之初是為了解決如下兩個問題。
一、演出腳本格式與引擎的高度綁定影響了開發(fā)流程或效率。演出腳本基本是以引擎所接受的格式編寫的故事劇本,這樣的腳本只能用于一種特定的引擎。這就像是不同外賣平臺對餐廳的食物有不同的要求,A平臺要求食物只能用圓盒裝,B平臺要求食物只能用方盒裝,不可能同時滿足。對于視覺小說創(chuàng)作者來說,如果開始創(chuàng)作時劇本是寫在 Word 文檔中的、沒有按照引擎所用格式來寫的話,那么所有劇本都需要重新按照引擎的格式寫一遍(也成為錄入)。這給開發(fā)工作帶來了額外的負擔(dān)。目前最好的做法是作者從一開始就選好引擎、按照引擎所用的格式(比如 RenPy 腳本語法)寫劇本,或者再開發(fā)一套程序把特定的劇本格式(比如 Excel 表格)轉(zhuǎn)化成引擎的格式。這些方法本質(zhì)上都是“在做菜時就必須想最后裝盒的問題”,對作者和劇本來源提出了更高的要求。
二、缺乏對常見問題的檢查方法。在過去的視覺小說創(chuàng)作中發(fā)生的問題以及內(nèi)容呈現(xiàn)(演出)方面的問題幾乎一定會隨著新人的加入而不斷重復(fù)。比如素材管理的問題,作者邊寫劇本邊制作素材,后面發(fā)現(xiàn)部分素材最后沒有用上,部分素材可能用的不夠充分(比如一張CG圖只出現(xiàn)了一秒),或是需要在制作后期補素材。
為解決以上兩個問題,語涵編譯器的設(shè)計將主要提供以下功能:
一、劇本轉(zhuǎn)換:語涵編譯器提出一種(1)更貼近自然語言(中文)習(xí)慣、(2)便于修改和定制的劇本格式,按照該格式編寫的劇本可以使用語涵編譯器轉(zhuǎn)化為引擎所用的格式。在設(shè)想的開發(fā)流程中,開發(fā)者可以先使用語涵編譯器生成引擎所用的工程文件夾,再使用像是 RenPy 或是 NVLMakek 這樣的工具完成開發(fā)。
二、內(nèi)容分析:語涵編譯器將可以對劇本進行檢查(包括在劇本尚未全部完成時),進行數(shù)據(jù)統(tǒng)計、資源需求整理等。

在當(dāng)今人工智能發(fā)展浪潮的背景下,語涵編譯器在完成核心功能后也將嘗試嘗試整合第三方接口,嘗試如自動語法檢查、機翻,或是其他依賴人工智能的功能。語涵編譯器是一個 Python 程序,所有代碼都使用模塊化的組織結(jié)構(gòu)以便于修改定制。
語法與特點
與現(xiàn)有的視覺小說引擎相比,語涵編譯器的格式和對內(nèi)容的理解(即“語法”和“語義”)有以下決定性的差別:
一、富文本(rich text)輸入。語涵編譯器的劇本基于 Word 等文檔的格式。文檔可以內(nèi)嵌圖片、音頻等素材。劇本文本可以使用大小、顏色、加粗等效果,這些效果將直接反饋在輸出的游戲內(nèi)容中。語涵編譯器在特定環(huán)境下使用列表、段落背景色等方式來提供命令參數(shù)或是區(qū)分特殊命令生效范圍。目前的原型使用 odt 格式的文件(Word 可以導(dǎo)入導(dǎo)出),以后會直接支持 docx 文件。

二、漸進式開發(fā)。大多數(shù)引擎需要保證唯一的輸入劇本有唯一的演出效果,所以不會做沒有被命令的事。語涵編譯器將劇本中的命令視為約束條件,有命令的地方遵守命令,其他地方語涵編譯器可以自動填補細節(jié)、豐富效果。比如,作者可以先寫故事,確定主要人物、劇情和場景且不用考慮演出效果,由編譯器來生成大堆的占位圖片和轉(zhuǎn)場效果。然后,作者可以加入圖片素材,編譯器來決定圖片坐標(biāo)等。最后微調(diào)時,作者可以再把所有不滿意的地方改了。在開發(fā)過程中的任意階段(包括劇本創(chuàng)作階段),語涵編譯器輸出的項目都將是可運行的,作者將能夠直接看到自己改動的最終成果。
三、容錯。大多數(shù)引擎碰到命令出錯后都將無法繼續(xù)執(zhí)行。語涵編譯器碰到錯誤的命令時會將其記錄下來,在生成的游戲運行到相應(yīng)位置時會提示此處錯誤,但不阻止繼續(xù)執(zhí)行。作者可以選擇不修復(fù)問題,繼續(xù)運行至其他部分。換句話說,語涵編譯器盡可能避免(無法忽略的)錯誤,盡可能使用(可以忽略的)警告來處理問題。
具體的命令與劇本格式仍在探索中,等完成度足夠高后會再公布。
開發(fā)計劃
目前的首要目標(biāo)是在2023年8月底之前完成從 odt 文檔(可以由 Word 導(dǎo)出)到 RenPy 的完整管線,并在Steam上發(fā)布一個介紹該程序的“游戲”。在這之后,會再開始整理文檔、征集意見,并對語法進行迭代,補足其他功能。
目前只有一人進行開發(fā),不過由于沒有整理好的文檔以及較深的學(xué)習(xí)曲線,現(xiàn)在加入開發(fā)還是“勸退”級難度,對本項目感興趣的小伙伴請耐心等待。