作者在 2008-01-03 19:24:52 发布以下内容
【ZT】我, 魔兽及其它--Soar Chin三年魔兽史回顾自述
关于标题
这个标题是参考我喜爱的《银河英雄传说》7-4《解放,革命,谋略及其它》起的,没什么别的意思,也就是把我要说的3个方面简单列举而已,当然关键是几者之间的关联,;)
零 写在前面的话
写这段的目的在于重新整理思路,并让大家对我写下回顾时的心情有所了解。
我一开始接触魔兽是在Beta测试阶段,可以说是第一批玩魔兽的人,当时是以什么样的心情来看待这个游戏的?我现在已不得而知,唯一还能保留的记忆就是我是因为喜欢Blizzard以前的游戏所以第一时间接触了beta阶段的魔兽。或许是激动,又或许是习惯于Blizzard游戏的一贯质量而能保持一种自然的平静,三年之后回头看那时的我,只能感叹时光匆匆,转眼间物是人非,留下的只是淡淡的怀念。
有道是万事开头难,所以这篇文章的开头我一直不知道如何入手,再想到那句“从哪里来就回到哪里去”,我决定从我作为第一批玩魔兽的玩家开始讲述自己的故事。至于是纪事本末体,纪传体还是编年(月/日)体,我想应该是前面两种混合吧,主线讲述我的事情,涉及到一些重要人物的时候会以类似纪传体的方法进行单独的叙述。
此外因为一些客观和主观的原因,我的私人事迹几乎无人知晓,所以这次回顾将会进行全面的叙述,预计会进行很长的连载,估计连载结束时间为:2005年5月28日,也正好是我在War3CN注册3周年纪念日,一个目前我还唯一能保留和我的魔兽行为相关的准确日期。(修订附记:最后实际完成时间为5月15日,提前了两周)
最后,我是工科学生,已经有很长时间没有写文章,文笔不到之处还请大家包涵。
壹 闲人的生活
我进入大学是2001年秋,2002年春夏正是大一下半学期,这时大学的基础课程压得很紧,又如何能和“闲人”联系得上?
时间必须倒流到2002年元旦凌晨0点10分,我成为某医院2002年第二个住院者,住院原因是踢足球导致腓骨骨折。1月5日我动了手术,脚踝打入3根钢钉,1月13日出院回校参加期末考试;后经过一个寒假的观察,我被确定无法正常参加大一下半学期的正常活动因而直接被判“重刑”--休学一学期。此事件留下两个后遗症:从此我不敢再踢足球;我同届的同学以后都叫我学弟……
既然不上课,又不能活动,我就成了典型吃白饭不做事的大闲人。父母为了让我能接触更多的东西,在家装了10M LAN宽带上网,这也是我接触魔兽的开始。
有了宽带的便利,我开始尽情在网上冲浪,过得无比悠闲自在,几乎忘记了脚上厚厚的石膏和骨头里的钢钉。很快地,大约是三、四月份吧,我在魔兽的beta被破解为可以试玩的时候第一时间下载了beta版以及升级包和破解补丁。由于界面上基本参考了星际争霸的样子,虽然场景变成了3D,但对于早接触过3D游戏的我来说画面并没有特别惊艳之处,感觉还是很容易就上手了。
一开始只能联网打,我找不到人和我玩,只好对着游戏主菜单干瞪眼。后来总算出现了有电脑AI的单机破解,不过是外挂的.ai文件,现在想来那就是Jass AI脚本吧(我没有打开看过,猜测而已),虽然我现在对它是非常熟悉,但那时还是一点都不懂这些东西。渐渐地,随着魔兽Beta版本的更新,Crack居然也越来越强大,最后把主菜单的所有显示项都破解了而且可以进行战网联机游戏了(当然前提还是要有测试Beta CDKEY)。此时又一个我现在非常熟悉的东西出现在我面前--战网私服,这是我接触War3CN的伊始,也标志着一个闲人结束了整日在网上像没头苍蝇一样乱转的游手好闲的生活。
本篇后记:关于我受伤的事情,当时知道的网友还是有一些的,不过现在的朋友中知道的很少,所以稍微介绍了一下,后面仍将有部分章节简述以后疗伤方面的一些关键事迹,大家现在有什么疑问可以等以后的章节。:) (众人怒曰:有强行拉人看本文的嫌疑!)
本篇时段魔兽界大事年表:
2002/01/07 Beta测试注册开始
2002/02/07 Beta测试开始
2002/02/08 Beta 1.02发布
2002/02/13 Beta 1.03发布
2002/03/04 Beta 1.10发布
2002/03/16 Beta 1.12发布
贰 疯狂的春天
艾略特在他的文中写道:“四月是最残酷的季节。”但在我看来,2002年的那个四月是最疯狂的,而这个疯狂一直延续到了六月初。
疯狂的开始就是我开始研究Battle.net私服,记得最初在二月就有支持魔兽的BnetD出现(也就是后来臭名昭著的WarForge,此乃后话,赞且不提)。在中国开始宣传流行还是在四月。对于那时的我来说,网络服务器是一种很新鲜的事物,在此不得不先介绍一下我自己之前这方面的学习经历:
小学2年级接触PC,3年级学习BASIC,中学学习Pascal参加OI,凭借仅知的穷举2大算法回溯和递归居然混进省前二十两次,大学开始学习C半年就休学在家。当时主要用Delphi和BCB做程序,但还没有做过达到可以称为软件的大程序。
当时我接触到的软件基本都是应用型,碰到这种服务器型Daemon式的软件觉得很新鲜也很有趣,所以就迷上了研究怎么进行服务器配置等,不过还没有想到去看软件的源代码。好奇的种子毕竟不是没有办法生根,对我来说这颗种子对我的意义之大,或许在当时无论如何也想象不到吧,但现在的我每次想到那时的情形,都不得不由衷地感谢BnetD作者群为我的人生带来如此迅速而巨大的转折。
支持魔兽的BnetD不是本来的BnetD小组的产品,而是一些其他开发者通过研究魔兽的协议而修改的BnetD,它的另一个名称上面已经说了,叫做WarForge。国内出现用于公众网络的WarForge服务器应该是在三月吧,比我初次接触它还要早。我当时在研究者中算是后辈,于是在一些国内外的论坛认真研究别人介绍的方法,学习一些C/S结构的基本原理和观念和运用于联机游戏时的一些变化等。后来我在某个外国论坛参与了一些讨论,当时我已经开始使用Soar作为网名和论坛帐号。不过在国内,我还没有认识各路神人,参与相关的讨论等,只是在一些地方根据下载连接等找到外国的相关站点。
随着渐渐已能适应脚踝里钢钉的感觉,已经不知不觉到了5月。在当时看来是几乎投入全部精力研究魔兽私服战网游戏的情况下,我也同时在一些公众私服上练习玩魔兽,不过水平一直提不高,这一点和我星际打得还不赖比实在是有点丢人,不过当时心思完全放在研究服务器上可能也是导致玩得不好得原因之一吧。在这个春末,魔兽Beta也出现了几个关键的版本更新,WarForge也不断升级提升稳定性和完善功能,我也在摸爬滚打中掌握了一些自己的心得技巧。
当时父母一直说休息在家的我不应该游手好闲,该学点什么对以后有帮助的东西.而我正沉迷于魔兽Beta中,于是我决定从魔兽开刀做点什么东西。而从此也拉开了我制作魔兽周边软件的序幕。
叁 处女作风波
由于经验的匮乏,当然是先拿小软件开刀。当时我选中的就是魔兽的服务器Gateway修改器。所谓的Gateway,在官方就是那4个服务器:US.West,US.East,Asia,Europe,而对于私服来说则要通过修改Gateway列表来添加它们的ip使得客户端能连接过去。那时候的几个服务器Gateway修改器显然都是一些研究破解/数据包分析的高手兼职做的,界面繁复,比较难上手,而且都是英文版的。于是我决定做一个简单易用而且有中文版本的Gateway修改器。
同样由于经验的匮乏,我想了几天才决定了软件的名字,叫做BNet Gateway Editor,在现在看来实在是一点创意都没有,不过当时我的想法是软件名只有充分体现软件的作用才能在初期为人所接受,当然后来我才知道事情不一定是这样,一些奇怪或者夸张的名称也能引起他人的好奇和关注。
大概是用了三五天的样子,完成了第一个版本,用的是RAD两巨头之一Delphi。为什么没有使用VB?说起来我学习BASIC应该更早才是,这个就要讲到当时我的几个心态,一方面我不喜欢编译好的可执行文件需要Runtime文件,另一方面我一直觉得VB的语法以及功能实现上比较差(三年后的今天还要加上一条:速度太慢),故直接舍弃了VB。Delphi的VCL编程还算熟练,而编程中的主要困难就是分析注册表中数据的结构,其中包含星际争霸、暗黑2和魔兽的3个注册表项。
第一个版本发布前我一直在思考应该发在什么地方,最后还是决定国内外都发一下,于是在当时国内影响最大的War3CN论坛里注册了帐号Soar(之前我虽然经常去看东西,但是没有注册帐号),发布了中英文两个语言版本,而在国外某论坛只发了英文版。这天就是值得我纪念的5月28日,而Soar这个帐号也就一直沿用了下来。(修订附记:关于Soar这个帐号名的来源,是汉堂公司著名战棋游戏炎龙骑士团2的主角的名字)
当时软件的界面非常简单,用了个固定大小的小窗口,使用了文本、按钮和列表三个最简单的控件拼起来的。不过也很容易理解,操作很方便,当时受到了一定程度的欢迎。这令我有了一点信心,于是根据一些人的建议,进行修正和改进,在短短两周内发布了多个版本。当然这也是经验匮乏的表现,有时候甚至一个不严重的小修正也要发个新版,后来参与团队开发后我才理解到定义软件发布周期的方法。
大约是在6月10日前后,一个所有程序员应该都碰到过的惨事发生在了我头上(不用说也是经验不足导致),我在重装系统时未备份就直接格式化了工程源代码所在的分区,导致2周多的辛苦付之东流。我因此而非常沮丧,一度有退出开发研究其它东西的想法。或许当时如果我那么做了,我和魔兽的缘分也就止于做一个玩家了吧……然而在这时两件事情把我挽救了回去。
本篇时段魔兽界大事年表:
2002/05/04 Beta 1.30发布
肆 初见正式版
第一件事是魔兽正式版的出现,虽然Blizzard声明7月上市,但是6月14日盗版已经流了出来(由此体会到内奸的可怕之处),我第一时间从0day的ftp上下载到了游戏的ISO镜像。正式版的质量果然和Beta完全不一样,不仅各种bug基本消除,和硬件的兼容性也得到了质的飞跃,对显卡的要求也有所降低。当然还有一点现在想来也是很佩服的,那就是电脑的AI,当时单机和电脑对战,发现电脑的AI和那些Beta破解的AI比强横得有些吓人,比星际也强了无数,我打了10盘才侥幸赢了一次,于是开始慢慢总结心得,并寻找适合自己的种族,不过最后还是没有发现什么特别适合我的种族,大概就是那种菜鸟级的人的通病吧,我一直到现在还是Random的。与此同时,支持正式版的私服软件也迅速诞生,WarForge升级支持不说,还有另一个从BnetD改进的服务器软件也出现在大家的眼前,记忆中是叫War3GaSM(修订附记:经过调查已经确认是这个名字,看来我记性还不差)。我当然也毫不犹豫地投入服务器的研究中去,不过当时花的时间不多,主要是因为那第二件事,
第二件事就是参加CET4的考试。因为休息在家父母总是说我要学这个学那个,于是帮我报了CET4,我当时觉得CET4很简单,再说我在国外论坛和别人讨论也没有什么也没觉得怎么困难,CET4还不用放在眼中。但是在父母面前总得做做样子,所以每天抽几个小时在房间里研究CET4单词和考卷(其实一半以上时间在睡觉),最后参加考试时还比较得心应手,尤其作文题目居然是My Use of Computer,这实在是太便宜了我,三下五除二就写完了。CET4迎考一方面通过一个时间段缓解了我心中丢失源代码的郁闷,另一方面也让我心情愉快了不少,所以考完后在各论坛也渐渐活跃起来。
在这段活跃的时间里,我认识了几个对我后来有很大影响的人,其中我觉得最重要的一个就是Ranyon,人称“蛋蛋”,当年War3CN的土皇帝。Ranyon这个帐号的来源,说起来也真是无奈,居然是蛋蛋把星际中人族将军的名字Raynor拼错了,-_-!从War3CN成立到正式版出来那段时间,War3CN论坛最活跃的一直是蛋蛋兄,他基本上每个月发贴量在2000以上,我注册时已经达到了五位数,但是其中却没有多少是灌水,基本是讨论和回答别人的问题(我比较讨厌重复回答相同的问题,这点我很佩服蛋蛋兄的耐心),就这点来说还算是很称职的管理员。此后我在和他的交流互相学习了不少东西,而他也对我在某些问题的认识和洞察力非常的吃惊,所以一直很看重我对于一些东西的看法。
当时War3CN算是比较守法的论坛,不随便提供盗版的信息,不过还是有一些地下形式的讨论和疑难解答,都是关于已经出现的盗版正式版的,虽然置顶和精华都还是Beta,那时基本上就是蛋蛋为主,我辅助进行一些解答工作(还有几个人,比如Ayumi等留待以后介绍)
很快地,我们成为了War3CN疑难解答区的双璧,而魔兽的正式版也终于上市了,那天是7月2日。仿佛盛大的节日一般,War3CN发贴量剧增,大家终于可以公开进行正式版的讨论,所以各个都兴奋不已,而我也在这样欣喜的气氛中下了个新的决定……
本篇时段魔兽界大事年表:
2002/06/13 Blizzard宣布魔兽正式版压盘(Gold)
2002/06/14 Razor1911放出盗版的魔兽正式版1.00
2002/06/25 官方魔兽Beta测试结束
2002/07/02 魔兽正式版和Collection Edition在北美和欧洲同时上市,同时发布1.01补丁
伍 成功的无奈
为了提高自己,我决定用完全重写Gateway编辑器,并且使用更多的控件和更多的功能,但能保持原来的简单易用性。在这种情况下,BNetEditor就诞生了。
制作BNetEditor大约用了一周的时间。当时正好是脚伤好到基本可以下地开始练习走路的时候,所以每天都在写程序写到苦恼的时候撑着拐杖在家里转圈思考(受伤前我就有踱方步思考的习惯)。因为之前编写BNet Gateway Editor的经验,整个内核用了不到2天就完成了,之后都是在不断地修整界面,增加功能,提供了常见服务器列表,选择性导出为注册表等诸多功能。大约是在7月8日前后的样子,BNetEditor的Beta版放出。
起初并没有多少人关注BNetEditor,大家仍然使用BNet Gateway Editor为主,不过经过了几天的置顶,收到了一些玩家的反馈和意见,我更新了若干个Beta版本后,渐渐地受到较多人的注意,慢慢都转用BNetEditor,看到大家的支持和使用反馈,我觉得投入的心血都是值得的。在经过一次自认为是完整的bug修正后我发布了1.0正式版,结果在几小时内就发现了严重bug(测试经验不够的典型),于是立即发布1.01版进行修正,然后第二天又发布了1.02,才算是把bug真正的除尽。当时我对于这种情况觉得比较尴尬,不过广大玩家倒是比较宽容,对于最后的版本给予不错的评价。
这个周期的开发对于我来说是学得最快最多的一个时段,短短1个月不到的时间里,我对软件开发的认识简直有了质的飞跃,所学所得超过了以前的总和。在我现在看来,那个夏天的经历,无疑是引导我人生的一个转折。没有那个夏天,就没有现在的我,更没有大家现在看到的我的很多作品。
打响名声不仅仅因为我做出了BNetEditor,在War3CN论坛的讨论中我经常扮演关键解释和分析的角色,得到了很多玩家的欣赏和“盲目崇拜”(或许大家觉得崇拜是正常的,但是我个人非常不喜欢这种感情倾向,我喜欢和别人像朋友一样交谈,乃至争论,后来这种习惯曾被人称作以身份压人,也算是很无奈的事情,这是后话)。
无奈就在这时出现了,蛋蛋因故有几天无法上网,要找人代理版主,于是就招上了我。我这人在思想上是很倾向于中国古时的道家思想,喜欢无拘无束的出世生活,只在必要的时候出现,平时过些平静闲适的生活是我的终极追求。而且我又非常的怕麻烦,也就是不喜欢做自己觉得多余的事情,一般人称之为“懒惰”。然而我又非常重视朋友的情谊,所以当被交予这个任务的时候,我非常严肃地告诉蛋蛋我接受这个任务但在他回来后要立即把权利拿回去,我立即洗手不干。他有求于我当然一口答应,想不到这次算是上了个不大不小的当。他回来的时候居然说让我继续挂着版主,不想管可以不管,我看推不掉,也只能苦笑着接受,后来一直就被扣上版主的帽子没除掉。
尽管我是非常的无辜和无奈,当时的魔兽却是势不可挡,连续几周拿下北美销售的冠军,预订了无数的年度大奖,Blizzard再次证明了他们慢工出细活的强大实力(跳票之王只有对游戏质量的承诺不会令人怀疑)。国内外无数魔兽站点如雨后春笋冒出来,而在一个偶然的机会,我在一个国外的魔兽站点上看到了一个软件,这个软件又把我引导向了新的开发方向……
本篇时段魔兽界大事年表:
2002/07/19 1.01B补丁发布
2002/08/01 魔兽成为7月北美和全球销售第一的游戏
陆 分析与研究
这个软件的作者是BlackDick(一个很强的人,现在仍然很活跃,而且我每次看到这个名字都有爆笑的冲动,想必大家也一样,呵呵),名称是repinfo,版本好似是0.03,能够查看魔兽Replay的基本信息如游戏版本,地图名称等。当时我就很感兴趣,原来Replay的内容是可以解析出来的。
可是我自己用UltraEdit(以前修改游戏存档专用,^_^)打开Replay看却是完全的乱码,根本没有规则的字符串在里面,当时我觉得应该是内容被加密了,于是向BlackDick讨教Replay格式。第二天BlackDick就发布了repinfo 0.06并且附带了一个Replay文件基本格式信息的文档。我迫不及待地进入研究--原来不是加密,只是将Replay的内容按照0x8000字节分块用zlib压缩了而已(当时BlackDick只指出第一个压缩块,后来我才知道其实Replay是由连续的压缩块组成)。repinfo 0.06已经能够分析出参与的玩家,只不过在格式解释里比较含糊。
看来只有自己研究了,一动手就卡壳了,用Delphi的TUncompressStream解压replay的压缩块的时候异常报错。好在经过一个月的锻炼已经觉得走路比较顺畅,脚踝里的钢钉的感觉已经是若有若无,所以常常踱步苦思,经过两天的研究,我发现虽然报错但是解压出来的数据是正确的,用try/final直接忽略异常就可以成功解压出来,终于实现了关键步骤的突破。然后我把解压出来的内容存入二进制文件,再次祭出UltraEdit进行分析,然而分析到游戏名和地图名那里却卡住了,这里有一些奇怪的字符,使得字符串像是被分裂和扭曲的样子。一时间研究不透,我想就先把研究出来的部分做成软件吧。
首先当然是写分析replay的引擎,由于已经解决了解压问题,可以说是一帆风顺。然后界面上用的还是古老的固定大小窗口和控件列状排列,反正是初始版本,讲究一个完成度,而不是实际效果。最终定名为Replay Info Viewer,大约在8月下旬的样子发布,这个最初版本只能说是提供了基本的信息显示,甚至连参与玩家信息的显示都非常的不完整。而我因为那个卡壳的问题一直解决不了,也很郁闷,渐渐在论坛的发贴量也大了起来。感觉在论坛讨论确实能在一定程度上疏解心中的不快,和那种喝酒消愁的感觉很相似。这段时间我已经的称号已经变成了“大大”或者大虾,当时确实有一种自己的成就被人认可的欣喜,这也是能消缓那些郁闷的另一个原因吧。
在这种不爽的心情的影响下,我当时在论坛以版主的身份定了一些严格的版规,比如禁止重复提问等等,还大量删贴,那段时间有点过于严厉的管理当然招致一定的反感,后来过了一段时间当我能很理智地面对以前地事情的时候,终于认识到了版主需要的不仅是规矩,而且要能刚柔并济,非必要时应当保持一定的宽容。
然后,开学的时间渐渐近了(隐约记得那年交大新生是9月7日开学吧,我休学后得重读大一,所以跟新生一起……-_-!)。这时,Replay分析界的又一巨头的出现终于使得困惑我许久的问题迎刃而解……
本篇时段魔兽界大事年表:
2002/08/08 暴雪首个MapHack惩罚声明
2002/08/15 1.02补丁发布
柒 重回校园
时间应该是在9月初的样子,一个帐号为klieg的人出现在我的眼前,他整理出了一个新的replay文档,对我碰到的那个奇怪的字符串部分格式进行了详细的解释(现在他的站点还在:warcraft.kliegman.com,上面仍然有一些replay的工具,而cvs里有较为新的replay格式文档,当然,此后最新的文档都是我更新的。修订附记:就在4月底那里的官方文档又更新了,感谢blue和nagger的勤奋)。由于加密方式比较奇怪,所以我读了几遍才明白,再拿来几个replay进行验证无误,总算是长出一口气。在klieg的文档中介绍了讨论replay格式的论坛所在站点:shadowflare.gameproc.com(原来的域名是shadowflare.ancillaediting.net,后在2003年10月改为现在的),此后我就常常去那里参与讨论,参与和见证了replay格式一步步被分析出来的全过程。
我抓紧上学前的几天时间赶紧把需要完成的部分代码写好,发布了应该是最后一个版本的Replay Info Viewer,时间恰好是去上学报名的前面一天晚上(此后我经常在假期最后一天晚上发布软件,貌似已经成为习惯,^_^)。
当时repinfo也被放在War3CN论坛里,大家经过比较后还是觉得repinfo界面好,但是由于Replay Info Viewer更为简洁,而且是中文的。所以总算最后反响还不错,也有很多人问我如何研究出格式的,我就把文档给他们看,结果大多数人在解压缩部分就看不懂,剩下的基本上在那个字符串加密的地方也卡壳了,当时我只能感叹能认真深入研究的人实在太少(现在的情况稍有好转,在中国已经有.NET的Replay分析库被做出来,还有很多人能看懂文档并和我讨论)。
那么replay文件中后面的数据是什么?当时还没有人研究出来,我经过几次分析后也没有什么头绪,加上到了学校上网困难,也就没有下文了,想不到这个东西一放就是将近一年……
每日过着寝室-课堂两点一线的生活,我偶尔去网吧上上网,比较多的上网方法是去上一届原来一起的同学那里上网,他们大二后都已经通网了。那段时间我在War3CN的活跃度有所下降,不过在很多魔兽相关开发论坛的出没却有不减反增的趋势,特别是对私服软件的研究更为深入,并且渐渐对服务器和游戏的通信等有了深入的认识。同时,我对私服软件的历史则有了个大概的了解,能够区分各种服务器之间的联系和不同发展道路。
当时国内的私服有3大阵营,一个是星际服务器,通常用FSGS;第二个是暗黑服务器,通常用BnetD-thread+D2CS/D2DBS或者他们的GUI整合版BnetW,最后一个就是BnetD第三方改版WarForge等。其中FSGS不是开放源代码的,无从研究其代码,而BnetD-thread和WarForge等都是BnetD的改版,前者是为了支持暗黑2开发的一个简易高效版本,修改者是中国的高手onlyer和faster,后者是为了支持魔兽而开发的,作者群一直是神神秘秘的。不过这也难怪,因为当时Blizzard正在告BnetD侵权,所以风声很紧,谁也不想当出头鸟。不过WarForge的作者因为擅自使用原来的BnetD原来的源代码而不遵守前者的GPL而被排斥,因而一直不能算是“得意”。在这种形势下,得到BnetD官方认可的后继者,现在真正的暴雪服务器软件王者-PvPGN终于出现了……
本篇时段魔兽界大事年表:
2002/09/07 1.02A补丁发布
2002/09/08 Blizzard首次惩罚MapHacker,关闭20000帐号及对应CDKEY
2002/10/09 1.03补丁发布
2002/10/11 Blizzard删除大批使用Disconnect Hack的帐号战绩
捌 徘徊与摸索
PvPGN的出现导致了一次服务器软件大换代,WarForge迅速淡出私服界(半年后又卷土重来,不过已经不成气候,此乃后话),我的研究重点自然也迅速转移。
那时候PvPGN发布时都是附带源代码的,可惜我那会儿C用得极少,大概加起来也就学了几周的样子,信心本就不太足,再看源代码一大堆约百多个文件就晕了,不知道从何下手的好。在代码堆里转了约莫几天的样子实在是无从理解,没奈何只有先放弃看源代码,稍稍研究服务器的架设以及游戏端的配置的技巧。这些东西对我来说已经不是什么大的难题,说研究是好听,其实也就是无聊之中摆弄一下而已。
当时War3CN和奥美关系不错,有不能明着支持私服的宣传,所以在版上至多只能简单地含沙射影几句,或讲讲游戏的服务器列表怎么改(当然是用BNetEditor,^^)。教育网内讨论私服的也只有清华的几个BBS,而且很多也管得比较紧。当时blueink(教育网最大的魔兽服务器,一直延续至今)已经架设好,只是我上网条件的限制,还不知道它的存在。在我和blueink有交集前很长的一段时间,我也就是“单干”,一直小打小闹,始终没有什么像样的东西弄出来。不过我继承了自己一向的习惯,把自己的知识向广度里扩展,对各种服务器软件进行了一定程度的研究。那段时间也就是摸摸魔兽私服,再看看暗黑封闭战网的架设原理,回头甚至还翻翻FSGS对Westwood游戏的支持情况,也就是这样在第一个学期的前两个月里迷惘地徘徊着。
那段时间里PvPGN推出了pvpgn-stats,一个php网页脚本式的排行榜页面,相当于官方的ladder排名页面。这倒是引起了我对网页脚本尤其是php的极大兴趣,开始摸索着汉化pvpgn-stats,甚至有自己重新实现一个的冲动,这个冲动到很晚才实现。不过php的知识迅速地积累了起来,成为了日后的宝贵财富,也是我之后办起个人主页的技术基础。
那段时间胡乱摸索的另一个方面就是mpq的技术。说起研究mpq,还得从replay格式说起,讨论replay格式论坛所在的站点就是shadowflare开的,shadowflare就是sfmpq的作者,我在那里看他的页面时对mpq产生了一定的兴趣,后来又在creationcampaigns(现在已经关了,以前是很著名的星际站点)看到了Quantom写的Inside MoPaQ,从而基本能理解mpq的结构原理。简单地说来,mpq文件的格式就是一种压缩格式,把多个文件压缩在一个数据文件里(很多公司的游戏,比如KCET的实况足球,奥汀的三国群英传都是用的类似的技术存储数据),使用时再进行文件的读取。当时几个著名的mpq处理库为lmpqapi,sfmpq和storm.dll函数入口,前两者因为能够修改mpq的内容而被广泛用于各种Blizzard游戏硬修改中,至于storm.dll的函数入口则因为良好的兼容性主要用于读取文件。那时候最流行的三个mpq工具则是winmpq,mpqview和mpq2k,各具特色而且使用都比较简单。后来我有幸能制作自己的mpq工具也是因为多次使用它们后想综合大家的优点并提高运行效率,当然这又是很久以后的事情了。
在这样近乎于停滞不前的状态下,我在War3CN认识了Rance,一个可以说是对我产生最大影响的朋友,由此我终于开始在私服界活跃起来。
本篇后记:回想起来,从七月到十月,短短四个月,我自己无论是精神状态还是技术能力都发生了天翻地覆的变化,基本可以说是从一个玩家变成了一个魔兽周边技术的入门者(大家不用对这个词有所微辞,当时有onlyer,sousou等前辈高人在,自己确实只能算入门者)。
本篇时段魔兽界大事年表:
2002/10/22 官方战网在线人数突破5万,注册用CDKEY超过百万
玖 战网联盟
其实具体的时间我已经记不清楚,不过第一次看到Rance在War3CN的出没应该是在魔兽1.02补丁出现的前后,之后到1.03补丁出现时我们有了一些接触。Rance是著名论坛“人品问题”(www.rpwt.org)的管理员,当时对魔兽的私服也很感兴趣,自己架设了一个。
当时他和同在上海的我接触时主要是讨论一些服务器架设的问题,后来我们又认识了无锡和广州的两个朋友(具体名字已经不太记得了,希望两位见谅)。此后大家越来越熟,再加上当时3个服务器的人数都比较多,很多限于国内网络条件无法上战网玩的人都来玩了,所以很快大家形成了一种要合作共同宣传的意向。而我则因为制作BNetEditor和研究pvpgn-stats等私服战网关键技术而受命做技术支持。后来Rance让我做二把手。我以前一直没有什么领导团队的经验,所以也就是纯技术工作为主,大家的合作等内容交给Rance处理。
在这样的形势下,我采用了自动更新技术和新的可伸缩界面的登录器很快地做了出来,其实也就是BNetEditor采用服务器列表在线更新和绑定指定服务器做成的。那时我们几个人在MSN上进行了一次小的商谈,最终确立组织的名字为Union of Chinese Warcraft Servers,简称UWS,中文名是中国魔兽服务器联盟。这个登录器就命名为UWS服务器登录器。
当时Rance在上海热线游戏频道的工作比较轻松,白天管理UWS,晚上还能玩玩CS,有时我也去凑凑热闹。在最初的一段时间里UWS的表现可以说是比较平淡,用户群基本还是原来在3个服务器上的那些,宣传开展后也没有多出多少人。面对这种情况,我们又开了一次会议,一方面由我负责加快技术方面的开发,而Rance则加大宣传力度。在这段时间里,Rance和奥美的人接触过,奥美方面说只要不支持盗版就不会加以干涉,所以我们名义上要求使用正版登陆战网。不过明眼人一看就知道,这其实根本是无法控制的,而且中国的盗版玩家又这么多(我虽然有正版但是平时因为不上战网所以还是用盗版cdkey的)。
接下来我负责的两个项目就是中文化的pvpgn-stats和tracker。前者我命名为PvPGN-Ladder,最初是为UWS编写的内部版本,是参考pvpgn-stats用php重写,经过若干次的修正和测试后已经可以成功地进行联盟3个服务器的直接访问和信息采取,因而将我们的ladder像官方战网那样按照不同的服务器整合到了同一个网站上便于浏览。至于tracker,首先要解释一下这个工具的作用。当时BnetD类服务器都有tracker工具,也就是从各个服务器收取带有各自服务器信息的UDP数据包并列表的工具,不过都是*nix版本的。我研究了tracker数据包的格式并做了一个win32的tracker,从而能让UWS能将各服务器的信息列表显示。当时很多服务器都把信息目标地址指向我们的tracker,很快联盟的声势得到了空前的壮大,而各服务器的在线人数也迅速飚升。加上PvPGN服务器的不断改进,稳定性不断提高,服务器的运行效率也受到了玩家群的肯定。
UWS的论坛也建了起来,我虽然是管理员之一,其实也只是管管技术和一些私服爱好者研究研究。当时发了一些技术方面文章,后来曾有一篇介绍战网指令很受欢迎被四处转载。
不过很快到来的期末考试令我不得不停止手上的一些工作进入复习,而广大学生玩家也因同样的理由而暂时离开了魔兽。因此UWS在这个时段内出现了一定程度的衰落。
本篇后记:昨晚有点事没能写,所以早上没有发,晚上特负荆请罪连写两篇
本篇时段魔兽界大事年表:
2002/11/04 1.04补丁发布
拾 新年的决心
期末考试完后,放假的我反而更加忙碌,首先要全力恢复UWS的不景气现状,然后要根据自己的意向再学点什么新的东西。当然War3CN那边也不能搁下,放假后论坛气氛空前高涨,管理起来自然也是要累一些。
在这种情况下我在开发方面的主要方向还是PvPGN-Ladder,顺带开始研究mpq的格式等深入的技术。在年前我碰到了Kane和他的朋友Guru。他们两个以前都是参与FSGS开发的,后来因为FSGS也和BnetD一样没落,所以改换门庭干脆自己做服务器软件,命名为BNCHN,不过是只有他们内部使用的,而且和FSGS/PvPGN用文件/mysql数据库不一样的是他们直接使用了承载能力更好的Oracle因而在性能上更为优异,当然前提条件是对服务器配置的要求也比较高。当时用他们的优化内容主要就是用内存换速度。那时BNCHN在中国有3个服务器北京,包头和云南,和UWS很像。Rance曾经想和他们合作,我也想看看他们的BNCHN到底是怎么样的,不过商谈没有什么建树,后来就搁下了,不过我倒是和他们聊上了,讨论了很多技术问题。
那段时间我非常向往他们那种团队合作开发的经历,也很欣赏一些优化技术,所以后来慢慢开始学习代码优化,然后拿Replay Info Viewer开刀开始改进代码,命名为W3RepInfo。
很快年关过去了,过年那几天大家都比较忙,我也没有做多少自己的事情,也就是疯吃疯玩而已。等到恢复正常的习惯后我忽然似乎有了更多的想法,通过和kane等人的交流,我认识到了真正的高手对待代码的一种态度。就在此时此刻,我终于下定决心要把PvPGN的代码看懂。
因为PvPGN是基于BnetD的,所以我先从BnetD的内核部分开始看起。当时BnetD已经关闭但是cvs里的东西没删,所以我把cvs里的东西导出来慢慢阅读。BnetD没有什么开发文档,所以基本上一小半是看注释,一大半是自己分析源代码。当时的我没有什么网络应用程序开发,也没有跨平台的开发经验,身边也没有个高手指点,所以看起来非常的吃力,很多东西要不停地google进行理解。时间也就这样不知不觉地过去,一看就是看到开学。
在这段时间里,UWS的发展已经停滞不前,我们几个管理员之间的联系因为过年的关系非常的少,甚至一度失去联络。后来慢慢地网站就冷了下来。当时我仍然在更新PvPGN-Ladder,不过也没有更多的可以进一步吸引玩家的方法,所以虽然苦恼但也无计可施(好在还有私服源代码可以研究,不至于郁闷加无聊形成他人常说的自杀的条件,^_^)。
开学前我又找到了官方的组织,也就是PvPGN的IRC,并且开始在上面活跃,参与了很多讨论,英语水平也因此没有出现退步现象(一些人进了大学后英语退步是很正常的事情。-_-)。并且还认识了dizzy和amadeus,两个在PvPGN开发之中至关重要的人物。他们当时也对我看源代码提供了很大的帮助。值得一提的是amadeus正在为PvPGN做win32的GUI,我借机学了不少Windows和界面相关的API。
本篇后记:很多事情的过程我都记得不太清楚,但是技术上的细节却倒背如流,到底我的记忆力是好还是不好?为之一叹!
本篇时段魔兽界大事年表:
2003/01/31 1.05补丁发布
拾壹 个人主页
很快寒假过去了,我又做了一次手术把脚踝里的钢钉拔除,不过伤口还要慢慢愈合,所以走路还是一瘸一拐的。伤好了也算是好事,所以适应一下也就无所谓了,况且我又是坐着搞技术居多。那段时间我在War3CN活动不多,精力都投在代码研究上,很多消息的传递都是靠的论坛另一消息灵通人士Ayumi,1.05出来后很多东西都是他在处理(最终证实他是男性是在很久以后,当时一直有人叫他玉米姐姐,这年头论坛人妖实在是多啊……)
假期后,UWS日渐式微,我们几个管理人员之间的联系也是困难重重,Rance他们工作上都忙了起来,而我也几乎是每天全天在搞技术工作。后来虽然没有正式解散,但是大家渐渐淡出,UWS也就慢慢消失了。
回想整个UWS,虽然不能说是昙花一现,但也是没有持续多少时间,总得来说责任在于没有统一的管理和发展机制,各个合作者基本还是各自为政,缺乏必要的交流。尽管存在这样那样的缺陷,我仍然从中学到了不少东西,比如一些合作的方法,管理的知识等等,尽管都是皮毛,但比之不懂来说却已经是进了一大步。
随着UWS的湮灭,那边的论坛已经没有人气,War3CN又不是技术为主的论坛,这时要找一个能讨论技术的地方是当务之急。几经斟酌和考察,最终我选择了架设自己的网站,一方面便于发布一些自己制作的东西,另一方面有自己的论坛进行讨论。
这次总算是一个我能记得住的日期,2003年3月6日,我终于成功地注册了自己的域名有了自己的空间。在3月初我已经开始写自己的网页php脚本以及后台,论坛是直接用的IPB,一直到3月11日才正式写完,于是马上公布了自己的个人主页并开始宣传。新的网站自然要点东西来吸引广大网友,我的定位是技术,所以在3天之内传了onlyer最新的D2GS,自己学习php时做的php Replay Info Viewer等等。
那时W3RepInfo也写到了关键的地方,我把mpq技术整合进去并直接使用ijl(Intel JPEG Library)库从魔兽的地图中读取小地图显示,而mpq库用的是ActiveX控件MPQ Control,用起来感觉还不错,只是对ActiveX这个技术一直有心结,总觉得效率不行。3月中旬把W3RepInfo2发出来后受到好评,我的网站访问人数也迅速上升。论坛里讨论技术的人也慢慢有了,虽然还是很少。
当时冰封王座的Beta在3月3日刚刚发布,前10天只有内测用户能玩,不过在3月15日晚上支持Beta的PvPGN和对应Loader都出来了,这对于正苦恼没有东西往网站上放的我来说无疑是大好消息,立即上传。因为魔兽的成功,国内Beta测试的热情非常高涨,私服的出现使得很多人开始研究如何架设私服进行游戏,于是网站的访问人数成功上升了一大步,只不过由于没有自己的拳头产品,而且私服这些东西用户群毕竟不大,所以到底还是有较大的局限性。
撇开我的网站不说,当时PvPGN也有了一个对手,就是用Java重写的WarForge,不开放源代码且只架设了2个服务器。那时据很多内部人员说WarForge无耻地直接转换了BnetD的代码到Java,完全违反GPL,遭到大量的指责。那时我还没有接触OSD(Open Source Development,开放源代码开发),趁这个事件好好学习了一下一些OSD的基本常识,倒也是获益匪浅。
此后一段时间完全可以说是我最忙的时期,主要原因是校内有一个同学拜托我做事,于是进入了忙到crazy的四月……
本篇后记:终于写完了一整年的事情,看来不用到5月28日就能写完了,不过后面的事情记得更清楚,可能每章节时间跨度会小一点,;)
本篇时段魔兽界大事年表:
2003/02/28 TFT Beta提供下载
2003/03/02 TFT Beta300升级开放,测试正式开始
2003/03/15 TFT Beta 303
2003/03/22 TFT Beta 304
拾贰 朋友的事
在这里要介绍一下交大的另一位校友,现在魔兽界的大哥级人物zax,应该也是在那个学期初认识的吧,之前在War3CN论坛虽然也聊过,但是还互相不是很认识。后来知道他是我学长后就聊得多了,然后知道他是Replays.Net的站长,于是我们两个网站交换了链接。当然RN最后发展成这样的国际顶尖replay站点可以看出zax个人的能力和影响力。简单介绍一下zax,当时上海交大的魔兽战队C_a(Cyber Arena)的队长,之前星际就打得很好,玩魔兽用UD,非常强,当时的交大战队几员战将也是非常的厉害,战队几乎是所向披靡。zax自己则是创立了Replays.Net及社区。
这段时间和zax也就是交流而已,麻烦我做事的是另一个朋友blueskyer,当时交大暗黑战网的管理员。他托我改进BnetD-thread并制作一些战网需要的网页。当时我对BnetD的研究已经比较深入,大部分代码都已经完全理解,PvPGN的增加部分代码也已经在慢慢阅读中,所以改进来说并没有太大难度,主要的障碍是我自己的C语言功力尚浅。我慢慢为BnetD-thread增加了一些实用的命令,增加了好友系统,写了win32-GUI(练习一下GUI编写,其实自己觉得还是*nix效率高得多)。后来发布在自己的页面上。当时只有清华的紫霞在用onlyer做的d2gs内部最新版本,外面的战网一般都是用不稳定的老版本。所有其它战网都要和onlyer/faster联系才能取得内部版本,主要是为了防止用于一些商业用途(onlyer受一些搞商业运作的私服战网所害被blizzard列为重点控诉对象,所以难免手段偏激,当时虽然大家都不解,但是这么多时间下来相信大家也能够理解他的无奈了吧)。不过后来还是在小范围被泄漏了出来,交大也拿到了这个内部版本并且架设起了战网,而我则要把BnetD-thread对新的D2GS特性的支持代码和自己做的修改合并起来,一段时间内一度非常的吃力,不断测试服务器并修正bug,直到确认够稳定才敢正式投入使用。
忽然想到一些题外话,当时服务器端怎么被泄漏出来的,很多人说是faster被朋友出卖,之后1.10的贩卖案好似也是这么一回事,反正d2gs这个东西先后引起了不小的争执,直到一年后d2gs 1.10放出才算是一个真正的了结。不过从这些争执上不难看出onlyer的实力。如果没有onlyer,恐怕大家根本没有任何玩到暗黑封闭战网的希望吧,他绝对是国内暗黑得以发扬光大的当之无愧的英雄啊。
bnetd-thread改进的同时,我也正在着手制作PHP D2 Manager,一个网页管理程序,可以让管理员直接进行服务器的管理和log查看,也能让玩家登陆对自己的帐号进行一定的管理。当时在交大测试并且发布在自己的主页上。
好像尽说暗黑的事情了,说说魔兽方面吧,这段时间主要花在看PvPGN代码,在IRC和开发者们交谈以及研究Beta的一些东西上。由于Beta和原版的战网列表是放在注册表的不同位置,所以我打算做一个Beta版用的Gateway Editor。
本篇时段魔兽界大事年表:
2003/03/30 TFT Beta 305
2003/04/10 TFT Beta 306
2003/04/20 TFT Beta 309
2003/05/04 TFT Beta 311(中间部分版本的发布时间已无从考证)
拾叁 非典与专注
2003年的4月还有一件非常重大的事情,那就是非典在中国的大规模爆发,进而引发的一系列社会防疫活动。最终我们这些学生只能在学校度过五一劳动节假期,甚至一直到期末考试都不能离开学校(当然特殊情况可以打申请)。对于大多数学生来说应该是噩梦吧,毕竟不能出去活动是很难受的,只有少量迷网游的,以及我这样每天坐电脑的才会不为所动吧。其实对于我来说,甚至能更为激发自己的一种专注,全身心地投入研究中去(还有一个关键原因是人心惶惶,大家都逃课,老师上课也提心吊胆,所以平时不用去上课,每天都是从早上一直弄到晚上)。
TFT Beta版的Gateway Editor就是在这种情况下诞生的。由于以前的开发经验,只用了不到一天的时间就制作完成并放出,命名为War3X Gateway Editor,质量也得到了玩家的认可。不过因为技术上没有使用任何新的东西,所以自己也觉得比较无聊,这个软件只更新了几个版本进行了小的bug修正就宣告final了(而且Beta测试结束后就没用了,当然不用更新得多勤快)。
过了劳动节后,各宿舍楼之间已经禁止走动,加上无法出校门,本楼的网络又没通,所以上网产生了极度的困难。当时的精力只好放在服务器代码研究上。由于投入的精力很大,我甚至已经可以理解BnetD-thread对于BnetD的修改部分所产生的优化作用,还在PvPGN中发现了一些bug。在理解PvPGN支持的telnet协议后我又制作了Battle.net VBot,现在已经成为教育网私服blueink/md4u上某些人挂机的标准工具。
研究代码对我的C语言功力提高的帮助是巨大的,而且通过对daemon这种极度需要性能优化的服务器软件的代码的理解使我对代码优化产生了浓厚的兴趣,来说这也直接影响了日后我写代码的风格。
此外,我在自己的机器上架设了web服务器后继续做PHP D2 Manager和PvPGN-Ladder,然后在五月的某一日躲过暗哨悄悄潜入大二宿舍楼上网更新网页并帮学校暗黑战网的管理员更新服务器/网页。想起那时所冒的风险,简直就像地下党,后来谈起这事我和同学不免都是苦笑不已。后来第二次去的时候采用了闯楼的方法,跑得比楼管理员快,溜进了某朋友的寝室躲了一会儿,然后再转战暗黑战网管理员的寝室上网,这说起来就是一种惊险刺激行为了,不过为了更新网页以及帮朋友做事还是值得的。
当然一直研究这些东西也难免无聊,于是我终于拾起将近一年没有研究的Replay格式开始重新研究。而在六一儿童节这天我们楼的网络终于通了(选这天通网也实在是够幽默的),我终于又回到了全天候的上网的状态。就在这个燥热的六月,我在shadowflare的论坛和blue兄聊上了,他就是第一个基本完成Replay信息格式分析的人……
本篇时段魔兽界大事年表:
2003/05/13 TFT Beta 312
2003/05/29 1.06补丁发布
2003/05/30 TFT Beta 314
拾肆 初夏的惊雷
和blue兄聊上是因为看到他和我在做一样的事情--分析Replay的所有数据格式。不过没有想到的是认识几天后,大概是6月5日的样子他就发布了一个w3g_format.txt的文档,里面叙述了基本上可以说是比较完整的Replay格式,虽然action(动作区块)部分没有具体讲解。当时我就知道离完全分析不远了,于是立即投入到一起研究的队伍中去,一同参与的还有Nagger,和Julas。我们这几个人也就是后来Replay格式分析的4人组,之后还有mike兄也作出了不小的贡献。
大概是一周的时间吧,其实我自己没有帮上什么忙,只有很少的突破性进展,不过一周后blue石破天惊地发布了完整的action(动作)部分的具体格式,不得不佩服他的技术能力。我立即开始写自己的测试代码并进行bug检查。后来经过几次讨论blue又修正了几次文档,并且逐渐完善。
这时的我还没有着手开始开发新的Replay的工具,一方面格式文档虽然已经基本成型,但是还有一些东西还是unknown(未知),需要进一步分析;一方面要准备期末考试;最主要的还是另一个方面,也就是魔兽资料片TFT正式版(其实外国很多都是叫FT,前面那个The不知道谁加上去的……)的横空出世。
此次盗版TFT的出现要比暗黑和魔兽原版晚得多,5月29日压盘,6月18日才出现在0day的ftp上,然后很快传播到当时刚刚崛起的BT上。记忆中那时不知道0day的全部冲向BT,估计当时TFT的种子和下载者到现在为之都是无人能破的记录吧,种子数到达过数万,下载人数到达过6位数。那时觉得ftp慢所以也选择了BT,只看到硬盘满负荷运转,学校的100M LAN带宽利用率奇高,下载速度平均达5Mb/s。3天之后又是一次具有网络大堵塞性质的疯狂下载,对象是中文版的TFT,对于不懂英文的玩家来说可以说是福音,不过奥美翻译质量实在是不敢恭维(大家公认,相信没有多少异议),所以我还是坚持用英文版。
下到TFT后当然是马上投入游戏,打完任务再玩新的melee地图(当时还没有想到研究地图编辑器的新功能,开始研究地图编辑器又是一个一年以后的故事)。而PvPGN和BNCHN都迅速升级支持了TFT正式版。当时BNCHN还委托我写了BNCHN Starter,也就是UWS战网登录器的一个翻版而已,所以没用多少时间,再说期末考试临近本来也用不上多少时间去做这个东西。
这个初夏的冲击实在是一波接着一波,上个月的无聊一扫而空,暗黑那边的事情已经顾不上了,魔兽这方面的事情又多又杂,一边做事一边还在思考自己下一个要做什么,连考试都是迷迷糊糊的差点写错东西。
考完时已是6月末,当时非典事件渐渐平息,本以为要被关在学校没想到已经可以回家了。前面不能出校门没法买票,最后买黄牛票我也忍了,做在回乡的火车上,我一边和同乡兼同学聊天,一边在心中盘算暑假的计划。最后敲定第一个要完成的是BNetEditor的续作BNetEditor 2。
本篇后记:终于要写到2003年7月了,对我来说绝对是我的魔兽史上最重要的一个月,请大家拭目以待。
本篇时段魔兽界大事年表:
2003/05/29 TFT 正式版压盘(Gold)
2003/06/18 FLT放出TFT英文正式版
2003/06/21 TFT中文正式版出现(发布组织不详,疑为TLF)
拾伍 大作的诞生
BNetEditor 2的基本目标是界面的改变,使用更为流行的样式和更为便捷的操作,并且增加对更多游戏的支持。这些对我来说其实已经是比较简单的东西,所以几天就写完了,发布了几个Beta就发了final,感觉上也没有什么可改进,不过后来证明程序还是有一些奇怪的bug,我自己也一直没有空去检查,再加上前作太流行,该作并没有受到想象中的欢迎,所以后来我自己评价各个作品时,把这个看成是失败作品。
此后酝酿的就是更大的计划,做一个分析魔兽Replay动作以及APM的软件,也就是W3G Master计划。说起这个名字,还要感谢zax,当时我不太会为软件起名,和几个人商量,zax建议用这个名字,我一拍大腿说这个名字不错,于是就定下来了,后来就发展成为了一个Master系列的软件。
W3G Master内部Beta出现的时候正赶上jca的w3chart出世。当时我感觉双方各有所长,我胜在分析速度,他胜在细节功能。因此我没有发布公开版本,只是给蛋蛋,zax等少数好友进行内部测试调整,他们也发现了很多bug并提出了很多好的建议。到0.5的时候支持了所有单位的显示,批量改名等功能并有了中文语言后我才于7月19日发布了第一个公开Beta版本,该版本一出现就在国内市场完全压倒w3chart,迅速成为玩家的新宠,这应该是我有史以来做得最受欢迎的软件吧。当时看到大家对它的赞誉,心理上还是非常满足的,而且也受到激励要继续改进和完善这个软件。
要说这个软件的存在意义,恐怕我自己没有各位擅长Ladder的玩家了解得多吧,反正当时Replay动作分析出现后引起的震动是非常巨大的,引起了很多关于动作合理性以及APM高低等不同方面的讨论,而我作为一个APM仅120-150的菜鸟玩家,也只能在旁边傻笑,既然自己对此没有什么深刻体会,也就没有什么可以发言的了。
或许一开始写这个软件只是为了研究的新的技术吧,不过能有这样的影响却大大超出了我原先的设想,随之而来的压力也就倍增。当时收到很多玩家的反馈和建议,我要慢慢分析其中的bug原因以及建议的合理性和现实性,然后进行下一轮改进。暑假也没有什么事情,除了高中同学聚会和玩之外就完全投入这方面的开发,基本和最初做软件一样几天一个版本地迅速更新。然而想不到的是7月24日1.0正式版发布的时候又犯老毛病留下两个致命bug,所以第二天立即发布了1.01这块遮羞布,只能感叹自己的不细心。
特别介绍一下我在开发软件中用的工作组Quixotic Yawl Studio这个名字,3个单词的首字母就是我名字3个字的声母字母。故意取了这样一个名字,纯粹好玩。再透露一点就是Soar Chin中的Chin=秦,也就是我姓秦,;)
W3G Master是我学习开发中的第二个关键转折,由这个软件开始我开始使用一些良好的开发习惯,比如记录TODO,history,进行代码结构设计和优化等等。
本篇后记:对于我来说W3G Master的规模也算不上大作,不过大家都把他看成我的第一大作,所以我就这么写了。
本篇时段魔兽界大事年表:
2003/07/01 TFT正式版发布并同时发布1.10升级补丁
2003/07/15 TFT 1.11补丁发布
2003/07/30 TFT 1.12补丁发布
拾陆 另一个方向
在发布了W3G Master 1.01后,基本上就可以算是一个告一段落的成品,在开始下一循环的开发前我还是先去研究一些其它东西拓展自己的视野。
首先还是回到PvPGN,随着PvPGN 1.5的发布,功能已经基本稳定,剩下的就是补充没有实现的官方战网的一些功能。当时我放下Replay这一块后稍微有了点时间,加上对PvPGN的源代码已经非常了解,所以就尝试去实现战网的多语言功能。当时一起帮忙翻译的还有另一位朋友KingoM。提到KingoM,当然又得好好介绍这位对我帮助很大的朋友。他是华中科技大学的战网的管理员,那个战网命名就是KingoM,是现在教育网除了MD(原blueink)外最大的战网,我和他认识后就一直探讨PvPGN的技术,后来他为我提供了cvs进行多语言翻译的存放(虽然也就用了几天,不过还是要谢谢他),他也帮忙翻译了一些内容。由于他的帮忙,PvPGN的多语言版本终于能在7月底我的生日及时发布。PvPGN 1.5 final发布后我又立即做了对应的多语言版本,之后因为各个版本改进较大,而且我的实现方法也比较麻烦,所以我就没有继续做这个多语言的版本。
真正开始研究MPQ,是从那个八月初开始的。当时我在www.zezula.net接触到了Ladik写的开放源代码的StormLib,一下子就着迷了,立即投入代码的研究中去。Ladik是继Quantum后第二个独立破解出MPQ格式的人,而且比Quantum更强的是放出了一个开放源代码的库。另外值得一提的是athena2000.myrice.com这个站点的站长,他也独立研究出了MPQ的格式,也是我非常佩服的一个人。我当时研究MPQ的格式基本就是参考这两个人的网站上的一些叙述和StormLib的源代码。
MPQ的格式简单地来说就是一个压缩包,只不过加入了索引和加密验证等各种加速和安全结构,使得游戏中的读取快捷方便,操作上也比较容易控制。当然,安全结构还是使得破解相对麻烦了点,也难怪破解者这么受人尊敬,我自己则是一个标准的菜鸟,对破解一窍不通(本来此时就应该把擅长破解的esper大虾拉出来介绍,不过考虑到他还没有和我的故事有交集,所以留到以后吧)。
一开始研究MPQ格式只是直接使用StormLib,写了MPQ2003,一个不需要任何外部dll的MPQ命令行软件,功能上来说至少我自己觉得比较满意,MPQ2k能做的它都能做,还增加了一些功能。
做MPQ2003大概是经过了20天的样子,一直到1.32就连源代码也发布了。这段时间里我又和当时清华战网blueink的管理员shentimmy和Aruth认识,并且聊得还比较多。在TFT推出后blueink很快就用最新的PvPGN支持了,他们有些技术上的问题和我探讨。shentimmy是那时清华smth战队的队长,Aruth则是负责服务器为主。
假期的最后一天依然是猛写代码,发布了MPQ2003 1.5。之后终于迎来了大二的生活……
本篇后记:回答一下replays.net上某人关于UWS和BNCHN的提问:UWS最后因为缺乏管理和人气,大家又都很忙,最后Rance只好关闭这个组织。BNCHN的衰落具体情况我也不清楚,要问那些人,总体来说原因也是差不多吧。
本篇时段魔兽界大事年表:
2003/08/15 TFT销售突破百万
拾柒 团队活动
上大二之后认识了很多学校CA战队的同学,当然是zax介绍的功劳,不过一直是一个地下组织,没有自己的根据地和组织结构。后来到社团招新的时候上海交大的电子竞技联盟终于被校团委批准成立,CA战队也就作为它的魔兽部门。之所以用“终于”这个词,主要还是因为社团通过申请还是非常不容易的,学校一直对电脑游戏保持有害的观点。不过非点期间因为大家不能户外运动,团委和几个社团联合举办的线上比赛取得了不错的效果,从一定程度上改变了这些观点,最后才算是通过这个申请。由于大学里玩电脑游戏的人数量实在不少,所以最后招收了不少社团成员。
电子竞技联盟第一次大会的召开具体时间已经不太记得,只知道是一个晚上,先是各游戏(CS/星际/魔兽/KOF等)部门部长在zax的安排下按照次序发言,后面才是“行政”部门发言,技术部放在最后,记得当时我还想招几个成员做点事,后来留了联系方法居然回头太忙忘了,而且后来技术部确实从来没做过事情,实在汗颜。
后来又举办了电竞协会的第一次比赛,我去当魔兽组的裁判,并感觉到自己第一次融入了学校的集体活动,毕竟以前一直都是单干,能和大家一起活动的机会是不多的。这次团队活动也影响了我之后的一个决定,留到下两篇再讲
一边处理社团活动我自然也没闲着,Replay部分W3G Master几乎是几天一个版本,从1.1更新到1.7只用了短短一个月时间,其间根据julas和我的一个讨论增加了随机种族判断,其实很简单,判断一个人第一个造的农民的类型;根据一些玩家的要求增加了Replay信息输出功能;增加了nagger和blue的文档补充的大量动作区块;最重要的改进就是在1.5和1.6先后增加的APM曲线图和单位统计直方图,这也是实现了原本w3chart的一个优势功能。
MPQ方面的开发也是齐头并进,MPQ2003因为和某工程名冲突所以改名为MPQEx,代码不断改写增强,发布了1.6。背后悄悄进行的还有MPQ Workshop的开发,这是一个图形化的MPQ操作工具,目标是速度快,界面操作友好。基本界面参考windows的资源管理器和WinRAR的长处,不过后来停了好长时间,那时都忙在PvPGN上了,这是后话。
至于服务器软件研究方面,PvPGN所有的代码都已经读完,开始在PvPGN的开发IRC里和开发团队进行开发方面的深入讨论。当时PvPGN的成员Pandemonium很照顾我(后来我做地图就用这个名字,其实最初是他用的,^_^),经常和我研讨,也指点我一些本来我虽然看过去了但是不太明白的东西。老大dizzy和windows开发牛人amadeus还是经常神龙见首不见尾,只能偶尔逮住他们聊几句。
国内部分主要是参与blueink的建设和改进,shentimmy和aruth甚至放心地把服务器的远程管理帐号给我用,我自然不能辜负他们的期望(知道我重义气所以来套我-_-),一边管理服务器一边进行少量的代码更新,其间还多次获得了宝贵的崩溃bug并汇报给了PvPGN开发小组。KingoM那边一直和我聊得很欢,更新什么也很勤快,不过因为blueink光芒太耀眼,KingoM只能作为blueink崩溃重启时的临时服务器用。
9月结束后我就回到了家过国庆节,很难得地没能在最后假期一天发布软件,不过还是完成了W3G Master 1.8的大部分功能,然后就迎来了又一个忙碌的十月……
本篇后记:好像从头到尾都在忙,这也没有办法,我这个人就是闲下来就觉得无聊,或许因为环境差也是原因,许多人整天磨网游或者陪女朋友逛街,我这两个爱好都没有(其实后者是没有条件,而且觉得大学的时间应该抓紧研究技术,女朋友的事容后再谈),只好一直忙下去了。
拾捌 团队开发
国庆节回到学校后我连夜赶工,把计划中的1.9要实现的功能也实现了,在第二天发布了W3G Master 1.9,实现了所有直方图,增加了显示聊天记录等功能。W3G Master开发到这个程度功能上基本上算是告一段落,所差的只是一些bug修正而已。
此后的一周可算是过得浑浑噩噩,每日上上网到各个论坛去看看东西,再和朋友聊聊天,基本没看进行开发工作,时间基本放在看PvPGN最新的改进上。终于某一天看到了遗留产品MPQ Workshop,想到这个东西还没开发完,于是起手开始做,距离W3G Master 1.9 两周后才发布了MPQ Workshop 0.5,三天后迅速完善功能发布0.6。MPQ Workshop因为中文化以及极高的速度(快于当时的所有MPQ GUI工具)而受到国内用户的亲睐,不过还留下一些bug,特别是批量解压。然而此后该工具一放又是半年……
进入11月的时候和另两个好友Aydge(阿吉兄)和smallthing开始聊得多了起来,Aydge是现在www.stormcity.cn的站长,其战网也就是原
关于标题
这个标题是参考我喜爱的《银河英雄传说》7-4《解放,革命,谋略及其它》起的,没什么别的意思,也就是把我要说的3个方面简单列举而已,当然关键是几者之间的关联,;)
零 写在前面的话
写这段的目的在于重新整理思路,并让大家对我写下回顾时的心情有所了解。
我一开始接触魔兽是在Beta测试阶段,可以说是第一批玩魔兽的人,当时是以什么样的心情来看待这个游戏的?我现在已不得而知,唯一还能保留的记忆就是我是因为喜欢Blizzard以前的游戏所以第一时间接触了beta阶段的魔兽。或许是激动,又或许是习惯于Blizzard游戏的一贯质量而能保持一种自然的平静,三年之后回头看那时的我,只能感叹时光匆匆,转眼间物是人非,留下的只是淡淡的怀念。
有道是万事开头难,所以这篇文章的开头我一直不知道如何入手,再想到那句“从哪里来就回到哪里去”,我决定从我作为第一批玩魔兽的玩家开始讲述自己的故事。至于是纪事本末体,纪传体还是编年(月/日)体,我想应该是前面两种混合吧,主线讲述我的事情,涉及到一些重要人物的时候会以类似纪传体的方法进行单独的叙述。
此外因为一些客观和主观的原因,我的私人事迹几乎无人知晓,所以这次回顾将会进行全面的叙述,预计会进行很长的连载,估计连载结束时间为:2005年5月28日,也正好是我在War3CN注册3周年纪念日,一个目前我还唯一能保留和我的魔兽行为相关的准确日期。(修订附记:最后实际完成时间为5月15日,提前了两周)
最后,我是工科学生,已经有很长时间没有写文章,文笔不到之处还请大家包涵。
壹 闲人的生活
我进入大学是2001年秋,2002年春夏正是大一下半学期,这时大学的基础课程压得很紧,又如何能和“闲人”联系得上?
时间必须倒流到2002年元旦凌晨0点10分,我成为某医院2002年第二个住院者,住院原因是踢足球导致腓骨骨折。1月5日我动了手术,脚踝打入3根钢钉,1月13日出院回校参加期末考试;后经过一个寒假的观察,我被确定无法正常参加大一下半学期的正常活动因而直接被判“重刑”--休学一学期。此事件留下两个后遗症:从此我不敢再踢足球;我同届的同学以后都叫我学弟……
既然不上课,又不能活动,我就成了典型吃白饭不做事的大闲人。父母为了让我能接触更多的东西,在家装了10M LAN宽带上网,这也是我接触魔兽的开始。
有了宽带的便利,我开始尽情在网上冲浪,过得无比悠闲自在,几乎忘记了脚上厚厚的石膏和骨头里的钢钉。很快地,大约是三、四月份吧,我在魔兽的beta被破解为可以试玩的时候第一时间下载了beta版以及升级包和破解补丁。由于界面上基本参考了星际争霸的样子,虽然场景变成了3D,但对于早接触过3D游戏的我来说画面并没有特别惊艳之处,感觉还是很容易就上手了。
一开始只能联网打,我找不到人和我玩,只好对着游戏主菜单干瞪眼。后来总算出现了有电脑AI的单机破解,不过是外挂的.ai文件,现在想来那就是Jass AI脚本吧(我没有打开看过,猜测而已),虽然我现在对它是非常熟悉,但那时还是一点都不懂这些东西。渐渐地,随着魔兽Beta版本的更新,Crack居然也越来越强大,最后把主菜单的所有显示项都破解了而且可以进行战网联机游戏了(当然前提还是要有测试Beta CDKEY)。此时又一个我现在非常熟悉的东西出现在我面前--战网私服,这是我接触War3CN的伊始,也标志着一个闲人结束了整日在网上像没头苍蝇一样乱转的游手好闲的生活。
本篇后记:关于我受伤的事情,当时知道的网友还是有一些的,不过现在的朋友中知道的很少,所以稍微介绍了一下,后面仍将有部分章节简述以后疗伤方面的一些关键事迹,大家现在有什么疑问可以等以后的章节。:) (众人怒曰:有强行拉人看本文的嫌疑!)
本篇时段魔兽界大事年表:
2002/01/07 Beta测试注册开始
2002/02/07 Beta测试开始
2002/02/08 Beta 1.02发布
2002/02/13 Beta 1.03发布
2002/03/04 Beta 1.10发布
2002/03/16 Beta 1.12发布
贰 疯狂的春天
艾略特在他的文中写道:“四月是最残酷的季节。”但在我看来,2002年的那个四月是最疯狂的,而这个疯狂一直延续到了六月初。
疯狂的开始就是我开始研究Battle.net私服,记得最初在二月就有支持魔兽的BnetD出现(也就是后来臭名昭著的WarForge,此乃后话,赞且不提)。在中国开始宣传流行还是在四月。对于那时的我来说,网络服务器是一种很新鲜的事物,在此不得不先介绍一下我自己之前这方面的学习经历:
小学2年级接触PC,3年级学习BASIC,中学学习Pascal参加OI,凭借仅知的穷举2大算法回溯和递归居然混进省前二十两次,大学开始学习C半年就休学在家。当时主要用Delphi和BCB做程序,但还没有做过达到可以称为软件的大程序。
当时我接触到的软件基本都是应用型,碰到这种服务器型Daemon式的软件觉得很新鲜也很有趣,所以就迷上了研究怎么进行服务器配置等,不过还没有想到去看软件的源代码。好奇的种子毕竟不是没有办法生根,对我来说这颗种子对我的意义之大,或许在当时无论如何也想象不到吧,但现在的我每次想到那时的情形,都不得不由衷地感谢BnetD作者群为我的人生带来如此迅速而巨大的转折。
支持魔兽的BnetD不是本来的BnetD小组的产品,而是一些其他开发者通过研究魔兽的协议而修改的BnetD,它的另一个名称上面已经说了,叫做WarForge。国内出现用于公众网络的WarForge服务器应该是在三月吧,比我初次接触它还要早。我当时在研究者中算是后辈,于是在一些国内外的论坛认真研究别人介绍的方法,学习一些C/S结构的基本原理和观念和运用于联机游戏时的一些变化等。后来我在某个外国论坛参与了一些讨论,当时我已经开始使用Soar作为网名和论坛帐号。不过在国内,我还没有认识各路神人,参与相关的讨论等,只是在一些地方根据下载连接等找到外国的相关站点。
随着渐渐已能适应脚踝里钢钉的感觉,已经不知不觉到了5月。在当时看来是几乎投入全部精力研究魔兽私服战网游戏的情况下,我也同时在一些公众私服上练习玩魔兽,不过水平一直提不高,这一点和我星际打得还不赖比实在是有点丢人,不过当时心思完全放在研究服务器上可能也是导致玩得不好得原因之一吧。在这个春末,魔兽Beta也出现了几个关键的版本更新,WarForge也不断升级提升稳定性和完善功能,我也在摸爬滚打中掌握了一些自己的心得技巧。
当时父母一直说休息在家的我不应该游手好闲,该学点什么对以后有帮助的东西.而我正沉迷于魔兽Beta中,于是我决定从魔兽开刀做点什么东西。而从此也拉开了我制作魔兽周边软件的序幕。
叁 处女作风波
由于经验的匮乏,当然是先拿小软件开刀。当时我选中的就是魔兽的服务器Gateway修改器。所谓的Gateway,在官方就是那4个服务器:US.West,US.East,Asia,Europe,而对于私服来说则要通过修改Gateway列表来添加它们的ip使得客户端能连接过去。那时候的几个服务器Gateway修改器显然都是一些研究破解/数据包分析的高手兼职做的,界面繁复,比较难上手,而且都是英文版的。于是我决定做一个简单易用而且有中文版本的Gateway修改器。
同样由于经验的匮乏,我想了几天才决定了软件的名字,叫做BNet Gateway Editor,在现在看来实在是一点创意都没有,不过当时我的想法是软件名只有充分体现软件的作用才能在初期为人所接受,当然后来我才知道事情不一定是这样,一些奇怪或者夸张的名称也能引起他人的好奇和关注。
大概是用了三五天的样子,完成了第一个版本,用的是RAD两巨头之一Delphi。为什么没有使用VB?说起来我学习BASIC应该更早才是,这个就要讲到当时我的几个心态,一方面我不喜欢编译好的可执行文件需要Runtime文件,另一方面我一直觉得VB的语法以及功能实现上比较差(三年后的今天还要加上一条:速度太慢),故直接舍弃了VB。Delphi的VCL编程还算熟练,而编程中的主要困难就是分析注册表中数据的结构,其中包含星际争霸、暗黑2和魔兽的3个注册表项。
第一个版本发布前我一直在思考应该发在什么地方,最后还是决定国内外都发一下,于是在当时国内影响最大的War3CN论坛里注册了帐号Soar(之前我虽然经常去看东西,但是没有注册帐号),发布了中英文两个语言版本,而在国外某论坛只发了英文版。这天就是值得我纪念的5月28日,而Soar这个帐号也就一直沿用了下来。(修订附记:关于Soar这个帐号名的来源,是汉堂公司著名战棋游戏炎龙骑士团2的主角的名字)
当时软件的界面非常简单,用了个固定大小的小窗口,使用了文本、按钮和列表三个最简单的控件拼起来的。不过也很容易理解,操作很方便,当时受到了一定程度的欢迎。这令我有了一点信心,于是根据一些人的建议,进行修正和改进,在短短两周内发布了多个版本。当然这也是经验匮乏的表现,有时候甚至一个不严重的小修正也要发个新版,后来参与团队开发后我才理解到定义软件发布周期的方法。
大约是在6月10日前后,一个所有程序员应该都碰到过的惨事发生在了我头上(不用说也是经验不足导致),我在重装系统时未备份就直接格式化了工程源代码所在的分区,导致2周多的辛苦付之东流。我因此而非常沮丧,一度有退出开发研究其它东西的想法。或许当时如果我那么做了,我和魔兽的缘分也就止于做一个玩家了吧……然而在这时两件事情把我挽救了回去。
本篇时段魔兽界大事年表:
2002/05/04 Beta 1.30发布
肆 初见正式版
第一件事是魔兽正式版的出现,虽然Blizzard声明7月上市,但是6月14日盗版已经流了出来(由此体会到内奸的可怕之处),我第一时间从0day的ftp上下载到了游戏的ISO镜像。正式版的质量果然和Beta完全不一样,不仅各种bug基本消除,和硬件的兼容性也得到了质的飞跃,对显卡的要求也有所降低。当然还有一点现在想来也是很佩服的,那就是电脑的AI,当时单机和电脑对战,发现电脑的AI和那些Beta破解的AI比强横得有些吓人,比星际也强了无数,我打了10盘才侥幸赢了一次,于是开始慢慢总结心得,并寻找适合自己的种族,不过最后还是没有发现什么特别适合我的种族,大概就是那种菜鸟级的人的通病吧,我一直到现在还是Random的。与此同时,支持正式版的私服软件也迅速诞生,WarForge升级支持不说,还有另一个从BnetD改进的服务器软件也出现在大家的眼前,记忆中是叫War3GaSM(修订附记:经过调查已经确认是这个名字,看来我记性还不差)。我当然也毫不犹豫地投入服务器的研究中去,不过当时花的时间不多,主要是因为那第二件事,
第二件事就是参加CET4的考试。因为休息在家父母总是说我要学这个学那个,于是帮我报了CET4,我当时觉得CET4很简单,再说我在国外论坛和别人讨论也没有什么也没觉得怎么困难,CET4还不用放在眼中。但是在父母面前总得做做样子,所以每天抽几个小时在房间里研究CET4单词和考卷(其实一半以上时间在睡觉),最后参加考试时还比较得心应手,尤其作文题目居然是My Use of Computer,这实在是太便宜了我,三下五除二就写完了。CET4迎考一方面通过一个时间段缓解了我心中丢失源代码的郁闷,另一方面也让我心情愉快了不少,所以考完后在各论坛也渐渐活跃起来。
在这段活跃的时间里,我认识了几个对我后来有很大影响的人,其中我觉得最重要的一个就是Ranyon,人称“蛋蛋”,当年War3CN的土皇帝。Ranyon这个帐号的来源,说起来也真是无奈,居然是蛋蛋把星际中人族将军的名字Raynor拼错了,-_-!从War3CN成立到正式版出来那段时间,War3CN论坛最活跃的一直是蛋蛋兄,他基本上每个月发贴量在2000以上,我注册时已经达到了五位数,但是其中却没有多少是灌水,基本是讨论和回答别人的问题(我比较讨厌重复回答相同的问题,这点我很佩服蛋蛋兄的耐心),就这点来说还算是很称职的管理员。此后我在和他的交流互相学习了不少东西,而他也对我在某些问题的认识和洞察力非常的吃惊,所以一直很看重我对于一些东西的看法。
当时War3CN算是比较守法的论坛,不随便提供盗版的信息,不过还是有一些地下形式的讨论和疑难解答,都是关于已经出现的盗版正式版的,虽然置顶和精华都还是Beta,那时基本上就是蛋蛋为主,我辅助进行一些解答工作(还有几个人,比如Ayumi等留待以后介绍)
很快地,我们成为了War3CN疑难解答区的双璧,而魔兽的正式版也终于上市了,那天是7月2日。仿佛盛大的节日一般,War3CN发贴量剧增,大家终于可以公开进行正式版的讨论,所以各个都兴奋不已,而我也在这样欣喜的气氛中下了个新的决定……
本篇时段魔兽界大事年表:
2002/06/13 Blizzard宣布魔兽正式版压盘(Gold)
2002/06/14 Razor1911放出盗版的魔兽正式版1.00
2002/06/25 官方魔兽Beta测试结束
2002/07/02 魔兽正式版和Collection Edition在北美和欧洲同时上市,同时发布1.01补丁
伍 成功的无奈
为了提高自己,我决定用完全重写Gateway编辑器,并且使用更多的控件和更多的功能,但能保持原来的简单易用性。在这种情况下,BNetEditor就诞生了。
制作BNetEditor大约用了一周的时间。当时正好是脚伤好到基本可以下地开始练习走路的时候,所以每天都在写程序写到苦恼的时候撑着拐杖在家里转圈思考(受伤前我就有踱方步思考的习惯)。因为之前编写BNet Gateway Editor的经验,整个内核用了不到2天就完成了,之后都是在不断地修整界面,增加功能,提供了常见服务器列表,选择性导出为注册表等诸多功能。大约是在7月8日前后的样子,BNetEditor的Beta版放出。
起初并没有多少人关注BNetEditor,大家仍然使用BNet Gateway Editor为主,不过经过了几天的置顶,收到了一些玩家的反馈和意见,我更新了若干个Beta版本后,渐渐地受到较多人的注意,慢慢都转用BNetEditor,看到大家的支持和使用反馈,我觉得投入的心血都是值得的。在经过一次自认为是完整的bug修正后我发布了1.0正式版,结果在几小时内就发现了严重bug(测试经验不够的典型),于是立即发布1.01版进行修正,然后第二天又发布了1.02,才算是把bug真正的除尽。当时我对于这种情况觉得比较尴尬,不过广大玩家倒是比较宽容,对于最后的版本给予不错的评价。
这个周期的开发对于我来说是学得最快最多的一个时段,短短1个月不到的时间里,我对软件开发的认识简直有了质的飞跃,所学所得超过了以前的总和。在我现在看来,那个夏天的经历,无疑是引导我人生的一个转折。没有那个夏天,就没有现在的我,更没有大家现在看到的我的很多作品。
打响名声不仅仅因为我做出了BNetEditor,在War3CN论坛的讨论中我经常扮演关键解释和分析的角色,得到了很多玩家的欣赏和“盲目崇拜”(或许大家觉得崇拜是正常的,但是我个人非常不喜欢这种感情倾向,我喜欢和别人像朋友一样交谈,乃至争论,后来这种习惯曾被人称作以身份压人,也算是很无奈的事情,这是后话)。
无奈就在这时出现了,蛋蛋因故有几天无法上网,要找人代理版主,于是就招上了我。我这人在思想上是很倾向于中国古时的道家思想,喜欢无拘无束的出世生活,只在必要的时候出现,平时过些平静闲适的生活是我的终极追求。而且我又非常的怕麻烦,也就是不喜欢做自己觉得多余的事情,一般人称之为“懒惰”。然而我又非常重视朋友的情谊,所以当被交予这个任务的时候,我非常严肃地告诉蛋蛋我接受这个任务但在他回来后要立即把权利拿回去,我立即洗手不干。他有求于我当然一口答应,想不到这次算是上了个不大不小的当。他回来的时候居然说让我继续挂着版主,不想管可以不管,我看推不掉,也只能苦笑着接受,后来一直就被扣上版主的帽子没除掉。
尽管我是非常的无辜和无奈,当时的魔兽却是势不可挡,连续几周拿下北美销售的冠军,预订了无数的年度大奖,Blizzard再次证明了他们慢工出细活的强大实力(跳票之王只有对游戏质量的承诺不会令人怀疑)。国内外无数魔兽站点如雨后春笋冒出来,而在一个偶然的机会,我在一个国外的魔兽站点上看到了一个软件,这个软件又把我引导向了新的开发方向……
本篇时段魔兽界大事年表:
2002/07/19 1.01B补丁发布
2002/08/01 魔兽成为7月北美和全球销售第一的游戏
陆 分析与研究
这个软件的作者是BlackDick(一个很强的人,现在仍然很活跃,而且我每次看到这个名字都有爆笑的冲动,想必大家也一样,呵呵),名称是repinfo,版本好似是0.03,能够查看魔兽Replay的基本信息如游戏版本,地图名称等。当时我就很感兴趣,原来Replay的内容是可以解析出来的。
可是我自己用UltraEdit(以前修改游戏存档专用,^_^)打开Replay看却是完全的乱码,根本没有规则的字符串在里面,当时我觉得应该是内容被加密了,于是向BlackDick讨教Replay格式。第二天BlackDick就发布了repinfo 0.06并且附带了一个Replay文件基本格式信息的文档。我迫不及待地进入研究--原来不是加密,只是将Replay的内容按照0x8000字节分块用zlib压缩了而已(当时BlackDick只指出第一个压缩块,后来我才知道其实Replay是由连续的压缩块组成)。repinfo 0.06已经能够分析出参与的玩家,只不过在格式解释里比较含糊。
看来只有自己研究了,一动手就卡壳了,用Delphi的TUncompressStream解压replay的压缩块的时候异常报错。好在经过一个月的锻炼已经觉得走路比较顺畅,脚踝里的钢钉的感觉已经是若有若无,所以常常踱步苦思,经过两天的研究,我发现虽然报错但是解压出来的数据是正确的,用try/final直接忽略异常就可以成功解压出来,终于实现了关键步骤的突破。然后我把解压出来的内容存入二进制文件,再次祭出UltraEdit进行分析,然而分析到游戏名和地图名那里却卡住了,这里有一些奇怪的字符,使得字符串像是被分裂和扭曲的样子。一时间研究不透,我想就先把研究出来的部分做成软件吧。
首先当然是写分析replay的引擎,由于已经解决了解压问题,可以说是一帆风顺。然后界面上用的还是古老的固定大小窗口和控件列状排列,反正是初始版本,讲究一个完成度,而不是实际效果。最终定名为Replay Info Viewer,大约在8月下旬的样子发布,这个最初版本只能说是提供了基本的信息显示,甚至连参与玩家信息的显示都非常的不完整。而我因为那个卡壳的问题一直解决不了,也很郁闷,渐渐在论坛的发贴量也大了起来。感觉在论坛讨论确实能在一定程度上疏解心中的不快,和那种喝酒消愁的感觉很相似。这段时间我已经的称号已经变成了“大大”或者大虾,当时确实有一种自己的成就被人认可的欣喜,这也是能消缓那些郁闷的另一个原因吧。
在这种不爽的心情的影响下,我当时在论坛以版主的身份定了一些严格的版规,比如禁止重复提问等等,还大量删贴,那段时间有点过于严厉的管理当然招致一定的反感,后来过了一段时间当我能很理智地面对以前地事情的时候,终于认识到了版主需要的不仅是规矩,而且要能刚柔并济,非必要时应当保持一定的宽容。
然后,开学的时间渐渐近了(隐约记得那年交大新生是9月7日开学吧,我休学后得重读大一,所以跟新生一起……-_-!)。这时,Replay分析界的又一巨头的出现终于使得困惑我许久的问题迎刃而解……
本篇时段魔兽界大事年表:
2002/08/08 暴雪首个MapHack惩罚声明
2002/08/15 1.02补丁发布
柒 重回校园
时间应该是在9月初的样子,一个帐号为klieg的人出现在我的眼前,他整理出了一个新的replay文档,对我碰到的那个奇怪的字符串部分格式进行了详细的解释(现在他的站点还在:warcraft.kliegman.com,上面仍然有一些replay的工具,而cvs里有较为新的replay格式文档,当然,此后最新的文档都是我更新的。修订附记:就在4月底那里的官方文档又更新了,感谢blue和nagger的勤奋)。由于加密方式比较奇怪,所以我读了几遍才明白,再拿来几个replay进行验证无误,总算是长出一口气。在klieg的文档中介绍了讨论replay格式的论坛所在站点:shadowflare.gameproc.com(原来的域名是shadowflare.ancillaediting.net,后在2003年10月改为现在的),此后我就常常去那里参与讨论,参与和见证了replay格式一步步被分析出来的全过程。
我抓紧上学前的几天时间赶紧把需要完成的部分代码写好,发布了应该是最后一个版本的Replay Info Viewer,时间恰好是去上学报名的前面一天晚上(此后我经常在假期最后一天晚上发布软件,貌似已经成为习惯,^_^)。
当时repinfo也被放在War3CN论坛里,大家经过比较后还是觉得repinfo界面好,但是由于Replay Info Viewer更为简洁,而且是中文的。所以总算最后反响还不错,也有很多人问我如何研究出格式的,我就把文档给他们看,结果大多数人在解压缩部分就看不懂,剩下的基本上在那个字符串加密的地方也卡壳了,当时我只能感叹能认真深入研究的人实在太少(现在的情况稍有好转,在中国已经有.NET的Replay分析库被做出来,还有很多人能看懂文档并和我讨论)。
那么replay文件中后面的数据是什么?当时还没有人研究出来,我经过几次分析后也没有什么头绪,加上到了学校上网困难,也就没有下文了,想不到这个东西一放就是将近一年……
每日过着寝室-课堂两点一线的生活,我偶尔去网吧上上网,比较多的上网方法是去上一届原来一起的同学那里上网,他们大二后都已经通网了。那段时间我在War3CN的活跃度有所下降,不过在很多魔兽相关开发论坛的出没却有不减反增的趋势,特别是对私服软件的研究更为深入,并且渐渐对服务器和游戏的通信等有了深入的认识。同时,我对私服软件的历史则有了个大概的了解,能够区分各种服务器之间的联系和不同发展道路。
当时国内的私服有3大阵营,一个是星际服务器,通常用FSGS;第二个是暗黑服务器,通常用BnetD-thread+D2CS/D2DBS或者他们的GUI整合版BnetW,最后一个就是BnetD第三方改版WarForge等。其中FSGS不是开放源代码的,无从研究其代码,而BnetD-thread和WarForge等都是BnetD的改版,前者是为了支持暗黑2开发的一个简易高效版本,修改者是中国的高手onlyer和faster,后者是为了支持魔兽而开发的,作者群一直是神神秘秘的。不过这也难怪,因为当时Blizzard正在告BnetD侵权,所以风声很紧,谁也不想当出头鸟。不过WarForge的作者因为擅自使用原来的BnetD原来的源代码而不遵守前者的GPL而被排斥,因而一直不能算是“得意”。在这种形势下,得到BnetD官方认可的后继者,现在真正的暴雪服务器软件王者-PvPGN终于出现了……
本篇时段魔兽界大事年表:
2002/09/07 1.02A补丁发布
2002/09/08 Blizzard首次惩罚MapHacker,关闭20000帐号及对应CDKEY
2002/10/09 1.03补丁发布
2002/10/11 Blizzard删除大批使用Disconnect Hack的帐号战绩
捌 徘徊与摸索
PvPGN的出现导致了一次服务器软件大换代,WarForge迅速淡出私服界(半年后又卷土重来,不过已经不成气候,此乃后话),我的研究重点自然也迅速转移。
那时候PvPGN发布时都是附带源代码的,可惜我那会儿C用得极少,大概加起来也就学了几周的样子,信心本就不太足,再看源代码一大堆约百多个文件就晕了,不知道从何下手的好。在代码堆里转了约莫几天的样子实在是无从理解,没奈何只有先放弃看源代码,稍稍研究服务器的架设以及游戏端的配置的技巧。这些东西对我来说已经不是什么大的难题,说研究是好听,其实也就是无聊之中摆弄一下而已。
当时War3CN和奥美关系不错,有不能明着支持私服的宣传,所以在版上至多只能简单地含沙射影几句,或讲讲游戏的服务器列表怎么改(当然是用BNetEditor,^^)。教育网内讨论私服的也只有清华的几个BBS,而且很多也管得比较紧。当时blueink(教育网最大的魔兽服务器,一直延续至今)已经架设好,只是我上网条件的限制,还不知道它的存在。在我和blueink有交集前很长的一段时间,我也就是“单干”,一直小打小闹,始终没有什么像样的东西弄出来。不过我继承了自己一向的习惯,把自己的知识向广度里扩展,对各种服务器软件进行了一定程度的研究。那段时间也就是摸摸魔兽私服,再看看暗黑封闭战网的架设原理,回头甚至还翻翻FSGS对Westwood游戏的支持情况,也就是这样在第一个学期的前两个月里迷惘地徘徊着。
那段时间里PvPGN推出了pvpgn-stats,一个php网页脚本式的排行榜页面,相当于官方的ladder排名页面。这倒是引起了我对网页脚本尤其是php的极大兴趣,开始摸索着汉化pvpgn-stats,甚至有自己重新实现一个的冲动,这个冲动到很晚才实现。不过php的知识迅速地积累了起来,成为了日后的宝贵财富,也是我之后办起个人主页的技术基础。
那段时间胡乱摸索的另一个方面就是mpq的技术。说起研究mpq,还得从replay格式说起,讨论replay格式论坛所在的站点就是shadowflare开的,shadowflare就是sfmpq的作者,我在那里看他的页面时对mpq产生了一定的兴趣,后来又在creationcampaigns(现在已经关了,以前是很著名的星际站点)看到了Quantom写的Inside MoPaQ,从而基本能理解mpq的结构原理。简单地说来,mpq文件的格式就是一种压缩格式,把多个文件压缩在一个数据文件里(很多公司的游戏,比如KCET的实况足球,奥汀的三国群英传都是用的类似的技术存储数据),使用时再进行文件的读取。当时几个著名的mpq处理库为lmpqapi,sfmpq和storm.dll函数入口,前两者因为能够修改mpq的内容而被广泛用于各种Blizzard游戏硬修改中,至于storm.dll的函数入口则因为良好的兼容性主要用于读取文件。那时候最流行的三个mpq工具则是winmpq,mpqview和mpq2k,各具特色而且使用都比较简单。后来我有幸能制作自己的mpq工具也是因为多次使用它们后想综合大家的优点并提高运行效率,当然这又是很久以后的事情了。
在这样近乎于停滞不前的状态下,我在War3CN认识了Rance,一个可以说是对我产生最大影响的朋友,由此我终于开始在私服界活跃起来。
本篇后记:回想起来,从七月到十月,短短四个月,我自己无论是精神状态还是技术能力都发生了天翻地覆的变化,基本可以说是从一个玩家变成了一个魔兽周边技术的入门者(大家不用对这个词有所微辞,当时有onlyer,sousou等前辈高人在,自己确实只能算入门者)。
本篇时段魔兽界大事年表:
2002/10/22 官方战网在线人数突破5万,注册用CDKEY超过百万
玖 战网联盟
其实具体的时间我已经记不清楚,不过第一次看到Rance在War3CN的出没应该是在魔兽1.02补丁出现的前后,之后到1.03补丁出现时我们有了一些接触。Rance是著名论坛“人品问题”(www.rpwt.org)的管理员,当时对魔兽的私服也很感兴趣,自己架设了一个。
当时他和同在上海的我接触时主要是讨论一些服务器架设的问题,后来我们又认识了无锡和广州的两个朋友(具体名字已经不太记得了,希望两位见谅)。此后大家越来越熟,再加上当时3个服务器的人数都比较多,很多限于国内网络条件无法上战网玩的人都来玩了,所以很快大家形成了一种要合作共同宣传的意向。而我则因为制作BNetEditor和研究pvpgn-stats等私服战网关键技术而受命做技术支持。后来Rance让我做二把手。我以前一直没有什么领导团队的经验,所以也就是纯技术工作为主,大家的合作等内容交给Rance处理。
在这样的形势下,我采用了自动更新技术和新的可伸缩界面的登录器很快地做了出来,其实也就是BNetEditor采用服务器列表在线更新和绑定指定服务器做成的。那时我们几个人在MSN上进行了一次小的商谈,最终确立组织的名字为Union of Chinese Warcraft Servers,简称UWS,中文名是中国魔兽服务器联盟。这个登录器就命名为UWS服务器登录器。
当时Rance在上海热线游戏频道的工作比较轻松,白天管理UWS,晚上还能玩玩CS,有时我也去凑凑热闹。在最初的一段时间里UWS的表现可以说是比较平淡,用户群基本还是原来在3个服务器上的那些,宣传开展后也没有多出多少人。面对这种情况,我们又开了一次会议,一方面由我负责加快技术方面的开发,而Rance则加大宣传力度。在这段时间里,Rance和奥美的人接触过,奥美方面说只要不支持盗版就不会加以干涉,所以我们名义上要求使用正版登陆战网。不过明眼人一看就知道,这其实根本是无法控制的,而且中国的盗版玩家又这么多(我虽然有正版但是平时因为不上战网所以还是用盗版cdkey的)。
接下来我负责的两个项目就是中文化的pvpgn-stats和tracker。前者我命名为PvPGN-Ladder,最初是为UWS编写的内部版本,是参考pvpgn-stats用php重写,经过若干次的修正和测试后已经可以成功地进行联盟3个服务器的直接访问和信息采取,因而将我们的ladder像官方战网那样按照不同的服务器整合到了同一个网站上便于浏览。至于tracker,首先要解释一下这个工具的作用。当时BnetD类服务器都有tracker工具,也就是从各个服务器收取带有各自服务器信息的UDP数据包并列表的工具,不过都是*nix版本的。我研究了tracker数据包的格式并做了一个win32的tracker,从而能让UWS能将各服务器的信息列表显示。当时很多服务器都把信息目标地址指向我们的tracker,很快联盟的声势得到了空前的壮大,而各服务器的在线人数也迅速飚升。加上PvPGN服务器的不断改进,稳定性不断提高,服务器的运行效率也受到了玩家群的肯定。
UWS的论坛也建了起来,我虽然是管理员之一,其实也只是管管技术和一些私服爱好者研究研究。当时发了一些技术方面文章,后来曾有一篇介绍战网指令很受欢迎被四处转载。
不过很快到来的期末考试令我不得不停止手上的一些工作进入复习,而广大学生玩家也因同样的理由而暂时离开了魔兽。因此UWS在这个时段内出现了一定程度的衰落。
本篇后记:昨晚有点事没能写,所以早上没有发,晚上特负荆请罪连写两篇
本篇时段魔兽界大事年表:
2002/11/04 1.04补丁发布
拾 新年的决心
期末考试完后,放假的我反而更加忙碌,首先要全力恢复UWS的不景气现状,然后要根据自己的意向再学点什么新的东西。当然War3CN那边也不能搁下,放假后论坛气氛空前高涨,管理起来自然也是要累一些。
在这种情况下我在开发方面的主要方向还是PvPGN-Ladder,顺带开始研究mpq的格式等深入的技术。在年前我碰到了Kane和他的朋友Guru。他们两个以前都是参与FSGS开发的,后来因为FSGS也和BnetD一样没落,所以改换门庭干脆自己做服务器软件,命名为BNCHN,不过是只有他们内部使用的,而且和FSGS/PvPGN用文件/mysql数据库不一样的是他们直接使用了承载能力更好的Oracle因而在性能上更为优异,当然前提条件是对服务器配置的要求也比较高。当时用他们的优化内容主要就是用内存换速度。那时BNCHN在中国有3个服务器北京,包头和云南,和UWS很像。Rance曾经想和他们合作,我也想看看他们的BNCHN到底是怎么样的,不过商谈没有什么建树,后来就搁下了,不过我倒是和他们聊上了,讨论了很多技术问题。
那段时间我非常向往他们那种团队合作开发的经历,也很欣赏一些优化技术,所以后来慢慢开始学习代码优化,然后拿Replay Info Viewer开刀开始改进代码,命名为W3RepInfo。
很快年关过去了,过年那几天大家都比较忙,我也没有做多少自己的事情,也就是疯吃疯玩而已。等到恢复正常的习惯后我忽然似乎有了更多的想法,通过和kane等人的交流,我认识到了真正的高手对待代码的一种态度。就在此时此刻,我终于下定决心要把PvPGN的代码看懂。
因为PvPGN是基于BnetD的,所以我先从BnetD的内核部分开始看起。当时BnetD已经关闭但是cvs里的东西没删,所以我把cvs里的东西导出来慢慢阅读。BnetD没有什么开发文档,所以基本上一小半是看注释,一大半是自己分析源代码。当时的我没有什么网络应用程序开发,也没有跨平台的开发经验,身边也没有个高手指点,所以看起来非常的吃力,很多东西要不停地google进行理解。时间也就这样不知不觉地过去,一看就是看到开学。
在这段时间里,UWS的发展已经停滞不前,我们几个管理员之间的联系因为过年的关系非常的少,甚至一度失去联络。后来慢慢地网站就冷了下来。当时我仍然在更新PvPGN-Ladder,不过也没有更多的可以进一步吸引玩家的方法,所以虽然苦恼但也无计可施(好在还有私服源代码可以研究,不至于郁闷加无聊形成他人常说的自杀的条件,^_^)。
开学前我又找到了官方的组织,也就是PvPGN的IRC,并且开始在上面活跃,参与了很多讨论,英语水平也因此没有出现退步现象(一些人进了大学后英语退步是很正常的事情。-_-)。并且还认识了dizzy和amadeus,两个在PvPGN开发之中至关重要的人物。他们当时也对我看源代码提供了很大的帮助。值得一提的是amadeus正在为PvPGN做win32的GUI,我借机学了不少Windows和界面相关的API。
本篇后记:很多事情的过程我都记得不太清楚,但是技术上的细节却倒背如流,到底我的记忆力是好还是不好?为之一叹!
本篇时段魔兽界大事年表:
2003/01/31 1.05补丁发布
拾壹 个人主页
很快寒假过去了,我又做了一次手术把脚踝里的钢钉拔除,不过伤口还要慢慢愈合,所以走路还是一瘸一拐的。伤好了也算是好事,所以适应一下也就无所谓了,况且我又是坐着搞技术居多。那段时间我在War3CN活动不多,精力都投在代码研究上,很多消息的传递都是靠的论坛另一消息灵通人士Ayumi,1.05出来后很多东西都是他在处理(最终证实他是男性是在很久以后,当时一直有人叫他玉米姐姐,这年头论坛人妖实在是多啊……)
假期后,UWS日渐式微,我们几个管理人员之间的联系也是困难重重,Rance他们工作上都忙了起来,而我也几乎是每天全天在搞技术工作。后来虽然没有正式解散,但是大家渐渐淡出,UWS也就慢慢消失了。
回想整个UWS,虽然不能说是昙花一现,但也是没有持续多少时间,总得来说责任在于没有统一的管理和发展机制,各个合作者基本还是各自为政,缺乏必要的交流。尽管存在这样那样的缺陷,我仍然从中学到了不少东西,比如一些合作的方法,管理的知识等等,尽管都是皮毛,但比之不懂来说却已经是进了一大步。
随着UWS的湮灭,那边的论坛已经没有人气,War3CN又不是技术为主的论坛,这时要找一个能讨论技术的地方是当务之急。几经斟酌和考察,最终我选择了架设自己的网站,一方面便于发布一些自己制作的东西,另一方面有自己的论坛进行讨论。
这次总算是一个我能记得住的日期,2003年3月6日,我终于成功地注册了自己的域名有了自己的空间。在3月初我已经开始写自己的网页php脚本以及后台,论坛是直接用的IPB,一直到3月11日才正式写完,于是马上公布了自己的个人主页并开始宣传。新的网站自然要点东西来吸引广大网友,我的定位是技术,所以在3天之内传了onlyer最新的D2GS,自己学习php时做的php Replay Info Viewer等等。
那时W3RepInfo也写到了关键的地方,我把mpq技术整合进去并直接使用ijl(Intel JPEG Library)库从魔兽的地图中读取小地图显示,而mpq库用的是ActiveX控件MPQ Control,用起来感觉还不错,只是对ActiveX这个技术一直有心结,总觉得效率不行。3月中旬把W3RepInfo2发出来后受到好评,我的网站访问人数也迅速上升。论坛里讨论技术的人也慢慢有了,虽然还是很少。
当时冰封王座的Beta在3月3日刚刚发布,前10天只有内测用户能玩,不过在3月15日晚上支持Beta的PvPGN和对应Loader都出来了,这对于正苦恼没有东西往网站上放的我来说无疑是大好消息,立即上传。因为魔兽的成功,国内Beta测试的热情非常高涨,私服的出现使得很多人开始研究如何架设私服进行游戏,于是网站的访问人数成功上升了一大步,只不过由于没有自己的拳头产品,而且私服这些东西用户群毕竟不大,所以到底还是有较大的局限性。
撇开我的网站不说,当时PvPGN也有了一个对手,就是用Java重写的WarForge,不开放源代码且只架设了2个服务器。那时据很多内部人员说WarForge无耻地直接转换了BnetD的代码到Java,完全违反GPL,遭到大量的指责。那时我还没有接触OSD(Open Source Development,开放源代码开发),趁这个事件好好学习了一下一些OSD的基本常识,倒也是获益匪浅。
此后一段时间完全可以说是我最忙的时期,主要原因是校内有一个同学拜托我做事,于是进入了忙到crazy的四月……
本篇后记:终于写完了一整年的事情,看来不用到5月28日就能写完了,不过后面的事情记得更清楚,可能每章节时间跨度会小一点,;)
本篇时段魔兽界大事年表:
2003/02/28 TFT Beta提供下载
2003/03/02 TFT Beta300升级开放,测试正式开始
2003/03/15 TFT Beta 303
2003/03/22 TFT Beta 304
拾贰 朋友的事
在这里要介绍一下交大的另一位校友,现在魔兽界的大哥级人物zax,应该也是在那个学期初认识的吧,之前在War3CN论坛虽然也聊过,但是还互相不是很认识。后来知道他是我学长后就聊得多了,然后知道他是Replays.Net的站长,于是我们两个网站交换了链接。当然RN最后发展成这样的国际顶尖replay站点可以看出zax个人的能力和影响力。简单介绍一下zax,当时上海交大的魔兽战队C_a(Cyber Arena)的队长,之前星际就打得很好,玩魔兽用UD,非常强,当时的交大战队几员战将也是非常的厉害,战队几乎是所向披靡。zax自己则是创立了Replays.Net及社区。
这段时间和zax也就是交流而已,麻烦我做事的是另一个朋友blueskyer,当时交大暗黑战网的管理员。他托我改进BnetD-thread并制作一些战网需要的网页。当时我对BnetD的研究已经比较深入,大部分代码都已经完全理解,PvPGN的增加部分代码也已经在慢慢阅读中,所以改进来说并没有太大难度,主要的障碍是我自己的C语言功力尚浅。我慢慢为BnetD-thread增加了一些实用的命令,增加了好友系统,写了win32-GUI(练习一下GUI编写,其实自己觉得还是*nix效率高得多)。后来发布在自己的页面上。当时只有清华的紫霞在用onlyer做的d2gs内部最新版本,外面的战网一般都是用不稳定的老版本。所有其它战网都要和onlyer/faster联系才能取得内部版本,主要是为了防止用于一些商业用途(onlyer受一些搞商业运作的私服战网所害被blizzard列为重点控诉对象,所以难免手段偏激,当时虽然大家都不解,但是这么多时间下来相信大家也能够理解他的无奈了吧)。不过后来还是在小范围被泄漏了出来,交大也拿到了这个内部版本并且架设起了战网,而我则要把BnetD-thread对新的D2GS特性的支持代码和自己做的修改合并起来,一段时间内一度非常的吃力,不断测试服务器并修正bug,直到确认够稳定才敢正式投入使用。
忽然想到一些题外话,当时服务器端怎么被泄漏出来的,很多人说是faster被朋友出卖,之后1.10的贩卖案好似也是这么一回事,反正d2gs这个东西先后引起了不小的争执,直到一年后d2gs 1.10放出才算是一个真正的了结。不过从这些争执上不难看出onlyer的实力。如果没有onlyer,恐怕大家根本没有任何玩到暗黑封闭战网的希望吧,他绝对是国内暗黑得以发扬光大的当之无愧的英雄啊。
bnetd-thread改进的同时,我也正在着手制作PHP D2 Manager,一个网页管理程序,可以让管理员直接进行服务器的管理和log查看,也能让玩家登陆对自己的帐号进行一定的管理。当时在交大测试并且发布在自己的主页上。
好像尽说暗黑的事情了,说说魔兽方面吧,这段时间主要花在看PvPGN代码,在IRC和开发者们交谈以及研究Beta的一些东西上。由于Beta和原版的战网列表是放在注册表的不同位置,所以我打算做一个Beta版用的Gateway Editor。
本篇时段魔兽界大事年表:
2003/03/30 TFT Beta 305
2003/04/10 TFT Beta 306
2003/04/20 TFT Beta 309
2003/05/04 TFT Beta 311(中间部分版本的发布时间已无从考证)
拾叁 非典与专注
2003年的4月还有一件非常重大的事情,那就是非典在中国的大规模爆发,进而引发的一系列社会防疫活动。最终我们这些学生只能在学校度过五一劳动节假期,甚至一直到期末考试都不能离开学校(当然特殊情况可以打申请)。对于大多数学生来说应该是噩梦吧,毕竟不能出去活动是很难受的,只有少量迷网游的,以及我这样每天坐电脑的才会不为所动吧。其实对于我来说,甚至能更为激发自己的一种专注,全身心地投入研究中去(还有一个关键原因是人心惶惶,大家都逃课,老师上课也提心吊胆,所以平时不用去上课,每天都是从早上一直弄到晚上)。
TFT Beta版的Gateway Editor就是在这种情况下诞生的。由于以前的开发经验,只用了不到一天的时间就制作完成并放出,命名为War3X Gateway Editor,质量也得到了玩家的认可。不过因为技术上没有使用任何新的东西,所以自己也觉得比较无聊,这个软件只更新了几个版本进行了小的bug修正就宣告final了(而且Beta测试结束后就没用了,当然不用更新得多勤快)。
过了劳动节后,各宿舍楼之间已经禁止走动,加上无法出校门,本楼的网络又没通,所以上网产生了极度的困难。当时的精力只好放在服务器代码研究上。由于投入的精力很大,我甚至已经可以理解BnetD-thread对于BnetD的修改部分所产生的优化作用,还在PvPGN中发现了一些bug。在理解PvPGN支持的telnet协议后我又制作了Battle.net VBot,现在已经成为教育网私服blueink/md4u上某些人挂机的标准工具。
研究代码对我的C语言功力提高的帮助是巨大的,而且通过对daemon这种极度需要性能优化的服务器软件的代码的理解使我对代码优化产生了浓厚的兴趣,来说这也直接影响了日后我写代码的风格。
此外,我在自己的机器上架设了web服务器后继续做PHP D2 Manager和PvPGN-Ladder,然后在五月的某一日躲过暗哨悄悄潜入大二宿舍楼上网更新网页并帮学校暗黑战网的管理员更新服务器/网页。想起那时所冒的风险,简直就像地下党,后来谈起这事我和同学不免都是苦笑不已。后来第二次去的时候采用了闯楼的方法,跑得比楼管理员快,溜进了某朋友的寝室躲了一会儿,然后再转战暗黑战网管理员的寝室上网,这说起来就是一种惊险刺激行为了,不过为了更新网页以及帮朋友做事还是值得的。
当然一直研究这些东西也难免无聊,于是我终于拾起将近一年没有研究的Replay格式开始重新研究。而在六一儿童节这天我们楼的网络终于通了(选这天通网也实在是够幽默的),我终于又回到了全天候的上网的状态。就在这个燥热的六月,我在shadowflare的论坛和blue兄聊上了,他就是第一个基本完成Replay信息格式分析的人……
本篇时段魔兽界大事年表:
2003/05/13 TFT Beta 312
2003/05/29 1.06补丁发布
2003/05/30 TFT Beta 314
拾肆 初夏的惊雷
和blue兄聊上是因为看到他和我在做一样的事情--分析Replay的所有数据格式。不过没有想到的是认识几天后,大概是6月5日的样子他就发布了一个w3g_format.txt的文档,里面叙述了基本上可以说是比较完整的Replay格式,虽然action(动作区块)部分没有具体讲解。当时我就知道离完全分析不远了,于是立即投入到一起研究的队伍中去,一同参与的还有Nagger,和Julas。我们这几个人也就是后来Replay格式分析的4人组,之后还有mike兄也作出了不小的贡献。
大概是一周的时间吧,其实我自己没有帮上什么忙,只有很少的突破性进展,不过一周后blue石破天惊地发布了完整的action(动作)部分的具体格式,不得不佩服他的技术能力。我立即开始写自己的测试代码并进行bug检查。后来经过几次讨论blue又修正了几次文档,并且逐渐完善。
这时的我还没有着手开始开发新的Replay的工具,一方面格式文档虽然已经基本成型,但是还有一些东西还是unknown(未知),需要进一步分析;一方面要准备期末考试;最主要的还是另一个方面,也就是魔兽资料片TFT正式版(其实外国很多都是叫FT,前面那个The不知道谁加上去的……)的横空出世。
此次盗版TFT的出现要比暗黑和魔兽原版晚得多,5月29日压盘,6月18日才出现在0day的ftp上,然后很快传播到当时刚刚崛起的BT上。记忆中那时不知道0day的全部冲向BT,估计当时TFT的种子和下载者到现在为之都是无人能破的记录吧,种子数到达过数万,下载人数到达过6位数。那时觉得ftp慢所以也选择了BT,只看到硬盘满负荷运转,学校的100M LAN带宽利用率奇高,下载速度平均达5Mb/s。3天之后又是一次具有网络大堵塞性质的疯狂下载,对象是中文版的TFT,对于不懂英文的玩家来说可以说是福音,不过奥美翻译质量实在是不敢恭维(大家公认,相信没有多少异议),所以我还是坚持用英文版。
下到TFT后当然是马上投入游戏,打完任务再玩新的melee地图(当时还没有想到研究地图编辑器的新功能,开始研究地图编辑器又是一个一年以后的故事)。而PvPGN和BNCHN都迅速升级支持了TFT正式版。当时BNCHN还委托我写了BNCHN Starter,也就是UWS战网登录器的一个翻版而已,所以没用多少时间,再说期末考试临近本来也用不上多少时间去做这个东西。
这个初夏的冲击实在是一波接着一波,上个月的无聊一扫而空,暗黑那边的事情已经顾不上了,魔兽这方面的事情又多又杂,一边做事一边还在思考自己下一个要做什么,连考试都是迷迷糊糊的差点写错东西。
考完时已是6月末,当时非典事件渐渐平息,本以为要被关在学校没想到已经可以回家了。前面不能出校门没法买票,最后买黄牛票我也忍了,做在回乡的火车上,我一边和同乡兼同学聊天,一边在心中盘算暑假的计划。最后敲定第一个要完成的是BNetEditor的续作BNetEditor 2。
本篇后记:终于要写到2003年7月了,对我来说绝对是我的魔兽史上最重要的一个月,请大家拭目以待。
本篇时段魔兽界大事年表:
2003/05/29 TFT 正式版压盘(Gold)
2003/06/18 FLT放出TFT英文正式版
2003/06/21 TFT中文正式版出现(发布组织不详,疑为TLF)
拾伍 大作的诞生
BNetEditor 2的基本目标是界面的改变,使用更为流行的样式和更为便捷的操作,并且增加对更多游戏的支持。这些对我来说其实已经是比较简单的东西,所以几天就写完了,发布了几个Beta就发了final,感觉上也没有什么可改进,不过后来证明程序还是有一些奇怪的bug,我自己也一直没有空去检查,再加上前作太流行,该作并没有受到想象中的欢迎,所以后来我自己评价各个作品时,把这个看成是失败作品。
此后酝酿的就是更大的计划,做一个分析魔兽Replay动作以及APM的软件,也就是W3G Master计划。说起这个名字,还要感谢zax,当时我不太会为软件起名,和几个人商量,zax建议用这个名字,我一拍大腿说这个名字不错,于是就定下来了,后来就发展成为了一个Master系列的软件。
W3G Master内部Beta出现的时候正赶上jca的w3chart出世。当时我感觉双方各有所长,我胜在分析速度,他胜在细节功能。因此我没有发布公开版本,只是给蛋蛋,zax等少数好友进行内部测试调整,他们也发现了很多bug并提出了很多好的建议。到0.5的时候支持了所有单位的显示,批量改名等功能并有了中文语言后我才于7月19日发布了第一个公开Beta版本,该版本一出现就在国内市场完全压倒w3chart,迅速成为玩家的新宠,这应该是我有史以来做得最受欢迎的软件吧。当时看到大家对它的赞誉,心理上还是非常满足的,而且也受到激励要继续改进和完善这个软件。
要说这个软件的存在意义,恐怕我自己没有各位擅长Ladder的玩家了解得多吧,反正当时Replay动作分析出现后引起的震动是非常巨大的,引起了很多关于动作合理性以及APM高低等不同方面的讨论,而我作为一个APM仅120-150的菜鸟玩家,也只能在旁边傻笑,既然自己对此没有什么深刻体会,也就没有什么可以发言的了。
或许一开始写这个软件只是为了研究的新的技术吧,不过能有这样的影响却大大超出了我原先的设想,随之而来的压力也就倍增。当时收到很多玩家的反馈和建议,我要慢慢分析其中的bug原因以及建议的合理性和现实性,然后进行下一轮改进。暑假也没有什么事情,除了高中同学聚会和玩之外就完全投入这方面的开发,基本和最初做软件一样几天一个版本地迅速更新。然而想不到的是7月24日1.0正式版发布的时候又犯老毛病留下两个致命bug,所以第二天立即发布了1.01这块遮羞布,只能感叹自己的不细心。
特别介绍一下我在开发软件中用的工作组Quixotic Yawl Studio这个名字,3个单词的首字母就是我名字3个字的声母字母。故意取了这样一个名字,纯粹好玩。再透露一点就是Soar Chin中的Chin=秦,也就是我姓秦,;)
W3G Master是我学习开发中的第二个关键转折,由这个软件开始我开始使用一些良好的开发习惯,比如记录TODO,history,进行代码结构设计和优化等等。
本篇后记:对于我来说W3G Master的规模也算不上大作,不过大家都把他看成我的第一大作,所以我就这么写了。
本篇时段魔兽界大事年表:
2003/07/01 TFT正式版发布并同时发布1.10升级补丁
2003/07/15 TFT 1.11补丁发布
2003/07/30 TFT 1.12补丁发布
拾陆 另一个方向
在发布了W3G Master 1.01后,基本上就可以算是一个告一段落的成品,在开始下一循环的开发前我还是先去研究一些其它东西拓展自己的视野。
首先还是回到PvPGN,随着PvPGN 1.5的发布,功能已经基本稳定,剩下的就是补充没有实现的官方战网的一些功能。当时我放下Replay这一块后稍微有了点时间,加上对PvPGN的源代码已经非常了解,所以就尝试去实现战网的多语言功能。当时一起帮忙翻译的还有另一位朋友KingoM。提到KingoM,当然又得好好介绍这位对我帮助很大的朋友。他是华中科技大学的战网的管理员,那个战网命名就是KingoM,是现在教育网除了MD(原blueink)外最大的战网,我和他认识后就一直探讨PvPGN的技术,后来他为我提供了cvs进行多语言翻译的存放(虽然也就用了几天,不过还是要谢谢他),他也帮忙翻译了一些内容。由于他的帮忙,PvPGN的多语言版本终于能在7月底我的生日及时发布。PvPGN 1.5 final发布后我又立即做了对应的多语言版本,之后因为各个版本改进较大,而且我的实现方法也比较麻烦,所以我就没有继续做这个多语言的版本。
真正开始研究MPQ,是从那个八月初开始的。当时我在www.zezula.net接触到了Ladik写的开放源代码的StormLib,一下子就着迷了,立即投入代码的研究中去。Ladik是继Quantum后第二个独立破解出MPQ格式的人,而且比Quantum更强的是放出了一个开放源代码的库。另外值得一提的是athena2000.myrice.com这个站点的站长,他也独立研究出了MPQ的格式,也是我非常佩服的一个人。我当时研究MPQ的格式基本就是参考这两个人的网站上的一些叙述和StormLib的源代码。
MPQ的格式简单地来说就是一个压缩包,只不过加入了索引和加密验证等各种加速和安全结构,使得游戏中的读取快捷方便,操作上也比较容易控制。当然,安全结构还是使得破解相对麻烦了点,也难怪破解者这么受人尊敬,我自己则是一个标准的菜鸟,对破解一窍不通(本来此时就应该把擅长破解的esper大虾拉出来介绍,不过考虑到他还没有和我的故事有交集,所以留到以后吧)。
一开始研究MPQ格式只是直接使用StormLib,写了MPQ2003,一个不需要任何外部dll的MPQ命令行软件,功能上来说至少我自己觉得比较满意,MPQ2k能做的它都能做,还增加了一些功能。
做MPQ2003大概是经过了20天的样子,一直到1.32就连源代码也发布了。这段时间里我又和当时清华战网blueink的管理员shentimmy和Aruth认识,并且聊得还比较多。在TFT推出后blueink很快就用最新的PvPGN支持了,他们有些技术上的问题和我探讨。shentimmy是那时清华smth战队的队长,Aruth则是负责服务器为主。
假期的最后一天依然是猛写代码,发布了MPQ2003 1.5。之后终于迎来了大二的生活……
本篇后记:回答一下replays.net上某人关于UWS和BNCHN的提问:UWS最后因为缺乏管理和人气,大家又都很忙,最后Rance只好关闭这个组织。BNCHN的衰落具体情况我也不清楚,要问那些人,总体来说原因也是差不多吧。
本篇时段魔兽界大事年表:
2003/08/15 TFT销售突破百万
拾柒 团队活动
上大二之后认识了很多学校CA战队的同学,当然是zax介绍的功劳,不过一直是一个地下组织,没有自己的根据地和组织结构。后来到社团招新的时候上海交大的电子竞技联盟终于被校团委批准成立,CA战队也就作为它的魔兽部门。之所以用“终于”这个词,主要还是因为社团通过申请还是非常不容易的,学校一直对电脑游戏保持有害的观点。不过非点期间因为大家不能户外运动,团委和几个社团联合举办的线上比赛取得了不错的效果,从一定程度上改变了这些观点,最后才算是通过这个申请。由于大学里玩电脑游戏的人数量实在不少,所以最后招收了不少社团成员。
电子竞技联盟第一次大会的召开具体时间已经不太记得,只知道是一个晚上,先是各游戏(CS/星际/魔兽/KOF等)部门部长在zax的安排下按照次序发言,后面才是“行政”部门发言,技术部放在最后,记得当时我还想招几个成员做点事,后来留了联系方法居然回头太忙忘了,而且后来技术部确实从来没做过事情,实在汗颜。
后来又举办了电竞协会的第一次比赛,我去当魔兽组的裁判,并感觉到自己第一次融入了学校的集体活动,毕竟以前一直都是单干,能和大家一起活动的机会是不多的。这次团队活动也影响了我之后的一个决定,留到下两篇再讲
一边处理社团活动我自然也没闲着,Replay部分W3G Master几乎是几天一个版本,从1.1更新到1.7只用了短短一个月时间,其间根据julas和我的一个讨论增加了随机种族判断,其实很简单,判断一个人第一个造的农民的类型;根据一些玩家的要求增加了Replay信息输出功能;增加了nagger和blue的文档补充的大量动作区块;最重要的改进就是在1.5和1.6先后增加的APM曲线图和单位统计直方图,这也是实现了原本w3chart的一个优势功能。
MPQ方面的开发也是齐头并进,MPQ2003因为和某工程名冲突所以改名为MPQEx,代码不断改写增强,发布了1.6。背后悄悄进行的还有MPQ Workshop的开发,这是一个图形化的MPQ操作工具,目标是速度快,界面操作友好。基本界面参考windows的资源管理器和WinRAR的长处,不过后来停了好长时间,那时都忙在PvPGN上了,这是后话。
至于服务器软件研究方面,PvPGN所有的代码都已经读完,开始在PvPGN的开发IRC里和开发团队进行开发方面的深入讨论。当时PvPGN的成员Pandemonium很照顾我(后来我做地图就用这个名字,其实最初是他用的,^_^),经常和我研讨,也指点我一些本来我虽然看过去了但是不太明白的东西。老大dizzy和windows开发牛人amadeus还是经常神龙见首不见尾,只能偶尔逮住他们聊几句。
国内部分主要是参与blueink的建设和改进,shentimmy和aruth甚至放心地把服务器的远程管理帐号给我用,我自然不能辜负他们的期望(知道我重义气所以来套我-_-),一边管理服务器一边进行少量的代码更新,其间还多次获得了宝贵的崩溃bug并汇报给了PvPGN开发小组。KingoM那边一直和我聊得很欢,更新什么也很勤快,不过因为blueink光芒太耀眼,KingoM只能作为blueink崩溃重启时的临时服务器用。
9月结束后我就回到了家过国庆节,很难得地没能在最后假期一天发布软件,不过还是完成了W3G Master 1.8的大部分功能,然后就迎来了又一个忙碌的十月……
本篇后记:好像从头到尾都在忙,这也没有办法,我这个人就是闲下来就觉得无聊,或许因为环境差也是原因,许多人整天磨网游或者陪女朋友逛街,我这两个爱好都没有(其实后者是没有条件,而且觉得大学的时间应该抓紧研究技术,女朋友的事容后再谈),只好一直忙下去了。
拾捌 团队开发
国庆节回到学校后我连夜赶工,把计划中的1.9要实现的功能也实现了,在第二天发布了W3G Master 1.9,实现了所有直方图,增加了显示聊天记录等功能。W3G Master开发到这个程度功能上基本上算是告一段落,所差的只是一些bug修正而已。
此后的一周可算是过得浑浑噩噩,每日上上网到各个论坛去看看东西,再和朋友聊聊天,基本没看进行开发工作,时间基本放在看PvPGN最新的改进上。终于某一天看到了遗留产品MPQ Workshop,想到这个东西还没开发完,于是起手开始做,距离W3G Master 1.9 两周后才发布了MPQ Workshop 0.5,三天后迅速完善功能发布0.6。MPQ Workshop因为中文化以及极高的速度(快于当时的所有MPQ GUI工具)而受到国内用户的亲睐,不过还留下一些bug,特别是批量解压。然而此后该工具一放又是半年……
进入11月的时候和另两个好友Aydge(阿吉兄)和smallthing开始聊得多了起来,Aydge是现在www.stormcity.cn的站长,其战网也就是原