《艾尔登法环》Mod:解包工程篇

《艾尔登法环》Mod:解包工程篇

法环Mod制作流程其一:如何解包工程,并查看动画与配置文件。


本篇文档会介绍如何解包法环工程,从而查看并修改游戏数值、角色AI、角色动画、技能配置及关卡场景配置。


解包工具一览

工具 功能
UXM Selective Unpacker 对游戏本体进行解包和打包
Yabber 对UXM解包出来的文件进行进一步解包和打包,支持.bnd, .bhd/.bdt, .dcx, .fltparam, .fmg, .gparam, .luagnl, .luainfo, .tpf.这些格式
DSMapStudio 查看并编辑游戏内的.map地图文件、param游戏参数以及角色模型贴图等
DSAnimStudio 查看并编辑游戏内的.tae动画数据文件
DSLuaDecompiler 对AI lua文件进行反编译
ModEngine2 应用mod文件夹下的文件修改并启动法环,可建立多份Instance测试不同内容

必要:使用UXM解包本体


UXM工具

在Executable Path里索引游戏本体的运行exe,可以在View Files里进一步选择解包范围。

点击Unpack后会开始解包,解出如下文件结构。

文件夹及对应内容

Yabber:单文件解包

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文件:


这个文件就是dlc01黄金树幽影的武器名文本。

<?xml version="1.0" encoding="utf-8"?>
<fmg>
<compression>None</compression>
<version>DarkSouls3</version>
<bigendian>False</bigendian>
<entries>
<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>
<text id="1500700">Sacred Main-gauche</text>
<text id="1500800">Magic Main-gauche</text>
<text id="1500900">Cold Main-gauche</text>
<text id="1501000">Poison Main-gauche</text>
<text id="1501100">Blood Main-gauche</text>
<text id="1501200">Occult Main-gauche</text>
<text id="1510000">Fire Knight's Shortsword</text>
<text id="1510100">Fire Knight's Heavy Shortsword</text>
<text id="1510200">Fire Knight's Keen Shortsword</text>
<text id="1510300">Fire Knight's Quality Shortsword</text>
<!-- more until 68510000-->
</entries>
</fmg>

DSMapStudio:编辑地图

对于解包后的文件,DSMapStudio可以以Map为单位,索引地图模型及对应的游戏参数,查看并编辑地图数值。

m11→9000→11000389

如上图,M11是王城罗德尔,load map后可以查看map配置。图中选中的entity就是王城罗德尔大道上的腐败化身enemy。

DSMapStudio还有个重要用途,就是修改战斗参数param。以下图为例:

战灰:二连斩的配置

可以修改该战灰的稀有度、购入售出价格、是否可掉落、可附魔属性、可附魔武器种类等。

在DSMapStudio中修改后保存,文件会存到mod文件夹下。修改内容可以通过ModEngine2启动。


DSAnimStudio:编辑动画

DSAnimStudio可以编辑TAE(TimeAct Editor)文件,从而控制判定帧、取消帧、无敌帧、SPEffect、bullet、SFX、sound等所有由动画帧驱动的内容。

  • Activating invulnerability frames.
  • Parry windows
  • Applying an “SpEffect” (special temporary statuses such as ring effects, poisoning, buffs, AI triggers, etc)
  • Allowing animation cancelling
  • Setting the flag for YOU DIED and respawning
  • Creating “SFX” / “FFX” (both refer to the exact same files: visual effects)
  • Playing sound effects such as footsteps, sword swooshes, etc.
  • Invoking an attack behavior (does damage to opponent, drains stamina from player, etc all in one event)
  • Invoking a “bullet” (projectile) behavior (fires projectile, drains stamina from player, etc all in one event)
  • Invoking a “common” behavior (like attack behaviors but for simpler things such as falling on someone’s head causing stagger)
  • Creating motion blur on weapon swings
  • Setting the opacity of a character (used for getting summoned into other worlds, dying, etc)
  • Setting attack aim tracking speed of a character
  • Playing a “RumbleCam” file (relative screen movement e.g. Smough’s footsteps shaking screen)
  • Playing additional animation layers (e.g. all of Gwyn’s animations have events to play his clothes-blowing-in-wind animation layered on top of the other animations)
  • Adjusting model render masks (showing/hiding specific parts of characters)
  • Many more that we haven’t even figured out yet.

DSAS唯一不支持的FS游戏是《黑暗之魂2》,因为魂2是用其他引擎制作的。

对于已经解包的工程,可以通过Files→open打开chr.anibnd.dcx,查看该角色的动画数据。

角色的一个行为=动画数据(hkx)+动画帧驱动数据(tae),DSAS可以直接编辑tae,而hkx需要导出到Blender后修改再打回去。

DSAnimStudio视图介绍
  • 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 快捷键)打开。


DSLuaDecompiler:编辑AI

通过Yabber解包出的Lua,需要进一步反编译才能被阅读。这一步需要DSLuaDecompiler,对AI Lua文件进行反编译。

2120是玛莲妮亚chrID,212000_battle.lua是玛莲妮亚战斗AI

FS游戏的AI逻辑介绍:如何设计有“对话感”的BOSS?《只狼》Ai完全拆解。

在HTN框架下,以任务(条件→影响)为单位,AI会一直挑选符合条件的任务加入各个计划的任务池。AI有几套优先级不同的计划,在不因优先级发生跳出的情况下,会从该计划的任务池里随机选择一个任务进行执行。计划内可以注册函数、声明计数器、声明计时器等。

可以通过内容已知的SPEffectID或动画ID反过来慢慢看AI逻辑,直接从头看会比较吃力。


DSMS→DSAS工作流-梅瑟莫为例

制作Mod,尤其是涉及动画的Mod,需要将DSMapStudio和DSAnimStudio配合使用。接下来以梅瑟莫的投技为例,介绍这一工作流。

梅瑟莫的投技表现和玛莲妮亚非常类似,都是前冲、抬手然后抓取判定,但为什么梅瑟莫的抓取要难躲得多?

针对这一需求,需要查找到梅瑟莫角色的抓取动画,并查看该动画配置的tae数据。


DSMS:查找chrID

查找ID有许多办法,此处提供三种最通用的思路:

  1. Rodan’s Juicy Elden Ring Doc:汇总了VFX、TAE、BEH、HKS和PARTS五类文件的ID和对应内容介绍,但截止到24年8月没有包含DLC内容。

  2. DSMS的Model Editor:可以通过角色的英文名查找对应chrID,存在多个时需要分辨哪个是base。基本是第一个。

  3. DSMS的Map Editor:不确定要编辑的对象用了哪个chrID时,可以通过map反查。找到物种包藏库这张map,通过英文名查找entity,或者自己手动沿着地图一路“走”过去,找到entity并查看Model Name。



DSAS:查找抓取技配置

查看5130的动画数据,找到投技动画,看到这一配置时,“为什么梅瑟莫投技很难躲”的答案已经呼之欲出——

a000_003022配置

如果进一步追究,这个attack behavior的BehaviorJudgeID为360,它的判定配置为5130360,即chrID+BehaviorJudgeID。


DSMS:查找atkparam

在DSMS的Param Editor下找到AtkParam_Npc,这一文件管理atk的hitbox&damage。查到5130360配置,它就是梅瑟莫投技判定的“罪魁祸首”——

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使其符合手部大小,就会减少被梅瑟莫虚空抓取的表现。


作者

UyNad

发布于

2024-08-01

更新于

2024-08-07

许可协议

CC BY-NC-SA 4.0

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×