迎接您,请 登录 或 注册会员

99猜想网-北京pk赛车技术和规律

搜刮
99猜想网-北京pk赛车技术和规律 首页 改图教授教化 检查内容

魔兽改图MPQ技巧内幕

2016-6-5 01:40| 检查: 16689 |原作者:99猜想网, 险恶叔

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;
}