折れ剣修復時の折れたダガーのベースアイテム選択バグ
repair_broken_weapon_aux 中の if (o_ptr->sval == SV_BROKEN_DAGGER) 内で、該当するベースアイテムを等確率で選択しようと思われるアルゴリズムにミスがあった。
IDX j; int n = 1; /* Suppress compiler warning */ k_idx = 0; for (j = 1; j < max_k_idx; j++) { object_kind *k_aux_ptr = &k_info[j]; if (k_aux_ptr->tval != TV_SWORD) continue; if ((k_aux_ptr->sval == SV_BROKEN_DAGGER) || (k_aux_ptr->sval == SV_BROKEN_SWORD) || (k_aux_ptr->sval == SV_DOKUBARI)) continue; if (k_aux_ptr->weight > 99) continue; if (one_in_(n)) { k_idx = j; n++; } }
n++;はif(one_in_(n))の外に置かないとk_idxの最終値の確率はjが大きいほど高くなる。この結果、ダガーでの修復はIDの一番大きい隼の剣が本来の10%から22.5%になっていたというhradish氏の報告あり。これを直すのは大きな下方修正になるので、件の修復仕様の調整も踏まえながら慎重に行う。
3.0.0正式版の間に仕様を決定して解決予定。
GitHubへ移行し、こちらはクローズ
repair_broken_weapon_aux 中の if (o_ptr->sval == SV_BROKEN_DAGGER) 内で、該当するベースアイテムを等確率で選択しようと思われるアルゴリズムにミスがあった。
n++;はif(one_in_(n))の外に置かないとk_idxの最終値の確率はjが大きいほど高くなる。この結果、ダガーでの修復はIDの一番大きい隼の剣が本来の10%から22.5%になっていたというhradish氏の報告あり。これを直すのは大きな下方修正になるので、件の修復仕様の調整も踏まえながら慎重に行う。