励精图制—游戏制作之路 樊一鹏 1999年 第7期 44版 设计制作电脑游戏这一行,可能是当今世界上能够找到的为数不多的迷人工作之一。在高科技的不断带动下,她让你充分享受创作和玩耍游戏的乐趣。而像id Software 这样一夜成名的传奇经历,更让成千上万想要成为游戏开发者的家伙看到美梦也能成真。 你也想成为游戏开发者吗?好,就让我们来谈谈怎样进入这个迷人的行业。 #1 从哪里入手 这是每个初学者在开始时都要问的一句话。古人云:“三思而后行”。在你行动以前,先订出一个计划,这无疑是明智之举。否则你只会成为一个迷失在沙漠里的亡魂,永远也找不到你渴求的绿洲。 如果没有一个明确、合理、可行的计划,你将不可能得到所期待的结果,唯一的可能就是你始终无法完成一个作品。一个可笑的例证便是作者本人的经历。三年前我一步步走上这条绝路,最重要的一个原因就是没人写这篇文章给我看。 话说回来,要一个新手搞出一个明确、合理、可行的计划,跟派一个婴儿去争夺奥运会金牌没什么两样。我对此的建议是先从小事做起,一点一点积累经验。 #1 选定目标 “我想在电脑游戏行业里找到一个工作。” 对这个目标的标准答案通常会归结为“做一个游戏DEMO”,这是否意味着什么呢? 它代表着你将写一些程序,或是做一段动画,再不就是制作一些音乐音效。不过这些东西可不是随便做出来就行的,你做出的东西必须向现有的游戏产品看齐,最好它们就是一个具备专业水准的电脑游戏的一部分。 对程序员们来说,这将意味着一个拥有2D或是3D外观的复杂引擎,一大堆必备的游戏辅助开发工具,比方说地图编辑器什么的。你制作出越接近成熟的游戏产品,就越有可能给潜在的雇主或是投资者留下深刻的印象。比方说你做了一个平台式的跳跃游戏,有各种关卡、得分方法、生物、物品等等,你实际上已经实实在在地证明了你确实理解游戏的基本工作过程,还证明你有着为潜在的雇主或是投资者去完成一个制作项目的积极主动性,最后还证明了你有坚持到成功的毅力。 做出的游戏产品越出色,就越可能帮你找到一个工作。不信?不妨把你自己放到雇主或是投资者的位置来观察,成百上千的求职书摆在你的面前,都想要在你的公司里谋一个差事。在这些人选中,你会选择谁?能帮你做出最出色产品的那个家伙难道不是你最好的人选吗? 进一步发挥你的想象力,也许你的游戏产品会如此出色,以至于比尔会牵着你的衣角,乞求你带上他去征服这个领域。(^074401a^) 我只是想从制作电脑游戏中寻求乐趣。 一但抱定此种念头,那么除了你自己放弃,没有人能阻止你一直干下去。你就像生活在“真空”中一样,可以不需要丝毫的外部援助。你可以加入一些开发共享软件的小组,也可以自己一个人干。在加入一个小组之前,必须知道一个事实,那就是在这种小组里工作,尤其是在那种远距离作业的小组里工作会遇到更多的困难。这个事实可以用公式来描述:新的问题= 问题本身 + 人与人的问题。 “我需要找一个出版发行商,这样就可以用游戏销售收入来保障自己的工作。” 听上去很不错,但不幸的是,从很久以前就开始的记录表明,其他人也都这么想。你的唯一出路在于,要让你手里的产品比其他任何人的都好,而且看上去准能赚大钱。由此可以推论,一个能够实际运行的演示程序在帮你吸引出版发行商这件事上的效果远比只是一段演示动画强。现在的出版发行商们的精明程度是呈指数增长的,用一段演示动画就可以轻松糊弄他们的黄金岁月早已记入了厚厚的历史书中。 那么接下来要考虑的是,一个游戏的DEMO(试玩版)要做到什么程度才合适?根据前人的经验,游戏的试玩版里至少要有一个关卡,或是一个可以实际玩耍的区域来进行演示。这件事情上,你做得越多,就离想达到的目标就更接近。你还应该对游戏的艺术风格有一个完整的了解,如果在实际的DEMO中无法彻底展现这种风格,最好还是想办法用一个详细的描述文档来阐述它,以便让出版商能够弄懂你所要表达的意图。你的游戏 DEMO 没有音乐音效?这算不上是什么致命伤,在出版发行商的眼中,这些东西按照惯例,通常都会放到游戏制作的后期去完成,他们会组织一批专业好手去干这种事。告诉你这一点的目的是为了减少你对于此类事情的过分担心。不过必须要明白,这不是让你的游戏变得更好的最佳方案,这样的东西通常都会草草收工,你能指望其他素不相识的家伙为你的游戏而投入无比的热情?充其量他们只会为了自己那一份报酬而装出卖力的样子罢了。 在动手做自己的游戏时,还必须记住要表现出两点。第一,如果你的游戏想以技术难度取胜,那么在 DEMO中就要尽量多地表现出各种值得炫耀的技术,这将证明你能够完成这个游戏,而不是眼高手低。第二点需要记住的是,要在DEMO 中让人找到游戏的感觉,当然最好是你希望的那种。 我要做得比id更好! 几乎每个人都有这种想法,无数的小组和个人为实现这个目标而投入的精力绝对超出了你的想象。然而直到如今,这个荣誉的圣杯依然高高地漂浮在天际而不可捉摸。你要明白,罗马不是一天就建成的,id制作者的职业生涯不是从DOOM开始,也不是从 Quake 或 QuakeⅡ开始,甚至连 Wolfenstein 3D 都不是。他们开始做的都是一些小产品,大量的 2D 小游戏。不要像笔者一样把自己的第一个游戏项目拟订得无比宏伟,干了很久以后才发现实际需要的资源会花上两千年才能完成。我估计自己没那么长的寿命,也许你能行?因此,对于一个新手来说,开始最好还是抛开那些不切实际的念头,从一些简单的游戏或游戏DEMO 做起,并试着发表它们。 #1 具体该如何干 如果你试图自己制作一个游戏但又不知从何下手,那么,我所能为你提出的最好建议就是去学习,去拼命地学习对你有用的知识。在学有所获以前,先把自己有关于游戏的所有胡思乱想通通抛开,然后一头扎进你所想涉足的领域。 一个令人讨厌的现实是如果想进入游戏行业就必须学习 C++,最好是 Microsoft Visual C++。比较幸运的是,如果只想为自己做游戏,那随便你怎么干,用 Visual Basic、Delphi都不会有什么影响。但如果你想让自己的游戏成为商品并获得成功,那么最好还是遵从这一点。 编程能力是创作电脑游戏的基本要点,游戏行业以光速发展的后果可能是:如果你不是这方面的行家里手,最好打消自己做游戏的念头,以免今后痛苦不堪。什么?你一点都不懂编程但也不想放弃?好吧,那么让我们来看看,你还能做些什么。对了,正如上文所说,你可以先去学习C++,通过学习,你应该逐渐看懂感兴趣的游戏例程。不过千万不要指望短短几个月的学习就能够精通编程。还是以作者本人为例,虽然已经在游戏编程上花了十几年工夫,虽然日渐瘦弱的身躯似乎在暗示着某种进化,但依然还有无限漫长的道路要走。 我应该选择什么平台?(^074401b^) 当然应该是 Windows95/98,原因是它至少已经占据了个人电脑 90%以上的份额,今后多半还会变得更多。难道用户聚集之地会不是钞票聚集之地? 怎样学习编程? 虽然国内有不少高等院校,但你就是找不到游戏专业进修。因此,只要去买两本合适的书就行了。下面这些主题是你在选购书籍应该考虑的。 * C++ * Windows API's * DirectX * Game Programming * Math 关于 C++ 的书,最好是集中讲解标准 C++的,以免分散你的学习注意力。不管今后系统平台如何变化,这些基础的东西都会有用。同时,熟练掌握 C++会对你今后调试程序大有好处。 至于 Windows API (Application Programming Interface)的书,千万不要去看那些大谈特谈 MFC (Microsoft Foundation Classes)的,完全不谈 MFC 的书才是你的选择。原因很简单,我们做游戏根本就不MFC。它的类又大又慢,简直就是故意同我们游戏的需求作对。 DirectX 是 Windows 95 下的一套专用 API,用来处理对图形、声音、网络以及 3D 加速硬件的访问。Microsoft 为 DirectX 提供了一些源程序例子,按照 Microsoft 的惯例,它们是很难读懂弄明白的。涉及这个主题的书最好能够详细告诉你各个例子源程序的每一行代码实际上在干什么,怎样在自己的制作中使用它们。如果发现一本书从头到尾都是在讲怎样为这本书的一个特定项目服务,比方说是为 DirectX 设计一个类,千万不要买它!这种书只会把问题越搞越复杂,它们根本就没有解释清楚你真正应该了解的内容。 一本好的关于 Game Programming的书应该教会你各种基本要素,去指导你怎样写出一个电脑游戏,它将带你深入接触制作电脑游戏的最简单直接的元素。对初学者来说,看看那些涉及许多种不同类型的书可能会比只看详细谈论某一特定类型的书收获更大。 Math绝对是制作电脑游戏必不可少的东西,没有哪种数学不能应用在电脑游戏上。对初学者来说,应该记住各种基本的代数方程式,熟悉三角运算和几何学等等。3D 图形学所涉及的数学知识比较复杂,所以在初期先别去碰它。不要把 设计3D 游戏作为你的起点,它远远超出了你的承受能力。一步跨出半米,你肯定能做到,一步飞越大峡谷,那怕是跳远冠军都不行,请记住,你我只是普通人,不是漫画里的超人。如果你还不明白这一点,可以去思考一个事实:制作一个优秀的3D游戏至少需要数百万元以上的预算。 我应该单独干还是与人合伙? 这其实全看你的个人喜好。你能同其他人融洽相处吗?你愿意同他人一起承担责任吗? 你能组织管理好其他人吗?或者你希望别人来领导你? 我个人认为,在开始时还是自己单干比较合适一些。起码你需要成为一个有足够能力的程序员,并亲自动手做一些小小的游戏。需要什么图片的话,就自己画,即使你画得很糟也没有关系,这个过程只是为了让你能够增长宝贵的经验。等到今后着手干一个具有更高标准和要求的项目时,这些经验会对你有极大的帮助。另外一个办法是使用一些现成的资源,比方说在Internet上去搜寻一些共享图片库什么的,这样做可以为你节省大量的时间。还有人从现成的游戏里窃取资源,如果你也想如法炮制,请慎重考虑此举所引起的种种不良后果。 当你决定请一个专门的美工时,尽量不要在离你太远的地方去找,那样会让你们无法协同工作。不信你可以试一下,很快你就会发现你总是不能按时得到你所需要的东西。 假若你考虑自己成立一个制作小组,最重要的事情就是谨慎地选择你的小组成员。管人是一件费时费力的工作,尽管有不少人抢着干,但真正干好了的又有几人呢?一旦项目被分配下去后,随便一个家伙的耽搁都会延误你的项目进度。 应该创作什么内容? 很自然地,你首先会想到,应该是做哪种类型的游戏?飞行模拟、角色扮演、动作射击……(^074401c^) 理所当然,你所需考虑的自然是你实际能完成并能吸引自己的那种类型。只有这样,当你遇到困难时,才会有激情去克服困难并最终完成你的游戏。很难想象,如果让你去做根本不感兴趣的那种游戏,你会有足够的动力去把它完成。 许多人开始想到的就是制作角色扮演游戏。然而,实际情况表明,将角色扮演类游戏作为第一个设计游戏的目标是非常不明智的行为。顺便提一句,本人便拥有这种不明智的过去,带领四个人足足白忙了一年半。 最好的方法是做一个非常简单的游戏,以至于你绝不可能失败。有很多人是从打砖块、堆方块、吃豆豆等小游戏做起的。如果你也有这种想法,就应该坚持下去,直到这个游戏得以彻底实现。记住,在这个游戏没完成以前,不要急着去开始做其它所谓更大更好的游戏。游戏设计在很大程度上就是在于你能否坚持到最后,在这个过程中,大约是每五十个游戏中只有一个是完工了的,你想成为另外那四十九个中的一员吗? “怎样实现设计文栏?” 先给你的游戏拟订一个良好的规划,详细描述从头到尾每一屏的内容,以及玩家在其间怎样与电脑发生互动等等。需要如此详细描述的一个原因是,如果你自己都不确定想要在游戏中实现什么目标,你就会变得犹豫不决,不时地改变主意,不断地加入一些让你的程序无法协调的东西……这又怎么保证能把它完成?更不要说按时完成了。 这样看来,我们确实需要一个设计文档。实际上每个游戏的开发者都会有非常详尽的设计文档,关于这点,有人甚至说:“一个设计文档应该详尽到任何两个不同的开发小组按照它的指引都会写出一个同样的游戏。” 一旦你考虑到人们对于同一事物所做出的千奇百怪的解释,你就可以体会到设计文档的巨大意义。那么什么是设计文档呢? 一个设计文档通常会分为许多条目,俗话说百闻不如一见,看个例子你就明白了。 一、一般性描述 1.背景故事 2.游戏介绍 3.游戏人物表 4.特征列表清单 5.定义和描述 6.游戏介绍过程 7.游戏选择过程 8.游戏开始动画 9.游戏的进行过程 10.游戏的关卡 11.游戏的事件 12.结束游戏 13.退出游戏 二、屏幕描述和用户界面规范 1.游戏介绍过程或是游戏开场动画 2.游戏选择菜单 3.在游戏开始前的选项设置子菜单 4.游戏屏幕 5.屏幕流程图 6.控制 三、艺术规范 1.颜色和分辨率模式 2.掩膜颜色 3.文件类型和命名规则 4.背景艺术列表清单 5.前景艺术列表清单 6.人物艺术列表清单 四、音乐音效规范 1.声音效果列表清单 2.配音演员列表清单 3.音乐列表清单及其描述 五、实例规范 (具体实现) 1.项目实施过程及人员安排 2.游戏完工的标志 3.所需的函数与过程 4.角色所需的信息 5.画面如何绘制 6.动画每秒所需帧数 7.游戏开发所需的资源库 8.整个游戏从头到尾的流程图 六、人工智能规范 1.角色所需知道的知识 2.角色的实际行为同现实世界中的真实行为的区别 3.平衡性考虑 七、法律材料 1.版权通告 2.保密协议 你已经看到,只是一个简要的提纲就这么长。一旦加上详尽的内容,这个文档就会变得非常大。一个大中型项目至少会有一百页以上的文档。那么设计文档要写多少才够呢? 不用担心,出于平衡性的考虑,你总有一天会停手的。写得过多实际上也不是好事情,你会在沮丧中耗尽热情,最后不得不痛苦地取消项目。 尽管写起文档来是如此地费力,但这种努力绝对是值得的。你的思路会在文档书写过程中定型,你会逼着自己回答:“我该怎样来完成这项工作?”在做游戏时,掌握这一点是绝对必要的,它将给你指明一个正确的方向。 无论如何,你至少应该花上几天去着手写些文档,用这点时间,你可以完成一个初步的框架。从这以后开始,随着游戏的进展,你会不断发现某些东西是你所无法实现的,这时就是你该回过头来修改文档的时候了。遵循这个过程,你将不会偏离你的最终目标。 有人可能会问,我只想编一个小小的游戏,那我还是需要写设计文档吗? 这个问题的答案绝对为“是”。除了为你今后进入这个行业打下基础以外,其主要原因有两点:第一,在这种情况下,设计文档同样会指导你编程;第二,因为是个小游戏,那么设计文档也不可能太长。还有什么说的?坚持写吧! 接下来,该考虑一个大家都很关心的重要问题: 制作过程中遇到无法解决的困难时该怎么办? 这种倒霉的事情谁都会碰到,即使一个很有经验的游戏开发者有时也会遇到他觉得无法逾越的障碍。幸运的是,我们处在网络时代,在 Internet 上你会得到所急需的帮助。不过由于中文信息太少的缘故,这要附带一个条件,即你的英语能力不能过低。 据我所知,有很多站点有游戏开发的各类相关指南,用搜索引擎可以很容易地发现它们。如果不知道搜索所用的关键字,你可以试一试“games programming”,剩下来的工作就是一个个地去浏览搜索结果。笔者曾用这种方法找到过很多好东西。 如果这样还不够的话,你可以去新闻组试一下。不过在你第一次发帖子之前,你应该先留心观察几天,看看这里的人们是怎么做的,免得乱贴东西上去后会惹人嘲笑及反感。有着悠久历史的rec.games.programmer 新闻组前不久被分成了 comp.games.development 一系列的新闻组,这绝对是你该常去的地方。如果你上不了这个新闻组,微软的 msnews.microsoft.com也是一个值得流连之处。至于国内的那些新闻组论坛什么的,去不去都无所谓,实际上它们帮不了你多少忙。 使用新闻组时一定要注意选择适当的组发帖子,不要把关于 DirectX 的问题拿到设计组或是艺术组去问。发出帖子后,即使没有人马上回答,也要耐心地多等上两天后再重新发帖子。 #1 联系出版发行商 如此日复一日年复一年,终于有一天游戏做好,现在又该干什么? 这是你该好好想想怎样发布你大作的时候,你做这个游戏的目的不会只是拿来自己一个人偷着玩的罢? 我们一起来看看有那些途径可以帮你完成这个事情。 肯定有人想过、试过自己去卖他们的游戏软件,但我实在是想不出这样的结果有多么美好。还记得前面提到的出版发行商吗?你可以壮着胆子去找他们(嗜钱的动物),他们会帮你把游戏摆上商店的货架。不过要让这群家伙如此干的唯一前提就是,你开发出的游戏产品质量要足够地好,至少要比已经摆在货架上的大部分游戏都好。 还有一个办法是通过常规的软件销售渠道去散发你的游戏软件。但你要慎重考虑该渠道在推广游戏软件方面的能力,以免明珠暗投。 尽管已经有了这些途径,还是有人喜欢用共享的方式发放自己的游戏软件。如你可以将游戏的DEMO发到自己或相关的网站上,也可以放到电脑报《游戏世界》这样的光盘上,让更多的人了解你的游戏,并能收集到很多宝贵的意见。 需要注意的是,不要直接把你的游戏产品寄给那些站点。在向他们展示产品之前,最好先同他们签订一个非泄密协议(Non-Disclosure Agreement,即 NDA)。如果这份协议签订得当的话,它可以很好地保护你的权益。NDA这样的协议是一个标准程序,你千万不要忽略它。如果你发现他们的站点没有关于 NDA 方面的信息,你可以发个 E—mail 进行询问。询问时请说明你开发的游戏类型、运行平台,看看是不是人家所需要的。 #1 保护自己的权益 好好保护你的游戏产品是非常重要的。你已经为此付出了无数的汗水和心血,难道会忍心看着有人从中窃取原本属于你的权益? 尽管你所写下的一切内容都受版权法所保护,但你首先必须证明那些东西确实是你所写的。为达此目的,你要做的第一件事就是在产品中放一条版权声明,宣称你对作品拥有版权,这样做的目的是告诉其他人你非常清楚地知道对产品所享有的权益。 一个可靠的办法当然是到国家版权局登记,根据本人的体会,这虽然要花你不少时间和精力,但绝对是值得的。像本人一样贫困的同志们还想出了一个“经典”的办法:把想要获得版权的东西及相关材料用密封袋装好,再通过邮局寄给自己,根据邮包上的日期以后就能证明产品的日期。根据国外有关的案例表明,这种证据是合法的,法庭会支持这种证明。因此,你可以开动脑筋,把这个办法洋为中用。 使用注册商标是最可靠的办法,对你的权益保护得也最完整,但它稍微有点贵,你不一定付得起这笔钱。 还有一点忠告,如果你的游戏卖点是基于新的思路,你在签订NDA之前,千万不要详细告诉他人这个思路,你应该用一些现成的产品打打比方,作一个相似的描述就行了,剩下的内容让他自己去想象吧! 唠叨了这么半天,我也有点累了,不知道你是否有所收获,我想,只要你做事足够努力,一步步地不断前进,你总有一天会做出期望中的游戏的(此前省去限制条件若干条),祝你好运!