【教程】如何在《医院计划》中创作自己的科室模组之第零篇

有些小伙伴熟悉我,即《医院计划》“精神卫生模组(the Department of Psychiatry)”的作者。而这个系列的专栏将从XML语言到医学参考资料,一步步指导你严谨而又认真的创作属于自己的科室模组。让我们开始吧。
零、基础知识
模组定义
在《医院计划》这款硬核的医疗模拟游戏中,已经包含了急重内外心神,DLC内容创伤科、传染科,医技、管理科室检验科、影像科、行政部。但是显然,者对于追求极致模拟的玩家来说,是远远不够的。而科室模组,无非是对游戏科室内容的拓展,是在建立科室、技能后,对于症状、检查、诊断、治疗手段、诊断的增扩,再串联的一种过程。简单来说,我有了症状,有了检查,有了诊断,有了治疗,就有了诊断。上述过程在游戏的里,是需要通过XML语言进行“编程”来完成的,但无需惊慌,这种方式并不困难。
所需材料
想要创作科室模组模组需要以下材料,我会进行详细的说明。


使用了代码编辑器来查看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检验器(具体见初始的需求列表)来检查,在写大型的文件时(如接下来遇到的科室和诊断文件),运行前最后也进行这样的检查。

总结
在第零篇中,我们学习了有关基础知识,建立了基本文件,对《医院计划》游戏的科室模组有了一个基本的认识。下一节,我将着重阐述科室文件及其翻译文案的建立,以及图标资产的录入。如果有问题,请尽管在评论区中讨论。
我是Leo,冷门游戏的冷门模组作者,我们下期见。

