本节书摘来异步社区《游戏大师Chris Crawford谈互动叙事》一书中的第9章,第9.6节,作者: 【美】Chris Crawford译者: 方舟 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。
9.6 互动小说机理剖析
游戏大师Chris Crawford谈互动叙事
所谓“开发环境”,就是让作者制作软件的程序。程序员使用的开发环境一般都功能强大。我们固然也可以把文字处理软件称为“文档开发环境”,不过这听起来就有些言过其实了,因为“开发环境”这个术语通常特指用来制作软件的程序。IF是交互式的,自然需要在开发环境里通过编程来实现。要了解一种技术的能力大小,最简单的办法就是去了解其开发环境。只要我们看一看艺术家创作时使用的工具,就能对作品的发掘潜力获得比较清楚的认识。
9.6.1 Inform 7
最流行的IF开发环境是Inform 7。它始于1993年,是一款功能强大的复杂软件。在Inform 7里编写的程序读起来与普通英语差不多。
"Feline Behavior"
The Kitchen is a room. The cat is an animal in the Kitchen. In the Kitchen is a bowl,
a ball of wool, a newspaper. The bowl contains a quantity of cream.
The cat is wearing a silver collar. The description of the cat is "It is wearing [a
list of things worn by the cat]."
The player carries a closed openable container called a bag. The bag contains catnip.
The cat behavior rules is a rulebook producing an object.
A cat behavior rule when the cat can touch the catnip:
say "The cat frolics with the catnip until nothing remains of it.";
rule succeeds with result catnip.
A cat behavior rule when the cat can touch the cream:
say "The cat laps up the cream.";
rule succeeds with result cream.
A cat behavior rule when the cat can touch the ball of wool:
say "The cat makes the ball of wool into a useless tangle which must be
discarded.";
rule succeeds with result ball.
A cat behavior rule when the cat can touch the newspaper:
say "The cat bats playfully at the newspaper until all the nasty boring articles
are destroyed.";
rule succeeds with result newspaper.
A cat behavior rule:
say "The cat looks miffed at the lack of ready entertainment, and glares at you
with yellow eyes as though wondering whether your pants leg is good for claw-
sharpening.";
rule fails.
Every turn:
let the destroyed object be the object produced by the cat behaviour rules;
if the destroyed object is not nothing:
remove the destroyed object from play;
say "[line break]Good thing you have no use for [the destroyed object]
yourself.[paragraph break]".
Test me with "z / z / open bag / z / z".
这个小程序创建了一幅完整的场景:一间厨房、一只猫、玩家,以及几个可供猫玩耍的物品。这只猫会玩弄这几个物品,直到所有物品都被弃置,然后猫会对玩家投去淘气的目光,游戏就此结束。
当然,这个小例子无法体现Inform 7的强大功能,只是用来说明它采用的语言非常易懂。与所有其他编程语言一样,这种语言编写起来也并不容易,因为用词并不是随意的。Inform 7的语言使用一组明确定义的关键字,每个关键字实现特定的功能。IF作者必须记住所有关键字,并且学会熟练运用它们进行创作。这当然也算不上什么特别的难度,毕竟所有开发环境都是如法炮制的。Inform 7是笔者见过的最简单易用的开发环境。
9.6.2 Inform 7的表达能力
与其他所有开发环境一样,Inform 7对完成特定的任务进行了优化处理。Inform 7也可以用来实现其他未进行针对性优化的任务,只不过实现起来自然就麻烦一些。Inform 7对下列任务进行了优化。
1.空间
作者可以创建任意数量的舞台(在Inform 7中称为“rooms(房间)”),舞台之间可以任意相连。舞台之间的切换通常是即时的,但是也可以人为地进行延迟。舞台被组织在一张地图上,方便作者进行编辑。玩家可以通过“Go X”(其中X指代某一方向)指令进行舞台切换,还可以用“Go to Y”(其中Y指代某一舞台)指令实现同样的操作。在可能的情况下,Inform 7还能自动带玩家穿过必要的舞台,以便达到目的地。
2.时间
IF游戏是回合制的,玩家每个回合可以输入一条指令,作者可以设计指定回合数的延迟。
3.输入
所有指令都是通过键盘输入的,形式类似英语。作者可以定义任意多个词汇供玩家使用,每个词汇都对应特定的意义。Inform 7能自动辨识特定词汇的基本属性,比如“room”会被自动视为可以包含玩家角色和各种物件的地点。玩家有时候必须猜测应该使用什么词汇,如果系统无法识别玩家输入的词汇,就会给出错误信息。
4.输出
回显给玩家的输出同样是文字信息。Inform 7号称能够根据作者的想法让文字描述变得生动自然,会自动修订文本,安插相应的代词,以使其与上下文搭配。Inform 7的文本处理是其最出众的能力之一。
5.道具
作者可以创建任意多的道具,并且将其安置在房间(舞台)里,还能指定其归属。道具的内建属性颇丰,可大可小、可轻可重,可以嵌套(在道具里放入其他道具)。作者可以对道具赋予自定义的特殊属性,用于控制游戏的运作。Inform 7的道具控制也是其另一个出众的能力。
6.行为
作者几乎可以为任何道具或者房间定制响应行为。这些行为可以由作者设立的任何条件触发:之前的特定活动、特定道具是否存在,以及数字变量的当前值都可以作为条件来触发响应行为。
9.6.3 优缺点分析
计算机科学家曾经证明过这样一个问题:任何能够付诸编程实现的操作(operations)都可以在电子表格程序中实现。换句话说,作为一种计算环境的电子表格能够处理任何可编程的问题。当然,没有人会因此就转而使用电子表格来解决所有编程问题。
虽然一项计算任务也许在理论上完全可以用电子表格来实现和执行,但是如果这样做非常繁琐的话,那么也就不太实际了。假设我们给电子表格程序安装一个“读取二维数组绘制像素图形”的插件,用单元格来代表像素,然后编写公式来控制每个单元格如何显示,那么我们也就能够通过电子表格来绘制任何图形了!
开发环境也具有相同的特点。任何计算机程序都可以用汇编语言来编写,因为汇编语言是针对CPU设计的底层语言。然而,采用汇编语言编写程序是非常繁杂和困难的,因此绝大部分程序都是采用高级语言来编写的。不到万不得已的情况,没有人会主动选用汇编语言。
无论是编程语言还是开发环境,所有编程工具的设计目标之一都是减轻解决特定类型的问题所需的工作量。古老的FORTRAN语言是针对科学计算而优化设计的,BASIC、Pascal和Pilot等语言都特别适合用于教授编程概念。如今,C#是Windows平台上桌面程序开发的首选语言,而JavaScript或PHP则主要用于开发Web程序。
有优点则必有缺点:针对特定问题优化过的程序在处理其他问题方面必然就会相对差一些。Inform 7自然也是如此。
Inform 7有其强项:自然语言格式、强大的文本处理能力、道具相关的任务自动化处理能力等。现在来谈谈它的不足。
1.数值计算
以笔者的拙见,Inform 7的一大弱点是数值计算能力不足。虽然它可以处理加减乘除这4种基本操作,还可以进行平方根计算,但是它对计算公式的支持则相当粗糙,而且对数值变量的管理也相当困难。另外一款名为TADS的IF开发环境在数学计算方面就比Inform 7强多了。
2.过度依赖布尔计算
与对数值计算支持不足密切相关的另一个弱点是对布尔计算的过度依赖。诸如道具是否被损坏、孰轻孰重、可见还是不可见之类的状态的确可以用布尔值来实现,然而用它来表达人际关系就多少有点相形见绌了。珍妮对约翰是否非爱即恨?弗莱德是否要么友好要么冷漠?汤姆是否不是英雄就是狗熊?人际关系从来都不是黑白分明的,而是具有连续的程度差异。Inform 7所推崇的布尔值系统迫使作者不得不把所有事情都分出黑白来。
诚然,Inform 7是针对作者而不是科学家设计的,我们当然不应该期望它具备强大的科学计算能力。尽管如此,对计算能力的过度简化仍然是一个弱点。
3.结构缺失
对高级编程架构的支持不足是Inform 7的第二大弱点。现代编程语言的设计体现了历代程序员在编写大型程序时获得的经验教训,这些现代语言为结构化提供了良好的支持,使得编写大型程序变得相对更容易,而不至于让程序员迷失在复杂的程序指令当中。尽管Inform 7提供了相当优雅的结构化系统,但是要想创建足够大的故事世界以使其具备最基本的吸引力,做起来仍然是相当令人头痛的。
以一款名为Alabaster1的优秀互动小说为例,其源代码由12个条目组成,到了第二级至少有60个条目,在第三级还有更多条目。每个条目下的指令代码占用大概一页的篇幅,所以总共大约有2000行指令代码—以计算机编程的行业标准来看,也算是中等规模的程序了。阅读这些代码如同探索迷宫一样困难,其中充斥着各种对其他位置的引用。查找这些引用并非易事,整个程序梳理起来可谓是一团乱麻。