流程图
本章节所涉及的流程图是用 DiagramDesigner 编辑的。流程图源文件文件在这里。
后文除另有说明,否则句子的主语应是Emuera.exe。
Title 标题流程
流程进入方式:
- 自动:游戏引擎启动后会读取
ERB文件,文件全部读取完成后,自动进入; - 手动:使用
Begin Title语句手动进入。 

若@System_Title函数已定义,则调用它;若存在多个定义,则调用第一次读取到的定义。
如果@System_Title函数在Return之前,没有调用Begin或LoadData命令,则会报错退出。
若没有定义@System_Title,就会执行后续的默认标题流程。
默认标题中的文字,如标题、版本、介绍、命令按钮(如[0]从头开始)等,都可以被改变,详见 _replace.csv。
在这个界面中,若选择[0]从头开始,首先要做的就是初始化数据。如Str和PrintLV的初始值(与ResetData命令同理),AddChara 0等。
然后自动执行Begin First命令。进入First流程。
若选择[1]加载存档,若已定义@Title_LoadGame函数,则调用。
若未定义,则显示默认加载界面。该界面与@LoadGame所调用的界面略有不同。
 First 从头开始流程
流程进入方式:
- 自动:在标题界面选择了
[0]从头开始后,自动进入; - 手动:使用
Begin First语句手动进入。 
https://osdn.net/projects/emuera/wiki/flow/attach/first.gif
如果@EventFirst函数在Return之前,没有调用Begin命令,则会报错退出。
Shop 商店流程
注意
此处流程的名称具有迷惑性,虽然名称是商店,但其实并不是指游戏中的物品购买流程,而是游戏的行动主界面,即行动按钮最多的那个界面。一般来说,可以理解为行动按钮分层排列就像商店里的商品一样的那种感觉。
流程进入方式:
- 自动:加载存档后自动进入;
 - 手动:使用
Begin Shop语句手动进入。 

如果该流程是从加载存档处进入,则不进行@EventShop处理。
在@Show_Shop执行完毕后,等待输入,若输入序号在0~99内,则执行内置购买逻辑,若不在内,则调用@UserShop函数。这个数值范围可被改变,详见 _replace.csv。
注意:@Print_ItemShop函数显示的项目范围是ItemName或ItemSales中的项目数,以小者为准(标准是1000)。
购买时,要确定相应的ItemSales是否为非零,或者Money是否大于ItemPrice。
若购买失败,则会要求再次输入。
在 Eramaker 中,如果购买失败,用户必须从@Show_Shop重新开始。
如果购买决策成功,将Item编号分配给Bought变量,将Item:Bought增加1,并通过ItemPrice:Bought减少Money。
调用@EventBuy,返回@Show_Shop。
除非调用Begin指令,否则你永远不会离开Shop流程。
TRAIN
流程进入方式:
- 手动:使用
Begin Train语句手动进入。 

进入流程后,首先一些变量会被初始化,如:
AssiPlay:0 = 0PrevCom:0 = -1NextCom:0 = -1TFlag = 0GotJuel、TEquip、EX、Palam和Source中的所有角色都被设置为0。- 最后,为所有角色的
STAIN:2分配2,为STAIN:3分配1,为STAIN:4分配8,为其他分配0。 
当你离开Train流程时,这些值不会被初始化,所以如果你在Shop里保存,这些值会保留在你的保存数据中。
你可以通过@SaveInfo或其他方法将角色的GotJuel、TEquip、EX、Palam等指定为0来保存保存数据的大小。
这里不解释NextCom的非负值的行为,因为它含有一个严重的 Bug。
Emuera 的NextCom是为了兼容旧代码而设计的,包括上述的 Bug,且并不打算用于新的用途。
关于CallTrain指令,见命令。
调用@Show_Status后会显示可用的Train。
会搜索@Com_AbleXX,寻找那些有定义的TrainName。
搜索范围(图中的Max_Train)对于 Emuera 来说是VariableSize.csv中指定的TrainName范围,对于 Eramaker 来说是2147483647。
如果@Com_AbleXX没有被定义或返回非零值,那么它就是可用的,TrainName被打印出来。
如果@Com_AbleXX返回0,则不可用,不显示TrainName。
在这个时候,它记住了是否可用。 (这并不意味着@Com_AbleXX在运行时被再次调用)。
显示TrainName后,调用@Show_UserCom。
在@Show_UserCom之后,输入前初始化Up、Down和LoseBase。
然后等待用户输入。
输入的结果与@Com_AbleXX的结果进行核对,如果该命令是可执行的,则调用相应的@ComXX。
首先,Train号被分配给SelectCom变量,所有字符的NowEX的所有元素被设置为0。
接下来,@EventCom被调用,接着是相应的@Com。
如果@Com返回一个非零值,则调用@Source_Check、@EventComEnd并返回@Show_Status。
在@Source_Check完成后,在调用@EventComEnd前,将所有字符的Source的所有元素设置为0。
如果在@Source_Check之后,@EventComEnd不存在或者在@EventComEnd中没有给出WAIT指令,那么在@Show_Status之前就会执行一次Wait。
如果@Com返回0,则返回到@Show_Status。
注意,当UpCheck指令被执行时,Up和Down的值与Target的Palam相加和相减,并且Up和Down的值都被分配为0。
如果输入的结果不是可执行的命令,则调用@UserCom并返回@Show_Status。
除非调用Begin指令,否则你永远不会离开Train流程。
AblUp 升级流程
流程进入方式:
- 手动:使用
Begin AblUp语句手动进入。 
https://osdn.net/projects/emuera/wiki/flow/attach/ablup.gif
调用@Show_Juel和@Show_AblUp_Select后等待用户输入。
如果输入的范围是0~99,找到相应的@AblUp。
如果定义了相应的@AblUp,则调用@AblUp并返回到@Show_Juel。
如果没有定义,就会再次等待用户输入。
在 Eramaker 中,如果没有定义,就从@Show_Juel重新开始。
如果输入值在0-99范围之外,则调用@UserAblUp并返回@Show_Juel。
从 Emuera 1.705开始,没有办法改变这个范围。
除非调用Begin指令,否则你永远不会离开AblUp流程。
AfterTrain
流程进入方式:
- 手动:使用
Begin AfterTrain语句手动进入。 
如果@EventEnd函数在Return之前,没有调用Begin命令,则会报错退出。
https://osdn.net/projects/emuera/wiki/flow/attach/aftertrain.gif
TurnEnd
流程进入方式:
- 手动:使用
Begin TurnEnd语句手动进入。 
如果@EventTurnEnd函数在Return之前,没有调用Begin命令,则会报错退出。
https://osdn.net/projects/emuera/wiki/flow/attach/turnend.gif
LoadGame
流程进入方式:
- 手动:使用
LoadGame语句手动进入。 

Begin指令自带Return特性,Begin指令以下的语句从不执行,但LoadData和SaveData指令与Call指令一样,执行完毕后会返回原处。
然而,当Load命令被执行时,它就会注销原来的调用位置并进入到LoadDataEnd。
SaveGame
流程进入方式:
- 手动:使用
SaveGame语句手动进入。 

调用@SaveInfo的时机是在实际写完存档之前。
LoadDataEnd
流程进入方式:
- 自动:
LoadData命令执行完成后自动进入; - 自动:
LoadGame中Load命令执行完成后自动进入; 

当执行Load时,所有以前的状态,包括被调用的函数,都被擦除。
Eramaker 在这里直接过渡到@SHOW_SHOP。
在 Emuera 中,如果@System_LoadEnd被定义,则调用。
如果Begin指令在@System_LoadEnd结束之前被调用,它就会过渡到那里。
否则,如果定义了@EventLoad,就会执行@EventLoad。
如果Begin指令在@EventLoad结束前被执行,它就会向该方向移动。
如果Begin指令没有被执行,则照常过渡到@Show_Shop。