流程图

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

流程图是用DiagramDesigner创建的。

数据文件在这里

在以下描述中,除非另有说明,否则句子的主语是Emuera.exe

TITLE

在启动和读取ERB后,并在运行BEGIN TITLE后。

如果@SYSTEM_TITLE被定义了,它就会被调用,其他的就不做了。

如果@SYSTEM_TITLE在没有BEGINLOADDATA指令的情况下被RETURN,就没有下一个操作要执行,错误终止。

如果没有定义@SYSTEM_TITLE,就会使用标准的标题程序。

标准标题屏幕上的文字,如[0]从头开始,可以被改变。

详见_replace.csv

如果选择[0]从头开始,首先要做的是初始化数据。

具体来说,STRPRINTLV的初始值被设置(与RESETDATA指令相同),ADDCHARA 0,等等。

接下来,BEGIN FIRST被执行,并过渡到FIRST

如果选择了[1]加载和启动,如果定义了,就会调用@TITLE_LOADGAME

如果没有定义,就会显示标准加载屏幕。

这与@LOADGAME所调用的屏幕略有不同。

FIRST

当在标题屏幕上选择了[0]从头开始,并且在执行了BEGIN FIRST之后。

如果在@EVENTFIRST中没有执行BEGIN指令,就没有下一个要执行的进程,错误结束。

SHOP

在加载和运行BEGIN SHOP后。

如果在加载后,@EVENTSHOP未被处理。

@SHOW_SHOP调用之后,要求输入。如果输入是0-99,则处理购买,否则就调用@USERSHOP。 这个范围可以在_replace.csv中改变。 详见_replace.csv

请注意,@PRINT_ITEMSHOP指令显示的项目范围是ITEMNAMEITEMSALES中的元素数,以小者为准(标准是1000)。

当购买过程被调用时,要确定相应的ITEMSALES是否为非零,或者MONEY是否大于ITEMPRICE

如果购买决策失败,则要求再次输入。

在 Eramaker 中,如果购买失败,用户必须从@SHOW_SHOP重新开始。

如果购买决策成功,将ITEM编号分配给BOUGHT变量,将ITEM:BOUGHT增加1,并通过ITEMPRICE:BOUGHT减少MONEY

呼叫@EVENTBUY,返回@SHOW_SHOP

除非在某个地方发出BEGIN指令,否则你永远不会离开SHOP

TRAIN

在执行BEGIN TRAIN后。

首先,一些变量会被初始化。

具体来说,将0分配给ASSIPLAY:0,-1分配给PREVCOM:0,-1分配给NEXTCOM:0

此外,TFLAG被设置为0,GOTJUELTEQUIPEXPALAMSOURCE的所有字符都被设置为0。

最后,为所有字符的STAIN:2分配2,为STAIN:3分配1,为STAIN:4分配8,为其他分配0。

当你离开训练流程时,这些值不会被初始化,所以如果你在商店里保存,这些值会保留在你的保存数据中。

你可以通过@SAVEINFO或其他方法将角色的GOTJUELTEQUIPEXPALAM等指定为0来保存保存数据的大小。

这里不解释NEXTCOM的非负值的行为,因为它有一个严重的错误。

Emuera的NEXTCOM是为了重现旧代码的行为而实施的,包括上述的缺陷,并不打算用于新的用途。

关于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之后,输入前初始化UPDOWNLOSEBASE

之后,要求输入。

输入的结果与@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指令被执行时,UPDOWN的值与TARGETPALAM相加和相减,并且UPDOWN的值都被分配为0。

如果输入的结果不是可执行的命令,则调用@USERCOM并返回@SHOW_STATUS

除非在某个地方发出BEGIN命令,否则你永远不会离开TRAIN

ABLUP

在执行了BEGIN ABLUP之后。

调用@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内没有执行BEGIN指令,就没有下一个进程可以执行,错误结束。

TURNEND

在执行了@BEGIN TURNEND之后。

如果在@EVENTTURNEND内没有执行BEGIN指令,就没有下一个进程可以执行,错误结束。

LOADGAME

当执行LOADGAME指令时。

BEGIN指令包含RETURN指令,BEGIN下面的语句从不执行,但LOADDATASAVEDATA指令与CALL指令一样返回原处。

然而,当LOAD被执行时,它就会忘记原来的位置并过渡到LOADDATAEND

SAVEGAME

@SAVEGAME指令被执行时。

调用@SAVEINFO的时机是在实际写完之前。

LOADDATAEND

LOADGAME中执行了LOAD后,在执行了LOADDATA指令后。

当执行LOAD时,所有以前的状态,包括被调用的函数,都被擦除。

Eramaker 在这里什么都不做,就过渡到@SHOW_SHOP

在 Emuera 中,如果@SYSTEM_LOADEND被定义,@SYSTEM_LOADEND将被执行。

如果BEGIN指令在@SYSTEM_LOADEND结束之前被执行,它就会过渡到那里。

否则,如果定义了@EVENTLOAD就会执行@EVENTLOAD

如果BEGIN指令在@EVENTLOAD结束前被执行,它就会向该方向移动。

如果BEGIN指令没有被执行,则照常过渡到@SHOW_SHOP

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