【ウディタ】お手軽でカンタンなアイテムドロップコモン

レビニアですよ。今回の解説は「お手軽で簡単なアイテムドロップコモン」ということなのだけど。


要はこういうもの。ちなみに基本システム専用よ。

動画では取得メッセージがポップアップ表示されている以外に別に特徴も見えないけど、何がお手軽で簡単化かというと、


マップイベント側は基本的に呼び出すだけでいいの。イベントの一時消去もコモン側でやってくれるから不要なのよ。


また、拾えるアイテムとその数、メッセージの文字色や効果音、表示する単位と文章内容、マップ移動後に復活するかどうかなど、さまざまなことがコモン呼び出し時に指定可能よ。

処理がほぼコモンイベント側で完結しているしDBも未使用。とにかく「マップイベントに細かいことをさせない」というのがお手軽で簡単の所以よ。

※ウディタに慣れてくればわかるけど、マップイベントに色々書きこむのは避けたくなるものなのよ。管理しづらいし。

アイテムドロップコモンを作成する


というわけで作成解説に入るわ。呼び出し用コモンを新規作成してね。
コモン作成:名前「〇拾:アイテム」、起動条件「呼び出しのみ」


次は入力設定。8つすべてにチェックして名前をつけて頂戴。


入力1は拾えるアイテムの選択。ユーザーDB2番をデータべース参照させてね。


入力2はマップ移動すると復活するかどうかの選択。内部値0と1で選択肢を手動作成するのだけど、これはそのまま呼び出し元への返り値にするから下部の「結果を返す」欄も設定しておいてね。


入力3はポップアップメッセージの文字色選択。文字色を使い分けたい時に選択するものね。システムDB12「文字色」をデータベース参照するのよ。


入力4は入手時のSE(効果音)の選択。拾った時の効果音を使い分けるためのものよ。同じくデータベース参照でシステムDB3「SEリスト」を指定してね。

他に取得アイテムの数、メッセージに表示する単位や文章、使用するピクチャ番号などは、ごらんのとおりセルフ文字列5~6番を使用するわ(一部は後でセルフ変数に変換)。


入力用以外に使うセルフ変数はこちら。名前を入力しておいてね。

入力設定とコモンセルフ変数の準備はこれでOKよ。


イベントコマンドだけどまずメッセージ表示の準備から作っていくわよ。前述したとおりセルフ文字列に入力した数値の変換。セルフ文字列8番からセルフ変数20番に入力してあげてね。
⇒■変数操作: CSelf20[PN.メッセージ] = CSelf8[ピクチャNo.] + 0


次はメッセージを表示する位置の登録。変数操作+で呼び出し元マップイベントの画面座標を取得するのよ。
⇒■変数操作+: CSelf40[X.メッセージ] = このマップイベント の 画面X座標
⇒■変数操作+: CSelf60[Y.メッセージ] = このマップイベント の 画面Y座標


※こんな感じで画面X座標とY座標を取得するのよ。


でもこのままだとマップイベントとメッセージが重なって見づらいから、Y座標を1マス上に移動してあげましょう。
⇒■変数操作: CSelf60[Y.メッセージ] -= Sys118:[読]タイルサイズ + 0


※システム変数118番に使用しているタイルセットのサイズが格納されているから、その値をY座標からマイナスしてあげれば上に1マス移動させられるわ。


あとは取得するアイテムの名前をDB読み込み。これでメッセージ表示の準備はOKよ。
⇒■DB読込(ユーザ): CSelf9[名前] = ユーザDB[ アイテム : CSelf0[アイテム] : アイテム名 ] (2 : – : 0)


※データ番号はセルフ変数0番を指定するのよ。


次はアイテムを取得させる処理。でも取得個数は入力設定でセルフ文字列をお借りしてるから、ピクチャ番号と同様にまずは数値に変換
⇒■変数操作: CSelf10[取得数] = CSelf5[取得数] + 0


そしたら基本システムのコモンを使ってアイテムを取得させる。
⇒■イベントの挿入[名]: [“○アイテム増減”] <コモンEv 0> / CSelf0[アイテム] / CSelf10[取得数] / 0:なし


※アイテム番号と増減数はセルフ変数で指定。入手メッセージはポップアップ表示させるから「なし」にしてね。


次はSEの再生。
⇒■サウンド:SE 変数[CSelf3[SE]] (0 チャンネル) 再生 / 遅延:0フレーム


※「システムDBから変数で指定」で入力してね。


そしてアイテム取得メッセージをピクチャ表示
⇒■ピクチャ表示:CSelf20[PN.メッセージ] [中心]文字列[\E\c[\cself[2]]\c] X:CSelf40[X.メッセージ] Y:CSelf60[Y.メッセージ] / 0(0)フレーム / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]


※ピクチャ番号と座標はセルフ変数から指定。

表示する文字列「\E\c[\cself[2]]\cself[9] を \cself[10]\cself[6] \cself[7]」だけど、


内容はこのとおりよ。セルフ変数と文字列に格納した文字や値を、文字装飾して表示しているのね。


そして表示したメッセージを時間差で消去
⇒■ピクチャ消去:CSelf20[PN.メッセージ] / 20(40)フレーム


・発動ディレイ=消去が実行されるまでの待ち時間
・処理時間=消去にかける時間
つまり「40フレーム待ってから20フレームかけて消去」ということね。まぁ好みで調整して頂戴。

最後はアイテムドロップした後のマップイベントの消去だけど、コモンイベント側で処理可能よ。実はいちいちマップイベンド側で「イベントの一時消去」をさせなくてもいいの。


こんな感じ。
⇒■変数操作+: CSelf11[呼出元MEvID] = このマップイベント の イベントID
⇒■イベントの一時消去:Ev CSelf11[呼出元MEvID] (0フレーム)


変数操作+で呼び出し元マップイベントのIDを取得できるから、


IDを取得したセルフ変数を指定することで呼び出し元イベントを消去させることができるわ。これは覚えておくと便利ね。

これでコモンイベントの作成は完了よ。

アイテムドロップコモンを試してみる


それじゃマップイベントから呼び出して試してみましょうか。まずは「薬草」をドロップするイベント

起動条件は「プレイヤー接触」にしたけど、決定キーで拾えるようにしたければ「決定キーで実行」でもいいわよ。

ただどちらにしても「セルフ変数0番=0」を起動条件に設定しておいてね。マップ移動で復活させるかの判定に使うから。


取得数は3つ、マップ移動で復活するように設定するわ。返り値をセルフ0番に代入するのも忘れないでね。


もう1つは「エリクサー」をドロップするイベント


貴重品なので取得数は1つで復活しないよう設定しましょうか。その他の項目も微妙に変えてみるわね。


テストプレイを起動。作成したアイテムドロップイベント2つがあるわね。


触れるとメッセージが表示されてイベントが消えたわ。


エリクサーも入手(貴重品だからメッセージもうれしそう)。


アイテム画面をチェック。ちゃんと指定したアイテムが指定した個数で入手できているわね。


マップ移動してみましょう。


戻ってくると、片方だけ復活しているわね。


薬草は復活するよう設定したから、


戻ってくれば何度でも拾えるわ。

※エリクサーの方は、「返り値によりセルフ0が1になり起動条件を満たさなくなった」から未復活ということね。

武器や防具を拾うには


同じやり方で武器や防具を拾わせることもできるわ。まずは作成したコモンを空きにコピペして名前を変えて、


入力1の読み込み元DBを「3:武器」か「4:防具」に変更して、


途中で呼び出す基本システムのコモンを「〇武器増減」か「〇防具増減」に変更する。これだけでいいわ。

他にもアレンジとして「触るとダメージを受ける」「触ると回復する」「ボス前で1度だけ使えるセーブポイント」みたいなものを作るものもできるでしょうね。興味があれば挑戦してみるといいわ。