值得回忆的本科四年学习
1. 加入金点工作室
来到成都已经快四年了,在川大也已经学习了四年,本科的学习就这么结束了。这四年来发生在我自己身上的事情实在太多了,琐事虽然可以不再提,但是这四年来改变我一生的那么多事情我觉得还是有必要记录下来。
2002年的夏天我和父亲从老家重庆来到成都四川大学这所百年老校。我觉得我是幸福的,虽然我以前从来没有独自出过远门,但是还好有成都亲戚来照顾。在父亲帮我完成注册入学手续后几天,就把我独自丢在了这个陌生的成都。
虽然寝室的生活条件十分糟糕,但是结识了寝室来自天南地北的同学后,觉得在大学的生活还是有趣的。虽然我读的是计算机学院,但是发现身边的同学并不像我,早在初中高中就开始接触计算机了,而刚开始的本科一年级学习也主要是数学和英语,对于很多人来说,大一的一年就是一个高四,每天就是很早起来上课,然后就是上自习,吃饭和睡觉,和高中没什么区别。刚上大一最高兴的事情就是回家,比如国庆啊,寒假啊。回家那前几天是我最开心的。
早在高中的时候,就对成都的金点工作室充满了崇拜之情。那个时候作为国内第一的业余游戏开发工作室不知道吸引了多少像我这样的游戏迷。我来到成都后,电脑先是放在了我亲戚家里,没敢带到学校来,不过学校南门后面的网吧就是我常逛的地方。大概第一学期刚开始没多久,我就向成都金点工作室的鼎鼎大名的softboy发了一封自荐email,希望自己能够加入金点工作室一起来做游戏。
Softboy很快就给我回复了,并且让徐桥来接见我,让我出乎以外的就是徐桥居然跟我是同一楼寝室的。不过他当时都已经大四了,马上也要离开川大了,他是学习平面设计的,同时也是鼎鼎大名的游戏策划。
和徐桥的第一次见面我始终显得拘束,或许是因为我的性格本来就比较内向吧,整个过程似乎都是他在说话,我基本上没什么话好说。徐桥主要谈的也是国内一些游戏开发方面的事情,其中他提到一个GBA的东西。当时我连GBA是什么东西都不知道,后来才知道是一种掌上游戏机,是日本任天堂推出的一种掌上游戏机,他说他和softboy对GBA都比较感兴趣,想一起来做一款GBA的游戏。
第二次和徐桥见面是似乎是在softboy的家的楼下的一家麦当劳,终于见到了传说中的softboy。大家简单谈谈了这个GBA的游戏事情,似乎是个足球经营类的小游戏。当时的我对真正的游戏开发一窍不通,基本上还是听他们说,我只是在一边听而已。不过softboy在PC上开发经验丰厚,对GBA的开发却没有实际的接触,所以了解GBA的开发过程就交给我去做了。我记得徐桥只给了我一个网站,叫做www.gbadev.org,然后自己去网上查查。
2. 研究GBA
过了在成都的第一个国庆后,我就把电脑从亲戚家带到了寝室,同时也去了川大外面的电脑城买了根网线,终于可以上网了。我可能是我们这届中最早有电脑的学生之一。
接下来的时间里面,我就经常上网到处查询GBA的开发资料。GBA是2001才开始出售的,而2002年才正式引入中国,所以GBA这种东西十分新,国内了解的也不多。国内的开发爱好者大部分都是根据网上一个叫水银的大哥写的中文教程来做。
GBA跟一般的PC不一样,它没有操作系统,要执行任何操作都必须直接操作硬件的寄存器,这对于刚上大一的我来说就十分困难了。水银大哥后来还在网上办了一个叫cgds的GBA开发论坛,后来国内的GBA业余开发高手几乎都是从这个论坛诞生的,当然,其中包括了我。
日本任天堂公司对于GBA的开发资料是严格保密的,除非是它正式授权的合作开发伙伴,是不可能得到关于GBA的任何开发资料的。当时我对GBA的资料收集也特别辛苦,总之都是特别混乱的。而且GBA的开发使用的是gcc,然后敲入命令行进行编译。编译执行过程经常出错,倒不是因为程序写得不好,而是因为对GBA内部不了解,因为GBA没有操作系统,任何操作都必须直接写硬件才行,一旦错了连查找调试都没办法。这段时间我觉得过得特别痛苦,我一直在怀疑自己是否应该花那么多经历在这个GBA上。如果我想学习新技术,完全可以在书点买上一大堆正规的书籍,一步一步地学习过来。可是那个时候的GBA开发不要说连书籍,就是连完整的开发资料都没有,甚至我都需要自己去一个寄存器一个寄存器去试,看看到底它是什么功能,然后根据不同的执行结果去猜测这个寄存器是干什么的,这组地址是做什么的。
但是研究GBA这段经历是让我终身受益的,虽然现在GBA基本上已经被PSP,NDS其它机器所代替,但是这段经历让我吃的苦头正是我后来的优势。
因为GBA开发资料特别少,中文资料就更少了,就逼得刚才上大学的我去啃一些老外写的英文资料,后来也就渐渐习惯了看英文资料了。因为GBA开发资料特别少,我们这群在CGDS上混的GBA开发爱好者就紧密团结在一起,有什么资料都共享出来,同时也有好几个到现在都是不错的朋友。其中azhong和乐水是我CGDS上最好的朋友。Azhong当时是上海交大的计算机学院的大四学生,水平也比我高很多,我有什么问题就直接问他,一般他都是十分耐心的回答。Azhong后来进入了上海UBI这家国内顶尖的游戏开发公司,同时也送了我一份GBA的官方开发文档,正式因为这份文档,一直找不到方向的我才终于开启了真正的GBA开发之路。
官方开发文档是全英文的(我已经很感谢不是日文的),同时也很齐全,但不是很详细,不像书籍那样会一步一步教你怎么做,怎么写,但是对于每个寄存器的地址和大致的作用都写得很清楚,虽然有些时候我还是不会用,但是我可以去测试几次,然后猜测这个寄存器的用法以及用途。后来的这半年,我就是在研究官方文档以及测试GBA的各种硬件操作过程中度过了,同时写下了我的《GBA探索日记》,没想到这份GBA探索日记后来成了国内GBA开发的经典教程,甚至一些搞ARM嵌入式的人都把这份资料当作参考资料(GBA的CPU是ARM7的芯片)。
3. 加入微软技术俱乐部
大一的一年里面,我的《GBA探索日记》一共写了18篇,应该说除了联机的功能,GBA的所有硬件功能都被我挖掘出来了,可以说是一份十分齐全的开发文档了。不过这个时候,也差不多是金点工作室处于要解散的边缘了。核心人物softboy和徐桥都忙工作去了,softboy后来开设了自己的成都锦天科技网游开发公司,而徐桥也到了上海东星工作了。于是这个时候,我就很少再跟金点的一些人进行联系了。
学校内的各种社团俱乐部一般都会在新学年开始的时候进行各种招新活动,正巧我同寝室的李萧刚好在学校的微软技术俱乐部做一些工作,就把我拉到了微软俱乐部。而我唯一擅长的就是技术开发之类的,所以也顺利加入到了科技部。这个时候微软俱乐部的陈主席也是个技术方面的高手。后来他对我的帮助也是挺大的。
在微软俱乐部的工作和学习还是挺愉快的,科技部部长每周都会组织大家进行一次技术交流,大家每个人轮流上台进行一次小小的技术讲座。于是,我也有了第一次上台做讲座的经历。虽然只是俱乐部科技部内部的讲座,但是我记得我第一次上台做讲座还是显得特别紧张。我讲的是我最擅长的游戏开发方面的技术,我害怕自己站在台上讲不出来多少话,所以就制作了大量的PPT页面,短短的40分钟讲座,显得内容还是挺充足的。虽然紧张,我讲话的效果不是很好,但是大家对我的讲解的内容还是很感兴趣的,并且让我和几个人一起来具体做一款基于DirectDraw的联机坦克对战的小游戏,同时作为我们微软俱乐部的一个项目上报给微软亚洲研究院高校组织部(全国所有微软俱乐部的头儿)。这次讲座,我还认识了conan,他跟我是一个年级的,同时也是科技部中本科生中技术比较厉害的。他也对游戏的开发十分感兴趣,所以我就和他一起来制作这个基于DirectDraw的联机坦克对战游戏的项目。
微软俱乐部是个锻炼人,结交朋友的好地方。经过了那次讲座后,俱乐部后来又让我代表川大微软俱乐部到西华大学做了一次微软技术日的讲座。在西华大学那次讲座参与的人比较少,但是最后还是获得了大家的热烈掌声。后来我还在本校以及江安校区等很多地方也做不同大小的技术讲座,应该说都是很成功的。现在我几乎可以熟练到不用PPT幻灯片依然可以在台上和台下的同学们侃侃而谈。
在那次成都微软高校技术日过后的某一天我从澡堂洗澡回到寝室接到俱乐部的电话,俱乐部的科技部部长叫我写一份自我介绍,让我去争取一下微软MVP。当时我都吓了一跳,因为我以前高中的时候就在电视上看过微软MVP的介绍,觉得是那种技术特别厉害的高手才行。我觉得心里不太可能,就应付地答应了一下科技部部长,不过部长倒是再三叮嘱我要认真写好这份自我介绍。后来我就把我高中做过的一些VC++下的东西,以及在CSDN上的与别人讨论VC++技术的贴子和之前做过的GBA相关的东西全部整理在了这份自我介绍上了。当时我没想到这份自我介绍最后真的让我能够成为2004年的微软最有价值专家。
4. 第一次发表文章
在大二的开始这个学期发生的事情还很多。这段时间我对编译原理以及技术特别感兴趣,就边学边写了《从lex和yacc说到编译器》的连载技术文章,虽然对编译原理还是陌生,但是我跟着买的一本《编译原理及实践》的书,一步一步学会使用flex和bison(linux下的yacc)这些工具,同时也照着书上的一个tinyc自己写了一些类似的脚本编译器。《从lex和yacc说到编译器》这系列文章当时发布在了csdn网站上,后来网上的读者反应很好,所以我还专门写了几篇相关的正式文章投稿给《程序员》杂志,一共有三篇文章被正式刊登了,我也获得一篇大致300-400的稿费。这个时候zengyi恰好也在《程序员》杂志社工作,于是还认识了zengyi,他现在是连续三届的微软MVP, 现在也是我的良师益友了。
5. 第一个失败的项目
正当我写的关于lex和yacc的文章在网上走红的时候,一个在美国纽约大学的留学生联系到了我,希望我帮他做一个编译原理的课程设计。我记得是用Javacc来做一个显示词法分析语法分析的一个分析器。当时他答应报酬是5K人民币,一看就知道是一个富家子弟的作风。看在钱的份上,我就答应了他。他也很爽快,首先就把1K先预付给了我。
Javacc这个东西可以说是Java平台下的lex,yacc,不过使用的是LL(1)算法。我之前也没接触过这个工具,后来在网上下下来后仔细研究了一下,其实还是挺简单的。大二的上学期后半期时间我几乎都耗在了这个项目上了。每天都是去看文档,去研究Javacc。白天上课,晚上回到寝室就一头扎到电脑上,或者更准确地说是扎到这个项目上了。Java的可视化编辑器我也没做过,然后自己边学JAVA一步一步来写。
终于在三个月后,我可以拿出了点成果给那个留学生看。他和他导师也觉得满意,然后就又给我了700,不过又提出了新的要求。气人的是,新的要求和之前的项目的结构完全不匹配,几乎要我重新做了。经过一个星期的网上讨价还价,我才真正明白他的导师关于这个课程设计的真正意图。。。不过这个时候已经晚了,如果按照现在的要求去做,几乎是另外一个新的项目。于是我就只有告诉他我实在完不成了,剩下的钱我也没要了,就这样了,这个项目最终也以失败而结束。到现在我心里都有点觉得亏对他,因为失败的原因不光在于他, 当初我自己也没有问得很清楚就接下来这个项目。
这个项目的后期几乎可以说是我心里最郁闷的时候,就像《人月神话》里面说的那样,就像一头大象扎在沼泽地里面无法爬出来一样。我把我所有的时间都投入进去,结果不但没有进展反而越陷越深了。
6. 开创世纪
TVB那么多电视连续剧中,我最喜欢看的就是罗嘉良拍的《创世纪》,而《创世纪》公认最好看的就是第一部《开创世纪》。
大二的上学期的期末考试安排得很奇怪。英语四级以及各个主科的考试都安排得很靠前,而最后唯一一个马克思哲学安排在后面。大家考完了前面的科目后,留在学校就到处玩,甚至有的人家住得近的就先回家耍了一个多星期后再回来考这最后一科。
当时考完了前面的科目后,我留在寝室也觉得没什么好耍的,就在网上到处搜索有没有事情可做,于是就在GameRes上找到一个叫做成都众志数字数据公司招聘程序员的贴子,似乎要求还不高,而且这个公司的地址就在学校北门对面的望江科技楼,十分近,于是我就按照上面的联系方式加了联系人的QQ。
通过网上的聊天了解到这家同时是做手机游戏的,当时的我也队J2ME有一定的了解,而且手机游戏很大程度上跟GBA游戏有点类似,我觉得自己或许有可能有用武之地。大概过了两天后,公司的人就叫我到成都最好的咖啡店——良木缘去面试一下。我还是第一次去咖啡店呢。良木缘的环境很好,十分温馨祥和,面试的过程虽然有点紧张不过还是挺顺利的。面试我的也正式三位老板,三位老板一个是做管理的叫ws,一位是做技术的叫十四,一位是做美术的叫jyoro,大概问了我一些情况就叫第二天去上班了。
第二天早上来到公司,发觉公司好小,就跟我们寝室差不多大吧。公司里面人也挺少的,除了三位老板,就是一个美工小卷和一个打杂的。不过当时正读大二的我也没奢求能够找到多么好的公司做事情,小公司或许正有我发挥之地。
公司先让我做的是一个脚本系统,因为我之前对编译原理技术了解比较多,而且都已经做过一些诸如词法分析器的工具,所以几乎很快就搞定了。
接下来公司又让我做魔幻1的宣传片的一个东西,不过说用J2ME来做。我第一次用Jbuilder呢,公司的十四给简单配置了一下环境和Nokia S60的开发包后我就可以开始动手了。J2ME的熟悉过程还是挺快的,有Jbuilder这么强大的工具,开发调试过程都很顺利,而且我做的这个东西本来就很简单,加上S60内存比较大,我也没考虑过什么内存受限等问题。
刚开始在公司的这段时间比较兴奋,所以每天都干得比较晚才回去。每天大概都是早上9:30到10:00来公司,然后大致也是晚上9:30到10:00回学校寝室睡觉。在公司里面我也是全心投入工作。一天晚上10:30准备回去的时候,WS叫住我还发了200块钱的补助,可以说是第一次的发钱吧。其实刚开始的时候我没想过干这份工作能赚多少钱,因为在公司里面自己能够锻炼不少,而且公司还包午饭和晚饭,我觉得已经足够了。
当我完成了魔幻1的宣传片后,我就给WS说,我想做一款手机上RPG游戏,没想到他一口就答应了。于是,接下来的时间里面,我就和十四以及jyoro一起讨论这个新项目的具体细节。以前做过的一些游戏项目都是自己比较随意的,这次做公司正式的RPG项目发觉有好多具体的细节以及技术问题需要考虑。当时手机上能够做出来的RPG游戏很少,RPG游戏一般都需要比较多的图形资源,而手机内存还是存储空间都很有限,所以无论是对于谁来说,做手机上的RPG游戏都是一个不小的挑战。而且我们要做的主要平台是NOKIA S40,S40的JAR包最大不能超过64K,这其中要包括游戏的图片资源和程序以及脚本和地图。美术图片是游戏的最根本东西,也几乎缩小不了多少,所以我的游戏引擎的程序其实最多也只能写30K。当时我们对NOKIA S40平台了解也不太多。研究了解S40平台的各种特性的工作自然就落到了我自己头上。
最初WS希望我们能够做成GBA上的那个45度的最终幻想战略版的游戏。在后来的几天内我天天都和十四讨论技术的实现细节。我几乎走在路上都在考虑一些新异的实现方式和技巧。如果这些技术是在GBA或者PC上来做,都还是有办法的,但是在S40那么受限的平台下,一般的办法是不可行的,我必须要找出一种更加简单更加有效的办法来实现才行。最后还是觉得很多地方都不大可能实现出来。毕竟GBA这种专门的游戏机的机器性能比我们的NOKIA S40手机的性能不知好了多少倍。
不知不觉就快到过年了。过年前,WS还发了我800块钱的第一个月的工资(我的工资当时是一个月1K块),后来没想到前三个月就只发了这一次工资。当时公司比较困难,作为一个刚成立的手机游戏开发公司,之前没有任何的技术或者资金基础,要支撑下去的确很困难。我记得当时好像我们点的午饭和晚饭都是经常赊帐。不过当时我也没去考虑这些问题,也不懂商业运作上的事情,我所关心的唯一事情就是项目的开发。
过年前,全公司(也就7个人)就在公司楼下的串串香吃了第一次团年饭。
春节过完,我们很快又聚在一起开始工作了。这个时候我们这个RPG项目正式命名位魔幻之旅2。这个时候公司还来了个新的策划HJ。刚开始他在给魔幻一写剧本,不过魔一是个动作游戏,剧本都很简单,所以后来也就一起来做魔2的项目。
随着项目的渐渐开发,我发现前面的困难越来越多,S40的平台内存只小,几乎不能装2个屏幕大小的图片。然后我们又是讨论讨论,希望尽量在不减少游戏效果方面减少一些内存的开销。而且我们想近了诸多节约内存的办法,把图片拆了又拆,连Java的class文件都尽量少用(空的class文件都有几乎1K的空间),把所有的代码都封装到一个class里面,整个项目就只有两个class。
十四对我的帮助还是不小的。魔2的地图编辑器本来最初我写了一个用来测试的,不过后来真正的编辑器还是他来写的。不过十四对于J2ME的开发也不比我早多久,所以实际做起东西来,可以说大家都是新手,都是边学边做。
大二的下学期课程还是有一些多,我来公司的事情就不如寒假那个时候那么多了,不过WS还是让我有课就回学校上课。同时上学和上班,让我一直都比较疲惫,这种疲惫的感觉一直都持续到了大四。
后来大概到了4月份左右吧,我们的魔2总算有了一个雏形了。HJ利用现有的资源做了一个大话西游剧情的Demo。到现在我都觉得魔2的效果是十分好的,很有GBA上那些经典的SLG游戏的风格。
这个时候,国内手机游戏开发的老大北京数位红的老总还来了成都,我们把我们的游戏Demo给他们看了。后来HJ给我说,我们的魔2的效果把他们都惊叹了一下,他们承认他们都做不到我们这样的效果出来。
本来当时WS是打算和数位红谈一些合作的事情,不过后来数位红对我们的要求太苛刻了,虽然公司那个时候特别缺钱,但是还是放弃了那次和数位红的合作机会,不然可能到现在我们公司就成了一个数位红的一个开发工作室了。
紧接着后来又有一个广州的上市公司愿意用1百万来收购我们公司的一些股份,或者叫融资吧。整个计划在公司都听了BOSS们谈了很久了,直到一天广州的那个公司派人来到公司来视察,我都一直以为计划会很顺利的,公司这次肯定会又新的发展的,不过后来又听WS说还是放弃了这次融资的机会。虽然当时觉得有点失望,但是WS既然那样考虑肯定有一些更好的理由。
随着魔1和魔2的项目开发进度的前进,我们有更多更好的效果出来了。我们甚至还把魔2的在模拟器上运行视频录下来挂在了公司的网上。据说这个时候有很多国内的手机游戏运营商想来代理运营我们的游戏,其中包括了国内最大的运营上空中网,他们甚至愿意预先付给我们一部分钱让我们的游戏给他们代理。正如BOSS说的那样,当时我们的选择是很多的,不过一直都没有下决定,一直在等待更好的条件。
最后公司选择了杭州的联梦无线来作为我们公司的合作伙伴。联梦据说当时给我们的条件是最好的一个。后来香港软银又联系到公司,作为一个专业的全球风险投资公司给我们公司投了他们在中国西部的第一笔风险投资资金。