調べることになった発端(長い前置き)
先日Twitterを見ていたとき、ある方の呟きが目に入りました。それは
「最近、読んでない文章までスキップされてしまうけれど、一体どうなっているの~!?私の端末が悪いの~!?(汗)」と言ったものでした。
正直私は今までなーんも考えてなくて、アホみたいな顔をしながらゲームを作っていただけなので、この呟きを見たときに「???」となりました。
確かに、ティラノ製のゲームを遊んでいると、読んでいない部分でスキップがぴたりと止まる…そんなゲームに出会うこともしばしばでした。私はそんなことも知らず、全部スキップできる状態でゲームを作り続けていたのです…。
注意というか設定を変更して後悔したこと
いちもんじは、試しに未読スキップしないようにしよ~っと!と思って設定を変更しました。そして、デバッグがめちゃくちゃやりにくいことに気が付きました。(1回読んだのにまた読まないかんのかい!!くそめんどくさいやないか!!!)
なので、ゲームとして正式に発表をするタイミングで設定を変更するべきだなって思いました。
未読スキップをなしにするはどうしたらいいの?
と言うことで、今回私調べました。まだ読んでいない部分に到来するとスキップをぴたりと止ませる方法です。
Config.tjsの設定を変更する
はい。難しいことは必要ありません。たったこれだけです。では見て行きましょう。
- myproject→変更したい自分のゲーム名フォルダ→data→system
- config.tjsを右クリック→プログラムから開くなどして開く(エディタを使ってもOK)
(いちもんじは面倒くさいのでデフォで入っているメモソフトを使用) - ctrl+Hで検索画面を表示(「ラベル記録」を検索かけましょう)
もしくは下の方にぐーっと下がってラベル記録の項目を見つけましょう - ;autoRecordLabel = false;を;autoRecordLabel = true;に変更する
- 保存して動作を見てみましょう
これで未読部分はスキップされなくなりました。
未読スキップなし機能の仕様について
さて、さっき設定をいじった方ならお気づきでしょう。そこにはこう書かれていたはずです。
// ◆ ラベル記録
// 重要:既読管理を有効にしたい場合は必ずtrueを指定して下さい
// 自動的に「読んだ」ラベルを記録するかどうかを指定します。
// この設定が false でなく true になっていると、ラベルを読むごとにシステム
// 変数 (sf.record) に
// trail_シナリオファイル名_ラベル名
// という変数名の変数に 1 が加算されます。
// たとえば first.ks の *start というラベルであれば sf.record.trail_first_start とい
// う変数名になります。まだ通過していないカ所では 未定義 ( undefined として見なされ
// ます ) になっています。
//
// 次のラベルに到達した時に ラベルの終了と見なされます。
// 吉里吉里/KAGとは仕様が異なりますのでご注意下さい。
// つまり、jump で他のシナリオファイルにジャンプしただけでは、記録されません。
// シナリオファイルの最初にラベルを配置しておくと記録されます
はて、なんのこっちゃ??って感じかも知れませんが、要約すると
ラベルごとに未読とか既読を管理してっから、止まって欲しいところがあんならとりあえずラベルを置けや!!
ってことです。例えばですが、下の文章を見てみてください。
*gake
そんな…!あなたが犯人だったなんて…!
馬鹿よ!!なんでそんな真似したのよ!!!馬鹿よ!!
*owari
そうさ、俺は馬鹿さ…。何とでも言えよ…。
さぁ刑事さん、俺にワッパをかけてくれ。
というシナリオがあったとして、上から順番にプログラムが流れますね。
最初に*gakeで探偵が犯人を追い詰める場面がありますが、2行目の馬鹿よ!なんでそんな~の後にある、*owariまで到達すれば、次は*gakeが全部スキップされます。
ラベルからラベルまで到達した時点で…というのはそういうことです。なので、*gakeの2行目、「馬鹿よ!!~」で読むのを止めてゲームを終わらせてしまったら、そんな…!からまた読み直しです。
つまり、節目節目でラベルを細かく設定する必要があるってことですね。
いちもんじはそんな面倒くさいことはしたくないので、ラベルは必要な時に必要な分だけおいてますけどね。