2021-01-18 9:00 JST 〜 メンテナンスによるサービス全停止予定

チケット #40514

calc_bonuses()の整理

登録: 2020-06-28 00:39 最終更新: 2021-01-11 15:05

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

詳細

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

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

  • ステータス計算の元となる配列を player-status-tables.cにhttps://osdn.net/projects/hengband/scm/git/hengband/commits/d6946d8f56f88b2a4b5e9b06ed7d4f234e84353e 対応済
  • プレイヤーのステータス算出更新処理を player-status.c/h から player-status-calc.c/h に置く → 済
  • プレイヤーの状態がどうなっているかの判定関数、マクロを player-status-flags.c/h から player-status.c/h に置く → 済
  • (2020/08/13)これまで従属変数となっている各値、フラグをcalc_bonuses()を通さなければ更新されなかったために処理の追うのが煩雑極まりなかったので、大半を必要な時にplayer-status-flags.c/hから即時算出する形に変更する。これはcreature_ptr->updateのPU_*による更新フラグと更新処理タイミングがやはり煩雑であるために、混乱をきたしがちな面を切り崩していく手付にする意図がある。→2020/01/11済ませるものはある程度済ませたが更新処理にバグを残しそうなテレパシー回りを含めて不完全。 #41131 の一環として後回しとする。
  • (2020/10/22)permanent-resistances.cによるダンプのための耐性判定とplayer-status系列ソースとを統合する。#41131 に分離して後回しとする。

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

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

#40852 で確認した追加事項

  • calc_total_weight()関数を作り、都度一括で所持重量計算を行う処理を各重量計算に充てる。 → calc_inventory_weight()で置換。

チケットの履歴 (25 件中 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を先にやらないとマージ地獄に陥るかもしれません)

2020-10-26 00:09 更新者: deskull
2020-10-26 21:50 更新者: None
コメント

IRCでお話した内容の備忘録です

α版リリースに当たってクリティカルなのは、最後に書いてある「追加効果への耐性が正しく判定されているかのチェック (と、何か見つかった時の修正)」だけです

その他はα版リリース後の継続実施で問題ないと考えています

この観点でチケットを分離することもご検討下さい

2020-11-05 06:56 更新者: deskull
コメント

For3.0.0-Artifact-Monster-Additionにあったもリファクタリング要素をFor2.2.2-Refactoringにチェリーピックしました。 ありがとうございます。 ただ、各ブランチは属人的に占有している訳ではないのでこの手のものは直接For2.2.2-Refactoringにコミットしてもらってもいいと思います。

2020-11-05 22:46 更新者: deskull
  • 詳細が更新されました
2020-11-05 22:46 更新者: deskull
  • 詳細が更新されました
2020-11-08 14:59 更新者: deskull
  • 詳細が更新されました
2020-11-10 08:25 更新者: deskull
コメント

(匿名) への返信

IRCでお話した内容の備忘録です α版リリースに当たってクリティカルなのは、最後に書いてある「追加効果への耐性が正しく判定されているかのチェック (と、何か見つかった時の修正)」だけです その他はα版リリース後の継続実施で問題ないと考えています この観点でチケットを分離することもご検討下さい

この辺は改めて少し考えます。

2020-12-13 21:32 更新者: deskull
コメント

要素が多すぎて工数計算に引っかかるのでなおさら分離したくなってきた。

2020-12-13 21:35 更新者: hourier
コメント

少し前に延期の判断が出た「速度計算の分離」ですが、もうやることがほぼないのでこちらで実施可能です

チケット作成&割当頂ければ作業します

2020-12-14 08:22 更新者: deskull
コメント

ありがとうございます。もうちょっと考えます。

2021-01-10 09:53 更新者: deskull
  • 詳細が更新されました
2021-01-10 10:47 更新者: deskull
  • 詳細が更新されました
2021-01-10 20:51 更新者: deskull
  • 詳細が更新されました
2021-01-10 23:40 更新者: deskull
  • 詳細が更新されました
2021-01-11 00:35 更新者: deskull
  • 詳細が更新されました
2021-01-11 15:05 更新者: deskull
  • 状況オープン から 完了 に更新されました
  • 解決法なし から 修正済み に更新されました
  • 詳細が更新されました
コメント

3.0.0Alpha対応分までは完了とする。

添付ファイルリスト

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

編集

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