首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

大家在玩星际争霸1的时候一定有这么一种感觉,游戏中单位的AI为何会如此低效,总是时不时的会在原地发呆,或者被卡在一个地方来回摩擦。如果玩过魔兽争霸3或者星际2的话就会对星际1那粗糙的单位寻路系统更加嗤之以鼻,那么是什么样的原因导致了星际1的寻路系统如此糟糕呢?大麦在外网挖掘出了曾经星际1的首席程序员 Patrick Wyatt的回忆录,讲述了当年星际1在开发过程中的趣事,今天就来和大家讲讲吧~

Patrick Wyatt

不合适的游戏引擎

当时星际争霸在立项的时候仅仅是定位为一个中小型的RTS游戏,说白了其本质玩法就和魔兽争霸1、2基本一样。因此暴雪的员工们就决定继续使用魔兽争霸2的游戏引擎来开发星际争霸。

然而没想到的是,由于暗黑破坏神的成功令暴雪公司的规模快速扩张,因此高层临时决定扩大星际争霸的开发规模,为游戏增添更多的新元素,并且还要将游戏视角改成当时最流行的等角投影视角。

可能有玩家不太清楚什么是等角投影视角,我举个例子大家就能了解,比如暗黑破坏神、奇迹、传奇、这种游戏的视角就是等角投影视角,也就是我们国内玩家俗称的2.5D视角。

但当时星际争霸所使用的是魔兽争霸2的游戏引擎,这里我还得需要先和大家说一下魔兽争霸2的游戏引擎是如何绘制和优化地图的。魔兽争霸2是一种俯视视角的游戏,游戏引擎会将整个地图分成均匀密布的32*32像素的小方块,然后这些小方块又会被分成16个8*8像素的更小的方块。

读图的时候,把地图分成若干个相对较小的区域(平均每个区域大概10×10个32×32的图块大),这些区域互相挨着,而且内部没有大个的障碍物。区域内部的寻路可以用A*算法来搞定,撞到障碍的几率很小。同时在读图时系统还会创建一个高层的地图用来储存区域间的邻接关系。区域是不规则形状的,所以这个高层地图相当于一个节点图,而不是图块地图。区域间的寻路,在高层地图上用A*算法实现。当单位移动时,对它们占领的小方块进行标记,然后用一大堆特殊逻辑,包括各种极端情况、单位行为、敌军vs友军,来遍历这些被占的小方块,这些特殊逻辑还包括一个状态机,大概有40个不同状态。

如果不太理解的话可以看看下图,就知道将地图分解为图块是怎么回事了。

后来星际争霸改成了等角投影本来应该用菱形的图块来绘制地图会更为方便,但是由于星际1在开发时使用的是魔兽2的游戏引擎,再加上发售日期将近,于是程序员们就只是改了游戏的外观却没有修改底层架构,这才导致了后来的寻路问题接踵而至。

混乱的底层架构

首先为了保证寻路功能的正常运行,因此地图的分辨率就必须得增加,原来只是32*32像素的格子来标记单位是否能通过,现在这些格子中每一个8*8像素的小格子都要来进行判定标记。这样系统的运算量就需要足足提升16倍,对于电脑的硬件是个不小的考验,因此当时星际1刚出的时候对于电脑配置的要求算是比较高的!

配置要求提高还是一方面,另一个主要问题就是游戏中斜向的地图和碍口是个巨大的麻烦,因为斜着的边缘将正方形小格子给切割得乱七八糟,系统需要判定这些小格子哪些能走哪些不能走,而这些工作全都得交给程序员来进行,也因此星际争霸1的地图编辑器极其难写,用户也极难使用。

因此大家一定发现了,星际1的第三方地图数量稀少,而且bug非常多。反观魔兽争霸3他强大的地图编辑器诞生了非常多经典的游戏,比如dota,澄海3c这些超级经典的RPG地图。

所以玩家在玩游戏的时候有时候会发现,如果是一队龙骑士在通过一些比较狭小的路口时就会发生超级大堵车。你在前线正打得火热呢,回过头来可能就会突然发现七八个龙骑士正堵在一个路口下不来,所以这时候就需要玩家手动去一个一个操作这些龙骑士让他们按顺序走下来。

除了这些问题以外还有一个东西一直困扰了暴雪的程序员们好久,就是农民采矿时的拥堵。星际中每一个单位都是有碰撞体积的,当十几个农民在一起采矿时就难免会发生碰撞,然后慢慢的就会挤成一团动弹不得。这个问题直到游戏发售都没有被解决,最终还是用了简单粗暴的方式取消农民在采矿时的碰撞体积,才终于能让采矿工作平稳运行。

有趣的是,我们现在了解到的星际争霸中的这些程序BUG却成为了星际争霸这款游戏中的闪光点。比如这些智障的寻路功能却成为了区分高手和普通玩家的分水岭,还有那单位硕大无比的碰撞体积,却增加了单位的战场存活时间,提高了游戏的观赏性。

所以说后来一直有人认为星际争霸1的观赏性和游戏性要远高于星际争霸2,这其中的主要原因还是在于,星际1的操作几乎没有上限,操作实力强的选手就是可以碾压操作比他弱的人。但到了星际2,由于采用了动态寻路的方式,使得游戏中的单位经常容易出现聚团的现象,往往一个AOE打中了,这场游戏就已经宣告结束。

因此我们会发现,在观赏星际2的职业比赛时,往往双方部队一碰,10秒内就能决出胜负,给观众的观赏体验并不是很好。而星际1中一场战斗可能会发生数分钟的拉扯,战斗,在拉扯的局势,其激烈程度要远胜星际2。

不过呢,毕竟时代是在进步的,星际2相对来说对于绝大多数玩家更为友好,他也首次出现了无上限编队的系统,还有各种人性化以及更加智能的AI的确是当之无愧21世纪最好的RTS游戏。

好啦,今天的故事就说到这了,如果喜欢大麦的星际小故事的话可以点一波关注点个赞哟~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190514A0FKE400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券