ティラノスクリプト:[autosave]オートセーブの実行・[autoload]オートロードを実行

 たまにありますね、オートセーブのゲームが。あれって便利なようで不便なようで、でもやり直しが利かないプレッシャーの中遊ぶゲームもそれはそれで良い緊張感になったりしますよね。
 それとか、1本道のゲームだったらいちいちセーブする手間が省けて良いなと思うこともあります。この記事を見ているということは、そんなあなたもオートセーブをするゲームを作ろうとお思いですね?分かります、いちもんじもいつか作ってみたいです。

[autosave]タグの機能

 このタグに到達した際、自動的にプレイ状況を保存します。
 [autosave]されたデータが存在する場合、sf.system.autosaveにtrueが格納されます。サンプルコードのような判定ロジックをタイトル画面より前に用意しておくことで、前回のプレイ状況からゲームを再開するような仕組みが作れます。
 ってことで、判定ロジックを見てみましょう。

[autosave]タグの使い方

オートセーブデータの判定を行います[l][r]
[if exp=”sf.system.autosave === true”]

自動的に保存されたデータが存在します。ロードしますか?[r]
[link target=select1]【1】はい[endlink][r]
[link target=select2]【2】いいえ[endlink][r]
[s]
*select1
ロードを実行します[l]
[autoload]
*select2
[cm]
ロードを実行しません[l][r]
[else]
自動的に保存されたデータはありません[l][r]
[endif]

オートセーブを実行しました[autosave][l][r]
ゲームを再起動してみてください[s]

 う~~~んなるほど~。これはアレですね~。普通にセーブが出来るゲームだけど、オートセーブも入るよってゲームの仕様ですね~。
 いちもんじは思うのですが、それだとオートセーブ、いらなくね?
 いやいや!普通にセーブも必要だし、オートセーブもどっちも必要だよ!って方はこのやり方をやると良いと思います。本当に便利な世の中ですね。

オートセーブオンリーでゲームを作る場合

 オートセーブだけで構築されたゲームを作りたい場合は、タイトルのロードボタン?ツヅキカラボタンがあるとするなら、ロードボタンを押した先にオートロードを実行してくれる[autoload]タグを置くと良いと思います。
 また、オートセーブオンリーのゲームでゲームを最初からやりたい場合もあるかも知れません。そうしたら、初めからとか始めるボタンを押すと昔にオートセーブしたことがあるかどうかの判定をして、もしtrueだったら「前回セーブされたデータがあるようですが上書きしますか?もしも上書きするのならもう後戻りはできません」的な注意の文章を流すようにすると良いかも知れませんね。

title.ksとscene1.ksを小細工

 まずはtitle.ksを加工します。ここでは[dialog]タグも使っています。

[button x=135 y=230 graphic=”title/button_start.png” enterimg=”title/button_start2.png” target=”gamestart”]
[button x=135 y=320 graphic=”title/button_load.png” enterimg=”title/button_load2.png” target=”load” ]
[button x=135 y=410 graphic=”title/button_cg.png” enterimg=”title/button_cg2.png” storage=”cg.ks” ]
[button x=135 y=500 graphic=”title/button_replay.png” enterimg=”title/button_replay2.png” storage=”replay.ks” ]
[button x=135 y=590 graphic=”title/button_config.png” enterimg=”title/button_config2.png” role=”sleepgame” storage=”config.ks” ]
[s]

*gamestart
;一番最初のシナリオファイルへジャンプする([if exp=”sf.system.autosave === true”]で判定したかったのですが、何故だかならなかったので自分でフラグを作ることにしました。
[if exp=”sf.systemauto==1″]
[dialog type=confirm text=”前回のセーブデータが消失しますが宜しいですか?” target=kokokara target_cancel=start]
[else]
*kokokara
@jump storage=”scene1.ks”
[endif]

*load
[if exp=”sf.systemauto==1″]
[autoload]
[else]
[dialog text=”前回のデータはありません” target=kokokara target_cancel=start]
[endif]

 まず、ロードボタンを押すとセーブデータの一覧が表示されるようになっていたので、loadというラベルを作成してボタンを押されたらそこに飛ぶようにしました。(target=”load” に変更)
 ロードボタンを押した先、もしオートセーブのデータが無かったら前回のデータはありませんとアラートが出る様にしています。
 それから*gamestartラベルの動作を変更。初めからを選択した際もし以前にセーブデータが存在していたら「前回のセーブデータが消失しますが宜しいですか?」とプレイヤーに尋ねています。はいを選択された場合はシナリオの初めから、いいえを選択された場合はタイトル画面最初からやり直ししてます。もし前回のデータがなかった場合はスッと最初のシナリオに入ります。

 次にscene1.ks(1番最初に出て来るシナリオ)を加工します。

[message_config speech_bracket_float=”true”]
「あなたは可愛い蛇苺…こっちへおいで。[r]
ゴッゴゴゴ~!!ゴっダイゴ~~~~」[p]
[eval exp=”sf.systemauto=1″]
[autosave]

 大事なのは初回のオートセーブの時に、オートセーブをしたことを記念(?)して判定フラグを立てることです。そしてそのあとにオートセーブを入れること。
 オートセーブ入れて「よし大丈夫、もう安心だ!タイトルへ戻ろう!」なんてことになったら、まだフラグが立っていないから続きからプレイできない様になってしまいます。

メニューからセーブとロードを削除する

 ティラノスクリプトのデフォルトメニューでは当然ながらセーブとロードがセットでついてきます。これを消さないことには、オートセーブオンリーのゲームなど仕上がりません。ということで消しましょう

エディタでtyrano/html/menuを開く

 エディタってなんぞ?って方はこちらの記事を参照してみてください。

…で、この部分をザクっと行っちゃってください。

 そしたらセーブとロードが消えます。なんかちょっと寂しいメニューになっちゃいますけどね…。
 でもこれで、セーブとロードが使えなくなりました。退路は断った、これでオートセーブオンリーのゲームが仕上がる筈だ…。クックックッ…。

タイトルとURLをコピーしました