您的位置首页百科知识

《火炬之光2》各类型MOD文件修改方法

《火炬之光2》各类型MOD文件修改方法

MEDIA文件夹内的文件大致有这些类型:DAT,LAYOUT,RAW,MESH,HIE,TEMPLATE,ANIMATION,SKELETON等.

除了以上这些类型外,还有图片文件PNG和DDS,字体文件TTF和FONT,这两类就不多做介绍了.

注意:所有文件名和后缀名都必须是大写,否则游戏无法识别!!!

1.DAT文件

DAT文件是当前可以MOD最主要的部分,也是最容易修改的部分,多数MOD教程都有对特点DAT文件的修改介绍,所以这里就只介绍一些基础性的知识.

DAT文件首先需要使用dat2txt转换成txt文件才能进行修改.新建txt文件也可以,但是要保证编码格式为UTF-16,如果你没有这个能力,还是修改转换过来的txt文件来得简单.dat2txt软件建议使用py版本的,因为可以看到源代码,并且有tl2_dat_strings.txt文件(exe版本不确定是否有),会很有优势.

DAT文件的结构是一个嵌套型的结构,使用[XXX]...[/XXX]的结构来进行嵌套,其中XXX为相应嵌套关键字,省略号里的内容为此关键字下定义的数据.具体什么时候需要进行嵌套,请自行参考相似文件.

一个DAT文件的嵌套结构可能是:

[A]

...

[B]

...

[/B]

...

[C]

...

[/C]

...

[/A]

这样的多层结构,甚至更加复杂,所以在修改这样的文件时,很可能因为嵌套对应错误而发生无法转换的情况(技能修改常出现这个问题).

当你嵌套结构有误时,其报错方式是停留在dos窗口,并显示类似如下的报错情况:

因此,只要你看见lineXXX的错误,你直接到对应行找嵌套错误就可以了.

对于DAT文件内的一行数据,比如:

STRENGTH_REQUIRED:30

其中<>中的内容是数据类型

,包括:

INTEGER:整型,也就是整数,一般来说应该是32位的,范围为-2,147,483,648到2,147,483,647.但是部分GUID的类型也是INTEGER,其实际为64位整型,也就是INTER64

INTEGER64:64位整型,范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807.所以写GUID时千万别超过这个范围.

FLOAT:浮点数,也就是小数.

STRING:字符串型,也就是一组字符,比如一个路径,一个名字等等.

BOOL:布尔型,只有两个值,true代表真,false代表假.

TRANSLATE:翻译型,也就是显示在游戏中的文字,如果是中文版的游戏,这一项可以为中文.此外这一项还可以使用一些特定的关键字来调用游戏内部参数,也可以用十六进制的颜色表示来设定显示颜色.

<>和:之间的部分(例子中STRENGTH_REQUIRED)是关键字:

所谓关键字,就是定义这一项属性是什么,比如STRENGTH_REQUIRED就是这件装备的力量要求.

一般关键字的选择只能从同类文件中寻找,因为你所写的关键字只要和系统内设定的有一点点不一致,就无法生效,并且有可能导致无法转换回DAT文件.

但是有些时候盲目地找关键字会很麻烦,所以这里有一个小技巧:在tl2_dat_strings.txt中找,这个文件在py版的dat2txt中有.

tl2_dat_strings.txt中列出了所有已经解析出来的,可以转换的可能关键字

,如果某个关键字不在这个列表里,其在最后的txt文件中一定是以hash码的形式存放的,比如0x9b4df640.

:后的部分是该属性的具体值:

必须要满足该值与数据类型的一致性才能进行转换.

2.HIE文件

MEDIA文件夹内的HIE文件只有两个:FEATURETAGS.HIE和UNITTYPES.HIE,前者可能是定义一些物件的,后者是定义物品类型的.

HIE文件也可以使用dat2txt进行转换.

3.TEMPLATE文件

TEMPLATE文件是定义地图类型的,完成部分地图参数,地图随机性,地图声效,光影等方面的设定,上一级文件是DUNGEONS文件夹内的文件,下一级文件是通目录下子文件夹内的LAYOUT文件.

TEMPLATE文件也可以使用dat2txt进行转换.

4.ANIMATION文件

ANIMATION文件是定义模型动作参数的文件,可以使用dat2txt进行转换.1代的模型有类似的文件,不过可以之间用记事本打开,移植时需要注意二代的ANIMATION文件会多一些参数,需要手动添加.

5.SKELETON,MESH文件

这两个文件都是需要3D模型技术的,我并不会修改.1代模型移植时,两者都可以直接移植.

6.RAW文件

MEIDA文件夹下的RAW文件一共7个,RAW文件可以使用raw2txt进行转换,转换后的文件格式与DAT文件转换后的文件格式类似.

RAW文件是类似于注册表的一个文件,用于将新添加的项进行注册,有些项目如果不注册,则添加无效.

不同的RAW文件的注册方法不同,请根据同文件下其它项目的注册方法进行注册.

由于RAW文件有很多项目的含义仍不清楚(UNKNOWN项),所以当你要新加项目是,选用最接近项目的参数即可.

RAW文件还负责最底层的随机,比如SPAWNCLASS文件夹的随机掉落文件一般只到某类物品,比如UNIQUEWAND,这时候游戏就会调用RAW文件中的RARITY参数进行掉落,RARITY参数与WEIGHT参数效果类似,越大掉落概率越高.

各个RAW文件注册的内容:

AFFXIES.RAW:注册词缀,也就是AFFIXES文件夹下的内容,WEIGHT同样决定了词缀随机到的概率.

MISSILES.RAW:注册弹道,也就是MISSILES文件夹下的内容.

ROOMPIECES.RAW:注册场景物品,也就是LEVELSETS文件夹下的内容.

SKILLS.RAW:注册技能,也就是SKILLS文件夹下的内容.

TRIGGERABLES.RAW:注册触发器,也就是TRIGGERABLES.RAW文件夹下的内容.

UI.RAW:注册用户界面,是UI文件夹下的LAYOUT文件.

UNITDATA.RAW:注册单位,是UNITS文件夹下的内容,包括物品,怪物,人物,触发装置.

7.LAYOUT文件

LAYOUT文件需要使用layout编辑器来进行修改,由于当前该编辑器功能很弱,所以可以修改的内容很少.当前所能做到的只有学习现有layout实现新功能.

首先介绍一下layout编辑器的界面:

1:菜单栏:需要注意的是上面有搜索功能,初步确定想要修改的内容在哪就靠它了.

2.LAYOUT文件结构树状图:定义了一个树状的结构,子节点可以看作是父节点的补充定义.

3.节点性质:TYPEID为类型编号,TYPENAME为类型名(很多都是UNKNOWN),ObjectGUID为此节点的GUID,ObjectName为此节点名字(无关紧要),ChildCount为子节点的个数,ParentObject为父节点的GUID.

4.已设置属性:也就是在这一个项目中已经进行设置的属性,最左边的X可以删除这一行属性,然后从左到右是属性编号,属性名字(可以自己设定),属性数据类型(可以自己设定,但可能引起错误),数据值.

5.未设置属性:也就是在这一个项目中可以进行设置的属性,最左边的+可以添加这一行.

需要着重说明的两个TYPEID:

36:LOGICGROUP

这个类型是定义逻辑关系的,比如一个按钮按下后执行怎样的操作等等,当前可以做的只有使用原有的逻辑来完成新的功能.

这一个节点中ChildCount项变成了LogicGroupCount.其每一个子节点为一个逻辑,每个逻辑可以完成一项或几项功能,最简单的为指向功能:

右上角的TargetObjectGUID即为指向的单元.左上角为此逻辑在此逻辑组(LogicGroup)内的编号.

下面的每一项为一个逻辑,也就是当指向单元满足了Event项目内设定的内容时,TargetGroup所指向的单元执行Action内指定的操作.

35:TIMELINE

这个类型是定义时间轴的,里面的内容可能有所缺失,暂时修改起来有一定难度.

其它TYPEID中数据类型的判断:

当前layout编辑器非常粗糙,很多属性都是没有名字,没有类型(默认为BINARY),这对我们修改layout文件很不利.

这里有一些小技巧可以判断属性的类型,但是在改变类型前

一定要切记备份layout文件和layout编辑器下的ObjectMetadata.xml和NameMappings.xml文件

.因为有些时候错误的数据类型会导致layout文件损坏以及layout编辑器工作不正常.

首先,当你看见XX-00-XX-00-XX-00-XX-00这样的数据时,你可以尝试将类型改为STRING,一般来说就能出现正常的字符串.但是有些时候并不会有效,这时候你可以尝试删掉最开头的XX-00-,再进行转换.这是因为,有些项目中会存储这个字符串的长度(十六进制),也就是最开始的XX-00,你可以修改后,自行计算长度在转换回BINARY后添加.

其次,当你看到XX-XX

-XX-XX

的数据时,你可以尝试选择INT32和FLOAT类型,具体选用哪种可以根据标绿的四个值来判断,如果全为0或者全为F,一般是INT32类型,否则为FLOAT类型,当然,你转换数据后,也可以从数据是否合理(比如特别大或者特别小的数据一般是错误的)得到一个大致的判断.

记一个XX为长度1的话,如果数据长度为4的倍数,也就是4n时,你可以尝试FLOATXY(8),FLOATXYZ(12),INT32XY(8),INT32XYZ(12).

如果数据长度为4n+2时,一般为float[]和int32[],其中最开始的两个长度为后面的项目数(n).

更多相关内容请关注:

火炬之光2专区