常量与变量

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

常量的表示

Emuera 使用的常量符号与 Kirikiri 中可以使用的符号相同,但八进制的符号除外。

例如,以下几行都有相同的含义:

X = 32
X = 0b100000
X = 0x20
X = 1p5

从上到下的顺序是:普通十进制符号、二进制、十六进制、1 x 2到5次方。

当你想获得或设置每一个比特时,像1p5这样的符号在与位操作符的结合中很有用。

例如,如果A的底部第0位或第3位成立,下面的条件语句将为真。

IF (A & 1p0)||(A & 1p3)

你也可以用e代替p来表示n x 10的m次方。

例如,13e3等于13000。

上述符号仅用于常量,不能用于表达式。

诸如以下的记号将导致一个错误:

X = 13e(A + 1)

由于与 Eramaker 的兼容性问题,八进制符号没有被采用。

数字012将被解释为12,而不是10

指定变量大小

在 Emuera 中,你可以通过在CSV/文件夹中放置一个名为VariableSize.csv的文件来指定一个现有变量的元素数。

如果你为元素数指定-1,你可以禁止在ERB中使用该变量。

如果你试图在ERB中赋值或引用一个被禁止的变量,将会发生错误。如果系统需要一个被禁止的变量,赋值过程将被忽略,其值将始终被视为-1。

(这是当MONEYNEXTCOM被禁用时出现的情况)。

本地变量

LOCAL & LOCALS

该方法已弃用

请考虑使用#DIM#DIMS代替。

欲了解更多信息,请参见用户定义的变量

LOCAL变量是局部变量。

LOCAL是一个整数,LOCALS是一个字符串

LOCAL的基本规模为1000,LOCALS为100。

你也可以通过#LOCALSIZE <要设置的元素数>#LOCALSSIZE <要设置的元素数>为每个函数分别设置元素数。

允许你单独改变每个函数的元素数量。 (然而,你只能将其设置为一个大于0的整数)。

这是不被保存的。

@EVENTFIRST
  LOCAL:10 = 123
  CALL FUNC001
  PRINTV LOCAL:10
  WAIT
@FUNC001
  LOCAL:10 = 567
  RETURN

在上述代码中,PRINTV的结果是123

FUNC001中的LOCAL:10被改变,但EVENTFIRST中的LOCAL没有被改变。

与许多语言中的局部变量不同,LOCAL在调用函数时不被初始化。

在内部,我们创建了一个名为LOCAL@函数名的变量。

因此,如果有多个同名的函数,例如事件函数,它们是共享的。 另外,如果函数被递归调用,它将使用同一个变量。

可以调用其他函数的变量,如LOCAL@EVENTFIRST:10 = 567,但不建议这样做(这是一个调试功能)。

(这只是为了调试的目的。)如果你从另一个函数中调用一个变量,而你所调用的函数的名称包含一个运算符,将导致一个错误。

ARG & ARGS

本地变量。

ARG是一个整数,ARGS是一个字符串。

ARG的大小基本上是1000,ARGS是100,可以在VariableSize.csv中改变。

此外,该函数会自动分配足够的元素,以便毫无问题地使用函数参数中定义的数量。 (它永远不会小于VariableSize.csv中指定的数字)。)

@FUNC002, ARG:0, ARG:1, ARG,1100
  LOCAL = ARG:0 * ARG:1 / 100
  RETURN LOCAL

在这种情况下,ARG中的元素数原本是1000,但在@FUNC002中,ARG中的元素数是1101,从0到1100。

它的目的是用于指定函数中的参数,对于其他用途来说,可读性可能较差。

(用户定义的私有变量)

在特定函数中使用#DIM#DIMS定义的变量是私有变量,可以用与局部变量相同的方式处理。

更多信息见用户定义的变量。

保存数据之间共享的变量

GLOBAL & GLOBALS

这些是可以在不同保存数据之间共享的变量。

GLOBAL是一个整数,GLOBALS是一个字符串

GLOBAL的基本尺寸是1000,GLOBALS是100,可以在VariableSize.csv中改变。

它们不与其他数据一起保存和加载。

要保存一个全局变量,使用SAVEGLOBAL指令。

当你做SAVEGLOBAL时,GLOBALGLOBALS被保存在Global.sav中。

如果Global.sav在编写时已经存在,它将被覆盖。

LOADGLOBAL指令允许你从Global.sav加载GLOBALGLOBAL

LOADGLOBAL被推荐与@EVENTFIRST@EVENTLOAD一起使用。

可以通过GLOBALGLOBAL在不同的保存之间共享数据。

(用户定义的全局变量)

在ERH中使用#DIM GLOBAL#DIMS GLOBAL定义的变量是全局变量。

另外,通过使用#DIM SAVEDATA GLOBAL,该变量成为一个保存的全局变量。

详情请参考头文件(ERH)

角色变量

NICKNAME & MASTERNAME

这是一个保存的字符串变量,类似于NAMECALLNAME

CharaXX.csv中,你可以指定为NICKNAMEMASTERNAME绰号主人的名字

CSTR

一个要保存的字符串数组变量。

它是CFLAG的一个字符串版本。

CharaXX.csv中,它被指定为CSTR

CUP & CDOWN & DOWNBASE & TCVAR

这些是数字数组变量。

它们旨在分别作为UPDOWNLOSEBASETFLAG的字符变量版本使用。

因此,它们具有与这些变量相同的初始化时间和保存可用性。

然而,对于CUPCDOWN,使用CUPCHECK指令而不是UPCHECK指令。

CDFLAG

数值角色的三维阵列变量。

CDFLAG:MASTER:0:2

第一个参数是角色的注册号,就像在传统的角色变量中一样,但第二个和第三个参数是必需的。

(用户定义的角色变量)

在ERH中使用#DIM CHARADATA#DIMS CHARADATA定义的变量是字符变量,可以自由处理,就像CFLAG。 详见头文件(ERH)

csv相关

csv变量

这个变量用于参考每个csv中定义的值。

使用方法类似于例如TALENTNAMETalent.csv之间的关系。

所有这些都是一维数组变量,不能被分配,也不能被保存。

如果它没有在csv中定义,它将返回0或空字符串。

变量名文件类型长度
ITEMPRICEItem.csv整数1000
TRAINNAMETrain.csv字符串1000
BASENAMEBase.csv字符串100
EQUIPNAMEequip.csv字符串100
TEQUIPNAMEtequip.csv字符串100
STAINNAMEstain.csv字符串1000
EXNAMEex.csv字符串100
SOURCENAMEsource.csv字符串100
FLAGNAMEflag.csv字符串10000
TFLAGNAMEtflag.csv字符串1000
CFLAGNAMEcflag.csv字符串1000
TCVARNAMEtcvar.csv字符串100
STRNAMEstrname.csv字符串20000
TSTRNAMEtstr.csv字符串100
CSTRNAMEcstr.csv字符串100
SAVESTRNAMEsavestr.csv字符串100
CDFLAGNAME1cdflag1.csv字符串1
CDFLAGNAME2cdflag2.csv字符串1
GLOBALNAMEglobal.csv字符串100
GLOBALSNAMEglobals.csv字符串100

请不要混淆str.csvcstr.csv等的作用。

str.csv是决定分配给变量STR的值的文件,而cstr.csv是决定CSTRNAME的文件。

决定STRNAME的文件是strname.csv,所以要注意如何使用str.csvstrname.csv

GameBase.csv 変数

参考GameBase.csv中定义的数值的变量。

所有的变量都是非数组,不可分配和不可保存的。

变量名关键词类型
GAMEBASE_AUTHOR作者字符串
GAMEBASE_INFO追加信息字符串
GAMEBASE_YEAR制作年份字符串
GAMEBASE_TITLE标题字符串
GAMEBASE_GAMECODE游戏代码整数
GAMEBASE_VERSION版本整数
GAMEBASE_ALLOWVERSION兼容版本整数
GAMEBASE_DEFAULTCHARA默认人物整数
GAMEBASE_NOITEM无物品模式整数

WINDOW_TITLE

这是显示在 Emuera 窗口标题栏的字符串。

它是一个非数组字符串变量。 初始值是GameBase.csv窗口标题字段中设置的值。

如果没有设置窗口标题,它将由标题版本生成。

如果标题也没有设置,它将是 Emuera。

与csv有关的其他变量

MONEYLABEL

记录货币单位的一个变量。

它是一个非数组、字符串类型的变量,不能被分配,也不能被保存。

初始值是_Replace.csv货币单位字段设置的值。

如果没有设置货币单位,它将是$,就像 Eramaker 中一样。

DRAWLINESTR

这是一个变量,其中记录了执行DRAWLINE指令时要显示的字符串。

它是一个非数组字符串类型的变量,不能被分配,也不能被保存。

初始值是在_Replace.csv中为DRAWLINE字符设置的数值的重复。

_Replace.csvDRAWLINE字符设置的重复值,所以它不包含DRAWLINE字符中设置的准确值。

如果没有设置DRAWLINE字符,结果将与 Eramaker 中一样,例如:

---------------

保存和加载相关

LASTLOAD_*

这是最后一个被加载的变量,用来参考数据信息。

它们可以被引用,但不能被分配到。

所有变量的初始值都是-1或空字符串。

它们在加载时将被更新,并在执行RESETDATA或菜单项返回标题时返回其初始值。

  • LASTLOAD_VERSION:最后加载的数据的版本(将在GameBase.csv中定义的值)
  • LASTLOAD_NO:最后载入的数据的编号(与save*.sav中的*相对应的数字)
  • LASTLOAD_TEXT:文本(将由PUTFORM添加的文本,SAVEDATA_TEXT

SAVEDATA_TEXT

这是保存在保存数据中并在保存/加载屏幕上显示的文本。

它也是加载后可以被LASTLOAD_TEXT引用的文本。

它可以被引用或分配。

@SAVEINFO被调用时,当前时间被分配给这个字符串,可以使用PUTFORM附加到这个字符串上。

你也可以通过直接指定给@SAVEINFO中的这个字符串来定制时间显示。

如果你不使用SAVEGAMEPUTFORM(你使用SAVELOAD.ERB),你就不需要这个。

(用户定义的可保存的广域变量)

使用ERH中#DIM SAVEDATA#DIMS SAVEDATA定义的变量是可保存的广域变量。

然而,当使用#DIMS SAVEDATA定义一个可保存的多维广域变量时,必须启用以二进制格式保存保存的数据选项。

更多信息请参考头文件(ERH)

多维数组变量

DITEMTYPE & DA ~ DE

该方法已弃用

请考虑使用#DIM#DIMS来代替。

更多信息见用户定义的变量

一个固定长度的二维整数阵列。

调用为DITEMTYPE:1:2。不能省略任何参数。

在 Eramaker 的双数组中,第一个参数是字符注册号,所以数组的大小取决于CHARANUM

二维数组,如DITEMTYPE,不改变其在VariableSize.csv中指定的大小。

如果它们是VARSIZE指令的主题,元素的数量将分别分配给RESULT:0RESULT:1

如果你在VariableSize.csv中使用DITEMTYPE,100,200,你最多可以使用DITEMTYPE:99:199VARSIZE指令将把100和200分配给RESULT:0RESULT:1

TA & TB

该方法已弃用

请考虑使用#DIM#DIMS来代替。

更多信息见用户定义的变量

固定长度的整数三维阵列。

它被称为TA:1:2:3。不能省略任何参数。

标准尺寸为100x100x100。 所以你最多可以使用TA:99:99:99

可以改变VariableSize.csv中的大小,但不可能指定一个大于100万的大小。

当受制于VARSIZE指令时,RESULT:0RESULT:1RESULT:2将分别被赋予元素的数量。

(用户定义的多维数组变量)

从1.808版开始,使用#DIM#DIMS定义的变量可以成为多维变量。

更多信息见用户定义的变量

调试变量

调试变量是一个为调试目的提供信息的变量。

一个调试变量只有在调试模式下被调用时才会返回一个有意义的值。

当在正常模式下调用时,它们返回一个空字符串或0。

他们的名字前后都有两个下划线_

__FILE__

一维的只读变量。

返回当前运行的脚本的文件名。

文件名与错误信息的格式相同,包括文件夹结构和扩展名。

如果当前没有脚本在运行,那么这个变量就是空的,例如,在等待系统输入时,从调试命令或变量观察中引用它。

如果当前没有脚本在运行,例如,在等待系统输入时从调试命令或变量观察中引用,则返回一个空字符串。

__LINE__

一维的只读变量。

返回当前执行的脚本的行号。

行号是一个从1开始的数字,像错误信息一样。

如果当前没有运行的脚本,则返回-1。

__FUNCTION__

一维的只读变量。

返回当前执行的函数的名称。

函数名称不包含@和参数列表。

如果当前没有运行的脚本,将返回一个空字符串。

其他

TSTR

一个字符串类型的一维数组。 它是一个一维数组,不被保存。

它与TFLAG同时被初始化。

RANDDATA

一个数组,用于存储随机数的状态。 它是一个数字类型的一维数组,可分配和保存。

它由DUMPRAND记录,由INITRAND读取。

LINECOUNT

该变量返回到目前为止已被PRINT的行数。

每增加一行,LINECOUNT就增加+1(不包括由于窗口宽度造成的换行),并减去启动以来的CLEARLINES数量。

它不会受到由于日志缓冲区溢出而导致的删除的影响(标准5000)。

它是一个非数组的数字变量,不能被分配到或保存。

行数的计算方法与CLEARLINE相同。

ISTIMEOUT

以下是私人修改过的1809+v2版本所附的readme中的内容:

变量ISTIMEOUT的加入是为了检查TINPUT系统是否已经超时。
当TINPUT系统被调用时,这个变量被初始化为0,当它超时时被设置为1。

从ver1815起,这个变量可能无法使用。

__INT_MAX__ & __INT_MIN__

它是一个非数组的数字变量,有一个定义的最大和最小值范围,不能被分配或保存。

它不是一个调试变量,所以它可以在正常启动时使用。

(用户定义的广域变量)

ERH中使用#DIM#DIMS定义的变量是广域变量,可以像单字母变量(如A)一样自由处理。

详见头文件(ERH)

(用户定义的常数)

在ERH和某些函数中使用#DIM#DIMS定义的变量成为一维数组中的常量,可以被视为不可分配的变量。

欲了解更多信息,请参见用户定义的变量

(用户定义的参考变量)

在特定函数中使用#DIM REF#DIMS REF定义的变量是引用型变量。

欲了解更多信息,请参见用户定义的变量

与 Eramaker 在行为上的差异

NAME & CALLNAME

Eramaker 不允许分配。

在 Emuera,这是有可能的。

RAND & CHARANUM

在 Eramaker 中,你可以分配数值,它们将被保存和加载,但没有办法使用它们。

Emuera 不允许指派任务。

暂定行为表

Eramaker 中也存在的变量

变量名类型维度代替可保存禁用默认值初始化时机备注
RESULT整数1---
RESULTS字符串1---
A ~ Z整数1---
COUNT整数1--COUNT:0REPEAT中作为计数器使用。
DAY整数1---
TIME整数1---
MONEY整数1---
MASTER整数1---
TARGET整数1:0 = 1--
ASSI整数1:0 = -1--
PLAYER整数1---
ASSIPLAY整数1:0 = 0BEGIN TRAIN-
SELECTCOM整数1---
PREVCOM整数1:0 = -1BEGIN TRAIN-
NEXTCOM整数1:0 = -1BEGIN TRAIN-
LOSEBASE整数1全为0SHOW_USERCOM结束时元素可以通过BASENAME来指定
UP整数1全为0SHOW_USERCOM结束时
UPCHECK
元素可以通过PALAMNAME来指定
DOWN整数1全为0SHOW_USERCOM结束时
UPCHECK
元素可以通过PALAMNAME来指定
PALAMLV整数1_replace.csv
PalamLv
--
EXPLV整数1_replace.csv
ExpLv
--
EJAC整数1:0 = 10000--
FLAG整数1--元素可以通过FLAGNAME来指定
TFLAG整数1全为0BEGIN TRAIN元素可以通过TFLAGNAME来指定
ITEM整数1--元素可以通过ITEMNAME来指定
ITEMSALES整数1--元素可以通过ITEMNAME来指定
BOUGHT整数1---
PBAND整数1:0 =
_replace.csv
PBand
--
CHARANUM整数0--当指定任何元素时,将返回角色注册的数量。
RAND整数0--这样,如果RAND:X中的X是0或负值,就是一个错误。
否则会返回一个从0到元素数-1的随机值。
STR字符串1Str.csv-该元素可以通过STRNAME指定
SAVESTR字符串1--该元素可以通过SAVESTRNAME指定
NO数字C0--CharaXX.csv中以番号,**指定。
ISASSI数字C0--CharaXX.csv中指定助手,1,你将从初始状态被视为助理。
NAME字符串C0--CharaXX.csv中以名前,**指定。
CALLNAME字符串C0--CharaXX.csv中以呼び名,**指定。
BASE数字C1--ADDCHARA时,所有元素的值与MAXBASE相同。
元素可以通过BASENAME来指定。
MAXBASE数字C1--CharaXX.csv中以基礎,*,**指定。元素可以通过BASENAME来指定。
ABL数字C1--CharaXX.csv中用能力,*,**指定。
该元素可以通过ABLNAME指定
TALENT数字C1--CharaXX.csv中用素質,*指定。
这样,第三个值也可以被指定,如素質,*,**
元素可以通过TALENTNAME指定
EXP数字C1--CharaXX.csv中用経験,*,**指定。
元素可以通过EXPNAME指定
MARK数字C1--CharaXX.csv中用刻印,*,**指定。
元素可以通过MARKNAME指定
RELATION数字C1_replace.csv
Relation
-CharaXX.csv中用相性,*,**指定。
元素可以通过NAMECALLNAME指定
JUEL数字C1--CharaXX.csv中用珠,*,**指定。
元素可以通过PALAMNAME指定
CFLAG数字C1--CharaXX.csv中用フラグ,*,**指定。
元素可以通过CFLAGNAME指定
EQUIP数字C1--CharaXX.csv中用装着物,*,**指定。
元素可以通过EQUIPNAME指定
TEQUIP数字C1全为0BEGIN TRAIN元素可以通过TEQUIPNAME指定
PALAM数字C1全为0BEGIN TRAIN元素可以通过PALAMNAME指定
STAIN数字C1_replace.csv
汚れ
BEGIN TRAIN元素可以通过STAINNAME指定
EX数字C1全为0BEGIN TRAIN元素可以通过EXNAME指定
SOURCE数字C1全为0BEGIN TRAIN
@SOURCE_CHECK结束时
元素可以通过SOURCENAME指定
NOWEX数字C1全为0就在@EVENTCOM之前@USERCOM之前不会更新
元素可以通过EXNAME指定
GOTJUEL数字C1全为0BEGIN TRAIN元素可以通过PALAMNAME指定
ABLNAME字符串1Abl.csv--
TALENTNAME字符串1Talent.csv--
EXPNAME字符串1Exp.csv--
MARKNAME字符串1Mark.csv--
PALAMNAME字符串1Palam.csv--
ITEMNAME字符串1Item.csv--
NOITEM整数1:0 =
GameBase.csv
无Item
-可以是0和1以外的其他值

下划线部分显示了 Eramaker 和 Emuera 规格之间的差异。

Emuera 的专用变量

变量名类型维度代入可保存禁用默认值初始化时机备注
LOCAL整数1--#LOCALSIZE改变每个函数的元素数量
LOCALS字符串1--#LOCALSSIZE改变每个函数的元素数量
ARG整数1任意当该函数被调用时※※只有当该参数被设置时
每个函数只分配参数中定义的元素数量
ARGS字符串1任意当该函数被调用时※※只有当该参数被设置时
每个函数只分配参数中定义的元素数量
(Private)任意任意任意任意游戏开始
当该函数被调用时※
※只有当该参数被设置为
在一个函数中由#DIM或#DIMS定义的
(Refer)任意任意--※取决于参考文献
由函数中的#DIM REF或#DIMS REF 定义
(Wide_area)任意任意任意任意任意游戏开始由ERH中的#DIM或#DIMS定义
GLOBAL整数1--用SAVEGLOBAL保存,用LOADGLOBAL加载。
该元素可以由GLOBALNAME指定
GLOBALS字符串1--用SAVEGLOBAL保存,用LOADGLOBAL加载。
GLOBALSNAME可以用来指定一个元素
LINECOUNT整数0---
ISTIMEOUT整数00TInput命令执行时当一个TInput指令超时,1被分配。
__INT_MAX__整数09223372036854775807--
__INT_MIN__整数0-9223372036854775808--
RANDDATA整数1---
TSTR字符串1全空字符串BEGIN TRAIN该元素可以由TSTRNAME指定
DA整数2---
DB整数2---
DC整数2---
DD整数2---
DE整数2---
DITEMTYPE整数2---
TA整数3---
TB整数3---
NICKNAME字符串C0--CharaXX.csv中以あだ名,**指定。
MASTERNAME字符串C0---CharaXX.csv中以主人の呼び方,**指定。
DOWNBASE整数C1全为0@SHOW_USERCOM结束时元素可以通过BASENAME来指定
CUP整数C1全为0@SHOW_USERCOM结束时
UPCHECK时
元素可以通过PALAMNAME来指定
CDOWN整数C1全为0@SHOW_USERCOM结束时
UPCHECK时
元素可以通过PALAMNAME来指定
TCVAR整数C1全为0BEGIN TRAIN元素可以通过TCVARNAME来指定
CSTR字符串C1--CharaXX.csv中的CSTR,*,**进行规范
该元素可以由CSTRNAME指定
CDFLAG整数C2--元素可由CFDLAGNAME1和CDFLAGNAME2指定
注意,元素数量的默认值是1.1
ITEMPRICE整数1Item.csv-一个元素可以通过其ITEMNAME来指定
TRAINNAME字符串1Train.csv--
BASENAME字符串1Base.csv--
EQUIPNAME字符串1Equip.csv--
TEQUIPNAME字符串1TEquip.csv--
STAINNAME字符串1Stain.csv--
EXNAME字符串1EX.csv--
SOURCENAME字符串1Source.csv--
FLAGNAME字符串1Flag.csv--
TFLAGNAME字符串1TFlag.csv--
CFLAGNAME字符串1CFlag.csv--
TCVARNAME字符串1TCVar.csv--
STRNAME字符串1StrName.csv-Str.csv指定的是STR的内容,而不是元素的名称
TSTRNAME字符串1TEtr.csv--
CSTRNAME字符串1CStr.csv--
SAVESTRNAME字符串1SaveStr.csv--
CDFLAGNAME1字符串1CdFlag1.csv--
CDFLAGNAME2字符串1CdFlag2.csv--
GLOBALNAME字符串1Global.csv--
GLOBALSNAME字符串1Globals.csv--
GAMEBASE_AUTHOR字符串0GameBase.csv
作者
--
GAMEBASE_INFO字符串0GameBase.csv
追加情報
--
GAMEBASE_YEAR字符串0GameBase.csv
製作年
--
GAMEBASE_TITLE字符串0GameBase.csv
タイトル
--
GAMEBASE_GAMECODE整数0GameBase.csv
コード
--
GAMEBASE_VERSION整数0GameBase.csv
バージョン
--
GAMEBASE_ALLOWVERSION整数0GameBase.csv
バージョン違い認める
--
GAMEBASE_DEFAULTCHARA整数0GameBase.csv
最初からいるキャラ
--
GAMEBASE_NOITEM整数0GameBase.csv
アイテムなし
--
WINDOW_TITLE字符串0GameBase.csv
ウィンドウタイトル
-如果没有,则由タイトルバージョン生成。
如果没有タイトル,则为Emuera
MONEYLABEL字符串0_replace.csv
お金の単位
-默认为$
DRAWLINESTR字符串0_replace.csv
DRAWLINE文字
-默认为-的重复
LASTLOAD_VERSION整数0-1游戏开始
RESETDATA时
该值在加载时被更新
LASTLOAD_NO整数0-1游戏开始
RESETDATA时
该值在加载时被更新
LASTLOAD_TEXT字符串0空字符串游戏开始
RESETDATA时
该值在加载时被更新
SAVEDATA_TEXT字符串0※※@SAVEINFO开始时※保存为保存数据的标题
※※代表当前时间的字符串