ボンジュール。レビニアよ。
タイトルから内容がまったく見えてこないと思われる今回の解説、要はアレよミンサガのBPみたいなヤツよ!
……などと20年近くも前のゲームを例えにするのもアレなのでちゃんと説明するわ。
ウディタ基本システムの戦闘中のSPを「戦闘開始時に一定値にして、毎ターン少しずつ回復する」という仕様に改造してみよう、というお話なのよ。
こんな感じ。SPが戦闘開始時に一定値に設定されて、ターン経過で徐々に回復するようになっているわ。
ダンジョン攻略などの道中でのリソース管理もRPGの醍醐味だけど、こういうターン回復制もまた違った面白さがあるわよね。
とまぁそんなわけで、こんな感じの改造を解説していくのよ。今回は。
戦闘時SP管理コモンを作成する
まずはコモンを新規作成。名前は「〇戦闘時SP管理」とでもしましょうか。
⇒コモン作成:名前「〇戦闘時SP管理」、起動条件「呼び出しのみ」
コモン呼び出し時の入力設定はこちら。
モード=呼び出し時に「初期値の設定」を行うか「ターン回復」を行うかの選択用で、他2つは初期値とターン回復値の割合を指定するためのものね。
入力1にはこのように選択肢を設定してね。入力2と3は「特殊な設定をしない」でいいわよ。
使用するセルフ変数はこちら。こんな感じで名前を付けておいて。
それじゃコモンを作っていくわよ。まずはループ用変数の初期化から。
⇒■変数操作: CSelf10[〇番目?] = -1 + 0
なぜ初期値に-1を入れたのかというと、ループ処理でパーティ全員のSPを操作するための事前準備ね。
戦闘中のステータスは可変DB10番「×┏ 戦闘一時ステータス[基]」で管理されていて、ID0番からが味方のステータスになっているわ。このIDを+1しながら0番から順番に参照するために、初期値として-1を設定したわけ。
というわけことで次はループを作成。
⇒■回数付きループ [ 可変DB(18,4,0)[現在パーティー人数 数値 ] ]回
※ループ回数には「1118000400」を入力してね。これは現在のパーティ人数が格納されている可変DBを参照する変数呼び出し値だから、こうすればループ回数が自動的に現在の人数に設定されるわ。
最初にパーティの主人公を参照するためのループ用変数に+1。
⇒■変数操作: CSelf10[〇番目?] += 1 + 0
次にキャラの最大SPを取得するためのDB読込を入力。
⇒■DB読込(可変): CSelf11[最大SP] = 可変DB[ ×┏ 戦闘一時ステータス[基] : CSelf10[〇番目?] : 最大SP ] (10 : – : 8)
そして、基本システムのコモンを使って現在処理しているキャラの主人公IDも取得。
⇒■イベントの挿入[名]: CSelf14[キャラID] = [“X[移]選択位置主人公ID取得”] <コモンEv 105> / CSelf10[〇番目?]
※別の記事でも説明したけど、コモン「X[移]選択位置主人公ID取得」を呼び出せばパーティにいるキャラの主人公IDを取得することができるわ。
次は、初期値設定とターン回復で処理を分けるための条件分岐を作成。
⇒■条件分岐(変数): 【1】 CSelf0[モード] が 0 と同じ 【2】 CSelf0[モード] が 1 と同じ
⇒-◇分岐: 【1】 [ CSelf0[モード] が 0 と同じ ]の場合↓
⇒-◇分岐: 【2】 [ CSelf0[モード] が 1 と同じ ]の場合↓
⇒◇分岐終了◇
分岐1は初期SPの設定。まずは読み取ってある最大SPの値から変数操作を使って初期値を計算。
⇒■変数操作: CSelf12[初期SP] = CSelf11[最大SP] / 10
⇒■変数操作: CSelf12[初期SP] *= CSelf1[初期値割合] + 0
そしたら基本システムのコモンを使って現在のSPを一度0にする。
⇒■イベントの挿入[名]: [“○回復・ダメージ処理”] <コモンEv 4> / 2:SPの回復・減少 / CSelf14[キャラID] / -99999
※対象は事前に主人公IDを取得してあるセルフ変数14番を指定、ポイントには適当に-99999くらいにしてね。SPを0にできればなんでもいいわよ。
SPを0にした後は、計算したSPの初期値だけSP回復を実行。
⇒■イベントの挿入[名]: [“○回復・ダメージ処理”] <コモンEv 4> / 2:SPの回復・減少 / CSelf14[キャラID] / CSelf12[初期SP]
※ポイントには初期値を計算してあるセルフ変数12番を指定するのよ。
これで戦闘開始時の初期SP設定はOKよ。
余談
「こんな面倒なことをしなくても戦闘用一時DBの値を直接書き換えてしまえばいいのでは」と思われるかもしれないけど、これには理由があるわ。
DBを直接書き換えるだけだとキャラクター欄に変更が反映されないの(実際のSP量は変わっている)。
もちろん初期値を設定した後にキャラクター欄を更新すればいいのだけど、それには結構面倒な処理を書き加えることになっちゃうのよね。
それに可変DBを書き換える場合、減らす際は0以下にならないよう増やす際は最大SPを超えないようにと、下限と上限を気にする手間も出てくるわ。それも面倒。
だったら基本システムのコモンを使って「一旦0に→初期値だけ回復」にした方が、諸々の問題を気にしなくて済むから簡単だと、そういう理由なのよ。
話を戻して、分岐に2にはターンSP回復の処理を作っていくわ。まずは初期値と同様に変数操作で回復量を計算。
⇒■変数操作: CSelf13[回復SP] = CSelf11[最大SP] / 10
⇒■変数操作: CSelf13[回復SP] *= CSelf2[回復値割合] + 0
後は計算した回復値だけSP回復させればいいわね。
⇒■イベントの挿入[名]: [“○回復・ダメージ処理”] <コモンEv 4> / 2:SPの回復・減少 / CSelf14[キャラID] / CSelf13[回復SP]
これでターン回復の処理もOK。コモンは以上で完成よ。
SP管理コモンを戦闘内で呼び出して実行させる
あとは作成したコモンをどうやって戦闘に反映させるかだけど、コモン番号203番~にある基本システムのコモンから呼び出しすればいいわ。
まずは戦闘開始時の初期SP設定だけど、コモン「○[変更可]戦闘開始時処理」を使うの。ここからコモン呼び出しをすれば、戦闘開始直後のタイミングで実行してくれるわ。
⇒■イベントの挿入[名]: [“〇戦闘時SP管理”] <コモンEv 227> / 0:初期値の設定 / 3 / 1
※モードには「初期値の設定」を指定、初期値の割合には3を入力するわ。初期値は最大SPの30%ということね。もちろん割合を変えたかったら自由に入力してくれて構わないわよ。
ターン回復の処理はコモン「○[変更可]1ターン終了時処理」を使えばいいわ。
⇒■イベントの挿入[名]: [“〇戦闘時SP管理”] <コモンEv 227> / 1:ターン回復 / 3 / 1
※モードは「ターン回復」で回復値割合は1を指定。これで毎ターンSPが最大SPの10%だけ回復するはずよ。
これでコモンの作成と改造はOK、なんだけど最後にもう1つ。
どうせ戦闘開始時に初期値にセットされるんだから、SPは戦闘後に全快するようにしちゃいましょう。ユーザーDB17番「システム設定」に項目があるから、そこで設定変更しておいてね。
これですべての準備は完了よ。お疲れ様でした。
戦闘時のSPが「初期値に設定&ターン回復」されているか試してみる
それじゃ試してみましょう。といっても先にお見せした動画のとおりね。
今回は初期値割合を3(30%)とターン回復割合を1(10%)に指定していたから、最大SP20のキャラが初期値6で戦闘開始して毎ターン2ポイント回復していれば成功よ。
※当たり前だけどSPが0のキャラはずっと0のままだからね。
以上で「基本システムのSPを初期値+ターン回復制にしてみる」は終了。うまくできたかしら?
こういうSPがターン回復制のRPGってたまにあるけど私は結構好きよ。
ただひたすら大技を連発するだけの単調な戦闘と違って、行動ごとにいつ行うかのタイミングを見極める戦略性があるからね(最初は耐えながらSPが貯まったら大技を放つとか、ピンチ時の回復用にSPを温存するみたいな)。
ただ反面「ボス戦のために道中のザコ戦ではSPを節約する」みたいな、ダンジョン探索におけるリソース管理みたいなものは薄まってしまうかもしれないわ。
まぁこの辺は好みよね。もし気に入ったら試してみて頂戴。
コメント
>>※ループ回数には「118000400」を入力してね。これは現在のパーティ人数が格納されている可変DBを参照する変数呼び出し値だから、こうすればループ回数が自動的に現在の人数に設定されるわ
という部分ですが、正確には「1118000400」でした。
超初心者なので画像から判断できたのが幸いでした。
このシステム参考にさせていただきます。
失礼しました。修正済です。
ご指摘ありがとうございました。