EraBasic 的结构
翻译自原文档:http://cbaku.com/b/erakanon/eramaerc.html
基本信息
EraMaker 的启动
程序启动后,会出现标题屏幕,你可以选择“从头开始”或“加载存档”。当你选择“从头开始”时,ERB文件中的EVENTFIRST
函数会被调用。
当EVENTFIRST
执行完毕后,游戏便会结束。在函数执行完毕之前调用BEGIN
、SHOP
或TRAIN
函数进入相应的游戏逻辑是有必要的。
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××
函数,若函数的返回值RETURN
为1
,则意味着该命令可以被玩家点击。若相应的@COM_ABLE××
函数不存在,也意味着命令可以被玩家点击。更多细节参见示例文件COMABLE.ERB
。
此外,一个名为@SHOW_USERCOM
的函数会被调用,类似于“结束训练”之类的特殊命令应该显示在该函数内。
更多信息参见示例文件:SYSTEM.ERB
和INFO.ERB
。
TRAIN中的指令选择
当玩家选择一个指令时,@EVENTCOM
函数(若有)会被调用。这是一个事件函数。另外,与所选命令相对应的函数会被调用,如选择“正常位置”命令,并且TRAIN.CSV
文件中的“正常位置”命令对应的编号为20,则将调用一个名为@COM20
的函数。
若一个动作函数无法执行,则在函数中调用RETURN 0
语句,便会返回到命令选择界面,而不继续执行命令。
若一个命令可以被执行,在@COM××
中就会执行RETURN 1
,然后@SOURCE_CHECK
函数就会被调用。训练的结果反映在这里的训练参数中。
更多信息参见示例文件:COM××.ERB
和SOURCE.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××.ERB
和ABL.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
可以给事件函数赋予“性质”。
当附加#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-3句每次只显示一个,而最后一句会在FLAG:1000
、FLAG:1001
和FLAG:1002
的值都为1
之后才会显示。)