樱花大战资源分析之三 ALL和CMP文件格式分析

樱花大战资源分析之三 ALL和CMP文件格式分析

作者:leexuany(小宝)

先说几句题外话,除了背景音乐和SPR文件以外,樱花大战1代就没什么难度了,此系列以后的重点是樱花2。可能有的朋友要问,有没有樱花3、4啊?这个不好说,也许会有,也许没有,因为我手上没有3代和4代的盘,下载又需要天时地利人和等诸多因素,所以我只能说,尽我所能吧。

 

ALL is all in one.

ALL的意思就是全都在里面了,也就是资源包。如果你对微机原理中的内存分页有所了解,那么这个格式理解起来就会更容易。在我见过的大多数打包格式中,文件都是紧密排列以获得打包后文件最小的目的。而这个ALL资源包却把所有的文件分割成2048B(2KB)的大小,不足2KB的以0补足,于是ALL文件的大小肯定是2KB的整数倍。并且不将索引包含在内。

造成这些特点的原因只有一个,平台移植后遗症。OVERWORKS在重制游戏时为了极大限度的利用原有的资源,所以总是按照原平台的思路来想问题,而实在行不通的时候就只能再按照新平台(PC)的思路来做,于是乎PC版的樱花大战看起来总是不那么PC。

这最典型的例子之一就是樱花大战2所有ALL文件的索引竟然都是硬编码在程序中的。仅索引本身就53KB的数据,天啊,那样的程序要如何写呢?完全要手动录入吗?写那种程序的人真是疯子。

当你遇到疯子时,你要么躲起来,要么比他还疯。那天下午闲着没事,全部手动Dump出来了,一共98个,如有需要可从(http://leexuany.ys168.com/)下载。

索引的格式如下:
struct all_index {
    unsigned int page_number; // 文件所在页号,乘以2048就是文件的偏移量
    unsigned int file_size;   // 文件的大小
};

 

CMP is compress.

与ALL一样,CMP也能从名字猜出含义——压缩的文件。任何文件都能压缩成这个格式,就好像任何文件都能压缩成rar格式。所以这里仅仅是介绍CMP本身,至于解压缩以后的文件是做什么的,就不好说的,可能是图片也可能是别的信息。

除了文件夹内后缀是CMP的文件外,在ALL中也有使用,但CMP文件本身不包含文件标识,因此是否对其进行解压缩,都需要人工分辨,否则程序可能出错。

在CMP中,第一个字节包含了很重要的信息,如果最高位(第7位)为1,那么文件的原始大小为CMP文件的第2~4字节,压缩数据从第5字节开始;如果最高位(第7位)为0,那么文件的原始大小为CMP文件的第5~8字节,压缩数据从第9字节开始,第2~4字节忽略不计。

CMP文件第一字节的第6~4位指出了使用哪种解压算法。其中取0~3时分别对应4种解压算法,4~7则没有对应的算法,可以直接忽略掉,因为在樱花大战2里它不是有效的压缩类型。也就是说如果取到4~7了,那么那肯定不是一个CMP文件。

CMP文件第一字节的第3~0位是解压缩时用的一个参数。

至于具体的4种算法,我还没时间去仔细的看,也用不着看,反正我的目的只是提取出来,干脆在代码里嵌入几段汇编就OK啦。

如果你还有什么不明白的地方,可以直接查看源代码,解压缩代码是跟前面的索引文件一起打包上传的。下载地址同样是(http://leexuany.ys168.com/)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值