Tíquete #40514

calc_bonuses()の整理

: 2020-06-28 00:39 Última Atualização: 2020-11-10 08:25

Relator:
Dono:
Estado:
Aberto [Owner assigned]
Componente:
(Nenhum)
Prioridade:
5 - Medium
Gravidade:
5 - Medium
Resolução:
Nenhum
Arquivo:
Nenhum

Details

#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() に変更し、別途「追加効果への耐性」 (例:破片属性の切り傷@ゴーレム、重力属性の減速、水属性の混乱@マーフォーク) の判定を行う関数を作成する(これらは元より本チケットの途中として想定中)

#40852 で確認した追加事項

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

Ticket History (3/16 Histories)

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

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

2020-08-18 01:43 Updated by: deskull
  • Details Updated
2020-08-22 03:43 Updated by: deskull
Comentário

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

2020-08-23 02:09 Updated by: deskull
Comentário

フラグ判定計算については #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
Comentário

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

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

ご確認下さい

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

2020-10-26 21:50 Updated by: None
Comentário

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

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

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

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

2020-11-05 06:56 Updated by: deskull
Comentário

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
Comentário

(匿名) への返信

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

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

Attachment File List

No attachments

Editar

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login