在PC游戏运行于DOS操作系统的时代,我开始效力于一款名为《魔兽争霸》的游戏项目。(
查看第二章)
我成了项目主管 虽然我已经开发过数款PC游戏,一系列Mac游戏,以及7款针对超级任天堂和世嘉五代的主机游戏,但我在这些项目中所扮演的不过是新人角色,或者说只是开发其中一些原作的移植版本。游戏移植就是将游戏从一个平台发布到另一个平台的过程,其中包括转换代码、设计、美工和其他游戏资产,以便原先运行于Amiga的游戏也能够运行于任天堂设备。
我的角色包含两项工作:负责领导团队的“制作人”——游戏行业中所谓的项目主管、设计师、布道者、典狱长的头衔;以及负责编写大部分游戏代码的“主程序员”。这可能没有那么可怕,因为一个游戏项目可能招聘10个20个开发者,开发团队最大规模时至少可达到200名开发者。
Patrick Wyatt
《魔兽争霸》起源 我曾就职的初创公司当时名为Silicon & Synapse,之后更名为暴雪,以对应我们暴风雨般猛烈的开发方法——在闲暇时间玩大量游戏,《魔兽争霸》的灵感正是发源于这种活动。
我们玩过(反复重玩)一款名为《Dune 2》(Westwood Studios)的游戏后受到启发而创造了《魔兽争霸》。《Dune 2》是首款现代意义上的即时战略游戏(RTS),拥有横向卷轴世界地图,即时单位建设和移动,以及独立单位战斗等元素。除了一些比例和图像质量之外,它在设计上与《星际争霸2》等现代即时战略游戏并没有很大区别。
其前作《Dune 1》也采用了一些相同元素,但其半即时单位战争元素则隐藏在了冒险游戏中。《Dune 2》除去了前作中让玩家作为游戏角色之一参与其中的理念,其关注重点是现代RTS机制:收割庄稼,收集更多资源,建设军队,最后找到并征服敌人。
和暴雪团队中的其他人一样,我也在午餐时间专门玩《Dune 2》,其中的三个种族都玩遍了,确定了它们各自的强项与弱点,之后再与同事比较玩法风格、策略和战术。
虽然这款游戏非常有趣,但也存在一些明显有待修复的瑕疵。最值得一提的是,我和好友只能同电脑对抗。而这款游戏的理想选择显然是多人模式。与需要每位玩家等待所有对手完成单位移动指令的回合制游戏不同的是,即时战略游戏允许所有玩家同时发出指令,执行快速、决定性的战略移动,而非冗长持久的战略性计划。
脑中有了这个目标之后,游戏开发就无需在游戏设计、技术需求评估、安排日程表或所需人员预算上大费周章。在暴雪我们将此称为“特供商业计划”,也就是标准操作方法。
初始开发 作为项目唯一的开发者,在初始阶段没有美术团队,我就先截取《Dune 2》的美术资产来用,直到项目进展不得不需要一两名美术人员时。这些美术人员可以一起赶其他临近截止日期的项目,此时不可以分心,我们一直是时间紧迫。
我早期开发游戏引擎时要做的事情包括创造基于贴图的横向卷轴地图渲染器,绘制游戏单位和其他位图的精灵渲染器,分配鼠标和键盘事件的事件调度器,以及控制应用行为的大量用户界面代码。在最初几周完成这些项目子集后,我们就能够“试玩”一款游戏,尽管我当时还没有植入单位建设元素。早期试玩需要使用输入指令以便屏幕生成单位。
我每天都要以有序的方式在之前的基础上创造内容。由于没有时间表及项目的外部催促因素,我有幸能够自主选择接下去要创造什么功能,这让我觉得动力十足。我原本就很喜欢游戏开发过程,就像嗑药上瘾一样忘我地编程。即使是现在,我已经进入这一行22年了,我还是很喜欢编程中的创意。
首个独特功能:多单位选择 我最为骄傲的一个功能就是单位选择。与只允许用户一次仅选择一个单位的《Dune 2》不同,我设计的这项功能允许用户一次选择一大遍的战斗单位,很显然这种功能要以加速玩家的任务调度,极大提升游戏战斗力。
我进入游戏行业之前曾使用一些低端的“计算机辅助设计”(CAD)程序,例如MacDraw和MacDraft,为我爸的公司设计酒窖,所以对于“拖拽”一系列单位的操作得心应对。
我相信《魔曾争霸》是首款使用这种用户界面的游戏。当我第一次部署这种功能时,就可以同时选择和控制大量单位,这里不存在选择的单位数量限制。
而一次性选择和控制100个单位则暴露了我所部署的简单寻径算法的弱点,我完成了基本算法后,就投入大量时间选择单位,并向目的地分配游戏单位,而不是编写更多代码。这是我的编程生涯中最酷的功能!
在之后的开发过程中,我们根据团队成员的许多设计主张,决定允许玩家一次只选择4个单位,因为用户需要关注自己的战略部署,而不只是集结一帮人将其全部发往一场混战。我们在之后的《魔兽争霸2》中将此数目增加到了9个。继承了《Dune 2》的《命令与征服》并没有单位选择数量的上限。但这是另一个题外话了。
除了一次可以控制多个单位之外,这个阶段的《魔兽争霸》完全不像是降级版的《Dune 2》,我甚至开玩笑说,虽然这款游戏脱胎于《Dune 2》,但实际上与其完全不同——我们的雷达迷你地图位于屏幕左上角,而后者则处于右下角。
团队构成 在1994年初,我在为该项目获得更多支持方面取得了进展。Ron Millar、Sam Didier、Stu Rose、Bob Fitch、Jesse McReynolds、Mike Morhaime、Mickey Nielsen等人也入伙了。他们当中多数人是在我们公司在1994年2月被Davidson & Associates收购时参与到这款游戏中。
Ron Millar这位金发壮汉很显然是维京战士的后裔。他最初曾在Virgin Games为Gameboy作品制作美术内容,但杰出的创意和设计感令他在暴雪多个项目中担任设计师,在《魔兽争霸》中他也担任同样职位。
Sam Didier是一个矮壮的角色,好像是一只缩小成人类比例的熊,其英雄主义的个性和史诗般的绘画作品奠定了暴雪游戏的美术风格,曾经为16位主机游戏绘制美术资产,在会议期间和其他闲暇时间都可以露几手绘画才能,并因此负责这款游戏的美术设计方向。
Stu Rose原先是插画师,暴雪运用至今的logo就是出自其手——他最初负责绘制游戏的背景贴图美术,但在游戏最终设计时扮演了更重要的角色。Stu十分还是个令人难忘的配音演员,他的喜剧天份令其成功演绎了受尽压迫和苦役的“人类农民”。
Bob Fitch原先是程序员,在我开始展开《魔兽争霸》时他还是另一款游戏的项目主管。Allen Adham是暴雪总裁,曾向Bob分配了开发一款文字游戏“Games People Play”(包含填字谜、scramble、bloggle等多项元素)的任务,但Bob对该项目缺乏热情导致数月毫无进展,看到《魔兽争霸》的情况之后,Bob就过来协助我,他对这款游戏的热情推动了这款游戏的快速进展。
Jesse是加利福尼亚理工学院毕业生,原先是为IPX网络协议创建网络驱动程序,以便游戏能够运行于本地局域网(LAN)。Mike Morhaime是暴雪两名创始人之一,之后接手了更困难的任务,即编写“混合模式”的调制解调器驱动器。虽然《魔兽争霸》是一款DOS“保护模式”游戏,调制解调器驱动器通常来源于保护模式和实时模式,原因是DOS操作系统及其运行的80386芯片构造的变化无常,所以我们经常可以发现他坐在办公室盯着满屏诊断数据,因为他得解决与重新进入代码的复杂时间问题。最后的调制解调器代码稳若盘石,很大程度上要归功于我们当时使用的原始工具组。
《魔兽争霸》的美术设计Warcraft_orcs_and_humans
Allen Adham希望获得《战锤》的授权,以便通过品牌辨识度而增加游戏销量。《战锤》是《魔兽争霸》美术风格的一个巨大灵感来源,但结合了多项元素,包括开发团队中几乎每个人都缺乏商业概念,以及捍卫自己的游戏世界的空前热情。我们已经受够了与DC Comics合作开发“Death and Return of Superman”以及“Justice League Task Force”的糟糕经历,希望自己的新游戏不要重蹈覆辙。
现在很难想象,如果当时暴雪没有控制《魔兽争霸》的知识产权(IP)该会是什么结果——很可能暴雪就不会是当今游戏领域的霸主了。
在《魔兽争霸》发布数年之后,我爸从亚洲回来了,给我带来了一系列《战锤》的微缩角色模型:“我在旅途中发现了这些有趣的玩具,这让我想起了你的许多游戏,你们也可以找法律团队联系他们,因为我认为他们剽窃了你们的创意。”
游戏开发中的障碍 早期开发过程中的一个有趣方面就是,虽然我创造了一款可以使用调制解调器或本地局域网运行的游戏,但我们公司办公室却并没有LAN。因为我们开发的是主机游戏,也就是可以插入软盘来玩的游戏,当时还没的配图LAN的必要,虽然这可以简化制作备份的过程。
所以当我开始同其他美术人员和程序员合作时,我们使用了“sneaker网络”,让软盘在几个办公室之间流通,以便整合源代码修订和美术资产。
Bob Fitch是项目的第二个程序员,我和他经常复制文件和反复更改代码。我们间歇性地出现一些整合错误,我们修复的漏洞也会再次出现。我们在复制文件时追踪并发现了这一点——我们偶然重写了漏洞修复,我们就不得不加快之前是如何修复漏洞的。
由于我们开发代码速度很快,并且缺乏管理代码整合流程(只“记得”自己制作了哪些文件),这种情况一再发生。在这方面我比较幸运一点,因为我的电脑是我们执行所有调合过程中最“大师”级别的系统,所以我的调整很少丢失。现在我们使用了源控制以免再出现这类事情,但当时我们确实不知道究竟发生了啥情况。
有了更多程序员、设计师和美术人员,我们的开发过程进展明显,但我们还是发现了这个过程中的一大障碍。这款游戏最初是在DOS的“实时模式”中开发的,这意味着它只有640K的内存可用,比操作系统少120K。你可以想象当时的电脑有多蹩脚吗?
由于美术团队开始制作游戏单位,背景和用户界面的美术内容,我们的内存很快就用完了,不得不寻找其他替代方案。第一个尝试方法是使用EMS“分页内存”,保存超过640K内存上限的美术资源。
程序员讲起EMS内存那副苦大仇深的样子,好比是老一辈人讲述赤脚爬山去上学那种辛酸史,EMS实际上是一种更可怕的经历。
EMS解决方案实际上并不管用,实际上还有更好的方法。有家名为Watcom的公司推出了C编译器,其中包含一种允许程序以“保护模式”编写,可以访问线性32位内存的DOS模式“扩充器”,这是今天的程序员32位(甚至是64位应用)都会用到的工具。虽然它需要两天时间来更新源代码,但DOS模式扩充器真是完美,当我们重返正轨时,就可以获得更多可用内存了。
小结 在本系列的下一篇文章中,我将分享Stu Rose以及设计绝招,《魔兽争霸》首个多人游戏,几乎扼杀多人模式的漏洞,Bill Roper如何令游戏适用于软盘,Westwood Studio对我们这款游戏的反应,以及我所能回忆起来的关于这款游戏18年前的开发团队成员的其他趣事等内容。
原文发表于2012年7月25日,所涉事件及数据以当时为准。