DotA是只使用了war3的地图编辑器制作出来的吗?还是自己也要写代码?war3提供了相应的API吗?

关注者
152
被浏览
57,358

13 个回答

魔兽地图DotA的代码 全部 使用了魔兽3地图编辑器所开放的api(加入额外的API需要安装诸如JAPI一类的补丁,并且需要平台支持)。美术和声音资源主要使用魔兽自带素材,也有少量导入的素材(集成在8M中)。

魔兽地图文件本身是使用暴雪早期的MPQ压缩技术的资源压缩包,可以用MPQ查看器打开,和wow(6.0以前)的资源查看器几乎完全兼容。

但DotA的地图文件不能用地图编辑器(World Editor)打开,因为地图编辑器的图形界面的触发编辑器需要读取额外的文件(记得是w3t还是w3g)。而保存地图时,地图编辑器会把这个触发编辑器里的内容编译为游戏本身的脚本代码,即jass(*.j文件),并在游戏运行时使用,因此这个触发编辑器的对应文件其实不是地图运行的必需品。值得一提的是jass是“Just Another Script System”的缩写。

所有Jass可用的API都在魔兽3资源里的common.j(简称CJ)文件中列出。除此之外,暴雪还编写了blizzard.j(简称BJ)基于CJ提供的API,把对战初始化及一些常用的函数(比如组选取)整合起来。由于不少BJ函数本身存在泄漏问题(使用新建句柄而不回收),甚至存在正确性问题(比如组中随机选取多个对象的函数存在代码遗漏),因此多数we使用者都使用WE MOD来做图,导入修正过的BJ覆盖魔兽自带的文件等。国内这一块做的最好的,应该就是YDWE了。

理论上只使用地图编辑器是可以做出DotA这样的地图的。但许多Jass里的功能难以在触发编辑器中实现,移植性和维护成本也不同,所以多数资深作者还是选用了Jass为主导的脚本来制作地图。YDWE的开发初衷之一,就是允许使用者在完全不会jass的条件下也能实现原本jass才能实现的内容。除此之外,由于触发编辑器本身可以在GUI里插入或者转化为自定义代码,因此你也完全可以在we里实现纯jass代码的制作。

DotA虽然不能用we打开,但这不代表它就完全不是用we做的了。制作者完全可以用we所见即所得的编辑方式来更改地形地貌和物体属性(也可能是直接更改的slk文件),然后把编辑器生成的对应文件(比如w3e地形文件)直接提取出放入地图中,并撰写相关脚本。DotA的脚本中的变量与函数命名也经过了特殊处理,命名都是一些随机字母数字组合,毫无可读性,应该是经过命名替换处理的。

DotA为什么要这么做让玩家手中的地图文件难以打开和编辑呢?这当然是为了避免玩家篡改地图,甚至利用某些版本的漏洞制作互通图。当然,由于魔兽地图本身的限制,可读性再差的代码也能被资深地图开发者所理解,但这些“加密”手段多多少少提升了破解的门槛,提升了破解的成本,对魔兽地图的反改图起到了一定的作用。

DOTA 的图没有使用任何奇怪的技术,代码是魔兽的脚本语言 JASS 写的。DOTA 这图很牛叉,几乎把所有的魔兽技能都用代码重制了,而且为了比如满物品栏合成这样的 feature,所有的物品都有若干个副本。