|
前言
很多朋友都会解包WDF文件,但大部分人是知其然不知其所以然。今天,小宝就要带大家进入WDF的内心世界。可能会涉及一些简单的专业知识,不过不用担心,认真听讲就一定能学会的。
为什么要打包
细心的朋友可能还记得小宝说过,网易在开发游戏的时候各种资源是不打包的,只有发布客户端的时候,才把资源按用途打包成WDF格式。
这样做的好处多多。
开发期是资源的不稳定期,因为这时的资源是需要频繁变动的,比如逍遥生的颜色不好看,飞燕女少画了一只耳环等等。那么让这些资源一个个的躺在硬盘上是最好的选择。
发布时打包的好处也是显而易见的。
首先,专业。让几千个小文件同时安装到用户的硬盘上带来的效果并不是气势磅礴,而是不专业。因此,很多厂商都有自己的打包格式,比如大宇的TSW、Falcom卡卡布三部曲的LB、吉里吉里的XP3等等。
其次,效率。合理设计的打包格式有利于文件的检索和加载。我曾经试着运行解包后的大话3,跟打包时相比效率差了很多,根本不在同一数量级上。当然不排除我笔记本的内存太小而加剧了这一效果。
最后,安全。打包对保护自己的资源不被轻易窃取还是起到了一定的效果。
WDF格式简介
网上对这个格式的记录还是比较多的,所以这里只做简单介绍,格式如下:
4字节 文件头 PFDW
4字节 子文件数目 size
4字节 索引表偏移量
N字节 文件主体内容,N=文件大小-12-16*size
16*size字节 索引表
而索引表中记录了每个文件的ID、包内偏移量、文件大小等信息。游戏本身正是通过检索这个索引表来读取资源文件的。
包内偏移量和文件大小都好理解,可是那个ID是什么呢?
所谓ID就是文件的身份证。打包程序根据文件在硬盘上的路径(实际上是相对路径)为每一个需要打包的文件生成一个唯一的ID,在WDF包内,这个ID就表示这个文件。
解包WDF文件
根据WDF包的特性,我们在不知道包内文件的原始文件名的前提下,我们仍然可以解包,也就是类似A-wdf这样的工具。解包出来的文件名类似0895-5983686a.was。命名规则比较简单,0895是文件在索引表中的编号,5983686a是文件的ID号。
可是这么长的ID不便于记忆和识别,所以逍遥出过一个注释工具来帮助大家分别was文件。
以上的解包都是在不知道原始文件名的前提下进行的,但是如果我们知道了每一个文件的原始文件名,那么我们就可以将WDF包内的资源还原到打包之前的状态,即资源在开发人员电脑上的样子。
魔法还原
想看看那些资源在开发人员的电脑上是怎么存放的吗?那么就跟我一起来施放魔法,将其还原吧。
当然你需要一根魔法棒啦,就是这个RecoverWDF
请到http://leexuany.ys168.com/下载,目前仅提供shape.wd5的文件列表。

图1
按照提示填好所有选项,开始解包。
解包后的目录如图:

图2
其中0500~0507分别对应一种坐骑,tcp就是大家熟悉的was格式,其他的大家先自己摸索,如果全让我告诉你,那多没意思啊。
=================================================================================
专业知识总结
下面这些都是基本知识,学计算机的话都会学到。
Hash 哈希,也叫做散列。意思就是把任意长度的输入通过某一种散列算法转换成固定长度的输出。是不是有点像数学里面函数的定义呀。Hash在WDF中的典型应用就是把文件的路径名转换成文件的ID,具体算法见云风大哥的风魂++游戏引擎。
二分查找,也叫折半查找,是对有序元素进行高速查找的一种方法。在WDF中的典型应用是索引表的检索,其中索引表在打包时生成,并按文件ID排序。
=================================================================================
好了,赶快去适应下开发人员的工作方式吧,我们下次介绍坐骑染色+合成,不过我相信很多人都可以无师自通了吧。
[ 本帖最后由 leexuany 于 2008-9-29 17:21 编辑 ] |
评分
-
查看全部评分
|