Linear ArchiveArchived issues viewer
← Back to list
INS-423

状態異常とバフ・デバフ による効果値の加算や上書きをする

StatusDone
TeamInstansys
Assigneeyasuhisa.hiraga@instansys.co.jp
PriorityNo priority
Created2026/02/18 08:34
Completed2026/02/23 04:50
Archived2026/03/03 02:39

Description

  • 状態異常 燃焼 , 混乱 .. 効果時間が長い方を優先 効果が強い方で上書き 両方いいとこ取りする
  • バフ・デバフ .. パラメータの増減 .. バフデバフ重ねがけあり。上昇値は乗算じゃなく加算 20%upを2回やった場合 40% 、管理は個別にしておいて、時間が来たらそれぞれ切れていけば良さげ。

Comments (3)

yasuhisa.hiraga@instansys.co.jp2026/02/20 01:26

現状の実装状況

調査結果をまとめます。

現在の重ねがけ処理

付与時: 常に新規追加(上書きなし)

battle-effect.ts:315-326 の applyStatusEffect を見ると:

// 常に新規追加

const statusEffect = { id: statusEffectId, instanceId: getInstanceId(), duration, params, ... };

entity.statusEffects.push(statusEffect);

同じ状態異常が複数付与された場合、重複チェックなしでそのまま配列に積まれます。

参照時の挙動:種類によって異なる

種類: バフ/デバフ系(attack_power_up/down, defense_up/down, evasion_up, attack_speed_up, critical_percent_up)

参照方法: .filter() で全件取得し、ループで累積適用

重ねがけの効果: 効果が重なる(乗算で累積)

────────────────────────────────────────

種類: 行動制御系(stun, freeze, confusion)

参照方法: .some() で1つでもあればtrue

重ねがけの効果: duration が長い方が残るだけ(効果自体は変わらない)

────────────────────────────────────────

種類: DoT系(dot_damage)

参照方法: 各インスタンスごとにprocessStatusEffectIntervalで個別処理

重ねがけの効果: それぞれ独立してダメージ発生(実質重なる)

────────────────────────────────────────

種類: slow

参照方法: 移動速度計算時に全件参照して累積

重ねがけの効果: 効果が重なる

具体例

  • 攻撃力+20% を2回付与 → 1.2 × 1.2 = 1.44倍 に(乗算累積)
  • スタン を2回付与 → スタン状態自体は1つ分と同じ挙動(duration の長い方が残って効く)
  • DoT 125ダメ/0.5秒 を2回付与 → 2つ独立して各0.5秒ごとにダメージ発生

期限切れ

tickStatusEffects(battle-effect.ts:241-257)で毎tick全ての状態異常のdurationを減らし、0以下になったものを配列から除去します。各イン

スタンスが独立してdurationを持つので、先に付与されたものから順に消えます。

yasuhisa.hiraga@instansys.co.jp2026/02/20 01:32

slow は「移動速度版のデバフ」であり、処理の書き場所が違うだけ(damage-calculator.ts ではなく applyStatusEffectsLogic 内の switch

文)で、累積の仕組み自体はバフ・デバフと同じです。

yasuhisa.hiraga@instansys.co.jp2026/02/20 01:53

[状態異常とバフデバフ]

重ねがけの処理を修正します。

・バフ・デバフ(attack_power_up/down, defense_up/down, evasion_up, attack_speed_up, critical_percent_up)(slow含む)

  • 重ねがけが発生した場合、それぞれの効果を加算します。(攻撃力+20% を 2回付与 => 40%のattackupとする)
  • 効果時間は、それぞれのバフ・デバフ個別に管理します

・Dot系(dot_damage)

  • 重ねがけが発生した場合、効果時間が長い方を優先、効果が強い方を優先してマージします
  • 燃焼が2個かさなって、片方が残り3秒/dotダメージ10、片方が残り5秒/dotダメージ5の場合 => 5秒/dotダメージ10 の効果にする

・行動制御系(stun, freeze, confusion)

  • 現状のままでOK