Skip to content

流程图 ​

翻译自原文档:https://osdn.net/projects/emuera/wiki/flow

本章节所涉及的流程图是用 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 = 0
  • PrevCom:0 = -1
  • NextCom:0 = -1
  • TFlag = 0
  • GotJuel、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。

GPL-3.0+ Licensed