2 * @brief アイテムのフレーバー初期化 (未鑑定名のシャッフル処理)
7 #include "item-info/flavor-initializer.h"
8 #include "object/tval-types.h"
9 #include "system/baseitem-info.h"
10 #include "world/world.h"
13 * @brief ベースアイテムの未確定名を共通tval間でシャッフルする / Shuffle flavor indices of a group of objects with given tval
14 * @param tval シャッフルしたいtval
15 * @details 巻物、各種魔道具などに利用される。
17 static void shuffle_flavors(ItemKindType tval)
19 std::vector<std::reference_wrapper<IDX>> flavor_idx_ref_list;
20 for (const auto &baseitem : baseitems_info) {
21 if (baseitem.bi_key.tval() != tval) {
25 if (baseitem.flavor == 0) {
29 if (baseitem.flags.has(TR_FIXED_FLAVOR)) {
33 flavor_idx_ref_list.push_back(baseitems_info[baseitem.idx].flavor);
36 rand_shuffle(flavor_idx_ref_list.begin(), flavor_idx_ref_list.end());
40 * @brief ゲーム開始時に行われるベースアイテムの初期化ルーチン
42 void initialize_items_flavor()
44 const auto rng_backup = w_ptr->rng;
45 w_ptr->rng.set_state(w_ptr->seed_flavor);
46 for (auto &baseitem : baseitems_info) {
47 if (baseitem.flavor_name.empty()) {
51 baseitem.flavor = baseitem.idx;
54 shuffle_flavors(ItemKindType::RING);
55 shuffle_flavors(ItemKindType::AMULET);
56 shuffle_flavors(ItemKindType::STAFF);
57 shuffle_flavors(ItemKindType::WAND);
58 shuffle_flavors(ItemKindType::ROD);
59 shuffle_flavors(ItemKindType::FOOD);
60 shuffle_flavors(ItemKindType::POTION);
61 shuffle_flavors(ItemKindType::SCROLL);
62 w_ptr->rng = rng_backup;
63 for (auto &baseitem : baseitems_info) {
64 if (baseitem.idx == 0 || baseitem.name.empty()) {
68 if (!baseitem.flavor) {
69 baseitem.aware = true;
72 baseitem.decide_easy_know();