最終更新:ID:635BjldN0Q 2011年08月10日(水) 22:31:41履歴
〜〜以上となっているものは調査した範囲では限界を見つけられなかったもの。
限界 | 備考 | |
整数変数の値 | -2147483648〜2147483647 | 32ビット符号付 |
文字列変数の文字数 | 1024文字以上 | |
関数名の文字数 | 1024文字以上 | 全角文字も使用可能 |
関数呼び出しスタック(*) | 1000 | 超えた場合、動作が不安定になり強制終了することもある |
キャラクタ登録数 | 16384(16進数で4000) | さらにADDCHARAすると応答がなくなる |
@EVENTCOM CALL FUNC0001 @FUNC0001 CALL FUNC0002 @FUNC0002 ……これが続いて@FUNC1000あたりまで来ると不安定になる。
eramakerは代入演算子が必要な場合、記号列の先頭から順に演算子を捜し、最初に見つかった代入演算子を認識する。
非代入演算子が必要な場合、記号列の先頭1文字または2文字を調べ、非代入演算子である方を認識する。どちらも演算子として認識出来る場合、2文字の方が優先される。どちらも認識できない場合はエラー。
何を言っているのかわからないかもしれないが、下の2つが等価になることから推測してほしい。
代入演算子として"=="が"="の代わりに使えるのはこの実装による。
逆に数式中で"=="の代わりに"="を使用するとエラーになるのもこの実装による。
また、"<>"が"!="ではなく"<"と認識されてしまうことに注意が必要。
非代入演算子が必要な場合、記号列の先頭1文字または2文字を調べ、非代入演算子である方を認識する。どちらも演算子として認識出来る場合、2文字の方が優先される。どちらも認識できない場合はエラー。
何を言っているのかわからないかもしれないが、下の2つが等価になることから推測してほしい。
;1-許容範囲な記法 A <=+=* B <=+=* C SIF D <> 0 E &&== F &&== G ;2-標準的な記法 A = B <= C SIF D < 0 E &= F && G ;NG-全ての行でエラー。 A = B =+=* C SIF D =< 0 E = F !!== G
代入演算子として"=="が"="の代わりに使えるのはこの実装による。
逆に数式中で"=="の代わりに"="を使用するとエラーになるのもこの実装による。
また、"<>"が"!="ではなく"<"と認識されてしまうことに注意が必要。
単項演算子として"-"が使えるが、意図した通りに動作しない場合が多い。
特に二項算術演算子と比較演算子の左項に単項演算子付きの項があると単項演算子は無視されてしまうようである。
また負の数や変数に対して単項演算子を用いるとエラーになる。
おそらく使わない方が無難。
特に二項算術演算子と比較演算子の左項に単項演算子付きの項があると単項演算子は無視されてしまうようである。
A = (-1) + 0 + 0
B = 0 + (-1) + 0
C = 0 + 0 + (-1)
D = 0 > -1
E = -1 < 0
PRINTFORML A={A}, B={B}, C={C}
PRINTFORML D={D}, E={E}
;出力
A=1, B=1, C=-1
D=1, E=0
また負の数や変数に対して単項演算子を用いるとエラーになる。
;エラー! eramaker曰く「計算式の中にマイナス符号の連続を見つけました。」
A = -(0-1)
;エラー! eramaker曰く「計算式展開時に不明な変数名が見つかりました。」
B = 1
C = -B
おそらく使わない方が無難。
以下の演算子が使用できる
カッコがあればカッコの中が先に計算され、カッコがなければ優先度にしたがって順番に計算される。
分類 | 優先度 | 代入演算 | 記号 |
算術演算子 | 高 | ○ | *, /, % |
↑ | ○ | +, - | |
比較演算子 | × | <, >, <=, >= | |
× | ==, != | ||
論理演算子 | ↓ | ○ | &, | |
低 | × | &&, || |
代入命令で使用するための演算子。
"="のほか、上の表で代入演算に○をつけた演算子は"="と合わせて複合代入演算子として使える。
C言語のように数式の途中で代入演算子を使うことはできない。
また、代入演算子のない式で行を構成することもできない。
複号演算子は、例えば
厳密には以下のような場合には等価ではない。
もっともRANDに代入した値を参照する方法が無いのでこの違いが何かに影響することは無い。
"="のほか、上の表で代入演算に○をつけた演算子は"="と合わせて複合代入演算子として使える。
C言語のように数式の途中で代入演算子を使うことはできない。
また、代入演算子のない式で行を構成することもできない。
複号演算子は、例えば
<変数> += <数式>は
<変数> = <変数> + ( <数式> )とほぼ等価になる。
厳密には以下のような場合には等価ではない。
RAND:100 += 1 RAND:100 = RAND:100 + 1上はRAND:100の値が1増えるが、下の式はRAND:100に1〜100までのランダムな値が代入される。
もっともRANDに代入した値を参照する方法が無いのでこの違いが何かに影響することは無い。
全ての変数は何らかの形で配列変数である。
配列変数を呼び出す際に引数を省略することができる。
通常の配列変数なら":0"、キャラクタ変数なら1つ省略すると":TARGET"、2つ目は":TARGET:0"を省略したと見なされる。
一貫して引数を省略して使えば配列変数でないかのように用いることが出来る。A〜ZやCOUNTなどは通常はこのように使われる。
また、引数を数式にすることもできる。
例えば以下の2つの式はどちらも有効で同じ意味になる。
NAMEやISASSIのような引数が1つしかない変数でも同様。
以下のように定数や数式を指定するとエラーになる。
しかし、エラーにならない場合もある。法則は不明。
配列変数を呼び出す際に引数を省略することができる。
通常の配列変数なら":0"、キャラクタ変数なら1つ省略すると":TARGET"、2つ目は":TARGET:0"を省略したと見なされる。
一貫して引数を省略して使えば配列変数でないかのように用いることが出来る。A〜ZやCOUNTなどは通常はこのように使われる。
また、引数を数式にすることもできる。
例えば以下の2つの式はどちらも有効で同じ意味になる。
A = ABL:TALENT A = ABL:TARGET:(TALENT:TARGET:0)キャラクタ変数の第1引数を省略しない場合は少し特殊で、第1引数には変数しか指定できない。
NAMEやISASSIのような引数が1つしかない変数でも同様。
以下のように定数や数式を指定するとエラーになる。
;NG X = ABL:0:0 X = ABL:(TARGET + 1):0 NO:(MASTER + 1) = X PRINTFORMW %NAME:(COUNT + 1)%
しかし、エラーにならない場合もある。法則は不明。
;OK ABL:0:0 = X X = NO:(MASTER + 1) PRINTFORMW {NO:(MASTER + 1)}
eramakerの数値型変数が扱える値の範囲は32ビット符号付整数の範囲である。
すなわち、-2147483648〜2147483647の範囲であり、これを超えるとオーバーフローが発生する。
全ての数値型変数は実は配列変数である。
A:100やPBAND:200を使用することもできるし、セーブも行なわれている。
下の表で要素数がnのとき、変数に使える範囲は0〜(n-1)である。
例えばLOSEBASEは要素数が1000なのでLOSEBASE:999は使用できるがLOSEBASE:1000は使えない。
配列変数の最後の要素が0で無い場合、セーブ・ロード後にデータが破壊されるバグが確認されている。
実際に使える範囲は0〜(n-2)と考えるべきだろう。
初期値が書いていない変数はゲーム開始時に全て0が代入される。
多くのバリアントでは例えば@EVENTCOM中でTFLAG:0〜29を0にするなどの処理を行なっているが、ここではeramaker.exeが行なう初期化についてのみ書いてある。
表の中で公式の解説と異なる値には赤字にした。
※GAMEBASE.CSVの"アイテムなし"の値で初期化される。0と1以外も指定できる。
※※CHARANUMはどんな要素を指定してもキャラの登録数が返ってくる。RANDはランダムな値が返ってくる。
他の変数と同じように代入できセーブもされるが代入した値を使用する方法が無いので意味は無い。
すなわち、-2147483648〜2147483647の範囲であり、これを超えるとオーバーフローが発生する。
全ての数値型変数は実は配列変数である。
A:100やPBAND:200を使用することもできるし、セーブも行なわれている。
下の表で要素数がnのとき、変数に使える範囲は0〜(n-1)である。
例えばLOSEBASEは要素数が1000なのでLOSEBASE:999は使用できるがLOSEBASE:1000は使えない。
配列変数の最後の要素が0で無い場合、セーブ・ロード後にデータが破壊されるバグが確認されている。
実際に使える範囲は0〜(n-2)と考えるべきだろう。
初期値が書いていない変数はゲーム開始時に全て0が代入される。
多くのバリアントでは例えば@EVENTCOM中でTFLAG:0〜29を0にするなどの処理を行なっているが、ここではeramaker.exeが行なう初期化についてのみ書いてある。
表の中で公式の解説と異なる値には赤字にした。
変数名 | 要素数 | 変更 | セーブ | 初期値 | 初期化されるタイミング |
A〜Z | 1000 | ○ | ○ | − | − |
COUNT | 1000 | ○ | ○ | − | − |
RESULT | 1000 | ○ | ○ | − | − |
DAY | 1000 | ○ | ○ | − | − |
TIME | 1000 | ○ | ○ | − | − |
MONEY | 1000 | ○ | ○ | − | − |
MASTER | 1000 | ○ | ○ | − | − |
TARGET | 1000 | ○ | ○ | 1 | ゲーム開始 |
ASSI | 1000 | ○ | ○ | -1 | ゲーム開始 |
PLAYER | 1000 | ○ | ○ | − | − |
ASSIPLAY | 1000 | ○ | ○ | 0 | BEGIN TRAIN |
SELECTCOM | 1000 | ○ | ○ | − | − |
PREVCOM | 1000 | ○ | ○ | -1 | BEGIN TRAIN |
NEXTCOM | 1000 | ○ | ○ | -1 | BEGIN TRAIN |
LOSEBASE | 1000 | ○ | ○ | 全て0 | @SHOW_USERCOM終了時 |
UP | 1000 | ○ | ○ | 全て0 | @SHOW_USERCOM終了時 UPCHECK時 |
DOWN | 1000 | ○ | ○ | 全て0 | @SHOW_USERCOM終了時 UPCHECK時 |
PALAMLV | 1000 | ○ | ○ | 0 100 500 3000 10000 30000 60000 100000 150000 250000 | ゲーム開始 |
EXPLV | 1000 | ○ | ○ | 0 1 4 20 50 200 | ゲーム開始 |
EJAC | 1000 | ○ | ○ | 10000 | ゲーム開始 |
FLAG | 10000 | ○ | ○ | − | − |
TFLAG | 1000 | ○ | ○ | 全て0 | BEGIN TRAIN |
ITEM | 1000 | ○ | ○ | − | − |
ITEMSALES | 1000 | ○ | ○ | − | − |
BOUGHT | 1000 | ○ | ○ | − | − |
NOITEM | 1000 | ○ | ○ | ※ | ゲーム開始 |
PBAND | 1000 | ○ | ○ | 4 | ゲーム開始 |
CHARANUM | 1000 | ※※ | ※※ | − | − |
RAND | 1000 | ※※ | ※※ | − | − |
※※CHARANUMはどんな要素を指定してもキャラの登録数が返ってくる。RANDはランダムな値が返ってくる。
他の変数と同じように代入できセーブもされるが代入した値を使用する方法が無いので意味は無い。
RESULTSも配列変数である。
ABLNAME〜ITEMNAMEは実際には疑似配列でありどんな引数を指定してもエラーにはならないがPRINT_ABL命令などでエラーが起きる原因となる。
ここではPRINT_XXXでエラーが起きない範囲を要素数の限界とした。
ABLNAME〜ITEMNAMEは実際には疑似配列でありどんな引数を指定してもエラーにはならないがPRINT_ABL命令などでエラーが起きる原因となる。
ここではPRINT_XXXでエラーが起きない範囲を要素数の限界とした。
変数名 | 要素数 | 変更 | セーブ | 初期値 | 初期化されるタイミング |
RESULTS | 100 | ○ | × | − | − |
ABLNAME | 100 | × | × | ABL.CSV | − |
TALENTNAME | 1000 | × | × | TALENT.CSV | − |
EXPNAME | 100 | × | × | EXP.CSV | − |
MARKNAME | 100 | × | × | MARK.CSV | − |
PALAMNAME | 200 | × | × | PALAM.CSV | − |
ITEMNAME | 1000 | × | × | ITEM.CSV | − |
STR | 20000 | ○ | × | STR.CSV | − |
SAVESTR | 100 | ○ | ○ | − | − |
キャラクター変数はNO、ISASSI、NAME、CALLNAMEの4つを除き全て二重配列である。
二重配列は以下のような形で呼び出す。
2つ目の引数も省略し、ABLと書くと、ABL:TARGET:0と解釈される。
二重配列は以下のような形で呼び出す。
A = ABL:MASTER:21つ目の引数を省略し、ABL:2と書くと、ABL:TARGET:2と解釈される。
2つ目の引数も省略し、ABLと書くと、ABL:TARGET:0と解釈される。
変数名 | 型 | 要素数 | 変更 | セーブ | 初期値 | 初期化されるタイミング |
NO | 数値 | − | ○ | ○ | − | − |
ISASSI | 数値 | − | ○ | ○ | − | − |
NAME | 文字列 | − | × | ○ | − | − |
CALLNAME | 文字列 | − | × | ○ | − | − |
BASE | 数値 | 100 | ○ | ○ | − | |
MAXBASE | 数値 | 100 | ○ | ○ | − | − |
ABL | 数値 | 100 | ○ | ○ | − | − |
TALENT | 数値 | 1000 | ○ | ○ | − | − |
EXP | 数値 | 100 | ○ | ○ | − | − |
MARK | 数値 | 100 | ○ | ○ | − | − |
RELATION | 数値 | 100 | ○ | ○ | − | − |
JUEL | 数値 | 200 | ○ | ○ | − | − |
CFLAG | 数値 | 1000 | ○ | ○ | − | − |
EQUIP | 数値 | 100 | ○ | ○ | − | − |
TEQUIP | 数値 | 100 | ○ | ○ | 全て0 | BEGIN TRAIN |
PALAM | 数値 | 100 | ○ | ○ | 全て0 | BEGIN TRAIN |
STAIN | 数値 | 100 | ○ | ○ | 0 0 2 1 8 その他0 | BEGIN TRAIN |
EX | 数値 | 100 | ○ | ○ | 全て0 | BEGIN TRAIN |
SOURCE | 数値 | 100 | ○ | ○ | 全て0 | @SHOW_USERCOM終了時 |
NOWEX | 数値 | 100 | ○ | ○ | 全て0 | @SHOW_USERCOM終了時 |
GOTJUEL | 数値 | 200 | ○ | ○ | 全て0 | BEGIN TRAIN |
最新コメント
2024-05-20
2023-02-01
2022-03-31
2022-02-13
2022-02-03