热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于DNF的多媒体包NPK文件的那些事儿(1)

NPK文件是DNF内置多媒体文件包,曾经用过EXRPG的大家都知道,NPK文件分为贴图NPK和音效NPK两种。贴图NPK内部包含若干IMG文件,而一个IMG文件则由若干个经过压缩的图片文件构成,

NPK文件是DNF内置多媒体文件包,曾经用过EXRPG的大家都知道,NPK文件分为贴图NPK和音效NPK两种。贴图NPK内部包含若干IMG文件,而一个IMG文件则由若干个经过压缩的图片文件构成,而NPK文件的其他部分则用由图片的各种属性数据、图片的相对位置以及校验位所构成;而音效NPK则包含若干OGG文件。

 

NPK文件结构

每个NPK文件由4部分构成:NPK文件头(红色框内),IMG文件索引(黄色框内),NPK校验位(蓝色框内),IMG文件序列(剩下的框内)。具体内容如下表所示:

NPK文件头

20个字节,包括NPK文件头字符串和内含IMG文件的个数

IMG文件索引表

IMG文件1索引

每个IMG文件索引占264字节,包括IMG文件在整个NPK文件的地址偏移量和所占大小,以及经过一种特殊算法加密后的名字。

IMG文件2索引

IMG文件3索引

NPK校验位

32个字节,使用SHA256算法用以对NPK文件的合法性进行校验。

IMG文件序列

IMG文件1

所有具体的IMG文件组成的集合。

IMG文件2

IMG文件3

 

1.    NPK文件头

NPK文件头共20字节,包含一个16字节的固定的文件头字符串“NeoplePack_Bill”以及4字节的IMG文件的数目。

2.    IMG文件索引表

IMG文件索引表由若干个IMG文件索引数据首尾相接构成,每个IMG文件索引有264字节,其中包含了该NPK文件中每个IMG文件的地址偏移量,所占大小和加密后的名称,在提取IMG文件时,可以直接根据对应的索引表来直接获取地址和大小,然后进行读取操作。

IMG文件索引表的结构如下所示:

地址偏移量

4字节,地址偏移量

IMG文件大小

4字节,表示对应IMG文件的大小

IMG文件名称

256字节,IMG文件加密后的名称。

IMG文件名加密方法为:文件名原字符串转换为256字节的ASCII码(不足的以0填充),然后与256字节的字符串(注意最后一位是空格):

“puchikon@neople dungeon and fighterDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNF”

的ASCII码进行按位异或运算。当然,解密和加密算法是一样的。

3.    NPK文件校验位

当NPK文件里包含至少1个IMG文件时,NPK文件在IMG文件索引表的后边设置32字节的校验位。校验位根据其之前的所有内容(即NPK文件头和IMG文件索引表)的字节流的前17的整数倍,进行SHA256加密。

C++没有内置的SHA256加密算法,网上有很多开源库可供下载(https://code.csdn.net/snippets/2538665)。

NPK文件校验位在NPK中具有极其重要的位置,当一个NPK文件的校验位不匹配时,DNF游戏将视其为一个无效的NPK文件,从而不会读取该NPK文件内的资源。

4.    IMG文件序列

IMG文件序列由NPK文件中所包含IMG文件数据首尾拼接而成,每个IMG文件的大小不是确定的,但是可以通过读取对应的IMG文件索引表来确定每一个IMG文件的起始位置和大小,从而读取整个IMG文件。IMG文件的详细格式见后续介绍。


推荐阅读
  • SmartMesh WireLess HART 资料总结
    SmartMeshWireLessHART资料总结--刘振君2017.01.0923:00:00IEEE802.15是一个工作组98年成立,专门从事 ... [详细]
  • webpack多页运用架构系列(十四):No复制粘贴!多项目共用基础设施
    本文首发于Array_Huang的手艺博客——有效至上,非经作者赞同,请勿转载。原文地点:https:segmentfault.coma1190000007301770假如您对本系 ... [详细]
  • 对于秒杀,你所遇到的,都在这里
    好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.目录1秒杀业务分析2秒杀技术挑战3 ... [详细]
  • centos6.5下配置jenkins
    前提条件:配置了JDK之前通过yum安装了2.64版本,安装没有问题,但是jenkins一直加载不出来,故删除了2.64版本,换另一种方式war包重新安装,这次下载的是2.7版本。 ... [详细]
  • 1.数据库简介1.数据库的能干什么持久的存储数据备份和恢复数据快速的存取数据权限控制2.数据库的类型1.关系数据库​特点:以表和表的关联构成的数据结构 ... [详细]
  • 微信小程序实战之菜谱小程序
    最近突发奇想,想要自己搞个小程序玩儿玩儿,但是鉴于自己是搞后端服务器出身,对于偏前端的微信小程序开发实在是一知半解,尤其是对于css类样式相关,更是无从下手,于是乎,只能从晚上找了 ... [详细]
  • 原文链接:https:blog.csdn.netu014199378articledetails72419665根据原文稍作修改SSH协议族可以用来进行远程控制&# ... [详细]
  • 分组密码笔记(DES,AES,SM4,IDEA
    目录基础概念:DES:AES:SM4IDEA:工作模式:基础概念:1扩散:使得明文 ... [详细]
  • 用phpStudy搭建DVWA漏洞测试环境详细过程
    目录结构1.下载、安装PhpStudy2.下载、存放DVWA3.配置DVWA环境4.访问DVWA进行登录DVWA简介前面几篇文章对渗透测试和安全测试的一些概念和执行流程有个大致了解 ... [详细]
  • 安装下载Bitnamidocker文件,并安装github地址:bitnami-docker-jenkinsmkdirjenkinscdjenkinscurl-sSLhttps:r ... [详细]
  • 电脑公司 GHOST WIN7 SP1 X86 快速装机版 V2015.06
    友情提示:教程内容为了更好的解决大家的问题,所以电脑教程网的每一篇内容都是图文并茂的在多端设备下呈现给大家。告诉大家的是,文章内里的图片也尤为重要, ... [详细]
  • 多线程爬虫,主要是玩队列,队列玩明白了,多线程自然也就起来了。#导入各种包importthreadingimportqueueimpotjsonfromlxmlimporterte ... [详细]
  • ubuntu 压缩率最高的软件_软件办公||最良心的解压缩工具——免费开源【7zip】...
    大家好,我是FreeRonin,今天要分享的是一个非常好用的解压缩工具,这个软件的名字叫做7-zip,7-Zip是一款开源免 ... [详细]
  • 1、简介   SMTP(SimpleMailTransferProtocol)协议是为了保证电子邮件的可靠和高效传送。TCPIP协议的应用层中包含有SMTP协议,但事实上其与传输系 ... [详细]
  • UE4项目资源打包,Pak包生成过程项目打包过程:1)工具代码编译2)项目,引擎代码编译3)资源COOK(烘培)4)文件整理收集5)资源打包6)文件拷贝(exe,dll文件拷贝) ... [详细]
author-avatar
黑漆高傲的眼眸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有