簡単に言うと、「@'あいうえお'」という感じに@ではじめた文字列の中に、「&」と「;」で囲まれた部分があれば、文字列を読み込んだ瞬間に計算してくれるものです。
[emb exp="@'1+2=&1+2;'"] と書くと、画面には 「1+2=3」 と表示されることになります。(右辺の3の部分が「&1+2;」を計算した結果になっています)
詳細はこちらを読んでいただくとして、長らく「こんな機能どこで使うんだ?」と思ってきました。
上記の例なら、普通 [emb exp="1+2=3"] って書くでしょう? わざわざ回りくどい書き方して何の意味があるというのか?
しかし、最近になって、以前作った遅延実行用の関数と一緒に使うと凄く便利だということに気づきました。
具体的には下記の①②のような区別が可能になります。
①[eval exp="input_delay_tjs(@'kag.fore.layers[&kag.numCharacterLayers;].visible = false', 5000)"]
②[eval exp="input_delay_tjs(@'kag.fore.layers[kag.numCharacterLayers].visible = false', 5000)"]
どちらも5秒後に前景レイヤー(番号はkag.numCharacterLayers)を非表示にするスクリプトですが、①はこの遅延実行を予約した時点での一番新しいレイヤーが消えるのに対して、②は5秒後の時点で存在する一番新しいレイヤーを非表示にします。
作っている側が、現在の具体的な数値がいくらになっているかよくわからないにもかかわらず、頻繁に値が変動する変数を使用している部分に盛り込むと効果大です。
例えば上記例のような前景レイヤーの数です。
RPGで攻撃のダメージを前景レイヤーを新しく作って出しているような場合、kag.numCharacterLayersはコロコロ変わります。
このとき表示されたダメージは5秒くらいで消したい、という場合、表示する記述と同時に上記のような遅延実行予約の記述を書いておけば、「何番から何番のレイヤー消せばよかったっけ?」などといちいち悩まなくて済みます。