本次教程将开始尝试阅读一些有关projectile的JSON文件并通过搜索和查阅wiki来了解这些奇奇怪怪的属性都是什么意思。最后会以原版游戏中的一个物品为基础来创造一个新的物品!
这个方向是我随机挑的,之前我也不懂,一边摸索一边写了
首先打开items/throwables/ 这个目录显而易见,是收录可以扔的物品的。
这里解释下,item即以道具形式存在于背包或箱子栏位里的物品。比如你手拿着一块土,那么这个土的数据就在items/materials/之中,如果你把这个土放下去,变成方块,那么这个方块土就是tiles/materials/之中的土。同理,虽然物品名称相同但是显然以不同的形式存在的物品,受不同的游戏逻辑支配,其数据当然是不同的,因此,当我们制作一个物品的时候,经常需要去创建该物品多种形式下的数据,以支撑其完整的功能和玩法。
回到正题,items/throwable/里面,可以看到第一个就是beachball.png和beachball.thrownitem,png图片显然就是beachball的物品图标,而后的.thrownitem则是一个JSON文件,记录着这个物品的属性。使用编辑器打开之后就能看到如下的内容。对格式不熟悉的话,请阅读学习菜鸟教程
1 | { |
接下来我们一起看看这些都是在说啥,如果遇到问题,就谷歌,到屎大棒wiki去看。大多数都有相应的解释,如果找不到,就猜,可以通过名字含义,对照其他相似物品的属性,实在不行还可以修改然后上游戏测试。
- itemname rarity price shortdescription description category image inventoryIcon顾名思义,我想玩过游戏的应该都清楚这些含义。
- ammoUsage顾名思义,使用后消耗的物品数量。
- edgeTrigger:顾名思义其实不是很好猜,尤其是我用投掷物并不多,于是搜了搜,发现wiki上也没有,但是意外搜到了mcbbs上的介绍,于是知道了这个属性是撞击后触发action的属性。而且这个帖子对投掷物JSON的介绍相当全面,下面的属性也是参考这个帖子的
- windupTime:根据上面的介绍,是触发action的延迟时间。
- cooldown:顾名思义,扔一次的冷却时间。
- projectileType:关联projectile文件夹的对应文件。
- projectileConfig:speed飞行速度,power威力。
- periodicActions:根据内容可以认为是周期触发的行为,time是周期,repeat是是否重复,action是行为类型,options是行为参数。这里的意思显然是使用时立即播放这个声音,且只播放一次。
- 不过我在wiki里找到了projectile文件下periodicActions的属性解释,尽管和thrownitem不是一类文件,但是我想同样的属性名大致应该是一个意思。总之应该没猜错啦
有关thrownitem的阅读理解到此结束,每个thrownitem内的属性可能有所不同,但必备的一些值是肯定有的,如果感兴趣可以多看几个。
到此其实就已经可以照猫画虎地在XSWL/items/throwables/下创建一个新的thrownitem文件和png文件,来作为新添加的投掷物道具。
不过别忘了投掷物道具在扔出后就是另一个东西了,尽管beachball在手上和扔出去的外观貌似没什么不同,但显然受不同的游戏逻辑支配,属于不同种类的游戏内容。这也是为何要在thrownitem文件里使用projectileType来指定这个道具对应的projectile文件。那么这个投掷物分类是在哪呢?搜索后可以发现在unpacked/projectiles/throwable/这个目录下。其中记录了每种投掷物以投出形式存在时的一些属性,为了给我们的mod设计新的投掷物,就显然也得设计投掷形式的属性吧,因此在动手制作之前,我们还需要研究一下这里面的东西。
里面有3个文件,分别是beachball.frames beachball.png beachball.projectile,显然.projectile就是投掷物属性的JSON了,而frames则是对png图片进行划分的JSON,这个一会再说。先打开beachball.projectile可以看到如下内容
1 | { |
理解这个JSON就容易多了,因为在wiki上搜到了projectile的解释。各位有不懂的可以自己去看啦)这里我就解释下这几个
- intangibleTime 顾名思义,应该是生成后的无物理作用的时间。
- actionOnReap的action类型:这里的item应当是生成物品,下面的name是生成什么物品,那么实际效果我们也可以看到,beachball撞到东西后,立即生成了可拾取的beachball item。
还有不懂的可以下面评论留言
那么至此我们对于一个投掷物应该有的文件基本上都知道啦,我们可以挑一个物品为基础去修改出一个新的道具了。在这里我准备试着做一个硫酸手雷,扔出后将产生硫酸伤害,会这么想是因为这个爆炸类型的文件排在第一个)
那么根据我们对同类物品的分析,应该知道创建一个新物品所需要的文件,我们首先创建item形式的手雷,可以以bomb作为基础去制作。那么我们复制items/throwables下的bomb两个文件到XSWL/items/throwables下,改名为acidBomb,后缀当然不变。然后打开acidBomb.thrownitem开始修改。
1 | { |
修改相当简单,没啥好说的。接下来先不管图片,我们继续制作投掷物形式的projectile文件。创建目录XSWL/projectiles/throwable/acidBomb然后把Bomb对应的三个文件复制进去然后改名。打开acidBomb.projectile开始修改。
1 | { |
主要修改了actiononreap,我让它产生一个acidexplosion。
还修改了power来使其不破坏地形。
ok!现在先不修改外观,我们看下游戏中是否实际有效,保存好后确保这东西都在mods/XSWL里并且目录正确,打开游戏新建人物跳过开头打开admin然后spawnitem acidBomb 100来看看。
于是发现这炸弹的确可以使用,效果就是碰到敌人或者到时间后产生一个acidexplosion,不过这个爆炸比我想得要小。。而且伤害很低,另外也没有附加acid状态。
所以很不实用,我设想的acidbomb应当是爆炸后会产生较大范围的实际伤害,并对范围内的敌人造成acid状态,这样才比较强力,我们会在下一个教程逐步添加这些效果。