[RainWorld]從零開始的Slugbase入門教程-P2:從魔改開始

下載模板mod
你可以從https://wwk.lanzoub.com/iMEF50u7abdc下載這個(gè)模板mod
(后續(xù)教程已經(jīng)遷移至https://rwmoddingch.github.io/ChModdingWiki/)

管理文件
在方便的地方新建一個(gè)文件夾,然后把模板Mod解壓縮到這里
提示:建議把此后制作mod相關(guān)的所有資料和素材也整理到這個(gè)文件夾中,可以避免很多因?yàn)槲募y丟導(dǎo)致的麻煩

把模板mod的名字改成你自己的mod的名字,然后打開文件夾 里面應(yīng)該是這樣的

你暫時(shí)不需要關(guān)注其他的東西,要修改的內(nèi)容在mod文件夾中
modinfo.json
這個(gè)文件定義的是mod的元數(shù)據(jù),基本上就是在remix菜單里面顯示的內(nèi)容,你可以直接用記事本打開它(或者說(shuō) 其實(shí)你可以用VS...
現(xiàn)在它的內(nèi)容是這樣的:
id:? 該mod的唯一的字符串標(biāo)識(shí),確定之后就最好不要再改這個(gè)了(會(huì)發(fā)生非常糟糕的事情.........)建議使用不帶空格的小寫字符串...另外 其他mod也會(huì)使用這個(gè)id來(lái)引用你的mod
name: mod的標(biāo)題,會(huì)顯示在remix菜單里面
version: mod的版本號(hào)
authors: mod作者
description: mod的描述內(nèi)容
requirements: 列出這個(gè)mod需求的其他mod的id,如果有多個(gè)前置mod則應(yīng)當(dāng)使用逗號(hào)分隔
requirements_names: 和上面差不多,但列出的是前置mod的名字
除此之外還有一條可選的:
checksum_override_version:一個(gè)bool參數(shù),如果為true則僅當(dāng)version的值更新時(shí)才認(rèn)為mod需要更新(false或者省略這一條的話,只要mod中任何文件發(fā)生變動(dòng)均會(huì)認(rèn)為需要更新)
提示:在authors和description中插入<line>可以進(jìn)行換行
thumbnail.png
mod的縮略圖,會(huì)顯示在remix菜單里,在這里建議使用640*360的分辨率(或者其他同等長(zhǎng)寬比的圖像,但是不能大于1mb)
illustrations文件夾/scenes文件夾
角色的競(jìng)技場(chǎng)頭像和自定義場(chǎng)景
slugbase文件夾
里面包含角色屬性的配置文件(在這個(gè)模板中為the_prototype.json,稍后會(huì)改掉這個(gè))
另外還有一個(gè)描述自定義場(chǎng)景的文件夾,之后將在添加場(chǎng)景的部分加以講解
處理模板mod
如果直接試著把mod這個(gè)文件夾拖進(jìn)RainWorld_Data\StreamingAssets\mods會(huì)出問(wèn)題 因?yàn)槟闳鄙倭艘粋€(gè)dll文件(用于提供角色配置文件里面的幾個(gè)自定義屬性)
如果希望它能夠正常工作,你首先需要完成.....
測(cè)試工作
雙擊SlugTemplate.sln,用VS打開它,你就會(huì)見到這個(gè)界面.......

在右上角的“解決方案資源管理器”中選中SlugTemplate,然后在屏幕頂端的工具欄找到“生成(B)”選項(xiàng),然后在里面找到“生成SlugTemplate”

如果一切正常,窗口底部應(yīng)該會(huì)提示“生成成功”,mod文件夾里也會(huì)多出一個(gè)plugins文件夾
提示:如果不正常,那么你大概要回頭看看是不是.NET 7 SDK沒裝好了....
把整個(gè)“mod”文件夾復(fù)制到SteamLibrary\steamapps\common\Rain World\RainWorld_Data\StreamingAssets\mods里面(你應(yīng)該會(huì)發(fā)現(xiàn)雨世界擴(kuò)展中的幾個(gè)自帶mod也在這里)
打開游戲 如果你能夠在Remix菜單里面看到這個(gè) 說(shuō)明編譯功能沒有問(wèn)題 可以開始編輯mod了

重命名
為了避免重名現(xiàn)象發(fā)生,你首先需要重命名一些東西....
?1.重命名解決方案與項(xiàng)目
右鍵工程,并且重命名為任何你喜歡的名稱(此處以我自己的TheTraveler為例)


2.Plugin.cs
更改命名空間(namespace)、mod名稱、id和三個(gè)自定義技能的前綴
這些內(nèi)容沒有直接關(guān)聯(lián) 但是最好足夠相關(guān) 以便你可以分清楚...
id建議寫成類似“作者.id”的格式 這樣的話就算遇到撞id的情況也可以以作者名區(qū)分
?
自定義技能的前綴寫在斜杠前面,對(duì)于在這里的三個(gè)(以及之后你做的其他自定義技能)都應(yīng)該保持相同
提示:在這之后最好不要修改命名空間和id....那將會(huì)是一場(chǎng)災(zāi)難


3.modinfo.json
使id、name和version與你寫在Plugin.cs里面的內(nèi)容相匹配
4.the_prototype.json
也就是之前提到過(guò)的角色配置文件 先給它改個(gè)名(名字并不重要,the_traveler.json或者travelerslugcat.json啥的都沒問(wèn)題,但是請(qǐng)務(wù)必確保自己能夠分清)

修改蛞蝓貓角色的id和name(注意并不等同于之前的mod的id與名稱)
找到三個(gè)自定義技能,把前綴更改為跟Plugin.cs中匹配,另外你還需要修改兩個(gè)scene的名稱
如果你愿意的話 還可以重新寫一下描述(description)里面的東西....

5.場(chǎng)景配置文件
修改兩個(gè)場(chǎng)景的json文件(包括文件名和里面的內(nèi)容)

飛升后的那個(gè)也是一樣的格式,這里的id是場(chǎng)景的id,不要與mod的id或者蛞蝓貓角色的id相混淆,以及這里修改了scene_folder的內(nèi)容后記得去修改相應(yīng)的文件夾的名稱

提示:其實(shí)如果你想要試著做自定義場(chǎng)景的話 這里就可以開始了,試著修改場(chǎng)景文件夾里的內(nèi)容和場(chǎng)景的json文件里面的一些參數(shù) 看看會(huì)發(fā)生什么....(另外記得備份)
完成這些處理之后再次點(diǎn)擊生成,然后把mod文件夾復(fù)制到游戲的mod文件路徑中(記得先刪掉之前那個(gè)),如果一切正常的話應(yīng)該會(huì)是這樣的:

那么現(xiàn)在使用這個(gè)角色開始游戲 它應(yīng)該會(huì)具有獨(dú)特的色彩,可以一蹦三尺高,非常容易招惹蜥蜴,而且死的時(shí)候會(huì)發(fā)生爆炸(?
當(dāng)然 這可能并不是你所期待的效果 接下來(lái)的部分將會(huì)幫助你修改角色的基本屬性和能力
魔改蛞蝓貓
角色的配置文件位于mod/slugbase文件夾中,此前你應(yīng)該已經(jīng)修改過(guò)它的名稱
有關(guān)角色屬性的設(shè)置寫在"features"后的括號(hào)中

不論是內(nèi)置屬性還是自定義屬性均需要按照特定的格式添加,基本格式為
屬性的名稱可以是內(nèi)置屬性或者寫在Plugins.cs中的自定義屬性,為一個(gè)字符串
屬性的參數(shù)由具體屬性決定,可能為一個(gè)或多個(gè)不同類型的數(shù)據(jù),包括:
?
-string/字符串: 由數(shù)字、字母和下劃線組成的一串字符,需要包含在引號(hào)中
-boolean/布爾值: true或者false
-integer/整數(shù): 32 位帶符號(hào)整數(shù),范圍為 -2,147,483,648 到 2,147,483,647
-float/浮點(diǎn)數(shù): 含有小數(shù)部分的數(shù) 暫時(shí)無(wú)須考慮其范圍
-color/顏色: 十六進(jìn)制表示的顏色 實(shí)際為一個(gè)字符串
?
-類型[數(shù)組內(nèi)容]: 指定類型的 包含在被方括號(hào)包圍的“數(shù)組”中的多個(gè)數(shù)據(jù),也可以是指定類型的單個(gè)數(shù)據(jù)(指定的類型一般為int/float/string)
?
你可以參閱內(nèi)置屬性列表來(lái)了解每個(gè)屬性的具體參數(shù)

內(nèi)置屬性列表
屬性名稱后標(biāo)注的是這個(gè)屬性使用的參數(shù)類型,代碼塊中為一個(gè)示例
如果一個(gè)屬性沒有被指定 默認(rèn)使用白貓的屬性 未指定的自定義能力將不會(huì)觸發(fā)
部分?jǐn)?shù)據(jù)類型標(biāo)注為尖括號(hào),其接受的字符串從一個(gè)特定的集合中選取,對(duì)于是否開啟MSC,集合的內(nèi)容也會(huì)有所不同,具體可參閱文末的枚舉內(nèi)容列表
"color"(color)
角色主體和UI元素的默認(rèn)顏色
"auto_grab_batflies"(boolean)
在接觸時(shí)是否會(huì)自動(dòng)抓住蝠蠅
"weight"(float[1..2])
玩家在正常和饑餓狀態(tài)下的身體質(zhì)量
如果未指定饑餓狀態(tài)下的數(shù)值,則會(huì)自動(dòng)計(jì)算一個(gè)合適的數(shù)值
"tunnel_speed"(float[1..2])
玩家在正常和饑餓狀態(tài)下的管道爬行速度乘數(shù)
如果未指定饑餓狀態(tài)下的數(shù)值,則會(huì)自動(dòng)計(jì)算一個(gè)合適的數(shù)值
"climb_speed"(float[1..2])
玩家在正常和饑餓狀態(tài)下的爬桿速度乘數(shù)
如果未指定饑餓狀態(tài)下的數(shù)值,則會(huì)自動(dòng)計(jì)算一個(gè)合適的數(shù)值
過(guò)高的數(shù)值會(huì)導(dǎo)致玩家從豎直的桿子頂端飛出,建議不要超過(guò)3.0
"walk_speed"(float[1..2])
玩家在正常和饑餓狀態(tài)下的行走速度乘數(shù)
如果未指定饑餓狀態(tài)下的數(shù)值,則會(huì)自動(dòng)計(jì)算一個(gè)合適的數(shù)值
"crouch_stealth"(float[1..2])
玩家在正常和饑餓狀態(tài)下的爬行狀態(tài)的隱蔽性乘數(shù)
如果未指定饑餓狀態(tài)下的數(shù)值,則與正常時(shí)相同
"throw_skill"(integer[1..2])
玩家在正常和饑餓狀態(tài)下的投擲矛的能力
如果未指定饑餓狀態(tài)下的數(shù)值,則為0
0:0.6到0.9傷害(和僧侶相同)
1:1傷害(和求生者相同)
2:1.25傷害(和獵手相同)
"lung_capacity"(float[1..2])
玩家在正常和饑餓狀態(tài)下的肺活量乘數(shù)
如果未指定饑餓狀態(tài)下的數(shù)值,則與正常時(shí)相同
"loudness"(float[1..2])
玩家在正常和饑餓狀態(tài)下的引起生物注意的響度乘數(shù)
如果未指定饑餓狀態(tài)下的數(shù)值,則與正常時(shí)相同
"alignments"
(<CreatureCommunities.CommunityID>就是有好感度機(jī)制的生物群體組成的集合)
生物群體對(duì)玩家的聲望屬性,like代表基準(zhǔn)聲望,每次存檔后 相應(yīng)群體的聲望會(huì)以strength的數(shù)值逐漸移向基準(zhǔn)值(存疑,原文此處并未講明strength的具體影響,建議自行測(cè)試)
locked為true時(shí),聲望將永遠(yuǎn)保持為like的值
like取值范圍[-1,1],strength取值范圍[0,1]
"diets"
食物是否可以食用 及食用提供的飽食度 計(jì)算后的飽食度數(shù)值會(huì)近似到0.25的倍數(shù)
0表示不可食用,-1表示嘗試進(jìn)食將會(huì)導(dǎo)致被擊暈
?
"corpses"表示玩家食用除蜈蚣外的大型生物尸體的飽食度乘數(shù)
"meat"表示玩家食用小型生物尸體、蜈蚣類生物或者肉類物體的飽食度乘數(shù)
"plants"表示玩家食用非肉食物體的飽食度乘數(shù)
"overrides"為單獨(dú)的生物(包含在<CreatureTemplate.Type>中)和物體(包含在<AbstractPhysicalObject.Type>中)設(shè)置飽食度乘數(shù)
?
"base"是可選的 如果使用這個(gè)參數(shù) 接受的字符串必須包含于<SlugcatStats.Name>中。如果提供了"base"則其他參數(shù)都是可選的,默認(rèn)為base代表的角色的數(shù)值。不指定"base"的情況下則需要指定其他參數(shù)
"custom_colors"
可配置的顏色。顏色由"name"引用,并將在顏色自定義菜單中顯示。
?
在故事模式下默認(rèn)使用"story"中的顏色,在競(jìng)技場(chǎng)模式中則被"arena"中的顏色覆蓋
如果在"arena"中指定的顏色數(shù)量不足或省略了該屬性,則競(jìng)技場(chǎng)模式中的某些玩家將使用"story"顏色
"backspear"(boolean)
在玩家背上儲(chǔ)存一根矛的能力
"can_maul"(boolean)
撕咬被擊暈的生物并造成傷害的能力
"maul_blacklist"(string[])
不可被這個(gè)角色撕咬的生物的列表,接受的字符串必須包含于<CreatureTemplate.Type>中
"maul_damage"(float)
撕咬造成的傷害數(shù)值,如不指定則默認(rèn)為1
"karma"(integer)
初始的業(yè)力等級(jí),范圍從0到9(注意0對(duì)應(yīng)的是一級(jí),9是十級(jí))
"karma_cap"(integer)
初始的業(yè)力上限,范圍從0到9(同上)
"the_mark"(boolean)
玩家是否初始帶有交流印記
"the_glow"(boolean)
玩家是否初始帶有食用神經(jīng)元后的發(fā)光效果
"start_room"(string[])
玩家的初始房間id
如果指定多個(gè),則從第一個(gè)開始嘗試,如果該房間不存在則繼續(xù)嘗試下一個(gè)
你可以在這個(gè)網(wǎng)站查詢到原版和DLC每個(gè)房間的id:
https://rain-world-map.github.io/
"guide_overseer"(integer)
玩家的引導(dǎo)監(jiān)視者的顏色,從1到5分別為黃/綠/紅/白/紫
如果不指定,則引導(dǎo)監(jiān)視者不會(huì)生成
如果沒有開啟MSC,除黃色之外的顏色將不能正常運(yùn)作
"has_dreams"(boolean)
玩家是否擁有夢(mèng)境(然而這玩意沒啥用 默認(rèn)為白貓夢(mèng)境)
"cycle_length_min"(float)
最短周期時(shí)長(zhǎng),單位為分鐘
"cycle_length_max"(float)
最長(zhǎng)周期時(shí)長(zhǎng),單位為分鐘
"perma_unlock_gates"(boolean)
玩家通過(guò)業(yè)力門后 該業(yè)力門是否會(huì)一直保持開啟
"food_min"(integer)
雨眠所需的最低飽食度
"food_max"(integer)
可以保存的最高飽食度
"select_menu_scene"(string)
在角色選擇界面顯示的場(chǎng)景的id
"select_menu_scene_ascended"(string)
飛升結(jié)局后角色選擇界面顯示的場(chǎng)景的id
"sleep_scene"(string)
在雨眠界面顯示的場(chǎng)景的id
"starve_scene"(string)
因持續(xù)饑餓而在雨眠中死亡時(shí) 顯示的特殊死亡界面的場(chǎng)景的id
"death_scene"(string)
一般原因?qū)е滤劳鰰r(shí) 死亡界面的場(chǎng)景的id
"world_state"(string[])
玩家的世界狀態(tài)id,包括了生物生成和房間連接
接受的字符串必須包含于<SlugcatStats.Name>中
如指定多個(gè),則從第一個(gè)開始嘗試,如果該角色名稱不存在則繼續(xù)嘗試下一個(gè)
"timeline_before"(string[])
"timeline_after"(string[])
用于為角色在時(shí)間線上的位置排序,格式同world_state。
timeline_before的優(yōu)先級(jí)更高
集合(枚舉)內(nèi)容列表
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?

基礎(chǔ)部分的教程就到此結(jié)束啦...
在這一部分的教程中,我們從一個(gè)模板mod開始,了解了雨世界mod的基本文件結(jié)構(gòu)和VS的基礎(chǔ)功能,學(xué)習(xí)了數(shù)種簡(jiǎn)單數(shù)據(jù)類型,并且制作了一個(gè)帶有基本功能的自定義角色
?
后續(xù)也會(huì)考慮更新進(jìn)階部分 將會(huì)講解自定義場(chǎng)景的添加、自定義角色貼圖以及自定義的角色特殊能力,后續(xù)應(yīng)該也會(huì)包含關(guān)于fisobs自定義物品、自定義對(duì)話、繪制和地圖編輯器相關(guān)的內(nèi)容 敬請(qǐng)期待(!
?
在此也感謝哈維提供的關(guān)于教程編寫方面的指引...以及 再次感謝SlimeCubed以及他的作品
?
那么 祝好運(yùn)啦.....