ED3Movie压缩格式分析

ED3Movie压缩格式分析

作者:leexuany(小宝)

小宝一直想收藏ED系列的资源,但正如大家所知道的,Falcom那近乎变态的裸数据、藏的严严实实的调色板、在程序里规定好的图片大小。。

直到我学会了用visual softice进行联机调试,一切似乎都并不是想象中的那样糟糕~~

不说废话啦,现在开始记录昨天一天的成果。

首先解包ED3_DT16.DAT文件(这是提纳夏路的动画包),打包格式比较简单,在原来的文章中已经说过了,当然你也可以使用GameViewer将其解包。

解包后得到302个小文件,每个文件就是一个动画帧,但大小不一,分析程序后知道,都是压缩过的。

首先看图。

数据截图图1

文件开始的2字节(红色的2C15)表示文件的大小,文件的实际大小是2C16,最后一字节是00,无实际意义

剩下的部分就是压缩后的数据,由控制字符(绿色、蓝色)和数据(黄色)组成。

控制字符的格式如下:

控制字符图示
图2

控制一:
若A1位为1则表示从帧内已解压数据中复制一块数据到当前的数据指针。指针前移字节数为B1B2B3B4B5C1C2C3C4C5C6C7C7。需要复制的字节数比较麻烦,需复制字节基数为A2A3+4。D1~D8是D的8个位,E1~E8是E的8个位,如果D符合(D&0xE0)==0x60则需复制字节数为基数+(D&0x1F),如果E也符合(E&0xE0)==0x60的公式,则在D的基础上再增加(E&0x1F),依次循环,直到W不符合上述公式。

是不是有些乱,那我举个例子,看偏移量0000030D开始的控制字符E0 04 7F 68 01。E0展开是1110 0000,符合控制一中的格式,那么指针前移字节数就是0 0000 0000 0100也就是((0xE0&0x1F)<<0x8)+0x04=0x4。需要复制的字节基数为11+0100=0111,也就是0x7。0x7F符合(0x7F&0xE0)==0x60的公式,0x68也符合,但是到0x01就不符合了。所以需要复制的字节数为基数0x7加上0x7F&0x1F和0x68&0x1F,最终结果为0x2E

控制二:
重复n个字节的某个数据。
(1) 若A1为0,A2为1,B1为1,则重复B2B3B4B5C1C2C3C4C5C6C7C8+4个字节的D
(2) 若A1为0,A2为1,B1为0,则重复B2B3B4B5+4个字节的C

这个比较清楚吧,同样举个例子,看偏移量00000415处的控制字符45 06。45展开是0100 0101,符合控制二的第2种情况,重复0101+0100,即9个字节的06

控制三:
表示n个字节没有压缩过的数据。
(1) 若A1为0,A2为0,A3为1,则表示后面B1B2B3B4B5C1C2C3C4C5C6C7C8个字节是未压缩过的数据

例如,偏移量00000002处的23 07表示的就是后面307个字节都是未压缩的数据

(2) 若A1为0,A2为0,A3为0,则表示后面B1B2B3B4B5个字节是未压缩过的数据

例如,偏移量00000317处的05表示的就是后面5个字节都是未压缩的数据

控制四:
00一般作为最后一个字节填充,无实际意义

结束语:

哇!是真的好乱,还是我的表达如此糟糕?感觉我的代码比这个描述清楚,但估计如果没有这些描述,大家也看不明白,所以还是不贴出来了,很多细节不够专业。

好啦,按照惯例,最后送出的依然是转换出的图片(这次的是个小GIF)

animation

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值