Vault Hunters 2nd Edition Lite
Published on April 29, 2023
18 min READ
相遇 Intro
最开始看到宝藏猎人(Vault Hunters)是在B站UP主籽岷的宝藏猎人多人生存系列,主要是被这个整合包的RPG元素和剧情玩法设定所吸引,加上我一直没有完整地接触过一个具有如此宏大世界观的整合包,所以也算是我整合包旅途的第一站。在之后我关注的BadCen和其他MC UP主也共同开坑了宝藏猎人直播档一周目和直播档三周目,我也算是逐渐了解、熟悉整个整合包的内容以及玩法,在当时没有好的设备的情况下1,萌生了魔改整合包,即删除附加模组的内容,仅保留宝藏猎人的核心玩法的想法。
概览 Overview
该项目于2022年4月起,经过一系列的努力的尝试,最终于2022年8月发布beta版本,最后随着宝藏猎人第三部的发布而终止开发。
| 时间 | 主要更新 |
|---|---|
| 15 Apr,2022 | 删除所有模组研究 |
| 20 Apr,2022 | 修复Jigsaw引起的编译错误 |
| 22 Apr,2022 | 使知识之星添加技能点数 |
| 25 Apr,2022 | 移除nbt中的模组方块 |
| 21 Jun,2022 | 添加技能说明 |
| 23 Jun,2022 | 修复BREAK_ARMOR_CHANCE引起的崩溃 |
| 25 Jun,2022 | 修复InventoryAccessor引起的崩溃 |
| 26 Jun,2022 | 修复greyscale vert |
| 5 Jul,2022 | 更新核心模组内容至1.13.4 |
| 30 Jul,2022 | 删除FinalVaultAllowParty规则,因无法正常Mixin |
| 14 Aug,2022 | 修复宝库宝箱材质,添加高级贩卖机合成配方 |
| 20 Aug,2022 | 修复Twerker天赋 |
| 23 Aug,2022 | 修复宝库装备池初始化引起的崩溃 |
| 28 Aug,2022 | 修复宝库地形生成错误 |
主要特色 Feature
宝藏猎人轻量版本旨在为玩家提供基于原版体验的宝藏猎人内容,能让玩家基于极小的成本和设备游玩到丰富的模组内容。同时轻量版也支持玩家按照自己的喜好配置模组,例如娱乐玩家可以添加更超模的模组来完成宝库内容,热衷于挑战的玩家可以添加更高难度的模组等等。
没有模组解锁限制 No Researches
宝藏猎人官方版本存在模组研究组2,只有通过拿到知识之星获得知识点数才能解锁相应模组,从而提升游戏体验。而轻量版本移除了所有添加实质内容的模组限制,从而让玩家能直接体验到自行添加的模组的内容。这也为缩小游戏成本提供了很大帮助,一些装饰类模组对于一些技术玩家来说并不必要,而大型模组(如机械动力和应用能源2等)通常玩家只会选择一个,此时只添加其中一个模组的内容就能很好地优化游戏体验。
基于原版物品的战利品和装饰 Average Loots and Decorations
随着模组内容的移除,宝库的战利品和宝库内地形的设计都需要向原版看齐。由于考虑到只添加轻量版本模组的玩家,所有相关的物品和方块都被替换为原版物品和方块。同时有兴趣的用户也可以自定义战利品,获得更个性化的体验。
没有Witch Skull No Witch Skull
这是一个历史遗留问题,由于该实体在世界生成时会造成不知名的运行时错误,在多次调试无果后决定删除该实体,好在对于宝库内的体验影响不大。
开发历程 The Story
环境配置 Setup
整个宝藏猎人的几个版本都是基于Forge的,而当时我的模组开发经验只有一些Fabric的,并且并不太了解当时1.16.5版本的开发模式。一开始我寄希望于模组开发团队能给出一些帮助,结果其在Curseforge上留下的仓库地址是之前第一版的,内容已经很久不更新了,只留有Issues页面可以用。而在Issues页面里我也找到了很多曾经志同道合的开发者,想为宝藏猎人核心模组开发贡献代码,结果收到的都是“当前项目不可能开源”的回复3。在官方Fandom Wiki上也有人提出类似的需求,被开发团队否决4。于是我只能自行搭建开发环境,同时加了很多Forge开发的群聊,找了很多相关的文档,终于先将环境确定下来。
反编译 Decompilation
由于核心模组的闭源,我只能寄希望于发布的jar文件能够给予我足够的源代码信息支持。好在反编译jar不算特别偏门的需求,因为存在很多mod由于长期不维护导致源码丢失,而不得不采用反编译重新更新的情况。在尝试了很多反编译工具之后,我选择了procyon作为源码的反编译器。而附带的配置文件等资源则直接使用Java Decompiler会更方便一些。
反混淆 Deobfuscation
mod发布的时候会对源文件进行混淆,所有的变量名、类名和方法名等等都会被混淆,而Minecraft的模组发布文件反编译后,只有原版的名称被混淆,于是需要找到原版的混淆表就能进行反混淆。在兜兜转转了解了MCP等一系列工作后,才发觉目前的1.16.5的版本已经采用了官方的映射文件,而在下载官方版本时就可以得到文件,故最后的反混淆很简单,但得到这张表则可以说是“踏破铁鞋无觅处,得来全不费功夫”。
源码改动 Source Modification
源码的改动相对比较简单,在经过了漫长的反编译和反混淆的尝试之后,已经可以得到较好的不会导致大量编译错误的源码了。模组源码结构也比较清晰,每次看源码都佩服官方开发组的码力,这些代码本身就是一个宏大的世界观5,改起来也不太费力。
配置文件改动 Config Modification
配置文件才是魔改整合包的大头,因为几乎所有的游戏设置(难度、战利品、装备属性、爆率等)都是通过配置json文件来实现的。也就是说,如果要完全原版化,就必须对其作大量修改。一开始针对几个配置我还采用了代码硬编码的方式,到后来才理解json配置的方便之处,故将config也纳入项目中来。战利品的修改最费时间,因为对于每一个宝库等级阶段,战利品的质量都应该得到适当的调整。
NBT修改 NBT Modification
其实当时整个模组已经大部分内容可以运行了,最重要的宝库逻辑却一直不能保证运行。在修改完配置文件之后,仍然会提示有其他模组的方块不能被识别,一一排除之后锁定了最不愿修改的nbt文件。这才发现宝库生成所使用的模板里,还存在着大量的模组方块,而要将这些方块全部替换为原版方块并不容易。好在python里有读入Minecraft nbt的库,对每种出现模组方块的可能都进行枚举后,得到了最终修改完成的数据。
地形生成 Jigsaw Modification
但是就当我以为大功告成时,宝库内的地形生成成了最大的障碍。通过观察发现,宝库世界只能生成以开始房间为中心的17×17区块的范围,再向外的范围将全部被基岩覆盖6。我于是找了很多国内的Minecraft开发达人,但都没有得到明确回复;接着我也去Forge开发的Discord提问,得到的答案是这个范围就是模组的能力上限,再大就要自己重写生成器。但是恰好核心模组就是重写了地形生成器,否则调试模式下不会没有问题。最后一位开发者给出了一种解决方案:由于是以初始区块为中心的区域,但初始区块的数量没有限制,所以可以每隔16个区块就放置一个初始生成区块,保证可生成范围覆盖整个宝库结构。尝试其他方案无果后,我最终接受了这种暴力破解的方式,终于将这个困扰已久的问题解决了。
整合发布 Beta Release
最后将各种修改整合导出后,就是当前的Beta版本。我自己有个存档,该存档也伴随着开发、调试、修复的历程,中间也经历了很多次回档。该存档也在哔哩哔哩直播过,名为宝藏猎人懒狗版,因为我加了很多超模的模组,让宝库更加简单。这也是为了我推进游戏进度而能够确保大部分游戏内容正确可玩。
总结与展望 Conclusion
在当时项目开发过程中,我当时面临着大三下学期的学业科研、七月保研夏令营和八月实习的接二连三的压力,但是我一直没有放弃将该开发做到“可以玩”的程度。做这种事情总是让我充满动力,一次崩溃的解决和功能的修改都会使我非常兴奋。在忙碌的过程中我也不断会想起中学时期和20年夏天那些奔波的时光,仿佛就在那些忘我的努力中才能体会到真正的生活。
在开发的过程中我也逐渐理解了开发者的意图,像这样大规模的整合包,自然不希望玩家有太多的自定义环节,因为每个模组都会在宝库之旅中扮演一定的角色。后来我也及时跟进1.18.2的第三部宝藏猎人,并且也是真正地体验全部的模组内容,同时也在哔哩哔哩上不定时直播。