
有些小夥伴熟悉我,即《醫院計劃》「精神衛生模組(the Department of Psychiatry)」的作者。而這個系列的專欄將從XML語言到醫學參考資料,一步步指導你嚴謹而又認真的創作屬於自己的科室模組。讓我們開始吧。
零、基礎知識模組定義
在《醫院計劃》這款硬核的醫療模擬游戲中,已經包含了急重內外心神,DLC內容創傷科、傳染科,醫技、管理科室檢驗科、影像科、行政部。但是顯然,者對於追求極致模擬的玩家來說,是遠遠不夠的。而科室模組,無非是對游戲科室內容的拓展,是在建立科室、技能後,對於癥狀、檢查、診斷、治療手段、診斷的增擴,再串聯的一種過程。簡單來說,我有了癥狀,有了檢查,有了診斷,有了治療,就有了診斷。上述過程在游戲的里,是需要通過XML語言進行「編程」來完成的,但無需驚慌,這種方式並不困難。
所需材料
想要創作科室模組模組需要以下材料,我會進行詳細的說明。


1、代碼編輯器:顧名思義,代碼編輯器就是編輯代碼的一種特殊的、具備代碼高亮、收縮等功能的編輯器。對於不需要超大規模開發的XML代碼來說,個人推薦使用Notepad3(分享,https://wwi.lanzouw.com/i76BH0mq78wb),使用代碼編輯器的另一大原因就是防止「瞎眼」,保護視力。在代碼編輯器中,XML代碼得以良好地呈現,突出重點,層層遞進,這種差異是顯而易見的。
2、XML驗證器:在XML的應用場景中,基本上可以說是不具備自我糾錯能力的,因此需要保障文件的基本語法是正確的。而XML驗證器,發揮檢查最基本的語法內容的作用,能夠保證代碼的語法正確性,從而不至進入游戲後直接「紅一片」(一個XML驗證的網站,https://www.runoob.com/xml/xml-validator.html)。
3、Steam版的Project Hospital游戲本體:如果你想要把模組上傳到創意工坊上,就必然要使用Steam版的游戲本體(DLC與模組上傳無關)。
4、一本至少是本科臨床醫學的學科教材:就是藍色生死戀。科室模組需要保證基本的嚴謹性和真實性,絕對不能誤導玩家,引導其在現實世界中做出不正確的健康抉擇。如果要深入的話,可以積極查找該科室的教材資料,甚至相關指南,這種方式做出的成果比一本藍色生死戀要好很多。譬如,在做精神衛生模組時,我參照了這些書籍。
《沈漁邨精神病學》
精神醫學專業的本科教材
這些書籍顯然是要比下述這一本的參考價值強許多的。

如果經濟條件允許的話,我甚至建議你買來實體書。
XML語法
游戲的模組使用XML來編寫代碼的,下面我就用幾近簡白的方式敘述它的語法規則。
1、在XML中,開頭時用來聲明代碼版本和所用編碼的文件稱作「頭聲明」,是可選的。
<?xml version="1.0" encoding="utf-8"?>一般來說無需修改,採用上述版本即可。
2、 基本成員稱為「元素」或「節點」,每個元素分為內容和標簽,都要有一個關閉標簽,標簽不得單獨出現。
<test>Hello,world!</test>上述中「Hello,world!」是內容,而「test」和「/test」是標簽,其中「/test」是關閉標簽。
3、語言對於大小敏感。
<test>這是正確的</test> <Test>這是錯誤的</test>4、最基礎的父節點稱之為「根節點」或「根元素」。
<Database> <test>根節點把所有內容包含在一起</test> </Database>上述中「Database」是根節點。
5、必須正確嵌套。
<a><b>這是正確的嵌套</b></a> <a><b>這是錯誤的嵌套</a></b>注意,無論標簽間是否換行,都要遵循同樣的規則。
6、XML 屬性值必須加引號
<dia ID="DIA_PSY_GAD"> </dia>語言的節點可以有對應的值,但是必須使用引號。
7、注釋格式
<!--我是一隻快樂的注釋-->語言的注釋永遠不會被機器運行,需要採取上述格式。
8、換行和空格要求
語言會自動合並空格為一個,在游戲模組的製作中換行符需用「\n」表示。
由代碼編寫不規范引起的常見問題
1、游戲主菜單左上角一片紅,通常報錯密集,涵蓋面廣,難以找到具體出錯的文件,這種情況下就須考慮是否是結束標簽丟失的問題。
2、卡在載入很長時間,也要考慮是否是結束標簽丟失的問題。
常見的編碼誤區
1、先寫超多代碼,再檢查,這樣會導致報錯時debug工作的困難。
關於命名規范
目前對於元素名、模組名等各類名字普遍使用的是用大小寫區分進行命名,如「GameDBAddon」,而標簽的值和內容則通常採用全部大寫進行命名。
當然,基於個人喜好,也可用下劃線法進行區分,如「game_database_addon」之類。
模組基本知識、創建第一個代碼及其文案
在游戲中,模組理論上在Project Hospital\ProjectHospital_Data\StreamingAssets\Addons,我們「打樣」模組時也需要在這個目錄下進行。但是,凡在創意工坊上訂閱的模組,其地址均在SteamLibrary\steamapps\workshop\游戲ID\模組ID,這個路徑下。我們可以通過Steam版游戲內的Steam創意工坊-上模組的方式進行上傳。

創建游戲模組的第一步是要建立文件夾,凡模組的文件夾嗎,都必須使用「Mod」作為模組文件夾的起始,之後填上模組名,不要有標點符號或空格。
模組所需的圖片直接放置在文件夾中,所有xml代碼則均需放置於再行創建的「Database」文件夾。模組的翻譯文案獨立於代碼,如果眾多的話可置於獨立的「Localization」文件夾當中。

模組文件是一種XML文件,xml是文件的拓展名,想要更改拓展名,就需要到資源管理器里進行一番設置。

其他系統的可以在網上搜索到。
完成後,就要正式開始創建模組第一個代碼文件啦,是不是有些小激動?

打開按照上述步驟創建好的文件夾,打開其中創建好的Database文件,新建一個文本文檔,其名為:ModAddon.xml(注意要全選,刪或覆蓋掉text這個拓展名),再新建一個文件,其名為:ModStringTableEn.xml(注意同上)。
ModAddon.xml是模組的基礎文件,代碼內容可以參照下列模板:
<Database> <GameDBAddon ID="ADDON_MOD_這段中文替換為你的模組的英文名,全大寫,空格用_代替"> <Author>這裡填作者</Author> </GameDBAddon> </Database>GameDBAddon的值是你以後對該項進行翻譯和其他操作的標識,不會展示給用戶,僅需規范命名,可盡量簡短,翻譯文案文件是給玩家看的。
ModStringTableEn.xml是模組基礎文件的翻譯文件,代碼內容可參照下列模板:
<Database> <GameDBStringTable ID="ADDON_MOD_這裡填模組名,要求和上一個一樣"> <LanguageCode>en</LanguageCode> <LanguageNameLocalized>English</LanguageNameLocalized> <Contributors> <Name>這裡填作者,可以通過複製本行在上下兩個標簽之內以達到增加作者數的目的。</Name> </Contributors> <LocalizedStrings> <GameDBLocalizedString> <LocID>這裡填剛才GameDBAddon的ID值</LocID> <Text>這裡填給用戶看的模組的正式名稱</Text> </GameDBLocalizedString> </LocalizedStrings> </GameDBStringTable> </Database>其中「LanguageCode」是語言代碼,而「LanguageNameLocalized」是游戲內語言在該語言內的表示,比如中文的語言代碼是「zh-Hans」而「LanguageNameLocalized」則是「簡體中文」。在模組基本文件的文案中,禁止使用多語言翻譯文案,即建立多個針對同一個文件的不同語言的翻譯文案,因此統一使用英文作為語言代碼,如反之,則將文件名中的「En」替換為「ZhHans」或什麼其他的語言代碼的首字母大寫版本,將代碼中的上述兩個參數替換即可。

之後,我們就可以嘗試運行游戲,查看是否報錯,是否顯示!LOC!加上給開發者看的由你設定的內部標識(出錯),是否在左下角成功出現在「text」標簽里的正式名稱。
像是上圖這樣,出現自己設置的模組正式名稱和作者名
XML語法檢查
出錯了也不養驚慌失措,可以通過進入XML檢驗器(具體見初始的需求列表)來檢查,在寫大型的文件時(如接下來遇到的科室和診斷文件),運行前最後也進行這樣的檢查。
向我們報錯的XML驗證器
總結
在第零篇中,我們學習了有關基礎知識,建立了基本文件,對《醫院計劃》游戲的科室模組有了一個基本的認識。下一節,我將著重闡述科室文件及其翻譯文案的建立,以及圖標資產的錄入。如果有問題,請盡管在評論區中討論。
我是Leo,冷門游戲的冷門模組作者,我們下期見。