如何看待贴吧里的十五六岁就用引擎写游戏的开发者?

现在做游戏很简单,大把代码给你参考,大把框架给你使用,Windows帮你作完了大部分事情。我们那个年纪写游戏时,家里还没有Internet,什么资料都查不到,什么开源引擎都没有,95年左右你要写一个游戏,你起码面临:

  • 同显卡打交道,显卡著名的 ModeX显示模式,估计现在没几个人听过了吧,直接写显卡端口,N多trick才能初始化成功。
  • 直接访问显存,记得当年有个优化是,((char*)0xa0000L)[x + (y
  • 用调色板绘图,256色的调色板,建立若干索引表,来快速索引两个颜色混色的结果。
  • 保护模式编程,自己初始化GDT和LDT,后来找到 dos4gw,牛逼的 watcom c++。
  • 自己实现线程,编程8254时钟控制器,给CPU的IRQ0发中断,来调度不同最多32个任务,到时间靠一条IRET指令实现切换。
  • 自己控制声卡,通过220端口控制声卡(估计也没几个人用过吧),再用DMA传送音频,实现声音播放。
  • 自己实现混音,同时播放多个音源时,需要重采样成声卡格式,并且每次DMA中断时混音后给声卡。
  • 自己播放音乐,利用声卡338端口的 FM Synth合成器来播放MIDI音乐里面不同音轨的乐器音符,并用之前实现的线程系统,在后台线程运行。
  • 大量汇编代码,图形拷贝,图块缩放,RLE,显卡控制,多边形填充,键盘中断接管。
  • 自己绘制字体,HZK16,估计听过的人也没几个了。
  • 自己读取图片,GIF,PCX, BMP。
  • 自己播放视频,自己实现解码播放 animator, 3ds输出的 FLC视频格式的视频。
  • 自己实现脚本,没有LUA,没有PYTHON,但是你需要给你的游戏实现脚本来描述一些简单的剧情,没见过其他游戏是怎么做的,没有任何参考代码的情况下,意识到开发游戏需要靠脚本来提高效率,然后自己实现一套脚本系统。
  • 凭空实现游戏,从来没见过任何一款游戏代码的情况下,自己想想状态机应该怎么写,游戏对象应该怎么同时移动,图像前后遮挡该怎么做,游戏各种逻辑该如何写。
  • 学习美术设计,虽然没有美术功底,但得熟练应用当时常用的animator,3ds,等软件,自己制作一些简单的界面和角色,自己能对其他图片进行二次加工,画像素图,合并调色板。

—————————
记住,当初你没网络,没有现在那么多开源软件,书店里书基本都是C语言调用BGI绘图的,偶尔一两本讲显卡原理的,偶尔一两本讲声卡原理的,你就算捡到宝了,《电脑报》《编程技巧与维护》上面,谁发一篇文章教你FLC格式的视频动画格式原理,你可以欣喜弱狂了。

记住,当初你没网友,没有朋友可以交流,很多东西都考仔细观察,猜测和反复试验来完成,我记得95年我看到仙剑奇侠时很惊讶它的效果,根本不知道斜45度图像该如何现实,如何处理遮挡关系,身边没有问不了任何人,然后左思右想,发现远来可以靠 (x+y)进行对象排序,自己一实验,果然成了。我记得92年小学时,写第一个游戏,以前编程都是从头到尾一件事情一件事情的干,想不通十多量飞机怎么能同时飞,当时又没多任务,我也还没实现模拟任务系统,绞尽脑汁,有一天在书上看到介绍UNIX分时系统的逻辑是每个任务运行一小段然后切换,顺着这个思路想下去,终于想通所谓状态机模型,每帧处理每架飞机时根据当前的状态移动一小步,然后更新状态,再处理下一辆飞机。然后兴奋的跑到电脑面前,编码一整天,终于实现。然后拉着同学来自己家玩,看到她们玩的那么兴奋的样子,突然感觉创造游戏,是一件多么令人愉快的事情。

当年做款游戏都快要写出半个操作系统来了,整个城市就你一个人在研究这些,老师只会教NOI,书本上只会教你用BGI绘图,没有任何一本游戏开发相关书籍出版,关键是你还在读中学,什么组成原理编译原理,计算机图形学你都没学过,全靠书店几本破书,杂志上的零零碎碎和自我领悟。比起今天的小孩,windows都帮她们做了那么多的事情了,自己买本书,照着书上实现下三角形绘制,模型导入,场景管理,碰撞检查,不懂可以问知乎,不行可以随便上 gamedev.net,游戏写不来可以看人家的代码照着抄,脚本可以用lua,python。简直是生在天堂里呀,有什么值得称道的地方呢?

行业总是要发展的,我也从《编程技巧与维护》《VGA显示原理》。。。和各种杂志上获取了不少知识,当年写这些文章的人,和身边搞计算机的,都比我大很多,我幼小的心灵里总有一份冲动,冥冥之中觉得将来自己肯定能超过他们,这不是因为我看不起她们,异或我狂妄自大,而是只有这样,站在她们肩上,才能对得起大家共同爱好的这个行业,大家共同追求的事业。

而今天,我会尽量利用业余时间,于各处培训游戏开发,帮助大家该如何实现各种东西,目的也只有一个,让今天的小孩将来有一天能够超过我,不是因为她们狂妄自大,异或我妄自菲薄,而是因为只有这样,让她们站在我的肩上,才能对得起大家共同爱好的这个行业,大家共同追求的这个事业。

在那个年纪,我已参与商业游戏开发好几年了,参与过3个已发行的项目,其中一个是做主程及主策。引擎开发、游戏编程、策划都做过了。
这并不需什么天才,那个年纪就是能自学那种程度的知识和技能。问题是环境是否容许,例如放学后去办公室搞到午夜才回家,同时学业成绩不能太差。
昨晚在另一回答中说到勇气和毅力的重要性,似乎仍适用于这里。


补充:节录上海麻辣马资深程序员叶劲峰:我的游戏人生

小学四年级,我当上了学校图书馆的管理员。有一天馆里送来一台Apple IIe,听说是一家公司换IBM PC而留给学校的。那台没软盘没录音机的Apple IIe,只能用来编写BASIC程序,不能玩游戏。当时心里传来一道声音——

“想玩游戏?自己写啊!”

我借来一堆Apple IIe书籍,阅读、上机编程,把午休和放学后的时间都用上了。课上和晚上,还会把程序写在纸上,在脑海中运行程序。那时候写的程序,主要围绕游戏和图形。记得曾经在Apple上重写BBC Micro上玩的“撞砖”游戏,从中学到了一点游戏模拟技巧,后来还学习了一点6502汇编。在学习的过程中,我意识到编程的世界是虚拟的、完美的,不像机械或电子等物理系统有许多限制,几乎凡是想得到的事情都能用编程实现,并且能完全自动化地执行。这让我感到,编程本身,比使用软件的乐趣要大得多。

初试啼声

从小学升上中学,1990年的暑假我终于获得人生第一台电脑——一台二手的286。那个暑假我躲在家中,使用GW-BASIC继续编程。286可以存档,意味着可以写更大型的程序。规模越大,更让我认识到BASIC语言在编程上的局限。尽管如此,当时仍然很快乐地编写了不同类型的程序:图形、音乐、游戏。通过阅读书籍,我还学会了画不同的二维图形,包括曲线、分形(fractal)、简单的三维渲染等。

在升中二的那年暑假,我就开始转为学习C语言。DOS对许多设备都没有直接支持,不同的设备甚至连标准的接口都没有。所以那时编程,还必须学一些x86汇编知识,以及使用不同设备的底层技术。

中二时得知有一个“微电脑教育(MIE)”比赛,这是我个人电脑比赛生涯的开始。我用Turbo C写了一个名为《3D Solid Maker and Viewer(三维实体制作及检示工具)》的软件,其实只是个非常原始的三维建模软件,可以设置简单的摄像机动画。当时花了许多时间去编写GUI系统,就是要由绘画控件、处理滑鼠键盘事件等做起。基于知识经验所限,系统架构很糟糕,并有大量硬编码。初试啼声,这个作品最后获得全场总亚军,大大增强了我对编程的信心。

进入业界

1992年前后,我在BBS上结识了一群有意开发游戏的朋友,成立了香港首家游戏工作室M&P System。最初我并没有直接参与开发,只是向朋友们学习更多游戏开发的知识,写过一些引擎和工具的原型,有时帮忙做点小事情。例如在公司首个作品《疯狂双响炮》(1993年)中,我设计了一个游戏关卡和做游戏测试。之后公司开发RPG《勇者传奇》(1994年)时,我在开发另一个RPG,做了地图编辑器和引擎,可操控主角行走,也有初步的战斗模式。

后来公司改组为阿博克。我在新项目里首次担负重任,那时我在读中四理科班。这个新项目《王子传奇》是我发出的提案,一个奇幻背景的策略角色扮演游戏(SRPG),采用等角(isometric)的无缝(seamless)游戏世界。我主要负责游戏策划、编剧、游戏性编程(gameplay programming)。项目的野心很大,或是太大。整个项目约由6位成员,历时18个月完成。

当时DOS运行于真实模式,能直接使用的内存只有640KB,完全不足以做无缝的地图渲染。最后,我们做了个大胆的决定,用汇编开发32位保护模式的引擎,用Turbo C++开发16位真实模式的游戏性部分。引擎部分由我那牛人拍档开发,而我主要编写游戏性部分。那个引擎,基本上就是要先从头写一个32位保护模式的操作系统,管理内存、磁盘读写、设备驱动等,再开发地图渲染引擎。游戏的“脚本”使用C语言来编写(包括用宏来做数据驱动),利用覆盖(overlay)机制的按需载入。

在那漫长的制作期,星期一至星期五,放学后经常会返回办公室,有时候晚上11点才回家。周末和假期,也会经常到公司干活。后来一些伙伴在项目结束前就离开公司,最后在不太欢乐的气氛下完成了这个作品,游戏内容有点虎头蛇尾。听说这作品在台湾卖得还不错,可是由于一些问题,我最终除了暑假获得的一点津贴外就没有其他经济上的收益,当然,开发经验除外。自此我离开了游戏业界,继续求学之路。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注