フワフワソが「ソラとピヨちゃん」や「宮本県」を作るブログ(フワフワソ・ラウンジnew!)

ラノベとテクノを愛するふわふわがノベルゲームを作っています。あと日常のことやイベントの告知なども。スクリプト関連の記事は自分用の備忘録です

バックログ取得して表示する方法あれこれ

バックログはtf.system.backlogに配列で保存されています

そこを参照すればテキストウィンドウに表示することができます

 

バックログを6行分取得して表示する方法

[iscript]
f.backlog1 = tf.system.backlog[tf.system.backlog.length - 1];
f.backlog2 = tf.system.backlog[tf.system.backlog.length - 2];
f.backlog3 = tf.system.backlog[tf.system.backlog.length - 3];
f.backlog4 = tf.system.backlog[tf.system.backlog.length - 4];
f.backlog5 = tf.system.backlog[tf.system.backlog.length - 5];
f.backlog6 = tf.system.backlog[tf.system.backlog.length - 6];
[endscript]

[emb exp="f.backlog1"][r]
[emb exp="f.backlog2"][r]
[emb exp="f.backlog3"][r]
[emb exp="f.backlog4"][r]
[emb exp="f.backlog5"][r]
[emb exp="f.backlog6"][y]

正直javascriptはよくわからないですが偶然できました。

 

これは今現在テキストウィンドウに表示されているテキストを取得して表示する方法。

なお、ティラノver5ではできません

[iscript]
f.backlog = $(".current_span").html();
[endscript]

[emb exp="''+f.backlog"]

 

何のために作ったかというと、別画面に遷移して戻ってきてテキストウィンドウを再描写~という処理のために作ったのですが、そういうことをやるときには[sleepgame][awakegame]を使うことでテキストウィンドウのメッセージ保存ができると後で知り、不要になりました。

ティラノスクリプトのメモリ使用量が増え続ける問題(メモリリーク)

ようやっとゲームが完成して喜んでいたのですが。

完成させた人じゃないと気付かないトラブルに直面しました。

 

ふと気がついたら、メモリ使用量が1Gになってる!

ゲーム起動直後は300MBくらいなのですが、ゲームを進めるたびに(具体的に言うと絵が切り替わるたびに)メモリが増え続けます。

ゲームクリア間際には1Gにも膨らんでしまいます。

 

これはティラノ自体に問題があるようで解決できませんでした。

わたしのゲームは1Gで済みましたが、プレイ時間の長いゲームだと無限にメモリが増え続けてゲームが落ちるようです。

ティラノ作者のシケモクK様と、ティラノでの最大のヒット作かと思いますが「奴隷との生活」の作者様とのやりとりがツイッターにありました。(日付クリックからのツリー表示でやりとりが全部閲覧できます)

 

 

 

対処策としてレイヤーを減らすことが提案されています。私は16レイヤー使っていて、ためしに1つ減らして15レイヤーにしたのですが全く変わらなかったので、諦めました。

この問題、私の環境だと、windows8では発生せず、メモリ使用量15mbで済んでいます。

windows10になると一気に増えてしまいます。

最新版のティラノv5でも変わらないようです。

(奴隷との生活の感想を拝見すると、win8でメモリ4GくらいのPCだと、プレイ中に落ちるみたいですね。ちょっと古めのPCには優しくない)

 

このような状況にありますので、ティラノスクリプトでゲームを作る場合には、長時間プレイしそうなものは作らない!

というのが肝心だと思いました。

もっと具体的に言うと、メモリが増える問題は、プレイ時間ではなく画像表示回数で起こるようです。なので、作業的、ループ的な構造があって、いろいろな画像を行ったり来たりすると、メモリ使用量がどんどん積みあがっていくようです。

 

参考までに・・。

 

 

chara_hideは要注意!バグ出やすい

[chara_hide]でゲームがフリーズすることがあります。

原因は、[chara_show]で表示していないキャラを、[chara_hide]で消そうとしたとき。

一見当たり前のように見えますが、これはとてもめんどくさい仕様です。

一本道のゲームならさほど問題ではないですが、いろんなルートを行き来したり、ループしたりする構造のシナリオでは、[chara_show]と[chara_hide]の対応関係がずれる、ということがよくあるからです。

例えばこんな分岐

1)キャラが3人いる場面。分岐で2)もしくは1-2)へ進む

2)キャラ3人を消去。場面転換。

1-2)キャラを1人消去(キャラが計2人になる)その後、2)へジャンプ

1)~2)の順でシナリオが進む分には問題ないですが、1)の後に分岐で1-2)に進み、それから2)に進むとフリーズします。

 

一本道のゲームにしても、シナリオを直しているうちにこのずれは発生しがちです。

表示していないキャラを[chara_hide]で消そうとしたときには、フリーズが発生してしまいます。なので、

・[chara_show]と[chara_hide]の対応関係はきっちりやっておきましょう。

・謎のフリーズがあったら、[chara_hide]を疑いましょう。

 

ちなみに、[freeimage]を使用すると、[chara_show]で表示したキャラを全部消せます。

ところが、これをやると[chara_show]のスタック的なものが内部的に残っているのか、その後に[chara_show]と[chara_hide]を繰り返しているうちに、やはりフリーズしてしまいます。

(時間差で来るので原因究明がホントにめんどくさいフリーズです)

・キャラ一括消去をしたい時は[freeimage]ではなく、[chara_hide_all]を使いましょう。

 

・追記:[chara_hide_all]を使うときにはwait=trueにすること!

 wait=falseにすると、直後に[chara_show]を置いたときに、[chara_hide_all]の処理に巻き込まれて、キャラが表示されないというバグが発生します。 

 

なお、このブログのすべての記事はティラノスクリプトver472での話です。