条件分歧
多路线电子小说
“根据选择或者其他操作,让游戏走向不同的剧情”是文字冒险游戏和一般的小说最大的区别之一。 例如恋爱游戏里,当某角色好感度高于90的时候,走向角色结局,否则就走向普通结局。 而实现这样效果的指令就是“条件分歧”,也就是“根据条件不同,执行不同的脚本段落”。
当好感度到达某个数值时……
还有一种常见的剧情设定,就是在选择之后剧情并没有什么特别的变化,但是到了后面某个地方,突然之前埋下的“地雷”就炸了。 例如说,在第一个事件里让角色的好感度下降了, 在出现第二个事件的时候,本来有三个选项可以选,但好感度不够,于是只显示了两个。 这种情况,就需要用到条件分歧了。 假设一下接下来就是这种情况。 如果f.好感度的值>=5,那么玩家就可以看到三个选项,否则的话就只能看到两个选项。
插入一个条件分歧
![](https://imgs.xnip.cn/cj/docimg/425/275b559a-2fab-4e5e-81e0-cd2a9e6e0c5e.jpg)
![](https://imgs.xnip.cn/cj/docimg/425/98b3d1ac-457c-4e76-b65f-d9e6b533161c.jpg)
在第二个选择按钮下面新建一行,戳一下“变数系统-创建分歧”。
![](https://imgs.xnip.cn/cj/docimg/425/d14b2117-7a2e-484e-b541-b4502e35a372.jpg)
这里的条件要填什么呢。虽然可以猜得出来是“f.好感度>=5”,不过也不能这么蒙吧。 这个文本框后面有个□。在THE NVL Maker里,这就表示“你基本可以用鼠标来解决问题”,请继续往下看。
TJS条件生成器
![](https://imgs.xnip.cn/cj/docimg/425/b8ca5816-bb37-46dd-b803-07deae9a221d.jpg)
为了避免看到TJS头大而导致的不会写条件或者条件写错,NVL提供了从图形化生成TJS条件式的功能。 填写这样的东西,应该没问题吧。
![](https://imgs.xnip.cn/cj/docimg/425/e35c264a-9f95-4c7b-9206-098aadb48cc2.jpg)
先别急着点确认,这里需要多一步:
![](https://imgs.xnip.cn/cj/docimg/425/a5191577-66f4-4209-b0fc-6ac35e5f4c49.jpg)
点一下条件生成器最下方的这个按钮,查看一下系统自动生成的TJS条件式是不是对的。
![](https://imgs.xnip.cn/cj/docimg/425/a3215678-95d9-4fcb-86e6-e746b2ef14fc.jpg)
没有问题,再点下“确认”。
在条件分歧的范围内,填写新的指令
![](https://imgs.xnip.cn/cj/docimg/425/d0e55a9f-8d29-4ec5-a853-832a9a9bad86.jpg)
因为没有其他的分歧情况,也没有“都不符合”的时候的默认分歧情况,所以就这样保持原样,点下确认就好了。 现在,我们已经成功地创建了一个非常简单的条件分歧,该是往里填内容的时候了。 在“条件分歧”和“条件分歧结束”中间,填写的指令只会在满足条件时才发生。 如上文所说,我们要做的:当满足“角色好感度大于等于5”这个条件时,增加一个选项。 所以接下来要做的,当然是在正确的地方插入选项按钮了。
![](https://imgs.xnip.cn/cj/docimg/425/cd5a9ffa-490b-40c8-aff6-f4daa8ff05f2.jpg)
最后,跑一次游戏测试? 注意下面的截图只有在好感度大于等于5的情况下才会出现哦。
![](https://imgs.xnip.cn/cj/docimg/425/1a775061-70d8-4b0f-a405-a195e6ec4ab2.jpg)
条件分歧还能用来做什么?
答案是……咳咳,几乎所有的事。 下面就是两个简单的使用说明。
当游戏通关时,改变标题画面
NVL的标题画面配置文件名叫Data\macro\uititle.tjs。 假设我们复制一份编辑好的uititle.tjs,然后改名叫uititle1.tjs 接着通过NVL的界面编辑器继续修改uititle.tjs,那么我们手头就有了两个不同的标题画面配置文件。 当游戏通关时,设定某个sf变数,例如 sf.通关=1 。 接下来,在Data/scenario/title.ks里设定一个条件分歧,当 sf.通关 为1的时候,加载uititle1.tjs,否则的话还是和原来一样加载uititle.tjs。 模板工程的title.ks里就有范例的写法,去掉注释行即可使用。 你可能会疑惑模板工程里的代码看起来和上面说的不一样?——那是因为这里用的是TJS写法而不是KAG写法。 在需要执行的内容比较复杂的时候,TJS的写法要更简明一点。
通关后再次进行游戏时,追加隐藏人物的剧情
当游戏通关时,设定某个sf变数,例如 sf.通关=1 。 接着,在某段剧情里设定一个条件分歧,例如这样:
[if exp="sf.通关==1"] [jump target="*隐藏人物剧情"];条件满足时执行这一行 [else] [jump target="*正常主线剧情"];条件不满足时执行这一行 [endif]
那么当剧情执行到这里时,通关以后的玩家就能够触发隐藏人物剧情,而未通关玩家看到的就是正常主线了。 请注意这里的条件分歧比之前说的选项多了一种情况,那就是“不满足条件”的情况。这是用指令[else]来表示的。 每个条件分歧都必须要有[if](条件分歧)和[endif](条件分歧结束)指令。 至于[else](不满足条件,也就是默认分歧的情况)和[elsif](不满足[if]条件,继续判断是否满足其他条件,也就是继续分歧的情况)则是可选的。 实际上,对于新手来说,只要能掌握[if]和[endif]就够了,其他的情况都可以用多个分开写的[if]和[endif]来实现,所以看不懂上面这行也没多大关系啦。