魔力宝贝/石器时代图档格式压缩算法 石器时代 魔力宝贝

下文分析了CrossGate(魔力宝贝)的文件格式,因为StoneAge(石器时代)和它差不多(最初均为同一小组作品),所以一并介绍。
原文作者为梦见草,由野风信子整理和完善。

一.图片数据
图片地址文件
CrossGateGraphicInfo*_*.bin
StoneAgeAdrn_*.bin

这个文件存放了图片的地址索引,由若干个大小一样的块组成,每个块长度为40字节(StoneAge为80字节),格式如下:

字段类型内容说明字节
LONG序号;图片的编号4
DWORD地址;指明图片在数据文件中的起始位置4
DWORD块长度;图片数据块的大小4
LONG偏移量X;显示图片时,横坐标偏移X4
LONG偏移量Y;显示图片时,纵坐标偏移Y4
LONG图片宽度;...4
LONG图片高度;...4
BYTE占地面积-东;占地面积是物件所占的大小,1就表示占1格1
BYTE占地面积-南;同上1
BYTE标志;用于地图,0表示障碍物,1表示可以走上去1
BYTE[5]未知;在StoneAge中本字段长度为45字节5
LONG地图编号;低16位表示在地图文件里的编号,高16位可能表示版本,非地图单位的此项均为04

其中偏移量XY是用于图片定位的,比如X=-18,Y=-19,如果将图片显示在(100,100),那么实际位置应该是(82,81),这样才可以和其它图片协调,在做人物动作gif的时候必须用这个参数来调整每一帧的位置,否则动作是抖动的,做地图也需要,否则会错位。

图片数据文件
CrossGateGraphic*_*.bin
StoneAgeReal_*.bin

这个文件包含了所有图片的原始数据,每个数据块由数据头+数据组成,每个数据头长度16字节,格式为:

字段类型内容说明字节
BYTE[2]魔数;固定为'RD'2
BYTE版本;偶数表示未压缩,按位图存放;奇数则表示压缩过1
BYTE未知;...1
LONG宽度;...4
LONG高度;...4
LONG块长度;数据块的长度,包括数据头本身的长度(16BYTE)4

后三项和地址文件中的一样,图像数据紧跟在数据头后面。
例如,要解开第100个图片,首先在GraphicInfo_*.bin里定位到第100条记录,即偏移(40*100)字节的位置,根据读出的地址在Graphic_*.bin中找到对应的数据块,就可以读出图片数据了。
绝大部分图片数据都是压缩过的.

二.动画信息
动画地址文件
CrossGateAnimeInfo*_*.bin
StoneAgeSpradrn_*.bin

存放每个动画在动画序列文件中的地址索引,每个数据块大小12字节

字段类型内容说明字节
DWORD序号;动画序号4
DWORD地址;指明在动画信息文件中的地址4
WORD动作数目;表示该角色有多少个完整的动作(包括各个方向)2
WORD未知; 2
动画信息文件
CrossGateAnime*_*.bin
StoneAgeSpr_*.bin

该文件存放了全部动作的图片序列,每个动作由数据头+若干序列号组成,数据头长度12字节。

字段类型内容说明字节
WORD方向号;0-7分别表示8个方向2
WORD动作号;表示该动作的含义,比如坐下或者走路2
DWORD时间;该动作完成一遍所需时间,单位为毫秒4
DWORD帧数;该动画有多少帧,决定后面数据的大小4

某些动作号不是所有角色都有,比如跑步前的准备动作。

有多少帧,后面就跟有多少个序列号,每个序列号长10字节。

字段类型内容说明字节
DWORD图片号;该帧所使用的图片4
CHAR[6]未知;...6

图片号就是该帧所用的图片序号,用图片数据里说的方法就可解出每一帧的图片数据。。

例如要解出340号角色的1方向的第5个动作,先在AnimeInfo_*.bin中定位到第340号数据块,即偏移(12*340)字节的位置,读出地址和动作数,然后根据地址在Anime_*.bin中定位到对应的位置,然后从该位置开始查找方向1动作5的序列,根据帧数读出每一帧的图片号,通过图片号解出对应的图片就行了。

其中未知的字段表示我还不知道用处的。

注意:CrossGate的动画序列地址文件AnimeInfo_*.bin,可能由于开发时的某些原因,造成存放了3遍序列,并且按前两遍解出的动画是错误的,要以第3遍为准,第2375号角色才是第0号,其他的版本没有这问题。

三.地图格式

地图文件就是map目录下的那些,CrossGate的地图档在最前面有12个字节的文件头,内容为"MAP"(后9字节为0),StoneAge则没有文件头,其它完全一样。

地图档格式
字段类型说明字节
DWORD地图长度-东(W)4
DWORD地图长度-南(H)4
BYTE[W*H*2]地面的数据,每一个单位2字节,为0表示无地面N
BYTE[W*H*2]地上的物件等,每一个物体2字节,为0表示该处无物件N
BYTE[W*H*2]地图标志,每一个单位2字节,具体不清楚,只知道对会引起地图切换的地方有标识N
地图是45度视角的四边形,数据的存放顺序是从东到西,由南至北,起点为左边角(东0,南0)。
假设读入的3X3地图数据顺序为123456789,对应的地图显示:
3
26
159
48
7
这样读出来的数据是地图编号,在图片数据中说过,图片地址文件的每一条记录的最后一个字段就是地图编号,现在就是根据这个编号反查出对应的图片序号,将它显示出来,由于游戏本身没有地图索引文件(那是在运行游戏的时候生成的),所以要自制一份方便查找,这里要注意的是地图编号并不是连贯的,比如StoneAge最大的编号为41000,实际上用到的只有1万多点,中间有很多编号是未使用的。前面说过,每个图片都有偏移量用于对齐,画地图的时候也需要的,不过这里有点问题,若只是将偏移量加上坐标,地面没有问题,而建筑物纵坐标则会错位,我并不知道正确的做法,我是这样处理的:
假设纵坐标偏移量为y,图片高度h,要画的坐标为y0,那么实际的坐标y1就是
y1=y0+h-47+y
47是一个单位地面的高度(所以地面不必这样处理,因为h-47=0),这样做可以基本对齐,希望有朋友提供更标准的方法。另外,关于缩略图,就是将每个单位(占地面积1X1)缩成如下的四个点:
 □
□□□
如果一个物件面积为2X1,那么就是
魔力宝贝/石器时代图档格式压缩算法 石器时代 魔力宝贝
   □
 □□□□
□□□
缩略图中每个图片都只用一种颜色表示,而这个颜色好像也是游戏自动生成的,所以要做缩略图的话,自己要制作一份颜色表。

  

爱华网本文地址 » http://www.aihuau.com/a/25101010/31776.html

更多阅读

WinRAR压缩文件被设了密怎么破解 winrar带密码压缩

WinRAR压缩文件被设了密怎么破解——简介有时候我们会从网上下载一些WinRAR格式的压缩文件,当进行解压缩时才发现被设置了解压密码,在这种情况下,我们难到就束手无策吗?当然不是,下面小编就给大家讲解一下如何破解WinRAR格式压缩文件的密

怎么将word保存/转换成PDF格式 word转换pdf格式软件

怎么将word保存/转换成PDF格式——简介 首先,说说为什么要保存成pdf呢? 先问大家一个问题:你是否碰过这样一种现象——在自己的电脑上把文档写好了,然后拿到其它电脑上去阅读或者打印,你发现字体变了、格式乱了。总之版式大乱,面目全非

怎么更改文件格式 win10怎么修改文件格式

怎么更改文件格式——简介在Windows操作系统中文件的格式由其文件名来确定,更准确的说,是由文件名中的后辍来决定。例如常见的Word文档格式,其后辍名为“*.doc”或者“*.docx”。修改文件格式常用的方法有直接修改文件名后辍法和利用软

怎样将docx转换成doc格式? 怎样将docx转换成doc

怎样将docx转换成doc格式?——简介docx与doc格式都是Office办公软件word创建的文件格式,docx是Word 2007和Word 2010默认的文档格式;而doc则是Word 2003的文档格式。Word2007和Wrod 2010可以打开docx、doc文档,但Word 2003则无法打开docx

声明:《魔力宝贝/石器时代图档格式压缩算法 石器时代 魔力宝贝》为网友只要我想分享!如侵犯到您的合法权益请联系我们删除