calc_bonuses()の整理
ある程度まとまった処理をcalc_bonuses()から追い出したが、少し方針として疑問が湧いてきた。分割の方針は種族、装備品などの要素別ではなく、腕力、最大HPなどのステータス別に分けるべきではあるまいか。こっちの方がさらに修羅であるが、player_typeというクラスの機能的には正しいはず。
命中値、ダメージ値計算を各関数に独立させつつ、実質値とアイテム未鑑定による表層値処理は引数のみの分岐として統合した。従来のcalc_bonuses()から計算が変化していないかはこれから確認する。
フラグ判定計算については #40652 と並列して行う。
resistance-info.c と player-damage.c にis_*()が残っていました
こちらでコンパイルが通るように修正しています
ご確認下さい
(取り込みの際はFor3.0.0-Monster-Adjustmentを先にやらないとマージ地獄に陥るかもしれません)
IRCでお話した内容の備忘録です
α版リリースに当たってクリティカルなのは、最後に書いてある「追加効果への耐性が正しく判定されているかのチェック (と、何か見つかった時の修正)」だけです
その他はα版リリース後の継続実施で問題ないと考えています
この観点でチケットを分離することもご検討下さい
For3.0.0-Artifact-Monster-Additionにあったもリファクタリング要素をFor2.2.2-Refactoringにチェリーピックしました。 ありがとうございます。 ただ、各ブランチは属人的に占有している訳ではないのでこの手のものは直接For2.2.2-Refactoringにコミットしてもらってもいいと思います。
(匿名) への返信
IRCでお話した内容の備忘録です α版リリースに当たってクリティカルなのは、最後に書いてある「追加効果への耐性が正しく判定されているかのチェック (と、何か見つかった時の修正)」だけです その他はα版リリース後の継続実施で問題ないと考えています この観点でチケットを分離することもご検討下さい
この辺は改めて少し考えます。
要素が多すぎて工数計算に引っかかるのでなおさら分離したくなってきた。
少し前に延期の判断が出た「速度計算の分離」ですが、もうやることがほぼないのでこちらで実施可能です
チケット作成&割当頂ければ作業します
ありがとうございます。もうちょっと考えます。
3.0.0Alpha対応分までは完了とする。
#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 に置く→ 済これまで従属変数となっている各値、フラグをcalc_bonuses()を通さなければ更新されなかったために処理の追うのが煩雑極まりなかったので、大半を必要な時にplayer-status-flags.c/hから即時算出する形に変更する。これはcreature_ptr->updateのPU_*による更新フラグと更新処理タイミングがやはり煩雑であるために、混乱をきたしがちな面を切り崩していく手付にする意図がある。→2020/01/11済ませるものはある程度済ませたが更新処理にバグを残しそうなテレパシー回りを含めて不完全。 #41131 の一環として後回しとする。permanent-resistances.cによるダンプのための耐性判定とplayer-status系列ソースとを統合する。→ #41131 に分離して後回しとする。#40853 でまとめられた修正事項
型キャストミスによる耐性有無の判定ミス特に閃光/暗黒属性の追加効果の盲目はまだ直せていない。effect_player_lite() とeffect_player_dark() の中でresist_blindしかチェックしていないのが原因?→ 別途閃光/暗黒耐性で盲目化しないように修正。is_resist()_* は has_resist_*() に統一(再編成過渡期で統一できていなかった)→ player-status-flags.c/h内の全て統一。#40852 で確認した追加事項
calc_total_weight()関数を作り、都度一括で所持重量計算を行う処理を各重量計算に充てる。→ calc_inventory_weight()で置換。