自制技能
英文视频教程
时间戳
- 0:29 | 创造 skill .json 并将信息粘贴进去
- 1:17 | "id"
- 1:49 | "skillTier"
- 2:07 | "skillTargetType"
- 2:30 | "canTeamKill"
- 2:45 | "canDuel"
- 2:58 | "canChangeTarget"
- 3:09 | "attributeType"
- 3:32 | "atkType"
- 3:49 | "defType"
- 4:16 | "skillMotion"
- 4:48 | "viewType"
- 5:13 | "targetNum"
- 5:23 | "range"
- 5:37 | "defaultValue"
- 5:54 | "skillLevelCorrection"
- 6:20 | "abilityScriptList"
- 7:03 | "coinList" -> "operatorType"
- 7:25 | "coinList" -> "scale"
- 7:37 | "coinList" -> "abilityScriptList"
- 7:52 | 将脚本植入技能 | 脚本列表位于本指南2.5分区
- 11:42 | 将多个技能加入 skill .json
- 12:16 | 给予一个人格多个技能
文字教程
在开始之前哥们得说句公道话:自制技能这B过程可以说是整个084 mod创作最抽象的一部分,没有之一。
哥们会尽量简化这个过程,不过到头来还是令人头疼。
找到正确的数据
人格这块直接抓数据很容易,但抓技能不能用同样的方法搞,因为容纳技能的json文件非常大且非常乱。于是,我们建议直接从下面抓一个技能模板然后一步一步把技能搭起来。直接从json文件里抓只会让自己脑溢血。
技能格式
技能位于 limbus_data/skill/ 与 custom_limbus_data/skill/ 。技能的json文件跟自制被动很像,都是一个大型列表加上各个条目栏。(尽量不要使用dumpedData/skills内的技能文件,因为有可能导致某些奇怪的bug,如技能贴图丢失)
如您所见,这是一个一技能。我们会用它来作为教材给您解释一下基础。
{
"list": [
{
"id": 1125001,
"skillTier": 1,
"skillData": [
{
"skillTargetType": "FRONT",
"canTeamKill": false,
"canDuel": true,
"canChangeTarget": true,
"attributeType": "SHAMROCK",
"atkType": "SLASH",
"defType": "ATTACK",
"skillMotion": "S1",
"viewType": "BATTLE",
"targetNum": 1,
"range": 6.5,
"defaultValue": 8,
"skillLevelCorrection": 1,
"abilityScriptList": [
{
"scriptName": "GiveBuffOnUse",
"buffData": {
"buffKeyword": "Breath",
"target": "Self",
"stack": 1,
"turn": 0,
"activeRound": 1
}
}
],
"coinList": [
{
"operatorType": "ADD",
"scale": 3,
"abilityScriptList": [
{
"scriptName": "GiveBuffOnSucceedAttack",
"buffData": {
"buffKeyword": "Breath",
"target": "Self",
"stack": 0,
"turn": 2,
"activeRound": 1
}
}
]
}
]
}
]
}
]
}
口也,这又是什么癫佬东西了!?
唏,咱们一个一个来。
"id"是技能的ID。不像人格ID那样有个取名需求,技能ID是你想叫啥就叫啥。"skillType"决定技能类型(ego觉醒,ego侵蚀还是单纯的只是一个正常技能)"skillTier"决定技能等级,是一技能二技能还是三技能等等等等。所有EGO技能都算三技能,并且所有守备技能都是一技能。大多数敌人技能都是一技能,不过有不少例外。"attributeType"是技能的罪孽属性。- 若是想要弄清楚罪孽属性的变量,请看
attributeListlocale文件(或者看下述的代码)
{
"dataList": [
{"id": "CRIMSON", "name": "Wrath"},
{"id": "SCARLET", "name": "Lust"},
{"id": "AMBER", "name": "Sloth"},
{"id": "SHAMROCK", "name": "Glut."},
{"id": "AZURE", "name": "Gloom"},
{"id": "INDIGO", "name": "Pride"},
{"id": "VIOLET", "name": "Envy"},
{"id": "WHITE", "name": "Mad."},
{"id": "BLACK", "name": "Angst"}
]
}
atkType是物理攻击属性,分为SLASH(斩)HIT(打)PENETRATE(突)。但如果是防御或者闪避技能,直接填NONE就好。defType决定一个技能是普通攻击 (ATTACK),防御 (GUARD),闪避 (EVADE),还是反击 (COUNTER).- 注: 反击需要
atkType来确定是斩打突中的哪一个 - 注: 给防御与闪避加
atkType不会有任何效果 skillTargetType决定技能的索敌逻辑FRONT是所有人格技能所用的索敌逻辑,意味着技能会瞄准我们想要攻击的对象- NPC技能通常会使用
RANDOM索敌逻辑,也就是随机攻击。 targetNum决定攻击容量(也就是AOE),默认是1mpUsage决定一个技能会消耗多少理智值。- 注意:此变量实际上不会消耗魔法值,它仅用于更新用户界面元素。
- 注: 在游戏代码中,
SP(理智) 其实没有被用过哪怕一次,被使用的永远都只有MP
skillLevelCorrection决定一个技能所获取的攻击等级/防御等级defaultValue代表着技能基值- 注: 虽然说理论上这个数值可以调成负数,但由于边狱公司的计算逻辑此举会导致一些非常奇怪的结果。(想要了解一下可以看这里)
canTeamKill根据true还是false决定一个技能可不可以攻击友军(TK王这一块)- 注:再用
FRONT索敌逻辑时用这个能主动TK canDuel根据true还是false决定一个技能可不可以拼点- 注: 代码中拼点永远都被称为Duel
- 注: 制造可拼点防御跟反击只需要将这玩意改为true 这玩意对闪避没有哪怕一丝一毫的影响。
canChangeTarget根据true还是false决定一个技能可不可以被对方抢手skillMotion是这个技能使用的动画。正常技能用的S1, S2, S3, S4等等, 反击防御闪避基本都用"Default"viewType怪东西,没鸟用。填BATTLE看起来就是个正常技能,填ENCOUNTER会使该技能像三技能一样。range决定角色要移动多远才会开始拼点。依旧没鸟用。parryingCloseType跟range差不多。没鸟用。
能力脚本与其运作方式
能力脚本指的是那些不在硬币本身上生效的脚本。条件类硬币威力加成跟拼点胜利等等都属于这种。
脚本制作的大概介绍
绝大多数脚本效果跟名字都差不多。 GiveBuffOnUse(使用时给状态效果)是个很好的例子。
{
"scriptName": "GiveBuffOnUse",
"buffData": {
"buffKeyword": "Breath",
"buffOwner": ""
"target": "Self",
"stack": 1,
"turn": 0,
"activeRound": 1
}
}
- 首先是
buffKeyWord,这玩意决定什么类型的状态效果会被施加。基本啥状态效果都行。 - 此时上述模板上给这玩意列的是
Breath,也就是呼吸。 - 注:如果您想找到游戏内的所有状态,请移步至
https://limbus.kusoge.xyz/keyword或者limbus_locale/bufList。用后者时别忘了用VScode的格式化保存。 - 接下来是
"target",顾名思义决定谁会被影响。 有不少变量可以填,不过最常见的有Self(自己),Target(目标),EveryAlly(所有友军),RandomEnemy1(随机一个敌人),RandomEnemy2(随机两个敌人),RandomEnemy3(随机三个敌人),RandomEnemy5(随机五个敌人) 与EveryEnemy(所有敌人)。更抽象的有IfAbnormalityAllPartsOrSelf跟Custom,不过这些基本没人用。 buffOwner在这里没有用,不过后面会讲。stack就是强度。不少状态效果只有强度没有层数。turn是层数。activeRound决定什么时候状态会被施加。0是这回合,1是下回合。
脚本可以进行一定范围内的编辑
所有名字里含数字的脚本都可以靠更改那些数字进行编辑。罪孽属性也是一个道理。
带状态效果的脚本大都遵循这个逻辑,但不是所有的都是。虽然说编辑脚本的buffData 时基本都是这个道理,但还是得自己试错。
我该从哪找到脚本?
- 方案1:前往边狱locale中的skillList(别忘了用VScode的格式化保存)然后搜索一个你想要的技能描述。然后去
limbus_data/skill搜索哪个技能的id,然后将内部的脚本复制过来。您也可以查看该指南的2.5分区。 - 方案 2:这个方案比较复杂,但可以应对月计抽象的本地化文本 (金智勋吃水果)。 进入
BepInEx/unhollowed打开Assembly-CSharp.dll,然后用DnSpy或者Jetbrains Dotpeak这种软件搜索你需要的技能名
编辑硬币
如今您已明白如何编辑 AbilityScript,编辑硬币已经不是什么挑战了。
主要有三个大头得看:
operatorType决定硬币是正面加成 (ADD),反面加成,(SUB),还是乘法加成 (MUL)scale决定硬币威力,除非你想玩点抽象的(比如说负面硬币乘法)不然都不会出问题abilityScriptList看起来很眼熟?这玩意跟之前讲过的abilityScript基本坐一桌。(用于植入 “击中时” 这种效果)
添加更多的硬币
没啥难度哥们说真的。直接复制粘贴json里的一个硬币就完事。值得一提的是虽然说一个技能确实可以有十个以上的硬币,一个技能在基础情况下无法显示十个以上的硬币。(中文解释起来很怪但确实是这么回事)
额外信息
这里的信息算过期老货。部分可以作为参考但本质上没啥用,因为目前Lethe已经有了能完美替代它们的插件。(如Modular)
"textID"原本用来关联本地化文本用的。"iconID"图标id,原版技能没多少有这玩意。图标ID不少都跟技能ID有直接联系。想要自创技能图标可以参考参考。- 一个技能的图标ID跟对应的技能ID一直都会是相同的。.
"gaksungLevel"指同步等级。
注意
所有技能都在 limbus_data/skills 里。想要异想体的技能直接在这里搜索就行,复制粘贴后扔进 custom_limbus_data/skills 里就能开始编辑。
如果一个技能没有locale本地化文本,那么技能的描述就会被替换为占位符(2.7分区有讲)