見出し画像

【GB Studio】RPGでよく見るインベントリ画面を組む

こんにちは、しぐれです。
GB Studioでの開発が楽しくてやめられません。
今回はRPGなどにおけるインベントリ画面を作っていきます。
どんな順番でアイテムを取得しても、アイテムを何個取得しても大丈夫なものになっています。
※GB Studioで開発する場合を想定しています。他の言語の場合はもっと簡単にできます。
(備忘録の意味合いが強いです)


使用する知識など

  • 変数(代入・演算)

  • スワップタイル

アクターの表示バグや個数制限を考慮して、基本的にスワップタイルで作成します。
スワップタイルプラグインについては下記からダウンロード可能です。

アイテム一覧をつくる

ゲーム内に登場させたいアイテムを一覧にします。
もちろん、後から追加することもできますが、最初に全て書き出しておくと後々苦労しません。
今回は以下のようにしました。

  • りんご

  • みかん

  • バナナ

シーンを作る

ゲームで使うシーンを描きます。
今回は紹介なので描き込んでいません。
「歩き回るシーン」「アイテム確認画面のシーン」「スワップタイル用のシーン」の3つのシーンを追加します。

追加したシーン

アイテム確認画面のシーンの番号はタイルの座標です。
5〜12はアイテム名が入る部分です。今回は3文字で足りるのですが多めに作成しました。16・17はアイテムの所持数が入る部分です。99個まで持てるようにしていますが、そこまで作るのは大変なので表示させるのは10個までにしようと思っています。
座標はユニークになるように1ドット白くさせています。

変数を用意する

ゲーム内では以下の変数を使用します。分かりやすい名前にしました。

  • slot1:持ち物1つ目

  • slot2:持ち物2つ目

  • slot3:持ち物3つ目

  • item_ringo:りんごの個数

  • item_mikan:みかんの個数

  • item_banana:バナナの個数

ゲーム内でアイテムを識別させたいのですが、変数には数値しか入れられません。
そこでアイテムに番号を振って識別させようと思います。
先ほど書き出したアイテムに以下のように番号を振りました。

  • りんご:1

  • みかん:2

  • バナナ:3

アイテムを取得するイベントを作る

下準備ができたのでアイテムを取得してみようと思います。
インタラクトするとランダムで1〜3の数字を生成し、対応する番号のアイテムを取得できるようなアクターを作成しました。
インタラクトしたときの流れは以下になっています。

  1. インタラクトされる

  2. 1〜3の数字を生成

  3. アイテムの個数を増やす(item_〇〇をインクリメント)

  4. 取得したアイテムがアイテムスロットに存在しているか確認

  5. 存在していない場合はアイテムスロットに登録

  6. アイテム取得時のメッセージを出す

ざっくり書いてしまいましたが、実際に組むとこうなります。
長すぎるのでりんごの判定部分のみです。本当はWhen:2にみかんの判定を、When:3にバナナの判定がこの後に続いています。
イベントグループはコピペで済むようにしています。

りんご取得時の処理

アイテムを減らすイベントを作る

アイテムが取得できるようになったので次は逆を作ります。
所持しているアイテムを使用したり捨てたりなどしてアイテムの数が減るイベントです。
アイテム確認画面で使用するのが一般的な気がしますが、今回はアイテムスロットの処理だけ考えることにします。

インタラクトするとランダムで1〜3の数字を生成し、対応する番号のアイテムを捨てるアクターを作成しました。
インタラクトしたときの流れは以下になっています。

  1. インタラクトされる

  2. 1〜3の数字を生成

  3. 番号のアイテムがアイテムスロットに存在しているか確認

  4. 存在していない場合はもう一度数字を生成

  5. アイテムの個数を減らす(item_〇〇をデクリメント)

  6. アイテムスロットをトルツメする

  7. アイテム廃棄のメッセージを出す

アイテム確認画面から使用するような処理にする場合は、アイテム個数を減らす処理からが適応できます。
実際に組んだ画面はこんな感じです。

廃棄時の処理

あまりにも長いのでかなり折りたたんでしまっていますが、大体同じ処理を繰り返し行なっているだけになります。

終わりに

アイテムの取得とアイテムの使用(廃棄)ができるようになりました。
このプログラムの問題は「アイテム数が増えた時の影響範囲がとてつもなく大きい」ということです。
アイテム数が増えるとスロットと個数所持の変数が必要になり、その分の内部処理を追加しなければなりません。実際に実装する場合はスクリプト化して適宜呼び出してください。
(スワップタイルのプラグインが座標を引数にできたらかなり楽になるのですが…)

連想配列が使えれば楽なのになぁ

この記事が気に入ったらサポートをしてみませんか?