十二月二十九日,文档。这是沈连河最不擅长的事。他可以写一天代码不觉得累,写一页文档就头疼。但引擎一点零的发布需要完整的API文档、架构说明和迁移指南。他把这项任务分给了引擎组的一个新人,叫小李,今年刚从深海科技大学毕业,写文档是一把好手。
小李花了一整天,写了一百多页的文档。从引擎的安装配置到每个模块的API接口,从性能优化建议到常见问题解答,一应俱全。他还在文档里加了一个附录,标题叫“从零点九迁移到一点零的注意事项”,逐条列出了所有的breaking ges和对应的修改方案。
沈连河看了一遍,只改了一处。小李在“贡献者”那一节只写了他自己和沈连河的名字。沈连河在后面加了五个人。林子轩,顾林,还有引擎组的另外三个新人。然后在最后加了一行字。“还有所有在社区反馈bug和建议的开发者,你们的名字在这里放不下,但代码里到处都是你们的影子。”
小李看到这行字的时候,鼻子酸了一下。
十二月三十日,最后的冲刺。还剩两项任务没有完成。一项是多线程渲染调度的一个边缘bug,另一项是物理引擎的文档补完。沈连河负责bug,小李负责文档。林子轩坐在沈连河旁边,两个人对着屏幕,一个写代码,一个看代码,偶尔交换一两句话。最长的一次交流是林子轩说了八个字。“这里锁的粒度太粗了。”沈连河回了一个“嗯”,然后开始重构那把锁。
下午三点,bug修复完成。下午五点,文档补完。沈连河在进度板上划掉了最后两项任务,然后在红色便签下面贴了一张绿色便签。绿色便签上写着“1.0 RC1,代码冻结”。他站远了一点,看着进度板,笔记本翻到今天的那一页,十五项任务全部划掉了。
他拿出手机,拍了一张进度板的照片,发到了工作群里。配文只有一个字。“完。”
许知意回了一个猫爪。苏景辰回了一个句号。陈声回了一个感叹号。孟缘回了一个字。“好。”林子轩没有回,但他坐在工位上,嘴角动了一下。不是笑,是放松。
晚上八点,沈连河做了最后一次完整测试。编译,打包,部署到测试环境,跑了三百个基准场景和一百个游戏实机测试。所有测试通过。他把测试报告发到了群里,然后合上笔记本,靠在椅背上,闭上了眼睛。
沈连河在行军床上躺了不到四个小时。凌晨两点,他醒了,打开笔记本,翻到最后一页。那里有一行铅笔字,写了好几年了。“让世界用我写的渲染器看世界。”他在这行字下面又写了一行。“明天,世界会看到一个开始。”
十二月三十一日,引擎一点零发布日。
上午九点,沈连河到了办公室。他穿了一件新衬衫,蓝色的,许知意说他穿这件显得精神。他不太习惯,领口的扣子解开了一颗,袖子卷了两道。林子轩还是老样子,T恤,牛仔裤,棒棒糖。但他换了一个新口味,草莓味的,塑料棍是粉色的。
孟缘到的时候手里拿着一个纸箱,放在会议室桌上。箱子里是橘猫定制的T恤,白色,胸前印着猫爪印,背后印着一行字。“九命引擎,1.0。”一共七件,引擎组五个人加上林子轩和孟缘。许知意看到以后说设计组也要。孟缘说下一批。
上午十点,发布页面在橘猫官网上线。沈连河按下了部署按钮。代码仓库的tag被打上了“v1.0.0”,安装包被推送到了,文档站点的首页刷新了。新的首页只有一段话,是沈连河写的。“九命引擎1.0。一个让每个人都能做游戏的工具。它不是最好的,但它是我们的。现在,它是你们的。”
发布后的第一个小时,引擎被下载了两千多次。第二个小时,数字跳到了五千。第三个小时,突破了八千。沈连河盯着后台的下载曲线,手放在键盘上,但没有敲。林子轩站在他身后,棒棒糖在嘴里,从左挪到右,又从右挪到左。
下午两点,深海科技大学的陈教授发来了一封邮件。说他们决定在下学期的游戏开发课程中采用九命引擎作为教学工具,问橘猫能否提供一套教学用的案例和课件。沈连河回了两个字。“可以。”
下午三点,南方工业大学的梁教授也发来了邮件。说他们已经在使用九命引擎做研究项目了,一点零版本的性能提升让他们的一些实验成为可能。邮件最后写了一句话。“感谢你们让学术研究有了更好的工具。”
下午四点,顾林来了。他坐在引擎组的工位前,打开代码仓库,从第一个coit开始看。看到林子轩写的那段并行调度代码时,停下来,转过身。
“这段代码,我可以拿给我的学生看吗。”
林子轩点了点头。
“当作教学案例。”
林子轩又点了点头。然后他想了想,说了一句超过十个字的话。“注释里写了设计思路,看不懂可以问我。”
顾林笑了。