【ウディタ】万能ウィンドウ活用:パーティの隊列を変更する

今回解説するのは「隊列変更」よ。パーティに参加しているキャラクターの順番を変更するということね。

ちなみに今回作る隊列変更はメニュー画面から呼び出す前提になるからご承知おき下さいね(メニュー以外から隊列を変えるというのもあまりないと思うけど)。

作成には基本システムの機能である「万能ウィンドウ」を利用するわ。万能ウィンドウについては過去の記事で詳しく記載しているから、今回の解説ではサラッと済ませちゃうけどそのつもりでいてね。

今回のウディタ解説は「戦闘テストコモンの作成」よ。どういうものかというと、 ユーザーデータベース13番「敵グループ」に設定されている内容を読み込んで、 ...
今回はワープポイントを作成するわ。仕様は↓のとおりよ。 チェックするとその地点がワープポイントとして登録される 登録後は他の登録済みワープポイントと行き来ができる ...

隊列変更コモンを作成する


それじゃ作っていきましょう。空きに新規コモンイベントを作成して頂戴。
→コモンイベント作成:名前「〇隊列変更」
→起動条件:呼び出しのみ


使用するセルフ変数はこちら。名前を付けておいてね。


まず最初に行うのは万能ウィンドウ用一時DBの初期化。万能ウィンドウを利用する際は必ず必要よ。
→可変DB書込:「万能ウィンドウ一時DB」を全データ初期化する


次は現在のパーティメンバーを取得するための準備をするわ。
→変数操作:セルフ変数20番に0を入力
→イベント制御:ループ処理を作成


先頭にいるキャラの主人公IDを取得して加入状況を条件分岐で判断するわ。
→可変DB読込:「パーティー情報-メイン設定-メンバー1」をセルフ変数21番に代入
→条件分岐:「セルフ変数21番が0以上」と「セルフ変数21番が-1以下」を作成


主人公IDが0以上=今の先頭にはキャラが存在している」ということだから、万能ウィンドウに登録するわ。
→分岐1「セルフ変数21番が0以上」に以下を入力する
→可変DB読込:「主人公ステータス-(セルフ変数21番)-名前」をセルフ文字列5番に代入
→可変DB書込:「万能ウィンドウ一時DB-(セルフ変数20番-項目文」にセルフ文字列5番を入力
→可変DB書込:「万能ウィンドウ一時DB-(セルフ変数20番-項目コード」にセルフ変数21番を入力
→可変DB書込:万能ウィンドウ一時DBー(セルフ変数25番)ー選択可能状態[1=可]に「1」を入力


登録した主人公は、後で並べ替えするためにいったんパーティーから外しましょう
→コモン呼出:「○メンバーの増減」を「処理:仲間から外す」「対象:1600021」で呼び出す


1600021はセルフ変数21番の変数呼び出し値ね。


あとは次のループのために、万能ウィンドウの登録位置(項目番号)を次に移しておいてね。
→変数操作:セルフ変数20番に+1

次のループでも同じく先頭キャラの主人公IDが読み込まれるのだけど、↑の処理で万能ウィンドウに登録した先頭キャラはパーティーから外しているわよね。

ということは、次のループで読み込まれる先頭キャラは「2番目から繰り上がって1番目にいるキャラ」ということになるわ。だから読み込むキャラは次のループでも先頭で大丈夫よ。

こんな感じで順番に2番目、3番目のキャラも登録&パーティーから外していって、


全員を登録&外したら最終的に先頭キャラは存在しなくなるから、読み込まれる主人公IDは-1になるわ。そうなったらループを終了させましょう。
→分岐2「セルフ変数21番が-1以下」に、イベント制御「ループ中断」を入力する

このループ処理により「現在のパーティーメンバー全員を万能ウィンドウに登録&全員パーティから外す」ということが行われたわけね。

後は万能ウィンドウを表示……、の前にまだ初期設定が残っていたわね。


万能ウィンドウの表示位置や縦横の項目数なんかを設定するわ。
→可変DB書込:基本システム用変数ー万能ウィンドウ表示Xに「0」を入力
→可変DB書込:基本システム用変数ー万能ウィンドウ表示Yに「105」を入力
→可変DB書込:基本システム用変数ー万能ウィンドウ横サイズに「80」を入力
→可変DB書込:基本システム用変数ー万能ウィンドウ縦サイズに「16」を入力
→可変DB書込:基本システム用変数ー万能ウィンドウ縦サイズに「*=セルフ変数20番」を入力
→可変DB書込:基本システム用変数ー万能ウィンドウ横項目数に「1」を入力
→可変DB書込:基本システム用変数ー万能ウィンドウ縦項目数に「セルフ変数20番」を入力
→可変DB書込:基本システム用変数ー万能ウィンドウ項目個数に「セルフ変数20番」を入力
→可変DB書込:基本システム用変数ー万能ウィンドウ横スクロール位置に「0」を入力

※ウィンドウ縦サイズにセルフ変数20番で掛け算しているのは、パーティ人数でウィンドウの縦幅を調整しているためね。縦項目数と総項目数にセルフ変数20番を入力しているのも同じ理由よ。

これで万能ウィンドウの項目登録と初期設定はOK。次は「実際に万能ウィンドウを表示して、主人公を選択した順番にパーティ加入させる」ということをするわ。


全員選択し終えるまで処理をループさせるから、まずはその準備をしましょう。万能ウィンドウを表示させてキー入力待ちにするわ。
→変数操作:セルフ変数25番に0を入力
→コモン呼び出し:「X[共]万能ウィンドウ描画処理」を「表示モード」で呼び出す
→イベント制御:ループ処理を作成
→コモン呼び出し:「X[共]万能ウィンドウ選択実行」を「選択を終えるまでループ」「結果をセルフ変数10番に代入」で呼び出す


次に条件分岐を作成。
→条件分岐:「セルフ変数10番が0以上」を作成

セルフ変数10番が0以上というのは「何か項目を決定キーで選択した場合」ということ。今回の処理ではキャンセルキー(-100)やサブキー(-300)の入力は無効(何もしない)だから、この分岐の中に処理を書いていくわ。


項目に表示されている主人公を選択したら、その主人公をパーティーに加入させるわ。あとループ処理を終了させるためのセルフ変数(加入させた人数)にも+1しておいてね。
→コモン呼出:「○メンバーの増減」を「処理:仲間に加える」「対象:1600010」で呼び出す
→変数操作:セルフ変数25番を+1する


一度選択した主人公はすでに加入させたんだから、次のループに入る前に選択不可にしないといけないわね。選択したカーソル位置を取得して、該当する項目を選択不可にするわ。
→可変DB読込:「基本システム用変数-[一時]万能ウィンドウ最終カーソル位置-数値」をセルフ変数24番に代入
→可変DB書込:万能ウィンドウ一時DBー(セルフ変数24番)ー選択可能状態[1=可]に「0」を入力


次に選択不可にした項目を表示に反映させるための再表示(エフェクトなしで再描画)を行うわ。でもその前にカーソル位置も記憶しておきましょう。こうすればいちいちカーソルが先頭行まで戻らずに済むから親切よね。
→可変DB書込:「基本システム用変数-万能ウィンドウ 外からカーソル指定-数値」にセルフ変数24番を代入
→コモン呼び出し:「X[共]万能ウィンドウ描画処理」を「表示モード」「エフェクトなし」で呼び出す


全員加入させたら万能ウィンドウを消去してループを中断させるわ。これは条件分岐で判断できるわね(加入させた人数=選択項目の数)。
→条件分岐:「セルフ変数25番がセルフ変数20番と同じ」を作成
→コモン呼び出し:「X[共]万能ウィンドウ描画処理」を「消去モード」で呼び出す
→イベント制御:「ループ中断」を入力する

これで隊列変更(パーティー再編成)は終了だけど、冒頭で言った通りこのコモンはメニュー画面から呼び出すことを想定しているから、最後にメニュー画面に表示されているキャラクター欄を更新するわ。


キャラクター欄の更新は基本システムのコモン「X[移]キャラ欄_全員描画」を呼び出せば可能よ。入力項目に「全員描画[瞬間表示]」というのがあるからこれを選択すればいいわ。

これでコモンイベントの作成はOK。万能ウィンドウについては詳しく説明しなかったけど大丈夫だったかしら?(わからなかったらお手数だけど過去の記事を読んで頂戴ね)

隊列変更コモンをメニューから呼び出してみる

それじゃ試してみるわね。メニュー画面からコモンイベントを呼び出すには、


ユーザーDB17「システム設定」で登録してやればいいわね。メニューコマンドの空きに「隊列変更」を登録するわ。


テストのためにサンプルゲームの方々にご参加いただきました。メニューに表示されている「隊列変更」選択しコモンを呼び出すると、


現在のパーティーメンバーが万能ウィンドウの選択項目に表示されたわ。

下のキャラクターから順に選択して、現在の順番と逆にしてみましょうか。


一度選択したキャラは選択不可になっているわね。このまま全員を選択し終えると、


成功! キャラクター欄が再描画されて、キャラの順番が逆に隊列変更されたわ。

隊列変更コモンの作成解説は以上よ。うまくできたかしら?

ここまでがんばってもらってから言うのもアレだけど、ウディタの基本システムには「ドラクエのように隊列順で戦闘で狙われる確率が変わる」ということはないから、隊列を変えることに戦略的な意味はなかったりするわ。

ただ「先頭のキャラによって発生イベントの内容を変える」みたいなことはできるから、演出の1つとして活用することはできるかもしれないわね。

コメント

  1. ウディタ初心者 より:

    自分はキャラの数が多いので、万能ウインドウサイズを大きめにして、横項目数を増やしたのですが、カーソル位置がバグって変な場所に表示され、そのあと項目文もそこに移動し表示がバグります。一応隊列変更やメンバーチェンジはできるのですが…

    • レビニア より:

      ウディタ初心者さん

      中身を見てみないと分からないですが、とりあえずは
      私が作ったコモンを試してみてください↓。
      https://silka-blog.com/wp-content/uploads/ChangeFormation.zip

      これでうまくいかないとなると別の問題だと思います。

    • レビニア より:

      「戦闘不能時は経験値を入手できないようにする」にも質問されている方と同IPですが、どちらも質問するだけしてこちらが答えているのに無反応なのはなんなのでしょう?