《阿玛迪斯战记》文件格式全分析:
By 逆流而上(bsh_aoa@163.com)
2006-9-20
---------------------------------------------------------------------------------------------
(1).SF2 文件 ----- 图像与音效的杂合体
头信息基本上如下:
0x00----ID,文件类型标识 7byte
0x07----TILE宽度,2byte
0x09----TILE高度,2byte
0x0B----未知 1byte
0x0C----动画宽度4byte
0x10----动画高度4byte
0x14----帧数2byte
0x16----帧信息偏移4byte [都为0x000042bc]!
0x1a----帧信息数据块大小4byte
0x1e----图片数2byte [假设此处值为N]
0x20----图片信息偏移4byte
0x24----图片信息数据块大小4byte
0x28----TILE数量2byte [假设此处值为X]
0x2a----TILE信息偏移4byte
0x2e----TILE信息数据块大小4byte
0x32----音效数目2byte [假设为S个]
0x34----音效信息偏移地址, 也是图像数据块总大小!4byte
0x38----音效数据块大小4byte
0x3C----未知2byte
0x3E----未知2byte
0x40----未知2byte
0x42----未知2byte
后面的一直到0x42bc处都不知道 [大部分数据为0,估计没什么用]!
0x42bc---每一帧的信息偏移,比如有4个帧(0x14处),
就有4个dword的偏移值得到的偏移地址,假设为0x42c0,
则以0x42c0为基地址:
相对偏移0byte处,该帧相对屏幕水平偏移(4byte),
相对偏移4byte处,该帧相对屏幕竖直偏移(4byte),
相对偏移8byte处,该帧宽度(4byte),
相对偏移12byte处,该帧高度(4byte),
接下来的直到偏移84处,作用不知道了,
相对偏移84byte处,是这个帧有几张图片假设为m张(2byte),
接下来10byte作用不知道,
相对偏移94byte处,是该帧中的各个图片信息(每个图片有29byte):
从此处为基地址往下:
相对偏移为0byte处,为该图片的索引2byte,
相对偏移为2byte处,为该图片相对于屏幕的x偏移2byte,
相对偏移为4byte处,为该图片相对于屏幕的y偏移2byte,
相对偏移为6byte处,为该图片所处的层数(绘制顺序0表示最先绘制)2byte,
相对偏移为8byte处,为该图片绘制模式4byte :
(0x00000000--正常模式, 0x01000000--透明模式16级alpha, 0x02000000--16级Subtract,
0x03000000-- , 0x04000000-- , 0x05000000--反色模式,...)
相对偏移为12byte处,为该图片与绘制模式相关数据4byte
接下来13byte不知何用,
....重复m次!
图片信息偏移处(0x20处的偏移地址的东西)包含N个地址,分别为每个图象信息:
假设第一个地址为0xffff,以此为基地址:
相对偏移0byte处,为该图片每行有多少个tile---2byte,
相对偏移2byte处,为该图片每列有多少个tile---2byte,
相对偏移4byte处,为该图片真实的宽度4byte(tile组成的宽度可能比原先图像有效数据更宽),
相对偏移8byte处,为该图片真实的高度4byte(tile组成的高度可能比原先图像有效数据更高),
接下来12byte作用未知!
相对偏移24处,是图片中的tile索引(以0为基础),每个2byte。
Tile信息偏移处(0x2a处的偏移地址的东西):
对应的X个dword都是每一个Tile的数据偏移,
{
关于Tile中图像数据:
像素格式为:16bit X1R5G5B5;
压缩存储方式:RLE, 以0x40, 0x80, 0xC0为标识,
假设该值为0xXX;
若在[0x40, 0x80)之间,表示含有(0xXX - 0x40 + 1)个透明像素,
若在[0x80, 0xC0)之间,表示接下来含有(0xXX - 0x80 + 1)个不重复像素值,
若在[0xC0, 0xFF]之间,表示接下来含有(0xXX - 0xC0 + 1)个重复像素值,该像素值在0xXX之后.
}
音效信息偏移处(0x34处的偏移地址):
对应的S个DWORD是每个音效的数据偏移,
对于每个地址,假设为0xHHHH,
则以0xHHHH为基地址,
相对偏移0byte处,通道数;1byte
相对偏移1byte处,每个样本数据位(bit)数; 1byte
相对偏移2byte处,采样率;2byte
相对偏移4byte处,语音数据长度;2byte
接下来8byte作用不知,
相对偏移16byte处,语音数据本身!!
------------------------------------------------------------------------------------------
******************************************************************************************
{
谈谈地图:
Mapxx.FB2与对应的Mapxx.MPL, Mapxx.COD文件共同组织某一层(layer)地图画面,一般是最底层!
关于地图各个层之间关系的描述包含在: "\Scene\Mapxx.dat"中!
}
******************************************************************************************
(2).FB2文件 ----- 地图中Tile数据
0x00----ID,文件类型标识, 7byte
0x07----Tile宽度 2byte
0x09----Tile高度 2byte
0x0B----Tile数目 2byte [假设为N]
0xOD----未知 2byte
接下N个dword表示各个Tile数据偏移地址(格式同上,见".SF2文件分析")。
-----------------------------------------------------------------------------------------
(3).MPL文件 ----- 地图中Tile排列索引
0x00----ID,文件类型标识, 3byte
0x03----未知,4byte
0x07----每行TILE数目, 2byte
0x09----每列TILE数目,2byte
接下来N(为.FB2中0x0B处的值)个WORD为TILE索引号!
-----------------------------------------------------------------------------------------
(4).COD
-----------------------------------------------------------------------------------------
(5).CAI 和 .CBK ----- 动画描述文件,脚本
有待于好好分析!!...
-----------------------------------------------------------------------------------------
(6).MOV ----- CG文件,可用BINK播放
(7)....
-----------------------------------------------------------------------------------------
未完待续。。。。
下面的各种类型文件相对而言,与游戏项关系比较大,
适合用来学习探讨商业游戏组成部分,学习制作游戏必备知识,
....正好在制作游戏~~~学习学习了! :)