<meta name="keywords" content="欢乐炸金花,魔兽改图MPQ手艺内幕" />
迎接您,请 登录 或 注册会员

欢乐炸金花-极速炸金花-炸金花技巧

搜索

魔兽改图MPQ手艺内幕

2016-6-5 01:40| 检查: 12470 |原作者: 邪恶叔

MPQ,也称MoPaQ,是Mike O'Brien创作缔造的一种延伸文件名堂。 
在1996作为,MPQ应用在Diablo(暗黑破损神)游戏中。 
可是它的版权属于 Blizzard 的父公司 Havas Interactive,而且在Mike O'Brien脱离暴雪后一连应用。 正是MPQs由于在Diablo(暗黑破损神)中的精彩体现,使其一连应用在Starcraft(星际争霸), Warcraft 2(魔兽争霸2), Diablo 2(暗黑破损神2), Lords of Magic(邪术年夜帝)中。 

第二章 关于MPQ的简介 


MPQ外部网罗了许多文件,网罗坐标算法、声响、动画、字符串、数字数据和故使命节信息。 
显着地,MPQ的潜力很年夜。要想应用MPQ,那么您就须要明确它。 

在有MPQ名堂之前,一直应用的是WAR名堂,在Warcraft 2,以致在Warcraft1中存放游戏数据。可是WAR名堂是质朴的,不精制的,是由缺乏履历的法式模范模范员所编写的文件名堂(信托我,我知道)。文件在档案中仅应用参考序数和能否被延伸做为唯一可选择挪用的措施。 
虽然云云它依然完成了它的义务。它供应了延伸名堂下的文件挪用。但是,很快弱点泉源泛起。挪用时应用参考序数,意味着一长传文件接口的名单必须被生涯和被咨询,当法式模范模范员须要应用其中一个文件,那么则须要级长的时间,使命变得愈来愈繁琐。 
其时这些效果并没有那么严重,以是有人保持应用WAR名堂,但是一切在应用Battle.net(群集对战)后,效果变得不克不及吸收。 


MPQ的特点 
如被提及之前,MPQ名堂一直被用做修改WAR的设计弱点。但是现在他们也想增添一些全新的特点到MPQ。在暴雪的游戏中,MPQ名堂的特点总结为以下几点: 

Security. 安然 

暴雪一定不欲望在游戏中玩家可以修改数据。或许他们延迟知道MPQ名堂可以为Starcraft应用。 岂论怎样,安然是最主要的,由此他们显着做了级年夜的起劲去掩护游戏的安然性。 

Efficiency. 效力 

MPQs请求推行时先质朴事后输入的种种各样的义务数据然后实时放出。关于事后输入数据,时间着实不主要。 但是实时放出就是此外一件事了,其中的数据必须快速地被解压应用。 

Multilinguality.多语言的盘算机处置赏罚赏罚 

在最泉源的时间,暴雪就妄图宣布其游戏在全球游戏市场,是以他们尽能够的做到多语言。 在创新时,他们决议设计多语种能写入MPQ名堂。 
。 
Expandability.扩年夜 

显着的,在游戏中须要应用自力的数据。太年夜的数据不只是效力低而且减慢游戏速率,假定补丁修改了,也是很费事的。暴雪明确这个事理,是以MPQ名堂的请求就是有才干完全,高效力的,从多个档案数据中挪用须要的数据。 


甚么是strom 
相比在法式模范模范模块中复制函数,多数法式模范模范员喜欢把类似代码放到shared libraries(共享法式模范模范库)里。shared libraries是网罗了随便任性法式模范模范功效的函数模块。不只能防止多余,而且能镌汰法式模范模范年夜小。 
正由于云云,暴雪应用一个称为Storm的共享法式模范模范库(PC机上为Storm.dll,MAC机为Storm.bin)。 
一切现代的暴雪游戏中都应用strom存放主要功效,好比读取MPQ,Battle.net和一些图形化例程。 
当暴雪要宣布新版本的游戏,只须要增添功效到strom,无需改变原有功效。 这意味着旧版本的游戏只用升级新版本strom便可以了,这就是我们俗称的装配补丁。 
就像一切共享法式模范模范库,任何想应用它的法式模范模范都可以会见到它的函数。这就是为甚么strom只网罗MPQ读取功效。 


甚么是 MPQ API Library DLL 

虽然 Storm 没有网罗任何编写MPQ的功效。 
但是 StarEdit 网罗,由于 SCM/SCX 文件也是 MoPaQ文件。 
但是这些函数被加密了,以是只需知识渊博的黑客们才可以应用。 
关于Blizzard 来讲不幸的是,有一个这样的黑客,他的名字是 Andrey Lelikov(aka Lelik)。 
他发清晰了了一种会见这些名贵的函数的蹊径,并把这个严重年夜的历程封装在 
LMPQAPI.DLL(Lelik's MPQ API Library DLL)文件中。该文件自动破解 
StarEdit,将这些函数展示在一切的法式模范模范员眼前。
第三章 MPQ的基泉源基础理 

经由历程一切盘算机生长史来看,绝年夜多数的前进都是在求解效果中发生的。 
那么在这一章中,我们将接纳看看一些触及到MPQ的效果及其处置赏罚赏罚措施。 

HASH (散列或哈希) 

效果:你有一个异常年夜的字符串数组,和一个字符串 
怎样知道字符串能否在数组中? 

你能够会泉源在数组中与其他字符串较量每个字符串,但是,当阻拦应用后,你会发现,这类措施在现实应用时是特殊慢的。在此之前,你又怎能在没有与其他字符串较量的情形下,一定这个字符串能否存在? 

处置赏罚赏罚措施:hash 
hash是规模较小的数据类型(例如数字)能指向其他较年夜的数据类型(通常是字符串) 。在这类情形下,您可以在数组中先存储hash。然后再盘算其他字符串的hash,并较量它存储的hash。经由历程字符串较量,假定hash在数组相婚配的新的hash,便可以核实存在。这就是所谓的索引查找,可以加速关于不合年夜小的数组和匀称长度的字符串的搜索速率约100倍。 

unsigned long HashString(char *lpszString) 
{
unsigned long ulHash = 0xf1e2d3c4; 

while (*lpszString != 0) 
{
ulHash <<= 1; 
ulHash += *lpszString++;

return ulHash;
}

搜索