チケット #40514

calc_bonuses()の整理

登録: 2020-06-28 00:39 最終更新: 2020-10-23 23:31

報告者:
担当者:
チケットの種類:
状況:
オープン [担当者決定済み]
コンポーネント:
(未割り当て)
マイルストーン:
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
なし

詳細

#37353 から分離。異様に肥大化したプレイヤーのステータス計算処理を分離する。どういう形に分離すべきかはまだ検討しつつ、ひとまず大掛かりな分割から進行中。

player-status.cの中身を以下のように分解し、DRYのために多方向に応用する予定。

  • ステータス計算の元となる配列を player-status-tables.cに
  • プレイヤーのステータス算出更新処理を player-status-calc.c/h player-status.c/hに置く
  • プレイヤーの状態がどうなっているかの判定関数、マクロを player-status.c/h player-status-flags.c/hに置く
  • (2020/08/13)これまで従属変数となっている各値、フラグをcalc_bonuses()を通さなければ更新されなかったために処理の追うのが煩雑極まりなかったので、大半を必要な時にplayer-status-flags.c/hから即時算出する形に変更する。これはcreature_ptr->updateのPU_*による更新フラグと更新処理タイミングがやはり煩雑であるために、混乱をきたしがちな面を切り崩していく手付にする意図がある。
  • (2020/10/22)permanent-resistances.cによるダンプのための耐性判定とplayer-status系列ソースとを東方する。

#40853 でまとめられた修正事項

  • 型キャストミスによる耐性有無の判定ミス
    • 特に閃光/暗黒属性の追加効果の盲目はまだ直せていない。effect_player_lite() とeffect_player_dark() の中でresist_blindしかチェックしていないのが原因? → 別途閃光/暗黒耐性で盲目化しないように修正。
  • is_resist()_* は has_resist_*() に統一(再編成過渡期で統一できていなかった) → player-status-flags.c/h内の全て統一。
  • 修正方針案:is_resist_blind() をhas_resist_blind() に変更し、別途「追加効果への耐性」 (例:破片属性の切り傷@ゴーレム、重力属性の減速、水属性の混乱@マーフォーク) の判定を行う関数を作成する(これらは元より本チケットの途中として想定中)

チケットの履歴 (9 件中 3 件表示)

2020-06-28 00:39 更新者: deskull
  • 新しいチケット "calc_bonuses()の整理" が作成されました
2020-06-28 00:47 更新者: deskull
コメント

ある程度まとまった処理をcalc_bonuses()から追い出したが、少し方針として疑問が湧いてきた。分割の方針は種族、装備品などの要素別ではなく、腕力、最大HPなどのステータス別に分けるべきではあるまいか。こっちの方がさらに修羅であるが、player_typeというクラスの機能的には正しいはず。

2020-08-18 01:43 更新者: deskull
  • 詳細が更新されました
2020-08-22 03:43 更新者: deskull
コメント

命中値、ダメージ値計算を各関数に独立させつつ、実質値とアイテム未鑑定による表層値処理は引数のみの分岐として統合した。従来のcalc_bonuses()から計算が変化していないかはこれから確認する。

2020-08-23 02:09 更新者: deskull
コメント

フラグ判定計算については #40652 と並列して行う。

2020-10-18 15:04 更新者: deskull
  • 詳細が更新されました
2020-10-21 00:27 更新者: deskull
  • 詳細が更新されました
2020-10-22 00:30 更新者: deskull
  • 詳細が更新されました
2020-10-23 23:31 更新者: hourier
コメント

resistance-info.c と player-damage.c にis_*()が残っていました

こちらでコンパイルが通るように修正しています

ご確認下さい

(取り込みの際はFor3.0.0-Monster-Adjustmentを先にやらないとマージ地獄に陥るかもしれません)

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする