2013-01-09 16:45

新浪游戏 > 单机游戏 > 火炬之光2专题站 > 游戏攻略 已有_COUNT_条评论

《火炬之光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窗口,并显示类似如下的报错情况:

游民星空

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

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

  <INTEGER>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文件夹的随机掉落文件一般只到某类物品,比如UNIQUE WAND,这时候游戏就会调用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.节点性质:TYPE ID为类型编号,TYPE NAME为类型名(很多都是UNKNOWN),Object GUID为此节点的GUID,Object Name为此节点名字(无关紧要),Child Count为子节点的个数,Parent Object为父节点的GUID。

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

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

  需要着重说明的两个TYPE ID:

  36: LOGIC GROUP

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

  这一个节点中Child Count项变成了Logic Group Count。其每一个子节点为一个逻辑,每个逻辑可以完成一项或几项功能,最简单的为指向功能:

游民星空

  右上角的Target Object GUID即为指向的单元。左上角为此逻辑在此逻辑组(Logic Group)内的编号。

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

  35:TIMELINE

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

  其它TYPE ID中数据类型的判断:

  当前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)。

相关新闻