第 10 章
失败的技艺
当旧语法彻底消失之后——那些由储蓄、借款、临时零工拼凑起来的即兴经济,那些允许一个项目暂停半年又意外重启的弹性时间——当这一切被众筹的时间表、抢先体验的更新压力、平台算法的频率要求所取代,那些无法被商业计划书论证的、古怪的、非理性的项目,还能在哪里找到赖以存活的那一点点氧气?这个问题在2010年代后期变得越来越紧迫。但在此之前,它已经在无数开发者的硬盘里静静躺了很多年。
TIGSource论坛上有一个著名的讨论串,标题叫“废弃项目”(Abandoned Projects)。它始于2007年,最初只是一个普通的问题帖:有人问大家手头有没有做了一半就扔下的游戏。回帖的人贴出了截图、设计文档、可执行文件的下载链接。讨论串慢慢变长,从几页变成几十页,从几十页变成几百页。到2018年论坛改版时,这个讨论串已经盖到了两千多层楼,里面堆满了未完成游戏的遗迹。这些遗迹的物质形态惊人地相似。
大多数项目文件夹里都有一个叫“TODO”或“ideas”的文本文件,记录着开发者最初的想法和计划。这些文件通常写于项目最初的几个月,语气充满热情和确信——要做一个融合了Rogue-like和银河城元素的动作游戏,要做一个关于记忆与失去的叙事冒险,要做一个用音乐驱动关卡的节奏平台游戏。然后随着时间推移,文件更新的频率逐渐降低。最后一条记录往往是一个孤零零的条目,写着某个未完成的功能或未修复的bug,日期停留在项目被放弃之前的某个时刻。再往后,什么都没有了。
代码库的结构也呈现出一种共同的模式。核心系统通常已经完成:角色控制器、碰撞检测、基础UI框架。这些是项目初期最容易获得成就感的部分,每一个新功能都能立刻在屏幕上看到效果。但内容层几乎总是空白的:只有一两个测试关卡,几个占位的NPC,一段没有后续的剧情文本。内容生产需要的不是技术能力,而是持续的、枯燥的、没有即时反馈的劳动。大多数独立项目正是在这个阶段崩溃的。
开发者发现自己面对的不再是令人兴奋的技术挑战,而是无穷无尽的关卡设计、数值调整、文本润色——那些必须做但没有人想做的事。
美术资源的文件夹通常比代码库更杂乱。里面有几十个不同版本的主角设计,上百个从未被使用的场景素材,以及大量“备用”的像素图——开发者画了它们,觉得不满意,但又不忍心删掉,于是放进一个叫“old”或“backup”的子文件夹里。这些文件夹最终比正式的美术资源还要庞大。有些项目里,“待处理素材”的文件夹大小是“已使用素材”的三倍以上。
2008年,一个开发者在GameDev.net论坛上发了一个长帖,详细记录了他开发一款Rogue-like游戏的全过程。两年里他写了将近八万行C++代码,画了上千张像素精灵图,设计了几十种怪物和上百件道具。但游戏从来没有到达过可以玩的状态。每次他觉得快要完成一个可玩版本时,就会冒出一个新的想法——更好的随机生成算法,更复杂的技能树,更真实的物理引擎——然后他把之前的代码推倒重来。
两年后,项目文件夹里塞满了互相矛盾的代码模块,没有一份设计文档能说清楚这个游戏到底是什么。他在帖子里写道,当他最后一次打开那个文件夹时,看到的不是代码,而是一个由犹豫和恐惧堆积起来的废墟。
这个帖子在论坛上引发了一场漫长的讨论。回帖的开发者们开始分享自己的废墟。有人为了一个横版动作游戏画了三年像素画,最后发现自己根本不会写代码。有人完成了一个功能完整的游戏原型,但测试时发现核心玩法根本不好玩。有人把游戏做完了,发布到当时流行的独立游戏网站上,下载量停留在两位数,一条评论都没有。讨论串最终盖到了四十多页,成为GameDev.net历史上最长的帖子之一。它没有任何解决方案,没有成功学的总结,只是一群人坐在一起,承认失败的存在。
这场讨论中浮现出几种典型的失败形态。第一种是永无止境的原型:项目永远停留在概念验证阶段,开发者不断添加新功能、推翻旧设计,从未进入实质性的内容生产。
这种失败往往源于一种特殊的心理机制——做原型比做完整游戏容易得多,也快乐得多。原型阶段充满了可能性,每一种新想法都闪闪发光;而一旦进入内容填充阶段,工作就变得枯燥、重复、充满了琐碎的细节。停留在原型阶段,是一种对枯燥的逃避,但它的代价是项目永远无法抵达可以被他人体验的形态。
第二种是技术债务的雪崩。独立开发者通常是自学的程序员,在项目初期为了快速实现功能,往往会采用各种权宜之计——硬编码的数值、临时的数据结构、绕过架构的快捷方式。这些权宜之计在代码库中不断积累,像一座房子的地基里塞满了临时支撑物。当项目规模增长到一定程度,这些支撑物开始断裂。每一次修改都会引发连锁的bug,每一次添加新功能都会让旧系统崩溃。最终开发者发现自己面对的不是一个可以继续建造的房子,而是一堆需要彻底推倒的瓦砾。而推倒重建的成本,在只有一个人的工作室里,往往意味着项目在心理上已经死亡。第三种是无人问津的完成品。
这些游戏被做完了,通过了测试,打包上传到了分发平台。然后什么都没有发生。没有评测,没有讨论,没有下载。开发者在发布后的几周里每天刷新数据面板,看着那条平直的零刻度线,直到最后不再打开那个页面。这种失败比未完成更残酷,因为它没有留下任何“如果做完了就会成功”的幻想空间。它直白地告诉开发者:你完成了,但没有人需要它。
第四种是生活的中断。疾病、家庭变故、经济压力、不得不找一份全职工作——这些事情在任何人的生活中都可能发生,但独立开发者承受它们的缓冲空间极小。一个需要住院治疗的身体问题,一次必须搬家的家庭变动,一段入不敷出的经济紧张期,都足以让一个进行中的项目永久停摆。当生活恢复秩序时,代码库已经变得陌生,当初的思路已经模糊,重新拾起的心理成本高到无法承受。这种失败形态在独立游戏的叙事中最少被提及,因为它与才华无关,与坚持无关,只与一个人作为肉身存在的基本脆弱性有关。这四种形态不是互相排斥的。
一个项目可能同时经历了原型阶段的徘徊、技术债务的积累,最终被一次生活变故彻底终结。它们共同构成了独立游戏日常实践中失败的基本地层。
但这个地层在主流叙事中几乎完全不可见。独立游戏二十年,被讲述的永远是那些从卧室到百万销量的神话,那些在最后关头拿到投资的故事,那些靠一个视频扭转命运的传奇。这些叙事建构了一种集体想象:独立游戏是一场关于才华和坚持的胜利,失败只是不够努力的结果。这种个人化的解释遮蔽了一个简单的事实:独立游戏的生产结构本身就孕育着高概率的失败。一个人独自承担所有角色——策划、编程、美术、音乐、测试、市场、商务——这在任何创意产业中都是极其罕见的生产方式。电影有导演、编剧、摄影、剪辑、制片的分工体系。文学有作者、编辑、出版商的协作链条。音乐制作通常涉及词曲、编曲、录音、混音的专业分工。但独立游戏将所有这些角色压缩到了一个人身上。这不仅意味着工作量的倍增,更意味着判断力的分散。
一个独立开发者需要在同一天里做出编程架构的决策、美术风格的决策、关卡设计的决策、营销策略的决策,而这些决策所需的思维模式完全不同,有些甚至互相矛盾。编程需要逻辑严密,美术需要直觉判断,营销需要外部视角。在一个人身上同时维持这三种思维模式,是极其消耗认知资源的。
更大的结构性问题在于反馈的缺失。传统的游戏开发流程中,测试和迭代是嵌入在制作周期里的。发行商会安排内部测试,开发团队有专人负责收集和整理反馈,游戏在发售前会经过多轮外部测试。但独立开发者通常是一个人对着屏幕工作几个月甚至几年,期间几乎没有外部反馈。他们在真空中做决策,凭借自己的直觉判断这个机制是否有趣、这个难度是否合适、这个界面是否清晰。当游戏最终暴露在真实玩家面前时,那些在真空中做出的假设往往被证明是错误的——但此时修改的成本已经高到无法承受。对市场规模的错误估计是另一个系统性陷阱。独立游戏社区有一种不成文的乐观主义:只要游戏足够好,就一定会被玩家发现。
这种信念支撑着无数开发者在没有做任何市场调研的情况下投入数年时间。但“好”是一个极其模糊的标准。Steam上每年发布超过一万款游戏,绝大多数在发布后的第一个月内就沉入了推荐算法的底层。一个游戏能否被看见,取决于平台算法、媒体关注、社区传播和纯粹的运气——这些因素中,游戏本身的质量只占一小部分权重。独立开发者面对的不仅是创作上的挑战,也是一个信息过载时代的注意力分配问题。而这个问题,没有任何个人的才华和努力能够完全解决。
运气——这个词在成功叙事中通常被替换为“努力得到了回报”,但在失败叙事中却无法回避。独立游戏生产的每一个环节都暴露在运气的波动中:一个关键的媒体评测人是否恰好看到了你的游戏;一个有影响力的主播是否恰好选择了你的作品做直播;游戏发布的那一周是否有更受瞩目的大作抢占了所有关注;算法的一次调整是否让你的游戏在推荐池中的位置发生了不可预测的变化。
这些因素完全不受开发者控制,但它们加在一起,往往比游戏本身的质量更能决定一款作品的命运。当失败被个人化,这些结构性的因素就被遮蔽了。开发者从失败中吸取的教训往往是“我不够好”,而不是“这个生产结构本身就有问题”。这种自我归咎在独立游戏社区中极为普遍,它在情感上摧毁了无数创作者,让他们在离开这个领域时带着深深的自我怀疑。
2015年,一个开发者在Medium上发表了一篇文章,标题是“我不再做游戏了”。她花了四年时间制作一款叙事驱动的冒险游戏,期间经历了两次众筹失败、一次发行商毁约、以及长达一年半的无薪开发。游戏最终完成了,在Steam上售出了不到五百份。她在文章中没有抱怨任何人,只是平静地罗列了四年里的所有开销和收入。最后她写道,她不后悔,但她不会再做第二次了。不是因为她不爱游戏了,而是因为她发现这个行业对“爱”的消耗速度,远远超过了一个人能够补充的速度。这篇文章在独立游戏社区中引发了巨大的共鸣。
转发的开发者们几乎都在说同一句话:这就是我的故事。但在此之前,这些故事很少被公开讲述。因为失败在独立游戏的文化中是一种羞耻。社区聚会和行业会议上,人们谈论的是成功案例、融资技巧、营销策略。没有人愿意在公开场合承认自己的项目失败了——那意味着承认自己不够好,承认那些投入的年月没有价值,承认自己在这个以才华和坚持为信仰的社群中是一个落败者。这种沉默制造了一种扭曲的认知。每一个独立开发者都觉得自己是唯一失败的人,因为他们在公开信息中看到的全是成功。他们不知道那些废弃的代码库、停更的博客、无人问津的Steam页面才是这个领域的常态。他们以为成功是普遍的,失败是个人的。事实恰恰相反。
TIGSource论坛上的“废弃项目”讨论串是一个罕见的例外。十一年间,两千多名开发者在里面贴出了自己未完成项目的截图、设计文档、音乐片段和道歉信。讨论串的氛围不是悲情的,也不是励志的。它更像是一个沉默的仪式:一个人走进来,放下自己的废墟,然后离开。
其他人看着这些废墟,偶尔留下一句“我理解”或“我也一样”。这个讨论串没有拯救任何项目,但它做了一件更重要的事:它让失败变得可见。每一个贴出截图的开发者都在无意中参与了一项集体证词——证明失败不是个人的缺陷,而是这个领域的基本状况。
但这些废墟并不等于没有价值。这是独立游戏社区中一个被反复讨论但始终无法达成共识的问题。一些开发者认为,废弃的项目是纯粹的浪费——那些时间和精力本可以用来做别的事情。另一些人则坚持,每一个失败的项目都是一次学习,那些被废弃的代码和美术资源可以在未来的项目中重新使用。后一种说法并非完全没有根据。独立游戏的历史中确实存在一些著名的打捞案例。《Fez》的核心机制最初出现在开发者Phil Fish的一个未完成项目中。《Braid》的时间倒流系统在Jonathan Blow的早期实验性项目里有过雏形。《Undertale》的战斗系统脱胎于Toby Fox之前为《EarthBound》制作的ROM hack。
这些成功作品并非从零开始,而是在之前的废墟上重建的。但打捞叙事本身也可能成为一种新的遮蔽。它暗示失败只有在导向未来的成功时才有意义。这种逻辑仍然把价值判断绑定在最终的成功上,只是把时间线拉长了一些。
大多数失败的项目永远不会被打捞。它们的代码库永远躺在硬盘里,它们的截图永远停留在那个未完成的瞬间。它们没有导向任何成功,它们就是它们自己——一段被投入的时间,一个被追逐的想法,一个没有被完成的作品。
赋予这些失败以独立的价值,需要一种与成功叙事完全不同的伦理框架。这种框架在独立游戏社区中尚未形成,但它的雏形已经出现在一些边缘的讨论中。一些开发者开始主张,做游戏的过程本身就可以是一种有意义的实践,无论结果如何。他们用“过程导向”来对抗“结果导向”的霸权,用“创作本身即是回报”来消解商业失败带来的羞耻感。这些主张听起来有些理想化,甚至有些自我安慰的意味。
但它们确实触及了一个更深层的问题:当创作的门槛被降低到一个人可以在卧室里完成时,创作的意义是否必须由市场来确认?这个问题没有简单的答案,但它指向了独立游戏运动中的一个根本悖论。
技术民主化让“做游戏”变得前所未有地容易,但它同时也让“靠做游戏生存”变得前所未有地困难。当所有人都可以做游戏时,游戏就变得不值钱了。这不是任何人的错,这是平台经济的基本逻辑:无限供给导致价格趋近于零。独立开发者获得的是创作的自由,失去的是劳动价值的保障。
失败就是这种悖论最直接的身体经验。它不是例外,它是系统运作的正常状态。一个允许任何人进入的领域,必然是一个大多数人无法立足的领域。
这不是因为大多数人不够好,而是因为这个领域的结构设计就是如此:它用少数成功者的故事吸引大量参与者,用大量参与者的劳动维持平台的繁荣,用平台的繁荣吸引更多的参与者。在这个循环中,失败不是bug,它是feature。
2016年,Steam平台取消了Greenlight审核机制,代之以更开放的Steam Direct。任何支付一百美元费用的开发者都可以在Steam上发布游戏。这一政策被广泛赞颂为民主化的最终胜利,但它也彻底打开了失败的闸门。
2017年,Steam上发布了超过七千款游戏,是2015年的两倍多。2018年,这个数字超过了一万。在无限供给的市场中,绝大多数游戏的商业回报趋近于零。这不是预测,这是已经发生的事实。
那些在2010年代早期进入独立游戏领域的开发者,亲历了这个变化的全过程。他们中的一些人赶上了窗口期,在竞争相对缓和的时候建立了自己的受众基础。另一些人则在窗口关闭后进入,发现自己面对的是一个已经被无数游戏淹没的市场。这两拨人之间的差距不是才华的差距,不是努力的差距,甚至不是运气的差距——它纯粹是时间的差距。
但成功叙事不会告诉你这些。它只会告诉你前者是天才,后者还不够努力。硬盘里的那些废墟,就是后者的纪念碑。
在TIGSource的“废弃项目”讨论串里,有一个帖子特别安静。它只有一张截图——一个像素风格的森林场景,阳光从树叶缝隙间洒下来,地面上有斑驳的光影。画面中央站着一个戴兜帽的角色,面向屏幕深处的一条小路。截图下面只有一行字:我还会回来的。发帖时间是2011年3月。账号的最后登录时间是2012年1月。
没有人知道那个开发者后来怎么样了。那个森林场景可能仍然躺在某块硬盘的某个角落,也可能已经被格式化覆盖,彻底消失在物理世界中。但那张截图还在讨论串里,和其他两千多个废墟一起,构成了独立游戏二十年历史中最庞大的沉默地层。它们不是例外。它们是常态。只是没有人记录常态。
当旧语法彻底消失之后,失败的性质也发生了变化。在旧语法中——那些由储蓄、借款、临时零工拼凑起来的即兴经济——失败是缓慢的、可逆的、留有喘息空间的。一个项目可以搁置数月,等开发者攒够了钱再重新开始。但在新语法中,失败是迅速的、不可逆的、被算法放大的。
一个在抢先体验阶段更新不够频繁的游戏,会被Steam的推荐系统迅速降权,从可见变为不可见。一个在Kickstarter上承诺了交付日期却延期的项目,会在评论区积累越来越多的愤怒和退款要求。
旧语法的失败是安静的,新语法的失败是喧哗的——它发生在公开的平台上,被所有人看见,留下永久的数字痕迹。
这种变化带来了一个新的问题:当失败被公开化,当每一个未完成的项目都被永久地记录在众筹页面、Steam商店页面和社交媒体时间线上,开发者面对的不再只是个人的挫败感,还有公众的审视和评判。这种审视增加了失败的情感成本,也让“放弃”这个决定变得更加困难。一些开发者明知道项目已经不可行,仍然继续投入时间,因为他们无法承受公开承认失败的代价。这种“僵尸项目”在2010年代后期变得越来越常见:游戏在技术上仍然在更新,开发者仍然在发布进度报告,但所有人都知道它永远不会真正完成。这就是“半成品伦理”的阴暗面。
在独立游戏的修辞体系中,“未完成”被赋予了一种正面的美学价值——永远beta是一种姿态,是对完美主义的拒绝,是对玩家参与的开放。Minecraft在长达数年的beta阶段卖出数百万份,证明了未完成也可以是一种商业策略。但这一修辞掩盖了一个残酷的事实:大多数项目在“永远beta”中不是成长,而是消亡。它们不是选择未完成,而是无法完成。半成品伦理给了成功者一个将过程转化为卖点的叙事框架,却给失败者留下了一个更深的困境——当未完成不再是一种可以被原谅的过渡状态,而是一种被平台算法惩罚的缺陷,那些无法按时交付的开发者该往哪里去?
谢默斯·麦克纳利(Seamus McNally)的名字在独立游戏的历史中占据着一个特殊的位置。他是独立游戏公司Longbow Digital Arts的创始人,凭借游戏《越野坦克》(Tread Marks)赢得了2000年度独立游戏节大奖。但在获奖后不久,他因罹患霍奇金氏病去世。为了纪念他为独立游戏做出的贡献,2001年,独立游戏节最高奖项以他的名字重新命名,并从此附带了3万美元的奖金。这是独立游戏领域最高荣誉的名字来源——它来自一个英年早逝的开发者,一个还没来得及看到自己的事业完全展开就被生命中断带走的人。
麦克纳利的故事是“生活的中断”这一失败形态最极端的版本。但它也提醒我们,每一个独立开发者都是一个肉身存在,都会生病、衰老、被不可预知的变故击中。独立游戏的生产结构将所有的风险集中在一个人身上,包括那些与游戏完全无关的风险——健康的风险、家庭的风险、经济环境的风险。当这些风险兑现时,没有人能接住它们。没有公司的人力资源部门来安排病假和替代人手,没有机构的财务储备来缓冲收入的突然中断,没有同事可以临时接管项目。一个人的工作室意味着一个人的脆弱。2019年,一个用户在itch.io上发布了一款游戏。游戏很小,只有三个关卡,像素风格,玩法是标准的平台跳跃。游戏页面上的简介只有一句话:这是我十年前没做完的那个游戏。
我现在把它放上来,不是因为它完成了,而是因为我不再需要完成它了。游戏是免费的。下载量不到一百。但在页面的评论区里,有一个人留了言:谢谢你把它放上来。留言者的头像是一棵树。注册时间2011年。
这个小小的交换——一个未完成的游戏被放上来,一个陌生人为之道谢——不解决任何问题。它不能让那个开发者收回十年的时间,不能让那个游戏被更多人看见,不能改变独立游戏生产结构中的任何不公。但它做了一件微小的事情:它承认了一个失败项目的存在,并且赋予它一个位置。那个位置不在成功叙事的殿堂里,不在Steam的热销榜单上,不在任何游戏媒体的年终评选中。它就在itch.io上,一个允许任何人上传任何东西的平台,一个对“完成”没有要求的空间。
itch.io是2013年上线的。它的创始人Leaf Corcoran设计这个平台时的初衷很简单:让开发者可以以任何方式发布和销售自己的游戏,没有审核,没有门槛,没有算法推荐的主导权。
在Steam日益成为独立游戏主战场的那些年里,itch.io始终维持着一种刻意的边缘性。它不试图和Steam竞争市场规模,不试图用算法优化用户的消费行为,不试图建立任何质量门槛。它只是提供了一个空间,让游戏可以被上传,被下载,被看见——或者不被看见。
在这个空间里,失败不需要被隐藏。itch.io上有大量未完成的作品:只做了一个关卡的平台游戏,只写了一段剧情的视觉小说,只搭建了一个场景的步行模拟器。它们被上传,被标为“原型”或“废弃项目”或“未完成”,然后安静地待在服务器的某个角落里。偶尔有人下载它们,偶尔有人留下一条评论,大多数时候它们只是存在着。
这种存在本身构成了一种与主流叙事平行的档案——一个关于独立游戏真实生产状况的档案,一个失败也可以被保存的档案。但itch.io的边缘性本身也是脆弱的。它依赖创始人的意愿和平台的独立运营,不依赖风险投资,不追求指数级增长。这种模式在短期内是可持续的,但在长期中始终面临着不确定性的压力。
如果有一天itch.io无法维持运营,那些被上传的未完成游戏——那些没有在其他任何地方备份的废墟——会随着服务器一起消失。数字存档从来不像它看起来那样永恒。硬盘会损坏,服务器会关闭,域名会过期,格式会过时。
那些躺在硬盘里的废墟,那些被上传到小众平台上的未完成作品,它们的物质基础远比我们想象的要脆弱。当风险完全下放给个人,独立游戏的多样性依赖于大量个人的非理性执着。
那些古怪的、无法被商业计划书论证的项目,那些纯粹出于个人兴趣和审美偏执的作品,它们之所以存在,是因为有人在明知可能失败的情况下仍然选择投入。这种投入在旧语法的弹性时间中是可持续的——一个项目可以搁置半年,等开发者攒够了钱再重启;一个失败的项目可以被视为一次学习,它的碎片可以在未来的作品中被重新使用。但在新语法的算法压力下,这种弹性正在消失。抢先体验要求持续更新,Kickstarter要求按时交付,社交媒体要求不断输出内容。一个项目搁置半年不再意味着暂停,而是意味着被算法遗忘,被支持者抛弃,被市场永久地标记为失败。
这不是一个关于失败的故事。这是一个关于什么使得失败可以被承受的故事。
在GameDev.net那个四十多页的讨论串里,有一个人回帖说,他保留着每一个失败项目的文件夹,就像保留着旧照片。他偶尔会打开它们,不是为了打捞什么,只是为了看看自己曾经走过的路。他说,那些未完成的代码和未使用的素材不是废墟,是肥料。它们不会自己长成什么东西,但它们改变了土壤。这个比喻也许过于诗意了。大多数失败项目不会改变任何土壤。它们只是躺在那里,被遗忘,被覆盖,被新的失败项目压在下面。但偶尔——非常偶尔地——在这片由废墟堆积而成的土壤里,会长出一些东西。不一定是成功的作品。可能只是一张截图,一个论坛帖子,一个itch.io页面上无人下载的zip文件。它们安静地存在着,不要求被记住,不承诺会回来。它们只是在那里。像森林地面上那些没有长成树的种子。