2.2.1 复杂而又有深度的故事情节
在故事情节方面,角色扮演游戏通常自成一类。尽管许多游戏的安装手册中都只有两段来进行介绍,它们实际上都可以归结为“你的背上背有500磅的炸药。炸掉一切可以移动的东西,你就可以拯救民主了”,但是RPG游戏看起来更像是交互式小说。这就意味着游戏中将会出现进行无穷行对话的人物角色和带有无数“场景点”的高度结构化的游戏场景。设置这些场景点的目的就是为了推动故事中游戏的进展。
在玩家冒险经历的每一个场景点,游戏都需要知道玩家在到达该处之前完成了哪些主要的事情,从而确定游戏世界中的现在状态以及将要发生的事情。例如,如果游戏玩家不能提前阻止坏人炸毁通往游戏世界隐蔽处的那座桥梁,那么他们后来或许就不得不要寻找另外一条可以替代的路径。
解决方法
许多的RPG游戏都采用一组“标记(flags)”来记录场景点或者是游戏世界中的现在状态。每个标记代表游戏中的一个事件,它可以是真(TRUE)或是假(FALSE)(尽管很多类似的系统允许标记更加复杂,而不仅仅只是布尔变量(Boolean values))。在游戏刚开始的时候,所有的标记都被设置为FALSE,因为游戏玩家还没有做任何的事情。在游戏玩家玩这个游戏的过程当中,他们将会有机会接受各种挑战,结果有可能是成功也有可能是失败,所有的标记也都会相应地进行更新。因此,在某一个具体的时间,标记数组都会为玩家的行为提供一个相对合理的详细历史纪录,这些记录在游戏中可以被用于决定接下来将要发生什么事情。例如,如果想查询敌人的桥梁是不是已经被炸毁,那么就需要检查相应的标记。如图2.2所示,游戏中的每个事件都由游戏标记数组的一个元素(通常为Boolean变量)来表示。在每一时刻,这个数组都可以用于确定游戏玩家的大概经历,也可以用于确定未来事件和条件。

图2.2 游戏标记数组
这套系统可以有很多种实现方法。一种方法就是在引擎的源代码中直接建立标记数组,并向游戏脚本提供一个访问接口,这个接口允许脚本对于数组进行读写操作(基本上也就是“读”和“写”两项功能)。如果采用这种方法,那么隐含在标记系统后面的所有逻辑和功能都依赖于外部的脚本,只有这个数组本身需要建立在游戏引擎的内部。然而,如果你的脚本系统能力很强的话,那么你甚至也能够将这个数组存储到一个脚本的内部,从而使得它和游戏引擎完全没有什么联系。从技术层面上讲,这当然是一种最理想的选择,因为这样的话,所有的游戏逻辑都与主引擎实现了分离。当然,毫无疑问,这两种方法都是可以接受的。






