这事儿,得从上次写那个「互动小说生成器」说起。哦,抱歉,估计大家每天都会被迫看几条AI相关的文章,这篇多少又和它有关。上次那个互动小说生成器就是 AI 驱动的嘛。说实话,虽然我当时只是把它嫁接在 mastodon 上面,作为一个社交平台机器人,接收网友的互动指令来生成故事内容,但是我对比了一些市面上专为写小说而设计的工具,其实设计思路上,我自己感觉,那个简单的机器人已经是第一流的水平了:它有世界状态快照,记录故事中出现过哪些人物、物品、线索,「第一幕中有把枪挂在墙上,那么在第二幕或者第三幕中这把枪必须发射」;它有因果链,记录每一个事件的前因后果,避免情节出现矛盾;它还有节奏器,负责控制不同章节的节奏快慢,以及实现我个人趣味方面的章节间字数多少的某种韵律感……好了,不说了,虽然我自认为设计的很不错,不过我也必须承认,AI 搞创作,还是不行。对文字有足够的敏感度,就总会觉察到,处处别扭。所以再是耗费心力写出来的代码,也毫不吝惜地删了。
不过能不心疼吗?我都没存到 github 上就那么给删了。所以,后来又想着,也不真用它写小说,就玩儿呗,再写一个更周详的工具吧。于是就有了现在这个还在弄的游戏。刚才也提到了世界快照,生产故事已经用到了「世界」这个概念,那么继续把这个世界充实起来,就也顺理成章。其实我读小说时经常会想,曾经和主角擦肩而过的那些无名的角色,他们的日常是怎样的呢?难道他们的生活就没有被书写价值吗?所以一开始,这个游戏是想呈现出一部全景小说。玩家随便选择一个角色,就能观看聚焦在这个角色周围的故事。因为一开始的想法是游戏里的每个 NPC 都由 AI 驱动,所以很自然想到了《西部世界》,所以我给项目文件夹命名「东部世界」,但是想也知道那不太现实,先不说 AI 太贵,就算不差钱,如果 NPC 每个行为都要几十秒运算,那也卡得不像样了。还是得老老实实像传统游戏一样写代码,给 NPC 设定日常流程,饿了该吃饭、渴了要喝水,这些不能是 AI,而是 if else。不过还是得感谢 AI,慢慢程序有了个雏形,我弄得很慢,因为 AI 写出来的东西我要求自己不看明白咱就不继续往下走,边看边学吧。这也是我没打算把这个东西开源的原因,小玩意不值得拿出来现眼是一方面,主要是高手云集,诸位写得快,我学得慢,还不一下子就成了我看都看不懂的东西了?那可不行,别剥夺我的快乐。总之吧,游戏渐渐也跑起来了,让我想到《楚门的世界》,因为我就像是在对着镜头窥视这些一无所知的 NPC 生活。所以我又给游戏取名字叫《甄仁岛的故事》。楚门对甄仁,还不错。
我跟朋友聊起这个游戏,他说,啊?就是看文字?哈哈,好像「看文字」现在成了很奇怪的事,这倒又给了我一些想法。我觉得游戏叫《甄仁岛的来信》吧,不光是纯文字的游戏,索性,连原计划实时查看世界正在发生的故事的「信息看板」都砍掉,游戏世界就是个黑盒子,我们不知道里面在发生什么。倒也符合游戏世界的设定:那是一个被奇特场域包围,导致人类无法进入或离开的一个小岛,有大约几十个岛民居住其上,每天只有一班无人驾驶的轮渡进出岛屿,补给物资,同时也运送信件。玩家唯一可用的交互方式就是,特定时间段,在游戏的网站上投递信件,回信第二天才能跟随轮渡回到码头,寄送到玩家手上——也就是注册时填写的电子邮箱里。
如果当作小说来看,AI 的创作的确不行,但是当作游戏来玩,那种略有些别扭的文风,恰好带来一种复古游戏体验。第一个阶段的游戏目标是,通过文字交流,画出甄仁岛的大致地图。我还在想奖品是什么。毕竟这还挺难的,奖品也得够有吸引力才行。为了实现这个探索地图的功能,我已经实现了 NPC 在地图上自由行走,并且会记录下从 a 点到 b 点用了多少时间,但是,行走速度和身高和年龄有关——又是 if else 算出来的数值。而且岛的面积可不小,要想确定地图内容,得和不止一个 NPC 对话,互相参照和补充着分析才行。他们现在也已经可以主动规划去走一遍 a 到 b 的旅程,但是经我测试,怎么劝他下定决心,放弃当天的工资,去专程走这么几趟,是需要一些笼络人心的话才行的。
然而。我支线开得太多,性格又拖泥带水,总感觉离「现在就上线吧」还差那么一点:应该有真实的经济系统;应该有最初设想的故事性……而且一边写,一边学,有时候恍然大悟,哇哦原来可以这样实现?那岂不是之前那个功能可以写得更优雅些?于是,版本才到 0.001,却已经重构三次了。哦,我还忘了提,李飞飞工作室出的那个简单提示词生成一整个图形化可交互世界的 AI 产品,简直是和我这个小小小游戏完全两极的东西。总之就到这里吧,今天就不看代码了,梳理一下思绪,记上这一笔。希望早日完工,但也可能完不了工。