地下城勇士 DNF 资源分析
来源:互联网 发布:mac的wifi显示未安装 编辑:程序博客网 时间:2024/04/29 00:05
Neople是一家韩国的游戏公司,地下城勇士DNF就是出自他之手。为了帮弟弟提取DNF创建人物时的漫画,小宝简单地分析了下DNF使用的资源格式。这篇文章是我的分析笔记,完全是凭经验推理出来的,可能不全面的,也可能存在错误,本人不对参考本文而产生的任何问题负责。
作者:leexuany(小宝)
第一部分 解包
DNF使用的资源包是NPK格式,即"NeoplePack"的缩写,于是推测这篇分析也许能用在Neople其他的几款游戏上,呵呵~~。
struct NPK_Header
{
char flag[16]; // 文件标识 "NeoplePack_Bill"
int count; // 包内文件的数目
};
struct NPK_Index
{
DWORD offset; // 文件的包内偏移量
DWORD size; // 文件的大小
char name[256];// 文件名
};
NPK文件就是由一个NPK_Header和N个NPK_Index以及实际的数据组成的。
注:NPK分加密(ImagePacks4文件夹下)和未加密(ImagePacks2文件夹下)的两个版本,加密的版本需要用"puchikon@neople dungeon and fighter DNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNF"(共256字节,最后一字节是'/0')异或文件名部分。
第二部分 格式转换
解包之后得到的文件基本都是".img"格式,但根据文件标识的不同,可分为"Neople Image File"和"Neople Img File"。
【"Neople Image File"的格式】
struct NImageF_Header
{
char flag[24]; // 文件标识 "Neople Image File"
int unknown1; // 未知数据,也许是版本号什么的?
int index_count; // 索引项的数目,也可以理解为包含的小图片的个数。
};
struct NImageF_Index
{
DWORD dwType; // 目前已知的类型有 0x0E(1555格式) 0x0F(4444格式) 0x10(8888格式) 0x11(不包含任何数据,可能是指内容同上一帧)
DWORD dwCompress; // 目前已知的类型有 0x06(zlib压缩) 0x05(未压缩)
int width; // 宽度
int height; // 高度
int size; // 压缩时size为压缩后大小,未压缩时size为转换成8888格式时占用的内存大小
int key_x; // X关键点,当前图片在整图中的X坐标
int key_y; // Y关键点,当前图片在整图中的Y坐标
int max_width; // 整图的宽度
int max_height; // 整图的高度,有此数据是为了对其精灵
BYTE Data[实际长度]; // 紧跟在索引后面的就是实际的数据(将数据放在索引结构中只是为了向大家展示索引与数据的关系。)
};
"Neople Image File"由一个NImageF_Header和N个NImageF_Index结构组成。
注:对于类型0x11其索引表仅包含前2项,即
struct NImageF_Index_0x11
{
DWORD dwType; // 类型0x11
DWORD dwCompress; // 可取很多种数值,作用未知(其中零最为常见)
};
【"Neople Img File"的格式】
struct NImgF_Header
{
char flag[16]; // 文件标识 "Neople Img File"
int index_size; // 以字节为单位,索引表的大小
int unknown1; // 未知1
int unknown2; // 未知2
int index_count;// 索引表项数目
};
struct NImgF_Index
{
DWORD dwType; // 与"NImageF_Index"是一致的,要看注释往上翻。
DWORD dwCompress;
int width;
int height;
int size;
int key_x;
int key_y;
int max_width;
int max_height;
};
"Neople Img File"是由一个NImgF_Header和N个NImgF_Index索引表 + 连续存储的实际数据组成。换句话说就是,"Neople Image File"的索引与自己的数据挨在一起,而"Neople Img File"的索引表和数据是分开存放的。
第三部分 总结
从几个未知数据来看,还不能算是完美的格式分析,实在是遗憾。(现在的网游越加壳越厉害,看来我得再多研究研究脱壳啦。)
不过对于资源提取还是不成问题的。按住惯例上传一张提取图片。
相关工具可以到 http://leexuany.ys168.com/ 下载。
- 地下城勇士 DNF 资源分析
- 地下城与勇士外挂 DNF外挂
- 绿色版DNF(地下城勇士)全键盘连发工具,支持DNF双开
- C#+XNA进行开发《地下城勇士DNF》网络动作游戏-连载1
- C#+XNA进行开发《地下城勇士DNF》网络动作游戏-连载2
- 浅谈成功运营12年的传奇2D游戏DNF(地下城与勇士)
- 地下城与勇士运行时错误 - 修正了DNF的运行时错误的简便方法!
- Flex 开发地下城与勇士 设想
- Flex 开发地下城与勇士 设想
- 地下城与勇士的外挂帐号密码是多少
- Dnf资源分析与提取工具(附代码)
- DNF检测原理分析篇
- AYIT606第七周周赛(3维广搜+队列) D - Dungeon Master地下勇士
- DNF
- dnf
- l-地下城迷宫
- 数据分析、关键词和地下产业
- 地下管线探测仪内部发射机解译分析
- C#获取项目程序路径的方法
- 关于容器
- 搜索引擎优化
- 工具提示
- Web Part 教程--自定义 Web Part
- 地下城勇士 DNF 资源分析
- 获取每个磁盘分区的空间使用率
- 移走元素
- python整理二十二——dict类型用点号访问
- 有点心不在焉了
- uclinux-2008R1.5-RC3(bf561)到VDSP5的移植(46):fls_long的问题
- 网易Tab选项卡源码及下载
- C++ gui QT4 OPENGL 开发3
- 开启MySQL远程连接的权限