那些日子(八)
今天工作上的事情弄的比较晚,没留出足够时间来继续写这个。本来打算直接回家睡觉的,想了想还是继续写点。凡事可以坚持做下去,往往靠的不是兴趣,不是责任,而是习惯。我不想让这些对过往的记录成为今天的负担,但也担心一旦放下就会拖上好久。反正腹稿都已经打好了,无论内容多少,还是保持着一天一更新的习惯吧。让我顺利把这件事情做完。
Dingdang 具体哪天加入的游戏开发组我已经记不清了。因为他做的是服务器那块,我不太关心。大约是在《大话西游》项目中后期吧,他说,服务器这边进度太慢,就过来了。他以前玩过 mud 挺有兴趣。但是其工作主要还是在底层。
大话的服务器最早是搭建在 mudOS 上的,一个开源的东东,用在各种文字 mud 上。做文字 mud 通常还会用一个中间层,叫做 mudlib 。早年传说中的方舟子一帮人等做《侠客行》,就是指做了一套 mudlib ,被后人用在各种中文文字 mud 上。听说大话的开发人员也自己做了套 mudlib (听说而已,micro 似乎跟我提过他们没用侠客行的代码,太久远的事情不想证实了),不过我对使用 mudOS 却不以为然。什么年代的东西啊,都 21 世纪了,还在用。也就那么点代码,就不能放弃掉自己写一个吗?而且原本为几十个人同时游戏设计的框架,用在这么多人同时在线的网游上合适么?
网易的同事们完全扔掉 mudOS 这根拐杖是到 大话3 的事情了。主要还是因为太多逻辑代码用 LPC (mudOS 内置的一种类 C 的脚本语言)实现。大家一点点的改造,先是将文本通讯协议改成对数据流量更节约一些的二进制方式,为特殊的需求添加一些代码(例如定时数据持久化),再做一些底层的优化,把 select 的网络模型改为 epoll ,等等。直到全部更替。这些工作持续了 4,5 年。
一开始,当然做不了这么许多。大家还是主要在完成游戏的进度。dingdang 坐我的旁边,中间靠走道的拐角处。桌子上没什么东西,上班时就带一个笔记本,在那里敲敲打打。
我对那段时间在工业园的记忆不多。因为每天,周围的人都是一个情景,闷头做事。晚上,走的晚的人倒不是很多,我和 dingdang 加班的次数比平均水平高一点。
他那个时候好象在热恋中,晚上经常窝在椅子上,捏着手机很小声音的讲电话,每次都很久很久。工业园的办公室晚上都是不开顶灯的,大家都很享受在黑暗里办公,显示器亮亮的,四处安静的很。
也偶有喧闹的时候,那是古越的 client 和 ten 以及 dingdang 联合调试。我没关心技术细节,只是从他们的对话中感觉有无数的 bug 改不完。有点忧虑,但无能为力。从一开始就没有参加到这块的逻辑中去,我只能好好做我那块东西。
记得当时 client 和 server 都有严重的内存泄露问题。client 这边我想了很多方法帮古越定位。server 那 dingdang 也在想办法。我们讨论过这个问题,渐渐的就谈到了内存管理器。dingdang 说他实现了一个 伙伴(Buddy)算法的内存分配器,主要是想减少一些内存碎片。自己写的内存管理器也可以有效的侦测到内存泄露的发源地。另外希望以合理的内存布局,让一些 bug 引起的内存越界访问时,减少服务器崩溃的几率。我在这方面是完美主义者,觉得根本就不应该允许 bug 的存在,但是 dingdang 显得很无奈。绕开这个有争议的话题,我们还谈了许多。只是现在都不记得了。
client 这边的分工倒是慢慢的很明确了。古越在配合服务器组实现 client 对应的逻辑。我来做底层,几乎不用搭理游戏是什么。比如大话西游那么丰富的场景和人物角色,开发期间只看过两三个,都是用来调试engine 用的。果子做了一部分跟图形无关的 client 底层,主要是网络包的分发处理。现在的眼光来看,设计的并不好,采用了多线程结构徒增了一些复杂度。如果追究原因的话,我想是因为当时我们 client 没有一个好的软件架构人员统筹安排,基本上都是各个人想怎么做就怎么做造成的。
UI 部分的呈现是郭斌负责,而跟 IE 接口的地方则是果子和另一个程序黄东海在做。说起后面这个人,也是游戏圈混迹多年的老人了。本来是做 3d engine 的,不知怎么就来到的网易。来之前我听过一些圈内的朋友说他脾气不是很好,比如老是敲着桌子抱怨美术没按他的思路去做。不过来到网易后可能没有啥担纲挑粱的工作,也见不出他的脾气。他只工作了一个月就离开了,那个月神龙见首不见尾,突然就出现在工位上,而后有几天见不着人。悄然辞职(或者就没正式入职)后又回家去做 3d ,几年后还有一面之缘,暂且不表了。
还有一块,是李鑫做的。那就是 client 外挂的聊天室。在时间紧张的日子,我拼命的找方法可以减少一些程序量。既然我们已经嵌了 IE ,那么就干脆做到底。这种实现方式在后面的产品里取消,但外挂聊天室的形式却保留了下来,成为网易游戏的一大特色。
网易当时的 web 聊天室做的不错,丁磊特别得意。记得他曾对他的朋友们吹嘘,我们的聊天室做的是中国技术最好的,一台机器可以支持 4000 人同时在线。这块东西是李鑫的作品,参照 IRC 协议实现的。client 部分用的 HTML ,server 用 C++ 完成。
李鑫在我刚进网易时就有人介绍给我认识。介绍人是 freemind ,我读大学时就认识的好朋友。多年的网友。我想 freemind 这个网名还会有许多人有印象吧 :) (前几天有读者来信说,让我怎么也要提一下 freemind ,说早年游戏圈里这么有名的人怎么能忽略掉。哈哈,我不会忘记这位老朋友的,有机会以后再写一次)他和李鑫曾是《电脑报》的同事,一起做过《电脑报》的多媒体光盘。在没有互联网的年代,那可是样好东西。
不知是什么缘分,我居然记得读过李鑫的聊天室源程序(是从一个开源的 IRC 服务器代码改的。那段时间,项目组其他人的代码都是没什么精力去看的)。印象比较深刻的是,他在许多地方的类接口传递的 CString 而不是 const CString & 。我们就此还讨论过一些 C++ 代码的性能问题。他表示是老代码一直拷贝用下来,没太在意。
项目就这样由许多人分头做着,一天天临近死亡线。
话说那段日子,还有另外一些事情。给我的记忆比开发大话要深刻许多。
北京的那帮哥们倒是做的有声有色起来。我离开北京后,他们也更改了一些计划。做手机游戏引擎的事情搁浅了,改为先做一些有特色的软件,几个游戏和一个 mp3 播放器。后者是安宁在优化,汇编是他的专长,有时电话里聊聊,他对他在好几款低端硬件上实现了 mp3 的流畅播放甚是满意。
Nokia 在广州开一个什么会议,庞鑫和安宁来到广州。我们少不了要聚一下。庞鑫给我看了他在 Nokia 9100 上做一个伪 3d 的模拟空战游戏,非常刺激。让我想起了天惑。据说游戏让 nokia 的家伙们看傻了眼,原来这机器机能这么强啊。嘿嘿,安宁跟我说,他们 hack 了 9100 的系统,用官方的 sdk 自然是做不出这效果来的。
丁磊说想请大家吃饭,让我先订了个房间,带大家先去坐着。主人没到,大家都不敢点菜。好在我们有的是话题聊。
这时候手机响了,我一看,是丁老大的。庞鑫在一旁嘟噜着,早着呢,那家伙刚出门。接起来,老丁在里面大声的说,“我已经出门了,马上就到”。又等了大约半小时,手机铃声再次响起。还没等我接呢,庞鑫再次插了一句,“他在停车呢,当大老板的就这样。”“你们再等等,我停好车就上来”,听到这句,大家都笑了。
这是 2001 年 7 月中旬的事情。不是我特地记下了这个日子,是因为第 2 天,我们在我家旁边的小山酒吧庆祝北京申奥成功。安宁喝了许多,我也是。大家特别的高兴,街上满是欢腾。2008 ,好遥远啊,等奥运真的在北京召开的那一天,大家会是怎样的境遇呢?
过了几个月,庞鑫和安宁来到了广州,还有徐创(逆火的另一创始人)。丁说,我们可以开始做 3d 游戏了。这是 天下 2 的开始。虽然那个项目的头几年,完全没有想到会重新以《天下》来命名,但我想庞鑫等的到来是网易开始在 3d 领域尝试的第一步。比官方记载的《天下贰》的开发历史早上许多。
谢绝转载
Comments
Posted by: tom165 | (18) February 18, 2009 10:06 AM
Posted by: sjinny | (17) May 9, 2008 07:50 PM
Posted by: tarzon | (16) May 9, 2008 12:58 AM
Posted by: JackH | (15) May 9, 2008 12:42 AM
Posted by: tarzon | (14) May 8, 2008 11:54 PM
Posted by: hillg | (13) May 8, 2008 08:40 PM
Posted by: rocky | (12) May 8, 2008 03:23 PM
Posted by: sheep | (11) May 8, 2008 10:52 AM
Posted by: srdrm | (10) May 8, 2008 10:10 AM
Posted by: HitJ | (9) May 8, 2008 10:05 AM
Posted by: srdrm | (8) May 8, 2008 09:52 AM
Posted by: xyz | (7) May 8, 2008 09:41 AM
Posted by: 风舞影天 | (6) May 8, 2008 09:38 AM
Posted by: srdrm | (5) May 8, 2008 09:28 AM
Posted by: chinetman | (4) May 8, 2008 09:08 AM
Posted by: myk | (3) May 8, 2008 09:02 AM
Posted by: pass86 | (2) May 8, 2008 01:54 AM
Posted by: Jim | (1) May 8, 2008 01:35 AM