EraBasic 的结构
基本信息
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之后才会显示。)