ステータス拡張

ステート機能拡張

HPやMPの再生率をカスタマイズしたり、ステートのかかりやすさを強化します。
また、ダメージ床の仕様を自由に設定できるようにします。
さらに、バフは戦闘中のみならず移動中でも効果時間が計測されるようになります。

目次


<再生率の歩数>

マップの移動中に再生率が発動するために必要な歩数を設定します。
ツクールのデフォルトでは20歩ごとに1回発生するようになっています。

また、次の<ステート時間解除>をOnにしている場合、このパラメーターは歩数ではなくフレーム数として解釈されます。
たとえばこのパラメーターに60を設定すると、60フレーム(1秒)に1回再生率が発生します。

4歩ごとに1再生
2秒(120歩)ごとに1再生

<ステート時間解除>

On(true)のとき、ステートの設定で「歩数で解除」の設定が「時間で解除」として解釈されます。
これにより、マップ上で停止した状態でも時間経過により再生率の発生やステートの解除が行われるようになります。
また、バフのターン数も時間で換算されるようになります。

時間は「歩数として設定した値」や「強化・弱体のターン」がそのまま秒数として設定されます。
上記<再生率の歩数>にもある通り、このパラメーターがOnのとき、<再生率の歩数>は再生率発生のためのインターバルとなります。

(例)

  • <再生率の歩数>が120
  • 毒ステートの「歩数で解除」が20のとき

2秒に1回再生率が発動し、これが20秒間続きます。そのため、結果としてステート付与中に10回、毒のダメージが発生します。

なお、アクション機能をOnにしているとプレイヤー側だけでなく、イベントエネミーにも反映されます。

<再生率の固定化>

On (true)のとき、特徴の「HP再生率」「MP再生率」「TP再生率」において、効果が固定値化します。
具体的には、%の値が割合ではなく実数値として参照されます。

例)HP再生率が -30% のステートの場合

このように、本来なら300ダメージ受けるところが30ダメージになります。

<戦闘中のダメージ床>

On(true)にすると、コマンドバトル設定中にダメージ床の上で戦闘が発生すると、ターン終了時に敵味方ともにダメージ床の判定が追加されるようになります。
これにより敵側にもダメージ床の特性をつける意義が生まれます。
また、後述するノートタグを使うことでダメージ床の性質を自由に変更することが可能です。

>>関連メモへ

ちなみに、このパラメーターの有効化には<ステート時間解除>のパラメーターも関わっています。
実装する際は<ステート時間解除>もOnにして下さい。

<床ダメージの発生間隔>

ダメージ床に移動した際、スリップダメージが発生する間隔をフレームで設定します。
この値が0の時、デフォルト同様に1歩(または半歩)移動する度にダメージが発生します。
1以上の時、ダメージ床に乗っている間はたとえ移動していなくても、指定フレーム経過ごとにダメージが発生するようになります。
なおこの時、ダメージ床から出るとフレームの内部カウントはリセットされます。

ちなみに、このパラメーターの有効化には<ステート時間解除>のパラメーターも関わっています。
実装する際は<ステート時間解除>もOnにして下さい。

<ダメージ床発生浸水率>

半歩以上の時のみ有効なパラメーターです。
ダメージ床に乗っている時、キャラクターの全身のうちどれだけの部位が乗っていればダメージが発生するのかを設定します。
部位のイメージとしては左上半身・右上半身・左下半身・右下半身の4部位です。
パラメーターの値は1〜4の範囲で設定でき、設置値以上の部位がダメージ床に乗るとダメージが発生します。
そのため、値が大きいほど条件は厳しくなり、ダメージ床のリスクを軽減できるようになります。

部位に関して正確に説明すると、「現在の座標」に対してx、yともに小数点以下を切り捨て・切り上げを行った4パターンの組み合わせからなる整数座標のタイルを参照します。
たとえば現在の座標が(12.5, 9.5)の時、参照するタイル位置の座標は以下の4つになります。
(12, 9)(13, 9)(12, 10)(13, 10)
この中に存在するダメージ床の設定をしたタイルの数が「ダメージ床に乗っている部位の数」として扱われます。
さて、整数座標の場合はどうでしょう。
たとえば(12.5, 9)の場合、y座標は小数の切り捨て・切り上げで値が変わらないため、(12, 9)と(13, 9)の2部位しか得られないように見えます。
しかしこれに関しては、(12, 9)(13, 9)(12, 9)(13, 9)というように重複した4部位で生成するようにしています。
そのため、整数座標が混在することでこのパラメーター値が満たされないということは起きません。

<スリップダメージの色調>

再生率の効果によるHPダメージや、床ダメージによるスリップダメージが発生した際に実行される画面フラッシュの色調を設定します。
赤、緑、青は-255~255の数値で、グレーは0~255の数値で設定して下さい。フラッシュ時間はフレームで指定します。

初期値は[赤;255 緑:0 青:0 グレー:128]、フラッシュ時間8フレームとなっています。
特に変更不要であれば未設定でも構いません。

<確率レベル補正>

On (true)にすると、ステートやデバフの成功確率に、使用者と相手のレベル差が反映されるようになります。
エネミーにレベルの設定がない場合はLv1として扱います。

<レベル補正率>

<確率レベル補正>がOnのとき、レベル差に乗算する補正値を設定します。
これにより、実際のステート・デバフの成功確率は

元の成功確率 × (レベル差 × <レベル補正率> + 1)

で得られます。

<運補正>

ステート・デバフの成功確率に対して、運の影響力を調整します。
デフォルトでは0.001となっており、使用者と相手の運の差に乗算しています。
さらに、ドロップアイテムの入手確率にも運が影響するようになります。
ドロップアイテムの確率は次のようになります。

元の確率判定値 × (パーティの運の合計値 × <運補正>)

<ステート蓄積値>※β6.1.0〜

<ステート蓄積上限値>

それぞれステートを蓄積方式にするためのパラメーターです。
<ステート蓄積上限値>が1以上のとき、ステートの付加確率で成功した際に蓄積値だけ内部パラメーターが蓄積されます。
そしてその蓄積が上限値に達したとき、初めてステートが付与されます。
蓄積値は<ステート蓄積値>で基準となる一般値を設定できる他、後述するノートタグ<accumulateState>で個別に設定することも可能です。
これにより、「一撃の威力は低いが手数で状態異常を狙う」という搦手の戦術も組みやすくなります。

スキルを2回使って初めて、ステートが付与されています

ただし、この<ステート蓄積値>はイベントコマンド「ステートの変更:付加」にも適用されます。
そのため、設定によっては一度のイベントコマンドだけではステートが付与されないという事態が発生します。
頻繁に特定のステートを付加したい場合、コモンイベントとしてまとめておくと良いでしょう。

蓄積値はパラメーターに依存します。

蓄積方式を実装したくない場合は、<ステート蓄積上限値>を0に設定してください。

<持続型ステート>※β6.1.0〜

戦闘不能や全回復によるステート解除を受け付けないステートを設定します。
ここで設定されたステートは、付加中に戦闘不能になっても解除されません。
また、イベントコマンド「全回復」ではあらゆるステートが解除されますが、その対象からも除外されます。

あくまでも「上記のタイミングで解除しない」ための設定なので、イベントコマンド「ステートの変更:解除」は受け付けます。



関連メモ

<floorDamage:n>

マップの設定のメモ欄に記述します。nにはダメージ床を移動した際の、1歩当たりのダメージ値を記述します。1未満の小数を設定した場合は、各アクターの最大HPに対する割合値にできます。このダメージ値はマップごとに設定でき、ノートタグを持たないマップではデフォルトの値である10が適用されます。

<floorElement:n>

マップの設定のメモ欄に記述します。nにはデータベースのタイプ「属性」のIDを記述します。このノートタグを持つマップにおいては、ダメージ床は対応する属性の床として解釈され、アクターの属性有効率もダメージに反映されるようになります。
ダメージ床の軽減率も通常通り計算されるため、装備選びや属性耐性の遊びが深まります。

※β6.0.0〜

<limitedState:[{"trg":"target","num":number,"opt":option}]>

データベース「ステート」のメモ欄に記述します。

limitedStateのノートタグを持ったステートは、タグで指示された内容を特徴の発動条件とします。
これはパッシブステートとして永続付与されている場合も例外ではなく、条件を満たさない限りは効果を発揮しなくなります。
また、効果を発揮していない時は戦闘終了以外による自動解除を受け付けません。
継続ターンも効果を発動してからカウントされます。
どうしても強制的に解除したい場合は、イベントコマンドの「ステート解除」を利用してください。

HP90%以下で毒が発生する状態。
HPが回復すると、毒の効果も消えますが、ステート自体は付与されたままです。

limitedStateで指定できる条件内容は、右の通りです。
共通事項として、target は文字列、number は半角数字、option はtrue か falseを記入します。
target の値に応じて number や option の役割が変わってきます。

※細かな仕様

  • 判定を取るステータスの参照元:

    原則的に、ステートが付与されているアクターまたは敵キャラ自身のステータスを参照します。
    weapon armor class item の、敵には無いステータスの場合、敵キャラは常時条件達成とみなされます。

  • 敵キャラにおけるlevelの判定:

    敵キャラは原則Lv1として見ますが、<level:n>のノートタグを持たせていると、その値で判定を行います。

  • actor member enemyの適用範囲:

    いずれも条件さえ満たせば、敵味方問わずに効果を発揮します。
    「特定の敵がいると復讐心で味方が怒る」「特定の味方がいると敵の士気が下がる」なども再現できます。

  • 戦闘テスト中のマップID:

    データベースの戦闘テストでは、マップIDは0として保存されています。
    実際のゲーム設計ではマップIDが0になることはないので、戦闘テスト中には条件を達成することはできません。

  • damaged の注意点:

    damagedは文字通り、ダメージを受けた瞬間にのみ条件達成となります。
    そのため、後述する<limitTime>を併記することで、初めてステートの効果が発揮されます。

  • target
  • number
  • option(効果発動条件)
  • hp
  • HP残量割合(%)
  • true :HPがnumber%以上
    false:HPがnumber%以下
  • mp
  • MP残量割合(%)
  • true :MPがnumber%以上
    false:MPがnumber%以下
  • tp
  • TP蓄積割合(%)
  • true :TPがnumber%以上
    false:TPがnumber%以下
  • state
  • ステートID
  • true :numberのステート付与中
    false:numberのステート付与中でない
  • weapon
  • 武器ID
  • true :numberの武器を装備中
    false:numberの装備を外している時
  • armor
  • 防具ID
  • true :numberの防具を装備中
    false:numberの防具を外している時
  • actor
  • アクターID
  • true :numberのアクターが加入している
    false:numberのアクターが加入していない
  • member
  • アクターID
  • true :numberのアクターが戦闘中
    false:numberのアクターが非戦闘中
  • level
  • レベルの値
  • true :バトラーのLvがnumber以上
    false:バトラーのLvがnumber以下
  • class
  • 職業ID
  • true :numberの職業に就いている
    false:numberの職業に就いていない
  • item
  • アイテムID
  • true :numberのアイテムを所持中
    false:numberのアイテムを所持していない
  • enemy
  • 敵キャラID
  • true :numberの敵キャラが生存している
    false:numberの敵キャラが死亡している
  • map
  • マップID
  • true :numberのマップにいる
    false:numberのマップにいない
  • damaged
  • true / false:ダメージを受ける

また、異なる target であれば複数の条件を指定することも可能です。
{"trg":"target", "num": number, "opt":option}を1塊として、カンマ(,)で繋げてください。
この複数条件については、全て満たした場合のみ効果が発動します。

記述例) <limitedState:[{"trg":"hp","num":85,"opt":true}, {"trg":"state","num":10,"opt":false}]>
HPが85%以上で、かつID10のステートが付与"されていない"時にステートの効果が発動します。

<limitTime>

こちらも、データベース「ステート」のメモ欄に記述します。
limitTime を持ったステートは、発動条件を満たして効果を発揮すると、以降は発動条件から外れても効果が残ります。
対してこのノートタグを持たない場合、発動条件から外れた際に効果が途切れ、再び条件を満たすと再度効果が現れます。

上同様、HP90%以下で毒が発生しますが、
回復しても毒の効果は残り続けます。

一見前者の方が「永続効果」のように思えますが、
発動さえしてしまえば以降は恩恵を得られるという、その強すぎる効果に対するリスクとして継続ターンやダメージ・行動制約による自動解除が非常に有効な組み合わせとなります。
後者は発動条件を維持するというリスクが常に付きまとうため、ステートの付与状況自体は永続にしておくことでバランスが取りやすいかと思います。
その観点から、強い効果を抑えるための制約として、<limitTime>を付与すると考えてください。

もっとも、この考え方はあくまでも一例であるので、「圧倒的に強いステートを作る!」という思いでノートタグを持たせない・自動解除の条件を付与しない……ということも十分に設計できます。

ちなみに、β6.1.0〜MELOS単独による永続パッシブステートが実装されました。
組み合わせることで、より多彩なステートが作れるようになるでしょう。

※β6.1.0〜

<accumulateState:{"id":value}>

データベース「スキル」「アイテム」のメモ欄に記述します。
このノートタグを持ったスキルによりステート付加確率に成功した際、<ステート蓄積値>ではなくタグで設定したvalueが蓄積されるようになります。
idにはステートのIDを、valueには蓄積値をそれぞれ半角数字で記入してください。

なお、カンマ(,)で「"id1":value1, "id2":value2,...」のようにつなぐことで複数のステート蓄積値を個別に設定することも可能です。
ただし、蓄積が実行されるのはステート付加確率に成功したステートのみです。
使用効果で付加確率が設定されていないステートを設定しても効果はありません。

暗闇(ID5)のみ付加効果があるため、
ID4の蓄積値30の設定は無視されます。

<passiveStates:[id]>

データベース「アクター」「職業」「武器」「防具」「敵キャラ」のメモ欄に記述します。
このノートタグをいずれかの形で持ったアクターや敵キャラは、タグを持っている限り指定されたステートが永続付与されます。
idにはステートのIDを半角数字で記入してください。
上記の<持続型ステート>同様に戦闘不能時や全回復での解除対象から外れます。
さらにこちらは、ノートタグを持つ限りは解除されません。

たとえばアクターと職業でそれぞれ異なるステートIDを指定した場合、アクターがその職業に就いている間は両方のステートが永続付与されます。
また、idをカンマ(,)で繋いでいくことで、1つのノートタグで複数のステートを対象にすることも可能です。

なお、ステートにパッシブステートを持たせたい場合、
<limitedState:[{"trg":"target","num":number,"opt":option}]>でステートを対象にすれば、擬似的に再現することができます。

コラム  ステートの構造

パッシブステート、持続型ステート、蓄積式、ステートの発動条件……
と、様々なステート設計があり混乱されるかもしれません。
ここではステートの取り扱いをどのように管理しているのかをお話しします。

[ステートグループ]

まず、ステートは以下の3グループに分類されます。

  1. ステート群A:ツクールがデフォルトで管理している基本的なステートグループ
  2. ステート群B:MELOSのパッシブ機能により付与される永続ステートグループ
  3. ステート群C:アクターやエネミーに実際発動している実効的なステートグループ

プレイヤーの目に見えるのがCのグループです。
このCは、A+Bの総合グループに対して<limitedState>の条件を満たしたものだけを残したものとなります。
Bは「永続付与」ではありますが、Cに入らない限りはその効果を発揮しません。
逆に、目に見えないとしても、単に条件を満たしていないだけであればステート自体はAかBのどちらかに付与されています。
条件による絞り込みの過程で勝手に解除されることはありません。
つまり、<limitedState>はAかBにあるステートをCに入れるための条件判定ということです。
条件さえ満たせばどこからともなく付与される…というわけではないのでご注意ください。

[付加・解除の処理]

以下の処理は全てAに対してのみ行われます。

  • スキルによるステートの付加・解除
  • イベントコマンド「ステートの変更」による付加・解除
  • スクリプト addState removeState による付加・解除
  • ステートの蓄積
  • 戦闘不能時・全回復時のステートリセット
  • 持続型ステートのリセット回避

<持続型ステート>がイベントコマンドやスキルの解除を受け付けるのも、Aに入るステートゆえです。
逆にパッシブステートはBに入るステートなので、これらの干渉を受けず永続付与されるという仕組みになっています。