泓泰

当年星际争霸1的寻路系统为何做得如此粗糙?

admin
当年星际争霸1的寻路系统为何做得如此粗糙?-第1张-游戏相关-泓泰

咱们新一期的《星【xīng】际【jì】争霸十【shí】万个为什【shí】么》又和大【dà】家见面啦!停更了【le】好多天,今天就来和大家说点不【bú】为人知的游【yóu】戏中星际争霸的硬【yìng】核【hé】知【zhī】识哈哈。

大家在【zài】玩星【xīng】际争霸【bà】1的【de】时候一定有这么一种感觉,游【yóu】戏中单位的AI为何【hé】会如此【cǐ】低效,总是时不时的会【huì】在原地发呆【dāi】,或【huò】者被卡【kǎ】在一个地方来回【huí】摩擦【cā】。如果玩过魔【mó】兽争霸3或者星际2的话就会对【duì】星际【jì】1那粗糙的单位寻路系【xì】统更加嗤之以鼻,那【nà】么是什么样的原因导致了星【xīng】际1的【de】寻【xún】路【lù】系【xì】统如此糟【zāo】糕呢?大麦在外网挖掘【jué】出了曾经星际【jì】1的首席程序员 Patrick Wyatt的回忆录,讲【jiǎng】述了当【dāng】年星际1在【zài】开发过程中的【de】趣事,今天就来和大家讲【jiǎng】讲吧~

Patrick Wyatt

不合适的游戏引擎

当时【shí】星际【jì】争霸在立项的时候仅仅是定【dìng】位为一个【gè】中小型的RTS游戏,说白【bái】了其本质玩法就和魔兽争霸【bà】1、2基本一样。因此暴雪的员【yuán】工们【men】就【jiù】决定继续【xù】使用魔兽争【zhēng】霸2的游戏引擎来开发星际争霸。

然【rán】而没想到的是,由于暗黑破坏【huài】神的成功【gōng】令暴雪公司的规模快速扩【kuò】张,因此高【gāo】层临时决定扩大星际争【zhēng】霸的【de】开发规【guī】模,为游戏增添更多的新元素,并【bìng】且还【hái】要将游戏视【shì】角改成当时【shí】最流行【háng】的等角投【tóu】影【yǐng】视角。

可能有玩家不【bú】太清楚什【shí】么是等角【jiǎo】投影视角【jiǎo】,我举个例子大【dà】家就能【néng】了解【jiě】,比【bǐ】如暗【àn】黑破坏【huài】神、奇迹、传【chuán】奇、这种游戏的视角就是等【děng】角投【tóu】影视角,也就【jiù】是我们国内玩家俗称的2.5D视角。

但当时星【xīng】际争【zhēng】霸所使用的是魔兽争霸2的游戏引擎,这里我还【hái】得【dé】需要先和大家【jiā】说【shuō】一下魔兽【shòu】争【zhēng】霸2的游【yóu】戏引擎是如【rú】何绘制和优【yōu】化地图的。魔兽争【zhēng】霸2是一种俯【fǔ】视视角的游戏,游戏引【yǐn】擎会将整【zhěng】个地图分成【chéng】均匀密【mì】布的32*32像素的【de】小方块,然后这些小方【fāng】块又会被分成【chéng】16个8*8像素【sù】的更小的方块。

读图的时【shí】候,把【bǎ】地【dì】图分成【chéng】若【ruò】干个【gè】相对较小的区域(平均每【měi】个区域大概10×10个32×32的【de】图块大),这些【xiē】区域互相【xiàng】挨着【zhe】,而【ér】且内部没有大个的障碍物。区【qū】域内部的寻路可以用A*算法来搞定,撞到障碍的几【jǐ】率【lǜ】很小【xiǎo】。同时在读【dú】图【tú】时【shí】系统【tǒng】还会创建【jiàn】一【yī】个高层的地图用来【lái】储存区域间【jiān】的邻接【jiē】关系【xì】。区域是不规则形状【zhuàng】的,所以这个高层【céng】地图相当【dāng】于一个节点图,而不是图【tú】块【kuài】地图。区域间的寻路,在高【gāo】层【céng】地图上用【yòng】A*算法实现。当单位移动时,对它们占领的小方块进行标记【jì】,然后用【yòng】一大堆特殊【shū】逻辑,包【bāo】括各种极端情况、单位行为、敌军vs友军,来遍【biàn】历这些被占的小方【fāng】块,这些特殊【shū】逻辑还包括一【yī】个【gè】状态机,大【dà】概有【yǒu】40个不同状态。

如果不太理【lǐ】解的话可以【yǐ】看看【kàn】下图,就知道将地图分解为图块【kuài】是【shì】怎么回事了。

后来星际争霸改成了等角投影本来应【yīng】该用【yòng】菱形的图【tú】块来绘制地图会更【gèng】为【wéi】方便,但是【shì】由于星际1在开发时使用的【de】是魔兽2的游戏引擎,再【zài】加上发售【shòu】日期将【jiāng】近,于是程序员们就只是改了游【yóu】戏的外【wài】观却没有修改底【dǐ】层架【jià】构【gòu】,这才导致【zhì】了后来的寻【xún】路问题接踵【zhǒng】而至【zhì】。

混乱的底层架构

首【shǒu】先为了【le】保证寻【xún】路【lù】功【gōng】能的正常运行,因此地图的【de】分【fèn】辨【biàn】率就必须得增加,原来只是32*32像素的格子来标【biāo】记单位【wèi】是否能通过,现在这些格子中【zhōng】每一个8*8像素的小格子都要来进【jìn】行判【pàn】定标记。这样系统的运算量就需要足【zú】足提升16倍,对于【yú】电脑【nǎo】的硬件是个【gè】不小的【de】考验,因此当【dāng】时星际【jì】1刚【gāng】出的时候【hòu】对【duì】于电脑配置的【de】要求算是【shì】比较【jiào】高的!

配置【zhì】要求提高还是一方【fāng】面【miàn】,另一个主【zhǔ】要【yào】问【wèn】题就【jiù】是游【yóu】戏中斜向的地图和碍口是个巨大的麻烦,因为斜着的边缘将正方形小格子给切割得乱七八糟,系统需要判定【dìng】这【zhè】些小格子【zǐ】哪些能走哪【nǎ】些不能【néng】走【zǒu】,而【ér】这些【xiē】工作全都【dōu】得【dé】交给程序员来进行,也因此【cǐ】星际争霸【bà】1的【de】地图编【biān】辑器【qì】极其难写,用【yòng】户也极难使用。

因此大家一定发现了,星际1的第三方地图数量稀【xī】少【shǎo】,而且【qiě】bug非常【cháng】多【duō】。反观魔兽【shòu】争霸3他强大的【de】地图编【biān】辑器诞生了非常多经典的【de】游戏,比【bǐ】如dota,澄海3c这些【xiē】超级经典的RPG地图【tú】。

所以玩家在玩游戏的【de】时候【hòu】有时【shí】候会发现,如果【guǒ】是【shì】一【yī】队龙骑士在通过一些比较狭【xiá】小【xiǎo】的路口时就会发生超级大堵【dǔ】车。你在前线正打得火【huǒ】热呢【ne】,回过头来可能就会【huì】突然发现【xiàn】七八个龙【lóng】骑士【shì】正堵在一个【gè】路口下【xià】不来,所以这【zhè】时候就需要【yào】玩家手动去一【yī】个一个操作【zuò】这些龙骑士让他们按顺【shùn】序【xù】走下来。

除【chú】了这【zhè】些问题以外还有一个东西一直困扰了暴雪的程序员们好久,就是农【nóng】民采矿【kuàng】时的拥堵。星际中每一个【gè】单位都是有碰【pèng】撞体积【jī】的【de】,当十几个【gè】农民在一起采【cǎi】矿时就难免会【huì】发生碰撞【zhuàng】,然后慢慢的就会挤成一【yī】团动弹不得。这个问题直到游戏发售都【dōu】没有被解决,最终还是用了简单【dān】粗【cū】暴的方式取消农民在采矿【kuàng】时的碰撞体【tǐ】积,才终于能【néng】让【ràng】采【cǎi】矿工【gōng】作【zuò】平稳【wěn】运行【háng】。

有趣的是,我们【men】现在了解到的星际争【zhēng】霸中的这些程序BUG却【què】成为【wéi】了星际争霸这款游戏中的闪【shǎn】光点【diǎn】。比如这些智障的寻路功【gōng】能却成为了区分高手和【hé】普通玩家的分水【shuǐ】岭【lǐng】,还有那单位硕大无【wú】比的碰撞体积【jī】,却增加了单位【wèi】的【de】战【zhàn】场存【cún】活时间,提【tí】高了游【yóu】戏的观【guān】赏性。

所以【yǐ】说后来一直有人认为星际争霸1的观赏性和游戏性【xìng】要远【yuǎn】高于星际争霸2,这其【qí】中的主【zhǔ】要原【yuán】因还是在于【yú】,星际1的操作几【jǐ】乎没有上限,操作【zuò】实力强的选【xuǎn】手【shǒu】就是【shì】可以碾压操作比他【tā】弱【ruò】的人。但到【dào】了星【xīng】际2,由于采【cǎi】用【yòng】了【le】动态寻路的【de】方式,使得游戏中的单位【wèi】经常【cháng】容【róng】易出现聚团的现象,往往一个AOE打中了,这场游戏就已经宣【xuān】告结束。

因此我们会发现,在观赏星【xīng】际【jì】2的职业【yè】比【bǐ】赛时,往往双方部队一碰,10秒内就能决【jué】出胜负,给【gěi】观众的观【guān】赏体验并不是很好【hǎo】。而星际1中一【yī】场战斗【dòu】可能【néng】会【huì】发【fā】生【shēng】数【shù】分钟的【de】拉扯,战斗,在拉扯的局势,其激烈程度要远【yuǎn】胜星际2。

不过呢,毕【bì】竟时代是在进步的【de】,星际2相对来【lái】说对于绝【jué】大多数玩家【jiā】更为【wéi】友好,他也首次出现了无上限编队的系【xì】统,还有【yǒu】各种【zhǒng】人性化以【yǐ】及更【gèng】加【jiā】智能的AI的确【què】是【shì】当之无愧21世纪最好的RTS游戏【xì】。

好啦,今天【tiān】的故事就【jiù】说到【dào】这了【le】,如果喜【xǐ】欢大麦的星【xīng】际小故事的【de】话可以点一波关注点个赞哟【yō】~

标签: #星际争霸地图编辑器中文版