所谓mod就是修改。
游戏的运行需要一系列资源文件,这些文件在游戏打开时会被加载。而mod提供了一些同类的资源文件。一旦用户开启mod,就会将mod中的资源替换掉默认加载的同类资源文件,从而实现对游戏的修改。
游戏允许同时加载多个mod。然而若同时加载的多个mod修改了同样的资源文件或者都带有脚本文件,那么这些mod就会冲突,此时mod就会失效。
具体的判定依据为:
为了避免游戏崩溃以及存档损坏,每当游戏有更新时,所有mod都会被禁用,并且使用了mod的存档会从头开始。
游戏使用了pak作为文件压缩格式。pak本质上与rar/zip是相同的,都是压缩文件,只是pak主要针对游戏的设计和使用而开发的。打开游戏的根目录,可以看到一个res.pak文件,大小有557M,该文件中包含了游戏所用到的所有资源文件。
因此,若要对游戏的数据进行修改,需要对pak文件进行解压,找到需要修改的文件并修改后,将这些修改的资源文件打包为mod。
res.pak解压后得到的所有文件中主要关注2种文件:
官方在游戏的根目录下放置了一个ModTools文件夹。里面包含了制作Mod所需的文档ModsDoc.pdf以及各种工具。
ModTools文件夹下一共提供了6个工具:
CastleDB是文件夹,其他5个都是exe文件。这5个exe只有RoomEditor.exe和ScriptTool.exe是可直接运行的,其他都是命令行工具,需要打开cmd命令行,cd到该目录下,然后调用命令来使用。下文将不再强调这一点,直接运行对应命令。
重点,这些工具所运行命令的路径中不要包含空格在内的特殊字符。因此建议直接在磁盘根目录下新建一个文件夹。这里创建了一个D:\Test文件夹,下文命令中将都使用该文件夹。
PAKTool.exe主要用于对res.pak文件进行解压,并将修改后的资源文件打包为mod。
一个打包好的mod文件,包含一些res.pak中修改的文件,以及放在./Script/Struct/
文件夹下的脚本。
注意整个过程中游戏本体的res.pak并没有被修改。
在D:\Test文件夹下创建一个res文件夹用于存放解压后的res.pak文件。
运行命令:
PAKTool.exe -Expand -outdir D:\Test\res -refpak ..\res.pak
其中:
..\
代表上一级目录,故而..\res.pak
代表上一级目录下的res.pak文件。运行命令后等待解压完成,即可在res文件夹下看到所有解压出的资源文件。
将打包后的pak文件直接放在D:\Test文件夹下。
运行命令:
PAKTool.exe -Collapse -indir D:\Test\res -outpak D:\Test\res.pak
等待执行完成,即会在D:\Test文件夹下生成一个res.pak文件。注意-outpak
指定的路径中包含生成的文件名。
然而该命令的作用是将整个文件夹打包成一个pak文件。对于mod制作,往往并不会使用该命令。
在D:\Test文件夹下创建一个diff文件夹用于存放打包后的差异pak文件。
运行命令:
PAKTool.exe -CreateDiffPak -refpak ..\res.pak -indir D:\Test\res -outPak D:\Test\diff\resDiff.pak
等待执行完成,即会在diff文件夹下生成一个resDiff.pak文件。由于该pak仅包含差异文件,因此其大小视改动内容的不同而不同。
若是没有改动,则不会生成任何文件,并会弹出一个错误提示。正确做法是,将所有改动的文件都复制到res文件夹下替换,然后进行差异打包。
AtlasTool.exe主要用于将atlas图集文件解压为一个文件夹,以及将一个包含png的文件夹压缩为一个atlas文件。这样就可以对游戏中的贴图进行修改。
在D:\Test文件夹下创建一个atlas文件夹用于存放解压后的图集文件。
例如,将res\atlas\achievements.atlas文件进行解压,运行命令:
AtlasTool -Expand -outdir D:\Test\atlas -atlas D:\Test\res\atlas\achievements.atlas
完成后,即会在atlas文件夹下生成所有成就的png文件。
也可以使用-ExpandAll
命令来将文件夹下所有的atlas文件进行解压,具体可以参考ModsDoc.pdf。
现在要将D:\Test\atlas文件夹下的所有png文件进行打包,运行命令:
AtlasTool -Collapse -indir D:\Test\atlas -atlas D:\Test\achievements.atlas
完成后,即会在D:\Test文件夹下生成achievements.atlas文件。同时还会生成一个achievements.a.atlas文件和一个achievements.a_n.png文件。
也可以使用-CollapseAll
命令来将文件夹下所有的文件夹进行打包,具体可以参考ModsDoc.pdf。
CDBTool.exe用于解压/打包Data.cdb文件。解压后Data.cdb中的各项设置会单独保存为json并存放于各类文件夹中,结构更清晰。但这样的方式依然是直接修改文件,,远不如CastleDB直观和保险。通常来说,对Data.cdb文件的修改往往推荐使用CastleDB,不推荐使用CDBTool.exe。
Data.cdb文件是一个很大的json(11.4M),因此可以直接用notepad++这样的记事本应用直接打开。若是简单修改且对json的结构熟悉,采用这样的方式更加高效。
在D:\Test文件夹下创建一个cdb文件夹用于存放解压后的data.cdb文件。
运行命令:
CDBTool.exe -Expand -outdir D:\Test\cdb -refcdb D:\Test\res\data.cdb
其中:
运行命令后等待解压完成,即可在D:\Test\cdb文件夹下看到所有解压出的资源文件。
完整打包打包与PAKTool.exe相同,用法和参数类似。
CDBTool.exe -Collapse -indir D:\Test\cdb -outcdb D:\Test\data.cdb
而差异对比则与PAKTool.exe不同,差异对比仅仅会将修改的文件复制到目标文件夹。
CDBTool.exe -CreateDiffCdb -refcdb D:\Test\res\data.cdb -indir D:\Test\cdb -outdir D:\Test\diff
这样可以方便开发者明确自己修改了哪些文件。
确定修改无误后,需要对cdb文件夹进行完整打包,从而生成一个新的cdb文件。
ScriptTool.exe用于创建脚本。
ScriptTool.exe可双击直接运行。
运行后,该工具右侧是脚本内容区,左侧有4个按钮:
function buildMobRoster(_mobList)
的内容有所不同,是根据所选择的怪物列表生成的。创建一个空的main.hx文件,将右侧脚本内容区的内容复制粘贴该文件中即可。
ScriptTool.exe虽然可以双击直接运行,但ScriptTool.exe也接受命令行方式控制:
在D:\Test文件夹下创建一个script文件夹用于存放创建后的脚本文件。
运行命令:
ScriptTool.exe -commandline -newfile -outscript D:\Test\script\main.hx
运行命令后会在D:\Test\script文件夹下生成一个main.hx文件,其内容就是默认的脚本内容。
关于脚本文件可用的API,官方提供了详细的文档,打开ModTools\Scripts\TechnicalDocumentation\index.html 文件即可看到。
RoomEditor.exe用于data.cdb文件中房间地图的修改。仅仅可用于地图修改,无法修改data.cdb文件中除房间以外的其他内容。
这是一个可视化工具,直接双击运行,然后打开data.cdb文件即可。
详细用法可参考ModsDoc.pdf。
CastleDB用于编辑data.cdb文件。相比于RoomEditor.exe,CastleDB不仅可以编辑房间地图,还可以更改data.cdb文件中所有的设置项。
CastleDB文件夹下只有一个castle.js文件,这是个设置文件,无法直接使用。我们需要去官网下载对应的工具:
http://castledb.org/
下载后解压,得到一个castledb文件夹。将上面的castle.js文件复制进来,替换。然后选择菜单中的File→Open,打开data.cdb文件。打开后,下方会列出一排标签,对应不同的内容。
需要解释一点就是爆率。游戏采用的随机是生成前随机,而生成后一切都是固定的,包括怪物及其掉落的物品。这也是为什么可以输入种子来玩跟其他玩家一样的地图。故而,一个地图的怪会爆出什么物品是一开局就确定的。因此这个爆率并不是指玩家打死一个怪有多大几率会爆出指定物品,而是这个怪在生成时有多大概率会一定掉落该物品。
对于100%爆率,指的并非是每个该种类的怪都一定爆出该物品,而是指本地图该类型的怪一定有一个会掉落该物品。例如,第一个图被囚者牢房的绿僵尸会爆出血之刃图纸,其爆率为100%。这并不是说开局杀一个绿僵尸就一定会爆出血之刃图纸,而是在该图中一定有一个绿僵尸身上有血之刃图纸。至于这个绿僵尸在地图的哪个位置就不得而知了,挨着砍过去,总有一个是。
另外,若一种怪有多个100%爆率的物品,则会按物品的定义顺序依次爆出。且一个图的同一种怪只能爆出一个100%爆率物品。例如国王之手,会爆出6种物品,分别是震地冲击图纸和5种皮肤(国王之手装束/忠诚/刚直/信任/献身),这6种物品的爆率都是100%。于是杀一次国王之手就顺序爆一种物品出来,第1次杀一定是爆震地冲击图纸,第2次杀一定是爆国王之手装束,第6次杀一定是爆国王之手装束:献身。至于BOSS细胞,属于任务物品,与爆率物品是分开的。
最终生成的差异化res.pak文件就是我们的Mod。
加载一个Mod需要在创意工厂对Mod进行订阅。而这意味着一个Mod必须先上传到创意工坊,然后才能被订阅。现在希望我们先自己测试Mod后再上传到创意工坊,而要测试就必须先上传到创意工坊……
于是死亡细胞官方在创意工坊提供了一个Dummy Mod,只要订阅该Mod,然后将该Mod的res.pak文件替换为我们自己生成的差异化res.pak文件即可。这样当我们在游戏中使用Dummy Mod时,实际就是在使用我们自己的Mod。
Dummy Mod地址:
https://steamcommunity.com/sharedfiles/filedetails/?id=1405810340
订阅并下载后,打开steam根目录,找到Mod的安装目录:
steam\steamapps\workshop\content\588650\1405810340
在该目录下有1个文件夹和3个文件。
1个文件夹为Scripts,里面有一个Struct文件夹,其下带有一个默认的main.hx。该脚本文件对关卡进行了修改。若要测试脚本文件,则替换该main.hx即可。
3个文件为:
替换掉其中的res.pak即可。
上传Mod步骤为:
settings.json是配置文件,其内容为:
{
"category": "Gameplay",
"name": "A Test Mod",
"visibility": "Public"
}
其中:
Gameplay
/Cosmetic
/Test
。注意不可以设置为Language
。Public
/Friends
/Private
,分别代表:所有人可见/仅自己和朋友可见/仅自己可见。设Mod相关文件放在D:\Test\MyMod文件夹下。
打开cmd,定位到游戏的根目录文件夹,输入命令:
deadcells.exe -workshop
会弹出一个steam窗口,点OK。
弹出一个新的窗口,提示输入n
来创建一个新的工作室,或者输入q
退出。
在弹出的窗口中输入n
,会提示输入Mod的路径,也就是D:\Test\MyMod。
提示即将创建一个Mod,且Mod名称将不可修改。输入yes
确定,Mod即会进行上传。
雷盾是由观星台的守卫者掉落。现在要编写一个Mod,让第一幅地图的绿僵尸100%掉落雷盾。但该例子并非是获取雷盾图纸的最佳Mod方式,仅仅是为了展示如何修改怪物掉落以及100%爆率的概念。
依然是使用D:\Test文件夹。
使用PAKTool.exe解压res.pak:
PAKTool.exe -Expand -outdir D:\Test\res -refpak ..\res.pak
下载CastleDB工具并替换castle.js文件后,打开解压后的res.pak下的data.cdb文件。
选择标签mob:
可以看到第一行就是绿僵尸,name是Zombie。我们关注的是该行倒数第二列blueprints这个属性。
点击blueprints属性内容,下方会出现详细信息:
即绿僵尸掉落3个物品,分别为:双向弩弓塔、血之刃、波比装束。爆率分别为:Rare/Always/Rare。
选择标签blueprintDrop,可以看到各种爆率为:
也就是说,第一个图中的绿僵尸一定有一只会掉落血之刃。
现在要让绿僵尸掉落雷盾,那么我们首先要找到雷盾的id。选择标签item,在Shield分类下找到了雷盾:
可见其id为ThunderShield
。
然后回到mob标签,在绿僵尸掉落的详情列表中点右键,选择Insert,插入一条新数据。item这一栏双击后出现列表,选择ThunderShield
,rarity这一栏我们选择Always,即令其本图100%掉落。minDifficulty这一栏我们选择默认的0,即最低级难度就可以爆出。
但注意这里爆率为Always的有2个物品,一个是血之刃,一个是雷盾。前面已经解释过,这意味着在拿到血之刃之前,雷盾一定不会爆出,并且若本地图爆出了血之刃,则本地图也不会再爆出雷盾。
修改完成后进行打包,运行命令:
PAKTool.exe -CreateDiffPak -refpak ..\res.pak -indir D:\Test\res -outPak D:\Test\diff\res.pak
打包完成后,会在D:\Test\diff下生成一个res.pak。这个res.pak由于仅仅包含差异内容,因此非常小,只有6KB。
现在进行测试。打开steam,在死亡细胞的创意工坊下搜索Dummy Mod并订阅。订阅并下载后,打开steam根目录,找到Mod的安装目录:
steam\steamapps\workshop\content\588650\1405810340
将上面生成的差异化res.pak复制到这里,替换。由于不需要使用脚本,于是我们将Scripts文件夹删除。
打开游戏,重开一个空白存档开始游戏,选择Dummy Mod。我们先打第一个图,爆出了血之刃。然后去收藏家交图纸。交完图纸立马重新开始游戏,再次打第一个图,顺利爆出雷盾:
按前面的流程上传Mod即可。