科索造物集 上线有一阵子了,但我一直不知道该怎么介绍它。
说它是作品集吧,好像有点太正式,因为里面的东西还会继续改,甚至可能改着改着就完全变了样;说它是实验室吧,又显得我在做什么高深研究。想来想去,还是“造物集”比较准确:脑子里冒出一个有意思的念头,就尽量把它做成能点、能看、能玩的东西,然后摆到这里。
这个念头当然和 AI Coding 有关。以前想到一个网页产品,我的兴奋通常只能维持到开始估算工程量为止:设计、前端、数据、部署、维护……一圈数下来,最后往往只剩两个字,算了。现在门槛并没有消失,但至少“算了”有机会变成“要不先试试”。科索造物集就是这样被试出来的。

为什么要做一个站
我平时写文章比较多,但有些东西写着写着,总觉得少了点什么。
文章天然有一个从上到下的顺序。作者先讲什么,读者就先看什么,哪怕中间插了十张图,路基本还是作者铺好的。但有些内容并不适合排成一条队。它们彼此交叉,有远近、有主次,读者从不同地方进去,会看到完全不一样的关系。
游戏史就是一个很典型的例子。
如果我写一篇文章介绍 PlayStation、宝可梦、《最终幻想 VII》和 Steam,大概只能挨个往下写。可把它们放到同一条时间轴上之后,感觉马上就变了:PlayStation 在 1994 年发售,初代《宝可梦》出现在 1996 年,《最终幻想 VII》是 1997 年,Steam 则在 2003 年上线。原本散落在记忆里的名字突然有了距离,一个时代是怎么接着另一个时代长出来的,也更容易被感受到。
这不是文章做不到,只是交互页面做起来更顺手。读者可以自己拖动、缩放、搜索,想在哪一年停下就在哪一年停下。对我来说,这种“自己逛出来”的理解很迷人,所以我想给它单独搭个地方。
第一件造物,当然先挑自己喜欢的
第一个项目最后选了 《游戏史时间轴》。原因没那么玄乎,主要还是因为我喜欢游戏。
回头看游戏史时,我经常会好奇一些很琐碎的问题:某款游戏发售的时候,同一年还有哪些作品?一代主机的生命周期里,类型和审美发生了什么变化?我们今天觉得理所当然的设计,当时到底有多新鲜?
这些问题单独搜都能找到答案,但搜完也就散了。我想把它们放在一个画面里,让主机、游戏、公司和行业事件互相作证。你可以沿着时间一直往后拖,也可以只搜自己熟悉的名字,然后顺手看看它旁边还站着谁。
我希望它像一张可以随便摊开的旧地图。你不需要从第一页认真读到最后一页,随便找个点进去也行。
几千个节点挤在一起之后
想法很浪漫,真正做起来首先碰到的却是信息密度。
几千条游戏数据如果一起亮出来,得到的不会是一部气势恢宏的游戏史,只会是一排密密麻麻的橙色小点。每个点都配卡片,页面根本没法看;卡片全部收起来,又只剩一条意义不明的麻点带。放大到什么程度显示什么内容,哪些事件应该被提到前面,搜索之后怎样保留上下文,这些才是项目里最磨人的地方。
现在的页面把信息拆成了几层:中间保留完整的发行节点,上下挑出一部分里程碑和代表作品,底部再用曲线表示不同时期的发行密度。想看全局时,它是一段六十多年的轮廓;放大之后,才会慢慢露出具体作品。搜索和筛选也是后来必须补上的,不然数据越多,用户反而越找不到东西。
这个版本当然谈不上“写完了游戏史”。数据会漏,分类会有争议,哪些作品够资格成为里程碑也不可能有标准答案。但我现在不太介意它有这些毛边。它首先是一件能用的作品,然后才有机会在使用中被慢慢修正。
AI 到底帮了什么
AI 在这个项目里帮了很多忙。D3.js 的缩放与拖拽、数据处理、页面布局以及一轮又一轮的样式调整,如果全靠我从头硬啃,这个念头大概率又会回到“算了”。
不过 AI Coding 也不是按一下按钮就自动交付。它更像一个手很快、但偶尔会把事情做歪的搭档。你让它“做一条游戏史时间轴”,它确实很快就能给出一条线;至于这条线为什么值得看、什么应该留下、什么必须删掉,它不会替我负责。
我真正觉得有意思的,正是这部分分工。代码可以越来越便宜,试错可以越来越快,但最后仍然得有人说:不对,我想表达的不是这个,再来一次。
先把第一件东西摆上去
做完《游戏史时间轴》之后,我才慢慢知道科索造物集以后应该是什么样。
它不会只是一个陈列“完成品”的橱窗。我更希望它像一张长期使用的工作台:有些东西已经比较完整,有些还带着明显的试验痕迹,但每一个项目都应该回答一个具体问题。这一次的问题是,能不能让读者亲手浏览一段历史;下一次,可以换另一种内容、另一种组织方式继续试。
如果你打开这个项目,不妨先搜一款自己熟悉的游戏,再把时间轴往左右拖一拖。也许你会在它旁边撞见另一段早就忘掉的记忆。