底层 - 直读官方 - 新地图中的JPEG解析

2018-08-30  本文已影响0人  1f872d1e3817

大话2新地图放在newscene下面

以下是wangdali对新地图格式的整理,我自己也修改了一部分

***********************************************************************
Map File New Format
Dali Wang <wdl@sina.com>
2004-05-09 起稿 @Changchun
2006-02-16 整理 @Haikou
2006-02-20 整理 @Haikou

======================= MAP HEAD =============================
4字节 0.1M (M1.0) 0x302E314D
4字节 地图的宽度
4字节 地图的高度

4*n字节  地图单元的引索 n=地图的宽度/640*2 * 地图高度/480*2
==============================================================

===================MASK==============================
4字节 未知数据,包括这4字节,可跳过
4字节 mask数量n
接下来是 n * 4字节 MASK索引

只需要知道这么多,有了索引,跳到对应的位置读取mask就好了
==============================================================

======================= Unit Data ============================
4字节 地图单元引索的开始位置。
n*4字节 n为上面的值,n为0时不存在。

4字节 GEPJ (JPEG)
4字节 大小
n字节 数据

4字节 LLEC (CELL)
4字节 大小
n字节 数据

4字节 BRIG (GIRB)
4字节 大小
n字节 数据

4字节 结束单元(0x00 0x00 0x00 0x00)。
==============================================================

0.1M        新地图文件头  
Index       数据块引索

Unknown     n字节,未知用途(暂称为HEAD)

GEPJ(JPEG)  图象数据
LLEC(CELL)  地图规则,一字节代表一个游戏坐标
GIRB(BRIG)  光亮规则
:
:
:
GEPJ(JPEG)  图象数据
LLEC(CELL)  地图规则,一字节代表一个游戏坐标
GIRB(BRIG)  光亮规则

***********************************************************************

新地图的JPEG比较简单。每一个地图单元UNIT中,都保存了“几乎”完整的普通JPEG数据,不想旧地图head 和 body分开。

但是这部分的JPEG数据也需要特殊的处理
简单来说就是把JPEG数据中的FFDA数据段的长度由00 09改到00 0C,并在FFDA段的最后面加上00 3F 00。
然后开始扫描直到FFD9,把这中间所有的FF,都改为FF 00。这样处理后,就是可直接读取的JPEG数据了。

上一篇 下一篇

猜你喜欢

热点阅读