之前韩の娃娃问我新出的锦衣是否是在shape.wd8资源包内,但是分析之后发现资源是以3D模型的形式存放在r3d.npk内的。虽然去年夏天简单分析过.gim模型格式,但要我把它渲染的跟梦幻里一样效果还是有些难度的,毕竟我也只是刚刚导出了T-Pose模型而已。
前几天又看到了空灵姐的留言,说大家还在为提取新资源而头疼。既然如此,那么何不尝试提取一下,也小小的满足一下自己的好奇心。

问题切入点
负责渲染的程序xyqsvc.exe是如何将渲染好的图片传给客户端程序my.exe使用的?

最开始时,我以为xyqsvc.exe将渲染好的图片存放在v3d_cache目录下的文件内,然后my.exe读取这个文件。但仔细一想,多个程序对同一个文件同时读写,还要同步,这几乎是不可能的。而且使用FileMon监视文件读写,发现my.exe是根本不读取这些文件的。之后的分析显示,v3d_cache下的v3d.hdr和v3d.dat只是xyqsvc.exe的缓存文件,是为了方便下次使用而保存的。传送图片的真正办法是内存共享。(查找内存共享时看到了云风哥对这个技术的介绍,证明我的分析是基本正确的。出乎我的意料的是,xyqsvc.exe是多个客户端共享的)

言归正传,既然渲染好的图片缓存下来了,那么必定是可以提取的。(其实不缓存也可以在内存里截取,但涉及的问题就要复杂许多)

下面把我分析的 v3d.hdr 和 v3d.dat 的格式写出来,全当是做个备忘吧。

v3d.hdr 的格式分析

文件开头是一个
typedef struct {
 unsigned long flag; // 'v3dh'
 unsigned long version; // 0x10005 等,版本很多
 unsigned long offset; // 索引表所在的地址
} v3dh_file_header;

跳转到v3dh_file_header.offset后是
long v3dd_size;  // v3d.dat 的大小(以字节为单位)
long v3dh_index_size; // v3dh 索引表的大小(以字节为单位)
接着是一片(就是数组啦)
typedef struct {
 long offset1; // 见后面说明
 long offset2; // 同上
 long linker; // 与此索引相关联的索引编号(从零开始计数)
} v3dh_index;

v3dh_index.offset1 所指内容的格式
unsigned char size; // 这部分数据的大小,不包含这一字节
unsigned long var1; // 未知
unsigned long var2; // 装备调色板信息
unsigned long var3; // 武器调色板编号
unsigned long var4; // 未知(实际是一个链表,目前见到的都是NULL)
unsigned long var5; // 指向名称信息,开头1字节总是0,想不明白
unsigned char Ext[235]; // 最长为 235 ,具体数值根据 size 判断

以上变量中 var2 var4 var5 均为实际相对 var1 的偏移量。
如果 var2 为零,那么对应的调色板为 ("mypal/weapon//%d.pal", var3)
如果 var2 不为零,那么它指向如下结构:
typedef struct {
 short num1;
 short count;
 short num2[count];
};
这个结构的含义不是非常清楚,目前见到的例子中,count总是1,这里只对这种情况说明。
如果 num2[0] 中的高3位不为零,即 (num2[0] & 0xE000) != 0 时,对应的调色板为 ("mypal/equip//%d.pal", num2[0])
否则,对应的调色板为 ("mypal/equip//%d_%d.pal", num2[0], num1)

v3dh_index.offset2 所指内容的格式
与 offset1 相比,这个就简单的太多了。
long frameCount;// 帧数
long dirCount; // 方向数
long dat_offset_list[frameCount*dirCount]; // 每一帧数据在 v3d.dat 里的地址

mypal.wdf 中 .pal 文件的格式
unsigned long flag; // '.pal'
unsigned short palCount; // 调色板颜色数(目前见到的都是256)
unsigned short sectionCount; // 分段数目(从逻辑上来说 sectionCount 要么等于零,要么大于等于二)
unsigned char sectionSize[sectionCount]; // 这个数组之和等于 palCount
_ARGB palItems[palCount]; // 实际上,这里的 alpha 都是错的,游戏也不使用

v3d.hdr 的分析至此结束。

内容稍后继续,没有广告照样精彩。。。

梦幻西游新资源的提取一相关推荐

  1. 梦幻西游新资源的提取二

    感谢大家继续收看. v3d.dat 的格式分析 文件开头同样是一个 typedef struct {  unsigned long flag; // 'v3dd'  unsigned long ver ...

  2. 分享15款为开发人员准备的开发移动应用程序必备的新资源和工具

    身为一名开发者,光有技术是不够的,必备的应用可以为您的开发工作如虎添翼.随着Android与iOS系统的不断更新换代,相关的的应用也层出不穷,随着移动应用程序的普及推动,很多新的方面被迅速发展, 下面 ...

  3. 萌新资源 | 3D基础——渲染基本原理介绍

    游戏最吸引人的地方,莫过于它为玩家构建了一个全新的世界.--但有没有人想过,这些丰富饱满的世界是怎样建构起来的呢?又是经过怎样的加工最终呈现在玩家的面前呢? MG大赛加油包还不够满足大家? 今日份的萌 ...

  4. 尚硅谷为什么免费开放资源_什么是开放游戏? 新资源

    尚硅谷为什么免费开放资源 今天,Opensource.com取得了一项重要成就: "什么是开放游戏"出版. ,一个新的资源页面. 我们从来不怕我们 对 开源游戏的 热爱 . 但是, ...

  5. 植物大战僵尸资源文件提取 总结

    PvZ资源文件提取 总结 参考 植物大战僵尸资源文件(main.pak):格式/提取/工具下载[转贴] 植物大战僵尸pak资源文件分析 植物大战僵尸资源提取 C/C++中判断某一文件或目录是否存在 P ...

  6. 滋补新势力、新动能、新消费、新销路、新资源-第6届上海燕博会与您相约上海,共创未来!

    滋补新势力.新动能.新消费.新销路.新资源-第6届上海燕博会与您相约上海,共创未来! 12月1-3日,破局而来 12月1日-3日,2022世界滋补产业生态发展大会暨第六届世界燕窝及天然滋补品博览会-上 ...

  7. 滋补新势力、新消费、新对接、新资源尽在2021上海燕博会

    滋补新势力.新消费.新对接.新资源尽在2021上海燕博会 近日,小编从上海燕博会组委会许洋了解到,每年一届的世界燕窝及天然滋补品博览会暨滋补生态圈发展大会(简称2021上海燕博会)即将于2021年11 ...

  8. 如何开发新资源?如何开发新的客户资源?

    如何开发新资源? 无论我们做什么业务,都是为了满足一些客户的需求,而这种需求的存在就是为了解决客户的痛点. 例如:做家政服务,做餐饮,做服装一定要找出谁有这种需求. 如何找到它? 首先,你必须了解你的 ...

  9. 2022上海燕窝展|上海燕博会|滋补大会:新零售、新消费、新对接、新资源

    2022上海燕窝展|上海燕博会|虫草.鱼胶.灵芝.海参.滋补品展|滋补大会:新零售.新消费.新对接.新资源 2022新零售思维嵌入上海燕窝展, 为滋补提供新定位 新的消费需求催生新零售的诞生,线上线下 ...

  10. 【译】介绍 Consul 新的学习平台和新资源:Kubernetes, AWS Cloud Map 及更多

    DEC 17 2018 KAIT CARTER 新 Consul 学习体验 新的 Consul 学习平台 现已上线.如果您是 Consul 的新手用户,您现在可以通过 入门 学习来了解 Consul ...

最新文章

  1. 2018上半年约26亿条数据泄露
  2. vty 虚拟终端连接 line vty 0 4 和line vty 5 15 区别
  3. word中package提取器
  4. HTML+CSS+JavaScript复习笔记持更(四)——多媒体篇
  5. The working copy is locked due to a previous error.
  6. 利用Sqoop在数据库和Hive、HDFS之间做ETL操作
  7. python笔记-1(import导入、time/datetime/random/os/sys模块)
  8. java为什么不推荐使用stack_栈和队列的面试题Java实现,Stack类继承于Vector这两个类都不推荐使用...
  9. java 把方法当参数传递_java 中 如何将“一个类的方法 ”作为参数传到“另一个类的方法”中...
  10. html文件查找关键词,批处理查找文件关键字下一行内容
  11. [解决方案]Window 2008 R2 + IIS7.5 + VS2013 错误代码 0x80070002
  12. Meteor资源国外优秀web APP 收藏
  13. Hive学习之六 《Hive进阶— —hive jdbc》 详解
  14. matlab中的语言,matlab语言学习MATLAB语言基础.pdf
  15. 被裁员工公开呛声IBM人工智能,有双好鞋却不知怎么走路
  16. 【精品收藏】世界上最有智慧的人是怎样理性思考的?查理·芒格的100个思维模型...
  17. 基于R语言的因子分析
  18. vscode 是干什么用的_vscode是干嘛用的
  19. 香港、英国、南非...中国!区块链将迎来又一波高潮?
  20. java人民币大写_JAVA 数字转人民币大写

热门文章

  1. windows下批量创建txt文件
  2. C语言头文件里可以写些什么
  3. c++ utf8转为gbk_C++ 字符串UTF8与GBK转化
  4. VOC2007.annotation文件解读
  5. VOC2007-2012数据集
  6. python计算条件概率_统计算法_概率基础
  7. 大数据前端个人提升与团队规划
  8. 计算机拼音排序怎么操作,Excel如何按笔画和拼音进行排序,并且以下数字也会随之改变...
  9. SHT30温湿度传感器使用记录(AVR atmega128)
  10. 初中计算机会考是什么时候,初中信息技术会考复习资料