機世語堂 2024/05/14 18:00

ウディタ実装解説2 状態異常の多重化(重ねがけ)

状態異常の多重化

今回は状態異常の多重化(重ねがけ)について解説する。
例えば「毒」にかかれば「毒」が1付与され、その状態でさらに「毒」にかかれば数値が増えていく。そうして増えた数値分1つにつきHPが10減っていく・・・という感じの仕組みだ。

上の画像は開発中のゲームの画像で、左の敵の「オールドポッド」には「傷」が3「脆弱」が2「破防」が2かかっている。

余談1 アイコンの状態表示

ちなみに状態設定がアイコン化しているのは、単純に表示名にアイコン表示を入れただけ。(下画像の赤枠の部分)

余談2 それってデフォルトの機能でできるような?

ウディタの経験がある方なら「これは状態設定の[このステ状態が重なると]-[この状態になる] の仕組みで実装できるよ」と思うかもしれない。
実際、サンプルゲームでは「力だめ」が重ねがけできる仕組みが最初から入っている。この仕組みで「毒1」「毒2」「毒3」…と各数値の状態設定をしていけば確かに実現は可能だ。

ただし上記のやり方には問題がある。状態設定の数は99個までとなっており、例えば「毒」を99まで重ねがけできるようにしたい、という場合は毒だけで全部の枠が埋まってしまうのだ。仮に枠がもっとあったとして、各数値に対応した状態設定をするのは非常にめんどくさい。
今回紹介する仕組みなら、状態設定の枠は1つだけでいくらでも重ねがけが実現できる。

全体的な改変内容の流れ

  1. 状態設定に項目「最大多重度」を追加

  2. 新しく可変DBに「状態多重度リスト」を作成する

  3. 137:X[戦]状態付与/消去の状態付与処理を改変する

  4. 148:X[戦]一時ステ計算<状態補正>のステータス計算と状態表示を改変する

余談3

図にある可変DB13の「状態リスト」には手は入れない。しかしこの状態リストは処理に密接にかかわっているので図に記載している。
「状態リスト」はキャラクター毎の各状態異常の「残りターン」を管理しており、これが0ならその状態異常にはかかってないと見なされる。

可変DB5にも状態リストという似た項目があるが、こちらは「残り歩数」を管理している別物なので注意

ユーザーDB:状態設定の改変

項目として最大多重度を追加するだけ。簡単。
この項目が、各状態ごとに何回まで重ね出来るかの設定となる。

可変DB:状態多重度リストの作成

図にもある可変DB13の「状態リスト」と全く同じ構造のタイプを追加する。今回の例だと可変DB20に追加している。

下図では項目名をわかりやすいようにしているが、可変DB13と全く同じで構わない。

137:X[戦]状態付与/消去の改変

このコモンでは戦闘中の状態付与処理を行っている。このコモンの状態付与時の処理に多重度リストを更新する処理を追加する。実際に追加したのが下図の赤枠の部分だ。

処理タイミングは残りターン数の設定直前。残りターン数が0(その状態が元々付与されていない)なら多重度を1にする。そうでなかったら多重度を1加算する処理をしている。

参考までに、青い枠で囲っている部分は最初から存在する、状態付与時の残りターン数の設定処理である

148:X[戦]一時ステ計算<状態補正>の改変

このコモンでは戦闘中のステータス計算の状態補正部分を担っている他、実はここで状態異常の表示文字列を作っている。このコモンのステータス計算の部分と状態異常表示文字列に手を加える。

まずステータス計算。改変分は赤枠で囲った部分、ステータスの状態補正の計算式を多重度回数のループで覆っている。

次は状態異常表示文字列に、多重度の値を後ろにつけるように処理を追加している。(注目位置0を除外しているのは、状態設定0番が「戦闘不能」だから。戦闘不能にも多重度の値をつけていいなら、ここの分岐は不要)

余談4 綺麗な状態多重度リスト

ここで解説した状態多重度リストは基本的に戦闘中の状態異常付与時にしか更新をしておらず、場合によって正しくない値が入っている事がある。今回の処理的には問題ないが、より整ったリストにしたい場合は、状態付与の削除に値を0にしたり、戦闘開始時にデータ初期化をするといい。

月別アーカイブ

限定特典から探す

記事を検索