为什么当年星际争霸中小狗变的是飞龙而不是变成其他单位?
内容速读:
今天呢要来说说当年星际争霸一个有趣的BUG。在1.04版本的时候,玩家可以通过游戏中的BUG将小狗变成飞龙而且不需要消耗额外的晶体矿。但是大家可曾想过为什么小狗变的是飞龙而不是其他单位呢?当玩家选择取消变身之后就会变成一头飞龙,如果让其变身完成那么就会变成地刺。或许这也是当年为什么小狗变飞龙BUG这么出名的原因,因为原本一个恶性BUG却给玩家们大带来了无限的欢乐。
Hi~ o(* ̄▽ ̄*)ブ ,大麦的《星际争霸十万个为什么》又和大家见面啦!今天呢要来说说当年星际争霸一个有趣的BUG。在1.04版本的时候,玩家可以通过游戏中的BUG将小狗变成飞龙而且不需要消耗额外的晶体矿。因此那个年代不少玩家就会利用这个BUG去对抗高难度下的电脑。但是很快地在1.05版本开始这个BUG就被修复了,不过这个有趣的BUG后来却一直被玩家们津津乐道。但是大家可曾想过为什么小狗变的是飞龙而不是其他单位呢?其实这涉及到当年星际1在程序设计的时候类继承树混乱使得游戏里一些单位互相关联错误所导致的,今天大麦就来和各位说说这背后有趣的故事。
其实所有单位都能变成飞龙
虽然说在大家的口中都称这个BUG为小狗变飞龙,但实际上这个BUG所造成的问题是使得所有的单位都能变成飞龙。引发这个BUG的操作首先需要玩家在选中刺蛇之后然后点击变身成地刺,而在变身的一瞬间在点击其他单位,那么这个单位就会变成一颗正在孵化成地刺的卵。当玩家选择取消变身之后就会变成一头飞龙,如果让其变身完成那么就会变成地刺。
有趣的是,利用BUG孵化出来的飞龙会继承先前该单位的所有特性以及攻防等级。比如玩家选择变成飞龙的是神族的仲裁者,那么孵化出来的飞龙就能够让其周围的单位全部处于隐身状态并且自己也是隐身的,还有如果选择的是虫族的母巢话,那么原来存在的幼虫就会开始跟着这头飞龙到处乱跑,还有什么无敌飞龙、加速飞龙等等名场面使得玩家们又开发出了。或许这也是当年为什么小狗变飞龙BUG这么出名的原因,因为原本一个恶性BUG却给玩家们大带来了无限的欢乐。
由于利用BUG孵化出来的飞龙只会消耗掉原先的载体,因此选择最为廉价的小狗性价比高就成为了玩家们的首选,因为当小狗升级成了狂狗以后,飞龙也将拥有其超快的移速和攻速,而且小狗占据的人口更少相当于1条强化飞龙只需要消耗1.5的人口。这就使得小狗变大龙更加的深入人心,后来玩家们也就用小狗变飞龙来统称这个BUG了。
不过由于这个BUG严重破坏了游戏的平衡性,当年暴雪在非常短的时间内就快速推出了1.05补丁包修复了这个问题。但是由于那时候国内仍旧有大量的玩家在使用1.04版本,所以这个BUG还是流传了非常长的是一段时间,如果是放在现在的网游或许这种问题就不会对后世有如此深远的影响。
万恶之源C++
其实星际争霸从一发售开始就是BUG缠身,当初暴雪的研发副总裁Patrick Wyatt在回忆起星际争霸开发的时期也是频繁吐槽游戏的底层架构做得是有多糟糕,最后星际争霸竟然能平稳地运行下来简直堪称奇迹。
而星际争霸当初之所以会有这些问题最主要的原因还是在于暴雪错误地估计了C++这个语言的复杂程度。在90年代的时候,C++刚刚被研发出来,程序员们看到了其身上无限的潜力,但是在这潜力背后也是极度复杂和庞大的学习过程。而暴雪选择C++也是看中了其强大的编译功能希望能让星际争霸成为当时市面上最优秀的游戏。
但有一个问题是,暴雪给星际争霸项目组研发游戏的时间只有1年左右,而且中途还将游戏回炉重做了一次,几乎所有人在最后的半年时间里都处于疯狂加班的状态,高强度的工作加上不熟悉的编程语言就让程序员们脑袋开始迷糊起来。因此在做星际1的时候在无比紧迫的工期之下很难再去考虑到未来游戏的需求变更问题。
而这也导致了星际争霸的代码在编写的时候程序结构糟糕、类继承树混乱、功能类似的代码无规则分布等问题,而当时类继承树的混乱还引发了神族航母总会莫名其妙地脱离编队的BUG。而C++语言的特点又使得程序员不敢去动已经做好的底层框架,只能在原先的基础上不断地打补丁,这就让程序的层次出现混乱,有时候脚本会和游戏底层程序产生冲突。
为什么小狗变的是飞龙而不是其他单位?
在母巢之战发售以前,虽然游戏内部程序结构混乱,但是竟然奇迹般地没有出现什么大问题,也就这样颤颤巍巍地一直运营了下去。但是后来母巢之战推出也就是1.04版本的星际争霸问世之后,新加入的虫族兵种地刺就让之前设计的漏洞暴露了出来
当时星际的程序员对于虫族生产单位时的指令判断利用的是一种cast_spell(spell_name)框架调用的设计,当玩家需要生产单位的时候cast_spell框架就会自动检查当前条件是否满足,当条件符合时指令按钮就会显示出来。比如当我们的科技树没有达到需求时,生产单位的图标就会是灰色无法点击的状态。
原本这个框架适用于幼虫孵化成其他虫族单位没有任何问题,但是后来母巢之战新添加了地刺这个单位迫使程序员不得不在原先的基础上继续添加新的内容。但是新添加的刺蛇变地刺的判定没有考虑到GUI线程更新不及时的这个漏洞,这使得玩家通过快速切换单位能够让系统错误地判断界面UI,让一些本不可以变成地刺的单位执行了变身的操作。有趣的是,如果将电脑的CPU降频到800mhz以下这个变身操作就更加容易实现!
而又因为本身游戏内的类继承树混乱的缘故,使得取消这个变身操作后的单位莫名其妙地链接到了飞龙身上。根据推测之所以是链接到了飞龙大概率的原因是程序员当初在用的判定语句是if else结构,由于必须反馈一个else结果,程序员就随便抓了一个看着顺眼的飞龙给写上了,之前本来想着后续不可能用到else这个结果,但没想到后来新添加的资料片竟然就给用到了。这也是暴露了当时星际争霸在游戏整体制作统筹上还是有许多的不完善之处。
后来暴雪充分吸取了星际争霸在研发时候的教训,到了魔兽争霸3开发的时候在继承树上面的设计就更加地严谨和清晰,避免出现了像这种恐怖的类继承链关系,也使得魔兽3的运行效率和BUG出现频率大幅度地降低!
CUnit < CDoodad < CFlingy < CThingy
经验的的积累是游戏厂商最宝贵的财富
其实这些年来国内有不少玩家在争论中国到底能不能做出3A游戏,其中不少反对的论调认为是资本阻碍了国产3A的发展。但是在我看来,看过国外这些大厂商制作游戏的幕后故事以后才知道,制作3A游戏不仅仅是资本上的问题,还有一个核心因素就是在游戏制作经验的积累。
像暴雪这种游戏公司发展到如今,在游戏的美术、编程、脚本、音乐等等方面都有了几十年的积累,并且在开发游戏的过程成功解决一些难题都是非常珍贵的财富,尤其是在大型游戏的项目管理上是需要数款大规模游戏制作的经验积累以及数年时间还有稳定的人员结构才能培养出来的能力。
比如使命召唤这种3A大作,如果没有良好的项目管理能力,只要在某一个环节出现问题使命召唤系列就很难保持这种每年一部作品的更新能力。回顾早年游戏制作的蛮荒年代,在现在看来出现的某些问题可以算是滑稽,但是也只有经历过了这样的困境并且成功走了出来未来才有可能避免这些问题。其实现如今得益于互联网的崛起,即使某些游戏有严重的BUG问题,厂商也能在第一时间为玩家推送补丁,这也是为何现在很少会有像星际争霸中这种小狗变大龙让玩家们如此印象深刻的BUG了。
因此总的来说,游戏行业也需要一步一个脚印地进行积累和创造,知识和经验并不是用金钱可以取代的,所以对于国内的厂商来说仍然是任重而道远。但我们也看到了积极的一面,目前国内大厂都开始尝试去制作大型游戏比如刚刚登上微软新主机的国产FPS《光明记忆:无限》,虽然和国外的3A游戏还有一定差距,但我们也见识到了我们国内游戏设计师的进步,相信未来我们的游戏行业也一样能推出像使命召唤、战神这样的优质游戏。