【游戏引擎之路】登神长阶(六)——雅达利2600汇编学习,任天堂居然还真不是抄袭起家

5月20日-6月4日:攻克2D物理引擎。
6月4日-6月13日:攻克《3D数学基础》。
6月13日-6月20日:攻克《3D图形教程》。
6月21日-6月22日:攻克《Raycasting游戏教程》。
6月23日-7月1日:攻克《Windows游戏编程大师技巧》。

7月2日-7月6日:攻克《雅达利2600汇编游戏开发》

下个目标:X86汇编语言学习

这个阶段的目标是学习汇编语言,所以我正好选择一个和自已专业对路的东西来学习。就是“Atari 2600”这款经典的游戏机,国人可能对这款游戏机不怎么熟悉,但是大名鼎鼎的红白机FC就是“山寨”这款机型来的。(日本叫FC,美国那边叫NES),这两个哥们用的就是6502芯片。

我第一次看到雅达利2600介绍的时候,我都吓了一跳。上面写着雅达利2600的内存是128Bytes。我看时看到这个的时候,我都怀疑自已是不是眼花了,不是128K,是128Bytes。这是什么意思?一个汉字需要2个字节来保存,也就是说他的内存只能保存64个汉字。

而你的游戏设计,需要进行的游戏开发,就只能在这128个字节里面进行。其实我在原来学这个汇编的时候,我想在这个游戏机上做一个“吸血鬼幸运者”来着,因为我以前从来没有看见过旧的游戏机上有这种游戏。现在想想,真的太天真了。128个字节你能干嘛啊?

所以我现在想起雅达利2600那些经典的游戏,以前我只是觉得这些人有想法有创意,但是我真没想到这些人是如此的有想法,如此的有创意。他们居然在这种条件下做出这么精彩的游戏。

我之前也学过不少语言,我是学C/C++入行的,后来做网页的时候学了VB,C#,用来做ASP.NET,然后又学Java,Java是我用得时间最长的语言,用了十年。后来学Unity,又转回c#了。我掌握的语言是Java>C#>C/C++。脚本语言方面,PHP,Python我也学过,我现在的个人网站就是用PHP自已做的。还有就是LUA,因为做游戏脚本用,我也非常熟悉。Python不怎么熟悉,但是能用,LUA和PHP可以用于工作。其它什么吉里吉里,RPGMAKER脚本等等这些语言就只是用到一会,不能算“会”。

我在学编程的时候,每一种语言对我来说都像是一杯不同滋味的美酒。又或者说像是自已走到了一个不同的异域风情的土地上面。让我感觉非常新奇,有趣。我总想在这个环境中多待一会,多了解一些这种语言,

但是,我学雅达利2600的汇编,我真的有种进入了外星人领域的感觉,而且是那种遍布异形的外星球。我无时不刻都有那种想逃离的感觉,简直是太可怕了。怎么可能有这样的环境?

比如说,在普通的游戏编程时面,有Sprite的概念,你在游戏中的角色,这些,都是一个个的Sprite,包括红白机,也有64 个角色,但是雅达利2600只有两个,一个P1,一个P2,只有两个主角,我学到最后也只有办法渲染出两架飞机。当然,这毕竟是我没有深入研究,毕竟雅达利2600有那么多游戏在那儿,他们是有办法的。可是我学了一个星期,你让我做“小蜜蜂”出来,我真的找不到思路,不知道他怎么做出来的。

我在最后,也只做出了一个最简单的打飞机的游戏。敌人从上方袭击,因为敌人只有一个,所以一次只有一架飞机,而你发射子弹把他打下来,得1分。让他逃走了,不得分。

有人会说,你这玩意别说创意了,连最普通的射击游戏都比不过。哥们,不是我想这样啊。你知道雅达利2600的导弹有多少个吗?在现代的游戏编程里面,从来不会有“多少个导弹”的样的蠢问题,因为你想创建多少个就是多少个。而雅达利2600里在,导弹只有两个!一个是P1的导弹,一个是P2的导弹。当然,你可以把P2的导弹借来,这样,你就能发射2颗子弹了。

对的,没错,雅达利2600,你只能发射2颗子弹,不能再多了。因为他的碰撞检查就只支持这么多。

有人会说,那你不会自已写碰撞检查吗?很遗憾,不能。这个不能,不是说不支持这样的运算,实际上是可以的。但是,雅达利2600编程你的计算必须是在每一根扫描线之间进行。而这扫描线之间的时间周期是有限的。

我不知道给现在的游戏程序员怎么解释这个事情,我当时听到的时候也是一脸懵逼,心想:什么?怎么可能是这样?

这什么意思?其实就是好比,你的游戏就是一个酒家,你有个店小二上菜,他把菜从你的厨房端到食客面前,比如说需要12秒,然后他就会回来找你要下一个菜。也就是说,你做菜的时间只有12秒,你纵然有天大的本事,你有无数的奇思妙想,你如果在12秒种做不出来,那都没用。

而每个扫描线的时间周期就只有100多(好像更少,我记不住了,因为压根没想去记),你别以为100很多。执行最简单的CPU指令也需要2个时钟周期,如果要取内存数据,则更多。而雅达利2600的CPU是不支持乘法和除法的。怎么算乘法?用加法算,怎么算除法?用减法算。

一个加法,需要LDA,CLC,ADC两个配合起来用(是的,雅达利2600没有ADD这个加法指令,因为6502CPU是一个阉割版的CPU)。这就6-8个时钟周期走了。你就只能算那么N次加法,时间就没了。

所以说当我把这一套学完,而我回去看雅达利2600上面那些名作的时候,我的感觉完全不一样了。对这些前辈们的敬仰有如滔滔江水连绵不绝,又如黄河泛滥一发不可收拾。

这就好比你听说有一只部队有10个高达战胜了100个高达,因为你现在都开着高达,你觉得这没什么啊,虽然这件事很难办到,但也不是不可能。但是,当你了解实情后,你才发现那只部队里面没有高达,就用的步枪,把100个高达干了。

你不禁陷入沉思,这些人是怎么做到的?

雅达利2600上面奇葩的地方还不止这一点。总之,在雅达利2600上面编程,就是和时间赛跑,老师说,以前的雅达利程序员,有50%以上的时间,都在算时钟周期,因为你的“舞台”就只有这么大。

我学完了雅达利2600的汇编,感觉只有两个字:

亏贼!

但是这样的环境也造就了我对于汇编和机器更深的理解。这段旅程真的太有价值了,虽然我再也不 想在雅达利2600的世界里面待了。

想到这里,我想到了另外的一个话题,就是“任天堂抄袭起家”这个事情。其实很久以来任天堂就一直背着这锅的。FC是山寨雅达利2600的,任天堂进军游戏产业的第一个作品是《Radar Scope》,这个被认为是抄袭《太空侵略者》。在《原神》抄袭风波的时候,这个事情又被捡起来说。

其实我当时对这个事件的看法是虽然确实看上去像抄袭,但是那个时代不一样啊,就好比我们以前玩的“小霸王”,其实就是“FC”的盗版,但那时候我们能做点东西出来都不容易,谁会纠结你是盗版不盗版呢?

我看有些人为这个事件辩护,说“任天堂不是抄袭起家”,理由是任天堂在《Radar Scope》就早已经“起家”了,已经干了几十年生意了。我寻思这不是高级黑吗?这种说法不就是坐实了《Radar Scope》是抄袭作品吗?我是真不能理解为什么有任天堂的粉丝会支持这种说法,真的是醉了。尤其是这东西从任天堂的死忠粉口中说出来,这不就是向大家证明,《Radar Scope》抄袭是没得洗的,我们找另外的角度洗吧。

如今学了雅达利2600,我发现其实当时对于《Radar Scope》的控诉,还真有点像当时《原神》受到的控诉。

其实一个作品是不是抄袭,大家各自有各自的称。但是大家也有一些共同的认知的。你在一个游戏中,创新足够多,自然不会被认为是抄袭。

但是,如果你没有专门的知识,又或者说,你是用现在的眼光去看当时的创新,你的确会觉得《Radar Scope》就是抄袭的作品。但前提是“现在”。

就比如《Radar Scope》,在现在来看,大家会有一个疑问,你为什么“是太空射击”游戏。大家知道射击就射击,我们小时候在街机上也有很多打飞机的游戏啊,为什么你对标的产品是《太空侵略者》,你不能改成不是太空吗?

我做了雅达利2600之后,我才发现,还真不是。这不是说绝对不能,而是说,你的背景如果是一个黑色,那你要好做很多。这就相当于,你有12秒的上菜时间,但是,如果你的背景是全黑(即没有背景),那你就能省下4秒种干其它的,所以,你如果有背景(不是黑的),你就得花4秒种来处理背景。当然实际上编程不是这样的,你懂我意思就行。

那么,没有背景,背景就是黑的。你的游戏背景是黑的,你怎么解释?不就是用太空射击游戏来最好解释吗?因为太空就是黑的。

所以为什么当时《GALAXI》(就是我们俗称的小蜜蜂)也是太空射击游戏。大家都是。

所以说,我在学了雅达利2600之后,发现如果你用现代的眼光去要求之前的游戏,我觉得不对。如果你知道了,当时人们拥有的资源是如此之少,你就不会这么看了。

比如控诉《Radar Scope》的一个说法就是,他”只不过“做出一个近大远小的效果,因为敌人在远方时是非常小的,到近处就变大了。没错,如果你用现代的编程技术,你用Unity引擎,这是入门的程序员就能做到的事情。可是,如果你站在当时的硬件条件,你能做到吗?

而且《Radar Scope》是有自已的机板,有自已的一套叫”Radar“系统的。这本身就是一种创意。包括《Radar Scope》在美国遭遇滑铁卢之后,新的《金刚》(是叫这个来着吗?我没空去查资料了,反正是一个“碰瓷”《金刚》电影IP的作品),也是基于这个系统做的。

当时别人觉得《金刚》能够成功,是因为碰瓷IP。我觉得这只是一方面的原因,更重要的原因是因为《Radar Scope》的版机中是有自已的创意的,所以之前《Radar Scope》的机器能刷上新的《金刚》。

因为现代人的条件和以前是完全不一样的,现代游戏编程,没有什么能够扼制你的想象力。但在那时候完全不一样,《Radar Scope》能够加上一个“雷达”系统,这已经是一个很了不起的创意,而之后的作品也证明了这一点。

《Radar Scope》在当时展现的“差异化”,在现在的人眼中,这些“改变”是“微不足道”的,觉得你“只不过”改变了这些。但是,如果你真的理解了当时的条件,你就明白,这实际上已经跨出了一大步,而且这种创新也为之后的游戏成功做出了铺垫。

所以我之前觉得《Radar Scope》抄袭这事,属于历史问题,虽然那时候抄袭,但那个年代大家都干这事,没什么值得黑的。不过现在看来,它还真不是抄袭,而是被带了抄袭的节奏。

没想到米哈游和任天堂居然在这事情上还是难兄难弟。哈哈。

相关推荐

  1. 程序员:兴趣职业发展?

    2024-07-11 12:34:03       25 阅读
  2. Golang学习运算符

    2024-07-11 12:34:03       40 阅读
  3. Python学习-函数进

    2024-07-11 12:34:03       50 阅读
  4. Python学习-MySQL进

    2024-07-11 12:34:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 12:34:03       7 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 12:34:03       8 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 12:34:03       7 阅读
  4. Python语言-面向对象

    2024-07-11 12:34:03       10 阅读

热门阅读

  1. linux 文件末尾追加内容

    2024-07-11 12:34:03       9 阅读
  2. 从IE到Edge:微软浏览器的演变与未来展望

    2024-07-11 12:34:03       9 阅读
  3. 浅谈ES6

    2024-07-11 12:34:03       10 阅读
  4. 风景园林工程设计乙级资质业绩要求案例分析

    2024-07-11 12:34:03       12 阅读
  5. 高效利用iCloud:全面指南与技术深度解析

    2024-07-11 12:34:03       8 阅读
  6. Linux 宝塔常用命令教程

    2024-07-11 12:34:03       8 阅读
  7. HDFS体系架构&文件写入/下载流程

    2024-07-11 12:34:03       10 阅读
  8. 企业微信群发限制的背后逻辑,一文读懂!

    2024-07-11 12:34:03       9 阅读
  9. Stable Diffusion与AI艺术:探索人工智能的创造力

    2024-07-11 12:34:03       9 阅读
  10. vue3 ts 不使用 if switch 来决定使用什么函数

    2024-07-11 12:34:03       7 阅读
  11. 拖动未来:WebKit 完美融合拖放API的交互艺术

    2024-07-11 12:34:03       8 阅读
  12. helm安装解决无授权问题

    2024-07-11 12:34:03       9 阅读
  13. php获取,昨,今,后天.... 本周,月,年...日期时间戳

    2024-07-11 12:34:03       8 阅读
  14. 大话C语言:第28篇 内存分配与释放

    2024-07-11 12:34:03       6 阅读