小海's profileFlier's SkyPhotosBlogListsMore Tools Help

Blog


    August 22

    代码赏析课 —— Quake 3

        记得初中的时候,数学老师偶尔心情好(抑或心情不好)的时候,会给我们上一堂美其名曰“赏析课”的课程。然后我们一帮学生坐在教室里,看着他用40分钟+的时间,自问自答讲解一道极其 BT 的题目的解题思路和过程。然后我们这帮自以为数学头脑还行的学生,就被说的一愣一愣的如坐过山车一般,呆呆的坐在下面看着黑板上的各种公式和辅助线。用现在流行的话说,就是“幼嫩的心理倍受折磨”,好容易建立起来的一些自信心立马减半,只剩下老师站在讲台上一脸坏笑。:S
        而这种久违的感觉,在阅读 Quake 3 代码的时候又被我找回来了,呵呵,真不知是该高兴的大笑还是悲伤的大哭。
        说起 ID software 的  John Carmack ,绝对是为数不多能够称得上偶像的程序员。早在偶用双频单显折腾 DOS 的时候,就曾在游戏厅(那时还没网吧)里面体验过他的众多作品。虽然也曾被玩晕的跑出去大吐特吐,但对游戏和作者的崇拜之情却是与日俱增。也因而翻遍各种书店,买到过两本当年极为少见的 3D 游戏书籍。只可惜折腾一个暑假后,发现每个字都看懂了但就是不开窍,只好在弄出几个简陋的 3D 场景后,终止了这次探索的尝试。而带来的好处,是能够很早就开始以较为专业的 3D 实现思路来看待游戏,不再仅仅是看热闹而已;而带来的坏处,则是一次又一次被 ID 游戏实现的精巧所困惑。
        如今虽然近十年已经过去,但看到 Carmack 的代码,居然还有这种云里雾里的感觉,呵呵,真不知是怎么在混日子。:S 不过也还真不能以常理来推断 Carmack 的思路,毕竟他老人家是在用写操作系统的思路和干劲在写游戏。
        从启动 Quake 开始,实际上我们就进入了一个 Quake VM 的虚拟环境。底层有操作系统隔离层屏蔽平台相关性;中间有基于 Bytecode 的 VM 执行设计的场景和 Bot;资源从虚拟的文件系统获取,直接对打包文件按磁盘模式进行操作;加上内存管理、环境变量管理、脚本语言编译器等等,基本上就是一个五脏据全的 VM。就复杂度来说,估计不会比 JVM/CLR 差多少,而带来的则是巨大的灵活性和可扩展性。
        而更让我钦佩的是,Carmack 能够坚持一贯的原则,在保持技术进步的目的下以 GPL 方式,发布这一售价几十万$的平台。这是在以金钱为成功衡量标志的现代社会,需要何等的胸襟与器量。而我想真是这种气概,让 Carmack 能够在十几年的技术进步中,始终走在他人之前。我想,这种对待技术的态度,才应该是最值得向他学习的。

    第二人称射击游戏

        第一人称(如 CS)和第三人称的动作游戏(如古墓丽影)玩的不少了,还真没想过为什么没有一个第二人称的动作游戏,呵呵。不过今天有幸见到了一个原型:
     
     
        有趣的是在这种游戏场景里,游戏者没办法直接看到自己扮演的角色,而只能通过敌人的视角看到自己。因此在游戏时,必须一方面躲开敌人的攻击,另一方面借助敌人的眼睛来修正自己的动作,哈哈,有创意!
        这让我想起在 jojo 里面,匪兵X的“替身”就是通过别人的眼睛,在镜子和水等可反射物中跳跃并进行攻击。要防备他的攻击就必须看到他,而看到他的同时就给他制造了攻击你的机会,呵呵。
        看来并不是游戏的方式已经穷尽,而是缺乏发现新方法的眼睛啊。前段同事一个手机附带的游戏,也是一个非常好的创意。用摄像头捕捉当前环境作为游戏背景,然后在此背景中射击随机出现的敌人,需要不断拿着手机四处乱转来捕捉乱窜的敌人;抑或是前段 PS2 上流行的,通过摄像头拍摄,让你跟游戏中的敌人战斗,呵呵。跟这个第二人称设计游戏的思路有异曲同工之妙啊。
        个人感觉这种互动性的游戏,会有很大的发展潜力,就好比前几年流行的跳舞机一样,让你真正参与到游戏中去,体验而非仅仅被动接受游戏。:D