【ウディタ】HPやSPが減っていると宿泊額が上がる宿屋

レビニアよ。今回は「HPやSPが減っている分だけ価格が変動する宿屋」の作成解説よ。

過去のRPGで言えば「ファイナルファンタジーⅡ」や「魔界塔士Sa・Ga」がこのシステムだったわね。「HPが減っている分だけ宿泊日数が増える」という点では「ウィザードリィ」も近いかな? まぁそんな感じの宿屋をウディタのコモンイベントで作るのよ。

※そもそも今のRPGには「回復ポイントで全快するから宿屋という概念がない作品」も多いらしいけど、ファミコン世代の私にはよく分からないわ。需要度外視なのよ。

「HPSPで料金が変動する宿屋」のコモンを作成する


それじゃコモンを作成していきましょう。
→コモン作成:名前「〇宿屋(HPSPで料金変動)」、起動条件「呼び出しのみ」


セルフ変数の設定はこちら。

※9番と97~99番はただの宿泊演出用だから無視ししてもいいわ。


まず最初に、パーティのHPSPがどれくらい減少しているか調べるためのループの作成と、必要な変数の初期化を行うわ。
→■変数操作: CSelf11[PTの〇番目?] = 1 + 0
→■変数操作: CSelf16[宿泊料] = 0 + 0
→■回数付きループ [ 可変DB(18,4,0)[現在パーティー人数 数値 ] ]回


ループ回数には「118000400」を指定してね。これは現在のパーティ人数を格納している可変DBの変数呼び出し値よ。こうすればパーティの人数分だけループさせることができるわ。


以下はループ内の処理よ。最初に主人公IDを取得
→ |■DB読込(可変): CSelf10[主人公ID] = 可変DB[ パーティー情報 : メイン設定 : CSelf11[PTの〇番目?] ] (6 : 0 : -)


そしてその主人公の最大HP(SP)と現在HP(SP)を取得
→■DB読込(可変): CSelf12[最大HP] = 可変DB[ ×主人公一時DB : CSelf10[主人公ID] : [一時]計算済みMaxHP ] (17 : – : 0)
→■DB読込(可変): CSelf13[現在HP] = 可変DB[ 主人公ステータス : CSelf10[主人公ID] : HP ] (0 : – : 6)
→■DB読込(可変): CSelf14[最大SP] = 可変DB[ ×主人公一時DB : CSelf10[主人公ID] : [一時]計算済みMaxSP ] (17 : – : 1)
→■DB読込(可変): CSelf15[現在SP] = 可変DB[ 主人公ステータス : CSelf10[主人公ID] : SP ] (0 : – : 8)


※HPSPの参照DBだけど、現在HP(SP)は可変DB「0:主人公ステータス」、最大HP(SP)は「17:×主人公一時DB」を参照するの。なぜなら、こうしないと装備品による上昇値が反映されないからよ。


そして、最大HP(SP)から現在HP(SP)を差し引いた値を宿泊料へプラス。これをループでパーティメンバー全員に行うのよ。
→■変数操作: CSelf16[宿泊料] += CSelf12[最大HP] – CSelf13[現在HP]
→■変数操作: CSelf16[宿泊料] += CSelf14[最大SP] – CSelf15[現在SP]


最後に次のループ用にパーティ順指定用の変数に+1するのも忘れないでね。
→■変数操作: CSelf11[PTの〇番目?] += 1 + 0


あとは通常の宿屋イベントと同じように作っていけばいいわね。まずはメッセージで所持金と宿泊料を表示して、宿泊するかどうかの選択肢を作成しましょう。
→■文章:宿泊料:\cself[16] \udb[15:0:18]\n所持金:\cdb[6:0:0] \udb[15:0:18]\n宿泊しますか?
→■文章選択肢:/ 【1】宿泊する / 【2】宿泊しない


※「文章の表示」で使用している特殊文字の意味は以下のとおりよ。

  • \cself[16]
    コモンセルフ変数16番「宿泊料」
  • \udb[15:0:18]
    ユーザーDBタイプ15-データ0-項目18「[ステータス]お金の単位」
  • \cdb[6:0:0]
    可変DBタイプ6-データ0-項目0「所持金」


宿泊するを選択した場合は処理続行(何も入力しない)、しない場合はイベント中断させてね。
→◇選択肢:【1】 宿泊する の場合↓
→■
→◇選択肢:【2】 宿泊しない の場合↓
→■イベント処理中断
→◇分岐終了◇


以下は宿泊する場合の処理ね。最初に現在の所持金が宿泊料以上かどうかを条件分岐でチェック
→■条件分岐(変数): 【1】 可変DB(6,0,0)[メイン設定 所持金 ] が CSelf16[宿泊料] 未満 【2】 可変DB(6,0,0)[メイン設定 所持金 ] が CSelf16[宿泊料] 以上


※条件分岐には可変DBの値を直接指定することができるわ。可変DBタイプ6-データ0-項目0「所持金」を分岐条件に指定してね。


所持金が足りなければ処理中断。無銭宿泊は犯罪よ。
→◇分岐: 【1】 [ 可変DB(6,0,0)[メイン設定 所持金 ] が CSelf16[宿泊料] 未満 ]の場合↓
→■文章:所持金がたりません。
→■イベント処理中断
→◇分岐終了◇


お金が足りている=宿泊可能だから、所持金から宿泊料を差し引いてパーティを全回復
→◇分岐: 【2】 [ 可変DB(6,0,0)[メイン設定 所持金 ] が CSelf16[宿泊料] 以上 ]の場合↓
→■可変DB書込:DB[ パーティー情報 : メイン設定 : 所持金 ] (6 : 0 : 0) -= CSelf16[宿泊料]
→■イベントの挿入: コモン4:[ ○回復・ダメージ処理 ] / 7:完全回復 / -1:パーティ全員 / 15


※宿泊料の徴収はDB操作で行うのよ。可変DBの所持金に宿泊料を差し引いた値を代入すればいいわ。


ここから下は「宿屋で一晩を明かしました的な演出」よ。特に解説はしないからお好きに作って頂戴。

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

「〇宿屋(HPSPで料金変動)」コモンを試してみる

それじゃコモンを実行してみましょう。マップイベントからコモンを呼び出すわね。


HPとSPが減少している分だけ宿泊額が増えていれば成功よ。

※全快状態だと宿泊額0で泊まれちゃうのが気になるなら、最低額を指定してもいいと思うわ(冒頭の変数操作で宿泊料に0より大きな値を代入する)。

以上、HPとSPの減少量で価格が変動する宿屋の作成解説でした。