关于DNF的多媒体包NPK文件的那些事儿(1)
NPK文件是DNF內(nèi)置多媒體文件包,曾經(jīng)用過EXRPG的大家都知道,NPK文件分為貼圖NPK和音效NPK兩種。貼圖NPK內(nèi)部包含若干IMG文件,而一個IMG文件則由若干個經(jīng)過壓縮的圖片文件構(gòu)成,而NPK文件的其他部分則用由圖片的各種屬性數(shù)據(jù)、圖片的相對位置以及校驗位所構(gòu)成;而音效NPK則包含若干OGG文件。
?
NPK文件結(jié)構(gòu)
每個NPK文件由4部分構(gòu)成:NPK文件頭(紅色框內(nèi)),IMG文件索引(黃色框內(nèi)),NPK校驗位(藍色框內(nèi)),IMG文件序列(剩下的框內(nèi))。具體內(nèi)容如下表所示:
| NPK文件頭 | 20個字節(jié),包括NPK文件頭字符串和內(nèi)含IMG文件的個數(shù) | |
| IMG文件索引表 | IMG文件1索引 | 每個IMG文件索引占264字節(jié),包括IMG文件在整個NPK文件的地址偏移量和所占大小,以及經(jīng)過一種特殊算法加密后的名字。 |
| IMG文件2索引 | ||
| IMG文件3索引 | ||
| NPK校驗位 | 32個字節(jié),使用SHA256算法用以對NPK文件的合法性進行校驗。 | |
| IMG文件序列 | IMG文件1 | 所有具體的IMG文件組成的集合。 |
| IMG文件2 | ||
| IMG文件3 | ||
?
1.????NPK文件頭
NPK文件頭共20字節(jié),包含一個16字節(jié)的固定的文件頭字符串“NeoplePack_Bill”以及4字節(jié)的IMG文件的數(shù)目。
2.????IMG文件索引表
IMG文件索引表由若干個IMG文件索引數(shù)據(jù)首尾相接構(gòu)成,每個IMG文件索引有264字節(jié),其中包含了該NPK文件中每個IMG文件的地址偏移量,所占大小和加密后的名稱,在提取IMG文件時,可以直接根據(jù)對應(yīng)的索引表來直接獲取地址和大小,然后進行讀取操作。
IMG文件索引表的結(jié)構(gòu)如下所示:
| 地址偏移量 | 4字節(jié),地址偏移量 |
| IMG文件大小 | 4字節(jié),表示對應(yīng)IMG文件的大小 |
| IMG文件名稱 | 256字節(jié),IMG文件加密后的名稱。 |
IMG文件名加密方法為:文件名原字符串轉(zhuǎn)換為256字節(jié)的ASCII碼(不足的以0填充),然后與256字節(jié)的字符串(注意最后一位是空格):
“puchikon@neople dungeon and fighterDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNFDNF”
的ASCII碼進行按位異或運算。當然,解密和加密算法是一樣的。
3.????NPK文件校驗位
當NPK文件里包含至少1個IMG文件時,NPK文件在IMG文件索引表的后邊設(shè)置32字節(jié)的校驗位。校驗位根據(jù)其之前的所有內(nèi)容(即NPK文件頭和IMG文件索引表)的字節(jié)流的前17的整數(shù)倍,進行SHA256加密。
C++沒有內(nèi)置的SHA256加密算法,網(wǎng)上有很多開源庫可供下載(https://code.csdn.net/snippets/2538665)。
NPK文件校驗位在NPK中具有極其重要的位置,當一個NPK文件的校驗位不匹配時,DNF游戲?qū)⒁暺錇橐粋€無效的NPK文件,從而不會讀取該NPK文件內(nèi)的資源。
4.????IMG文件序列
IMG文件序列由NPK文件中所包含IMG文件數(shù)據(jù)首尾拼接而成,每個IMG文件的大小不是確定的,但是可以通過讀取對應(yīng)的IMG文件索引表來確定每一個IMG文件的起始位置和大小,從而讀取整個IMG文件。IMG文件的詳細格式見后續(xù)介紹。
總結(jié)
以上是生活随笔為你收集整理的关于DNF的多媒体包NPK文件的那些事儿(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 50欧姆线设计 高频pcb_硬件设计基础
- 下一篇: jsp调用controller方法_RP