【ウディタ講座】SRPGをつくろう! アイテムの「増減」と「使用」の下準備

仮UIとしての「道具」コマンドを作りましたので、もう少しそこを作っていきたいですね。道具コマンドで使われたアイテムは壊れて消えたり、交換で増えたりするでしょう。

アイテムの増減処理を先に作ってから、道具を使うフローの下準備を行います。

アイテムの増減

新規アイテムの取得

既存のCDBへの書き込みコモンを使えばよいのですが、その代入位置は状況次第です。

  • アイテム所持数0なら、アイテムスロット1へ代入
  • アイテム所持数1なら、アイテムスロット2へ代入
  • アイテム所持数2なら、アイテムスロット3へ代入

……という具合。

要はCDBへ取得アイテムのIDを書き込む前に、「空いているスロット(CDB側のID)を探す」処理が必要となります。

アイテムを失った時は「上詰め」する

アイテムのロストなら、対象のスロットにアイテムID0(空欄)を書き込めばOKです。

しかし、たとえば所持アイテム3個の状態でスロット2番のアイテムを失ったとき、所持アイテムリストは次のようになります。

  1. てつの剣
  2. (空欄)
  3. てつの槍
  4. (空欄)
  5. (空欄)

見栄えがよろしくないですね。

バグのもとにもなりかねません。スロット2が空いたのなら、スロット3のアイテムが上に昇ってきてほしいのです。

プログラミングでいう「ソート(並び替え)」の処理が必要になってきます。

ソートは奥深いのですが、今必要な仕組みはシンプルな方ですね。

MEMO
おなじ「アイテムを失う」でも、「アイテムIDを指定して、それがどのスロットに入っているのかを探す」タイプの処理もあるかもしれません。その場合も、指定のアイテムのスロット位置がわかれば、あとは同じ処理をするだけです。

アイテムの使用

隣接の同軍ユニットと所持アイテムを「交換」する

実際に交換ができるまでは進めませんが、その直前までの処理は用意しておきます。

道具コマンドの表示条件を満たす時、「交換」コマンドも同時に出現するとします(厳密な出現条件の設定は後回し)。

交換の対象選択は、過去つくった攻撃対象の決定待ちの処理とおなじ要領ですね(距離1のマスにパネルを表示)。せっかくなので、同じコモンの入力値の変更(モード切替)でどちらにでも対応できるようにしましょう。

映っていませんが、「┃┗対象決定待ち」コモンの返り値で、対象のユニット番号を返すようにします(返り値にユニット番号を代入)。

ユニットコモンの本体の方で、それを受けて実処理コモンを呼ぶように。

既存の「攻撃」処理も同様に書き換えられています(「┃┣指定位置からnマス距離にパネル」が、後々触れる処理の先取りをしていますが今は気にせずに)。

 

ここまで進んだら、あとは実際に「交換」を行うコモンへ情報を送ります。

が、交換の実処理づくりはかなり大変。ひとまずはここまでで止めておきましょう。

自作メニューづくりに入っていきますので、もう少し簡単なものを作って慣れておくとよいかと思います。

道具コマンドから行えること「使う/捨てる」

こちらは「操作ユニットひとりの道具を使う」だけの処理。2ユニット間の処理である「交換」よりは簡単そうですね。

使った際の効果はアイテムによってさまざまですから、やはり「使う」の効果発動直前までを今回の目標とします。

 

まずは自作の選択肢づくり。

移動/攻撃/道具などのコマンドリストを作った時と同じ要領です。

選択肢の描画時と、左クリック時の処理のみ掲載しましょう。

選択中のピクチャの状態表示は、今回は色調補正ではなく不透明度の変更でやってみています。

 

さて、使う道具を決定したら、そこでさらに選択肢「使う/捨てる」が出てきます。選択肢が入れ子になっているわけですね。

こちらも描画時と左クリック時のあたりを掲載。

予定通り「使う」の実処理はまだ扱いませんが、「捨てる」はアイテム消去ですから、既存の処理で作ることができますね。

MEMO
「本当に捨ててもいいですか?」な確認が欲しいところですが、さらにもうひとつの選択肢を入れ子にするのはかなり複雑。

すべての局面で使いまわせるような、汎用のハイ/イイエ確認処理を作って呼び出すのがいいかもしれません。

 

出来上がりです。

 

 

【ウディタ講座】SRPGをつくろう! まとめ