Ticket #40514

calc_bonuses()の整理

Open Date: 2020-06-28 00:39 Last Update: 2021-01-11 15:05

Reporter:
Owner:
Status:
Closed
Component:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None

Details

#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()で置換。

Ticket History (3/25 Histories)

2020-06-28 00:39 Updated by: deskull
  • New Ticket "calc_bonuses()の整理" created
2020-06-28 00:47 Updated by: deskull
Comment

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

2020-08-18 01:43 Updated by: deskull
  • Details Updated
2020-08-22 03:43 Updated by: deskull
Comment

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

2020-08-23 02:09 Updated by: deskull
Comment

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

2020-10-18 15:04 Updated by: deskull
  • Details Updated
2020-10-21 00:27 Updated by: deskull
  • Details Updated
2020-10-22 00:30 Updated by: deskull
  • Details Updated
2020-10-23 23:31 Updated by: hourier
Comment

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

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

ご確認下さい

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

2020-10-26 21:50 Updated by: None
Comment

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

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

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

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

2020-11-05 06:56 Updated by: deskull
Comment

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

2020-11-05 22:46 Updated by: deskull
  • Details Updated
2020-11-05 22:46 Updated by: deskull
  • Details Updated
2020-11-08 14:59 Updated by: deskull
  • Details Updated
2020-11-10 08:25 Updated by: deskull
Comment

(匿名) への返信

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

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

2020-12-13 21:32 Updated by: deskull
Comment

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

2020-12-13 21:35 Updated by: hourier
Comment

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

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

2020-12-14 08:22 Updated by: deskull
Comment

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

2021-01-10 09:53 Updated by: deskull
  • Details Updated
2021-01-10 10:47 Updated by: deskull
  • Details Updated
2021-01-10 20:51 Updated by: deskull
  • Details Updated
2021-01-10 23:40 Updated by: deskull
  • Details Updated
2021-01-11 00:35 Updated by: deskull
  • Details Updated
2021-01-11 15:05 Updated by: deskull
  • Status Update from Open to Closed
  • Resolution Update from None to Fixed
  • Details Updated
Comment

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

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login