雨世界moddingSlugbase:从魔改开始

下载模板mod

你可以从https://wwk.lanzoue.com/iVEzw2t0pasf下载这个模板mod

管理文件

在方便的地方新建一个文件夹,然后把模板Mod解压缩到这里

提示

建议把此后制作mod相关的所有资料和素材也整理到这个文件夹中,可以避免很多因为文件乱丢导致的麻烦

把模板mod的名字改成你自己的mod的名字,然后打开文件夹 里面应该是这样的

(如果你看不到文件的扩展名(比如.sln),则需要在上方的“查看”选项卡中勾选“显示文件扩展名”)

你暂时不需要关注其他的东西,要修改的内容在mod文件夹中

modinfo.json

这个文件定义的是mod的元数据,基本上就是在remix菜单里面显示的内容,你可以直接用记事本打开它(或者说 其实你可以用VS...

现在它的内容是这样的:

{

"id": "author.slugtemplate",

"name": "Slugcat Template",

"version": "0.1.0",

"authors": "Author",

"description": "A template for making SlugBase mods.",

"requirements": [ "slime-cubed.slugbase" ],

"requirements_names": [ "SlugBase" ]

}

id: 该mod的唯一的字符串标识,确定之后就最好不要再改这个了(会发生非常糟糕的事情.........)建议使用不带空格的小写字符串...另外 其他mod也会使用这个id来引用你的mod

name:mod的标题,会显示在remix菜单里面

version: mod的版本号

authors:mod作者

description:mod的描述内容

requirements:列出这个mod需求的其他mod的id,如果有多个前置mod则应当使用逗号分隔

requirements_names: 和上面差不多,但列出的是前置mod的名字

除此之外还有一条可选的

checksum_override_version:一个bool参数,如果为true则仅当version的值更新时才认为mod需要更新(false或者省略这一条的话,只要mod中任何文件发生变动均会认为需要更新)

提示

在authors和description中插入可以进行换行

thumbnail.png

mod的缩略图,会显示在remix菜单里,在这里建议使用640*360的分辨率(或者其他同等长宽比的图像,但是不能大于1mb)

illustrations文件夹/scenes文件夹

角色的竞技场头像和自定义场景

slugbase文件夹

里面包含角色属性的配置文件(在这个模板中为the_prototype.json,稍后会改掉这个)

另外还有一个描述自定义场景的文件夹,之后将在添加场景的部分加以讲解

处理模板mod

如果直接试着把mod这个文件夹拖进RainWorld_Data\StreamingAssets\mods会出问题 因为你缺少了一个dll文件(用于提供角色配置文件里面的几个自定义属性)

如果希望它能够正常工作,你首先需要完成.....

测试工作

双击SlugTemplate.sln,用VS打开它,你就会见到这个界面.......

(.sln文件是VS的解决方案文件,另外也可以用src文件夹中的.csproj文件打开)

在右上角的“解决方案资源管理器”中选中SlugTemplate,然后在屏幕顶端的工具栏找到“生成(B)”选项,然后在里面找到“生成SlugTemplate”

(按下去吧 不会爆炸的)

如果一切正常,窗口底部应该会提示“生成成功”,mod文件夹里也会多出一个plugins文件夹

提示

如果不正常,那么你大概要回头看看是不是.NET 7 SDK没装好了....

把整个“mod”文件夹复制到SteamLibrary\steamapps\common\Rain World\RainWorld_Data\StreamingAssets\mods里面(你应该会发现雨世界扩展中的几个自带mod也在这里)

打开游戏 如果你能够在Remix菜单里面看到这个 说明编译功能没有问题 可以开始编辑mod了

(芜湖)

重命名

为了避免重名现象发生,你首先需要重命名一些东西....

1.重命名解决方案与项目

右键工程,并且重命名为任何你喜欢的名称(此处以我自己的TheTraveler为例)

2.Plugin.cs

更改命名空间(namespace)、mod名称、id和三个自定义技能的前缀

这些内容没有直接关联 但是最好足够相关 以便你可以分清楚...

id建议写成类似“作者.id”的格式 这样的话就算遇到撞id的情况也可以以作者名区分

自定义技能的前缀写在斜杠前面,对于在这里的三个(以及之后你做的其他自定义技能)都应该保持相同

提示

在这之后最好不要修改命名空间和id....那将会是一场灾难

3.modinfo.json

使id、name和version与你写在Plugin.cs里面的内容相匹配

{

"id": "seron.thetraveler",

"name": "The Traveler",

"version": "0.1.0",

"authors": "Seron",

"description": "A unique slugcat with special leaping skillsWork in progress",

"requirements": [ "slime-cubed.slugbase" ],

"requirements_names": [ "SlugBase" ]

}

4.the_prototype.json

也就是之前提到过的角色配置文件 先给它改个名(名字并不重要,the_traveler.json或者travelerslugcat.json啥的都没问题,但是请务必确保自己能够分清)

修改蛞蝓猫角色的id和name(注意并不等同于之前的mod的id与名称)

找到三个自定义技能,把前缀更改为跟Plugin.cs中匹配,另外你还需要修改两个scene的名称

如果你愿意的话 还可以重新写一下描述(description)里面的东西....

5.场景配置文件

修改两个场景的json文件(包括文件名和里面的内容)

飞升后的那个也是一样的格式,这里的id是场景的id,不要与mod的id或者蛞蝓猫角色的id相混淆,以及这里修改了scene_folder的内容后记得去修改相应的文件夹的名称

{

"id": "Slugcat_Thetraveler",

"scene_folder": "scenes/slugcat - thetraveler",

"images": [

{ "name": "Background", "pos": [492, 297], "depth": 3.7, "shader": "Basic" },

{ "name": "Slugcat", "pos": [605, 427], "depth": 2.8, "shader": "Basic" },

{ "name": "Grass 3", "pos": [602, 264], "depth": 2.2, "shader": "Basic" },

{ "name": "Grass 2", "pos": [446, 283], "depth": 2.0, "shader": "Basic" },

{ "name": "Grass 1", "pos": [515, 265], "depth": 1.8, "shader": "Basic" }

],

"idle_depths": [ 2.8 ],

"glow_pos": [688, 484],

"mark_pos": [689, 583],

"select_menu_pos": [0, 0],

"slugcat_depth": 2.8

}

提示

其实如果你想要试着做自定义场景的话 这里就可以开始了,试着修改场景文件夹里的内容和场景的json文件里面的一些参数 看看会发生什么....(另外记得备份)

完成这些处理之后再次点击生成,然后把mod文件夹复制到游戏的mod文件路径中(记得先删掉之前那个),如果一切正常的话应该会是这样的:

(当然这些文字应该不同 除非你真的全都照抄示例了...)

那么现在使用这个角色开始游戏 它应该会具有独特的色彩,可以一蹦三尺高,非常容易招惹蜥蜴,而且死的时候会发生爆炸(?

当然 这可能并不是你所期待的效果 接下来的部分将会帮助你修改角色的基本属性和能力

魔改蛞蝓猫

角色的配置文件位于mod/slugbase文件夹中,此前你应该已经修改过它的名称

有关角色属性的设置写在"features"后的括号中

(包括slugbase内置属性和自己编写的自定义属性)

不论是内置属性还是自定义属性均需要按照特定的格式添加,基本格式为

"属性的名称": 属性的参数,

属性的名称可以是内置属性或者写在Plugins.cs中的自定义属性,为一个字符串

属性的参数由具体属性决定,可能为一个或多个不同类型的数据,包括:

-string/字符串:由数字、字母和下划线组成的一串字符,需要包含在引号中

-boolean/布尔值:true或者false

-integer/整数:32 位带符号整数,范围为 -2,147,483,648 到 2,147,483,647

-float/浮点数:含有小数部分的数 暂时无须考虑其范围

-color/颜色:十六进制表示的颜色 实际为一个字符串

-类型[数组内容]:指定类型的 包含在被方括号包围的“数组”中的多个数据,也可以是指定类型的单个数据(指定的类型一般为int/float/string)

你可以参阅内置属性列表来了解每个属性的具体参数

内置属性列表

属性名称后标注的是这个属性使用的参数类型,代码块中为一个示例

如果一个属性没有被指定 默认使用白猫的属性 未指定的自定义能力将不会触发

部分数据类型标注为尖括号,其接受的字符串从一个特定的集合中选取,对于是否开启MSC,集合的内容也会有所不同,具体可参阅文末的枚举内容列表

"color"(color)

"color": "6B12FF"

角色主体和UI元素的默认颜色

"auto_grab_batflies"(boolean)

"auto_grab_batflies": false

在接触时是否会自动抓住蝠蝇

"weight"(float[1..2])

"weight": [0.9, 0.7]

"weight": 1.2

玩家在正常和饥饿状态下的身体质量

如果未指定饥饿状态下的数值,则会自动计算一个合适的数值

"tunnel_speed"(float[1..2])

"tunnel_speed": [0.9, 0.7]

"tunnel_speed": 1.2

玩家在正常和饥饿状态下的管道爬行速度乘数

如果未指定饥饿状态下的数值,则会自动计算一个合适的数值

"climb_speed"(float[1..2])

"climb_speed": [0.9, 0.7]

"climb_speed": 1.2

玩家在正常和饥饿状态下的爬杆速度乘数

如果未指定饥饿状态下的数值,则会自动计算一个合适的数值

"walk_speed"(float[1..2])

"walk_speed": [0.9, 0.7]

"walk_speed": 1.2

玩家在正常和饥饿状态下的行走速度乘数

如果未指定饥饿状态下的数值,则会自动计算一个合适的数值

"crouch_stealth"(float[1..2])

"crouch_stealth": [0.9, 0.7]

"crouch_stealth": 1.2

玩家在正常和饥饿状态下的爬行状态的隐蔽性乘数

如果未指定饥饿状态下的数值,则与正常时相同

"throw_skill"(integer[1..2])

"throw_skill": [2, 1]

"throw_skill": 2

玩家在正常和饥饿状态下的投掷矛的能力

如果未指定饥饿状态下的数值,则为0

0:0.6到0.9伤害(和僧侣相同)

1:1伤害(和求生者相同)

2:1.25伤害(和猎手相同)

"lung_capacity"(float[1..2])

"lung_capacity": [0.9, 0.7]

"lung_capacity": 1.2

玩家在正常和饥饿状态下的肺活量乘数

如果未指定饥饿状态下的数值,则与正常时相同

"loudness"(float[1..2])

"loudness": [0.9, 0.7]

"loudness": 1.2

玩家在正常和饥饿状态下的引起生物注意的响度乘数

如果未指定饥饿状态下的数值,则与正常时相同

"alignments"

{

"": { "like": float, "strength": float = 1.0, "locked": boolean = false },

...

}

(就是有好感度机制的生物群体组成的集合)

"alignments": {

"Lizards": { "like": 1.0, "strength": 0.2 },

"Scavengers": { "like": -0.5, "locked": true }

}

生物群体对玩家的声望属性,like代表基准声望,每次存档后 相应群体的声望会以strength的数值逐渐移向基准值(存疑,原文此处并未讲明strength的具体影响,建议自行测试)

locked为true时,声望将永远保持为like的值

like取值范围[-1,1],strength取值范围[0,1]

"diets"

{

"base": string,

"corpses": float,

"meat": float,

"plants": float,

"overrides": {

"": float,

"": float,

...

}

}

"diet": {

"base": "White",

"corpses": 0.5,

"plants": 0.5,

"overrides": {

"Scavenger": 1.25,

"DangleFruit": 0.5

}

}

食物是否可以食用 及食用提供的饱食度 计算后的饱食度数值会近似到0.25的倍数

0表示不可食用,-1表示尝试进食将会导致被击晕

"corpses"表示玩家食用除蜈蚣外的大型生物尸体的饱食度乘数

"meat"表示玩家食用小型生物尸体、蜈蚣类生物或者肉类物体的饱食度乘数

"plants"表示玩家食用非肉食物体的饱食度乘数

"overrides"为单独的生物(包含在CreatureTemplate.Type中)和物体(包含在AbstractPhysicalObject.Type中)设置饱食度乘数

"base"是可选的 如果使用这个参数 接受的字符串必须包含于SlugcatStats.Name中。如果提供了"base"则其他参数都是可选的,默认为base代表的角色的数值。不指定"base"的情况下则需要指定其他参数

"custom_colors"

[

{ "name": "Body", "story": color, "arena": color[] },

{ "name": "Eyes", "story": color, "arena": color[] },

{ "name": string, "story": color, "arena": color[] },

...

]

"custom_colors": [

{ "name": "Body", "story": "10200C" },

{ "name": "Eyes", "story": "FFFFFF", "arena": [ "FFFFFF", "FF8080", "80FF80", "8080FF" ] },

{ "name": "Gills", "story": "454560" }

]

可配置的颜色。颜色由"name"引用,并将在颜色自定义菜单中显示。

在故事模式下默认使用"story"中的颜色,在竞技场模式中则被"arena"中的颜色覆盖

如果在"arena"中指定的颜色数量不足或省略了该属性,则竞技场模式中的某些玩家将使用"story"颜色

"backspear"(boolean)

"back_spear": true

在玩家背上储存一根矛的能力

"can_maul"(boolean)

"can_maul": true

撕咬被击晕的生物并造成伤害的能力

"maul_blacklist"(string[])

"maul_blacklist": [ "Scavenger", "PinkLizard" ]

不可被这个角色撕咬的生物的列表,接受的字符串必须包含于CreatureTemplate.Type中

"maul_damage"(float)

"maul_damage": 1.5

撕咬造成的伤害数值,如不指定则默认为1

"karma"(integer)

"karma": 3

初始的业力等级,范围从0到9(注意0对应的是一级,9是十级)

"karma_cap"(integer)

"karma_cap": 7

初始的业力上限,范围从0到9(同上)

"the_mark"(boolean)

"the_mark": true

玩家是否初始带有交流印记

"the_glow"(boolean)

"the_glow": true

玩家是否初始带有食用神经元后的发光效果

"start_room"(string[])

"start_room": "LF_H01"

"start_room": [ "DS_RIVSTART", "LF_H01" ]

玩家的初始房间id

如果指定多个,则从第一个开始尝试,如果该房间不存在则继续尝试下一个

你可以在这个网站查询到原版和DLC每个房间的id:

https://rain-world-map.github.io/

"guide_overseer"(integer)

"guide_overseer": 1

玩家的引导监视者的颜色,从1到5分别为黄/绿/红/白/紫

如果不指定,则引导监视者不会生成

如果没有开启MSC,除黄色之外的颜色将不能正常运作

"has_dreams"(boolean)

"has_dreams": true

玩家是否拥有梦境(然而这玩意没啥用 默认为白猫梦境)

"cycle_length_min"(float)

"cycle_length_min": 5.5

最短周期时长,单位为分钟

"cycle_length_max"(float)

"cycle_length_max": 8.25

最长周期时长,单位为分钟

"perma_unlock_gates"(boolean)

"perma_unlock_gates": true

玩家通过业力门后 该业力门是否会一直保持开启

"food_min"(integer)

"food_min": 7

雨眠所需的最低饱食度

"food_max"(integer)

"food_max": 10

可以保存的最高饱食度

"select_menu_scene"(string)

"select_menu_scene": "MySlugcatSelect"

在角色选择界面显示的场景的id

"select_menu_scene_ascended"(string)

"select_menu_scene_ascended": "MySlugcatAscended"

飞升结局后角色选择界面显示的场景的id

"sleep_scene"(string)

"sleep_scene": "MySlugcatSleep"

在雨眠界面显示的场景的id

"starve_scene"(string)

"starve_scene": "MySlugcatStarve"

因持续饥饿而在雨眠中死亡时 显示的特殊死亡界面的场景的id

"death_scene"(string)

"death_scene": "MySlugcatDeath"

一般原因导致死亡时 死亡界面的场景的id

"world_state"(string[])

"world_state": "Red"

"world_state": [ "Spear", "Red" ]

玩家的世界状态id,包括了生物生成和房间连接

接受的字符串必须包含于SlugcatStats.Name中

如指定多个,则从第一个开始尝试,如果该角色名称不存在则继续尝试下一个

"timeline_before"(string[])

"timeline_before": "Red"

"timeline_before": [ "Artificer", "Red" ]

"timeline_after"(string[])

"timeline_after": "Yellow"

"timeline_after": [ "Rivulet", "Yellow" ]

用于为角色在时间线上的位置排序,格式同world_state。

timeline_before的优先级更高

集合(枚举)内容列表

SlugcatStats.Name

原版: White,Yellow,Red

MSC: Rivulet,Artificer,Saint,Spear,Gourmand,Slugpup,Inv

CreatureCommunities.CommunityID

原版: None,All,Scavengers,Lizards,Cicadas,GarbageWorms,Deer,Jetfish

CreatureTemplate.Type

原版:

StandardGroundCreature, Slugcat, LizardTemplate, PinkLizard, GreenLizard, BlueLizard, YellowLizard, WhiteLizard,

RedLizard, BlackLizard, Salamander, CyanLizard, Fly, Leech, SeaLeech, Snail, Vulture, GarbageWorm, LanternMouse,

CicadaA, CicadaB, Spider, JetFish, BigEel, Deer, TubeWorm, DaddyLongLegs, BrotherLongLegs, TentaclePlant, PoleMimic,

MirosBird,TempleGuard, Centipede, RedCentipede, Centiwing, SmallCentipede, Scavenger, Overseer, VultureGrub, EggBug,

BigSpider, SpitterSpider, SmallNeedleWorm, BigNeedleWorm, DropBug, KingVulture, Hazer

MSC:

MirosVulture, SpitLizard, EelLizard, MotherSpider, TerrorLongLegs, AquaCenti, HunterDaddy, FireBug, StowawayBug,

ScavengerElite, Inspector, Yeek, BigJelly, SlugNPC, JungleLeech, ZoopLizard, ScavengerKing, TrainLizard

AbstractPhysicalObject.Type

原版:

Creature, Rock, Spear, FlareBomb, VultureMask, PuffBall, DangleFruit, Oracle, PebblesPearl, SLOracleSwarmer,

SSOracleSwarmer, DataPearl, SeedCob, WaterNut, JellyFish, Lantern, KarmaFlower, Mushroom, VoidSpawn, FirecrackerPlant,

SlimeMold, FlyLure, ScavengerBomb, SporePlant, AttachedBee, EggBugEgg, NeedleEgg, DartMaggot, BubbleGrass,

NSHSwarmer, OverseerCarcass, CollisionField, BlinkingFlower,

MSC:

JokeRifle, Bullet, SingularityBomb, Spearmasterpearl, FireEgg, EnergyCell, Germinator, Seed, GooieDuck, LillyPuck,

GlowWeed, MoonCloak, HalcyonPearl, DandelionPeach, HRGuard

基础部分的教程就到此结束啦...

在这一部分的教程中,我们从一个模板mod开始,了解了雨世界mod的基本文件结构和VS的基础功能,学习了数种简单数据类型,并且制作了一个带有基本功能的自定义角色

后续也会考虑更新进阶部分 将会讲解自定义场景的添加、自定义角色贴图以及自定义的角色特殊能力,后续应该也会包含关于fisobs自定义物品、自定义对话、绘制和地图编辑器相关的内容 敬请期待(!

在此也感谢哈维提供的关于教程编写方面的指引...以及 再次感谢SlimeCubed以及他的作品

那么 祝好运啦.....

評論

上一篇: 周易第三卦屯卦详解 元,亨,利,贞。勿用,有攸往,利建侯。
下一篇: ps怎么把图片做成球体? Photoshop图片添加球体效果的技巧

相关推荐

交易猫能用微信支付吗 交易猫用微信支付方法介绍
手机换机软件有哪些?实用的手机换机app合集
同程旅游退款多久到账?
从奥格瑞玛怎么去神射手营地(怎么在奥格瑞玛回幽暗城)
王者荣耀羁绊积分获取攻略
「脑洞大师」霸榜背后:短视频+休闲游戏成为字节跳动的撒手锏丨产品观察