Featured image of post 机制,与机制的组合

机制,与机制的组合

也许,比机制更重要的,是机制间的可组合性与正交性

好几 次阅读

玩着玩着突然觉得有一种违和感,于是打算写点东西

是什么呢,关于属性系统,我突然觉得这个系统好像并不是我最初设想的样子

脆弱性,我不知道为什么想到了这个词,这个系统在某种意义上,是脆弱的,整个 PVE 战斗系统都是铁板一块,牵一发而动全身那种

所以我在想,回顾了一下自己在玩的时候的感受,有一个 Shulker Shell 附魔,功能是玩家静止不动时免疫远程伤害,由于原数据包的实现方式不够好,我改成了用插件实现,数据包占位,这个附魔疑似比我想象的要强大得多,导致我完全没有动力去研究新的属性系统

而且我自己写的是,要用神龟药水,来源就是探索或者养殖,两者其实都挺折磨的,要么未来想办法把海龟的养殖方式优化一下,海龟鳞甲的获取途径更简单一点

但这些都不是让我满意的方案,我觉得这不是解决问题的根本手段,尽管海龟的养殖确实该优化下

还是我刚刚说的问题,脆弱性

117238769_p0.webp


我不是要横向对比,这没有意思,但毕竟再怎么说,RIA 的理念是我可以借鉴的,甚至可以说是一个最终的方向,RIA 没有什么花里胡哨的东西,就是纯原版,有些地方甚至做得很粗糙,都是那种我一看就知道可以怎么优化的,但是这完全不影响它成为了一个成功的 Minecraft 社群,核心的玩法上是完全原版的,而我呢,核心的玩法都是我自己写的,世界也有借用了其他人的工作成果,尽管写得还不错,但终归有一种脆弱性,数据包和插件,它们虽然是相互拼凑起来,共同组成了玩法,但是这个连接是脆弱的,而且没有灵魂,拼凑得很生硬,不一致,不自洽,可以说

所以我在想,是不是我一直以来的潜在想法,有问题,我总是希望这个世界应该是丰富的,有生命的,而不是单调呆板的,所以我加了很多可以改善这个问题的数据包,后来发现这有很大的性能问题,于是又在不断尝试更换,迭代数据包,直到现在,数据包已经成为了服务器周目迭代的一个最大问题,也是日常维护的最大问题,哪个包的战利品出了问题,哪个附魔有问题,很难排查,也很难解决

也不是说之前的路都走错了,我和 RIA 从一开始解决的问题其实就不是同一个,聚焦的命题也不是同一个,像我之前总是说的,服务器只是个人宇宙的一部分,但这个一部分,到底是怎样的一部分,我可能自己都还没想清楚,也许是最重要的一部分,也可以是无足轻重的一部分,我聚焦的命题是人与世界,人与自我,而非人与人,这其实天生决定了我的服务器是不会有很多的人的,更多的时候都是一个人,这个服务器从这里看的话,是不可能火成 RIA 那样的,本身,向内看就是比向外看要困难得多的,RIA 选择的不是去挑战受众的固有观念和思想,但我不想这么做

所以我改,改了很多东西,那些“我觉得 xxx 不应该是这样”的部分,我都改掉了,可以说到目前这个服务器已经很难再称得上原版服了,除了还不需要特定客户端 mod 以外,别的都不太符合原版的特征了,而且就连这一点我也在考虑打破

我知道这并不是我走错了,只是我和 RIA 走的方向不一样而已,没有对错之分,但我还是会想,是不是搞错了什么

探索一直以来是我想强调的一个关键词,和原版相比,我做的很多改动都更加注重探索,从删除矿石生成,到更多的结构和附魔,这些都需要探索

我可以再举两个例子,是我非常近期才想到的,也实在游玩了一段时间 RIA 之后想到的内容,可以说是受了 RIA 的启发,第一个是让玩家以某种方式自由创建,编辑展示实体,第二个是用插件接管进度系统,同时添加一些进度,不代表原版内容,而只代表服务器内容

还有两个是,对话框 DSL 以及路由系统,这个是在想到那个展示实体编辑插件之后先做出来的,作为那个插件的基础,而且现在想了想,其实还可以作为其他很多东西的基础,测试了一下写得其实还不错的

另一个是模仿了类似于机械动力航空学里面的概念,让快乐恶魂可以拥有箱子船的载物功能,随后又扩展到了可以存放任意方块,并且能打开界面,而且放入东西之后上面能显示箱子模型,为此研究了一整天如何实现,最终发现原版的资源包是实现不了的,必须借助服务端 patch,在这之前还尝试研究了下 EMF/ETF 的实体模型,因为我那时候才发现原来原版是无法自定义实体模型的,要想自定义实体模型必须得用这两个

其实也是因为需求没有想清楚,我一开始是想着让快乐恶魂头顶有箱子的时候显示箱子,然后又扩展到头顶有任意方块时都显示该方块模型,原版里面最接近这个的就是生物的头盔,但快乐恶魂不是类人实体,本身不会渲染头顶的物品,于是写了个,哦对,之前说 patch 是失败的尝试,正确的做法应该是加了客户端 mod,所以让 claude 写了个客户端 mod,来给快乐恶魂加上了这一层渲染模型,但受限于原版的缩放问题,长宽正常,高度会变成两倍

扯远了,说回来,探索这个词是我在设计服务器时想体现的东西,我也不知道是因为这一点影响了我的玩家身份,我特别喜欢跑图,看到各种有意思的结构和奇观会让我很开心,还是说我本来就喜欢跑图和探索,从而影响了我的服主身份,导致我在设计服务器时着重探索

这已经不重要了,就拿删除矿物生成这一点来说,它带来的影响是,世界生成的速度理论上变快了,因为不再需要放置这些地物,矿透也没有必要禁止了,矿石也变得更加稀缺了,探索获取的矿物现在不再是可选手段而是必要方式(尽管由于更多结构数据包的加入,矿石的获取难度实际上并没有改变多少),还为探索附加了一种很高价值的物品:原矿,这一个举动带来的影响是方方面面的,导致了我不能轻易撤销这个举措,否则别的一大串都要跟着改

一致性方面,岛内外的矿石生成情况是我在下周目一定要想办法解决的,不管是自己做中心岛,利用别人制作的中心岛然后批量替换方块,都要让矿石从源头上不生成

还有一个方面是“提供机制而非玩法”,这两个词意思上很像,但实际上有区别,玩法在某种程度上是在限制可能性,机制则相反,是在扩大可能性,这与 mc 本身的底色是符合的:高自由度

但现在我开始怀疑这句话,玩法与机制相比确实不重要,但机制就一定重要了吗

我现在觉得,可能机制本身也不是最重要的,重要的是机制之间的可组合性,正交性

我还想举一个例子,关于物品的耐久变化的系统,姑且应该算是一个系统

增加物品最大耐久的方式有,在熔炼池内烧炼同类物品,然后在铁砧上打到同类装备,提供的最大耐久取决于烧炼装备的各项品质,但这其实不算非常透明,因为除了依赖于装备,能提供的耐久上限数值,还取决于要打上的装备,同一件装备打上相同品质的精髓,吸收率是越来越低的,但这个递减曲线可能我自己都没有详细测试过,数值设计也没怎么经过深思熟虑

减少最大耐久的方式有,使用经验修补,改变装备的攻防类型,算是有了一个动态的平衡,但如果没有类型系统,最大耐久的减少方式就只剩下经验修补,你说它是吧,经验修补在没有铁砧惩罚的情况下几乎是可以不用考虑的,更何况它的代价是坚守装备的最大耐久,这在某种意义上就是在使得装备不可逆地衰亡,虽然这确实是我想要的,但前提是,所有人都还会用经验修补,而显示是,它几乎已经不被使用了,一方面难以获取,开启了交易平衡性调整之后,它只能在沼泽图书管理员那里有概率获得,以及一些战利品中,虽然说了高等级的经验修补减少的最大耐久是可以被接受的,但玩家总是趋利避害,可以理解,这使得经验修补反而没有人用了,因为反正可以无限修补,经验修补也没有必要存在了

140103525_p0.webp


所以我还是得开启铁砧惩罚,但可以把上限去掉,但这又会影响附魔

所以说了一大堆,我发现整个系统存在的问题就是耦合太高,一致性呢,好像没有特别让我感觉不一致的部分,但这也只是我自己的感觉,我不清楚玩家是怎么想的

侧重于探索也不是好事,我原本希望,让每一件原版物品都有其价值,但好像做过头了,给了这些物品太好的用途,以至于我觉得在外出探索时,背包管理是一件难事,因为我自己设计了这些系统,我知道哪些东西有用,所以我会尽可能留下它们,结果背包一下子就满了

哦对了,一致性让我想到了一个东西:超限附魔,这个东西是目前让我觉得最不一致的部分,附魔总是围绕那几个方块,铁砧,附魔台,磨石进行,物品也是青金石,但是到了这里突然变得很奇怪,跑到地底,用一大堆珍惜材料给一个物品打上一个高级附魔或者不兼容附魔

但是你要说我有没有更好的方案,好像我也不太能想到,当初设计的时候完全是功利性的,考虑到后期玩家资源溢出,得有一个办法来消耗,于是产生了这个玩法

然后我和 ds 讨论了一下,感觉是要改一改,但是没有想出一个很好的方案,只是说确定了新系统的形式会很接近原版的锻造和铁砧

说回原本的内容,脆弱性,我现在觉得它其实是强耦合的另一个说法

这个说法其实是来自于 claude 给的

Pasted image 20260701211529.webp

机制本身不是不重要,而是它的重要性应该按"它对公共状态接口的贡献"来评估,而不是按"它自己提供了多少功能"来评估。一个机制如果引入了只有自己能理解的私有状态,即使它本身很强大,也是在给系统增加耦合、降低整体自由度;一个机制如果只操作系统已有的公共接口,即使它自己很单薄,也是在放大整个系统的组合空间。

我还想到的一点是,游戏设计里这一点其实和代码一样的,接口可复用了,解耦了,规范了,就提供了强大的自由组合能力,产生更高的自由度,但游戏设计里还有一层,就是意图上的,它算是同一种系统在两种表层的不同表现,在代码里,两个接口只要共享同一个类型/契约就够了,但在游戏设计里面,除了这一点,即使两个系统在代码上完全不相干,数值上完全正交,但玩家的意图可能会把它们联想,解读到一起,软件代码的正确性是可以客观判定,严格测试出来的,但游戏机制的正确性是模糊的,因人而异的

所以真正决定组合自由度的,不是机制数量的多少,而是:

机制之间是否共享一个足够薄、足够通用的状态接口,使得一个机制产生的输出恰好是另一个机制能够消费的输入。

还没写完,但脑子有点乱,明天再说