« 那些日子(十) | 返回首页 | 那些日子(十二) »

那些日子(十一)

《大话西游》一边运营着,大家改着 bug ;另一边,2.0 版开始筹备了。

还记得深秋的那个夜里,已经很晚了。丁磊一通电话问我睡了没有,没睡的话去淘金路上一间小茶馆喝茶。聊天不去酒吧,不符合老丁的风格嘛。我依着短信上的提示,找到了那家别致的小店。包间里就两个人,丁磊和 dingdang 。dingdang 从不泡酒吧,他不喜欢喝酒,这我是知道的。

后来聊了什么完全不记得,我只是知道,以后的工作由 dingdang 来主持了。这次长谈,颇有些战事不利、临阵易帅的味道。

之后,渐渐的,micro 没有什么事情可以做了。几年前,他就在办移民加拿大的事情,需要定期坐移民监。没多久,micro 回了加拿大。dingdang 坐进了那间办公室。不过他的笔记本通常放在外面的老地方,我们还是很晚一起回家。

dingdang 工作很勤奋,也依旧在工作间隙褒着电话粥。桌子上放着 Nokia 5110 的手机,很古老的型号,上大学时我用过。打久了电池很热,但想必没有心里头热。第二年的某一天,有人提醒我看看对面 dingdang 敲键盘的手,赫然多了一枚戒指。

没有见他请婚假,没有通知同事,没有办酒席,没有度蜜月。只是接下来一个周末,我在家附近的世贸楼下吃面条。丁磊的女朋友瞅见了我,给我打了个电话,说他们正在楼上日本料理呢。我打包了面条上楼。只见四人两对,相谈正欢。那天我认识了 dingdang 的妻子。从谈吐中就能识得,真是天造地设的一对。

dingdang 上任后,寻了三个人来。一个是他的堂弟詹东,据说时下在北京网易工作,也是写程序的。另两个从 36 楼挑选的两名程序员,都是网易技术部最优秀的程序员之一。kyo 和 ruiheng 。

kyo 和我同届,暨南大学学物理的,未毕业便在网易兼职,做公司最早的产品:邮件系统;ruiheng 高我一届,华南理工计算机科班毕业,稍晚一些入职网易,他早期的产品对网易也颇为重要:网易社区论坛。此二人,完成大话二之后,kyo 转去做天下的主程;ruiheng 则任技术部经理。

我们四人开始重新制作大话西游的新版 client ,谓之曰:2.0 ,项目代号 xy2 。


在 ruiheng 的推动下,我们从 vss 移到 cvs 下工作,不久之后又转到 svn 。这次,我们每人每天都要求 update 到最新的 client 代码,保持和主干同步。

服务器那边听说也在重构,我不清楚是否犹如 client 这样彻底。但新的版本是由 dingdang 和 ten 一起主持的,并加入了新的人员,比如 陈 。大话的服务器开发历程我不了解,不便多说,暂且搁在这里好了。

继续谈新版的 Client 。

UI 模块的问题,我已经在最后那两个月完全解决了。UI 的底层是个非常繁杂的东西,要求设计人有足够多的经验才能把接口设计的好。做了这么些年软件,我觉得最复杂的东西莫过于此了。稍有不甚,就会把接口弄的污秽不堪。就连 Windows 的最为出色的界面系统,不也是发展了 20 多年才成现在这个样子,依旧被开发人员所诟病。虽然那个时候,我的想法也不成熟,可也经过一年多的思考沉淀,比大话一立项初期有把握的多了。

这次是由詹东取代古越的位置做逻辑那块东西,我依然写底层。只是这次范围更广一些,不仅要实现图象和声音这些的基本驱动(其实在大话一里已经很稳定了,延续下来用即可),还要负责 UI ,以及游戏中的逻辑对象的管理,消息分发等。

大家不约而同的想法是,新版的 client 一定要嵌入一个脚本语言,以应付连绵不绝的后期需求变化,以及用于描述多变的界面。

我首先想到的是自己实现一个解释型 C 语言,这个在北京时就着手做过。但是考虑到时间不允许,也就放弃了。当时也想过使用 CH 一个解释型的 C ,大家觉得不够好,作罢。

甚至我考虑过 java ,但网上尚没有成熟开源的 java VM ,我甚至想自己实现一个。这个想法来至于前几年一个叫做《吸血鬼》的 3d 游戏,如果你解开它的数据包,就会发现大量的 java class 文件。

还有 javascript ,因为被 IE 的事情弄出些恐惧症来,大家也不支持。

kyo 给我推荐了 python ,说是跟 java 齐名的语言。还有 ruby 等等。那时我们对这些日后名声大振的动态语言,都没有什么特别的感觉。一视同仁的去评估。因为嵌入式脚本,在国内同行中没有什么先例可供参考(早期大多数开发团队都是自己开发脚本语言),只能是靠自己的感觉来办。

最后大家一起看中了最为小巧易于嵌入的 lua 。网上比较多 lua 的相关工具,不过是针对 lua 3.2 的,当时 lua 4.0 发布不久,我们最终决定选用最新的版本,不去理会配套的第三方工具。

詹东开始研究 lua 的 C API ,以及怎样嵌入,这个工作很顺利,得益于 lua 的简洁。kyo 琢磨如何把 lua 和我写的底层桥接起来。当他最终用纯粹的 lua 代码驱动起第一个游戏内的界面对话框,我们都很高兴。ruiheng 则作力于 lua 的控制台调试器,他是 unix 背景的程序员,做出来的那个东西更像 gdb ,挺好用。哦,我做了个控制台的模块,支持彩色的信息输出。前一版的惨痛经历告诉我,一定要有一个好用的调试控制台。

说起 bug ,《大话西游一》的教训是非常惨痛的。最让我心痛的是,明明知道 bug 在那里,就是不知道该怎么改。往往改动一处,会引发新的问题。我想找到一种方法可以杜绝这种现象。所以在新版本里,引入了一种新的机制来解决。那就是给引擎加入录象功能。

所谓录象,就是让引擎记录下所有输入的消息以及发生的时刻。由于游戏 client 可以严格按帧来区分时序,时刻即帧序。所谓输入,无外乎网络包输入和键盘鼠标输入。这些只需要按次序写入记录文件即可。当有了这些数据,就可以无限制的回放给引擎。每次操作 client 玩上一段时间的游戏,只产生极少量的输入消息,而回放即可再现第一次游戏时的种种(甚至可以加快速度播放,只需要关闭和逻辑无关的显示模块即可)。这个功能是纯粹实在在引擎底层的,更上层建筑无关,顾而能为开发人员方便的使用。

如果不懂技术的读者看到这里还不明白,请联想暴雪游戏中的对战录象,星际和魔兽都支持的。

ps. 这一点是我以后做项目必须要求的基础设施。不支持录象功能的引擎是不合格的。我曾几次三番的要求服务器也加入录象功能(这比 client 更简单)但都没能如愿,直到我自己开发服务器。也有 3d 项目抱怨 3d engine 的复杂度而不能加入录象,其实没有什么道理。录象仅仅是记录操作,能不能加进去只跟 engine 处理外部输入的设计有关,跟图象呈现方式没有联系。

简单表述录象对调试的重要性,可以这样来解说。

即使我们拥有交互式单步跟踪的调试手段,当错误发生时,我们也只能向后运行程序,观察计算机内部的状态变化。而对之前发生的事情,仅仅只得一个内存快照而已。这是静态的信息,而变化的过程已经丢失。当然,内存快照已然非常有价值。比如在 unix 系统上,一个进程挂掉,可以生成一个内存快照文件,被称之为 core dump 。gdb 这种调试工具则可以分析 core dump ,还原当时的现场,程序员可以根据现场情况进行分析。

录象的威力则更进一步,不仅可以轻易拿到错误现场的快照(只需要重新回放一次),还可以让时光倒流,让你看到之前发生了什么。因为只要设计合理,每次回放,内存里任何一个对象的地址空间都不会有变化。如果我们拿不准出错时的问题是由什么前导因素造成,只需要重新回放一次在更早的时机中断下来观察即可。

有了这么一样利器,我们遇到的每个 bug 几乎都可以在当天找到根源,并修正。当 bug 是单个的出现,并迅速一个个的解决时。比同时面临多个 bug 要轻松的多。每次解决问题也都是从根源入手,而不是简单的使用 walk around 的方案。每解决一个 bug 当然不会引发新的问题了。

大话西游 2.0 的 client 非常稳定,以知的 bug 都已排除。那些日子,每天下班时我都可以这样骄傲的宣布。


那几个月,工作有条不紊,大家意气风发。我们甚至每天可以乘坐公交车回家。kyo 没结婚前住的很远,和我有一小段同路,当他转车赶上末班地铁,基本上我已到家。而他的归途一半都没走完呢。我们不再需要加班到太晚。

詹东常住北京,只是需要交流的时候才来广州住几天。大家分工明确,甚至不需要每天在一起写程序。(我想,异地合作也是我们抛弃 vss 的一大原因)所以,初期的设计比后期的实现更为重要。设计的好了,甚至缺少沟通都能把项目做好,反之,再多人再好的沟通也没有用。

甚至我都在想,这不三个月就把活干完了吗?赶快把大话换下来吧。但是 dingdang 说,不急,还不到时候。


渐渐的,开始有旧人陆续离开,先是古越接着 micro 而去,然后是果子。

古越的离开有些无奈,我没有问,因为新的项目已经没有让他参于,我想离开是必然的吧。(后来回头看,他有网易不少股票,公司股价涨到那么高,我想即使从收益上权衡,在网易干的一年也值了。可能让他遗憾的是,没有一起参与大话的起死回生吧)

果子辞职,还是有些舍不得的。他是个挺有想法的人,动手能力也很强。当时说想回家休息一下。等到再来看望我们的时候,手上居然拿着车工教材。我是学机械的,很好奇他怎么干这个起来了。他说他买了个小车床,放在家里做些东西玩。果子是个军事迷,喜欢仿真枪械。当时下载了一张德国二战时期的手枪图纸,在家自己摆弄。那天,他还给我欣赏了他自己车的枪管,很精细,比我的手艺强多了 :D 。

时不时的总能收到一些他的消息,先是说他买了部 polo ,整天大街小巷的乱窜,一天能在市区开 400 公里,堪比出租车司机;而后说是开车时用笔记本不方便,自己设计制作了一个笔记本支架,固定在坐驾里。听起来过的挺开心。

几年后,我介绍大学室友去他和古越一起开的经营短信业务的公司里写程序,果子请我吃过一顿饭,之后就联系不多了。

我不喜欢照相,相片很少。不过找到一张那段日子留下来的。好象是果子买了个摄像头,我拿过去试试拍的一张。纪念一下:


谢绝转载

那些日子(目录)

Comments

发型不错,有金庸小说中大侠的感觉*_*
向业内的前辈致敬
@tearshark 你记的没错。 今天我提了一下你 嘿嘿。以后有机会多写一点 :D
micro是不是那个戴着头盔,还是被彩弹在头上打了个大包的倒霉家伙?
看完12特地跑来看了下照片
我也是学机械的
哇 下面的大大写了好多 每当郁闷的时候 都在这里寻找力量
云风,加油。
这里是云风分享他的经验的地方,高兴便来,不高兴也罢,无畏争吵。爱因斯坦在听说原子弹在日本爆炸时说这不是他提出相对论的初衷。网游戏是一个时代的产物,网易是一个参与者,没了网易网游戏一样不会少,更不局限于某款游戏,每款游戏都有沉迷于它的玩家。也许没有那个制作人做一款游戏的初衷是为了毁掉一个人的。我也玩过网游戏,也在一段时间经常玩,但不沉迷,看到那些沉迷的玩家我觉得他们很可怜,同时觉得在网游戏如果这样大量的玩家出现会降低像我这样的普通玩家(没多少钱,没多少时间)对游戏的体验,但这部分普通玩家虽然不稳定,但量不少,总会造成玩家的流失。相信不是什么运营商愿意看到的,还要天天被人指着骂。好多人看到的只是游戏的娱乐性,便有玩物丧志结论,却不知游戏也是一个载体,承载着一个虚拟的世界,对玩家传达着一种世界观,一种价值观,一种文化。我想这些才是制作人要表达的思想,好的游戏堪比一本好书。好比武侠小说泛滥时,大家都读有人读到了侠义,读到了舍身取义,大义等等正面的思想,也有沉迷其中,幻想学成武功就可怎样怎样的。在这个没了你还有他的时代,即然网游是必然产物,我们何不好好利用它而不是打击它呢,在经济科研方面鼓励自主研发,鼓励开发有意义有思想的网游戏,而不是那些“泡菜式”网游戏或是铜臭味十足的游戏。这么多人崇拜云风我想有他的道理,或许他不是国内游戏开发技术最强的人,但他影响千万已经进入或正要进入游戏开发领域的开发者。个人觉得这是值得尊敬的,某种信念驱使他对技术的偏执,对游戏的坚持,我还看到云风还对游戏的种种设定仔细推敲,学了很多其它的知识,这样一种态度也令人敬佩。看回忆录看到的不只是云风,看到一代的游戏制作人,从开始的激情到后来的去去回回,无数人无奈地离开又有新的人进来,大家都只是一个目的,做好一个游戏。我希望的是,游戏开发商能给制作人多点空间,这样我们会有更好的游戏,而不是最后连公司都背负一个骂名。或许在这个追求利益最大化的市场,不支持这样的做法,但从云风的文章中可以看出,网易对这样的制作者是支持的,至少在思想上是这样,虽然有过在种种压力下推出不成熟的产品,但也看到后来云风带的团队闭关开发两三年,丁磊在两年里只打了个电话来问开发得怎样了。我想怀着这样的公司这样的开发团队怀着的不是开发一款害人的游戏而是一款娱乐大众,又传播思想的游戏。或许游戏出来后也会有种种负面的现象,但它的积极性也该得到肯定。好多人因为游戏而技术,因为游戏而美工,我便是这样的一个。游戏追求的完美,使得在开发,在设计,在美工方面都是一个艰难的磨砺。我总跟别人说,你现在说的系统分几层几层这样的技术在游戏里早被用了,你现在开发的基于数据库的某某数据库,在游戏里我们要定义自己的数据格式,定义文件的存取等等,你现在用着别人的脚本,在游戏开发里我们曾是自己写自己的脚本模块。这些技术是有质的差别。有好多人从游戏开发走出去成为另一领域的技术骨干,我想当大家多关注技术的本质而不是技术的应用时,我们国家的开发能力将上一个台阶,游戏开发不是一个入门阶梯,但在中国它培养了好多技术人员,他们正在为社会贡献力量。当然我说的不是所有技术高手都从游戏开发转行的,但至少有不少高手曾开发过游戏:)怀着服务大众的高手是值得尊敬的。
担心小狗把小手按在7键盘上 发表了留言!!! 哈哈哈
金钱害死的人更多,要不我们把钱给禁了?
我想把"那些日子"放到"起点中文",月票一定不少吧,^^.
大话西游2,害我一个同学高考都没有参加。对网游着东西太双刃剑了。 不过看回忆录好玩,我快毕业了,也该写些东西了
你好,经常浏览你的博客,我是属于那种只看不留言的那类型。(当然也不是看贴不回了,主要是在玩网易的游戏,大唐豪侠)。。。一直以来知道你是网易的技术经理,游戏的技术开发都是你说了算。(我是这样想的),一直很崇拜你。但是网易的大唐豪侠,这款游戏真是失败。去年10月大的更新以后,再没有大动作。很次都是例行维护。收费游戏很好玩,但大唐豪侠是垃圾。你们网易就这样对待玩家?不成功的游戏不要运营!以后发誓不玩网易的游戏。商道既人道。丁三石,挂羊头卖狗肉。和大唐豪侠一样。两垃圾。
很好很强大。 请继续稳定更新。
回忆录果然好看……请继续
> 我们甚至每天可以乘坐公交车回家。 哈哈,说得挺可怜的
先顶再看
不写游戏,不怎么玩游戏,呵呵.不过,追着这个系列看了很长时间哈,很有吸引力噻..^&^ 加油云风..
云风说的那些调试的功能,得益于设计.我没写多少程序,一开始写程序是一有想法就写,奔着功能而去,"目标明确",后来问题多也,才体会到,编程不只是为了实现功能.但好多设置说起来容易实现起来难,没有一定的编程经验想是做不好的.正在朝着这个目标前进.读到起落分别时,也有一丝无奈起来.真的不错啊,再谢过!
一直看下来 留次言试试
"那些日子"系列非常好,请坚持写下去
楼下的不厚道啊 抢我的沙发。 云风还用过DELPHI?
抢个沙发试试
离别的事情我是最惧怕的。

Post a comment

非这个主题相关的留言请到:留言本