« The Implementation of Lua 5.0 中译 | 返回首页 | 那些日子(十一) »

那些日子(十)

2001 年的国内网游市场上涌现了不少的游戏,有些昙花一现,现在估计都没什么人记得了,例如我依稀记得的一款三国题材的游戏,运营没持续多长时间。还有一些一度风靡全国,拥有不少玩家,如《千年》、《红月》、《龙族》等。

《传奇》就是在这个背景下横空出世的。

陈大年是我大学时期结交的网友,跟我一般年纪,我们时常在 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 的时候我就觉得不好,不过还是随你们去做了。让你犯过错才知道改”。(._.!)


并非我事后想推卸责任,因为无此必要。大话二最后只用了半年重生,追究大话一的责任都是没有意义的事情了。在后面的故事里,我们会看到,大话一花的这半年多的开发时间,开发人员投入的精力 80% 以上都被复用起来,如果我们把大话二的上线当做项目正式的完成,距离大话一开工前后也不过一年时间。真的是没什么遗憾了。

今天写这些故事,除了给自己做一个总结外,也是想让更多的开发人员可以借鉴到其中的经验和教训。对于“嵌入 IE ”这个貌似重大的技术决策失误,如果只看到表面,就和我写这些的初衷南辕北辙了。这里有必要展开来写一下。

如同前面在第五篇中所写的那样,选择嵌入 IE 做游戏的 UI 呈现,仅仅是从节省人力着想。因为我们当时只有 3 人做 client 开发,后来大话 2 使用的底层的 UI 模块并没有开始写。如果 4 月里动手写 UI 模块,只会拖累整体的项目进展。而选择使用 IE ,可以额外的增加人手,不至于影响已有的 3 人的开发工作。

复杂度隔离,是我这么多年做项目中悟出的最重要的一个道理。当多人合作开发时,应该尽量隔离不同的人之间的工作,每个人都专心做自己的一块,各人的工作中的失误,都不至于影响到其他人的工作,这样软件项目才能顺利开展下去。如果当初不做此决策,可能到现实中大话 2 开发完毕,大话一都完成不了。由于项目开发时间过长,本就不稳定的军心会更加涣散。所以这个技术决策,更多的考虑的就不是技术上的因素而下的。

从结果上看,大话的 client bug 非常严重,导致程序时常崩溃的,是本身程序的不稳定,而不是 UI 系统。UI 仅仅是弹出类似“脚本运行时错误”这样的讨厌的对话框而已,玩家只是部分功能不能正常使用,而不会完全不能玩游戏。而且理论上还可以指导玩家安装最新版的 IE 来解决。所谓木桶短板原理,大话西游一的短板可能在服务器,可能在玩法设计,数值设定,可能在客户端逻辑,根本轮不到 UI 这个模块。

话说回来,IE 也不是如此的不堪,我们只是用 IE 显示几条文件,几张图片,并使用 html 和 css 做一些格式排版而已。根本不会去使用网络部分的功能。所谓 IE 的安全补丁升级,大多和这部分无关。如果 IE 真的连这点事情都做不好,微软就别混了。现在使用 IE 内核做界面的软件比比皆是,也是一支潮流。IE 报告脚本出错,多半是在我们自己的开发人员身上。在经验不足,项目进度压力大的日子里,写这些 javascipt 会犯的错误,留下的 bug ,若是改成原生的代码写到 C++ 程序中,同样会出现,后果更严重。

所以,不要局限于表象,轻易得出结论:怎样的选择是对的,怎样的选择是错的。

11 月里,几乎没我多少事。因为大家的工作都是修改 bug ,而我的那块基本没有什么问题,很稳定。经过一年的开发,我想我至少在 C++ 和设计模式方面领悟了不少东西。开始回头审视整个项目。其实游戏的 client ,并非一个庞大的工程。只要合理的设计,应该能做的很稳定。

开始一个人闷头写程序。

要来了通讯协议文档后,大约花了一个月时间,我做了一个简化版的 client 。虽然只是个雏形,但很多基本功能都有了。代码很小巧,我给他起了个名字,“小话西游”。设计上最主要的地方是,把游戏 client 逻辑做了严格的分层。把对象的管理、画面精灵动画的控制等等都隔离开,并将网络包以及画面无关的逻辑部分提取出来(这点为以后引入嵌入式脚本铺平了道路)。

丁磊看到了我做的这个小玩具后,第一个反应是,“能不能压缩客互端,做一个图形聊天室?”。我想他是对《大话西游》的现状失去信心了。当时人心也比较散,开始有人离开。有些开发人员甚至私下里谈论过大家散伙。

但是我不甘心。这是我毕业后全心投入的第一个项目,我不想看着它失败。不想我那些朋友们,那些 bbs 上相互调侃的网友们,觉得云风只会口上说说,真做起项目来不过如此。我想的是,其实做这么一个“简单的”软件,只要好好规划一下,不至于程序上弄的如此的不稳定。比如 UI 的问题,当时只是项目进度和人手上的不足使用的一个权益之计。而现在,我已经全部构思好该怎么实现了。

按丁的想法,把《大话西游》保留所有的图象资源,而将程序改成一个图形聊天室,体积缩小到 100M 以下是绝对不现实的。要知道,如果我们不做那些我绞尽脑汁的方法去压缩,客户端根本塞不进一张 600M 的光盘中。程序可以再写的短小精悍一些,但图象资源却小不了了。

我想的是,重新推翻再来一次。

做大话西游的 2.0 版是 dingdang 拍板下的决定。倒不用我去主张,程序员的心是共通的。dingdang 怎么说服丁磊的我不清楚,但我想不算太困难。网易只有两条路可以走:解散游戏开发团队或是重新再来一次。

是的,一开始,我们想做的只是 2.0 版,以此作为对老版本的升级,而不是后来的《大话西游II》。我那么的想重新来过,不是因为喜欢这个游戏,而仅仅出于一个自私的理由:要证明自己可以把这件事情做好。


那时的网易可以说相当的不顺利。九月里,公司被 nasdaq 停牌。最后一天甚至跌到了五十多美分。在美国,公司面临着诉讼,因为最近的一期财报被认为掺假。历史上,惹上这种官司最终停牌的公司都没有好下场。

自主研发的游戏上市后,问题多多,反应平平。最高同时在线人数只有 5000 多,还是头几天创下的。

而国内几款韩国游戏却做的风风火火,在这个背景下,丁磊带着大猫猫去韩国寻找可以代理的游戏。丁磊在韩国的那几天,我明显感到他承受的压力。有一晚,我在写程序,他在 icq 上蹦出来,没头没脑的说了句,“失眠了,睡不着”。

我还记得大猫猫归来那天,从韩国抱回了大包小包的流氓兔,我抢到了两个。对了,公仔上有个小标签,赫然印着“Made in China” :) 。

不过正题是之后我们一起看的三个韩国新出的游戏。都是 3d 的,丁磊赞不绝口。一个叫做“Ragnarok Online”,一个叫做“MU”,还有一个是“Priston Tale”。让我也发表一下意见。我说,单看画面的技术含量和操作感,我最喜欢 MU ,其次 RO 不错。丁没说什么,不久,我们代理了 Priston Tale ,给他起了个中文的名字 ——“精灵”。


补充,我努力回忆了一下,记不请最后这段发生的具体时间了。精灵后来是 02 年夏天上线的,谈合作应该更早一些。丁从韩国回来那天,天气不算太凉,他还带了件 T shirt 送人。我不记得那是 01 年的秋天还是 02 年的春天的事情。对比精灵的运营时间来看,是 02 年春天也有可能。但这里行文方便,我假设的时间背景是 01 年秋。有机会再求证好了。下面会接着写大话二的开发,而暂时不再谈精灵,先作一个说明 :) 。

今天在家居然翻出当年大话西游一发行前夕,公司送给每位开发人员的一套网易点卡。制作非常精美。主题是网易早期的那套形象广告。我想丁更多的是想借游戏收费的契机给网易其他产品找出一条收费渠道(第一套点卡上完全没有突出游戏这个主题,可以看成一种单纯的现金卷),只是因为游戏的失败没能成功罢了。


谢绝转载

那些日子(目录)

TrackBack

如果你想引用这篇文章,请复制下面的链接发送引用通告(GBK)
http://blog.codingnow.com/mt/mt-tb.cgi/366

Comments

02年夏天,那个时候我在

to Cloud,
对,不如用lua.

写的是越来越好看了。不过我发现有时要看2次,因为作者有时可能修改过了,所以我建议博主以后有空的话,加一个最后修改时间的提示。lol~

阅读这些精彩的文字,感觉就像是在重读>

终于明白了,云风是在写网易游戏的历史~

精灵当时来说的确是个不错的游戏,人气也很旺的,不玩传奇后玩的就是精灵吧,至今还很怀念……可惜自身致命BUG被外挂利用毁了。精灵的人物卡通却不幼稚,现在看来依旧比很多休闲游戏的感觉好多了,其实精灵加以修补并与时俱进的去拓展下,现在来说依然很具诱惑力,符合中国玩家玩游戏的特色这点确实比较重要。

下面的对话很有意思.对国内几个大的公司,网易给我的印象还是很好的,看了云风的文章后这种感觉更深了.看了胖肖与云风的对话后又更深了.至少他很真实.

"因为我们当时只有 3 人做 client 开发...."

只有3个人 -_-!

期待下文, 越来越精彩了。

事实证明所有人都只是反复的做两件事:解决问题,再就是做的更好。

但求解决问题已经很好了,这世间还有什么错错对对的。

花了半天,看完了,看来我的确不够执着

>大话1 我记得的数字是 600w RMB ,后来对外的说法是 3000w 差了 5 倍。
>如果一开始是 400w ,那么可能后来又追加了?
有可能你记对了 :)
我的记忆力并不是很强, 我想到这里的时候, 脑袋里面出现一个数字400w, 我就将它写下来了.


>我的工资的问题,当时就明白了 :) 因为我知道游戏开发组一个月的工资只有
>19w (>不知道有没有记错),我当时的工资跟其他开发人员比,已经是高的离谱了。
哈哈, 原来云风是: 我知道, 就是不说 :)
当年技术部门这边的工资还是容易保障一点, 但是游戏, 由于是丁老板没有经过其他高层同意就做的事情, 所以处处受到刁难.

>还有设计 163 homepage 的事儿,也说是说请了国外所谓专业公司做。有人借此
>还嘲笑过 sina 还是 sohu 的 homepage 不够专业呢, 哈哈。
当时还有通行证系统也是找国外设计和实现的, 也花了不少的钱. 这个事情其实很有意义, 早做比晚做好. 不过数据库设计和数据库池的使用有问题, 导致很长一段时间承受不了压力, 丁老大后来看到数据库 table的原始设计, 生气了: 哈, 这个东西怎么能这么弄呢, 弄一个老大的row, 经常更新的数据, 和很少更新的都放一块 !
搞不好国外的公司, 是一个有经验的架构师给了整体思路出来, 然后让新手做的, 所以整体思路没有问题, 实现就问题多多 :)


>项目期限的问题,当年我就深刻的理解了。如果放到今天,无论如何都要争取多一些
>时间的。那一年,却什么都没说。
这个, 说也没有用的, 当时的环境下, 多说无益.

>这也是我在故事里,反复强调,许多开发中的权宜做法,都是因为项目工期导致的。
>项目按期完成,在当时的语境下比一切都重要,甚至比项目是否成功更重要。
是啊, 上上下下压力都很大的情况下, 有些事情明知不妥, 也只能继续.

long long ago & 不久前 甚至当前, 经常都可以看到一些公司的决策似乎很笨, 导致公司损失甚至一蹶不振, 例如 kodak 在数字成像方面有非常多的成果, 却封存起来继续发展银成像之类的事情.

其实, 能够做到公司经营层面的人, 又有多少是真的很笨呢 ? 很多看起来很傻很笨的决策后面, 应该都有它的故事.

胖肖也来凑热闹了 :) 呵呵。

你说的事情基本上我都有耳闻,不过本着不是第一手资料,就没有写。

大话1 我记得的数字是 600w RMB ,后来对外的说法是 3000w 差了 5 倍。

如果一开始是 400w ,那么可能后来又追加了?

我的工资的问题,当时就明白了 :) 因为我知道游戏开发组一个月的工资只有 19w (不知道有没有记错),我当时的工资跟其他开发人员比,已经是高的离谱了。

网聚人的力量的广告的段子,我听好多人讲过了,抱怨的比较多哈。不过做的还是满漂亮的,好象制作公司还得了奖。

还有设计 163 homepage 的事儿,也说是说请了国外所谓专业公司做。有人借此还嘲笑过 sina 还是 sohu 的 homepage 不够专业呢, 哈哈。

项目期限的问题,当年我就深刻的理解了。如果放到今天,无论如何都要争取多一些时间的。那一年,却什么都没说。

这也是我在故事里,反复强调,许多开发中的权宜做法,都是因为项目工期导致的。项目按期完成,在当时的语境下比一切都重要,甚至比项目是否成功更重要。

to wqxwy & tigerdx,

我在正文中加了一段做详细解释,为什么选择 IE 而没有自己写一套 UI 的模块,或是自己做 HTML 的解析和显示。(自己做 html 以及 javascipt 的解析和显示还不如做专有格式呢)

我也来回忆一下 :)

有些事情还算有趣:
>>>
不过,一开始没人去做免费的客户端。我想有几个原因。其一是固定思维所限,其二是
当时网络带宽不够,拨号上网依旧是主流。还是得依靠光盘发行。既然需要走传统的销

售渠道,那么也总得设个价格。

网易没有自己的销售渠道,所以选择了一家代理商,智冠。现在看起来很好笑,如今都

是花钱想方设法的把新出的游戏 client 送出去,发到最终玩家的手上。那一次,智冠
居然还要付我们一些版权费用。

1. 当时, 光盘发行是必须的, 你已经说过
2. 走传统的销售渠道, 必须面铺得越广越好, 除了网易自身的广告, 必须让渠道商有足够的动力
3. 压力能够导致动力, 如果免费给他们, 结果的好坏就看他们的心情了, 运营的分成又没有他们的份, 呵呵.

另外一些就不是那么有趣了
有些数字我可能记得不太准, 不过大致还有有谱的, 事情已经过去多年, 丁老大万一望见, 应该也不会有什么意见吧.

1. 当年的网易, 可以一年花1000万美金 (1/8 IPO额)做网聚人的力量的广告 (这是公开的信息了, 不过这好像不是丁老大干的)

2. 可以花很多钱, 嗯, 比大话1开发额度高很多很多的钱,设计一个 163.com Homepage

3. 整个大话西游1的开发推广费用, 好像只给了400万 rmb 额度.


2001 年4月, 一次讨论收购的三地电话会议(丁和CEO 没有参与), 一开始就是某个 O 拿 earthlink 做游戏大亏的例子开说, 参与会议的众人中, 只有Jerry lin(他不会说中文, 所以我没有记住他的中文名) 说, 支持, 游戏产业潜力很大; 我说, 支持, 娱乐是人的天性, 检查过天夏的代码和开发管理, 不是很满意, 但是在国内, 应该还算好, 加强一下可以做出网游.

你就是支持力量之一了, 呵呵, 你的工资要算到游戏那边, Micro 就麻烦了, 不知道又要压谁的工资了.

当时, 有次我试图将其他部门淘汰的服务器转给游戏用, 都要按照5年折旧率算游戏的钱 ---- 老天, 那机器当初就买的贵, 即使按三年折旧率, 都已经比新的好服务器贵了, 我和micro不过是一心一意为公司全局考虑, 为什么这样都要受到压制.

所以, 在当时背景下, 做什么都很麻烦. 公司层面看, 支持的力量弱于反对派, 投入不够, 要求产出也太急.

丁老大自己虽然是明白人, 但是一来他那时候本身性子就急, 二来当时网易负面因素太多, 急需几个项目提振一下, 所以, 在项目期限这个问题上, 也是一个麻烦源.


说老实话, 一个项目组, 做一个规模较大的项目, 如果好些重要的方面没有经验, 那第一版不应该有太高的期望; 项目的目标, 规模, 实践上, 应该就有一些心思是用来练兵的; 如果担心失败殃及品牌, 那可以使用副品牌来做, 总比失败率极高地大赌一把强.

大话1没有好的环境, 失败几乎是必然的; 晓东的IM 失败几乎也是注定的. 这里面, 虽然项目组自身还有一些努力提高的空间, 但是对最终的结果不会有太多的影响.


直到 2001 末期, 丁老大控制住了局面, 同时从短信中找到了收入, 事情才开始有些变化.

另外, 如果你提到 10月,11月开始有人离开, 其中的果子,古月, 嗯, 那里另有内情, 我是过了两年才知道, 这里不说也罢.


为什么不自己写解析HTML的代码?用IE内核头会很大的.

期待大话2以及梦幻的出场。

我第一个玩的游戏是MU,挺怀念的.大话当时看别人玩,不觉得好,后来大话二出来了,听说是云风做了修改的,试玩了下,游戏性还是觉得不够好玩,其它的觉得还行,也没多玩,倒是梦幻西游戏觉得不错:)但没时间玩游戏了.
需要一个环境啊

您现在还觉得用IE作client很正确……
我看了整个前边写的,感觉这个是最大的技术决策错误。嵌入IE做一个稳定无bug的客户端太难了。当初决定的时候没有考虑形形色色的版本问题吗?
何况还有IE层出不穷的补丁,和IE自身的版本更新

恩,叙事风格越来越流畅了:)

一直在看,勾起一些往事

恩,叙事风格越来越流畅了:)

要是丁磊选了MU,就没有现在的9城了

终于说到精灵了,怀念一下。只是后来游戏秩序崩溃了。大概这些都是后来做梦幻西游的前车之鉴吧。

丁磊以前不是在宁波做程序员的吗,怎么是不写程序的?难道我记错了??

真的吗, 跟我同姓哦

文章暴了好多料,
下面也好多人暴料

走麦城了,我倒是很感兴趣怎么把2.0做好的

呃,渐入佳境了

呵呵,有意思。果然是个随性的人。

没过多久,玩家就集体掉线了。服务器崩溃。不久,自动重启。又过了大约 10 分钟,再次崩溃。就这样一直循环下去。

----------------------
我做游戏服务器,这段,心有戚戚焉。

呵呵,加班回来,把困扰了一周的bug解决了,心情很舒畅。看一段故事,抢一个沙发。

"代码很小巧,我给他起了个名字,“小话西游”。"这名字可真冷啊.随便问下云风不是你的本名吧(这名字也太有侠气了吧),怎么我没在大话西游的制作人列表上看到,还有就是里面第二张照片里最右边那个穿黑色T shirt就是你吗?我随便问问,你随便答答好了

Post a comment

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