EraBasic 的结构

翻译自原文档:http://cbaku.com/b/erakanon/eramaerc.html

基本信息

EraMaker 的启动

程序启动后,会出现标题屏幕,你可以选择“从头开始”或“加载存档”。当你选择“从头开始”时,ERB文件中的EVENTFIRST函数会被调用。

EVENTFIRST执行完毕后,游戏便会结束。在函数执行完毕之前调用BEGINSHOPTRAIN函数进入相应的游戏逻辑是有必要的。

SHOP

进入SHOP

进入 SHOP 流程后,@EVENTSHOP函数(如果有的话)将被调用。这是一个事件函数。

之后,@SHOW_SHOP函数将会被调用。可以在此函数中显示一些基本信息,如日期和训练中的角色等。调用PRINT_SHOPITEM显示出售中的物品,或是显示一些特殊的选项,如保存和加载等。

在SHOP流程中选择命令

如果选择的数字位于0-99,则意味着购买物品。

如果选择任何其他数字,将调用函数@USERSHOP,所选择的数字被储存在RESULT变量中,等待进行后续的处理。

此处可参见实例游戏中的SHOP.ERB文件部分,方便理解。

购买

当你购买物品时,函数@EVENTBUY将会被调用(如果有的话)。这是一个事件函数。(如果你想把已购买的物品从商店的品种中删除,使用这个功能是个好主意。)

TRAIN

进入TRAIN

进入 TRAIN 流程后,@EVENTTRAIN函数(如果有的话)将被调用。这是一个事件函数。

然后,@SHOW_STATUS函数会被调用。这个函数会显示日期、训练中的角色等基本信息,以及使用PRINT_PALAM命令来显示训练中的参数。可以试一试。

然后,可以供玩家执行的命令会自动显示。命令显示时会自动调用相应的@COM_ABLE××函数,若函数的返回值RETURN1,则意味着该命令可以被玩家点击。若相应的@COM_ABLE××函数不存在,也意味着命令可以被玩家点击。更多细节参见示例文件COMABLE.ERB

此外,一个名为@SHOW_USERCOM的函数会被调用,类似于“结束训练”之类的特殊命令应该显示在该函数内。

更多信息参见示例文件:SYSTEM.ERBINFO.ERB

TRAIN中的指令选择

当玩家选择一个指令时,@EVENTCOM函数(若有)会被调用。这是一个事件函数。另外,与所选命令相对应的函数会被调用,如选择“正常位置”命令,并且TRAIN.CSV文件中的“正常位置”命令对应的编号为20,则将调用一个名为@COM20的函数。

若一个动作函数无法执行,则在函数中调用RETURN 0语句,便会返回到命令选择界面,而不继续执行命令。

若一个命令可以被执行,在@COM××中就会执行RETURN 1,然后@SOURCE_CHECK函数就会被调用。训练的结果反映在这里的训练参数中。

更多信息参见示例文件:COM××.ERBSOURCE.ERB

TRAIN中的指令选择结束

指令选择结束后,事件函数@EVENTCOMEND(若有)会被调用,可以在该函数内执行显示角色台词等行为。

更多信息参见示例文件:CKOJOxx.ERB

用户命令

如果动作选项所对应的@COM××函数不存在,将调用@USERCOM。

更多信息参见示例文件:SYSTEM.ERB

AFTERTRAIN

进入AFTERTRAIN流程后,事件函数@EVENTEND(若有)将会被调用。

训练结束后,人物的台词可以在这里进行处理。此外,训练结束后的结算(珠等)也应在这里进行。

更多信息参见示例文件:AFTERTRA.ERB

ABLUP

ABLUP的显示

首先,@SHOW_JUEL函数会被调用,显示当前所有的珠子。

然后,@SHOW_ABLUP_SELECT函数会被调用,显示能力列表和退出按钮。

更多信息参见示例文件:ABL.ERB

ABLUP的指令选择

当玩家选择一个命令时,相对应的函数将会被调用,如选择“[3] C感觉”,就会调用@ABLUP3函数。

若相对应的@ABLUPxx函数不存在,则将调用@USERABLUP函数。选择的命令编号储存在RESULT变量中,可以在函数中进行相应处理。

更多信息参见示例文件:ABLUP××.ERBABL.ERB

TURNEND

进入TURNEND流程后,事件函数@EVENTTURNEND(若有)将会被调用。

在这里可以处理一下关于时间和角色状态(如恢复等)的逻辑。

注意:若事件函数@EVENTTURNEND未定义,则游戏会停止。

更多信息参见示例文件:SYSTEM.ERB

事件函数

关于事件函数

事件函数是指游戏生命周期中的固定位置会被调用的函数。如命令执行完毕会训练开始时。

当你想显示人物的对话时,事件函数很有用。如果你把台词直接写在相应的@COM××函数中,就会让人难以理解。而如果利用事件函数,则可以方便地单独管理相关台词。

事件函数可以重名。

如:

;正常位置执行结束的时候的台词
@EVENTCOMEND
;正常位置的编号为20。若不是20就无视
SIF SELECTCOM != 20
    RETURN 0
;如果FLAG:1000为非0就无视
SIF FLAG:1000
    RETURN 0
PRINTW “不要这么直接呀!”
;设定FLAG。显示一次后就不再显示
FLAG:1000 = 1
RETURN 1

;背后位置执行结束的时候的台词
@EVENTCOMEND
;背后位置的编号为21。若不是21就无视
SIF SELECTCOM != 21
    RETURN 0
;如果FLAG:1001为非0就无视
SIF FLAG:1001
    RETURN 0
PRINTW “这种位置……”
;设定FLAG。显示一次后就不再显示
FLAG:1001 = 1
RETURN 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

可以给事件函数赋予“性质”。

当附加#SINGLE的性质时,当该函数以RETURN 1结束时,即使存在其他同名函数也不会被调用。这个特性可以用在同一个角色存在几句相互矛盾的台词时。

当附加#PRI的性质时,该函数会优先于其他同名函数之前执行。这个特性可以用于角色死亡检查。

当附加#LATER的性质时,该函数会优先于其他同名函数之后执行。这个特性可以用于结算,如显示“一天过去了。”之类的文本。

如:

@EVENTTURNEND
#SINGLE
SIF FLAG:1000
   RETURN 0
FLAG:1000 = 1
PRINTW “不想动了……”
RETURN 1

@EVENTTURNEND
#SINGLE
SIF FLAG:1001
   RETURN 0
FLAG:1001 = 1
PRINTW “想回家……”
RETURN 1

@EVENTTURNEND
#SINGLE
SIF FLAG:1002
   RETURN 0
FLAG:1002 = 1
PRINTW “想出门……”
RETURN 1

@EVENTTURNEND
#LATER
PRINTW 一天过去了……
RETURN 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

(1-3句每次只显示一个,而最后一句会在FLAG:1000FLAG:1001FLAG:1002的值都为1之后才会显示。)

Last Updated: 2021/9/30 上午5:06:17
Contributors: Miswanting