关于DNF的多媒体包NPK文件的那些事儿(1)
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文件的詳細格式見后續介紹。
總結
以上是生活随笔為你收集整理的关于DNF的多媒体包NPK文件的那些事儿(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 50欧姆线设计 高频pcb_硬件设计基础
- 下一篇: jsp调用controller方法_RP