OSDN Git Service

Merge remote-tracking branch 'remotes/origin/feature/Refactor-Monsters-3.0.0Alpha4...
[hengband/hengband.git] / src / object / object-generator.c
1 #include "object/object-generator.h"
2 #include "object-enchant/object-curse.h"
3 #include "object-enchant/special-object-flags.h"
4 #include "object-enchant/trc-types.h"
5 #include "object-enchant/trg-types.h"
6 #include "object/object-kind.h"
7
8 /*!
9  * @brief オブジェクトを初期化する
10  * Wipe an object clean.
11  * @param o_ptr 初期化したいオブジェクトの構造体参照ポインタ
12  * @return なし
13  */
14 void object_wipe(object_type *o_ptr) { (void)WIPE(o_ptr, object_type); }
15
16 /*!
17  * @brief オブジェクトを複製する
18  * Wipe an object clean.
19  * @param o_ptr 複製元のオブジェクトの構造体参照ポインタ
20  * @param j_ptr 複製先のオブジェクトの構造体参照ポインタ
21  * @return なし
22  */
23 void object_copy(object_type *o_ptr, object_type *j_ptr) { (void)COPY(o_ptr, j_ptr, object_type); }
24
25 /*!
26  * @brief オブジェクト構造体にベースアイテムを作成する
27  * Prepare an object based on an object kind.
28  * @param o_ptr 代入したいオブジェクトの構造体参照ポインタ
29  * @param k_idx 新たに作成したいベースアイテム情報のID
30  * @return なし
31  */
32 void object_prep(player_type *player_ptr, object_type *o_ptr, KIND_OBJECT_IDX k_idx)
33 {
34     object_kind *k_ptr = &k_info[k_idx];
35     object_wipe(o_ptr);
36     o_ptr->k_idx = k_idx;
37     o_ptr->tval = k_ptr->tval;
38     o_ptr->sval = k_ptr->sval;
39     o_ptr->pval = k_ptr->pval;
40     o_ptr->number = 1;
41     o_ptr->weight = k_ptr->weight;
42     o_ptr->to_h = k_ptr->to_h;
43     o_ptr->to_d = k_ptr->to_d;
44     o_ptr->to_a = k_ptr->to_a;
45     o_ptr->ac = k_ptr->ac;
46     o_ptr->dd = k_ptr->dd;
47     o_ptr->ds = k_ptr->ds;
48
49     if (k_ptr->act_idx > 0)
50         o_ptr->xtra2 = (XTRA8)k_ptr->act_idx;
51     if (k_info[o_ptr->k_idx].cost <= 0)
52         o_ptr->ident |= (IDENT_BROKEN);
53
54     if (k_ptr->gen_flags & (TRG_CURSED))
55         o_ptr->curse_flags |= (TRC_CURSED);
56     if (k_ptr->gen_flags & (TRG_HEAVY_CURSE))
57         o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
58     if (k_ptr->gen_flags & (TRG_PERMA_CURSE))
59         o_ptr->curse_flags |= (TRC_PERMA_CURSE);
60     if (k_ptr->gen_flags & (TRG_RANDOM_CURSE0))
61         o_ptr->curse_flags |= get_curse(player_ptr, 0, o_ptr);
62     if (k_ptr->gen_flags & (TRG_RANDOM_CURSE1))
63         o_ptr->curse_flags |= get_curse(player_ptr, 1, o_ptr);
64     if (k_ptr->gen_flags & (TRG_RANDOM_CURSE2))
65         o_ptr->curse_flags |= get_curse(player_ptr, 2, o_ptr);
66 }