【ウディタ】お金を払って経験値を取得する

レビニアよ。今回の解説は基本システムの改造。内容は「お金を払って経験値を取得させる」というもの。ハクスラRPGなんかでたまにみかけるシステムね。

エンドコンテンツの豊富なRPGなんかは終盤はお金の使い道がなくなっちゃうから、こういうシステムがあると面白いかもしれないわね。実際ウィザードリィやエルミナージュなんかでも実装されているし。

今回はそういうものをウディタの基本システムでやってみようというお話よ。


ちなみにこれが完成例。

お金→経験値変換コモンを作成する


それじゃ作っていくわよ。適当な名前でコモンを新規作成してね。
→コモン作成:名前「〇G⇒EXP変換」、起動条件「呼び出しのみ」


※セルフ変数は3つほど使用するわ。


最初にループ処理を作成して頂戴。お店のようにキャンセルするまでイベントをループさせるためよ。
⇒■ループ開始
⇒◇ループここまで◇◇

※以降の処理はすべてこのループの中に作成してね。


まずは文章表示で現在の所持金と通貨単位を表示させましょう。
⇒■文章:いくら払う?\n(現在の所持金:\cdb[6:0:0]\udb[15:0:18]


当ブログをご覧の方なら知っているかもだけど、一応説明するとこれはデータベースの値や文字を呼び出している特殊文字よ。


現在の所持金は可変DBのタイプ6、データ0、項目0に格納されているから、特殊文字で「\cdb[6:0:0]」。


お金の単位はユーザーDBのタイプ15、データ04、項目18に格納されているから「\udb[15:0:18]」ということ。まぁ詳細はウディタのヘルプを参照して頂戴。

次はいくらお金を払うかの処理だけど、今回は選択肢でやっちゃいましょう。


各選択肢に支払う金額を入力&セルフ変数10番に格納するよう記述、キャンセルする場合はループ中断を記述してね。
⇒■文章選択肢:/ 【1】100 / 【2】1000 / 【3】10000 / 【4】やめる
⇒-◇選択肢:【1】 100 の場合↓
⇒|■変数操作: CSelf10[支払額] = 100 + 0
⇒-◇選択肢:【2】 1000 の場合↓
⇒|■変数操作: CSelf10[支払額] = 1000 + 0
⇒-◇選択肢:【3】 10000 の場合↓
⇒|■変数操作: CSelf10[支払額] = 10000 + 0
⇒-◇選択肢:【4】 やめる の場合↓
⇒|■ループ中断
⇒◇分岐終了◇


次はお金が不足している場合の処理。条件分岐を使って、お金が足りない場合はループ開始に戻すのよ。
⇒■条件分岐(変数): 【1】 可変DB(6,0,0)[メイン設定 所持金 ] が CSelf10[支払額] 未満
⇒◇分岐: 【1】 [ 可変DB(6,0,0)[メイン設定 所持金 ] が CSelf10[支払額] 未満 ]の場合↓
⇒|■文章:所持金が足りないよ
⇒|■ループ開始へ戻る
⇒◇分岐終了◇


条件分岐には可変DBの値も指定可能だから、所持金の入っている6-0-0番と支払金額が入っているセルフ10番を比較してあげればいいわ。

ここから先は誰に支払わせるか(経験値を獲得させるか)の処理。なのでパーティメンバーを選択する必要があるのだけど、これって選択肢でやろうとすると結構面倒なのよね。

パーティの何番目にはID何番のキャラがいるか調べて、そのキャラの名前を取得して、選択肢に反映させて……みたいなことをしないといけないからね。初心者には結構悩んでしまう部分かもしれないわ。

でも実は、基本システムのコモンを使えば簡単にできちゃったりするのよ。


それがコレ。
⇒■イベントの挿入[名]: [“X[移]キャラ欄_全員描画”] <コモンEv 92> / 0:新規に全員描画


このコモンはパーティメンバーの一覧を画面に表示するコモンなのよ。こうやって「新規に全員描画」で呼び出してあげれば、


こんな風に表示されるの。メニュー画面なんかで使われているヤツね。


メンバーを表示したら次は選択するためのコモンも実行。
⇒■イベントの挿入[名]: CSelf11[PT〇番目?] = [“X[移]キャラクター欄_選択実行”] <コモンEv 108> / 0 / 0:決定効果音を再生


これは表示したパーティ一覧からメンバーをカーソル選択するためのコモンよ。返り値をセルフ11番に格納してあげてね。

このコモンは決定した場合はパーティの何番目にいるか(先頭が0で二番目以降は1~)、キャンセルした場合は-1が返されるの。なので、


キャラ選択した場合とキャンセルした場合の条件分岐を作成しましょう。
⇒■条件分岐(変数): 【1】 CSelf11[PT〇番目?] が -1 以下 【2】 CSelf11[PT〇番目?] が 0 以上
⇒-◇分岐: 【1】 [ CSelf11[PT〇番目?] が -1 以下 ]の場合↓
⇒-◇分岐: 【2】 [ CSelf11[PT〇番目?] が 0 以上 ]の場合↓
⇒◇分岐終了◇


キャンセル(-1)の場合は表示したキャラクター一覧を消去
⇒ |■イベントの挿入[名]: [“X[移]キャラ欄_全員描画”] <コモンEv 92> / -1:全員消去


キャラ一覧を消すには処理モードを「全員消去」にして呼び出せばいいわよ。

ループ開始に戻すコマンドは不要よ。この分岐が最後の処理になるから自動的に先頭に戻るからね。

もう1つの分岐はキャラを選択した場合の処理だけど、まずは「選択したキャラのID」を調べる必要があるわ。

さっきも言ったけど、キャラクター欄選択実行のコモンは「パーティの何番目にいるか(先頭が0で二番目以降は1~)」が返されるのであって、キャラクターのIDが得られるわけではないの。


だから「選択した〇番目にいるキャラのIDはいくつなのか」を別途調べる必要があるわけ。

ではどうすればいいのかというと、


これも基本システムのコモンでイケるわ。105番のヤツよ。
⇒■イベントの挿入[名]: CSelf12[キャラID] = [“X[移]選択位置主人公ID取得”] <コモンEv 105> / CSelf11[PT〇番目?


このコモン「選択位置主人公ID取得」は……、まぁ名前のとおりね。パーティ位置を入れてやれば該当キャラのIDが得られるわ。セルフ12番に返り値(キャラID)を取得させてね。


キャラIDがわかったら後は経験値を取得させるのだけど、それにはコモン「〇能力値増減」を使えばいいわ。これは普通に呼び出し実行していいコモンだから、使ったことがあるかもしれないわね。
⇒■イベントの挿入[名]: [“○能力値増減”] <コモンEv 7> / CSelf12[キャラID] / 11:経験値 / CSelf10[支払額] / 1:有り


対象主人公にはキャラIDを取得させたセルフ12番、上昇させる能力値には経験値、ポイントには支払額を格納しているセルフ10番を指定するのよ。メッセージは「有り」にしておけば「レベルが上がった!」的な文章を自動で表示してくれるわ。


経験値の取得が済んだらキャラ一覧を更新&消去しましょう。
⇒■イベントの挿入[名]: [“X[移]キャラ欄_全員描画”] <コモンEv 92> / 1:全員描画[瞬間表示]
⇒■ウェイト:90 フレーム
⇒■イベントの挿入[名]: [“X[移]キャラ欄_全員描画”] <コモンEv 92> / -1:全員消去


※「瞬間表示」はウィンドウのスライド移動などなく一瞬で表示されるモードよ。画面更新に使うためのものね。


そうそう、所持金を減らすのも忘れないでね。
⇒■可変DB書込:DB[ パーティー情報 : メイン設定 : 所持金 ] (6 : 0 : 0) -= CSelf10[支払額]

これでコモンの作成は終了よ。面倒な部分はほとんど基本システムのコモンに処理させているから、そう難しくはなかったでしょ?

お金→経験値変換コモンを試してみる


それじゃ試してみましょうか。マップイベントから呼び出してみるわね。


10000を選択してみると、


手持ちは2500ゴールドだから不足で断られるわね。


今度は1000ゴールドを選択。


手持ちが足りていればキャラクター一覧画面に移行するわ。

※ここでキャンセルすれば一つ前の画面に戻るはずよ。


キャラクターを選択してみましょう。支払額と同じ値の経験値が取得されて、


メッセージ通り経験値を取得してレベルアップしたわね。


ウルファールさんにも経験値を買ってあげましょう。


同じくレベルアップ。


エディさんにも経験値を買ってあげましょう。


残念。お金が足りないので断られてしまったわ。


かわいそうだから100ゴールドだけ買ってあげましょう。

……とまぁ、こんな感じで動作できていれば成功よ。


今回利用した基本システムのコモンは、先頭に×が付いているとおり本来は直接呼び出して使用するものではないわ。でも仕組みを理解していれば便利に使えるコモンも結構あるのよ。

特に今回使用した「キャラ欄_全員描画」「キャラクター欄_選択実行」「選択位置主人公ID取得」の組み合わせは、「とりあえず味方を選択して何かしたい」という時にとても使い勝手がよくてオススメよ。

興味があれば、他のコモンも中をのぞいて読み解いてみるのもいいかもしれないわね。