ゲームクリア後「おまけボタン」の表示方法

Last-modified: 2023-09-05 (火) 19:18:11

タイトル画面に「エクストラボタン」を表示するスクリプト記述の一例です。

  1. 動作テスト用の変数を設定しておく。
  2. 隠しボタンを設定しておく。

これにより、任意のエンディング(シーン)を通過後、タイトル画面(に限らず)に「おまけボタン」を出現させることができます。



スクリプト記述例

スクリプト記述例は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種類があります。

変数

  1. 記述されたスクリプト内でのみ有効です。
  2. 「ジャンプ」や「スクリプト」で記述スクリプトを離れた場合や「スクリプト終了」でスクリプトが終了した場合などには消去されます
  3. プレイヤーのセーブでも保存されません
  4. ゲーム終了時に消去されます。

    変数

臨時全域変数

  1. 記述されたスクリプト以外のスクリプトでも有効になります。
  2. 「変数」と違い、「ジャンプ」や「スクリプト」で記述スクリプトを離れた場合や「スクリプト終了」でスクリプトが終了した場合などにも有効です
  3. プレイヤーのセーブで保存されません
  4. ゲーム終了時に消去されます。

    臨時全域変数

保存変数

  1. 記述されたスクリプト以外のスクリプトでも有効になります。
  2. 「変数」と違い、「ジャンプ」や「スクリプト」で記述スクリプトを離れた場合や「スクリプト終了」でスクリプトが終了した場合などにも有効です
  3. プレイヤーのセーブでセーブスロットデータ(saveslot1.xml ~)に保存されます
  4. ゲーム終了時に消去されますが、セーブスロットデータ(saveslot1.xml ~)に保存されている場合はロード時に有効になります

    保存変数

全域変数

  1. 記述されたスクリプト以外のスクリプトでも有効になります。
  2. 「変数」と違い、「ジャンプ」や「スクリプト」で記述スクリプトを離れた場合や「スクリプト終了」でスクリプトが終了した場合などにも有効です
  3. プレイヤーのセーブでセーブデータ「global0.xml」に保存されます
  4. 「全域変数保存」コマンドでセーブデータ「global0.xml」に強制的に保存することもできます
  5. 一度保存された全域変数は、ゲーム終了しても消去されず、永久に有効となります。(物理的に「global0.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
    隠しおまけボタン
  • ボタンを作成します。
    タッチ素材設定」コマンドでボタンの画像を指定し、「ボタン」コマンドでボタン機能を作成します。


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」で実装してください。