云风介绍:梦幻西游的作者,windsoul(风魂)作者,中国开源游戏引擎开发第一人。更详细的请看其博客。
那些日子(一)
明天就是五一假期了,同事都已放假。我不打算在假期加班,因为加班也无事可做,手头上的工作都需要与人合作。
我这人有个优点,选择性记忆,那些不快的回忆很容易随风而去。活在我记忆中的人们,对他们只留下感激。我也曾经爱写日记,很早我就写电子日记,记在自己的机器上,PDA上,当我有一些不愿意再回忆的事情时,我会个将整个文件加上密码,长长的一次性密码,保证自己只能记住一小段日子。当这段日子过去,密码就消失在记忆中。然后再也打不开这些文字,等到下次更换硬盘,无论我多么的想再看一眼当年的自己,也无能为力,只好把加密过的文件删去。
是的,我想讲一个真实的故事,一个拥有数千万玩家的游戏诞生的故事。我并不喜欢这个游戏系列本身,但是我为这个产品自豪。我的代码曾运行在几千万用户的机器上,作为一个程序员,还有什么比这更让人满足的呢?也许有,比如让这个用户数量再扩大10倍。
那些日子,时常在allegro的maillist说几句话,为一些代码做优化并迅速被allegro开发社区吸收进去。同时我也提出了许多自己的想法。不过由于新的想法需要对allegro的接口做调整,这是一个成熟的库不可接受的,和allegro的原作者Shawn通email的过程中,Shawn用很友好的语气说,如果你觉得那样比较好,为什么不自己做一套东西出来?然后我就做了,甚至第一个版本在allegro的mallist中发布。有人说,这样的东西没什么意义,allegro已经够好了(当时已经有了Windows版)。Shawn还帮我解释。
哦,我说的就是“风魂”。甚至不到一个月,风魂就有了一个匈牙利用户,他还用它做了一个小游戏。
这是1999年3月4日到3月8日的事情。我在网吧通宵了三个晚上把风魂的第一个版本完成。之所以日子记的这么清楚,是因为我查到了当年留下的一份记录文档。开发环境是MSVC5,因为我不愿意(也没有足够的硬盘空间)装IE4,所以没有安装6.0的VC。
“古越”,就是天夏的client主程,也担当了后来大话西游1的client主要逻辑的编写工作。那个年代,精通Windows写游戏编写的人不多,我也只是稍微熟悉而已。很多人刚从dos年代过来不久,DirectX的中文资料很少,且比较难查到。我很能理解他们选择使用“风魂”这个学生作品的缘故:开源+使用简单(简单的C接口)+高效(在硬件条件受限的时候,我在软件优化上下了许多工夫)。
天夏这个小公司当时正在开发一款图形MUD,名字就叫“天下”。当时估计有很多mud迷想把mud图形化,但是做出来的产品寥寥。我只记得有一款叫作“笑傲江湖”的所谓图形mud,仅仅只是给文字mud加了点图片而已。真正意义上的图形化还没有人完成。
显然,天夏的开发团队也没有前人的经验可以追寻,甚至他们没有开发过单机游戏。忘了当年“古越”问了我一些什么,只是最后,他想请我帮忙做一些模块,可以让游戏开发更简单一点。这个工作是有酬的,这点吸引了我。要知道当时都是穷学生,我连买块硬盘的钱都没有,显示器也已经严重老化(93年购入的时候已经是国外的电子垃圾,不知道服役过多少年了),我的开发机器中的CPU是网友的公司赞助的,主板是编程比赛的奖品,内存条这些配件用的先前一些兼职工资买的。
所以,任何一个用自己的技能赚钱的机会都不会放过。这样,我又认识了micro,天夏当时的头儿之一,据说他当过mud的巫师,也写一些服务器的代码。不过后来我们见过面之后,一起在网易共事的日子里,几乎没见他再写过什么代码,这些是后话了。
快完成的时候,我在网上询问了朋友(逆火的庞鑫,他与我同届,但是他在大学期间已经发行了一个游戏了:天惑),庞鑫告诉我说,他们为了养活自己的工作室,时常也接一些单来做。这样的单大约应该开个1500的价。当时我天真的觉得,1500实在是个天价,要知道97年的时候,我帮人用delphi1.0做了一个完整的软件也才拿了600多点,那个用了我半个暑假。
btw,具体的数字我记不太清了,只能说大约这个数量级吧。大学毕业后我就再也没缺过钱用,对钱的数字极其不敏感,所以忘的快。
毕业的第2天,我去了北京。在创意鹰翔待了三天。林广利是我很好的朋友,我看他似大哥一样。他邀请我去的北京。鹰翔当时的情况看起来不是很好,不过我不太所谓。总算毕业了,我觉得我自由了,再也不用看老师的脸色,不用应付烦心的考试,不用担心课堂点名……
当被问及我们应该重新开始做个怎样的游戏时,大家并没有想到网络游戏,虽然那个时候石器时代已经开始流行。我听到的圈子里的说法是,“目前国内有200个网络游戏正在开发,明年至少有20个上市,再开始做已经晚了,也没啥意思”。事实上,2001年并没有那么多国产网游被开发出来,我所熟知的一个:大话西游,可耻的失败鸟:D
那几天我们讨论了许多,但是不知道为啥,我始终没什么兴趣。我不知道我需要什么,但是我知道那些不是我想要的。
逆火工作室在创意鹰翔对面的院子里,我联系庞鑫出来聚一下的时候才发现这一点。太巧了,北京如此之大,此刻又如此之小。
庞鑫是个典型的北京人,说话极富煽动性(会忽悠?不过人家也的确有真本事)。我98年在北京参加一个大学生计算机比赛时,认识的他。他倒不像我是参加编程部分的比赛,而是展出他的3dengine。98年,3d显卡还是很稀罕的年代,所以我很是佩服。
庞鑫试图说服我加入他们的工作室,跟随一个投资者(yandan,那个时候听说很有名,他说他帮过许多人,比如雷军)做手机的软件。据说很有前景。EPOC系统,我第一次听说,现在已经改叫SymbianOS了。我们为EPOC做一个3d游戏引擎,应该很不错的。我可以做我最熟悉的一块,在arm处理器上,用arm汇编优化2d部分(因为手机当时还不能配备3d硬件,都是软件实现,最终都需要转到2d显示)以及一些底层核心代码。
安宁(后来为天下2写了几年的程序)当时也在那里,我挺喜欢这个人,他曾经用汇编写了一个软件3dengine。符合我心目中的牛人标准。
那段日子过的挺自在,都是一帮好朋友,住在一起,半夜饿了就打车出去永和喝豆浆。白天叫些外卖。伴晚时分,也出去闲逛。我在北京有很多朋友可以一个个蹭饭:)。几乎都是游戏圈子的。比如,最早拉我进入这个圈子的王欣(八爪鱼工作室的负责人);为无数国产游戏“擦过屁股(修补bug并完成游戏好拿出来卖)”的余雪松(可能说起后来的kele8大家更熟悉一下)等等。
这段日子一直过到天气开始转凉。我还清晰的记得那一天,有人通知我们第2天去深圳见风险投资的公司代表。我们连夜做了PPT,赶上第2天早上第一班飞机南下。我们只在飞机上打了个盹就被拉到另一个合作的团队的驻扎地。这个团队当时叫做wass,后来其主干有建立了家新公司唤作“数位红”,现在好象已经不存在了,不过应该google的到。
原来投资商是再后一天从新加坡去广州的。我们在深圳只是再准备一下。这次让我领略了该怎么忽悠风险投资:)我们掐着秒表准备演讲内容,甚至连中场休息的笑话都是预备好的。
我的部分不太需要准备,反正不是说大话,怎么想怎么说即可。所以得以有两三小时的睡眠。等天再此蒙蒙亮的时候,我们已经上了去广州的taxi。几乎是一睁眼就到了,除了困,我什么都不记得了。
我和庞鑫的演讲部分安排在最后,会议室里,我们拼命的喝着不加糖的咖啡,中间上了三次厕所。我和站在外面吸烟处猛着抽烟的新哥们相似而笑。40多小时没怎么合眼。大家都困死了。
投资商是宏基,看起来比较重视,派了个元老过来谈的,带了很多人。我和庞鑫的演说很成功,想来是因为我们年轻,表现的相当有激情,甚至还为技术细节吵了两句。说完了我们就回房间睡觉去了。晚上有人来敲门的时候,已经带着好消息。
虽然我们要求的四百万美刀没有被答应,不过对方还是答应投资1.5M。我们这大摊子人一共保留多少股份不太记得了。只记得逆火工作室的哥几个分到百分之十几。
我们需要签四年的合同,合同很厚很厚,回北京后还安排了律师给我们讲解。我觉得学到了许多。只是最后签字前的那一晚,我想了一个问题:这是不是我的追求,我要的人生?
下次再接着写吧,我想会一直写到梦幻西游的成功,是个很长的故事,不知道有没有朋友会一直读下去。我只是想记录这几年的历程,没有读者也无所谓。
那些日子(二)
10多年后,我在学校的机房上网,泡bbs,做个人主页,写一些关于游戏的自己的想法。交了许多的网友。大家都是业余的,年轻气盛,想自己做出好玩的游戏。王欣是第一个给我发email的职业游戏人。更早的97年,国内有两家大的游戏公司,前导和腾图,有如台湾的大宇和智冠。可惜生不逢时,前导做不了大陆的大宇,腾图也远不及智冠。
腾图命中注定的散掉,王欣的八爪鱼工作室从腾图分的出来。98年,王欣邀请我在假期去北京玩,他把我带进游戏这个圈子。我又有机会站在天安门广场,原来并没有那么大。我想,如果Mao.ZD纪念馆挪一下地方的话,广场会更宽广一些,和我儿时记忆中的一样。小时候怎么就没这种感觉呢:)。
那个年代,我成月成月的逃课,去北京帮王欣做些兼职工作,并听他说些早年北京游戏圈子有趣的八卦,有如今天我给新人说起往事。回忆起来,自己其实什么也没做,似乎又做过点什么,反正最后一次,我拿了一小笔兼职工资。不过没有花掉,因为回到学校的时候,一个同班同学缺钱交学费,我全部借给了他,毕业那天他才凑起来还我。
当然,身在北京,我就有机会四处拜访网友同好。随即发现,其实许多网友都已经专职在做游戏了。有些人后来再没怎么联系,比如曾经在金洪恩做《自由与荣耀》的3dengine的riso,我还记得他在那个晚上,他抱怨他的后继者让代码从几万行膨胀到十几万;又比如做《独闯天涯》的郭巍,他念叨过来北京前没有钱吃饭,小组里每个人一个冷馒头就可以啃一天,脑子里只想着把游戏做出来……
刚在网上认识他们的时候,他们还是业余在做,个人网站上放着一个RTS的demo,看起来很火暴。
据说早年他们在做别的软件,有个自己的小公司。做完个项目后,分了钱大家去北京散心,看看专业做游戏的公司是什么样子的。去过前导也去过腾图,不是去应聘,只是转转。这些“专业”的公司得到的业余者之评价是:不过如此。跟自己业余做的demo也差不多水准。
不过腾图把他们留了下来(有八卦说,前导的头儿追悔莫及)。就是那种很随性的,“不如你来上班吧”,旅人结束了自己的旅途。据说那个时候腾图偌大的公司,已经快散伙了,留了许多半拉子产品,补不完的bug。这是我听过国内游戏圈的历史中最传奇的故事,余雪松一个人修补了四个产品,把它们做到基本可以摆上货架。我是听别人转述的,但我相信那不是件容易的事情。
见到老余的时候,他们小组已经接受一家台湾公司的小额投资在做《烽火三国》。小组没做垮,产品上了市,那家台湾公司却先垮了。等我毕业再次来到北京,老余他们跟着谢成鸿在做kele8。
老谢,用过笔名“小谢”。我们居然很早就有过交情,在我的个人主页创办早期,他给我email来了几篇稿子,让我放上去。有兴趣的朋友可以看看怀旧:)
老谢早期最有名的作品是一个web象棋,不需要下载就可以在网上和人对弈。这个东西曾经挂在sina的游戏版面很久,我想他是用这个淘到的第一桶金。当然更大的资金注入来至于当时如日中天的联众。btw,第一次见到鲍岳桥的时候,我有种奇怪的感觉,中学时就在UCDOS上看到作者名字,我心目中的名人,原来也是个普通人。这种感觉在碰见求伯君时还有,等到日后见到丁磊时已经没有了。
老余听说我正闲着没事做,甚至也没有收入。他请我吃了顿饭。一共四个人,老谢、老余、老吴,还有我。一家很小的馆子,大家骑着自行车过去,点了些家常菜。2000年的9月,老谢对webgame充满信心。北京的夏天已到末尾,冬天不远了。当他邀请我去kele8的时候,我没有太犹豫。我不知道自己能做些什么,该做些什么。我知道这些朋友都有很好的技术,都有火热的激情,看起来不错,不是吗?
我的工资是6k/月,第一个月发工资时,信封里装了5500,我没有问,我想是扣了500的税吧。工资数字对我是无所谓的东西,真的。大学没毕业时,有个朋友说,来我这里干吧,一年10万。我在心里吐了吐舌头,这么多啊,父母为我读大学的学费和生活开销,攒了十年的钱,也不过四万而已;我和庞鑫等哥几个去忽悠风投的飞机上,庞鑫说,别不好意思,以后报自己的薪酬,只管写上五位数;我想我一个月吃饭不过几百块,一年难买两件衣服,能用上几个子呢,真的是无所谓的一件事情。
在北京的后几个月,我和安宁(以及嫂子),李民(庞鑫的同学)四个人租的屋子。在西直门外,出门就是北京最著名的西直门立交桥。老实说,并没有传说中的那么恐怖啦,我只迷路过一次而已。论可恨程度,远不及紫竹桥那个,南北不通,每次过都需要把自行车搬上搬下。
房租2800,大约每人摊1000。我无所求,所以住的最小的一间。屋内空空,只有一张床和一口箱子。每天早上9点起床去上班,逆火的兄弟们在白石桥租的高层写字楼,我在魏公村。都不远,大家骑车即可。我的车是来北京后朋友送的,价值20块。没有后档泥板,一下雨,背后就是一条黑线。有一天下班时,魏公桥下没有人也没有车,我被黑暗角落窜出来的交警拦下,闯红灯,罚款20。他瞅了一眼我的破车,怎么没有车牌?我很想把车留给他,然后自己走回去。但是我没有,兜里只有20块,换了一张罚单。后来离开北京的时候,我把这辆破车停了某个天桥下,一年后等我再次到北京时,车居然还在,口袋里的钥匙也在。
在kele8的日子很闲,老谢不知道可以安排我做什么。老余说,等下一个版本,全部交给我来做。我就自己给自己找事情做。我去的时候,办公室里就7个人。两个美术,一个专心做3d模型,一个只会画平面的东西,但是画的真好。我原以为做游戏需要很多很多的美术,其实不用。合理的调配人力,帮助美术节省一些不必要的机械劳动,两个人也能做很多事出来。
程序算上老谢有4个。不过老谢写java的,老余写C++,他们技术上合不来,而老余的技术和经验高很多,所以整个底层都是老余在做。吴东黎是个很有趣的人,年纪不小,没谈女朋友。和我一样,成天待在办公室。除了打quake(技术真的很棒),没太见他玩别的游戏。你不可以说他的技术到底是好还是坏,讨论语言的细节他或许不行,但是他做东西就是来的很快。无论是用什么。他和老余是天生的搭档,余雪松设计出脚本语言,他就拿过来用,用的很好。另外一个哥们也是写脚本的,在kele8,包括以后的大部分程序员都是工作在老余自己设计出来的脚本语言和开发集成环境上。
按理说,读初中那会儿,我就喜欢上了C++。不过我的认识也就停留在了92年的国内翻译的一些C++书籍上。2000年底,《C++编程思想》这本书对我的冲击很大,我觉得我重新认识了C++。我想我应该把“风魂”重新做一遍,用C++。甚至我还觉得kele8的引擎做的不够C++,比如我们应该用巧妙的继承和类层次关系去取代那些函数指针。而且老余那个时候跟我一样,不知道可以用->*这样的操作符去用指针调用成员函数,const这个关键字也没有被准确的使用,等等。
做产品毕竟不是研究技术,这些都是想想而已。我们只是每天在骑车回家的路上聊聊。
写了一个2d下3d效果带光照的球面渲染;以及做了一些碰撞方面的demo后,真正的kele8台球程序还是老余自己重新写的。我那个时候思维总停留在C和C++上,用不惯那些脚本。老余倒是对自己的东西使的游刃有余,就在一个阳光明媚的早上,他兴冲冲从包里拎出硬盘,推入活动硬盘匣,给我展示了一晚上的成果:一个台球游戏基本可以玩了。
kele8的台球这个游戏无疑是成功的。那段日子,我去台球俱乐部里打snooker,听到有人谈论它,心里都一阵得意,我也贡献了代码呢。
我想我不够疯狂。
在北京过的最后一个冬天,满是落魄。这是种内心的感觉。我觉得对不起给我发工资的人,对不起朋友。我没做出什么更有意义的事情。而大多数人都做的比我好。
2001年的新年来的特别早,1月23日是除夕,我们的春假放的更早。
事后我想,估计老谢明白我想离开。旧年里最后一个月的工资决定等年后再发。不过我领到了800元的新年红包。
我实在不好意思说辞职,因为似乎我没为团队做点什么就要走。回到家,我在网上留了言说想休个长假,好好的想想未来的计划。
每次我觉得对不起周遭的朋友们时,大家都表示出莫大的理解。我真的是一个幸运儿,拥有这样多的好朋友。每个人都能体谅我的自私。
那个时刻,我已打定主意离开北京了。
争取在5.1假期内多写一点,应该能写到大话西游项目的开始。原本还有很多的人很多的故事可以写,这里略过了许多。比如那些年出没在sina游戏制作论坛上的众多id:小箭2000(每年还在给我寄贺卡)、做模拟飞行的黄海、写“我的游戏梦”的指顾江山等等。那两年,在北京我见了许多人,跟许多朋友彻夜不眠的长谈。听了许多故事。自己也经历了许多。
每当我努力回忆一点,就会有如泉涌般的冒出来。甚至让我夜晚睡不着。我想人的记忆其实不会遗失,只是藏在那个角落里,等你努力挖掘的时候自然会蹦出来。
对想出现在这个故事中,却没能露脸的朋友说声抱歉了(我挺喜欢出现在别人的故事中,我想很多人都喜欢)。不是我已经忘记你们,也不是故事里的人对我更重要。我只是随机选择了一些片段记录。
10年前的事情,真的是很模糊了。
最后,还是那样:谢绝转载。因为不能保证没有记忆的偏差,我希望有机会纠正。
那些日子(三)
狂欢之后,各自散去。在本地工作的,也开始忙忙碌碌,留下我一人。有时候可以去一下老同学读研的校园,跟他们吃吃食堂,打打台球,听他们聊一下自己的老板,还有一些八卦。我觉得我还存在于这个社会。
有那么一瞬间,我了解到什么是空虚。人在虚空中,四周什么都没有,无所触及。声音也传不出去。不喜欢这种感觉,然后我开始读书。
大学毕业以前,我是不读历史的。高中会考,九门课,8A1B,就是历史那一科得的B。我痛恨一切要求背诵的课程,顺带厌恶了历史。当然我数的出夏商周,春秋战国秦汉,分的清六朝五代唐宋元明清。这归功于小时候爱看各种历史演义小说。三国演义就读了四五遍,以至于中学老师还没教到出师表时,已经背的朗朗上口了。不过演义不是历史,对吧:)。
我想,给我上历史启蒙课的是柏杨(老人在前几天去世,让我感慨了好久)。我倒是先读的《中国人史纲》再看的《丑陋的中国人》。后来又读了《皇后之死》等等很多很多。还有,在网上追看着的潇水的《青铜时代的恐龙战争》。
第一次发现,其实历史这样的有趣。不是因为有趣的故事,而是人性,以及人性促成的社会。历史总是在重复自己,又总也不会呈现相同的面貌;人总以为自己了解过去,可以回避那些前人犯下的错误,可他们总是掉进同一个坑中。这是为什么呢?
我觉得有趣,就试着载入存档,看看能不能扭转乾坤。一个晚上过后,我成功了,白天的考试却挂了。满不在乎的我,爱上了这个游戏。
特别喜欢这个游戏系列,胜过《文明》和《模拟城市》。从这里面,让人体验到了古罗马人到底怎样在生活。虽然只是游戏,许多设定是为了游戏的娱乐性而设,但是就是让人觉得,那种生活方式是合理的,恰如其份的,真实的。罗马城里那些高悬在空中的输水管道,街头的公共浴池,给了我无限遐想。
在家的那段日子,我买了份正版的《法老王》,在家里盖金字塔。看着那些小人在尼罗河泛滥后留下的肥沃的河床上耕种,农闲时大量的人力被调配去盖金字塔。哦,奇迹原来是这么诞生的。这就是文化呀,游戏是多么好的文化载体。
我想做一个承载中国古文化的游戏。
所以我开始啃史记,读资治通鉴,还有一些学术研究方面的书,比如人口,风俗方面的专著。很多大部头虽然只是翻翻,但也觉得自己似乎不那么无知了。不过成天读书,人也显得疲惫不堪,没有人和事管着,一天要睡12小时才够。白天也总是睡眼惺忪的。我想,长期这样下去也不行,得有个计划。
聊起网易,倒是让我有了一些兴趣。我的第一个email就是网易提供的服务。大多数志同道合的朋友,都是在网易的服务器上建立个人主页之后才陆续认识的。那时觉得网易是中国最大的网络公司,嗯,大公司,据说还在nasdaq上了市。
不过我对古越说的网络游戏,没有丝毫兴趣。mud我怎么都没玩进去,UO显然不如diablo有趣,EQ就是一群傻鸟在那里围着几个多边形按鼠标,隔一会儿还要坐地板。据说丁磊眼红上了《石器时代》,这个游戏我没玩过,不过看起来也是日式RPG的末流产品吧。
我说,现在全中国都在做网游呢,才开始做是不是晚了点?
真的,的确全中国那个时候都在做网游,后来那么多人给《天下》和《大话西游》带上了首款国产网游的桂冠,让我唏嘘不已,真的是成王败寇啊。
那几天,另一个朋友也在和我联系,王华逵。
认识王的时候他在金字塔做程序员,书生气质。我那时还在上学,假期里去深圳找他玩儿。金字塔对员工管的挺严,我进了金字塔的办公室的时候,他跟我说老板不在,还没下班,等下班我们出去边吃边聊,现在得坐岗。我看了他先前做的一个网络俄罗斯方块,据说在他们办公室里很流行。甚至因为大家上班打游戏,而被老周给禁了。当时他在做一个网游:《人在江湖》。我想,这是我知道的第一款图形mud,至少比《天下》早上许多。只不过更mud一些,一个个的小区域场景,正如mud中的文字被图形化出来。client是3d的,很早期的3d,技术不太成熟,打斗的时候有些简易的动作,但主要还是靠文字拓展玩家的想象力。之前的《江湖》这款游戏很糟糕,所以我对人在江湖也没什么特别好的印象。
晚饭时我们聊了许多,王华逵还叫了几个朋友一起。有一个据说是江湖的程序员,已经离开金字塔了。明显他自己也觉得自己在程序方面没什么造诣,说了一些很搞笑和低级的程序bug。反正,江湖这个产品没做好是应该的,卖的很好,不是吗?老周应该挺满意。好象还有个做游戏网站的朋友,说起网站的流量之类的事情,我那个时候的个人主页的流量相对还不错的呢。
晚上,窝在金字塔的办公室里看动画片。一个胖子的电脑在放《攻壳机动队》,片子和人都给我留下了深刻的印象,胖子说他叫陈重,人如其名,一下就记住了。他还给我看了他画的《江湖》里的大侠,动作很帅。这个人后来负责了天下二的美术,世界真小。
夜里很晚了,我被带去员工宿舍睡觉。全是上下铺,天气很热,没有空调。桌上的电风扇呜呜的吹着,我觉得比学校的寝室好,因为不熄灯。
上铺是个新毕业的大学生,说是找工作找过来的,没想过做游戏,只是找工作而已,目前试用期,1500一个月。我随口提了些技术方面的话头,感觉对方很茫然,就把话题绕过去了。心里想,这个世界真奇妙。好多有志于游戏开发的热血青年不得门而入,觉得国内做游戏的公司都是些神圣的地方,很难进入。而另一边,人才市场上随便摆个摊,收几份简历,会写几行程序就来做游戏了。有些游戏产品做不好,还真不是什么奇怪的事。
王华逵说他现在东莞有个公司,正在开发游戏。还有,给游戏写剧本的是个名人呢,我跟他提过我喜欢《悟空传》,正是今何在在那里。冲者猴子的名头,我说好吧,我去你那看看,散散心。
南下的第一站是广州,下了飞机是古越接的机,我第一次见到真人,大家很开心的聊着到了公司,micro执意给我报销了机票。我倒真的没点积蓄,有人报销路费自然是高兴的,不过有点困扰的是该让广州的公司买单还是东莞的。
网易的办公室在广州最豪华的地段。狭窄的街道,高耸的大楼,橱窗里玲珑满目的商品,墙壁的装潢有点陈旧,我觉得我处在电视剧中的香港。办公室就在那个川流不息的十字路口边的楼顶,36楼,我们一直称呼这个办公点。
透过落地玻璃看那楼下的小车,火柴盒似的,感觉很奇妙。
许多人拥挤在不大的办公区里,micro给我一一介绍。他们一伙人已经确定并入网易,然后新招了许多人,主要是美术。不过在文件上,大多数人暂时还不算网易的正式员工。大家似乎和老网易的人有点隔膜,我想刚合并的公司就是这样。
聊起美术部门里那些五颜六色的头发,听说还有一段趣闻。丁磊起初很不高兴电梯里有人指指点点,不知道顶楼的公司正在做什么,都是些奇装异服的人。曾经“下令”说,你们把头发剪掉、颜色洗掉,再来上班,结果却不了了之。因为有个白发的哥们道,要么我们都不过来上班算了,一呼百应。
这天我认识了刘琪和周云,都与我同年,小我几个月份。我很奇怪为什么美术部会有两个头儿,不过没问。周云的性格我很喜欢,为人很讲义气,长的很帅,一看就是很得女人缘的那种。多年之后他和我讲他的故事,居然他女朋友最后因为迷上大话而最终分手,网游啊,祸兮福兮。
晚上我住在古越家,他刚买的新房(我猜是因为天夏卖给了网易,股东都得了些好处吧)。他的女朋友正在武汉读大学,学文的。时值寒假,也住在他那。我随便聊了两句,提到想读读范文澜的《中国通史》,她说她正好在学校图书馆里借了一本,就拿给我去看了。
micro和ten说想一道去拜访同行,他们在国内游戏圈里没什么人脉,随我一起去多交一些朋友。ten是天夏服务器部分的主程,挺有想法的一个人,是天夏工作室的元老了。聊起来就知道是个mud迷。我猜想天夏的几个人就是因为mud走到一起去的吧,我不玩mud,这方面没什么共同语言。
我们乘火车去的东莞樟木头。micro提了个很奇怪的要求,让我别跟王华逵说他是谁,只说是个朋友。我说,讲了也没关系吧,最后还是从了他的意思。或许micro当时觉得,被网易收购的事情还需要保密,不方便说。只是最后让王猜出了他们的身份,好不尴尬。
在樟木头我倒是如愿见到了今何在。只是一面之缘,打了个招呼,没有聊什么。他们在做《不灭传说》,剧本是今何在的《若星汉天空下》。这是个网络游戏,据说主打欧美市场,首先做的英文版。
聊到《不灭传说》这个游戏,我从自己老本行的角度提了些技术问题,想知道他们怎么解决的。国产游戏到那个时候还没有什么成功之作,大多数卡在技术上。比如内存占用的问题,王说的很轻松,我们打的是欧美市场,人家早已经普及128M内存,不用太考虑这些。我心里笑笑,国内64M内存已经挺奢侈了。毕竟那个时候我刚从学校出来,烂机器用惯了。
华奎在饭桌上私下里跟我说,过来一起干吧,一个月工资7k,另外再算别的待遇。我说,我考虑一下,但自己知道那只是礼貌。条件挺好,但不是我想要的。
晚上,华奎让公司的行政帮我们在一家四星酒店开了房间休息。我和micro一间标间。micro跟我说,他们想了好久新项目做什么。最后考虑到西游记的mud挺有人气,一些做西游记mud的巫师也过来了。可能会做一个西游题材的网游。
我说我可以帮忙,但还是想在家里自由一些。反正我主要也只是做引擎,稳定了后就没多少事了。不如给你们再做次网络兼职吧。
就这样,第二天我去了深圳转了转,见了几个老朋友,然后就回家了。
那些日子(四)
我考虑了几天,突然有了些灵感。我想我找到了方法解决这个问题。只是古老的脏矩形算法而已,好多人尝试过,可惜都没有用好。我想我可以换条思路解决的好一些。
再就是阅读了MFC中CString类的源代码。因为吴东黎说,好多人不用MFC,但是离不开这个string类。他把这个类从整个MFC中剥离了出来用。我也不用MFC,不过还是想,有这么好用吗?随即读了一遍。因为正好在重新学习C++,我就自己开始写一个string类。
这两块东西让我把“风魂”的代码用C++翻新了一遍。如今回头来看,代码很混乱,没有章法。但是我想它们见证了自己的历史,至今仍放在主页上供人下载。
没有哪个程序员的代码一开始就能写的成熟稳健,我们都经过幼稚的年代。
古越在网上告诉我,他想用我新完成的风魂C++版本来写新项目的client。不过还需要我做几个扩展模块。我想总是要练练手的,何况可以拿兼职工资。在家这么混下去,总不能一直吃爹妈的。古越还是想让我加上Z-Buffer的支持,但我觉得那不是一条正确的路。想了一下,决定实现另一种解决2d场景中前后遮挡关系的方案。可以不增加太多额外的数据量,而且处理速度比较快。
在此之前我估算了一下整个网络游戏client需要的图片资料的数据量,得到一个吓人的数字。对于当时主流的64M内存配置来说,不花点心思,是跑不起来的。
大约做了一个月,我把一堆代码和几个example提交给广州,并拿到了4000块的兼职工资。这让我很欣慰,至少我在家没有白吃白喝。而且,天夏被网易收购以后,micro明显大方多了,呵呵。
这种悠哉悠哉的日子也只过了这么一个月。另一个人找到了我,胖肖,肖海彤。
肖海彤这个名字,96,97年的时候在cfido网上很出名。我老在全国的技术区里看他发信,有过一些笔谈的经历。写程序这行当,他绝对是我的前辈。那些天,我们在网上聊了许多,他直言是因为网易才跟我联系,但我们聊的都是些别的。我记得他给我转了一些旧邮件,关于民主啊宪政之类的。我本不关心政治,可读了后对政治也有了兴趣。我想我是从那个时候开始仔细考虑“自由”和“个人意志”这些问题的。
肖海彤是丁磊的同学。网易当时还设有CTO这个职位。CTO在北京,似乎跟广州有隔阂,基本管不到广州来。肖海彤正负责广州网易的技术部门,广州也几乎是网易全部的技术力量所在地。
事实上,后来我只让阿姨去我那打扫过一次卫生,而我自己连周末也是泡在公司里。我想既然要做,就一定要做好。
网易97年成立,当时只有7名员工。当2001年4月8日,我在入职单上签字的时候,工号是92。员工离职,工号是保留的,即使日后再回来,也是领个新的号码。我认识好几个离开网易又回来的同事。而我的工号,从92到0092再到G0092,没怎么变过。
我猜,当时网易的北京上海广州三地的正式员工加起来差不多只有五六十人吧。但实际上办公室里看起来的人更多一些。micro他们天夏的收购手续还没有完全办完,许多人拥挤在36楼,而我是直接入职网易技术部的。
在胖肖的办公室里,他满是歉意的对我说,由于制度上的原因,只能给我一万一个月的工资。因为我的级别是6级,在新员工里已经很破格了,如果再高恐怕影响不好。而6级员工薪资最高这么多。至于住房,房租是1600一个月,如果公司来支付的话,手续上不好办,所以得我自己承担,额外会有800一个月的住房补贴。扣完税以后,可能比一开始许诺的少许多。
我说无所谓的。这么说也真是这么想。而且,这个数字听起来不错,5位数耶,可以小小的满足一下虚荣心。这也是我最后一次关心自己的薪资,后来再也没注意过。直到今天我也不知道到底每个月公司给我发了多少钱,银行的户头上从来没刻意去查过帐。
入职的那一天,天夏的fishman离开了。我跟他就那么一面之缘,没什么印象,也没太多好印象。我在36楼底下的农行办工资卡的手续时,天夏原来的行政mm也在,她跟着fishman离开。很清秀的女孩,漂亮,所以印象深刻。她也是在那办些公务,或许是转帐吧。我们闲聊了几句。我知道网易大约花了10万美金收购天夏。今天看来这个数字很便宜,但在那个时候,我想至少fishman觉得赚了。我也觉得赚了,就这么忽悠一下,然后全身而退。人和人的想法还就是不一样呢,有人就想做点事情,有人就想赚点钱。
赚钱为了什么呢?我仔细想过这个问题。钱是一种媒介,代表了一种对社会资源的调动能力。所有的不公平,都是缘于资源分配。我们需要有思想有能力的人来更加合理的调配社会资源。
夜里,我回到了属于自己的小窝。就在公司对面的一条小巷子的尽头。与外面的繁华截然不同,这儿非常的安静。一对和善的老夫妻租给了我,虽然外观破旧,但内部温馨,甚至有一口金鱼缸。
很累,床很舒服。第一次一个人住这么大一间屋子。当从清脆的鸟叫中醒来,赤脚踩着清晨地板上的那一缕阳光时,我想这是一个新的开始。
那些日子(五)
今天已经开始上班了,最近很忙很忙。在调游戏的数值,很繁琐的事情,还要写程序去模拟。整个项目也需要人去照看。
这个系列,我想会坚持写下去。但是不想成为自己的负担,我想这样才能写的自然。因为都是写一些真实发生的事情,和身边的朋友,按记忆按自己的理解去写就好了。不像写小说,会担心有逻辑上的漏洞,会困扰于故事中每个人的结局该怎么安排。所以,挖了坑不知道该怎么填上这种事情多半不会发生的。
已经开始有朋友写email跟我聊这几天我写的这几篇东西了,有人抱怨为什么没写谁谁谁:)。这个问题其实上次解释过了,我是个不善于回忆和叙述的人,每次从记忆深处挖点东西出来,都会涌出一大堆的人和事。精力有限,只能挑选几个来写。
关于国内游戏圈早年的一些事情,有兴趣的朋友可以google一下“北外隐形人”写的“中国游戏年代记”。是我读过的最全面的一个记录。从叙事角度看,猜想这个“北外隐形人”是游戏媒体圈子里的人。对于制作圈子来说,有一点点距离。有些东西写的有点偏差,比如99年时庞鑫大学还没毕业,不可能结婚的:)。同样,我的回忆也可能失实,尽量少写道听途说来的故事吧,呵呵。
好了,以下是今天的正文,谢绝转载:
四月的广州,天气不错,甚至有点夏天的感觉。几年后,一个毕业实习生也是这个季节来到网易,住在我的家中。记得他曾感慨的说,知了怎么这么早就开始叫了,这里连空气里都充满着夏季的味道啊。我想那时我也是这个感觉,到处都是湿湿的,身上有点腻。和北方那种干燥真是截然不同呢。
网易的办公室在写字楼的顶楼,从卫生间门口的通道走出安全门,可以顺着外墙铁扶梯爬上天台。我很喜欢那里,吹着风,俯瞰繁华的广州。偶尔也有人出来抽根烟,我从不抽,但也不用担心吸二手烟。大家偶尔聊上两句,很惬意。
办公室里很拥挤,我想是因为新加入一大帮人的缘故。虽然额外租下了楼下第18层,但是没有多少改善。按网易一贯的风格,大家都坐在敞开的大办公区里,隔板不高,方便交流。我被安排在一角,前后都是原天夏工作室的程序。
micro对于我能再次回到广州很高兴。兼职期间我写的那些模块尚未用上,因为毕竟那些是我自己的一些新想法,还没有和其他人沟通。client的程序定下来三人,古越、我和果子。
果子,以我当时的眼光去看,是天夏的程序中编程水平最高的一人(不过他不是天夏的股东)。跟着天夏进入网易。第一天我们似乎讨论的是游戏中UI的问题。除了“天下”,大家都没有做过游戏,不知道游戏里的UI该怎么实现。果子给我看了几个用gdi写的UI小demo,做的不完整,也没有什么头绪用到游戏里。
接下来一两个月,UI的问题也困扰着我。如果engine是由我负责的话,这种client的基础设施就理当给出一个解决方案。而我只有一点单机游戏的经验,在我的头脑中,游戏的UI都不复杂,简单的硬写出来就够了(比如古越在“天下”中干的那样)。但是直觉又告诉我,网络游戏会不一样,UI的复杂度会高上一个数量级,不能简单对待。事后证明,我的直觉是正确的。大话西游client后期工作一半以上都是围绕UI展开的。
接触了好些新同事,以及评估了我们的进度计划日程后,我下了一个决定。这个日后反复被丁磊拿出来损我,当作是人都会犯错误的样本来教育新程序员的决定,我至今不认为它是个错误。那就是,在client中内嵌一个IE,实现游戏中的UI。
软件项目并不是人多就可以做的更快,《人月神话》里已经讲的够透彻了。让更多的程序员可以参入项目并做出贡献是非常困难的,比跨过特定的技术门槛更难。大多数情况下,增加人手只能帮倒忙。而这次,我们可以拉郭斌甚至更多网易的同事(后来做这一块时还加上了刘国斌)来做。而我们client组原有的三个人,可以专心于更小的一块工作。
同期,我做了一件影响了后面很多年网易游戏client开发的事情。那设计游戏地图的数据格式,以及开发期这些数据的构建方式。
之前,几乎所有的游戏,都需要做一个场景(地图)编辑器。被业内简称为“地编”的工具,往往担负了超过一半的程序工作量。在我大学还没毕业的时候,曾经去珠海金山拜访朋友。剑侠情缘2的主程王炜给我展示过他做的地图编辑器:游戏即编辑器,编辑器即游戏。发行给玩家的版本只是一个屏蔽掉编辑功能的编辑器而已。
整图的方案不是没人干过,但是很多人做的不好。因为出整图是需要占用运行期大量的内存资源的,在当时的机器配置下,就不可能把场景做的太大。而且场景上一样有许多素材会和人发生前后遮挡,也需要编辑器去编辑他们。
我的思路很简单,能不做的工作我们就不做。如果只是描述一个2d场景,那么photoshop可以干的足够好,而且美术人员习惯用。遮挡关系的处理,我发明了一种简易的方法,用一个mask罩住背景图片,当角色需要绘制在后方时,engine把背景上mask罩住的部分扣出来重新盖在角色图片上。这样,我们只需要做一张整图就够了。mask也只需要用2bit描述一个像素(如果单单需要把场景上的一颗树这样的图素扣出来,mask只需要1bit。但还需要一些额外信息描述前后关系,细节这里不展开介绍了),这些信息还可以很方便的压缩。我们需要额外设计的是,如何在photoshop里表达出这种mask。最终的方案是为每个遮罩物创建单独的图层,选用黑红蓝等颜色区分出来。
这套方案是我在家时就想好了的,兼职期间也一直在做这种特殊mask的实现。来到广州后,果子帮我研究了psd文档的格式,并写程序提取出相应的psd文件中每个图层里的数据。
当每个人都可以专心做特定的一件事,比如美术人员可以专心用他熟悉的工具制作一张大的图片时,工程才能合理有序的进行下去。额外需要做的事情是有专人去勾勒出遮罩,分出图层,按事先约定的规则起好名字。
关于内存占用的问题,如果把整个场景的图片全部载入内存显然是不合适的。假设游戏场景有6400*4800像素那么大(实际上我们后来设计出的游戏场景比这还要大),单单一张背景高彩图片就要占掉58M内存。而我们的设计目标是让64M内存的机器也可以流畅的运行游戏。况且,60M的数据加载也是个大问题,我个人作为一个玩家,非常痛恨游戏中缓慢的加载进度条。
最后,我决定尝试分割游戏场景数据,采用运行时动态加载的方式工作。经过测算,为了达到目标,为场景数据预留的内存不应该超过12M。我把图片和其它数据拆分成320*240的小块,当玩家操作主角奔跑于游戏场景中时,engine根据他的移动方向,预估client即将需要显示的场景,最多会把5块预读到内存中(游戏的分辨率被固定在640*480高彩模式)。
不少玩家曾经猜想过那些句子背后的含义,甚至有人投诉过网易,程序出错还蹦个对话框羞辱玩家。哈,借唐僧的口我自嘲而已。
当这段代码最终稳定下来,已经惨不忍睹。后来很多年,我们几个产品轮替,大多数代码被重写。但一直没人敢把这块东西推翻。据说这两年做大话3的同事终于下决心重新弄了一遍,不简单啊。不过也有一定原因是,我们现在不再需要那么精心推敲内存的占用,硬盘的加载速度了。当硬件上升一个档次,程序员们就可以站的更高,在更高的层面考虑优化问题,反而让系统工作的更好。
当年windows95就是一个例子,微软为了能让它在4M内存的机器上跑起来,颇费了一番工夫。结果也严重的制约了操作系统的发展,windows98,windowsme走了不少弯路。直到windows2000才回归正轨。
这与大环境有关。nasdaq股市爆跌,网易生死不明。高层似乎也发生了几起人事变动。刚进网易时,我参加过一个大型的会议,CTO给大家讲话,抚慰大家的不安,我刚刚去,不知道是些什么。
后来传出一些谣言,说是公司会被并购,中华网或是金山,具体是哪家公司我已经不记得了。那几天,nasdaq上的ntes涨到了2美金。似乎古越和micro都挺高兴,还说要出去喝酒庆祝一下。我想是因为他们手头上卖掉天夏得到的一些网易股票。我没去跟着庆祝。不久以后,股价又跌了。
公司有7000万美金的存款,但市值已不到这个数字。也就是说,如果有人肯掏上几千万,就可以立刻拥有银行里超出他付出的现金额。但是这是个赔钱的公司,每一分钟都在花钱,7000万看起来很多,可总有花完的一天。
记得刚去网易没多久,美术的负责人刘琪曾经去我家坐过,随便聊聊。虽然没明说,但我能感觉到他的一丝不安。刚换公司的人大多这样,内心不安定。如果这个团队散了,如果游戏做不出来,如果游戏做不好,大家需要一条退路。我不需要退路,我只是做我应该做的事情,尽可能做好,这就够了。如果尽了全力却失败,非人力所能阻挡。
人的能力有限,其实每个人能做到的事情都差不多。就看你投入多少。如果你全心投入也做不了,那么换一个人基本上也不可能做到。
我想我要做的是解决团队里暂时无人有精力去解决的一些技术问题。还有有些问题大家觉得无所谓(比如运行效率,比如内存消耗),但是我却认定它们会对未来游戏运营起来有影响,默默的去做。不需要别人知道你做了些什么,但求以后没有人指责你做错了什么。
项目的成功正在于:少犯错误。
我的想法就这么简单。所以身再累,心不累。每天还可以很有规律的干些别的事情。比如爱上了飞镖运动。跑遍了广州买到了镖盘和钢制的飞镖,挂在屋子里。每天晚上练习。没过多久,就能连续投中20x3的那块小区了。
后记:
前面有朋友留言说,故事节奏太慢;又有朋友跟我说,还可以写的再慢一些。我比较偏向后一种观点,多记录些细节吧,可能更有趣。对喜欢快节奏的朋友只好说声抱歉了。
希望能够写完写清楚,又不至于太过冗长。
那些日子(六)
和大部分原创游戏一样,游戏定名总是晚于项目启动的。01年4月我正式入职网易时,大家还并不知道这个游戏会和周星驰的著名影片《大话西游》同名。micro他们只是想做一个以西游记为背景的网络游戏。这个想法来至于当时有名的mud《西游记》。我对国内mud的历史没有什么了解。大约知道有《西游记》的巫师(yesi)被招聘进来工作,大家对《西游记》情有独衷并不奇怪。
月心是micro的合伙人,也是最早天下的策划。理所当然的承担了新项目的设计任务。因为我对网络游戏本身没有兴趣,所以我对这个人也不太熟悉。倒是和另一个策划私交不错,大猫猫。严格意义上来说,他不是大话西游的策划,进入网易前,我想他的身份多半是一个资深玩家。他以前做什么的也不记得了。不过我倒是很早听过这个人,似乎混迹过sina的游民部落和后来的mop。他的朋友圈子里的人见过不少,salala、commando还有后来加入网易的ali等等,大多是做游戏媒体的人。
丁磊很喜欢泡酒吧,而公司附近就有许多。他带我去各个酒吧转,介绍一些他认为有特色的吧,和各式各样的朋友与我认识。我想那些朋友于他也只是点头之交,跟我也不会有啥关系,往往记不住名字。他喜欢的吧都很喧闹,比如公司对面的wineflower,去的很多。
我不喜欢太吵的地方,不明白为什么有人喜欢。据说是为了放松一下紧张的神经?或是找个宣泄的场所?可我不觉得自己有什么放松和发泄的需要。从来没觉得什么叫紧张,什么叫压力,什么叫累。平常写写程序挺有乐趣的,写累了,睡觉是最好的放松。我也不喜欢用酒精把自己灌的神智不清,思考是人最重要的能力,脑子烧坏了可不太好玩。
不过有时候老丁也专门约些朋友聊天,当然不能去那些需要对着耳边大喊的场所。这就需要找个安静之处喝点红酒。有一次,我们学来了杀人的游戏,一伙聪明的人在一起,玩的特别带劲。后来的几年,我都很喜欢这个游戏,并且自行扩展了诸多规则,几乎每周玩一次,直到腻味。
喝酒的时候,丁最放的开,像一个大孩子。当然他也喜欢在我这样比他小上七八岁的同事面前摆出老成的样子,讲一些道理。但总的来说很随意,他有些别人没有的优点,也有点不至于让人讨厌的缺点。他是个普通人,一个好人。
肖海彤曾经跟我提过一次,能不能以后上班也打一下卡,因为公司需要整顿一下风纪。其实,我在北京上班时都很守时的。不过这次,我想了下说,能不能少点约束。胖肖几乎没有考虑就回答,公司得有个规章,但一两个人的例外倒没太大问题,而且对于自律的人,的确也不需要约束。所以我再也没有打过卡。
昨天提到网游客户端对内存占用量控制的问题。我们定的最低配置要求64M内存(实际上,最终放宽到了96M)。最占用内存的是那些角色动画。因为希望有好的效果,我决定让所有图片都使用alpha通道。这可以让精灵的轮廓和背景融合在一起,没有锯齿。现在这几乎是2d游戏的标准配置。但那时,由于硬件限制,采用的游戏并不多。
实现的困难在于处理速度以及内存消耗,尤其是内存。假设一个人物的单帧图片为64*128像素大小,采用高彩模式带8bit的alpha通道,那么这一帧图就会消耗掉641283=2.5K内存。若是有8个朝向,做行走的动作,一组动作8帧。那么合计的图片量就达到了1.5M。这还仅仅是一个人物的一组动作而已。
网络游戏中,由于玩家的个性化需求,以及内容的丰富,我们需要数以百倍的数据量。用64M内存储存下这些数据,简直是天方夜谭。
我的解决方案是设计了一种可以把解压过程推迟到渲染时再进行的压缩数据格式。原理很简单,RLE行程压缩算法而已。只是让数据结构组织的更适合实时解压。甚至比不压缩的图象数据处理的更快(因为总的数据量减少,降低了内存总线带宽的需求)。图象也采用了8bit调色盘技术,对于alpha通道则只保存轮廓线的少量部分。
即使《大话西游》的后继维护人员意识不到,我自己倒是觉得早期的这些精打细算,在内存占用和CPU处理速度上的平衡估量,为日后的资料片连续推出铺平了技术道路。策划们肆无忌惮的向资料片里添加素材时,client不至于膨胀的过快。我们的最低硬件配置要求可以随着玩家的硬件水平提高,需要控制的只是不要增长的太快就行了。《大话西游》一直可以在低配置的机器上流畅运行(包括同一机器上多开客户端,多重登陆,针对这些,我也花了些工夫优化),是它可以顺利推广的一个原因。
游戏之作会用这么久,是我编写之时没有想到的,而道理很快就想通了。大多数人都有一种习惯,只要工具还能用,就会一直将就下去。项目开发中,需要做的事情永远比完成了的事情要多,那么只要老的东西还能用,就无心去改进它了。
明白这个道理后,让我以后的工作都特别谨慎。因为写的每一行代码,做的每一个决策,都可以一直被用下去,除非自己想重新来过。指望有人改进它们,是不切实际的想法,即使你在log中标上todo写的明明白白也不例外。
那个时候,大家还在用vss做代码管理。我没怎么用,因为我不太相信有人会来和我一起来共写一块代码。所以我一直自行维护那块相对独立的engine部分。稳定了就送去古越那里让他使用。稳定的接口很重要,不至于让大家疲于奔命的重构代码。直到后来做大话2时,我才和大家一起移到cvs下,一起维护。
那时我对内存的锱铢必较甚至反映到对美术的抱怨上。例如,当时游戏里有四种女娲的形象,其实是用的同一套模型和动作渲染出来的。只是四种颜色,美术人员在渲染时换了四种光源而已。我看到后,抱怨着为什么这样浪费,其实engine已经提供了调色盘更换技术,可以方便的用程序做到同样的效果。
最终并没有执意要求换掉这四色女娲。因为我在和大猫猫聊这件事时,自己明白了一个道理。当时他并没有立刻理解我的想法。如果他都没有马上明白,那么,解释给众多人听将是一个浩大的工程。当多人合作做一个项目时,应该为每个参与人员保留最简单的要求和规范。因为一旦项目人多,沟通成本远大于技术成本。一切复杂的手段都是不切实际的。如果真的想按我的想法去做的话,也应该由我自己来写一个额外的程序去自动化处理美术提供的冗余数据(这个案例中,四色女娲共同拥有的模型就是冗余数据),而不是增加制作规范的复杂度(要求美术人员额外去调调色盘,并输出成指定格式,再交给client开发人员调用)。
那个时候,游戏的server比client更晚进入轨道。记得随口问过写server的同事(忘记是谁了)的进度。4月底的时候,他们还在弄一些相当基础的模块,内存分配之类的,让人有点担心。更晚一点,我参加过一次他们server组的讨论会,讨论服务器的架构。那个时候,我对server开发没什么概念,也没什么兴趣。只是觉得白板上圈圈和连线过于花哨,不觉得有太大意义。最终dingdang的加入拍板说,就用单进程单服务器结构好了,这是后话(几个月以后的事情),而且我也记不太清细节了。
micro挺喜欢让我参加他们的各种讨论会议。这倒不是我特别主动要求,因为开始的几个月,游戏项目不足以引起我的兴趣。
策划的会议参加过一次,乱糟糟的,大家商量游戏里的战斗模式。即时制起先就被我给否决掉了,因为我更喜欢回合制的RPG。说起即时战斗模式,我只说engine不支持,并摆出大堆理由。其实支持也不是太难,但是我就是不喜欢。而正好当时石器时代正处在上升期,听说已经为华义赚入大量钞票,足够让丁磊流口水的。石器是一个典型的受玩家欢迎的回合制网游,正面典型在前,大家也不怀疑它的潜在用户数量。
剩下的问题是,做一个怎样形式的回合战斗系统。似乎大家都倾向于做的特别一点,比如黄华,当时的另一个策划,提出来要做成在战斗场景上移来移去有方位感的形式。我和大猫猫比较反对,我认为,徒劳增加一些表现力,而不增加对应的游戏系统是没有什么意义的。当时黄华找不到一个合适的游戏系统来支持这种玩法,最后也就作罢。月心是一帮策划的头儿,很沉稳,慢条斯理的,不跟大家吵。他主持了那次策划会议,但没有结论。这可能是我参加的唯一一次《大话西游》的策划讨论会。最终,游戏的战斗系统就是现在这个样子了。
其实回合制的游戏也可以做的丰富多彩,形式多变。我想说,起初大话的策划们也想过很多,只是最终没有实施而已。有很多因素:项目进度、技术因素、硬件限制、等等一些我知道和我不知道的原因。
比较遗憾的是,这么多年,包括我们公司自己的开发团队在内的许多国内开发组,制作回合制网游时,都不敢越雷池一步。在根本形式上少有创新,是让人很可惜的一件事。也许我当年能多点兴趣,支持一些有趣的想法,并做出技术上的支持,在没有定型的网络游戏市场上,会出现别样的回合制战斗形式来。谁知道呢?很多事情也不是一个人可以改变的。
甚至在开发的前两个月,我还参加了一次美术的审核会议。起因是我在调试地图加载模块时,指出了一处场景中的图象错误:有两个建筑的影子方向不一致。其实也不是什么大不了的问题,玩家多半不会在意。micro决定让我和大家一起统一审一下做好的图。我不是美术人员,也不会跟人争论美术风格应该是怎样,哪里做的不好。但是,一些诸如影子这样的小毛病挑了不少。建筑的力学结构,墙壁上的花纹,哪些植物不应该长在一起之类的。后来觉得这些其实都不太所谓,追究的太多对项目也没多少益处。之后也没再干了,美术的队伍越来越专业和成熟,也勿须我这样的外行插嘴。
早期的那帮同事都混的挺熟。micro也定期组织大家聚餐唱K,我一点不会唱歌,就知道跟人摇骰子。美术部的刘琪周云他们都是爱玩的主,我虽然自己不会晚上主动出去娱乐场所玩,但也不反感有大帮认识的人一起闹腾。哦,古越倒是顾家的好男人,每次我们出去玩,他都不去,要按时回家。这代表了网易游戏开发团队中截然不同的两种性格。我想,一直以来,网易游戏的程序和美术部门都没能完全融合到一起,除了后来的部分行政划分的原因,还缘于最早的这种性格差异。
日子过的挺快,甚至都没觉得项目有什么进展,就这么过了。除了我自己做的那块东西还比较满意,我想我对项目没有信心,当时谁有信心?
那些日子(七)
01年的夏天到来的时候,《大话西游》跨过了一个里程碑。古越发了一个内部的demo,没有网络功能,只是一个主角在两个场景间转悠。一个长安城,一个化生寺。回想起来,整个demo就是被逼出来的,没什么太大意义。老板说,要有一个demo,那么就有了。
我的场景管理模块完成了,角色精灵的显示完成了,其实要做的工作只是粘合一下,没什么实质的东西。这种demo更像是无数国内开发小组忽悠投资用的玩意,秀几个人物,来两个场景转悠一下。只要美术做的足够漂亮,就足够可以蒙过那些不玩游戏的投资人了。这样的demo多如牛毛,相互之间不同的是,图象上能表现出来的技术含量高低:2d的还是3d的,有多少特效,画面刷新率多少等等。其实离游戏还远着呢。图象表现上的技术,是游戏开发中最简单的技术了。倒不是技术含量低,而是一旦有人克服了技术点后,都是成熟的玩意。接口简单易用,也容易独立的更新换代。从工程角度上讲,可以正交分解的模块都是简单的东西。
不过话说回来,在上个世纪,国内就连这些简单的部分也做不好。随便发行个(单机)游戏,不在底层出点bug就可归为上成佳作了。多少好的游戏就毁在引擎的不稳定上。离开一个稳定的引擎支持,就不要奢谈游戏性的调整。妄图在一个不稳定的引擎基础上设计出一个好的游戏出来,那是空中楼阁。绝对不存在一个游戏,单单只是程序有太多bug,而游戏设计却非常棒的。程序这块做坏了,不仅仅影响玩家的感觉,同样影响策划的工作。等到《梦幻西游》出现在这个故事中,我会展开来谈谈这些。
对于这个demo,不光是在游戏部门内展示,为网易工作的大多数人都见过了。既然,这个demo根本不应算是这个游戏项目的里程碑,自然也没有收集到多少有价值的意见。许多人只是表示,如果护城河里的水可以动就好了,岸边的柳树应该随风摇摆一下……是啊,谁不想更生动一些呢?
就在那几天,游戏开发团队全部搬离了市中心,迁入处于城郊的天河工业园。今天,那一带热闹多了,甚至有了四星酒店,高档商品楼,满街的饭馆。科韵路那条小街也被改造成有中央隔离带的主干道,只是当年,我第一次到工业园区的时候,只觉得:荒凉。
没人知道我今天在哪里,明天去何方。如果我不在工业园,那么就在36楼;不在36楼就在工业园。如果我在家里办公而不去任何一间办公室报道,恐怕没人会知道。只是我从没这么做过。
只到半年之后,工作越来越忙,接连两周,我每天都赶去工业园。到了第三周再回去36楼的办公室时,发现抽屉里已不是我的物件了。旁边的同事对我说,“以为你不来了呢,现在有人坐这儿了。你的柜子在储藏室里。”。我在储藏室没找到我的东西。那使我遗失了许多私人物品,一些信件,笔记,相片之类的。有点怅然若失。但不久就想开了。人活在这个世界,没有什么不可以失去的。即使记忆、纵然生命,百年后,尘归尘、土归土。
建华路25号2楼,1500平敞开的几大间屋子。网易游戏部新进驻的时候,只坐了一半(一个大开间)。装修很别致,据说是丁磊从硅谷学来的风格。铺着地毯,大家都穿拖鞋,甚至打赤脚。天花上没有吊顶。楼上是住家,粗大的下水管道只是用彩色的塑料胶布缠了一下。偶尔能听到抽水马桶的冲水声,大家笑称,都是肥水呢。
另外空着的三间大房间,很久很久以后摆上办公桌。一间里放了张乒乓球桌,晚饭后,大家排着队打球。据说古越的老爸是乒乓球教练,曾经发明了一种碟形球拍,有专利的。服务器的主程ten是乒乓好手,我水平一般,陪他们练练球而已。另一间里吊了一个沙袋,有人在里面拳打脚踢。累了,就去一间有电视的小休息室,在ps铁拳上继续。
给我们搞卫生和做饭的阿姨有两个,一个胖胖的,我们管她叫胖阿姨;另一个瘦瘦的胡阿姨。阿姨挺牛的,不讲卫生或是浪费粮食会被教育的。她们不算正式员工,但绝对是游戏部门的元老。
刚到新地方的时候,大家都很兴奋。第一天音响开的很大,震的屋子乱颤。而写服务器的ten是个极需要安静的人,有点噪音就干不下去活。最终,立下了规矩,大家一律带耳机,上下班都不准用音箱。呵呵,我配的机器是个例外,有一对音箱。只是我没有听歌的习惯,从来不开它们。其实环境嘈杂或是安静,我都无所谓,估计是耳朵对声音不敏感,也怪不得我五音不全,不爱唱歌了:)。其实大多数程序员还是需要一个安静的环境吧。
micro有一间小的办公室,他是游戏部门的头儿,也是《大话西游》的项目经理兼产品经理。办公室里有六张桌子。我不记得还坐了谁,应该不只micro一人,但也没有坐满。他有时候出来转转,问些问题。我很奇怪项目经理到底应该做些啥,制定每个阶段的目标吗?但我看到的都是些形式。什么时候完成什么全系在负责的那个程序身上(单从程序角度上来看)。做的人慢点,进度就慢了点,快一点,那么进度就快了点。旁人影响不了什么。项目经理在后面嚷嚷,快点快点,加班加班,似乎起不到什么作用。写程序不是记件的活儿,多干一个小时就能达成完成度一分的。
很大程度上,我所能看见的micro的工作都是在招人。他向我征询意见,问我对某某的看法,我直言不讳。
我曾经诧异一个网游(天龙)能憋这么久才出来,等我自己做时,今天回首过去三年,不也一样吗?
萝卜是之后大话2后期的产品经理,到如今已经是游戏部门的领导了。他是那个时候入职网易的。挺偶然,他弟弟在游戏部门做QC,他过来看看,觉得不错,就留了下来。第一份工作是做大话的界面设计,偏美术一些,离策划较远。萝卜是游戏部门公认的好人,好脾气。听他聊过他的过去工作经历:自己卖过电脑,做过三星显示器的地区总代。最终赔了钱后又只为学点东西,在家小店面帮人用photoshop做平面设计,被人剥削了还乐呵呵的满不在乎。曾经四处游玩,只因到了一处,碰见一拨人吃完晚饭在街上踢毽子,一起玩的开心,就跑去他们公司干了半年……一个随性,谦虚,豁达的人。
还有一人(这里隐去名字,因为要谈点人家的糗事),不拘小节。有天白天我在写程序,旁边传来鼾声,四处寻觅不见。突然身边站起一美女,婉婉而去。原来我们的办公桌的侧隔板和窗台边留有半米距离,刚好能放下一睡袋。平时打地铺,外面看不到,无损形象。估计是夜里工作的晚了,此人白天怀抱女友入睡,一直睡着,mm才离开。我就这么记住了这个新来的策划。
他成天的在公司,夏天里没回家洗澡。可想而之,这日子久了,周围的人哪堪忍受。后来此人离职,阿姨拿着火钳夹出工位下的拖鞋扔掉,根本无人敢碰。
ten是个极爱干净的人,每每跟我说起,都捂着鼻子。只要是策划开会需要程序参加,他都勒令某人回家先洗了澡再来。:D
好在我是个百无禁忌的人,跟谁都相处的很好,啥毛病都能忍。倒是没觉得太多不是。
天气最为炎热的那几天,我跟果子在弄client更新的模块。我设计了一种数据包的格式,其实并不复杂,只是把零碎的数据文件连起来而已。关键在于,我们希望日后的更新可以尽量的不影响旧的数据。因为我们已经预料到以后client会频繁的更新。更新包的数据下载,网络带宽是一部分制约因素,而下载更新包后,怎么合并到原有数据文件中也是一个会影响用户观感的问题。
如果让玩家只是简单的把下载的更新数据包解开,然后重新打包进硬盘上的旧数据包中,很可能这个过程会随着client的迅速膨胀而变的异常漫长。
所以我优先考虑的是,如何追加新的数据进数据包,而尽量不影响旧数据在硬盘上的物理位置。其次,就是帮助玩家节省硬盘,而不能每次都把新数据追加在老的数据包之后。
这块东西最后是我和果子合作完成的,我设计了数据包的数据结构和更新数据包的规则和方法,他制定了patch包的规范,并编写了代码。
我已然意识到用html来实现界面的诸多问题了。比如显而易见的内存消耗,IE控件吃掉了大量的内存。不象我们自己的引擎可以控制内存中的图象让他们压缩存放,浏览器放置那些图象素材时一定是平坦的扔在内存中的,也无法做动态加载。
我依旧住在市中心,每天公交车收班后才回家。住在那一带的同事拼辆taxi回家,走对路的话,是28块,虽然有点远,但路上随便的聊聊就到了。四人一车,我、郭斌和刘国斌。还有一人,此人对日后的网易游戏部举足轻重。Dingdang,从肖海彤的办公室也搬到了工业园。
Dingdang具体哪天加入的游戏开发组我已经记不清了。因为他做的是服务器那块,我不太关心。大约是在《大话西游》项目中后期吧,他说,服务器这边进度太慢,就过来了。他以前玩过mud挺有兴趣。但是其工作主要还是在底层。
大话的服务器最早是搭建在mudOS上的,一个开源的东东,用在各种文字mud上。做文字mud通常还会用一个中间层,叫做mudlib。早年传说中的方舟子一帮人等做《侠客行》,就是指做了一套mudlib,被后人用在各种中文文字mud上。听说大话的开发人员也自己做了套mudlib(听说而已,micro似乎跟我提过他们没用侠客行的代码,太久远的事情不想证实了),不过我对使用mudOS却不以为然。什么年代的东西啊,都21世纪了,还在用。也就那么点代码,就不能放弃掉自己写一个吗?而且原本为几十个人同时游戏设计的框架,用在这么多人同时在线的网游上合适么?
网易的同事们完全扔掉mudOS这根拐杖是到大话3的事情了。主要还是因为太多逻辑代码用LPC(mudOS内置的一种类C的脚本语言)实现。大家一点点的改造,先是将文本通讯协议改成对数据流量更节约一些的二进制方式,为特殊的需求添加一些代码(例如定时数据持久化),再做一些底层的优化,把select的网络模型改为epoll,等等。直到全部更替。这些工作持续了4,5年。
一开始,当然做不了这么许多。大家还是主要在完成游戏的进度。dingdang坐我的旁边,中间靠走道的拐角处。桌子上没什么东西,上班时就带一个笔记本,在那里敲敲打打。
也偶有喧闹的时候,那是古越的client和ten以及dingdang联合调试。我没关心技术细节,只是从他们的对话中感觉有无数的bug改不完。有点忧虑,但无能为力。从一开始就没有参加到这块的逻辑中去,我只能好好做我那块东西。
记得当时client和server都有严重的内存泄露问题。client这边我想了很多方法帮古越定位。server那dingdang也在想办法。我们讨论过这个问题,渐渐的就谈到了内存管理器。dingdang说他实现了一个伙伴(Buddy)算法的内存分配器,主要是想减少一些内存碎片。自己写的内存管理器也可以有效的侦测到内存泄露的发源地。另外希望以合理的内存布局,让一些bug引起的内存越界访问时,减少服务器崩溃的几率。我在这方面是完美主义者,觉得根本就不应该允许bug的存在,但是dingdang显得很无奈。绕开这个有争议的话题,我们还谈了许多。只是现在都不记得了。
client这边的分工倒是慢慢的很明确了。古越在配合服务器组实现client对应的逻辑。我来做底层,几乎不用搭理游戏是什么。比如大话西游那么丰富的场景和人物角色,开发期间只看过两三个,都是用来调试engine用的。果子做了一部分跟图形无关的client底层,主要是网络包的分发处理。现在的眼光来看,设计的并不好,采用了多线程结构徒增了一些复杂度。如果追究原因的话,我想是因为当时我们client没有一个好的软件架构人员统筹安排,基本上都是各个人想怎么做就怎么做造成的。
UI部分的呈现是郭斌负责,而跟IE接口的地方则是果子和另一个程序黄东海在做。说起后面这个人,也是游戏圈混迹多年的老人了。本来是做3dengine的,不知怎么就来到的网易。来之前我听过一些圈内的朋友说他脾气不是很好,比如老是敲着桌子抱怨美术没按他的思路去做。不过来到网易后可能没有啥担纲挑粱的工作,也见不出他的脾气。他只工作了一个月就离开了,那个月神龙见首不见尾,突然就出现在工位上,而后有几天见不着人。悄然辞职(或者就没正式入职)后又回家去做3d,几年后还有一面之缘,暂且不表了。
网易当时的web聊天室做的不错,丁磊特别得意。记得他曾对他的朋友们吹嘘,我们的聊天室做的是中国技术最好的,一台机器可以支持4000人同时在线。这块东西是李鑫的作品,参照IRC协议实现的。client部分用的HTML,server用C++完成。
李鑫在我刚进网易时就有人介绍给我认识。介绍人是freemind,我读大学时就认识的好朋友。多年的网友。我想freemind这个网名还会有许多人有印象吧:)(前几天有读者来信说,让我怎么也要提一下freemind,说早年游戏圈里这么有名的人怎么能忽略掉。哈哈,我不会忘记这位老朋友的,有机会以后再写一次)他和李鑫曾是《电脑报》的同事,一起做过《电脑报》的多媒体光盘。在没有互联网的年代,那可是样好东西。
项目就这样由许多人分头做着,一天天临近死亡线。
话说那段日子,还有另外一些事情。给我的记忆比开发大话要深刻许多。
Nokia在广州开一个什么会议,庞鑫和安宁来到广州。我们少不了要聚一下。庞鑫给我看了他在Nokia9100上做一个伪3d的模拟空战游戏,非常刺激。让我想起了天惑。据说游戏让nokia的家伙们看傻了眼,原来这机器机能这么强啊。嘿嘿,安宁跟我说,他们hack了9100的系统,用官方的sdk自然是做不出这效果来的。
丁磊说想请大家吃饭,让我先订了个房间,带大家先去坐着。主人没到,大家都不敢点菜。好在我们有的是话题聊。
这时候手机响了,我一看,是丁老大的。庞鑫在一旁嘟噜着,早着呢,那家伙刚出门。接起来,老丁在里面大声的说,“我已经出门了,马上就到”。又等了大约半小时,手机铃声再次响起。还没等我接呢,庞鑫再次插了一句,“他在停车呢,当大老板的就这样。”“你们再等等,我停好车就上来”,听到这句,大家都笑了。
这是2001年7月中旬的事情。不是我特地记下了这个日子,是因为第2天,我们在我家旁边的小山酒吧庆祝北京申奥成功。安宁喝了许多,我也是。大家特别的高兴,街上满是欢腾。2008,好遥远啊,等奥运真的在北京召开的那一天,大家会是怎样的境遇呢?
过了几个月,庞鑫和安宁来到了广州,还有徐创(逆火的另一创始人)。丁说,我们可以开始做3d游戏了。这是天下2的开始。虽然那个项目的头几年,完全没有想到会重新以《天下》来命名,但我想庞鑫等的到来是网易开始在3d领域尝试的第一步。比官方记载的《天下贰》的开发历史早上许多。
在网络游戏还没有盖过单机游戏的风头之前,大家都认为网络游戏只是电脑游戏的一个小分支。制作、销售的流程也还停留在旧的思维上。
我们都觉得,费劲心力做了这么一套东西出来后,应该先收玩家一些费用。简单说,也就是卖客户端了。7月里,《金庸群侠传online》上市,卖出了10元的低价。这个游戏吸引了不少玩家,玩家后期的开销远远不只10RMB这么一点。运营商其实也不在乎client的这点收入,网络游戏也不惧怕客户端盗版,巴不得多点人进来玩呢。
不过,一开始没人去做免费的客户端。我想有几个原因。其一是固定思维所限,其二是当时网络带宽不够,拨号上网依旧是主流。还是得依靠光盘发行。既然需要走传统的销售渠道,那么也总得设个价格。
九月里,游戏大概有个雏形出来。虽然bug百出,但勉强算是做全了名义上的那些功能。我试玩了一下,非常的不满意。我想,这样的产品是不能拿出去的。大家做的实在是太仓促了,感觉只是为了完成那些功能而去完成,不能算是一个游戏。太多细节没有去推敲。
当然,我没有细玩,不知道到底有些什么玩点。单从client的操作感来说,已经是很差了。一个很明显的问题就是,一旦玩家在场景中跑动,屏幕抖的要命。不停下来,根本看不清屏幕上那些玩家的名字。我仔细研究了这个问题,判断是屏幕卷动速度不均匀导致的,便着手改进。
简单的说,就是不要把主角固定在屏幕中间。无论他以怎样的速度移动,都只用一像素每帧的速率顺势卷动镜头,同时严格限制帧速率。当玩家向一个方向连续移动速度过快时,就加大镜头移动速度拉回来。这里的要点:不要让镜头速度切换的频率过高。
真正调的舒适还是颇费了一番工夫的。我在家折腾了两晚,写了个小demo拿给大家看。其实我心里还有另一番用意。当程序人员围坐在我的座位周围时,我迟疑了一下还是说了出来,“不如我们把客户端重新写一遍吧”。
大家继续加班,几个程序的工作压力都很大。而我负责的引擎部分已经没什么事情可以做了。就自己一个人窝在那想,如果重新设计,这个client应该是怎样做更好。也随手搭点代码试试。
在client压盘前,我们做了一个内部测试。这次测试直接招募了一批玩家长驻公司。很多外地来的玩家,干脆就在公司的空位上打起了地铺。这批可爱的玩家每天给我们提意见,并对游戏的bug做出了极大的包容。他们中的很多人,日后都成了网易的员工。QC部门也是那个时候成立的。
说是QC部门,但不完全是做质量控制方面的活。因为当时的项目,解决bug的速度远远低于发现bug的速度。想来QC部门不需要做太多事情,就足够开发部门的人忙了。所以我们也找出一些活儿分给他们的人做。
比如果子就写了个简单的编辑器,让QC的头儿侯燕去校对并修正在photoshop里标记出来的人物行走区域。这个编辑器做的太匆忙,以至于后来只有侯燕一个人会摆弄。我也做了另一个编辑器,向场景上放置一些动画装饰,以及为每个场景设定背景音乐。随便拎了个有兴趣弄这个的人(似乎那小子网名叫游子,呵呵,其实我还是有记性的)过来就让人家做。
其实后期这些事情多半是我没事找事搞出来的,不在原来计划内。凑着画面,感觉画面不够生动,就想点办法弥补。做美术的头儿周云倒是挺配合我的工作,帮着做了许多动画。天宫中的云彩、花果山的瀑布、长安城那护城河中的流水……
到了压盘前的那几天,古越忙着改bug,果子在做一个mp3播放器。果子的最后这个任务来的很突然,原本client的声音播放程序是我老早就写好了的,关于音频压缩格式解压,直接调用的windows自带的codec。没想到后期测试的时候发现,windows95的系统并没有默认安装mp3的codec。临时改动engine来不及了。果子说可以找到一个开源的东西弄弄。但那时client代码比较乱,不好向里面插新代码。我出了个馊点子,不如单独写一个mp3播放器。当client切换场景时,向这个播放器发送消息切换背景音乐。反正别再大动client的代码就好了。(这个临时拼凑起来的播放器也有很多问题,在游戏发行后,我们就把它换掉了,是安宁写的mp3解码器,一直用了好多年)
我也没闲着,开始审核client的各种数据资源。
最后一周,做不完的事情啊。我坐在自己的位置上,不停的干活。用最快的速度写着一些自动化,半自动化的工具。觉得可以了,无论白天黑夜,在办公室里随便找出一个貌似闲着的活人,把东西交给他,说,现在需要你帮点忙,应如何如何去做,有问题回头来找我。
每当项目最紧张的时候,我都觉得自己的精力一下子变的特别旺盛,虽然疲惫,但是不会发困,脑子也转的很快。记得那最后的一天深夜,突然发现有一张地图的阻挡层信息做的不对,需要修改。可第二天上午就要把client打包送去压盘,等不到负责人第二天过来上班。
接下来制作了几段视频的播放程序:制作人员名单、合作方智冠的动画logo,还有大话西游的片头动画。是的,最早的大话西游是有一小段片头动画的,因为我们觉得,只要是电脑游戏,都必须要有片头动画。当时周云做好了交给我的时候,我还觉得它过于简陋了点。
天终于亮了,熬了三天还是四天,我已经分不清了。给早上来报道的同事交代了哪些数据应该打包,头也不回的上了出租车。几乎在对司机交代目的地的那句话说出口时,睡着了。
今天,我找出了当年那天做的那段程序,是几个月后把代码和数据提取出来重新制作的一个独立包,没有代码,只有执行文件。里面用的背景音乐是网易购买了使用权的大话西游电影主题曲《一生所爱》,我很喜欢。里面还有早期同事的集体照,参与制作的所有人的名单,只要为这个游戏工作过哪怕几天的人都列了进去。那是很多回忆。只可惜刚刚试了一下,程序在xp上似乎不能运行:(就不给大家推荐了。
我抽屉里刚好有样东西感觉挺有纪念意义:《大话西游》客户端的母盘:),让他签上了名字。有点可惜的是,公司的数码相机碰巧没电,始终没能没留个影。
当时我想,什么游戏发行后都免不了盗版,何况以后激活帐号另需要cd-key。让别人盗还不如让兄弟盗。我在广州有个好兄弟,tarcy(很奇怪他怎么用个女性英文名做网名),做盗版行当的。这个家伙研究软件加解密出身,水平挺高,但在软件破解的圈子外估计没什么人知道。不过他有个小弟名气很大。dingboy,不知道有人有印象否?呵呵,不知google之,我就不介绍了。
我把盘交给tarcy让他压几千片卖。那个年代走这个渠道比正规的卖场要有效率的多,几天就在全国铺开了。
接下来的一年多,单机游戏迅速没落,加上互联网带宽的快速发展。tarcy他们没过多久就洗手不做盗版盘。我想有一技之长的聪明人不会被埋没,他们改行写网游外挂,又赚了不少钱,差点投资自己做游戏。此乃后话,放到以后再写吧。
那些日子(十)
《传奇》就是在这个背景下横空出世的。
陈大年是我大学时期结交的网友,跟我一般年纪,我们时常在icq上聊天。在我还在读书的时候,他已经辍学闯荡江湖了。他也是个程序员,似乎写delphi的,我早年也玩这个。我们那时候共同的爱好是想做游戏。在我还没毕业的时候,他给我看过他的公司做的网站,记得叫归谷,主推一只可爱的漫画狗。小狗叫stammy还是stame我是记不太清了,投资方有中华网的背景。
大年告诉我他们转做网游的时候,我丝毫不奇怪,游戏这么火,做网络的不做游戏才是奇怪呢。(我想,即使在那个所谓网游起步的时候,看的到网络游戏有赚钱潜力的公司根本算不上有什么独到的眼光,看不出来的没眼光才是)他和他哥哥一起做的公司,据说去韩国找了个小公司谈了个游戏,这个游戏就叫做《传奇》。
网易的《大话西游》定在了10月底上市(一开始大家都没有公测,也就是给大家免费试玩,这个概念),《传奇》也是这个日子左右,稍早一些。
我没有想到《传奇》会在商业上如此的成功,正如陈大年一开始也不会想到《大话西游》的未来。我把《传奇》看作是跟《千年》、《红月》这般的韩国游戏一样,一个普通的产品,没有什么特别之处。
有如网易找到了智冠,盛大也找了上海的育碧做合作发行商。一切都是按惯例循规蹈矩的进行着。《大话西游》正式发行的前几天,大年在icq上几次兴奋的告诉我,他们的游戏达到了多少多少人在线了。当然也试探我们的情况,我没有怎么说,因为实在是不好意思讲。
《大话西游》发布前,在广州的天河电脑城前办了一个热闹的活动。星爷过来捧场,智冠的老总致辞,好象还有一个广东什么地方的一个牙膏厂老板,不知怎么也混在里面,有些商业上的联系吧。星爷的到来,牙膏厂的老板就被大家起哄哄走了,每人愿意听他讲话,弄了个没趣。不过更没趣的时,不知道公司什么地方没有打点好,活动搞了一半,就有人(城管?)过来拆台。
就是这样,一切就在匆匆忙忙中拉开了帷幕。
正式上线前的那天,几乎所有开发人员都一夜未眠。尤其是程序,还在临时修补着bug。玩家在论坛上唾骂着可恶的cd-key制度。不管有没有cd-key的人都在拼命的下载更新包。当时还没有利用BT技术分担带宽。公司几乎把所有的带宽都增援过来用了。
client最后还有许多已知bug没有解决。dingdang说留到最后吧,到开服务器前再让大家下载最新的client执行文件。就这样,已经更新完补丁的玩家,甚至连client都不能启动。
拖延了几个小时后,古越说,好了。client主程序放出。只隔了几分钟,便有玩家涌入。
ten已经累的不行了,他写了一个监控脚本,当监视到服务器挂掉后,会自动重启服务器。然后就回家睡觉去了,之后是dingdang,慢慢的,一个个都走了。我是比较能熬的,不知为啥,选择留在了公司。其实也没太多事情好做,只是刷刷论坛。
没过多久,玩家就集体掉线了。服务器崩溃。不久,自动重启。又过了大约10分钟,再次崩溃。就这样一直循环下去。服务器这边的负责人全都回家了,完全无能为力。我实在看不下去了,也只好打车回家做鸵鸟。
接下来的几天,无论是client还是server的程序都不停的加班。问题一个个的解决,又一个个的蹦出新bug来。服务器稍稍稳定一点后,客户端又不断的报错。其中跟我有关的,是一个声音播放模块的问题,又是多线程惹的祸。
我们的这第一版client,居然使用了多达4条线程,地图处理、逻辑处理、网络处理、声音处理,大家又没有多少多线程编程的经验,一不小心就犯错误。好在底层的问题查起来容易,解决起来也快。可逻辑层面上的东西就没那么容易搞定了,古越压力很大,总看他在那里调程序,仿佛永远也做不完。
另外,用户的浏览器IE的版本千奇百怪,小版本的区别很多。不知道为什么,我们的UI(借助IE实现的那个)在不同的机器上就是表现不一致,总会蹦出一些脚本出错的对话框。多年之后,我再回忆,可能也不完全是IE的毛病,跟我们写的不规范和用的不规范有关。
浏览器出错倒也不是开发期没测试出来,QC人员很耐心的安装了各种版本的windows系统测试机,只是我们自己测试出错的概率要小很多。可是,一旦玩家量巨大,小概率事件就频频发生了。这种问题又实在不好重现,基本上是不了了之。
丁磊也需要一个解释。对于不写程序的他,太多的bug导致了程序不稳定这个理由很难说服他。后来我想了个简洁的说法统一口径:IE兼容性问题,导致了我们client的在不同的机器上容易出错。其实我们做程序的都明白这是个推卸责任的说法。只是太多的开发人员已经背负了很大的压力,我想选择IE做UI的这套方案是我提出来的,把责任推到IE上,我能帮大家多承担一些骂名。
结果令人哭笑不得的是,老丁倒是很轻易的接受了这个说法,就没怎么责怪开发团队,也没有怪我这个“罪魁祸首”。只是接下来的这么多年,时不时的拿这个段子奚落我一下:“看吧,别看我不懂程序,当时你提出来用IE的时候我就觉得不好,不过还是随你们去做了。让你犯过错才知道改”。(._.!)
今天写这些故事,除了给自己做一个总结外,也是想让更多的开发人员可以借鉴到其中的经验和教训。对于“嵌入IE”这个貌似重大的技术决策失误,如果只看到表面,就和我写这些的初衷南辕北辙了。这里有必要展开来写一下。
如同前面在第五篇中所写的那样,选择嵌入IE做游戏的UI呈现,仅仅是从节省人力着想。因为我们当时只有3人做client开发,后来大话2使用的底层的UI模块并没有开始写。如果4月里动手写UI模块,只会拖累整体的项目进展。而选择使用IE,可以额外的增加人手,不至于影响已有的3人的开发工作。
从结果上看,大话的clientbug非常严重,导致程序时常崩溃的,是本身程序的不稳定,而不是UI系统。UI仅仅是弹出类似“脚本运行时错误”这样的讨厌的对话框而已,玩家只是部分功能不能正常使用,而不会完全不能玩游戏。而且理论上还可以指导玩家安装最新版的IE来解决。所谓木桶短板原理,大话西游一的短板可能在服务器,可能在玩法设计,数值设定,可能在客户端逻辑,根本轮不到UI这个模块。
话说回来,IE也不是如此的不堪,我们只是用IE显示几条文件,几张图片,并使用html和css做一些格式排版而已。根本不会去使用网络部分的功能。所谓IE的安全补丁升级,大多和这部分无关。如果IE真的连这点事情都做不好,微软就别混了。现在使用IE内核做界面的软件比比皆是,也是一支潮流。IE报告脚本出错,多半是在我们自己的开发人员身上。在经验不足,项目进度压力大的日子里,写这些javascipt会犯的错误,留下的bug,若是改成原生的代码写到C++程序中,同样会出现,后果更严重。
所以,不要局限于表象,轻易得出结论:怎样的选择是对的,怎样的选择是错的。
11月里,几乎没我多少事。因为大家的工作都是修改bug,而我的那块基本没有什么问题,很稳定。经过一年的开发,我想我至少在C++和设计模式方面领悟了不少东西。开始回头审视整个项目。其实游戏的client,并非一个庞大的工程。只要合理的设计,应该能做的很稳定。
开始一个人闷头写程序。
丁磊看到了我做的这个小玩具后,第一个反应是,“能不能压缩客互端,做一个图形聊天室?”。我想他是对《大话西游》的现状失去信心了。当时人心也比较散,开始有人离开。有些开发人员甚至私下里谈论过大家散伙。
但是我不甘心。这是我毕业后全心投入的第一个项目,我不想看着它失败。不想我那些朋友们,那些bbs上相互调侃的网友们,觉得云风只会口上说说,真做起项目来不过如此。我想的是,其实做这么一个“简单的”软件,只要好好规划一下,不至于程序上弄的如此的不稳定。比如UI的问题,当时只是项目进度和人手上的不足使用的一个权益之计。而现在,我已经全部构思好该怎么实现了。
按丁的想法,把《大话西游》保留所有的图象资源,而将程序改成一个图形聊天室,体积缩小到100M以下是绝对不现实的。要知道,如果我们不做那些我绞尽脑汁的方法去压缩,客户端根本塞不进一张600M的光盘中。程序可以再写的短小精悍一些,但图象资源却小不了了。
我想的是,重新推翻再来一次。
做大话西游的2.0版是dingdang拍板下的决定。倒不用我去主张,程序员的心是共通的。dingdang怎么说服丁磊的我不清楚,但我想不算太困难。网易只有两条路可以走:解散游戏开发团队或是重新再来一次。
是的,一开始,我们想做的只是2.0版,以此作为对老版本的升级,而不是后来的《大话西游II》。我那么的想重新来过,不是因为喜欢这个游戏,而仅仅出于一个自私的理由:要证明自己可以把这件事情做好。
那时的网易可以说相当的不顺利。九月里,公司被nasdaq停牌。最后一天甚至跌到了五十多美分。在美国,公司面临着诉讼,因为最近的一期财报被认为掺假。历史上,惹上这种官司最终停牌的公司都没有好下场。
自主研发的游戏上市后,问题多多,反应平平。最高同时在线人数只有5000多,还是头几天创下的。
而国内几款韩国游戏却做的风风火火,在这个背景下,丁磊带着大猫猫去韩国寻找可以代理的游戏。丁磊在韩国的那几天,我明显感到他承受的压力。有一晚,我在写程序,他在icq上蹦出来,没头没脑的说了句,“失眠了,睡不着”。
我还记得大猫猫归来那天,从韩国抱回了大包小包的流氓兔,我抢到了两个。对了,公仔上有个小标签,赫然印着“MadeinChina”:)。
不过正题是之后我们一起看的三个韩国新出的游戏。都是3d的,丁磊赞不绝口。一个叫做“RagnarokOnline”,一个叫做“MU”,还有一个是“PristonTale”。让我也发表一下意见。我说,单看画面的技术含量和操作感,我最喜欢MU,其次RO不错。丁没说什么,不久,我们代理了PristonTale,给他起了个中文的名字——“精灵”。
那些日子(十一)
《大话西游》一边运营着,大家改着bug;另一边,2.0版开始筹备了。
后来聊了什么完全不记得,我只是知道,以后的工作由dingdang来主持了。这次长谈,颇有些战事不利、临阵易帅的味道。
之后,渐渐的,micro没有什么事情可以做了。几年前,他就在办移民加拿大的事情,需要定期坐移民监。没多久,micro回了加拿大。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一定要嵌入一个脚本语言,以应付连绵不绝的后期需求变化,以及用于描述多变的界面。
甚至我考虑过java,但网上尚没有成熟开源的javaVM,我甚至想自己实现一个。这个想法来至于前几年一个叫做《吸血鬼》的3d游戏,如果你解开它的数据包,就会发现大量的javaclass文件。
还有javascript,因为被IE的事情弄出些恐惧症来,大家也不支持。
kyo给我推荐了python,说是跟java齐名的语言。还有ruby等等。那时我们对这些日后名声大振的动态语言,都没有什么特别的感觉。一视同仁的去评估。因为嵌入式脚本,在国内同行中没有什么先例可供参考(早期大多数开发团队都是自己开发脚本语言),只能是靠自己的感觉来办。
詹东开始研究lua的CAPI,以及怎样嵌入,这个工作很顺利,得益于lua的简洁。kyo琢磨如何把lua和我写的底层桥接起来。当他最终用纯粹的lua代码驱动起第一个游戏内的界面对话框,我们都很高兴。ruiheng则作力于lua的控制台调试器,他是unix背景的程序员,做出来的那个东西更像gdb,挺好用。哦,我做了个控制台的模块,支持彩色的信息输出。前一版的惨痛经历告诉我,一定要有一个好用的调试控制台。
说起bug,《大话西游一》的教训是非常惨痛的。最让我心痛的是,明明知道bug在那里,就是不知道该怎么改。往往改动一处,会引发新的问题。我想找到一种方法可以杜绝这种现象。所以在新版本里,引入了一种新的机制来解决。那就是给引擎加入录象功能。
如果不懂技术的读者看到这里还不明白,请联想暴雪游戏中的对战录象,星际和魔兽都支持的。
ps.这一点是我以后做项目必须要求的基础设施。不支持录象功能的引擎是不合格的。我曾几次三番的要求服务器也加入录象功能(这比client更简单)但都没能如愿,直到我自己开发服务器。也有3d项目抱怨3dengine的复杂度而不能加入录象,其实没有什么道理。录象仅仅是记录操作,能不能加进去只跟engine处理外部输入的设计有关,跟图象呈现方式没有联系。
简单表述录象对调试的重要性,可以这样来解说。
即使我们拥有交互式单步跟踪的调试手段,当错误发生时,我们也只能向后运行程序,观察计算机内部的状态变化。而对之前发生的事情,仅仅只得一个内存快照而已。这是静态的信息,而变化的过程已经丢失。当然,内存快照已然非常有价值。比如在unix系统上,一个进程挂掉,可以生成一个内存快照文件,被称之为coredump。gdb这种调试工具则可以分析coredump,还原当时的现场,程序员可以根据现场情况进行分析。
录象的威力则更进一步,不仅可以轻易拿到错误现场的快照(只需要重新回放一次),还可以让时光倒流,让你看到之前发生了什么。因为只要设计合理,每次回放,内存里任何一个对象的地址空间都不会有变化。如果我们拿不准出错时的问题是由什么前导因素造成,只需要重新回放一次在更早的时机中断下来观察即可。
有了这么一样利器,我们遇到的每个bug几乎都可以在当天找到根源,并修正。当bug是单个的出现,并迅速一个个的解决时。比同时面临多个bug要轻松的多。每次解决问题也都是从根源入手,而不是简单的使用walkaround的方案。每解决一个bug当然不会引发新的问题了。
大话西游2.0的client非常稳定,以知的bug都已排除。那些日子,每天下班时我都可以这样骄傲的宣布。
那几个月,工作有条不紊,大家意气风发。我们甚至每天可以乘坐公交车回家。kyo没结婚前住的很远,和我有一小段同路,当他转车赶上末班地铁,基本上我已到家。而他的归途一半都没走完呢。我们不再需要加班到太晚。
詹东常住北京,只是需要交流的时候才来广州住几天。大家分工明确,甚至不需要每天在一起写程序。(我想,异地合作也是我们抛弃vss的一大原因)所以,初期的设计比后期的实现更为重要。设计的好了,甚至缺少沟通都能把项目做好,反之,再多人再好的沟通也没有用。
甚至我都在想,这不三个月就把活干完了吗?赶快把大话换下来吧。但是dingdang说,不急,还不到时候。
渐渐的,开始有旧人陆续离开,先是古越接着micro而去,然后是果子。
古越的离开有些无奈,我没有问,因为新的项目已经没有让他参于,我想离开是必然的吧。(后来回头看,他有网易不少股票,公司股价涨到那么高,我想即使从收益上权衡,在网易干的一年也值了。可能让他遗憾的是,没有一起参与大话的起死回生吧)
果子辞职,还是有些舍不得的。他是个挺有想法的人,动手能力也很强。当时说想回家休息一下。等到再来看望我们的时候,手上居然拿着车工教材。我是学机械的,很好奇他怎么干这个起来了。他说他买了个小车床,放在家里做些东西玩。果子是个军事迷,喜欢仿真枪械。当时下载了一张德国二战时期的GUN图纸,在家自己摆弄。那天,他还给我欣赏了他自己车的枪管,很精细,比我的手艺强多了:D。
时不时的总能收到一些他的消息,先是说他买了部polo,整天大街小巷的乱窜,一天能在市区开400公里,堪比出租车司机;而后说是开车时用笔记本不方便,自己设计制作了一个笔记本支架,固定在坐驾里。听起来过的挺开心。
几年后,我介绍大学室友去他和古越一起开的经营短信业务的公司里写程序,果子请我吃过一顿饭,之后就联系不多了。
我不喜欢照相,相片很少。不过找到一张那段日子留下来的。好象是果子买了个摄像头,我拿过去试试拍的一张。纪念一下:
那些日子(十二)
dingdang上任不久,我们开车去珠三角转了一圈。拜访深圳,珠海的许多公司。有点新公司成立、四处拜山头的意思。
丁磊和雷军私交不错,据说还经常私设赌局,赌各自产品能做到多少人在线。嗯,有些遥远的故事,记忆模糊,还是不加详述。我们一行人自然也去了金山。当时他们在做《天王本生》,买的LithTech的3dengine。赵青是开发团队的leader。我和赵青颇有些交情。
事情源于1998年,一帮梦想在互联网上联合开发RPG的小子,成天泡在irc频道里YY(也不完全是,我们还真做了不少东西)。其中,我是唯一的一名程序兼职小组网站制作。我们给开发小组定了个名字“风魂”。后来小组解散,为了纪念这段历史,我把这个名字延用在了后来那个引擎上。
今天为写这篇,还专门翻出了当年我们的策划Gary做的故事背景社定。更完整的版本在irc的聊天记录中,早已遗失。这个Gary半年后加盟珠海金山,担任《剑侠情缘2》的主策划。
99年的暑假,我去珠海拜访Gary,他介绍了剑侠情缘2的程序王炜、赵青,以及著名游戏音乐人罗晓音与我认识。还记得那天黄昏,我们几个人晚饭后步行来到海边,坐在草地上遥望对面的澳门。大家交流技术经验,畅谈着国产游戏的希望。王炜是个仙剑迷,把仙剑翻来覆去的研究了个透彻,还为此制作了专题个人网站;赵青则回忆着红警如何吸引着他进入游戏这一行。
2001年金山的食堂里,很多朋友围坐在一起。Gary和王炜已经离开,赵青平时话不多,但在老朋友面前依然健谈。还有许多新面孔。
网易和金山的这种友好关系一直延续了下去,之后,金山的同行也曾经率领大部队来广州回访交流经验。我们的程序员也曾有过合作(精灵的反外挂程序是由金山一名程序员常驻广州完成的)。再之后,赵青领着一队人,过来网易组建了新的方舟工作室,似乎也没太损坏公司之间的友谊。我们还保持着互访的传统,几年后,我个人就几次拜访过已迁往成都的罗晓音。
再往后,网游市场产品竞争激烈,对于一些影响到玩家群的公众事件的内幕,虽也有些耳闻。但那些就是市场营销方面的事情了,无损程序员之间的友谊,不提也罢。
在深圳,有很多游戏开发公司,如正在制作《百花物语》的联志软件,还有完成了《最初幻想》的万智源。在万智源所在的公寓前,一个大胖子迎接的我们,居然是陈重,那个曾在金字塔有过一面之缘的小子。我们寒碜了几句,感叹圈子之小。
99年第一次见风老总(施仁毅在icq上的网名)的时候,他请我吃饭,口若悬河的讲述他在《万王之王》中的势力。并一再强调网络游戏的美好前景。想必后来的《古龙群侠传online》也是蓄谋已久的了。
那天在深圳的gameone办公室,风老总不在,不过我见到了另一个老朋友郭伟。
见到郭老的时候,他给我演示了《古龙群侠传》,原来一直是他在做这款游戏的程序。效果很好,颇有暗黑破坏神的味道。我们很兴奋的讨论了一下关于光影效果的优化等。之后,dingdang私下跟他谈了很久,看起来早有接触,我想dingdang是想挖这个人。
最终他还是离开了网易。我问dingdang,知道郭老去哪了吗?是不是去徐波那里了。dingdang说,应该没有吧,他走的时候说不去的。公司里很多人很关心徐波他们离开后做的新产品,担心对梦幻西游造成竞争。我对很多同事说过,只要郭老不帮徐波写程序,我对他们新产品能否顺利完成表示怀疑。
郭伟后来还是跟徐波一起干了,现在他们的《梦想世界》的运营情况我不甚了解,这些已经是这两年的事情,另一段故事。
国内的网上支付体系那个时候很不健全,大多数网民还没有在网上消费的习惯。如何从直接用户那里收到钱,是经营者们日夜考虑的事情。网络游戏是第一步,原本希望借此推广网易一卡通,以此进一步的促进网民在网站上的消费。没想到游戏业务一开始很不顺利,大话西游过了头几天的5000人同时在线的高峰期后,停留在3000人的水平,半死不活了。
手机短信无疑是一种小额代收费的好途径。我想丁是瞅准了这一点,才全力进军短信业务的。并成立了无线事业部。
对于短信的赢利,丁显得很兴奋。有一次朋友一起喝酒时,丁拿着我的手机给他的朋友演示怎么订阅网易的天气预报,喜悦之情溢于言表。
我想这个道理,丁磊更明白。所以网易应该没有把这项业务发展壮大的远期计划。毕竟是为人做嫁衣,就算做好了能赚到钱,也被移动分去了一半;做坏了,风险是自己的。只是,钱来的很快,我想是超预期的,公司还是加大了无线事业部的投入,一直做下去,直到现在。
2002一开年,NTES在nasdaq上复牌。那天晚上,丁兴奋的请我去喝酒。等到美国股市开盘,迫不及待的用手机查了下,高兴的宣布,我们公司的股价又回到了1美圆以上。“看吧,我们又活过来了。第一天就比sinasohu的价格都高呢”。
我时常跟dingdang讨论游戏,比如研究游戏里玩家盘店的情况。我觉得系统做的不好,完全表达不出虚拟的经济系统。dingdang说玩法是继承于西游记的mud,其实那里面玩家盘店挺有趣的。不过mud毕竟同时在线玩家少,跟现在的网游决然不同。
由于制作client的缘故,我也试玩了正在重制的大话西游,始终找不到RPG的感觉。无论是战斗还是日常闲逛。向dingdang抱怨这些,我说,反正我现在闲着,如果日后做第二版,让我试试重新做游戏设计吧。dingdang挺高兴的答应了。然后我开始写策划案。
大话西游虽然玩的人不多,但是还是配备了相当数量的客服人员。丁磊希望可以在服务方面做好,弥补开发上的失误。首批招聘来的客服都是游戏玩家,他们以三班倒的方式在游戏里7*24小时的值班,并真心喜欢这个我眼中问题多多的游戏。
因为我在筹备写游戏的策划案,很可能还是以大话西游这个品牌推出,所以我跟这些忠实的游戏玩家交流。其中有一个人让我很感兴趣,他时常以徐宥箴为笔名在玩家论坛跟玩家辩论发帖,公司里大家直呼他的真名徐波或是更亲切一点叫他老徐。因为我在公司比较习惯叫他徐波,下面就这么称呼吧。
显然徐波玩过很多游戏,我也是。我们一起怀念sfc上的机器人大战,四狂神传说,浪漫沙加,风水回廊记等等许多。我那时对和我一样对单机游戏玩的多而杂的人挺感兴趣,因为可以交流的东西比较多。比较而言,网易当时的程序员喜欢玩游戏的人比例要少许多,许多人玩的话也是固定几款。还有一些人,谈起来都是mud长mud短,可我偏偏就不玩mud。
几天后,我找到dingdang说,徐波这个人对游戏挺有想法,不如不要让徐波做GM了,让他跟我一起做新游戏的策划吧。dingdang说他也对这个人挺有好感,就按我的意思办吧。
dingdang让我主持一次策划会议,把我跟他聊过的一些想法讲给大家听。并且听一下策划的意见。1月中旬的那次会议,到了许多策划,我们在大会议室里讨论。我没有做ppt,只用了块白板。前天夏的策划,也是大话西游的主策月心,依旧抱着他最喜爱的紫砂茶壶在下面静静的听,时不时泯一口茶。我对他的记忆不多,更多的是他离开公司后留下的几本策划案的打印稿。封面上敲着他的标志戳——“机密”,呵呵。
还有黄华(大话2开始的主策,以及日后游戏市场部的负责人),狂狮(后来天下二的策划之一),等等。徐波也在场。
会上谈了许多我对网络游戏的看法,主要是关于经济系统的。我觉得网络游戏既然是一个虚拟社会,必然存在经济系统。这个应该是我们设计的重点。然后说了一些我的观点,比如应该想办法紧缩虚拟货币的供应等等。许多东西放到今天是再普通不过的话题了,当时我想也有许多同事想到这些。这些应该是在制作网游一段日子后,制作人自然而然的想法。
我提了许多关于控制虚拟经济系统的具体观点,现在已经记不清了。记得好多人提出了反对意见,到今天几乎都没留下印象,但徐波的发言我是记的清的。因为只有他指出了我的一处逻辑错误。虽然无关整体框架,可印象深刻。因为徐波的敏锐,让我觉得这是个聪明人,而且也在考虑我正在考虑的这些问题。
做策划的那段小插曲没过多久就结束了。每天依旧有很多程序问题围绕在我的身边。最终我放弃了自己来写策划案的想法(或许根本就没有开始过?)。做一个自己设计的网游,一搁就是好几年。
之后,我便全力投入到大话西游2.0的client开发中。随着开发工作顺利的开展,游戏部也逐渐补充进新的血液,有美术,有策划,也有程序。头一年,我在36楼参加了一次应届毕业生招聘的活动,那一次我们是分组进行的。我负责的组里有两个人,让我最后在他们的简历上化了圈。一个是曾强,一个是许扬。
当这两人毕业正式入职时,进入了游戏部。小强被分派到《精灵》的筹备工作中去,打理那些服务器,再之后转入天下二。许扬则划归大话组,配合kyo做界面方面的开发。
大话西游二项目的早期就是这样,因为很顺利,异乎寻常的顺利,所以也显得平淡。
多年之后,个人总结大话西游二的成功,从我参于部分的角度,归纳为这么几点:
有完整的美术资源。这些从第一版遗留下来,不需改动就可以使用。这避免了美术方面的工作拖累程序的开发进度。
程序底层稳定,关键模块都已经完成,并通过了前一版的公众检验。少数底层的bug,经过大量的用户被动测试,都找了出来。我们在编写上层代码的时候非常放心。几乎不会出现bug出现位置难以判定的情况。
事先有技术上的合理规划,有了充分的准备才开始动手。并且期望值不高,有明确的目标:复制原有的功能。
有更强的技术力量支持。
漫长的测试期,并没有在制作基本完成后匆匆上市。
待到下次继续谈梦幻西游,我会说,它的成功是大话西游二的翻版,以上诸点都成立,且做的更加好。
那些日子(十三)
我记得麻雀当年陪我选手机;记得美术部的一群长发帅哥集体去剃光头;记得给乌鸦夫妻参谋买房子;甚至记得牙牙来报道的那一天情景……
记得一刀他们在公司地板上过夜;记得Mario半夜里陪着mm在办公室里看流星花园;记得我们大家常去的大排档;记得凌晨两点干完活,一起打车去石牌东吃烤蚝,萝卜还一个劲的说没有他们家乡的好……
我只是记下自己的历程,但我不只是为自己写。我也为大家写,尽可能帮一起共事过的大家留下过去快乐的点点滴滴。美好的记忆不是什么可耻的事情:),可耻的只是永远停留在回忆里的人,我想我们都不是这样的人。如果再有同行的朋友读过来,尽可以在留言中留下你的故事,或是提醒我一些被我遗漏的重大事件。
对于新加入网易的同事,据说有许多人是这个系列的读者,如果我写的能让迷茫的人看到一条模糊的路,那没有什么比这更能让我高兴的了。让我觉得在繁忙的工作之后,从每个晚上划出三个小时写这些很有价值。
网易之所以是一个好公司,正是因为不断的有同样信念的人聚集在一起。那些尚且不足的地方,需要大家一同努力。
以下是今天的正文:
说起国内自主研发的第一款商业上成功运营的MMORPG,不应该算给《大话西游2》。
2000年底,另一款网游悄然上线,并在2001年初成功收费,同时在线人数一度攀升到好几万,远超过当时失败的《大话西游》,它就是天晴数码的《幻灵游侠》。
2000年在北京鹰翔的时候,我经常给林广利推荐一些写程序的网友过去工作,林广利不懂程序,也时常让我帮忙和一些来应聘的程序员谈,算是面试了。姚晓光和他的哥们陈晨就是那个时候进入的鹰翔。
加上在大学最后一年辍学的小蓝,和我的一个老朋友彭乐,他们一起做《碧雪情天》。一个单机游戏,后来也制作了同名的网络版。
姚晓光喜欢用RAD的工具做开发,所以尤喜BCB。我那时维护了一个风魂的BCB版,但之后由于BCB的一些bug把我弄的痛苦不堪,就放弃维护了。姚晓光就是给我report那些BCB版风魂bug的人。
他和陈晨不久后离开鹰翔,我没有打听去了哪里。直到《幻灵游侠》上线,好奇的网上一问,他还真的在天晴。
《幻灵游侠》运营的情况我不甚了解,但是半年后我和姚重逢在林广利的办公室里聊天时。我意识到这款游戏还是很成功的。姚晓光说他后来一个月能拿到三万的月奖金,让我心里暗暗惊叹。倒不是羡慕,只是觉得,网络游戏还真的能赚钱哪。
《大话西游一》的最后那几个月,公司给大家发了一次奖金,算是犒劳辛苦了快一年的兄弟们。我领到奖金时,古越和果子都走了,micro还在,但没多少事做。那一次,似乎有几千块(或是一万?)的奖金。我总觉得我能拿这么多,是因为做client的人只剩下我一个。
两者一对比,足可见成功的项目与失败的项目之差别了。
不久以后,姚晓光和彭乐去了盛大制作《神迹》,小蓝来到了网易加入3d组(即以后的天下二),此是后话。
当《幻灵游侠》如火如荼之时,我们还在紧张制作这《大话西游2.0》。当时国内市场上还有几款更为火暴的游戏,其中首推《传奇》。几乎占据了大半壁江山。《石器时代》的后续产品《魔力宝贝》也崭露头角。我几乎觉得形势已定,根本没想过产品日后要在商业上超过这些,但我单纯的想把大话2.0做好。内心里,我把大话一的失败看成自己的一种耻辱。
前一次说了不少大话2项目的好话,现在可以谈谈一些不足了。
今天的眼光来看,大话二的client程序也存在许多的问题。尤其是在我经手的一些地方,如果能再一次重新设计,会做的更好一些,这个想法促成了后来与郭伟合作为《梦幻西游》重写client。
client对网络包的解析模块做的很生硬,这部分是由詹东设计的,被kyo抱怨了很久。因为他把解析数据流的底层接口放到了脚本层。甚至需要程序员去数字节数,一旦数错,逻辑就会出错。这种过于底层的接口暴露,放到今天来看是绝对不合格的。
服务器逻辑和客户端逻辑都需要维护一些对象和id的对应关系表。我们起初的一个疏忽,希望可以利用某种逻辑一致性,省略了中间的id转换过程,结果导致了后期无穷尽的麻烦。客户端的对象系统中,还包括许多界面元素和一些与服务器逻辑无关的对象,为了回避和服务器对象的id冲突,我们使用了许多极其丑陋的方法。
不过,也有一些灵机一动的有趣想法。有一天,有个美术(刘祺?)找到我,说能不能在聊天中插入一些包子符号?我想他们老是混mop,受了那些874、253的影响。这倒是一个新鲜玩意,我已不记得当时msn可不可以发表情符号聊天了,至少qq还没有加上,我们的popo也不可以。当时我立刻联想到的就是猫扑论坛里那些可爱的包子(不过我是不喜欢mop的那种感觉,从来没泡过)。我想了下说,让我试试吧。
关于插入图片,原本跟策划聊天时,有人想用传统的:):(这些。我表示反对,一则实现稍微麻烦,二则美术提供了几十个符号,以后维护这些转义符太烦琐。所以我自作主张的改成了简单的#加数字的形式。
这里另一个小插曲足以见得我们当时的仓促:第一批表情图片只有64个。据写服务器ten的经验,在以前的mud中,一旦用户拥有自己发送彩色文字的权利,总有玩家恶意去模拟系统公告来行骗。所以最好的方案是使用图片来标识频道。顺理成章的65号到73号表情就被频道图片占用了。
为了不让玩家可以输入这些频道图片,kyo用了个简单有效但野蛮的办法,在显示聊天信息时,严格过滤掉#65到#73,这也就是为什么网易游戏中一段游戏表情符号号码断层的原因。很傻,不是么?其实完全没有必要把玩家输入的表情符号与系统内部使用的图片混杂在一起。在UI上实现图文混排模块时,设计的稍微好一点,就可以回避这个问题。
这段代码写的太仓促了,也由于当时偏执的追求效率,一大堆词法分析和文字排版的代码拥挤在一起,留下不少隐患。后来大话2client许多bug都出在这里。是个深刻教训。无论是写程序还是设计,在经验不足的时候,还是要三思而后行。很久很久没有人愿意重写我那堆烂程序也是意料之中的事。实际工程中,几个人做的小项目,就不要指望自己犯下的错误会有后人来擦。我自己每次去改别人的bug时都郁闷的想吐血,自己不愿意做的事情,想必他人也不想去碰的。可见二进制复用还是满重要的,呵呵。接口清晰,出了问题换人重写即可。
莫小瞧这一点点东西,自己做过了才知道烦。后来许多人抄袭网易的产品,抄袭聊天这一块,却总也做不好。技术门槛虽然不高,也还是有那么一丁点。等到网易泡泡的项目需要加入图文混排的聊天框时,他们组专门拨了一个程序员专职写这样一个模块,弄了好久。
大话一的通讯管道是明文的,随便用一个截包工具拦下网络包,做一个简单的黑盒分析就能看的一清二楚。有玩家用MFC写了个简单的程序就可以模拟我们的游戏通讯。因为不需要显示图象,又不用处理一些复杂逻辑,所以可以做的很稳定,甚至允许同时开几个帐号同时游戏。
在和dingdang聊这事时,他无奈的说,现在风巢(大话的一个高等级区域)里几乎已经没有活人了。机器人玩家对游戏的危害性,从mud时代开始,大家就深有体会。我想,这个问题一定要想办法解决。
当时最火暴的游戏之一《金庸群侠传》也深受外挂困扰,一度外挂可以做到官方client做不到的事情,比如可以远距离和npc对话。我想那是因为服务器未做限制的缘故。这些距离校验以往都是在client做的,而非法client可以轻易直达目的。当时业内传闻,为《金庸群侠传》写外挂的人都有百万级的收入了,真是令人乍舌。
dingdang认为外挂问题很难解决,毕竟client在玩家手上,理论上无法阻止玩家分析通讯协议,并制作模拟程序。而server不可能分辨出究竟网络包是由怎样的程序发出。我们能做的只是把关键运算全部由服务器校验而已,让玩家做不出违反规则的事情。
我说,至少我们把通讯管道加密吧,别让人家那么容易的分析出来。要分析也得让他们分析我们的client程序本身(即做白盒分析),而不能仅仅靠截取网络包就够了(只做黑盒分析)。dingdang表示通讯加密可能会加大服务器的负担,目前的硬件不一定承担的起。况且开发日程比较紧,新增加一个模块需要额外的测试,我们承担不起降低服务器稳定性的风险。离大话新版内测上线的日子不到一周了,从项目管理者的角度看,dingdang是对的。我了解他,dingdang和kyo都是在技术上很保守的人,这其实是一大优点,我们用一个褒义词来形容,那就是稳重。这份稳重保证了大话二程序的稳定,以及它的持久发展。但也可能让我们失去了一些东西,历史不能假设,谁又说的清呢?
大话西游2.0ClosedBeta是在2002年5月1日对外开放的。我在一个古老的留言本上记录下了这一时刻。
看到当时自己的留言:
今天熬夜上传大话西游2.0ClosedBeta版中....明天就有人可以玩到我们这个新游戏了.自己感觉马马乎乎.还过得去.总算搞完了啊.
(90)云风|主页|(2002-04-3005:49:40)
仿佛回到了那一天。
我的加解密模块是两天前完成的,同时给dingdang讲解分析了cpu消耗,以及额外的内存占用情况。接口也设计的很简单。我想他很容易就被说服了,在最后两天全力把这些加入服务器。
上面这条留言是4月30日早上凌晨提交的,记得我那一夜我没有睡。同上一次大话西游一发布前夜一样,更多的是在打杂。检查各种数据是否完备。为了让压缩包更小一些。这次甚至又修改了动画的格式。
一个是在动画中插入控制信息,让动画的停顿可以直接用控制信息描述出来,而不用浪费资源去重复储存相同的帧。
另一点是将大面积的魔法光效做抽线处理,这样数据量就只有原来的二分之一。在渲染时,再把这些抽掉的线条用程序实时填补上。
做这些不仅是为了玩家的硬盘空间,减少下载的client的体积,更重要的还是想节省内存。以及提高运行时资料的加载速度。
这些工作也是在最后那几天做的。本以为大话二已足够顺利不需要赶在发行前熬夜了,没想到事都临头还是逃不过。不过已经比之前好的多了。至少我们是在5月1日的前一晚熬夜,而不是当晚。
等到五月一日前的那个晚上,dingdang终于把服务器那边的通讯加密全部搞定。我终于松了一口气,居然准时完成了任务。
那些日子(十四)
让网易在网络游戏上看到希望的是《精灵》。这是个从韩国代理来的游戏。当时我们也有可能去谈MU,即《奇迹》。为什么定了精灵而不是奇迹呢?我听到的不确切的说法是,奇迹要价太高。
现在看起来,今天几家大的网游运营公司真的是特点明显啊。代理奇迹的九城,几个产品都敢花大价钱下注,先是奇迹,而后是魔兽世界。我想它的成功也绝非偶然了。
在我的感觉里,从01年末开始,网易在各方面都是非常节省的。或许和丁磊的性格有关。也是这份节省,让公司在几家在nasdaq上市的中国网络公司中第一个起死回生。
《精灵》的市场部门放在了上海,办公室就设在人民广场边的高楼大厦中。西藏南路,楼下有家馆子叫作上海人家,味道不错。去上海出差时同事总是带我去吃。现在上海公司已经不在哪了,可能是因为人员增加,房租太贵吧。大猫猫就在《精灵》开始运营时,回了上海。
精灵的的技术支持部门以及机房设在广东。如果我没记错的话,机房租在佛山(ruiheng提醒我说是在东莞,哈,还是记错了),这也是因为机位便宜的缘故了。小强从学校毕业没多久,便被指派到这个项目里做远程系统维护。
据说,当时公司为了节省开支,全部按普通家用PC的标准采购了一大堆的兼容机做服务器。4000块一台的标准,甚至配的是IDE硬盘。可害苦了值守机房的同事(经ruiheng提醒,是charles,我没打过交道,没印象),时刻都有硬盘坏掉。守在机房,几天不能回家。后来精灵停止运营,这些机器淘汰下来,全部搬回办公室给大家办公用机更新换代。我做梦幻那会儿的机器就是精灵服务器呢,换下来的机器则交给策划写文档。策划再将淘汰的机器送去客服组监控游戏中的聊天频道,或是扔到QC部门做低端测试机。
任在服役的一台服务器,被我借了块空间存放个人主页了,一直到今天还在工作着。
精灵的收费标准是破天荒的五毛一小时。那个年代,大家都还摸不清玩家的心理底线和承受能力。居然这个价位游戏也依然火暴,真的是个奇迹。要知道当时玩的人最多的传奇要便宜很多,而且精灵相比传奇还缺少一个重要功能:PK。
精灵大约是在6,7月开始收费的,没过多久就收回了成本。记看起来,小强也拿了不少奖金,刚毕业就能这样,自然是很高兴的。
从我的角度事后去看精灵,它更大的作用是推广开了网易一卡通,让网易的点卡顺利进入了各个渠道,为日后大话西游二的顺利收费铺平了道路。
可惜,精灵的火暴没持续了几个月。毁掉这个游戏的居然不是游戏的设计,不是游戏的稳定性,而是外挂。
开发难度小,自然费用也就下来了。
还有几件事情可以看出精灵的程序之不成熟。
我们曾经向韩国公司反馈过client不能在windows98下运行,他们说,他们没有考虑过支持windows98,因为在2002年,韩国人几乎全部升级到windows2000了。我们很无奈,当时windows98在国内的网吧还是主流操作系统。从我一个程序员的角度来看这个问题,兼容windows98系统并不是什么困难的事情。可以在windows2000下跑的游戏,如果在98下会出错,多半是一些bug导致的,而非用了什么专有api。(例外也是有的,有些因为win98早期版的一些bug,用户又不愿意更新系统。此类问题我在调试大话的兼容性时遇到过,解决起来也很快)
起初精灵的Client在没有声卡的机器上会挂掉。我用idapro分析了一下,发现他们没检查声卡设备的初始化结果。Ali(精灵当时的产品经理)说,他找几个朋友搞一下就好了。我明白他的意思,他做游侠网,一定认识许多做破解汉化的朋友。对着二进制的程序做点这种小改动那是小菜一碟。其实甚至用不着他去欠朋友人情,我自己来弄也就是一天的事情。只是既然我们跟韩国公司是合作关系,他们有源代码,做起来也是快的很。可这件事,还是ali去找朋友搞定的。或许是沟通上的麻烦?
我们在精灵运营之前,派人去了趟韩国做技术上的交接。dingdang带着ruiheng和kyo去的。大约是2002年5月的事。当时世界杯正准备召开,kyo回来时还送了个一个世界杯的钥匙扣。本来我也要去的,因为筹备大话2.0的beta测试很忙,一直没能请假回家办护照。所以在韩国看见了什么,就都是ruiheng和kyo给我转述的了。
到2002年9月时,韩国方面按我们的要求做中秋活动,不小心弄出点bug。我们报告后,对方怎么也改不好。韩方的理由就是,正在做国庆活动呢,老代码已经找不回来了:(。代码管理之混乱,可见一斑。经过我们的强烈要求,他们才上了vss。
btw,精灵的服务器也是架在windows上的,不是很稳定。
kyo在韩国时跟我爆料,说韩国的网络条件很好呀,他们公司每台机器都有一个外部的固定ip。可他们的网络安全防范意识简直是太差了,在这些直接暴露给外网的机器上,居然开着文件共享。公司里也没有装防火墙。
精灵的外挂问题从软件设计角度看就是无法解决的。当然,如果精灵不那么设计(把绝大多数的运算放在客户端本地计算),它可能也做不到流畅的游戏感觉。
公司想了很多办法也无能为力,至少我是绝望的。韩国方面派了几个韩国人常驻我们公司,除了跟外国人交流一下让我觉得挺新鲜外,我觉得在外挂这件事上,他们起不到什么作用。倒是韩国朋友给我的印象还不错,相处很融洽。他们笑广东人吃不了辣的,我就带他们去吃正宗的川菜;我带他们去陈家祠转,介绍木门上的三国演义的雕刻。说起三国,他们也是知道的。大家英语都很一般,有时候说不清楚,写写汉字居然也有些效果。听说韩国人上学时要学千字文,还是识得许多汉字的。
最后他们留下来的一个计算机研究生,编程水平一般。就是很好强。有一次需要写一个统计精灵的数据库中数据的程序,他实现出来效率非常低。ruiheng说不能这么慢的(跑一遍要几个小时),他硬是重写了一遍(减少到几分钟),声称不能更快了。我们都没再好意思去驳他的面子。
至此之后,精灵开始走下坡路。丁磊曾经从雷军那里借了个人来,和金山联合开发反外挂软件。其实就是一个软件加壳监控系统。检测用户有没有非法修改内存。我对这种旁门坐道的玩意不以为然,实际上也的确没有什么效果了。
再过了两年,我带了三个应届毕业生,想利用精灵的图片资源,重新实现一个《精灵》。(主要目的是想让新人练练手,重现精灵的辉煌倒没怎么想过)。之后,因为公司加大了天下二的投入,把这几个人全部编入天下组。重制《精灵》的项目也就取消,就这样不了了之。
从2001年底开始,随着短信收入的增加,丁磊在网易的地位就逐渐稳固了。董事会没有了那么多的反对声音。虽然游戏在2002年的开发尚未赢利,但老丁看准了这条道。dingdang接手游戏部后,人员开始扩张。
程序方面,先有庞鑫和安宁的加入,打算开始制作3d项目。原本跟庞鑫一起过来的还有徐创,但因为一些原因,没多久就离开了。徐创跟丁磊起言语冲突的那个晚上我也在场,记忆尤新。不过扫兴的事情不想重提,谁是谁非也很难公断。倒最后剩庞鑫和安宁留下。
接下来几个月,庞鑫因为感情的问题,每个月都回一次北京。他笑称,赚的钱都贡献给中国民航了。他的前女友最终跟别人结婚我是知道的,甚至我还借了他几千块凑钱买结婚大礼。庞鑫在广州干的并不快乐,他走的也很突然。谁也没告诉,毫无征兆的连着两个月没来上班。安宁说他回了趟北京后就没再来广州。甚至在广州公司附近租的房子都没有退租,屋子里留下了新买的电器。
之后,我和庞鑫失去了联系。听说他回去后自己在做手机游戏,弄了个英文网站,把游戏卖给外国人。据说这种收游戏注册费的形式,做的还挺不错,口袋挺滋润的。
安宁留了下来安心做项目。3d项目一直没定下来做什么,技术方案也不确定。早先想用Torque3d,这个引擎一度在国内很有名气,因为它只售100美元。我甚至看到3d组的人搭了一个像模像样的一个场景出来,还倒入了许多西游中的人物模型,看起来就可以做个大话的3d版了。其间,曾为大话西游一写过几行代码的黄东海回来看过大家一次,对公司3d项目如火如荼的展开感叹不已。
可毕竟Torque这个东西是个七拼八凑起来的玩具,真应了我反复说的那句话:便宜没好货。(免费开源的不列入其中:))
接下来,曾在鹰翔工作的小蓝也来了网易。不知道dingdang怎么和他搭上的线,反正不是我介绍认识的。dingdang告诉我小蓝会过来时,我还楞了一下。那天我给小蓝接风,和dingdang一起陪他在36楼楼下的蓝与白快餐店喝粥。在广州的第一年,我最喜欢这家快餐店。就在我家对面,方便实惠,味道还不错。我恨不得把这家店写入游戏的感谢名单中。
小蓝在网易也没干多久,他的离开我没去问。我想他分到3d项目里,可能有些漫无目标的感觉。这个项目做了太久,实际上比我们当初能想象的都久。直到今天,也就是那个被称为“天下二”的游戏项目,尚未完成。
或许抄袭是条捷径,但不甘心抄袭呢?都说当局者迷,旁观者清,可又有几个当局者真的是笨蛋?
每个成功都有其偶然性,也有其必然性。不可忽略两者其一。我们需要一些坚持,守着有一定概率发生的事情真的发生。
那些日子(十五)
大话西游2.0在02年五一封闭内测的时候,已经更名为大话二。因为丁觉得,反正是重新做的,就应该以新名字重新来推广。
由于先前的刘铁等几个策划离开,月心被调离大话组,转到3d项目中(这也一定程度的导致了这个3d项目最终被命名为天下二)。Micro在他回加拿大前的一个月,开始重新为游戏策划招兵买马。
萝卜从大话西游的界面设计师改行做游戏策划,黄华被提升为大话西游的主策划。而丁丁(日后的《梦幻西游》产品经理)就是这个时候入职网易的。这是2002年四月间的事情。
按我讲述这个故事的前后习惯,所有提到的人均用我平时在公司对他们的称呼。那么就用丁丁代这么个人了(有人也把丁磊称作丁丁,不过不是我的习惯)。公司里也有人称他为老妖,那是他的一个网名吧。
丁丁总是带着一副彩色的眼镜,年龄看起来比实际上的小许多。在当时的游戏开发团队里,只有dingdang比他年长一点。他从学校里出来的早,所以工作经历比其他人要多许多。据说早年卖过花,早早的起来去花市里,把花架在自行车上运出去卖,收入还不错;后来手工焊过线路板,做数控机床的驱动电源,赚了不少钱……也算是久经江湖了吧。
那一年末他又离开网易,但不久以后再次回来,一直做到现在,已经是游戏部门的领导了。
丁丁来的那一晚,Micro叫我一起去吃饭,说要给新朋友接风。饭局不太隆重,我们就在工业园中的明记大排档吃的。天气开始有点热了,老板说屋子里有空调,大家就坐进去。我跟丁丁之前没有见过面,但是一聊起来发现还有点缘分。他是《古龙群侠传》的数值策划,那么就是郭伟的老同事了。我们立刻就有了共同话题。
大话二的client放出后,作为引擎开发者,我已经没太多事情。我给自己找了些事情做,那就是想方设法减少外挂和加速器对游戏的危害。
今天看起来很简单的道理,当时我并不是一开始就意识到的(虽然着手处理加速器的工作更早就开始做了)。最早是tarcy给我讲的一件事,让我意识到这个问题的严重性。
tarcy在九城测试《奇迹》时就开始为这个游戏写外挂了。我一开始很奇怪,不是说《奇迹》的战斗逻辑都放在服务器计算的吗?那么就不再会出现《精灵》那种修改client就能做到无敌天下的问题。使用外挂又有什么特别的好处呢?tarcy说他们写的外挂很好用,可以让火球提高最高八倍的攻击力。一开始我不相信,他一解释就明白了。原来只是提高的发火球的频率而已。(btw,tarcy的奇迹外挂后来据说达到六位数的注册用户,还发展了海外代理,赚了个钵满盆盈:D如果单单是个人想赚点钱,这比为网游写程序要来的容易多了)
最开始,我去解决加速器引起的问题,只是想阻止玩家用不合法的手段在虚拟场景中移动的比正常速度快,也就是避免玩家以非法的频率发送移动指令。玩家做到这一点,甚至不需要修改client程序。他只需要用一个小软件修改操作系统的时钟逻辑频率即可,这样的软件比比皆是,被称为变速齿轮。
这个方法很多游戏开发团队都想到了。
吃完饭去他们办公室打星际。之后我们没交流太多技术问题,唯一印象深刻的一个就是谈这个加速器检测的方案。
这个方案从理论上看起来没错,但实际应用中,经常会发生误判。原因有二,一是准确对时非常困难,尤其在对时过程中client系统和通讯网络不稳定,会极大的影响后面的判定;第二是,PC机的各钟主板,甚至运行的操作系统,都会导致时钟精度的不一致。
所以在用时,这个方案还是有许多细节需要改进的。大话西游二的测试期间,不完善的检测手段,冤枉过不少可怜的玩家。kyo的保守作风在这个问题上发挥了作用,原本我认为理论上完全可以判定出是否使用了加速器,但kyo一再坚持,即使检测到,也需要累积多次再做处理,这样大大减少了误判对玩家造成的影响。
2002年的夏天,我基本脱离了《大话西游二》的开发。因为我总是自己找事情做,所以公司就没有指派给我任何任务。这期间读了几本书,影响了我好几年。
第一本书是著名的C++D&E:《C++语言的设计和演化》,我读了两遍,读的很快,但很透彻。这本书让我又一次重新认识了C++。
第二本则是侯捷写的《STL源码剖析》,我并没有读完。而是在实体书出版前,kyo介绍我读了侯捷放出了前四章电子版。因为这本书,我把STL的源代码几乎浏览了一遍。发现template这个东西居然如此奇妙,从此陷入在把玩template的智力游戏中,一晃就是三年多。
02年被我自己称为C++年,C++的有关经典著作不断的被翻译,程序员杂志也在推波助澜。各大开发论坛的C++版块都异常火爆。我在csdn注册了一个帐号,没发多少帖子,仅有的一些全在C++版里了。我想我读了那几年翻译出版的所有的关于C++的书,也为自己重新发现C++这样一把无所不能的开发利刃而沾沾自喜。
ps.通过google翻出当年的一个论战贴,讨论多重继承和组合模式的。我想很多同学在学习C++时都有这类经历:)。
那些日子,不断的把自己学到的领悟到的新东西教给同事,我想,许多人都受到了感染。对于许多年轻的程序员,都会为找到一样可以证明自己比别人更聪明的玩具而兴奋不已。
在最为狂热时,我把C++的字样印上了个人名片。和今天相比,当时的心境真是判若两人。
之后,便翻新重写“风魂”。不过鉴于glow开发时发现的一些问题,如编译速度过于迟缓、调试不便等,这个新版的“风魂”就不那么C++了。也正庆幸这一点,这个版本可以一直用下去并被人持续维护,成为了后来《梦幻西游》以及其它几个网易产品的底层代码,甚至还用在了《天下二》的GUI模块中。
直到2006年,我开始对C++开发项目进行反思。等到2007年写下C的回归这篇颇有争议的blog时,我很能理解那些反对声音,如同理解当年的自己。
看到大话西游二顺利的发展,每天都能看到在线人数有新的突破,不多久就超过三万人在线了。我心里长舒了一口气,总算搞定了。
庞鑫离开后不久的一天,dingdang把几个开发人员叫到了会议室。分别发给大家了一份文件。说是网易的期权。
简单的理解,就是当持有一支股票的期权,若它日后涨了,你可以以当初的价格买入。如果你在行使期权的当天再在公开市场上将股票卖出,其中的差价就是立刻能入手的获利了。而如果股价跌了,你可以放弃期权,也没有什么损失。在美国这样成熟的金融市场上,期权这种金融工具本身,甚至都可以被炒来炒去。
上市公司常常以颁发期权这种方式奖励员工,并鼓励员工努力工作,一同把公司发展的更好。一旦公司股价上涨,大家能有很大的收益。
直到2004年,网易每年都为所有正式员工颁发期权。无论是前台接待,还是仅入职几天的程序员,人人皆有。那一天,我手上的文件上写着70美分一股的价格,五年的有效期。等到2006年底即将过期时,我将这些期权全部行使,变成股票存放时,股价已经翻了一百多倍。
记得当时我很犹豫,迟迟不肯落笔。因为我觉得自己的事情都做完了,心里盘算着离开。
ps.闲扯几句关于网易期权的事情吧。虽然公司里不让讨论大家各自期权多少和分配方案,但具体的情况,多少我还是有所耳闻的。当初那几年,我绝口不跟人谈这个,一是理解公司在这方面保密的苦心,二也是的确不太关心,否则也不至于每笔期权都到最后快过期的关头才着急行使,弄成每年都要做一次的大事。甚至感觉有些麻烦。
如今,公司已经不是人人发期权了,股价也涨到很高,我想再难有几十上百倍的收益。那些高收益的期权文件今天已经几乎都过了有效期限。有人在涨到20倍、30倍时迫不及待的兑现,有人像我这样留到了最后,最终收益和当初期权数量反而关系不大。从金融角度看,当时的期权多少的差别其价值的绝对差距就不高。今天来谈这些,已经不太所谓了。
其实游戏部门的期权一开始总体不算多。这点我曾和其他部门一个头(已经离开网易)聊天时,他帮我打抱不平过。他说游戏部门为公司做出了很大的贡献,但在为自己部门谋福利这点上,dingdang争取的太少。由于游戏部门人多,机构大,一平摊就没多少了。往往部门人一多,普遍级别就不高(官少),分期权的时候,级别又占了很大权重。他劝我去申请提一个级别,省得比别的部门干活少的多的人拿的还少。
利益分配真是个难题啊,共患难容易,共富贵难。
后来几年,让dingdang殚精竭虑的问题之一,就有如何奖励这个越来越大的团队中的每个成员。这绝不是一个写个程序,套个公式,就能完成的任务。它需要更多的智慧。
那些日子(十六)
《大话西游二》是在2002年8月15日正式收费的。而就在之前几天,02年8月7日,网易宣布股票发行以来,第一次实现赢利。这次赢利,净利润仅3.8万人民币,我在网上看到这条消息时,感觉太搞笑了。根据财报,一个季度的运营费用有2719万,结果恰恰就赚了不到4万。这个数字若不是精心做出来的,而仅仅是一个巧合的话,我觉得那实在是太幸运了。
不过不管怎么说,从五月里开始,一切都朝着好的方向在发展。
但我并未在广州亲身经历这几个特殊的时刻。
2004年以前,公司的劳动合同等管理并不严格。合同放在我的抽屉里,一放就是两三年,中间有人问过一次。我拖着没签,就再也没有人过问了。我想公司为了早日实现赢利,在运营成本上扣得很细。能不招人的岗位就不招人。尤其是行政财务等部门,长年都只有那么几个人在办公。有点什么事情都不敢轻易打搅那几个mm。早年,我的一些报销单能压上半年才处理完到帐。弄到后来,除了出差的飞机票和酒店住宿这些大额的做一下报销单外,小额日常的报销都是不想去做的。
研发部门中,直接开发人员之外的后勤管理人也出乎寻常的少。上百人的游戏部,就一个前台Candy忙内忙外,剩下的全是研发人员。后来调了张金姐过来,仍旧不堪重负。最后几乎所有的文职人员,都需要做一些内勤的工作,像做韩语翻译的金香兰,我们的法务顾问等等。
游戏部门人还远不如今天这样多的那时,办公室坐不满。泡泡组便搬到工业园一起办公。黄晓东(不久后离开,后去微软为移动做飞信)当时任泡泡的项目经理,我们也时常聊天。泡泡组的加入,也加大了许多后勤工作上的压力。
我想若不是靠大家的自律,这么大的团队无法自我组织起来,完成这样一个项目。
七月,眼见着大话二顺利收费已成定局,技术问题基本上全部克服了。dingdang在考虑的是收费后要不要删档的问题;丁磊考虑的是收费维持一小时三毛的标准、还是提高到四毛一小时。很多人反对涨价,但丁自有他在精灵上五毛一小时的成功案例,固执的坚持要涨一毛钱。事实证明他的对的,除了那时候残留下来的极少数大话一玩家在网上闹闹外,大部分用户接受了这个价格。另一方面是因为几个月后增加的一个不起眼的小设计,点卡交易系统的成功。这段故事放在下回讲述。
一个周末,我去电脑城买了块移动硬盘。用它备份了一些代码,几篇业余写的策划稿,收集的一些资料,把家里的计算机送还给公司。这块硬盘质量不好,不久就坏掉了,那些文件从此消失,心痛了好久。
走的那个周末,下着瓢泼大雨。雨水一上午就积到了脚踝。我没太多行李,主要是书。可随身几大箱,也很难步行出院子。租的那个房子在一条很深的小巷子里,终于有个好心的出租车司机愿意进去接我出来。那个巷子真的是很窄,车进去都无地方掉头,倒着开出去的。
就这样突然的决定离开广州,显得有些冲动了。其实当时我已经在武汉供房,为父母买一套新房子,让他们过的好一些,恐怕是所有儿女的心愿。
02年初的房价还不高,只是人们看到的都是相对价格,而非绝对数字。从福利分房的年代过来,当时单位里的房子把产权卖给职工,不过几百块一平米。而福利房周边的商品房价已经是高达一千多了,不是很好卖。一开始我看上一处两百多平的复式,单价要1200。计算了一下,可以承担的起。不久又觉得小区设计的不太好,而旁边打算新开的楼盘感觉更好(还只是楼花,地基还没打,只有模型),但是单价要两千多了。这在那一片已是天价。父亲有些犹豫,因为按我的计划,贷款五年买下,每个月需要还贷5600。实在是贵了点。单靠父母微薄的工资,无论如何供不起的。而他们辛苦一辈子,有了钱都接济亲友,又没有丝毫积蓄。
我当时坚信,只有最好最有价值的东西,才有足够的升值空间。而且既然要买房给父母,就一定要最好的。在我的坚持下,买下了这套房子。同时也背上了六位数的债务。
有时候,我也怀疑自己是不是乐观的过了头。虽然明知道身上有几十万的负债,银行里的存款也都拿出去付了价格不菲的首期,但对于即将失去固定收入还是满不在乎。似乎自己从来没有思前想后的去考虑以后可能会面临的诸多困难。
不过,为了打消父母的担心,我还是在八月去了北京。毕竟在家混日子是赚不来钱的。
北京有家新开的网络游戏公司叫作侠客行。他们头儿董晓阳是我在网上认识的朋友。据说他在美国读书时,曾经和方舟子一帮人等开发过名为侠客行的mud。这次回国创业,就是想把这款mud图形化。
他在用“风魂”写client,想让我帮他做点东西。
当时我在心里认为,已经可以给网易公司一个交代了。大话这个项目圆满完成,对的起我过去拿的一年半的工资。我还没有跟网易在附有禁止竞争协议的劳动合同上签过字;已经中断了薪水,处于停薪休假中;而且这次也只是做一些底层技术工作,帮人解决问题而已。对于我来说,写程序和做游戏是分开的两件事。所以,我爽快的答应了。就算是兼职吧。
董晓阳给我开了一个比网易更高的薪资,希望我能全心加盟。我拒绝了,因为我不想再次重复做过的事情。侠客行的游戏看过,当时还很一般,我觉不出会比大话更好。某些方面做的跟大话一一样简陋。看的出来,很多模块是借用一些开源的东西东拼西凑出来的。
如果真的是我来接手的话,等于又重新做一遍大话二,这可受不了。人生不过数十年,重复自己有何乐趣。
他们的一大问题是缺少完好的GUI系统,有如大话一曾缺少的一样。我在北京干了不到一个月,挺自由的在他们的办公室出入,解决这个问题。这方面,已经积累了太多经验,去北京前在武汉家中,我已把glow全部完成,所做的只是一些整合工作。
最后董晓发了我一个月的兼职工资,大信封装的现金,厚厚的有一万。带回家中交给父母,让他们放心,儿子这辈子无论干什么,都是饿不着的。
在北京过的那个夏天,更多的还是拜访旧友。同时也结识了些新朋友。
我们四个人在一家川菜馆碰面吃的火锅,听说孟岩也是武汉人,相互感慨了一番。大家都非常健谈,边吃边聊,意犹未尽。并没有在晚饭后散去,而是转战一家茶馆继续。
程序员碰面,总是有聊不完的话题,很多不做此行的人很难理解。一开始大家还只是聊一些程序技术问题。C++语言方面,胖肖和晓东不是很有兴趣,就我和孟岩讨论甚欢。随便拿出个奇技淫巧来,都可以说上半天。而后,大家上升话题谈一些高屋建瓴的软件设计方面的学问,由于各自都有许多工程经验,自然故事连篇。记得,还聊了一段优化,最后胖肖总结,最大的优化手段,无非是一种广义的cache,即想办法避免重复的操作和运算。还有一些在实际工程中并不多见,即是数学上的算法改进。话题就这样扯到现代数学和物理的进展。当时我很着迷于超弦理论,看了不少科普书,当即吹了半天的牛。说着说着,不知怎么又扯到历史上去,难得孟岩也读爱读史书,我们从秦始皇一直聊到李秀成。
直到深夜,孟岩的mm不停的发来短信,他才不舍的离开。我和胖肖干脆跟着晓东去他住的地方彻夜长谈。
接下来,在武汉家里待着。母亲早已退休,除了白天照顾我吃饭外,就是出门忙乎她的一些事情,照顾几位老人:她工作时的师傅;父亲还在上班,成天在单位里忙碌。我便去图书批发市场淘些折价书回来看,倒是特别清净。时常想想是不是应该继续一年前的想法做个有历史感的游戏。可越发研究历史,想的越多,越觉得自己的学识太浅薄。我想,即使转行不写程序,不做游戏了,这个世界上还是有很多有趣的事情可以去琢磨的。
同事在网上问,休息够了没?赶快回来上班吧。在那金秋十月,我又回到了广州。
那些日子(十七)
2002年9月底,再次回到广州,仿佛一个新的开始。我想我要长住下来了。这次打算住在办公室附近,越近越好。
头几天,我住在安宁住的小屋子里。原来小蓝租下的,现在他已经离开公司。屋子很小,晚上我就睡在地板上。安宁给我看他写的一些小玩意,一个汇编写的软件3d渲染器,挺有意思。还有一个使用d3d做的简单引擎。公司的3d项目已经做了大半年了,一直没有定下一个技术方案,可能还想多一些技术尝试吧。
我也去公司转转,没有正式复职,只是跟朋友们打个招呼,我回来了。顺便向周围一个个小区问值勤的保安打探情况,看看有没有房子出租。这比找中介要划算一些。工业园还不太繁华,房源很多。没多久就找到一家,步行到公司才几百步(以前数过的确切的数字,后来又忘了),中间会路过一个中国银行,挺方便的。
只是屋里格局设计的不好,也没有家具。空空的有张木板床,床板裂开,躺上去有点硌。我也够能将就的,就在这张床上睡了几百个夜晚。我妈常说那间房临着马路,有点吵,担心我睡不好。我倒不觉得,心灵上的平静才是最重要的。接下来几年过的很舒服。因为没有书架,还像上学时那样,把书齐齐的码在床内侧,取起来容易。
国庆去了趟深圳,见了许多沉浮于此的大学同学,看着大家都在为生活奔波忙碌,感慨万千。
长假过后,正式到公司报道。
刘琪说,大家商量着想把大话西游的美术重新做一次,以前的不太满意。这次新的想做的Q一点。我不太在意。反正到时候换换图片就够了。大话西游因石器时代的风靡而立项,或多或少受到它的后续版本魔力宝贝的刺激而向后发展吧。
郭伟已经在公司上班,坐在我的旁边。他在读大话西游的代码,我给他讲解引擎。他的任务暂时是给大话西游做一个较大分辨率的版本,因为这部分涉及地图预读策略的问题,所以我仔细的讲述了那块糟糕的代码。郭老倒不含糊,没用多久就让引擎支持了各种更高的分辨率。可惜这个改进并不受玩家欢迎。玩家更喜欢已有的640宽的小窗口,因为这样更流畅,还可以同时开几个client一起玩。同样,过大的分辨率,除了提高用户机器的需求外,也加大了服务器的负载(对每个玩家广播的信息量增加);整体来说,对我们和玩家都是极不划算的,这样的一个版本放出后不久,最终还是被取消掉了。
游戏部门开始筹备自己的市场部,想把游戏市场工作从公司的大市场部中独立出来。这个决策应该是对的,丁磊也有一种对老的公司部门精兵简政的想法。黄华逐步从策划转为产品经理,管的更多是市场方面的事儿。随着精灵的逐步没落,设在上海的精灵团队(主要是市场方面)被集体南迁广州。这次大迁徙,公司上海部门离开了许多人,很多人不愿意离开长三角。剩下的一批搬到广州住下来以后,也慢慢散去。当第二年工业园里多出一家网游企业:光通,许多人(我记得的有老刀)去了那儿。光通就开在我租的屋子前面,我总觉得他们的大门朝向不对,若拿伪科学来讲,就是风水有问题。呵呵,一家之言。
大话西游二收费后进展很顺利。但和一切一切的网络游戏第二版一样,同样遭到了第一版玩家的猛烈抨击。念旧,还真是人之常情呢。逝去的东西东西永远是最美的,无论它还在的时候给你带来多少烦恼。大家不再记得那些bug那些设计失误,只记得它的好。
今天我在旧信箱里翻出徐波02年5月中给我写了一封信,里面附了他对大话二的诸多意见。有两份很长的文档。当时我正忙于程序,没有回复和他讨论。不过这份文档,应该看起来算是狠狠的批判了当初大话二的设计。当他转给大话二的策划组看后。在讨论会上,自然招致一片反对声。徐波不是个容易与人相处的人,我没有参加那次策划讨论,但我能想象出当时的情景。一大组人被一个毫无经验的“外行”否定,从心理学上分析,就能知道那种集体而生的排斥心。策划组全体都觉得他在那信口开河,争吵中,脾气最好的萝卜居然都气的拍桌子。最终只得让dingdang来调停。
如此看来,徐波没能融入大话二的策划团队就是自然的事。dingdang只好让他做点别的。游戏的client已经稳定,那么就可以尝试把原来的大话一搬到新的client上来运行(和大话二公用一份C++代码,但重新编写逻辑脚本)。陈舟(舟字用了个同音字,原字生僻不好输入)负责移植服务器;徐波以一个大话一老玩家及资深GM的身份介入这个项目的策划。这个版本被内部命名为“仙履奇缘”。看过大话西游电影的同学当明白这个词的寓意。
我的生活变的很有规律。暂时不想做什么新项目,只想学点东西,做一些积累。重新上班第一天,我就开始筹备一个技术讨论的邮件列表。因为当时对C++颇有兴趣,就叫作C++邮件列表了。
这个邮件列表到今天还在活动中,用的开源软件和专门架设的服务器。但是最早的时候,我是在本机制作了一个收发邮件的脚本来完成订阅、转发等服务的。就是利用一个普通的email信箱,让大家把邮件发到里面,然后我收下来,用脚本分发处理,再转发给每个人。
后来这个邮件列表随着人员的增加,出了许多问题。经常被smtp服务器误认为在群发spam。我用的email是163.com自己的。原以为问题很容易解决。也就是为了这个问题,开始和公司邮件组的同事进行交流。我总觉得,处理这个问题弄个白名单就ok了,对于长期群发邮件,但没有被任何人投诉的帐号,应该很容易纳入白名单。但接下来听了邮件组的同事倒的许多苦水。嗯、其实一些表面上容易做的事情,即使技术上也没有障碍,实际操作时还是有各式各样的困难的啊。
虽然一再被封帐号,甚至冻结ip,这个半人工的maillist还是开了一年多。只到03年11月底,我群发了最后一封邮件宣布它关闭。大家觉得可惜,不久以后,我从公司申请到服务器资源,又重新开起来。
另一件事情,我开始健身。一直坚持了近三年。这段经历让我明白了一个道理。别人能做的事情,自己也是能做到的。无论目标看起来多么遥不可及。关键还是看是否有决心坚持下去。而一件事情能坚持,往往看的并不是兴趣爱好,或是利益诱惑,更多的只是习惯。养成习惯才是最重要的。
我从小身体就非常瘦弱。到小学毕业时,一个引体向上都拉不起来。上学期间,我觉得自己天生在体育方面就比别人差。进高中前,还担心体育不达标会影响入学。到读大学期间,曾经被寝室的同学怂恿着去健身,但只去了几天,听了教练讲一些要领后就没怎么再去。毕业后,一米八多的个头,体重只有130。夏天脱了上衣就是一身排骨。
心一旦安定下来,我想试试能不能有所改变。
公司不远处(员村)有一间健身房,先去打探了一下,感觉设施很齐备。如果按次去,就比较贵,一次要十多块。而且容易荒废。比较了一下,办那种早卡比较划算,一个月才100多点,唯一的限制是在中午12点前进场。一咬牙,决定彻底一点,改掉晚睡晚起的习惯。每天七点起床,吃个早餐休息一下,就走过去(大约半小时路程)锻炼。
旁边是个电影院,只要是周末,训练完了还进去看场电影。电影业很萧条,好几次放映厅空空的就我一人。感觉是个人包场,非常的惬意。碰到滥片,窝在情侣座里小睡一会。那几年,真是贡献了不少银子给我们国家的电影事业呢。
健身房的器械区早上基本没人,教练也很无聊。几句话我们就聊上了。他乐得交个朋友,便帮我指定计划,一点点的开始练习。我想我就是那么下了个决定就开始了。一直坚持下去。一开始是隔天去一次(因为没有习惯大量肌肉练习的人,一开始必须保证每次之后48小时的休息),然后逐步增加频率,直到一周五次。
唯一的乐趣,就是每天测量自己的各处肌肉的围度,以及称体重,看那些数字在小数点后的变化。神奇的是,晚上的睡眠也是相当的好。白天虽然没力气,但很有精神。每天都能吃上十多个白水煮鸡蛋。身体也就一天一天明显的膨胀起来。
一年之后,体重就从最初的130上升到了156。卧推从刚开始的不到30公斤,增加到接近100公斤,深蹲也达到了140以上。看着杠铃两端厚厚的哑铃片,心里特有成就感。
而引体向上慢慢的也可以做到18个(这个受体重增加影响,进展很慢),这都是以前不敢去想的事情。
一直以为,身体主要是父母给的,后天能改变的很少。当看见别人身材魁梧,总是很羡慕。小时候没注意锻炼,觉得大学毕业后就成年了,能改善的可能性不大。没想到,一切都不晚,只要去努力,依旧可以改变自己的。
只是这两年,项目实在太忙,主要是劳心。我中断了健身的习惯。感觉身体状态降了很多。体重也掉了下来。不过还是比大学时好一些。我想能够在这几年玩命去做新的项目,这身体基础跟前几年的坚持锻炼是分不开的。真所谓养兵千日,用兵一时啊:D。等现在手头的事情做完,一定要恢复这些好习惯。
那些日子(十八)
大话二收费以后,因为我脱离了这个项目的开发组,也就没什么记忆了。不过也时常关心一下,记得十月刚回公司时,在游戏里的聊天频道中,经常有玩家哭述自己被骗。他们用游戏币和人交换点卡,却总有单方面失信的事情发生。
我们曾想过在玩家条款中加入禁止游戏虚拟物品和虚拟货币与现实货币交易的条款,正如暴雪今天在wow中做的那样。有一种直觉告诉我们,游戏牵扯进金钱交易,游戏本身会受到冲击,不是什么好事。
直觉不总是正确的。固然,我们可以利用程序规则限制虚拟物品的转移,但那也会极大的破坏游戏性。有如美国当年的禁酒令最终执行不下去一样,禁止不了的事情,不如提供更大的便利去疏通。开发团队决定给系统增加一个公正的点卡交易系统。
这个系统,在02年10月底一台服务器上试运行。不久就在全部服务器推广开。我很赞同这个系统,但技术上没出什么力。讨论过程中,我只强调了一点,一定要在交易过程中征税,这个意见被顺利采纳了。
点卡交易系统一开始并不起眼,没人会想到它能起到多大价值。只是几个程序员看见玩家的需求,临时拍脑袋加上的。设计实现时也完全没考虑它会促进游戏的收益。开始时,有玩家传言,某些玩家寄售的点卡是由系统变出钱来凭空买下的。这种事情从未发生过,如果真的这么做了,其实也很容易被玩家发觉。其实,经过仔细考虑,我们也觉得没有必要这样去做。
玩家在这个系统的辅助下,游戏内的经济系统达到一个更为稳定的平衡状态。实际上促进了游戏的发展。金融工具可以促进经济的发展,点卡交易系统,就是一种在现实社会中不可能存在的金融工具,但对于网络游戏中的虚拟社会,则是非常有益的补充。
ps,几年之后,我重新研究了这个问题。写过一篇blog。
慢慢的我也明白了,网络游戏和从前单机游戏之不同。网络游戏更为注重人和人之间的交流,更多的是在模拟一个社会。而社会的稳定和平衡是一个动态的过程,并非一开始设计好规则,就可以保证的。人的行为没有固定的模式,尤其是对比现实社会少的多的人群,规律更不确定。没有游戏规则是普适的。对规则的不断修改,增删,调整,就是一个动态调节的过程。后来我们的许多产品,包括许多同行发行的产品,没能经历这样一段调整期,也是最终没能成功的因素之一。
由于没有项目开发的压力,我的注意力主要放在了学习研究各种有趣的东西上。因为对C++的热爱,那些日子大部分的精力都是围绕这方面。比如boost,阅读它的源码是主要的工作之一。
一开始看的是boost.thread,因为之前的多线程程序的复杂度印象太深刻了。我相信C++可以带来一些方法来回避其复杂度。设计良好的线程库非常值得参考。当时和泡泡组黄晓东的后继者李鑫也有讨论,他们在项目中尝试用过boost.thread。我询问过他的意见,他说他们发现这个东西还不太稳定,有一些bug。现在无法确定当时泡泡那个版本遇到的问题是否真的有boost.thread的问题。但是,C++模板库不好调试,已经深深的影响了实际的开发。
boost.python挺有趣,不仅仅是它做到的事情,也包括它怎样做到这些。比如它给指针分类,让python可以正确的处理C++的对象生命期,用以避免danglingpointer。
boost.python相当活跃,就在我把玩它的那几天,就经过一次翻天覆地的变动,把接口全改了。
那几天,孟岩曾在北京采访过C++之父Stroustrup。回来在C++邮件列表里投了一帖。其中也提到python:
“他(Stroustrup)说Python很有趣,不过说Python是C++的最佳搭档言过其实,因为C++一直都是很多种语言的最佳排挡。关键不在于那种语言多么的出色,而在于你应该选择最合适的工具解决问题。而C++很少被用来构造整个系统,通常只构造系统中的关键部分,这时候,他当然鼓励把其他语言与C++共同使用,而且实际上,一直以来都是这样。”
另外值得一提的是Stroustrup的其他一些观点,例如对于boost和loki,他毫不犹豫地赞同我们这个圈子当时许多人的观点,“某些库中有过分运用模板机制的倾向”。并强调,“C++是一种多范式语言,最好的风格是综合运用各种范式,保持平衡,求得对某个特定问题的最佳解决方案。过分运用泛型程序设计技术,与过分运用面向对象技术一样,都是他不赞成的。”
还有关于指针的问题,“他(Stroustrup)通常把实际对象也放到容器里,然后再用一个容纳指针的容器进行关键操作。他认为只要你仔细考虑,大多数资源都是有一个唯一的owner的。接着,他主动谈到智能指针,最有趣的东西就在这里了,他说,有很多人开发了类似sharedptr这样的东西,使事情看上去很漂亮。但是他不太喜欢智能指针。这个东西实际上是一种半吊子GC,它比手工管理自动化,又不如GC自动化,高不成低不就。你同样不知道对象是什么时候被析构的,那为什么不直接用GC呢?在他看来,普通指针仍然有很大用处,不应该试图绕开它。”
IthasbeenquiteawhilesinceIhavedoneanyseriousC++work.MostofmyworknowisinJava,andistransitioningtoC#.I'mnotthrilledwitheitheroftheselanguages.TheyareOK,butnotgreat.ThelanguagesthatmostpiquemyinterestatthemomentarePythonandRuby.Ithinkthefuturelikesinthatdirection.
是时候好好看看python了,不知不觉的公司里许多程序员中都开始出现学习python的势头。我第一次认真的审视这些动态语言,而不仅仅把它们当作一种嵌入式脚本使用。
叶航是在02年10月来公司报道的。以前我更熟悉他的网名:高铃响。我们在sina游戏制作论坛泡了好些年,是多年未见过面的网友。只听说他在深圳万智源做最初幻想,然后就被dingdang叫到了网易来。也有人叫他老高,不过我更多还是只呼其名了。
大话一的玩家流失的很快,到了03年时,据说有的服务器上最少的时候只有两三个人,其中还有一个是在线的GM。不得不佩服这样忠实的玩家,即使把一个网络游戏玩成单机版,也要坚持下去。
丁丁去而复返,dingdang安排他做徐波的上司,在这个分不清是旧瓶装新酒还是新瓶装旧酒的项目里做主策划。作为外人,我对项目策划方面的进展了解不多,无法判断到底是丁丁的贡献更大,还是徐波的。但是我能肯定,不能否定他们任何一人为这个游戏,日后被称为《梦幻西游》的游戏,初期所做的一切。
03年初,lua第5版即将发布的消息从lua的邮件列表中传出。我饶有兴趣的查看了新特性列表,被深深吸引的是新加入的coroutine。直觉告诉我,这是一种用来描述游戏逻辑不错的工具。
coroutine其实就是协作式多线程。在windows3.1的年代就被用于多任务系统的开发。现在的windows也支持一个叫作fiber的特性。我想,其实用C语言也可以轻易模拟出这样的东西来。
之前,大话二的client一直在用类似状态机的方式控制屏幕上的角色。虽然kyodingdang都觉得这样就够了,因为已经比大话一做的好。但是我始终不太满意。我想找到更自然的方法去描述画面行为。只有这样,程序员才好放手去描述更多的细节,游戏才能表现的更生动。
郭老对这个东西很感兴趣,我给他演示了一些简单的例子,他觉得用起来很方便。
大约在03年的春天,郭老对我说,我这里风魂已经用C++再次重写过了。我们这半年又弄出了许多好玩的东西,例如那个coroutine。不如大家用新的代码重新写一个游戏client吧。这次我用coroutine实现了新的网络底层接口,声音模块,还有对象的管理。一切都感觉比上次做大话二时舒服多了。
还有python,大家那时都认定它比lua更好用。
掌握了新的技术,总是能激发程序员们的斗志。就这样,我们再次开始从头开始写西游的客户端程序。目标是让《梦幻西游》可以用上新的技术。哦,那个时候还不叫《梦幻西游》,但不久就会换上这个留在无数玩家心里的名字了。
而Client程序方面,由郭老和我一起制作。我还是写底层,除了重写了所有的engine代码外。还新增加了不少特性。比如图象动态缩放,这RLE压缩图片的实时缩放写起来相当麻烦,虽然最后我把它实现了,但因为换装拼接时,出现一些接缝问题效果不太满意,最终放弃未用。这会是名副其实的并肩作战,大家在发现潜在的问题时都可以当天解决。新的client质量得以提升就是理所当然的事了。
梦幻西游这个项目,悄然开始,顺利展开,正在于这种相互独立的开发。这个优势,在大话西游二的研发期间已经显露出来,但到梦幻西游,发挥的淋漓尽致。
大话二的收入不错,慢慢的大家的口袋里都富裕了起来。我不知道公司具体给开发组的提成是多少。从往日的一封邮件来模糊的揣测,应该不到8%。但是,这个游戏的收入总量是巨大的,而我们也没有投入太多的研发经费。连宣传都是少之又少。最终,大家拿到手的奖金自然是非常丰厚。这给了所有人一个非常宽松的开发环境。
没有多久,我们每个人都领到了一件纪念T恤,上面印了,十万人在线的大话西游。
如果要说点别的,在02年底,我突然爱上了ps2上的游戏。从最终幻想X开始。公司里有两台ps2,就放在办公区的一角。每天下班后,大家都去玩一玩。一天,我看见麻雀在那玩最终幻想,这是个老游戏,但英文版出来不久。我帮他做翻译,一边看着他玩。然后自己就开始手痒了。由于不好霸占着公共的游戏机资源。周末立刻去买了一台回家。
那几年的业余生活很简单,健身,打游戏。当然后来还有更多的一些活动,比如骑车、攀岩、看卡通,这么看的话,不算宅男,嘿嘿。
那些日子(二十)
Ted人缘很好,是慢慢感觉到的。第二年跟MichaelTong去美国出差时,有机会拜访了几位跟网易有些渊源的朋友。见面后,大家一定会很关切的询问Ted的身体情况。聊起来都会说,Ted真是个不错的人啊。
05年底收到丁发给我的Ted手术失败的消息时,我正从岩道上下来休整,一下子感慨万千。多好的一个人走了,活着的人更应该保重身体。上海一个同事曾给我转述了他听来的故事,据说是北京办公室的同事讲的。Ted走的那一晚,他在北京空着的那间办公室的天花板上的消防水龙头突发故障,喷出的水洒了一屋。周一大家得到了噩耗,纷纷说那是Ted放心不下,又回来看看了。
五月间,非典袭来。最早是深圳的同学给我发短信,说是他们那的醋被抢购一空,让我赶紧备一点。接下来几天,广州满大街的酸味。我是从头到尾没觉得多大个事儿,每天照样去健身房锻炼,到公司上班。我能理解人们的恐慌,但不知为啥,无论别人怎么渲染,我就是觉得没啥。倒是健身房和公司里的消毒水味道有点不好受。最严重那几天,公司的同事都在家办公了。我家里没有计算机,所以依旧泡在公司里。
我在03年年中的时候,卖过一点点公司的股票,换到一些美圆。很好奇的炒了几个月外汇。读了许多技术分析的书,颇有些心得。大约玩了半年,起起落落,最终赚了百分之二三十,相比同期许多赔了的人,已经是很好的成绩了。但终究觉得无论是外汇还是股票,都只能当玩具玩玩。
不过一直以来,我还是乐于帮同事做分析,许多人也信任我的判断。只是每每说到自己公司的股票,我只有一句话,要相信自己的公司,自己做的事业。因为自己公司的股价,是股市上唯一能靠自己把握的东西了。
今天,ntes几经沉浮,再次升到24~25美圆(曾经一拆四,相当于以前的100美圆左右)。我很庆幸我坚持的理念,把自己大半的积蓄都投资在上面(19美金,大家都纷纷套现时还继续跟进过,当然是在窗口交易的),它给了我莫大的回报。
bigworld几乎是最后唯一的选择。dingdang看中的是他们宣称的网络模块的优秀性能。这是一种动态负载均衡的技术。
bigworld和别的网络游戏不同,它并不是把地图切分成一个个独立部分分担到独立的进程中去管理。这样比较来讲,bigworld是以人群而不是以地图区域来分担负载的。举个例子,如果有一大堆人拥挤在一起,那么他们就由一台服务器为它们服务。当这个人群群体向一个方向移动时,那么为他们服务的服务器也会跟着在虚拟场景中移动。只到有人从里面分流出来,在资源允许的情况下,分流出来的人会进入一个新的服务器。
听起来很神奇,bigworld理论上可以支撑无限大(其实还是有限的,只是比常规做法大几个数量级)的游戏世界。世界间的每个区域都是无缝连接的。因为服务器本就不是按区域划分的,那就谈不到缝了。
我们拿到了部分代码,服务器真正核心的那部分(负载均衡)他们不愿意卖给我们,只是提供了二进制文件。dingdang读过入手的一些程序,据说代码质量很高。反复衡量后,决定购买这套引擎。我说,其实没有什么东西是绝对神秘的,让我试试,可能可以还原被隐去的代码。
如果允许我接触已经购买的代码,需要签下一份保密协议。这样,我就签了,和许多正式转入3d组的程序员一起签的。kyo也在那时脱离了大话二的开发,进入这个小组。
bigworld的服务器是用C++编写的,跑在linux上。当时只支持redhat,而我们公司用较多的是freebsd。部分源码缺失,使得移植很困难。我拿到C++的头文件和那些.o文件后,发现做个简单的逆向工程,甚至可以把大部分缺失的代码还原出来。隐藏的源码的那部分其实和开放源码的部分耦合度很高,设计上根本不应该拆分开。它们中间有着千丝万缕的联系。部分内部数据结构虽然表面看不到,但是到后来我基本都推测出来了。
由于bigworld大量用了多重继承,早期分析还是挺麻烦的。读这些汇编,让我对C++编译器生成出来的复杂的数据结构有了几分认识。几个月后,对于各种形式的C++程序最终编译出来的汇编形式,以及对象的内存布局,我几乎都能立刻在脑海里做出条件反射般的印象了。对着这些汇编码,新写下的C++程序重新编译后,可以做到和无源码的.o文件,逐字节一致。
这个工作其实只做了一半,后来公司花了极大价钱买下了全部的代码。只是那个时候我已退出天下组,没有权限去看那些东西了。
年底,由dingdang带队,kyo我还有老王三个程序,月猫和陈由金两个美术,六个人出发去悉尼接受bigworld开发公司给我们做的短期培训,学习bigworld的用法。
另外他们的电脑,大多数人都装的linux,运行windows的机器上没有任何盗版软件。一个个把画笔和记事本用的相当娴熟,因为只有这些是不用额外掏钱买的。
回到bigworld的话题上,我学到并欣赏的一点是:他们嵌入的python,使用起来非常方便。client和server之间完全屏蔽了网络这个东西。server的各个进程之间也感觉不到跨进程通讯的存在。这应该算是一个设计非常良好的引擎了。给予了我后来几年独立开发的东西许多灵感。只是隐藏了太多细节,也出现了很多局限性。从我的感觉上,引擎是为特定游戏类型去设计的(或许他们最早想做一个MMOFPS),离我们心目中MMORPG的需求有一些距离。
后来的发展也的确是这样。可以说,03年到今天(08年),网易和bigworld公司是一种相互依存的关系。我们用他们的引擎,提出各种意见,找到设计问题和bug,反馈给他们修改,一步步的把bigworld打造成更适合现代MMORPG的游戏引擎。kyo后来担任天下二的技术主管,坚定着不自己开发服务器的分支版本,一切问题交给澳洲处理的方针。虽然开发过程往往有点憋火,但也保持了最终版本的唯一。最近几天在看《人月神话》,里面提到设计概念一致的重要性,这就是一个佐证。
如果让我主观的评价一下网易购买bigworld的意义,我想说,我们其实是花钱雇佣了一支海外军团,帮我们干活呢。
在澳洲,别人公司的办公室里,我跟dingdang吵过一架。可能让老外看去有点莫名其妙了。
大概就是这样的观点吧,具体也记不清了。不知为什么,我们的分歧越来越大。最后,我坐在桌子上一言不发。过了好久,dingdang心情也平静了些,主动过来向我道歉,为他的态度道歉。这是我们第一次,也是最后一次争吵。其实我能理解他,一如既往。
回广州的一年后,类似的问题我和叶航也争过一次。慢慢我就明白,永远不要对别人的项目指手画脚,当局者未必迷,旁观者未必清。有什么事情自己有想法的话,最好的办法是自己去做。
在我们一队人去澳洲上飞机的那一天,还有一个有趣的小插曲。当天公司的中层人员都被安排去参加一个管理培训。虽然我手下没有一个兵,可也被安排去了。
估计是丁磊故意的,dingdang我还有张金等五个人被分到一个组。培训课上做了一个小游戏颇有意思,培训结束后,我们还热烈讨论。真的是可以看出每个人的性格来了。有兴趣的同学可以找人做上一次。
游戏是这样的,五个人被发了五张纸。游戏开始后,大家阅读手上的纸,并努力完成游戏。这个游戏需要五个人合作,但不许语言交流。信息沟通只能靠传字条。便签纸是可以无限取用的,但是每个小组只指定了一个人可以向任何一个人传字条,而其他人只允许向他传。
我们这一组,这个关键人是张金。游戏一开始她就收到了大量的字条,忙个不停。
我拿到的纸上什么字都没有,只画了五个奇怪的符号。我觉得其他人也应该是如此,我们借助张金传递着信息,想弄清楚别人手上都画了些什么。大家都在猜测这个游戏到底想让我们做什么。很快我们就达成了一项约定,在字条上写上toXXX,fromXXX,让张金负责转发。比如我想问dingdang点什么,就写上todingdangfrom云风。
一开始我在字条上写了好多,写了我看到的图案,还有我的猜测。写了很多字,比如,假设游戏需要我们找出所有的图案,我们应该怎么办;假设游戏需要我们找出一个特别的图案应该怎么办,假设游戏需要找到某个人手上一个特别的图案应该怎么办……
而旁边kyo的组没多久就完成了游戏,相继还有许多组。我们这里还一筹莫展。
我是颇为着急,写了个字条给张金,让她把所有手上的条子全部给我。因为我看她在那里一边分析着手上的情报,一边帮其他人传递,实在忙不过来了。dingdang也在那边沉思,不断的找张金要新的条子。我想这么下去也不是办法,索性一个人来做算了。
当我对比了所有人的字条,艰难的从杂乱无章的各种信息中判断游戏的真实意图时,我发现每个人的图案都有一些共同点。如果这是有一道智力题,那么就应该是找出大家公有的部分了。但是老师不理会我的结果,直到dingdang最后也做出了判定,才结束了游戏。
游戏的谜底原来是这样的,dingdang那张纸上除了五个图案外,还有详细的文字解说。明明白白的写着,找到五个人手中共有的一个符号。
老师向我们解释,其实这个游戏中每个角色都是有象征意义的。拿到dingdang那张纸的象征着老板,他知道目标;负责中转的人,张金那个角色,相当于管理人员,她负责跟员工沟通;剩下的三个人,就是公司的员工,他们负责实现目标。
在游戏中,dingdang始终没有想到,别人其实都不知道游戏要干什么,他以为大家手上均有文字说明。认为只要通过张金,最后总能有一个人完成游戏。而我当时所想,就是大家和我一样,都只看到一堆莫名其妙的图案,我们的目的是猜测游戏目的。
kyo那个组之所以完成的快,和kyo的第一张字条分不开。kyo明确的写道,我不知道我要做什么,我的纸上只画了这些……。并且他不厌其烦的把这段话copy了4份,转发给每个人。当“老板”得到这个消息后,再向“管理人员”要求把所有信息转到他那里,很顺利的就找出了答案。
真是可笑,我们这一组,做如此要求的人却是什么都不知道的我。
这个游戏教会了我,让一个团队有一个明确的目标是多么的重要。由于信息不对等,每个人看到的东西都不一样,想的也不一样。我们在团队合作时,沟通胜过一切。说出你之所想你所知,了解他人之所想所知,道理很简单,做起来很难。
由于《仙履奇缘》这个名字已经被人使用过,公司决定给新产品换个更响亮一点的名称。内部征集了很多意见,大家决定使用《梦幻西游》。
游戏的各种玩法也是一样。徐波自己的角色慢慢练了上去,建立了服务器上第一个帮派。还不想让人知道帮主就是他,怕被人怀疑是作弊练出来的。我想设计人员能有机会耐心的把自己的游戏玩上一年,以一个普通玩家的身份去玩,各种细节自然就照顾的到了。大部分策划不是不想这么干,而是没有机会。有多少项目有如此长的测试期,在稳定的环境下,拥有这样多的玩家一同游戏呢。
梦幻的美术部分也算是精益求精了。虽然有同行对他评价不算太高,但我觉得大家是尽了很多心力的。
到后来,丁磊请了一个从中国美院退休的老教授来给美术人员上课,为美术质量把关。第一堂课我也去旁听了,讲的一些概论性质的东西。我以前没学过专业的美术,听起来自然是收益非浅。后来经常看见晚上会议室有在上课,原画稿也被更严格的审核。
程序方面更不用多说,前面已经讲的很多了。我和郭老搭档的非常愉快,基本上他不会提什么非常要求,因为他在提需求时已经仔细考虑过了。然后,我把需求都一一实现。大家也时常探讨一下接口的设计,不为眼前的问题做草率的决定。后期,为大话二写界面逻辑的许扬调过来做梦幻的界面逻辑。这次C++到python的接口比大话二时设计的对lua的接口要漂亮一些,工作进行很顺利。
郭老自己也玩梦幻,做起来更来劲一些。后来,帮派地图,玩家家中的家具摆设这些玩法实现都花了很多心思去做。在梦幻运营之后,我们还更换过一次通讯加密的方案。研究了很久,只是觉得新方案更Cool一点,然后两个人很努力的干了几个月。
03年底,梦幻公测之前,我就脱离梦幻的一线开发了。这一年,随着网易股价的疯长,在福布斯中国富豪榜上,丁磊被排在了首位。他信心高涨,一心想把公司发展壮大。
年底,我们还是按往年的那样,从网上和广州本地的学校里选了几份简历,打算做个简单的招聘活动。突然dingdang被老丁的邮件批评了一顿。他说,郭斌打算新成立一个研发P2P产品的部门,都填了二十人以上的人员预算,你们若大一个游戏部怎么才要这么几个人?不行,得多招人。人才最宝贵,不能让别的公司抢了去。
dingdang急匆匆的制定新的招聘计划,我隐隐有些担忧。这种担忧dingdang也有,人员扩张太快,会不会消化不良?但是在一片大好形势下,老板的殷切希望中,我们开始了新的招聘之旅。全国各大城市间做宣讲会,收集简历,做笔试面试。
记得那几天,每天都有成箱的简历运到公司,几乎所有程序员晚上都在看简历。我们八九个人围在会议室中,每个人分到半箱,一份份的读。把简历分为好中差三类。最好的一堆要求比较严格,按一个高标准,只要一个人认可就可以归去那类;差的一类底线非常的低,也是一个人认可就可以扔掉。中间类别的堆的最高。全部梳理完毕,接下来再如法重新轮换一圈,换人翻阅,从中选出较好的出来。
此时,ruiheng已经被大家公推升认技术部总监,而因micro已经正式离开公司,dingdang从原来的技术部总监升为游戏部总监。我和ruiheng两人一组开始奔波于全国各地做巡回招聘,同时还有别的组别分头去各地,有时我们也汇合在某一个大学较多的大城市。有丁老板的指示,游戏部的技术人员几乎全员出动了。相比前一年02年的招聘工作,完全不是一个阵势。
接下来有些经验和准备了,事前都让公司和学校打好招呼,然后再过去先搞个宣讲活动。那些天那个累啊,每到一个学校先讲上一个多小时。然后发下头天编好的题目,开始笔试。晚上回酒店开始批改卷子,找到答卷中的亮点,并比对收来的简历研究。
有些学生过来做完面试,一兴奋就拉上他的同学。通常这样的拉过来的人都不错,而我们又有多多益善的指示在先,加班加点是常有的事。记得那年在重庆站,就因为面试排的太多,我一个人改签机票多留了一天。
这样高负荷工作,也找出不少优秀的人才。甚至一些是从别的公司口中抢出来的。现在大话三的client主程祥子,当时在成都读书。本来他已经拿了金山的offer,被同学介绍到我们面试现场看看。然后就让我“连蒙带骗”硬是说到网易来了。当时他说,他对破解很有兴趣,我就给他介绍idapro,说怎么做效率比较高,如何分析别人游戏资源中的图片格式。还讨论他刚做的一些东西的细节,告诉他我的办公室电脑里还有自己写的很多好玩的程序。聊到兴奋处,祥子就决定把金山毒霸组给他的offer拒掉。我没有问他那份offer的薪水数值,只承诺了一个不高的数字。他说,不比那份高。
那一年,我们能许诺的待遇不高(以后几年也是如此),只能靠跟学生聊聊技术。让优秀的人觉得来我们这里工作会很有趣。曾经有几个学生,他们刚考完人工智能的考试,就来参加我们的面试。我就和他们聊刚刚考过的试题,说出我的解法,列举这些知识以后能怎样运用。让大家觉得,学到的东西是有用的,以后的工作中,还会有更多人一起来探讨这些。我始终觉得,这是吸纳人才最有效的方法。
等招聘活动结束,我想自己也闲着没事,就搭了一个maillist,给每个签了offer的学生发email联系。一是想促进交流,避免再被别的公司挖走,二是想进一步了解每个人的实际水平,为日后进入公司组织工作做计划。
当时做这件事很来劲,给大家出了题目布置下去做,列出书目供大家读。为每个人批改作业,写邮件交流。我觉得为团队培养新鲜血液,是促进整体发展的重中之重。
ruiheng提议在在公司里多组织技术交流和专题课程,我想我准备的最多。前后做了五六个,有些课程还做了两次。
HR的工作真是非常重要,也需要有心去做好的人去做。看到后来google进入中国,李开复亲自组织HR工作,我是由衷的理解。
《梦幻西游》在招聘的间隙公测,那是2003年12月中的事情。之前的内测反应相当的好,公测后在线人数也是节节上升。不少游戏制作圈子的老朋友都跟我说,梦幻西游挺好玩的。而以往,这些人都是单机游戏的玩家,对网络游戏不屑一顾。我想我们这次成功了。
丁显然也是充满信心。有上次顶住玩家漫骂,把大话西游二从三毛提价到四毛的成功收费经验;这次他想把价格定在五毛一小时。在正式收费前,大家都没太多意见。毕竟没什么好说的,大话二有前车之鉴。反对的话也是找骂。
但是在2004年1月正式收费那天,游戏的同时在线人数瞬间从10万以上跌到了3万以下。丁丁和徐波都坐不住了。我能理解他们的心情,测试期间的繁华到收费后的冷清,落差太大。
这是个没有答案的争论,至今我还坚持我当时的观点。而没过几天,梦幻就宣布调低了收费标准。
当然这是一家之言了,也说不定因为坚持五毛一小时的收费标准,梦幻就从此一蹶不振,谁又能说的清呢。
无论怎样,《梦幻西游》一路凯歌走到了今天,成为了中国第一大MMORPG。你说它颓势尽显也好,无聊之极也罢。它的最高同时在线人数还是在前不久又创下了新记录:200万人。不能否认,这是款成功的产品。
我为自己在那些日子,为之贡献了代码,贡献了想法,贡献了力量而骄傲。
尾声:
故事远没有结束,但我想应该停笔了。
泡泡游戏的故事、大唐的故事、飞飞的故事、大话三的故事、天下二的故事……千百人经历过,正在经历。我想如果有缘,会有人接下去讲述。
网易互动娱乐从04年开始极速壮大,不再是一个小小的团队。方方面面,我们多了更多的观察角度。每个人的眼睛里都看到了不同的东西。如果你也身在其中,也许你会喜欢上这些人,也许你突生反感,也许你因为和这样一些人一起工作而兴奋,也许你有许多无奈。
但每个人都应该想着:只要自己努力,明天会更好,不是吗?