Patrick Wyatt:魔兽争霸的制作过程(1)
英文原文: Patrick Wyatt,编译: CSDN
摘要:说到DOS下的RTS(Real-Time Strategy)游戏,不得不提起Warcraft!它被认为是现代RTS的鼻祖之一,本文由魔兽之父Patrick Wyatt亲自操刀,重现当年Warcraft开发的日子,并阐述Warcraft开发所遵守的理念。
导读:回到那个PC游戏还是运行在DOS系统的时代,DOOM、极品飞车和波斯王子等游戏影响了一代人,当然也有国产的仙剑奇侠传等经典之作流传下来。但是说到DOS下的RTS(Real-Time Strategy)游戏,不得不提起Warcraft!它被认为是现代RTS的鼻祖之一(虽然魔兽之父Patrick Wyatt更推崇Dune2才是现代RTS的始祖),本文由Patrick亲自操刀,重现当年Warcraft开发的日子,并阐述Warcraft开发所遵循的理念。
我是项目组长!
虽然我已经参与开发过很多PC、Mac游戏甚至为超级任天堂和世嘉开发过7个电视游戏。但是一直以来都是以一个初学者的身份参与这些项目,或者只是简单地将游戏移植到其它平台。
我主要参与两项工作:以制作人(作者注:游戏行业术语,通常是指项目管理员、设计师、传道人和 cat herder)的身份领导开发团队以及作为首席 程序员来编写主要代码。相比于现在两百来人的大团队,以前只有一二十人的小团队更让我放心。
Warcraft的起源
我所在创业公司——当时叫做Silicon & Synapse,后来因为我们狂暴的开发方式改名为Blizzard(暴雪公司)——的开发人员在休息时间玩了很多优秀的游戏,正是从那些游戏中碰撞出创造Warcraft的火花!
我们开发Warcraft的灵感来自于Westwood Studio(西木工作室)的Dune(沙丘)2。虽然颇有争议,但Dune2通常被认为是第一个现代实时战略游戏(RTS),有一个滚动的世界地图、实时的单位建设和运动以及个体单位战斗。它和现代RTS比如星际争霸2相比,除了规模和图形效果外并没有什么实际区别。
它和它的前身Dune1——一个非常有价值的游戏——共享了一些相同的元素,但Dune1的半实时单位战斗被包裹在了冒险游戏里,Dune2则摒弃了之前的角色扮演的路线,专注于RTS架构:开采资源、建立基地、开采更多的资源、建立军队并且最终找到并消灭敌人。
和其他Blizzard的员工一样,我最终也沉迷于Dune2,并且已有空闲时间就研究三个种族的优劣,一起在公司里讨论游戏风格、展示和战略。
虽然这款游戏很有趣,但它有几个很明显的缺陷急待修复。最明显的是当我和朋友只能一起和计算机战斗,很明显这种游戏更适合多人对战。不同于回合制游戏,实时战斗需要允许多人同时下命令、迅速做出反应并且支持长远的战略计划。
带着这一非凡的思想,Warcraft的设计变得简单多了,只需要评估技术要求、建立计划和员工开销即可。回到Blizzard后,我们经常在午餐时间在餐巾上制定计划,我们把它叫做“今日事物计划”,这也是我们的标准操作方法。
初步发展
在开发的初级阶段,我们甚至缺少艺术家团队,在我不得不需要一两个艺术家帮忙之前,我一直在使用Dune2的屏幕截图,艺术家总是没有时间分心,我们一直时间紧迫。
我早期的游戏引擎开发的努力包括一个基于拼图的滚动地图渲染器、一个用来绘制游戏单位和其他位图的图元渲染器、一个图元排序器来保证游戏单位动起来还有一个时间调度器来传递鼠标和键盘事件、一个游戏调度器来控制单位动作以及大量的用户界面代码来控制应用程序的行为。随着项目最初几个礼拜工作的完工,它已经可以当做单人游戏“玩”了,尽管还没有实现后来的单位建设等功能,在早期阶段需要输入命令来在屏幕上制造单位。
之后每天我都在改进之前的工作。没有任何时间表和里程碑,也没有项目外部驱动器,我可以随心所欲地决定接下来建设什么特性,这让我非常有动力。我非常享受这样的开发,就像毒品一样让我入迷,即使现在,我进入游戏产业22年之后,我仍然喜欢编程的创造性。
第一个特色:多单位选择
最令我自豪的特色就在于单位选择,和Dune2不一样,开始多单位战斗不再需要疯狂地点击鼠标,玩家可以在其中多选单位来加速战斗部署,能够明显地提升游戏战斗。
在进入游戏产业之前,我曾经接触过几个低端计算机辅助设计(CAD)程序,比如MacDraw和MacDraft来为我父亲的酒窖商务设计酒窖设计,使用拖拽来选择长方形区域显得非常自然,这要比使用命令来操作单位方便多了。
我相信Warcraft指第一个使用这种操作模式的,当我第一次实现这一特色功能,从此可以同时选择和控制大量单位,选择单位的数目并没有限制。
但同时选择和控制100个单位也暴露出它致命的缺点——我的简单路计算法。当我得到了基本的算法成功后,我仍然花了数小时来选择单位并把它们派遣到地图的各个角落,而不是编写更多的代码,这是我在编程生涯中最伟大的创造!
后来在和团队成员对此讨论设计问题后,我们决定允许玩家一次最多仅可选择4个单位,以保证玩家注重战略部署而不是简单的拖动一群暴民打一次性群架。后来,我们在Warcraft II里把这个限制增加到9。命令与征服,Dune2的精神继承者,并没有在单位选择的数量上加限制,这也是个很值得思考和讨论的设计分歧。
这一阶段的Warcraft,除了多单位控制之外,简直就是Dune2的“阉割版”,就像我保护性地开玩笑道:Warcraft本来就是受Dune2的启发而制作,但他们是完全不同的游戏——我们的雷达地图在屏幕的右上角,而他们的在右下角。
团队的建立
1994年早期,我加入了由Ron Millar, Sam Didier, Stu Rose, Bob Fitch, Jesse McReynolds, Mike Morhaime, Mickey Nielsen等人组成的团队,他们中许多人在我们公司被Davidson & Associates于1994年2月收购后开始加入游戏的开发。
Warcraft的艺术
Allen Adham希望能够得到Warhammer(战锤)世界观的授权,借助品牌知名度来增加销量。Warhammer是Warcraft艺术形式的灵感来源之一,除了很少有事务团队的参与之外,几乎开发团队的所有人员都参与了“我们的世界”的设计。我们有和DC Comics共事“超人的死亡与归来”以及“正义联盟特遣部队”的糟糕经历,我们希望在自己的游戏中避免类似这样的问题。
现在想想,Blizzard没有去控制Warcraft世界观的知识产权真是不可思议——这很不像暴雪在现在游戏产业中主导者所做的事。
Warcraft推出多年以后,我的父亲在从亚洲之旅回来的途中给我带来了一个礼物:一套Warhammer骷髅战车和战马的微缩模型,附带着一句话:“我在旅行的途中发现了这个东西跟你的游戏很像,我觉得你可以让法律部门去联系他们,因为他们在抄袭你。”(⊙o⊙)…
游戏开发过程中的阻力
在早期开发过程中我们遇到了一件有趣的事,在我在创建一个能够通过调制解调器或者局域网玩的游戏时,发现公司竟然没有一个办公室局域网!我们使用控制台标题,可以很方便地使用软盘传输,所以局域网并不是必须的,尽管它能简化备份。
所以在我开始与其他艺术家、程序员合作的时候,我们使用了“sneaker network”——在办公室之间传递软盘来提交代码和插图。
Bob Fitch是这个项目的第二个程序员,我和他经常互相传递软盘来合并代码变化,但是经常会因此产生错误。我们跟踪合并步骤,发现经常是在合并新代码的时候重写了修复bug的代码,于是我们又不得不回忆一遍之前是怎么修复这个bug的。
这种事经常发生,因为我们开发的疯狂以及我们缺少处理代码合并的步骤,只是通过记忆来判断自己曾对哪些文件做过更改。很幸运的是,我是代码合并系统的中心,所以我做的更改很少会丢失。现在我们有很多源代码控制工具,而那时候我们都不知道它是什么。
随着程序员、设计师和艺术家的大量增加,我们也发现了我们的工作的大的阻碍——游戏最初被设计在DOS “Real Mode”下开发,这意味着只有640K内存可以使用,操作系统本身就用了近120K,你能想想当时的计算机有多恶心吗?
随着艺术团队开始创建游戏单元、背景和用户界面,我们迅速烧掉了所有的内存,并开始寻找替代品。第一个尝试是EMS“paged memory”,超越640K内存障碍映射和存储数据。
老程序员会告诉你EMS的故事,就像老人们说他们曾经为了爬山上学不得不光着脚穿越雪地一样,但是EMS实际上比这更可怕。
在所有的情况下EMS都没有成功,但幸运的是有更好的解决方案。一个叫Watcom和公司发布了一个C编译器,包括一个DOS-mode的扩展器,允许写在保护模式下,通过进入线性32-bit内存——这一现在的程序员在写32-bit(甚至64-bit)应用时认为是理所当然的东西。但是它需要花一两天来更新源代码,DOS-mode扩展器运行地很完美,我们又可以在更大的内存环境下工作了!
下篇预告
下一篇文章里,我将要说说Stu Rose和设计师团队、第一个多人模式的Warcraft游戏、那个差点让多人模式流产的bug以及Bill Roper是如何让Warcraft变得这么酷的、把游戏装进软盘、Westwood Studio对我们的游戏的反应以及18年前我们这些开发人员所学到的宝贵的东西。