本篇文档会介绍如何解包法环工程,从而查看并修改游戏数值、角色AI、角色动画、技能配置及关卡场景配置。
Yabber:对UXM解包出来的文件进行进一步解包和打包,支持.bnd, .bhd/.bdt, .dcx, .fltparam, .fmg, .gparam, .luagnl, .luainfo, .tpf.这些格式 ModEngine2:应用mod文件夹下的文件修改并启动法环,可建立多份Instance测试不同内容
在Executable Path里索引游戏本体的运行exe,可以在View Files里进一步选择解包范围。
Yabber可以对UXM解包出来的.dcx文件进一步解包,编辑完之后再打包。我主要用来做两件事:
1. msg编辑:从dcx解包出xml文件,修改后打包回去,用来处理冲突或者做汉化。
2. AI编辑:从.dcx解包出lua文件,再反编译后查看AI配置。*暂时还没自己魔改过AI*
以msg/engus/item_dlc02-msgbnd.dcx为例,Yabber解包后会在该路径生成item_dlc02-msgbnd-dcx文件夹:
再次对WeaponName_dlc01.fmg进行解包,可以得到WeaponName_dlc01.fmg.xml文件:
这个xml文件就是dlc01黄金树幽影的武器名文本,内容摘录如下。
<?xml version="1.0" encoding="utf-8"?>
<compression>None</compression>
<version>DarkSouls3</version>
<bigendian>False</bigendian>
<text id="1500000">Main-gauche</text>
<text id="1500100">Heavy Main-gauche</text>
<text id="1500200">Keen Main-gauche</text>
<text id="1500300">Quality Main-gauche</text>
<text id="1500400">Fire Main-gauche</text>
<text id="1500500">Flame Art Main-gauche</text>
<text id="1500600">Lightning Main-gauche</text>
<!-- more until 68510000-->
对于解包后的文件,DSMapStudio可以以Map为单位,索引地图模型及对应的游戏参数,查看并编辑地图数值。
如上图,M11是王城罗德尔,load map后可以查看map配置。图中选中的entity就是王城罗德尔大道上的腐败化身大屁股。
DSMapStudio还有个重要用途,就是修改战斗参数param。以下图为例:
可以修改该战灰的稀有度、购入售出价格、是否可掉落、可附魔属性、可附魔武器种类等。
在DSMapStudio中修改后保存,文件会存到mod文件夹下。修改内容可以通过ModEngine2启动。
DSAnimStudio可以编辑TAE(TimeAct Editor)文件,从而控制判定帧、取消帧、无敌帧、SPEffect、bullet、SFX、sound等所有由动画帧驱动的内容。
DSAS唯一不支持的FS游戏是《黑暗之魂2》,因为魂2是用其他引擎制作的。
对于已经解包的工程,可以通过Files→open打开chr.anibnd.dcx,查看该角色的动画数据。
角色的一个行为=动画数据(hkx)+动画帧驱动数据(tae),DSAS可以直接编辑tae,而hkx需要导出到Blender后修改再打回去。
Animation:chr的动画文件。
Graph:该动画的action数据。
Parameters:选中action的具体参数。
Entity:控制Entity的Transform、StateInfo(用来做多阶段)和NPC Param(用来替换模型)。如果自己做了角色模型,可以在这里导入后测试。
Viewport:查看动画+数据的播放表现,可以逐帧查看。
部分action只有在特定StateInfo下才会apply,如果不apply,会显示为红色×。如果不想设置StateInfo就查看动画的全部action,可以按4(Toggle StateInfo Of Selected Actions 快捷键)打开。
通过Yabber解包出的Lua,需要进一步反编译才能被阅读。这一步需要DSLuaDecompiler,对AI Lua文件进行反编译。
在HTN框架下,以任务(条件→影响)为单位,AI会一直挑选符合条件的任务加入各个计划的任务池。AI有几套优先级不同的计划,在不因优先级发生跳出的情况下,会从该计划的任务池里随机选择一个任务进行执行。计划内可以注册函数、声明计数器、声明计时器等。
可以通过内容已知的SPEffectID或动画ID反过来慢慢看AI逻辑,直接从头看会比较吃力。
制作Mod,尤其是涉及动画的Mod,需要将DSMapStudio和DSAnimStudio配合使用。接下来以梅瑟莫的投技为例,介绍这一工作流。
梅瑟莫的投技表现和玛莲妮亚非常类似,都是前冲、抬手然后抓取判定,但为什么梅瑟莫的抓取要难躲得多?
针对这一需求,需要查找到梅瑟莫角色的抓取动画,并查看该动画配置的tae数据。
2. DSMS的Model Editor:可以通过角色的英文名查找对应chrID,存在多个时需要分辨哪个是base。*基本是第一个。*
3. DSMS的Map Editor:不确定要编辑的对象用了哪个chrID时,可以通过map反查。找到物种包藏库这张map,通过英文名查找entity,或者自己手动沿着地图一路“走”过去,找到entity并查看Model Name。
查看5130的动画数据,找到投技动画,看到这一配置时,“为什么梅瑟莫投技很难躲”的答案已经呼之欲出——
如果进一步追究,这个attack behavior的BehaviorJudgeID为360,它的判定配置为5130360,即chrID+BehaviorJudgeID。
在DSMS的Param Editor下找到AtkParam_Npc,这一文件管理atk的hitbox&damage。查到5130360配置,它就是梅瑟莫投技判定的“罪魁祸首”——
atkparam可以配置atk下每个hit的判定大小、受击类型、受击权重、hitbox挂点及形状、击退距离、卡肉时间、附加SPEffect、各类型伤害基础值、多人下各类型伤害基础值、冲击力、对物件伤害、SFX ID、Decal ID和AI Sound ID等。
这里没有列举出所有数值,因为配置项实在太多了。和这一投技最相关的配置,其实只有四项:
hit0_Radius:第一次hit的半径大小,为1.3。
hit0_DmyPoly2:第一次hit的第二个挂点,为-1。-1表示没有,即第一次hit为sphere。
throwTypeId:为4100。配置投技成功后衔接的投机处决动画,即处决动画ID是4100。
throwFlag:枚举,为1.1表示是Throw transition投技过渡,2为Throw投技处决。
如果继续看4100动画,会发现5130361~5130364就是投机处决动画的ThrowAttack Behavior AtkParam_NPC ID。配置了4个AtkParam,是因为梅瑟莫的投技伤害由Strike+Thrust+Fire(small)+Fire(big)四种伤害类型组成,其中Fire(small)被调用多次,以实现“被火焰逐渐灼烧”的伤害表现。
总之,看到这一步,不仅知道了为什么梅瑟莫投技难躲,还知道了如何调整这一配置。将5130360这一投技判定形状从sphere改为capsule,并修改radius使其符合手部大小,就会减少被梅瑟莫虚空抓取的表现。
当然,逆向思维一波,将玛莲妮亚的投技hit判定也改成巨大无比的sphere,让玛莲妮亚的投技变得和梅瑟莫一样难躲,也不失为一种制作Mod的思路。
评论区
共 9 条评论热门最新