[转]NS入门教程,第五篇



kiseeyou
2010-05-26 11:43:54

LEVEL 4 向左走,向右走 选择与跳转、变量入门
相关指令:
select
goto
mov
add
sub

相关符号
*(标签)
%(变量)

--------------------------------------------------------------------------
游戏之所以不同于其他任何一种娱乐形式,就在于,游戏具有“互动性”。
也就是说,随着玩家的动作,游戏也会做出相应的反映。
在多线型的电子小说中,这就表现为最简单的形式——选择。
屏幕上出现几个选项,而玩家从中选择一个,从而走到不同的路线上。

NScripter除了本身的*define和*start区以外,允许玩家在*start区里自定义以 * 号开头的标签。标签的作用,就是把整个游戏脚本分成多个部分,每两个标签之间,可以视为一个“事件”。比如说,以下这样的形式。

*define
game

*start

*event1

*event2

*event3

end

NS默认的执行方式,就是从*start开始,一路执行到end。
所以一定会经历事件1,2,3。
如果想要作一个三个选项的选择支,然后根据选择的不同而分别走向事件1,事件2,和事件3,那么,就可以写成这样。

*define
game

*start
select "我选一", *event1,"我选二", *event2,"我选三" ,*event3

*event1
你选择了一。
end

*event2
你选择了二。
end

*event3
你选择了三。
end

以上,就是一个简单的选项。
和之前的例子还有一点不同,那就是每个事件的结尾,都加上了end。
不妨试看看,假如删除前两个end会出现怎样的情况。

没错,删除end之后,再选择“我选一”,执行*event1的内容之后,还是会继续接下来执行*event2和*event3。

当然,一般来说,根据选择分歧的事件,往往最后还是会合到一条路来。所以简单的加入end不太实际。

*define
game

*start

select "我选一", *event1,"我选二", *event2,"我选三" ,*event3

*event1 ;事件1
你选择了一。
goto *goodending

*event2 ;事件2
你选择了二。
goto *goodending

*event3 ;事件3
你选择了三。
goto *goodending ;因为是紧接着的,这行其实可写可不写,看出来了吗?

*goodending
这里是结局了。
end

这个例子里,无论选择了哪个项目,在执行完对应的事件之后,都会汇合到最后一个事件里。
Goto 所起的就是这个在事件之间跳转的作用。

到现在为止,已经可以做出一个互动的电子小说了。

现在,只要稍微动动脑,NS的官方范例游戏《泡沫》,都可以用现在所知道的技术实现了。
《泡沫》的标题就是用“全透明对话框”+“选择”构成的。虽然简陋,但是也相当实用哦。

--------------------------------------------------------------------------

忙完电子小说,当然要开始考虑其他更复杂的AVG了。
恋爱游戏里最重要的是什么?
PPMM?——错!
答案是——好感度!
那么,好感度的本质是什么呢?
根据你的“选择”,对方对你的好感度会有“增加”、“减少”或者“不变”三种可能。
说白了。好感度,就是一个数值而已。=v=
这种可以加加减减的数值,在游戏里就叫做“变量”或者“变数”——因为是可以变化的嘛。
变量本身需要有一个名字,例如“某人的好感度”,“某人的BT度”“HP”,“昨天的台风等级”等,而变量的内容,就是一个数字。
在NScripter里,变量的名字是以 % (百分号)开头的。可以从 %0 到 %4010以上(以2.45版测试,到%5000虽然不会出错,但是变量的操作不会被记录下来。4000应该说是相当够用了)。
当然这个%0 ,%4010之类的并不是变量的内容,而是变量的名字,或者说编号哦。
变量本身的内容,则是需要通过赋值(代入)和操作(加减乘除等)改变的。
比如
mov %10,200
代表把200这个数赋值给%10这个变量。
那么,现在,%10=200
add %253,300
代表把变量%253的现有数值再加上300
sub %4010,25
代表把变量%4010现有的数值减去25。

--------------------------------------------------------------------------

假设我们现在规定变量 %10 ,作为某个恋爱游戏女主角的“好感度”。
然后,写出这样一段代码。

*define
game

*start
mov %10,0 ;把对方的好感度预设为0

一起去公园怎么样?

select "好啊",*event1,"不行",*event2,"那个,稍微有点事……",*event3

*event1 ;事件1
嗯,那么走吧。
add %10,5 ;对方好感度上升了
goto *goodending

*event2 ;事件2
真是的,那么凶干吗……
sub %10,5 ;对方好感度降低了
goto *goodending

*event3 ;事件3
这样啊,太遗憾了。

*goodending
这里是结局了。对方对你的好感度现在是%10哦。

end

执行一下这段,就会发现选择1,对方的好感度是5,选择2的话,则是-5,选择3,是0。
变量的名字,也就是%10,直接出现在对话里,显示出来的却是变量的具体数值。
不知不觉,居然写满4页……那,收工吧。=v=

[attachment=182]

再来看下这张图。虽然对话一样,但是和上面的样例有一些不同。
加入了对话框的使用,并且用换行符号 @ 代替了翻页符号 ,让剧情看起来更连贯。
当然要记得,对话+选择总的行数不能超过对话框设定的范围,否则会出错的。

--------------------------------------------------------------------------

本日小贴士:变量的管理。
游戏做得久了,哪几个变量用过哪几个变量没用过,基本上是记不清楚了。
非常可能因为这样出现各种低级错误。《=某D就犯过把HP当作临时变量操作来操作去的白痴错误。
因此,建议大家开始制作游戏前先准备好笔记本,将大致的变量区间分配下。
比如,%200到%300用做人物好感度,而%400到%600用做人物的养成数值等等。
同时在制作过程中,将已经使用过的变量标注出来。当然也推荐使用excel类的工具进行列表。
另外,为了避免一操作变量的时候一个不小心把mov %100,20写成mov %1000,20,NScripter也提供了变量自行命名的功能。
在*define区块里加入:
numalias attack,1
就代表把变量%1命名为attack
这样以后操作变量%1的时候,除了可以用mov %1,20的写法,也可以用mov %attack,20的写法。
--------------------------------------------------------------------------

作业:技术含量和《泡沫》差不多,带分歧与好感显示的电子小说……=v=