いちもんじがホゲーッとしながら見ていたTwitterで、たまたま偶然ネタ絵を目にしました。それは、やたらと高飛車なアカネちゃんが「あんたまたコールスタックたまってるわよ!!」と言っているイラストでした。
それを見て、「コールスタックって何…?」と思ったいちもんじはすぐにググりました。そして気が付きました…そんなものがあったのか……と。そして絶望しました。それからすぐに全シナリオに[clearstack]を書き足したのでした。めでたしめでたし……。
さて、では詳しい内容を解説していきますね!
[clearstack]タグの機能とは
システムが管理するスタックを消去します。帰るべきスタックがない場面(タイトルや章の始まりなど、きりの良い場面)でこのタグを配置しておくことをオススメします。
スタックとは、ゲームを進める中で[call]、[if]、マクロを通過するときに呼び出し元に帰ってくるために記憶しておくメモリ領域です。(森を探検するときに目印として落としておくパンくずのようなものとお考えください)
通常であれば、スタックは[return][endif][endmacro]を踏んだときに回収されます。しかし[call]先で[return]することなく別のシナリオにジャンプしたり、[if]やマクロの中でジャンプしたりすることを繰り返した場合、回収されないスタックが溜まっていきます。
スタックが溜まりすぎると、ゲームの動作が重くなったりセーブデータが肥大化したりする恐れがあります。
( ^ω^)・・・と公式には書いてありましたが。まあ何はともあれ*startのラベル(シナリオの一番最初)の直下に置いておけば何の問題もないということでしょう。
確かに、いちもんじの現在鋭意制作中のゲーム「醍醐くんの飯活!!」でもサブルーチン(制限時間を付けるのに便利)をよく使っていますが、たまに動作が妙なことになることがありました。全く関係ない部分でこのサブルーチンが読み込まれたり……そんな怪奇現象が起きていたんです。あれもこれもそれも全部このスタックされていたメモリがいたずらしていたのかも知れません。
[clearstack]タグのパラメーター一覧
パラメータ | 解説 |
---|---|
stack | call、if、macroのいずれかを指定できます。特定のスタックのみ削除できます。省略すると、全てのスタックを削除します。 V515以降:animを指定できます。animを指定した場合、現在実行中のアニメーション数を強制的にゼロにして、[wa]で確実に次のタグに進むようにできます。なお、stackパラメータを省略した場合はこの操作は行われません。 |
[clearstack]の使い方
[clearstack stack=call]
callの部分は消したいスタックを指定します。[if]が良ければifでいいし、[macro]で良ければmacroで良いし。もしくは全部消したい!というときはもうこれです。いちもんじはこれにしました。
[clearstack]