ハウツー/自販機

Last-modified: 2025-05-02 (金) 01:33:29
【関連:データ/自販機

自販機のイベントについての使い方を紹介します。

 
 
 

自販機について

vm_0.png

各所に設置されている自販機は、コモンイベント6番「自販機EV」によって、共通の動作をするように作られています。
自販機EVを呼び出すと、以下のようなイベントが実行されます。

  • 所持金100夢を支払い、商品が出現し、うろつきの最大HPが1上がります。

商品の価格、出現する商品、支払時の効果音はお好みで設定できます。(後述)

 

商品が出現するときの処理の流れ

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

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

  1. どのグループから商品を抽選するかランダムに決める
    • 抽選される商品は以下の4つのグループのいずれかに属します。
      • グループA : 自販機実装当初から存在する伝統的な缶飲料3種
      • グループB : ありふれた缶飲料やペットボトル飲料など比較的出現しやすい商品を集めたグループ
      • グループC : 変わり種の商品を集めたグループ
      • グループD : とても珍しい商品を集めたグループ
    • 商品が出やすい順に Aの商品 > Bの商品 > Cの商品 > Dの商品 となります。
    • いずれのグループにも属さない商品は、出現する商品をランダムに抽選する場合に出現しない商品となります。
      そういった商品は出現する商品を特定した場合にのみ出現します。
  2. そのグループに属する商品の中からどの商品が出現するかランダムに決める
    • グループAを除いて均等な確率です。
      • グループAは缶ジュース(緑)がやや出現しにくい設定になっています。
      • 他のグループはそのグループに属する商品が追加される可能性があるので、実装しやすいように均等な確率となっています。
 
このような処理の流れになった経緯

このような処理の流れになった経緯

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

自販機を作るには

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の場合は、出現する商品をランダムに抽選します。
 

特定の商品の中からランダムに選ぶ自販機を作る

変数67番に代入する値をランダムに選ぶように実装すれば可能です。

◆条件分岐:主人公が上を向いている
 ◆変数の操作:[0001:便利変数 1]代入, 乱数[1~64]
  ◆条件分岐:変数[0001:便利変数 1]が1と同値
  ◆変数の操作:[0067:自販機:商品設定]代入, 2
  ◆
 :それ以外の場合
  ◆変数の操作:[0067:自販機:商品設定]代入, 1
  ◆
 :分岐終了
 ◆イベントの呼び出し:自販機EV
 ◆
:分岐終了
◆
  • 64分の1の確率で赤い缶ジュースが、64分の63の確率で緑の缶ジュースが出る自販機の実装例です。

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

 

効果音が異なる自販機を作る

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

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

変数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番に1を代入してお店屋さんのようなイベントを作ったり、
ゲームセンターのゲームをお金を払って遊ぶようなイベントを作ったりするのにも応用できます。

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

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

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

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

  • 追加した商品は他の制作者のマップの自販機から出現したり、変数67番を使って確実に出現するように設定できたりします。
    他の制作者に使ってほしくない商品は、オリジナルの商品が出現する自販機を作る方法を使った実装を検討してみてください。
 

手順 1:追加する商品の商品IDが何になるか調べる

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

CEV0006_1_0.png

◆注釈:☆------------------------------------------
:  :| 商品はこの上に追加してください
:  :☆------------------------------------------

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

 

手順 2:戦闘アニメを用意する

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

 

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

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

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

◆条件分岐;変数[0067:自販機:商品設定]が <手順 1 で調べた商品ID> と同値
 ◆戦闘アニメの表示: <手順 2 で作成した戦闘アニメ> , 主人公(W)
 ◆
:分岐終了
  • ◆戦闘アニメの表示の「対象キャラ」は主人公、「アニメが完了するまでウェイト」は有効にします。
  • ◆戦闘アニメの表示以外のイベントコマンドは使わないようにお願いします。
    そういうイベントコマンドが必要な商品は、オリジナルの商品が出現する自販機を作る方法を使ってください。
 

手順 4:追加する商品がどのグループに属するのか設定する

自販機の商品は、グループA~Dのいずれかに属する商品か、いずれのグループにも属さない商品に区別されます。→詳細

いずれのグループにも属さない商品に設定にしたい場合は、この工程を省いて次の手順 5 に進んでください。

ここではグループ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:自販機:商品設定]代入, <手順 1 で調べた商品ID>
     ◆
    :分岐終了
 

手順 5:デバッグする

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

 
 

自販機を設置する上での注意点

自販機は大体どんなマップにも置くことができるのですが、
コモンイベント6番「自販機EV」の仕様によって、一部特別な考慮が必要になるケースがあります。

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

コメント