タイトル画面に「エクストラボタン」を表示するスクリプト記述の一例です。
- 動作テスト用の変数を設定しておく。
- 隠しボタンを設定しておく。
これにより、任意のエンディング(シーン)を通過後、タイトル画面(に限らず)に「おまけボタン」を出現させることができます。
スクリプト記述例
※スクリプト記述例はLight.vn基本サンプル(公式本体)を使用した場合を想定しています。ダウンロードはこちらから。
- 新規スクリプト「sample_script.txt」内に
//ゲームクリア行以下に設置 全域変数 ゲームクリア = 1 全域変数保存
//タイトル画面・ボタン配置 ~タッチ素材設定 title/tit_lightvn.png title/tit_lightvn.png title/tit_lightvn@.png もし (ゲームクリア == 1) ~ボタン0 おまけボタン 130 130 91 //ジャンプ file.txt ~拡大 おまけボタン 100% | .イン おまけボタン 300
- 「新規スクリプト」はエディターの右上「新規スクリプトボタン」を押すことで作成できます。
※PC上で新規テキストを作成し、「scripts」フォルダに移動させることでも可能です。
- 「新規スクリプト」はエディターの右上「新規スクリプトボタン」を押すことで作成できます。
スクリプト解説
ゲームクリア後にタイトル画面に「おまけボタン」を表示させる方法を解説していきます。
1. テストプレイ用変数を設定する
ゲームクリアを判断させるために変数(フラグ)を設置します。
今回は、動作テスト用のために同じスクリプト内に記述しています。
以下、表示サンプル例。
- 新規スクリプト「sample_script.txt」内に
//ゲームクリア行以下に設置 全域変数 ゲームクリア = 1 全域変数保存
- ゲームクリアの変数は、ゲームアプリを閉じた後も残っていなくてはならないので「全域変数」コマンドで設置し、「全域変数保存」コマンドで強制的に保存させます。
ゲーム開始時に自動で作成されるセーブデータ「global0.xml」(ゲーム設定などゲーム全体)に保存されます。
セーブスロットである「saveslot1.xml ~」(プレイヤーが任意で保存するセーブスロット)には保存されません。
「変数」の種類について
「変数」コマンドには「変数」「臨時全域変数」「保存変数」「全域変数」の4種類があります。
変数
- 記述されたスクリプト内でのみ有効です。
- 「ジャンプ」や「スクリプト」で記述スクリプトを離れた場合や「スクリプト終了」でスクリプトが終了した場合などには消去されます。
- プレイヤーのセーブでも保存されません。
- ゲーム終了時に消去されます。
- 参照項目:変数
臨時全域変数
- 記述されたスクリプト以外のスクリプトでも有効になります。
- 「変数」と違い、「ジャンプ」や「スクリプト」で記述スクリプトを離れた場合や「スクリプト終了」でスクリプトが終了した場合などにも有効です。
- プレイヤーのセーブで保存されません。
- ゲーム終了時に消去されます。
- 参照項目:臨時全域変数
保存変数
- 記述されたスクリプト以外のスクリプトでも有効になります。
- 「変数」と違い、「ジャンプ」や「スクリプト」で記述スクリプトを離れた場合や「スクリプト終了」でスクリプトが終了した場合などにも有効です。
- プレイヤーのセーブでセーブスロットデータ(saveslot1.xml ~)に保存されます。
- ゲーム終了時に消去されますが、セーブスロットデータ(saveslot1.xml ~)に保存されている場合はロード時に有効になります。
- 参照項目:保存変数
全域変数
ノベルゲームにおける変数の使い分け
- 「臨時全域変数」だけでゲームをつくった場合
ゲーム起動後プレイするとして、変数1取得、2取得・・・と進行途中でセーブしてゲーム終了しても、次のロード時には変数は全リセットされます。
新しくゲームを始めた場合も変数は全リセットされている状態で始まります。
各エンドに変数を設置し到達していても、到達はすべてなかったことになります。
- 「保存変数」だけでゲームをつくった場合
ゲーム起動後プレイするとして、変数1取得、2取得・・・と進行途中でセーブしてゲーム終了したら、次のロード時には取得した変数のまま始められます。
新しくゲームを始めた場合は変数は全リセットされている状態で始まります。
各エンドに変数を設置し到達していても、到達後にセーブしなければ(セーブできなければ)、到達はすべてなかったことになります。
- 「全域変数」も「保存変数」とまったく同じです。ただし、すべて「全域変数 + 全域変数保存」としてゲームをつくった場合
ゲーム起動後プレイするとして、変数1取得、2取得・・・と進行途中でセーブしてもしなくてもゲーム終了したら、次のロード時には取得した変数のまま始まります。
新しくゲームを始めた場合も変数は全リセットされないので、新しく始めることはできなくなります。
各エンドに変数を設置し到達していたら、新しくゲームをしてもすべて到達していることになります。
- まとめると、ノベルゲームをつくるときは極端な話「保存変数」だけ使えば良い、ということになります。
各エンドクリアのフラグやCG(スチル)取得のフラグなど、一度通ったところを永久に保存させたい変数のみ「全域変数 + 全域変数保存」にしておきましょう。
2. 隠しボタンを設定する
ゲームクリアするまで表示しない隠しボタンを設置しておきます。
以下、表示サンプル例。
- 上記スクリプトに追記で
//タイトル画面・ボタン配置 ~タッチ素材設定 title/tit_lightvn.png title/tit_lightvn.png title/tit_lightvn@.png もし (ゲームクリア == 1) ~ボタン0 おまけボタン 130 130 91 //ジャンプ file.txt ~拡大 おまけボタン 100% | .イン おまけボタン 300
- ボタンを作成します。
「タッチ素材設定」コマンドでボタンの画像を指定し、「ボタン」コマンドでボタン機能を作成します。
- 「ボタン」コマンドに対し「もし」コマンドで変数(フラグ)判定を設定します。
例では設定した変数(ゲームクリア)が「1」の場合のみ、ボタンが表示される設定になります。- 参照項目:タッチ素材設定
- 参照項目:ボタン
- 参照項目:もし
- 参照項目:応用スクリプトを学ぶ > コマンド「スクリプト」に備わる機能「関数」を使おう
Light.vn基本サンプルに実装してみる
Light.vn基本サンプルに記述し、実際に動作を確認してみましょう。
1. 隠しボタンを設置する
タイトル画面におまけボタンを設置します。
以下、表示サンプル例。
- サンプルスクリプト「title.txt」内に
~タッチ素材設定 title/tit_lightvn.png title/tit_lightvn.png title/tit_lightvn@.png もし (ゲームクリア == 1) ~ボタン0 おまけボタン 130 130 91 スクリプト sample_script2.txt ~拡大 おまけボタン 100% | .イン おまけボタン 300
- 「title.txt」内に隠しボタンスクリプトを記述します。
場所は任意ですが今回は、ボタン周りが記述されているところ(134行目あたり)に記述してみました。
ジャンプ先は指定していません。「CG(スチル)閲覧モードの作り方」で作成したスクリプトを指定してみるのも良いと思います。
2. 変数を設置する
シナリオ本体の任意の部分に「全域変数」と「全域変数保存」を設置します。
以下、表示サンプル例。
- サンプルスクリプト「start0.txt」内に
全域変数 ゲームクリア = 1 全域変数保存
- 「start0.txt」内に「全域変数」と「全域変数保存」を記述します。
場所は任意ですが今回は、「!?」マーク演出(90行目あたり)の通過をフラグとしてみました。
- うまく実装できれば動画のように、最初はタイトル画面になかったボタンが、「!?」マーク演出通過後に出現するようになります。
loading...
複数の変数(フラグ)取得での条件式
ひとつのエンディングに到達した場合ではなく、複数のエンディングを通過することが条件の場合、「もし」コマンドでの条件式が変わります。
1. 複数のテストプレイ用変数を設定する
複数のルートクリアを判断させるためにそれぞれの変数(フラグ)を設置します。
今回は、動作テスト用のために同じスクリプト内に記述しています。
以下、表示サンプル例。
- 新規スクリプト「sample_script.txt」内に
//ゲームクリア行以下に設置 全域変数 ルートa = 1 全域変数保存 全域変数 ルートb = 1 全域変数保存 全域変数 ルートc = 1 全域変数保存
- 本来ならば、各ルートのエンド部分にそれぞれの「全域変数」+「全域変数保存」を記述します。
例では変数名を「ルート」にしていますが、任意で大丈夫です。
2. 複数変数を条件とする「もし」条件式
「もし」コマンドの条件は「()」と「&&」で増やしていけます。
以下、表示サンプル例。
- スクリプト「sample_script.txt」内に
//タイトル画面・ボタン配置 ~タッチ素材設定 title/tit_lightvn.png title/tit_lightvn.png title/tit_lightvn@.png もし ((ルートa == 1) && (ルートb == 1) && (ルートc == 1)) ~ボタン0 おまけボタン 130 130 91 //ジャンプ file.txt ~拡大 おまけボタン 100% | .イン おまけボタン 300
- 「もし()」内の条件を「(条件)スペース&&スペース(条件)」という式にしていきます。
条件が2つの場合、もし ((ルートa == 1) && (ルートb == 1)) ~ボタン0 おまけボタン 130 130 91 //ジャンプ file.txt
条件が5つの場合、もし ((ルートa == 1) && (ルートb == 1) && (ルートc == 1) && (ルートd == 1) && (ルートe == 1)) ~ボタン0 おまけボタン 130 130 91 //ジャンプ file.txt
- 逆に、複数の内どれかひとつでも到達した場合を条件にしたいときは「&&」ではなく「||」を使用します。
//ゲームクリア行以下に設置 全域変数 ルートa = 0 全域変数保存 全域変数 ルートb = 1 全域変数保存 全域変数 ルートc = 0 全域変数保存
//タイトル画面・ボタン配置 ~タッチ素材設定 title/tit_lightvn.png title/tit_lightvn.png title/tit_lightvn@.png もし ((ルートa == 1) || (ルートb == 1) || (ルートc == 1)) ~ボタン0 おまけボタン 130 130 91 //ジャンプ file.txt ~拡大 おまけボタン 100% | .イン おまけボタン 300
※例では「ルートbだけ通過」をテストしているため、「ルートa」「ルートc」を「1」以外(0)にしています。
例の条件式の場合、本来はすべて「1」で実装してください。- 参照項目:変数