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

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


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

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


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


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

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

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

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


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


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


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


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


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


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

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


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

入力設定とコモンセルフ変数の準備はこれで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:防具」に変更して、


アイテム名を読み込んでいるDB読込も同じく武器か防具に変更して、


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

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

お金を拾うには


リクエストを頂いたのでお金を拾うバージョンも解説。
コモン作成:名前「〇拾:お金」、起動条件「呼び出しのみ」


入力設定はこちら。数値1はDB選択ではなく拾う金額を直接入力する感じ。それと数量や名称を入れる必要がないからセルフ文字列は2つで足りるわね。


使用するセルフ変数と文字列はこちら。


以降はアイテム取得コモンと違う部分だけ解説。まずはピクチャ番号をセルフ変数に格納する部分だけど、使用するセルフ文字列がズレたから8番じゃなく6番にしてね。
■変数操作: CSelf20[PN.メッセージ] = CSelf6[ピクチャNo.] + 0


文章を表示する位置を設定する部分は一緒。
■変数操作+: CSelf40[X.メッセージ] = このマップイベント の 画面X座標
■変数操作+: CSelf60[Y.メッセージ] = このマップイベント の 画面Y座標
■変数操作: CSelf60[Y.メッセージ] -= Sys118:[読]タイルサイズ + 0


アイテム名を取得する必要はないから、代わりにユーザーDBからお金の単位を取得
■DB読込(ユーザ): CSelf7[単位] = ユーザDB[ 用語設定 : 用語基本設定 : [ステータス]お金の単位 ] (15 : 0 : 18)


ユーザーDB15番でお金の単位を設定しているはずだから、そこから読み込む感じね。


そしたら呼び出すコモンを「〇お金の増減」に変更
■イベントの挿入[名]: [“○お金の増減”] <コモンEv 3> / CSelf0[金額] / 0:なし


増減額を変数呼出し値でコモンセルフ0番に指定するのよ。入手メッセージは呼び出し元で入力しているから「なし」でいいわ。


取得時の効果音設定は同じ。
■サウンド:SE 変数[CSelf3[SE]] (0 チャンネル) 再生 / 遅延:0フレーム


メッセージ取得時に表示するピクチャはちょっと変わってるわよ。
■ピクチャ表示:CSelf20[PN.メッセージ] [中心]文字列[\E\c[\cself[2]]\] X:CSelf40[X.メッセージ] Y:CSelf60[Y.メッセージ] / 0(0)フレーム / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]


入力する文字列だけ変わるから、こちらを参考にしてね。


ピクチャ消去と呼び出し元マップイベントの操作については変わらず。
■ピクチャ消去:CSelf20[PN.メッセージ] / 20(40)フレーム
■変数操作+: CSelf11[呼出元MEvID] = このマップイベント の イベントID
■イベントの一時消去:Ev CSelf11[呼出元MEvID] (0フレーム)

これでお金取得バージョンは完成。


あとはアイテム取得コモンと同じようにマップイベントから呼び出せば、


お金が拾えるコモンとして同じように機能するはずよ。