ハウツー/自販機について

Last-modified: 2024-05-05 (日) 00:42:38
【関連:データ/自販機

自販機のイベントについての使い方や説明等

 
 
 

自販機のイベントをつくるには

vendEV.png
基本はこれだけでOK

グラフィック
「system_kyouyu_gazou02」に汎用自販機のグラフィックが用意されています。
そのまま使っても改変してもOKです。もちろんオリジナルのグラフィックを用意してもいいです。
イベント開始条件
「決定キーが押されたとき」に設定します。
アニメーションタイプ
アニメーションしない自販機なら「グラフィック完全固定」に設定します。
イベント実行内容
◆条件分岐:主人公が上を向いている
 ◆イベントの呼び出し:自販機EV(コモンイベント6番)
 ◆
:分岐終了
◆
 

自販機の価格を変更する

◆条件分岐:主人公が上を向いている
 ◆変数の操作:[0066]代入, 120
 ◆イベントの呼び出し:自販機EV
 ◆
:分岐終了
◆
  • 変数66番に設定したい価格を代入してから自販機EVを呼び出します。
    0以下の場合、価格は100夢になります。
 

自販機から出てくる商品を固定する

◆条件分岐:主人公が上を向いている
 ◆変数の操作:[0067]代入, 1
 ◆イベントの呼び出し:自販機EV
 ◆
:分岐終了
◆
  • 変数67番に設定したい商品IDを代入してから自販機EVを呼び出します。
    商品IDは「商品の一覧表」やコモンイベント6番の中身を見て確認できます。
    0の場合はランダムに商品を決定します。
  • 特定の商品の中からランダムに抽選したい場合は◆変数の操作を応用すれば可能です。
    ◆条件分岐:主人公が上を向いている
     ◆変数の操作:[0001]代入, 乱数[1~64]
      ◆条件分岐:変数[0001]が1と同値
      ◆変数の操作:[0067]代入, 2
      ◆
     :それ以外の場合
      ◆変数の操作:[0067]代入, 1
      ◆
     :分岐終了
     ◆イベントの呼び出し:自販機EV
     ◆
    :分岐終了
    ◆
    • 64分の1の確率で赤い缶ジュースが、64分の63の確率で緑の缶ジュースが出る自販機の実装例です。
      変数1番を商品の抽選に使っています。

ランダムだけでなく、入眠の回数や自販機を使った回数で出てくる商品を変えるなど、様々なアイディアをこの考え方で実装できます。

 

自販機を使うときの効果音を変更する

◆条件分岐:主人公が上を向いている
 ◆変数の操作:[0068]代入, 2
 ◆イベントの呼び出し:自販機EV
 ◆
:分岐終了
◆
  • 変数68番に設定したい効果音に対応した数を代入してから自販機EVを呼び出します。
  • 普通はお金を投入する音が鳴った後、商品が落ちてくる音が鳴ります。
    変数68番に0以外の数を代入しておくと、これとは違うタイプの自販機を作ることができます。

    変数68番の値所持金表示前の効果音表示後の効果音
    0お金を投入する音商品が落ちてくる音
    1(無音)(無音)
    2お金を投入する音冷蔵庫の扉を開ける音
 

変数66,67,68番を操作するときの注意点

変数66,67,68番は自販機EVを呼び出すときにだけ操作するようにお願いします。
例えば、以下の例は良くない実装です。

◆変数の操作:[0066]代入, 120
◆条件分岐:主人公が上を向いている
 ◆イベントの呼び出し:自販機EV
 ◆
:分岐終了
◆
  • 自販機EVを呼び出すとき以外にも変数66番が操作されます。(主人公が上を向いていないときは自販機EVが呼び出されない)
    上以外を向いてこのイベントを実行したとき、変数66番の値だけが書き換わります。
    この状態で他のマップの自販機を使うと、価格が120夢に設定されてしまうバグが発生してしまいます。

なお、自販機EVが呼び出されると変数66,67,68番は初期化されます(0が代入される)。
そのため、呼び出される場合に変数66,67,68番の値がどうなるかは気にしなくても大丈夫です。

 

自販機からオリジナルの商品が出るようにする

自販機EVのコモンイベントを編集する方法もありますが、コモンイベントを編集しないで済む方法もあります。

この方法は自販機EVの所持金表示&支払いの処理だけを借りてオリジナルのイベントを作る際にも有効です。
変数68番に0を代入してお店屋さんのようなイベントを作ったり、
ゲームセンターのゲームをお金を払って遊ぶようなイベントを作ったりするのにも応用できます。

自販機で商品を購入したとき、<表示したい戦闘アニメ>が表示される実装例です。
戦闘アニメを表示する代わりに、◆スイッチの操作◆ピクチャーの表示など好きなイベントコマンドを使うこともできます。
変数66番を操作して価格を変更したり、変数68番を操作して効果音を変えたりも可能です。

◆条件分岐:主人公が上を向いている
 ◆条件分岐:所持金が100以上
  ◆変数の操作:[0067]代入, -1
  ◆イベントの呼び出し:自販機EV
  ◆イベントの呼び出し:イベント中動作禁止
  ◆戦闘アニメの表示: <表示したい戦闘アニメ> , 主人公(w)
  ◆イベントの呼び出し:イベント中動作禁止解除
  ◆
 :それ以外の場合
  ◆イベントの呼び出し:自販機EV
  ◆
 :分岐終了
 ◆
:分岐終了
◆
  • 所持金が足りるかどうかの条件分岐は自販機EVを呼び出す前に行います。
    • 変数66番を操作して価格を変更する場合は、◆条件分岐でその価格以上の所持金かどうかを判定します。
    • 所持金が足りない場合にも自販機EVを呼び出しておくと、所持金が足りないときの演出をそのまま利用できます。
  • 変数67番に -1 を代入すると、商品を購入した後、何の商品も表示されない自販機をつくることができます。
    この実装では、何の商品も表示されない自販機を実行させた後、<表示したい戦闘アニメ>を表示することで、
    その戦闘アニメで表示した商品を自販機で購入したように見せることができます。
  • 自販機EVを呼び出した後はイベント中動作禁止が解除されます。
    その後◆ウェイト等の待ち時間が生じるイベントコマンドを実行させたい場合は、イベント中動作禁止を呼び出してください。
  • 値を取っておくのに使える変数があるなら上の実装例はもう少し簡潔にできます。
    実装例
    ◆条件分岐:主人公が上を向いている
     ◆変数の操作:[0001]代入, 所持金
     ◆変数の操作:[0067]代入, -1
     ◆イベントの呼び出し:自販機EV
     ◆変数の操作:[0001]減算, 所持金
     ◆条件分岐:変数[0001]が0より大きい
      ◆イベントの呼び出し:イベント中動作禁止
      ◆戦闘アニメの表示: <表示したい戦闘アニメ> , 主人公(w)
      ◆イベントの呼び出し:イベント中動作禁止解除
      ◆
     :分岐終了
     ◆
    :分岐終了
    ◆
    • 変数1番に自販機EV呼び出し前の所持金を代入しておいて、呼び出し後の所持金との差を取ることで、商品を購入できたか判定できます。
 

自販機EVがもたらす制作上の制約

自販機EVは大体どんなマップでも使うことができるのですが、一部特別な考慮が必要になるケースがあります。

  • 自販機に支払った金額の表示にピクチャー41~47番を使用します。同じ番号を使うピクチャーと併用できません。
  • 所持金の表示に「◆文章」を利用するため、「定期的に並列処理する」で実行する下記のイベントコマンドの実行前に処理が止まります。
    自販機EVの「◆文章」が完了すると、並列処理は止まったところから再開します。
    • 文章に関連したイベントコマンド(◆文章/◆文章オプション変更/◆顔グラフィックの設定/◆選択肢の表示/◆数値入力の処理)
    • ピクチャーに関連したイベントコマンド(◆ピクチャーの表示/◆ピクチャーの移動/◆ピクチャーの消去)
      • 自販機EVの「◆文章」より前に実行した◆ピクチャーの移動や、ピクチャーの回転描画・波形描画の動きは止まりません。
  • 所持金の表示後、「◆文章オプション変更」による設定が下記のように初期化されます。
    • ウィンドウの表示形式:通常
    • ウィンドウの表示位置:下
    • オプション:「主人公が隠れないように自動で上下に移動する」有効
    • オプション:「ウェイト中に他のイベントを移動させる」無効
      • 「ウェイト中に他のイベントを移動させる」は文章以外の処理にも影響するため、有効に設定しているマップがいくつかあります。
  • 商品の表示に戦闘アニメを利用するため、戦闘アニメと競合する下記のイベントコマンドと併用できません。
    • ◆戦闘アニメの表示
      • 後に実行された◆戦闘アニメの表示が先に実行された◆戦闘アニメの表示を打ち消して表示します。
    • ◆画面のフラッシュ
    • 「対象キャラ」が主人公の◆キャラクターのフラッシュ
      • 戦闘アニメの表示中に◆画面のフラッシュや「対象キャラ」が同じ◆キャラクターのフラッシュは画面に影響を及ぼしません。
        (イベントコマンドの実行自体はする)
 
 

自販機EVの商品抽選の仕組み

自販機EVを呼び出すとき、変数67番の値が0の場合、出てくる商品はランダムに抽選されます。
ただし、全ての商品が均等な確率で出現するわけではなく、偏りが設定されています。

商品を抽選する処理の流れ

次のような流れで出てくる商品が決まります。

  1. 4つのグループのうち、どのグループから商品を抽選するかランダムに決める
  2. そのグループに属する商品の中からどの商品が出るかランダムに決める

① 4つのグループのうち、どのグループから商品を抽選するかランダムに決める

抽選される商品は4つのグループのいずれかに属します。

  • グループA : 自販機実装当初から存在する伝統的な缶飲料3種
  • グループB : ありふれた缶飲料やペットボトル飲料など比較的出現しやすい商品を集めたグループ
  • グループC : 変わり種の商品を集めたグループ
  • グループD : とても珍しい商品を集めたグループ

商品が出やすい順に Aの商品 > Bの商品 > Cの商品 > Dの商品 となります。

商品の出現率が上の順序になるように、どのグループから商品を抽選するか決める確率は調整されることがあります。
(あるグループに属する商品の数が多くなると、そのグループ個々の商品の出現率が下がるので、上の順序から外れてしまうことがある)

② そのグループに属する商品の中からどの商品が出るかランダムに決める

グループAを除いて均等な確率です。

 

商品の出現率

商品の出現率は ①の確率 × ②の確率 となります。

グループ出現率商品ID商品の名前
A7.500%1缶ジュース(緑)
B0.011%4紙パック飲料(ピンク)
C0.004%6ボトル飲料(緑)
D0.002%7ボトル飲料(黒)

※ゆめ2っきver0.123bの時点

 

このような仕組みになった経緯

以前の仕様では商品を固定する数(変数67番に代入する数)と出現率を定める数が連動していました。
この仕様だと新しい商品を追加するごとに既存の商品が出にくくなったり、後から出現率を調整することが困難な問題点がありました。
これを解消するために、商品を固定する数と出現率を定める数を独立させ、商品一つ一つに固有の番号(商品ID)が割り振られました。
また、確率を調整する頻度が少なく済むように、商品をグループ分けして2段階の確率で出現率が決まる仕組みになりました。

この変更は制作上の問題点を解消するのが目的だったため、商品の出現率を元から大きく変えないように行われました。
その結果、グループAの中で商品を抽選する確率だけ均等でない確率になりました。
元の商品の出現率を大まかに分類する形で、現在のような4つのグループ分けがされました。

 
 

自販機EVに新しい商品を追加するには

特定のマップだけのオリジナル商品を作りたい場合は、前述のコモンイベントを編集しない方法のほうが簡単です。
この方法は既存の自販機から新しい商品が出るようにしたい場合に使えます。

Step1 追加する商品の商品IDが何になるか調べる

コモンイベント6番「自販機EV」の戦闘アニメが並んだ場所の下の方を見ると、追加する商品の商品IDが分かります。

CEV0006_1.png

◆注釈:★------------------------------------------
:  :| 商品の購入フラグに記録されない演出
:  :★------------------------------------------

この◆注釈の上にある◆条件分岐の数字に1加えた数が追加する商品の商品IDです。

Step2 戦闘アニメを用意する

商品を買ったときに表示される戦闘アニメを作成します。
戦闘アニメは空いてるところに好きに作ってもらって大丈夫です。
戦闘アニメの名前の先頭はStep1で調べた商品IDにしてください。

Step3 戦闘アニメをコモンイベント6番「自販機EV」に組み込む

コモンイベント6番「自販機EV」を編集します。

CEV0006_2.png
Step1で見てきた◆注釈の上に下記のイベントコマンドを挿入します。

◆条件分岐;変数[0067]が <Step1で調べた商品ID> と同値
 ◆戦闘アニメの表示: <Step2で作成した戦闘アニメ> , 主人公(W)
 ◆
:分岐終了
  • ◆戦闘アニメの表示の「対象キャラ」は主人公、「アニメが完了するまでウェイト」は有効にします。

Step4 追加する商品がどのグループに属するのか設定する

自販機からランダムに出てくる商品は、グループA~Dのいずれかに属します。
商品が出やすい順に Aの商品 > Bの商品 > Cの商品 > Dの商品 となります。
追加する商品がどのグループに相応しいか決めて、コモンイベント6番「自販機EV」を編集します。

なお、追加する商品がランダムに出てこない設定にしたい場合、いずれのグループにも属さない商品となります。
従ってこの工程は省いてください。
ランダムに出てこない設定の商品は、変数67番で自販機から出てくる商品を固定した場合にだけ出現します。

ここではグループCに商品を追加する場合を例に挙げます。
グループB,Dに商品を追加する場合もこれと似た感じにやればOKです。

  1. グループCの◆注釈の下の「◆変数の操作:[0015]代入, 乱数[1~m]」を編集して、m を m+1 にします。

    CEV0006_3.png

  2. イベント実行内容の下の方を見ていくと、「◆条件分岐:[0015]が m と同値」や「◆繰り返し処理の中断」があります。

    CEV0006_4.png
    ◆繰り返し処理の中断」の上に下記のイベントコマンドを挿入します。

    ◆条件分岐:[0015]が m+1 と同値
     ◆変数の操作:[0067]代入, <Step1で調べた商品ID>
     ◆
    :分岐終了

Step5 デバッグする

ランダムに出てくる商品の中で追加した商品が出るかどうかを確認するのは中々大変なので、
変数67番で自販機から出てくる商品を固定したイベントを作って、テストプレイで上手くいくかどうか確認すると良いです。
このやり方でStep3の工程までに誤りがあるかを確認できます。
デバッグが済んだら自販機EVに新しい商品を追加する工程は全て完了です。

 

自販機EVを編集するときの注意点

  • 追加した商品は他の制作者のマップの自販機から出現したり、変数67番を使って確実に出現するように設定できたりします。
    他の制作者に使ってほしくない商品をこの方法で追加するのはトラブルの元になってしまうかもしれません。
    前述のコモンイベントを編集しない方法を検討してみてください。
  • この工程で紹介したイベントコマンド以外は使わないようにお願いします。
    そういうイベントコマンドが必要な商品は、前述のコモンイベントを編集しない方法を使ってください。
 
 
 

コメント