vampiremod in slay the spire
beef potato Lv3

暑假期间,我写了一个杀戮尖塔的游戏mod–吸血鬼mod,并且上传到steam workshop. 目前已经到达自己的技术极限,继续更新绝对需要更多反馈和技术支持。

因此记录一下自己mod制作的过程。

Github项目地址 :

https://github.com/beef-potato/vampiremod

基本制作

最开始是参考 Basicmod, 对着其详细的wiki进行了IntelliJ的部署,使用JD-GUI对杀戮尖塔的游戏文件进行解包,观察理想卡牌实现的具体代码,并且参照其做出自己的修改。

写杀戮尖塔的mod基本上需要使用前人留下来的两个基本mod, Stslib, modTheSpire.

在basicmod的基础上,调用原版游戏和stslib提供的接口,可以对游戏内容进行相当的替换。因此一开始我参考铁甲战士,做了一个只有12张卡牌的demo. 只有默认卡图,人物,选择界面都是basicmod的默认图像。

由于暑假时间上的优势,我回到学校进行进一步的内容扩增。目标的卡牌稀有度和类型的分布参考Slay the Spire WIKI, 以及后来找到的一份EXCEL表格制作。

虽然对JAVA只有浅显的接触,但是BasicMod可以让作者专注于卡牌的功能方面,而不是如何接入游戏。我保持一天10-15张的速度,75张卡牌很快做好了。然后是寻找和绘制卡图,power图标,我使用的工具是Photopea, Pixilart, iloveimg这些用于拼接,绘制,裁剪图标。卡面的裁剪使用了StSModdingToolCardImagesCreator自动化裁剪。

自己的电脑配置带不动PS,但是以上的工具完全能胜任这些基本的图片编辑工作。

角色一开始参考部分mod作者,使用的是静态的图片。

卡面描述

一开始只有中文,上传到创意工坊一段时间之后,有一个玩家用英文反馈没有卡牌描述。因此自己在对内容补充一段时间后,加上了eng的卡面/技能/角色/事件描述。

一开始以为会很花时间,但是使用查找和替换,加上游戏本身自带很多共通的关键词,因此一个下午+晚上就完成了mod内容的翻译。

后续更新mod都需要准备eng版本。

上传

等到自己游玩不会崩溃,我就上传了自己的mod. 一开始找不到workshop的上传方法,创意工坊没有对应的上传图形界面可以用,搜索 community 的work shop guide,了解到必须使用游戏本体根目录的mod-uploader.jar 文件,通过命令行上传。

随后准备封面,添加描述,关键词。然后上传。

为了让更多人玩到这个mod, 我还到98发了一个主题帖。没有到百度贴吧和自己的朋友圈发贴,现在考虑,或许发帖能让更多人看到。

更新

一开始的卡牌设计是参考铁甲战士的放血流派,所以大量使用了原版的卡牌效果,导致玩法相当单一。但是我自己写mod, 可以参考的多是其他人的mod, 以及原版游戏。测试玩家并不容易找,我加入的, 即使上传到workshop, 回复量也相当有限。因为mod制作过程中没有太多的考虑。随后一段时间自己玩自己的mod, 同时参考平衡性比较好的mod,比如packmaster, marisa等进行借鉴, 然后调整卡牌的数值和效果,慢慢更新。

更新的步调基本上是一天一更,到目前为止,已经到了v0.1.24.
这个版本多少算是有了一些自己的东西,而且数值起码多少归于正常。

感悟

mod开发,真的非常需要反馈,只有获得足够的反馈才能进行功能,内容的迭代。而且不断上涨的订阅数量也非常让人舒畅,虽然不时会觉得自己的mod非常差劲,尤其是和知名的mod, 比如packmaster, marisa, downfall, shadowverse, musedashreskin 等相比,说自己是粗制滥造或许也不为过。

但是如果不能接受一开始的不完美和粗制滥造,就不可能实现后续的不断更新,从而让mod变得精致起来。

我自己的java基础并没有多好,很多复杂的继承关系必须看很长时间才能弄懂,而且调试起来很多时候也一头雾水。v0.1.20开始我有了添加多个皮肤的想法,看downfall的源代码,尝试使用其中的reskin部分,但是spirepatch的语法真是晦涩,而且downfall解包之后的代码看起来并不都一致,因为各个角色是分步开发的,而且并非所有的角色都有reskin部分,有的角色甚至有动态的portraits.

再看musedash, 其主界面和人物选择动画简直让我感动–流畅,华丽,让人沉浸其中,简直就像是在玩 MuseDash 一样。而其底层代码和我使用的basemod结构太过不同,所以我放弃了这一想法。

对于mod character 开发的遗憾,slay the spire discord 上有一个fitfall list,是packmaster 的开发者总结的,非常有指导意义,后续附上翻译。

现在离开学不远,mod开发也差不多结束了,有趣。

Character Design Pitfallls – TL;DRs

卡组分布

普通的角色有75张卡,包括初始的打防,两张初始牌,约18普通,35罕见,18稀有。最好和这样的分布保持一致。

元成长 Meta-Scaling

在添加可以提供永久增益(最大生命,卡牌升级)的卡牌前仔细思考,这会导致游戏的有趣和平衡问题。(比如玩家可能会延长战斗;或者增益过于有效或易得)

受伤减免

避免设计过于强大的防御卡牌,尖塔里防御是非常强大的能力,过强的防御使战斗变得琐碎。尤其注意避免可以完全中和伤害(击晕,无实体,跳过回合)以及可以复用的回复手段。

初始遗物

不要预设你的角色总是有自己的初始遗物,它可能会在一开始换掉这个遗物。把特殊机制集中在角色和卡牌上而不是遗物上。

复杂性

高度复杂的mod会让玩家角色玩这个mod是件苦差事。避免6行以上的卡面描述,和卡牌一样大的提示盒子,或者让盒子(tooltip)多到顶到屏幕上缘。

第二资源

使用独立于能量的资源是常见的设计思路,同时使用和生成资源的卡牌通常很糟因为初期两种资源都不够。

过于特殊化

对一种机制投入过多卡牌会让角色的玩法变得单一,有多种机制/流派的角色会更加有意思。

协同/配合

流派之间的配合通常可以有明显的描述或者暗示,混合使用两者可以起到好的效果。设计初期通常会有大量明示。

戏法/cantrips

无损0费抽1(不消耗或者有打出条件)会让无限变得非常简单,同时使得游戏变慢。避免这种设计。

打防

初始打防最好和原版一样设置为6(5),对此进行调整会极大地破坏游戏平衡。

高费牌

依赖调高费用来平衡强力牌是不好的做法,因为有很多打出高费牌的方法(蛇眼,干手)

概率生效

按照一定概率生效的卡牌在尖塔环境里非常糟糕,因为尖塔的基本逻辑是针对明确的意图,给玩家提供充足的信息进行游戏。

对战斗进展小影响卡牌

避免有太多不会立刻对战斗产生影响的卡牌,因为这会让打出卡牌变得似乎没有什么事情发生。