昨天整理了一下,把一点修改心得丢上来,是关于data.dat结构的。如果后面有什么更新,就在这个帖子更新了。
准备知识
游戏里卡片共有1114张,其中4张是token,771张可用卡。其余都被隐藏起来。
卡背也算一张卡的话,那就是1115张。
这里的数据按用途来分基本上只有2种:数据的内容和数据的索引。其中索引可以简单理解为开始位置。当然索引本身也是数据。
通常游戏运行的时候,需要加载一个媒体资源的时候,主程序会先获得索引,知道去哪里找,然后再去相应的位置读取。
以编程角度来看,对于数据是长度变化不大的,通常程序员会给它设置一个固定的长度限制,比如卡名,那么其计算索引是很简单的,基本不需要存储这种索引数据。但是如果数据长度变化太大,比如卡的描述,可以很长或者很短,那么就要存储这类索引数据,为了节省开销。
数据都是二进制编码存储的。使用16进制编辑器进行编辑的话,那么数据都是16进制表示。这里用0x前缀区别10进制来表示16进制。由于2个16进制位就对应1个字节,所以这里为了直观,每2个16进制位就用空格隔开。实际要用来搜索、读写的时候,记得去掉空格。比如16进制数0x2A582318,就写成0x2A 58 23 18。
卡片默认顺序为日文卡名首假名的五十音升序,依据是data.dat\card\list_card.txt。通常第一个就是「地缚灵」,第二个就是「装甲海星」,最后是三神卡加上4种token。
由于文件是按单字节写入的,因此在编辑器看到的数据是「写入状态」的次序。是由我们原来的写入文件之前的数据(叫做「写前状态」)进行变换来的。比如数据0x2A 58 23 18,它的写入状态就是0x18 23 58 2A。变换规则是从串结尾开始每2位取出来倒序排列,可逆。
data.dat
存放着所有程序相关的媒体数据(除了声音数据)。
是由许多子文件打包来的。
开头部分就存放着里面所有子文件的索引。
使用专用提取器能够解包。
不过这个提取器功能有限,没有展示或导出每个子文件的索引的功能。
bin#\card_desc***.bin
分别存放着6种语言的所有卡片的描述数据。
每张卡的数据存放空间没有长度限制。
每张卡之间用若干个分隔符0x00隔开。
原文件中分隔符个数非固定。有可能前后两张卡是由1个、或是2个、甚至3个分隔符隔开的。
我的改版把所有卡之间的分隔符个数改为了1个。
bin#\card_indx***.bin
分别存放着6种语言的所有卡片的描述的索引数据。
每个数据长度为4字节。
和card_desc***.bin一起来用来加载卡片描述。
bin#\card_id.bin
存放着所有卡片的编号数据。
每个数据长度为2字节。
card\list_card.txt提供了每张卡的编号(中括号括起来的数字)。
数据的范围是0x00 00~0x 09 55,10进制范围是0~2389,其中有大量编号是没有卡对应的。
卡组文件有用到这些编号数据。
另外这个属性对于程序员应该是方便于索引指定卡、比如展示卡。
bin#\card_intid.bin
存放着所有卡片(包括游戏中未实装的卡,约2300+)的整数编号数据。
每个数据长度为2字节。
card\list_card.txt提供了每张卡的整数编号(冒号前的数字)。
存放顺序是编号顺序(开头「蓝眼白龙」的),包括了游戏中没有入编的卡。
数据的范围是0x00 01~0x 04 5A,10进制范围是1~1114,和卡片是一一对应。
整数编号这个属性就是指程序要用到的卡进行编号得到的,为了程序而设计的。
与此区别,编号是卡片本身脱离程序就有的。
因此这里面,有大量的0x00 00,这是那些有编号但没有编入游戏里的卡的整数编号。
这个属性对于程序员应该是方便于卡表展示的时候用吧,用于遍历。
bin#\card_name***.bin
分别存放着6种语言的所有卡片的名字数据。
每张卡的数据存放空间长度为64字节,填充符为0x 00。
bin#\card_pack.bin
顾名思义,「卡包」。存放着所有卡片的卡片来源类型数据。
经测试,改动会影响卡片的来源类型属性,是海马包、城之内包、还是其他特殊的。
游戏里组卡界面中、可以编入卡组的卡是有来源限制的、比如token类不能入组。
对于城之内,依据选项,海马包的卡可能不能编入卡组。
所以改动这个文件,可以解锁隐藏可用的卡片,从原来的771扩增到1114张。
不过实际有意义的扩增的话,应该是1110张(排除掉4张token类)。
另外扩增后,新卡只会显示为token卡图,毕竟原data.dat中就没有这部分卡图资源。
范围是0x00~0x07?属性有7种状态?
每张卡的数据长度为1字节还是2字节?
bin#\card_pass.bin
未知,未测试。mod似乎不怎么需要这个文件。
bin#\card_prop.bin
存放着所有卡片的卡片属性数据。
每个数据长度为4字节。
开头0x00 00 00 00是卡背的卡片属性。
bin#\dlg_text***.bin
分别存放着6种语言的所有游戏文本数据。
每个数据存放空间没有长度限制。
每张卡之间用若干个分隔符0x00隔开。
bin#\dlg_indx***.bin
分别存放着6种语言的所有游戏文本的索引数据。
每个数据长度为4字节。
和dlg_text***.bin一起来用来加载游戏文本。
bin#\card_sort***.bin
存放着所有卡片的排序数据。
每个数据长度为2字节?4字节?未测试。
card\list_card.text
所有卡片的编号、整数编号、卡名、卡图名表。
card\******.bmp
所有可用的大卡图(772+1张卡背+4张token)。
怎么多了1张?
大小不是固定的,有部分多或少几个字节。
mini\******.bmp
所有可用的小卡图(772+1张卡背+4张token)。
怎么也多了1张?
大小不是固定的,有部分多或少几个字节。
cursor\*
光标相关数据,包括贴图、动画效果。
j\file\***_***.ydc
城之内用的卡组。
j\*
游戏界面贴图、动画效果等。
对应内容简介如下
bust_up弹出插图
deck_c组卡界面
duel决斗界面
file系统卡组
janken猜拳界面
lan_duel联机界面
list卡表界面
title标题界面
tutorial教程界面