OSDN Git Service

[Refactor] #1301 Reshaped apply_magic_to_object()
[hengbandforosx/hengbandosx.git] / src / object-enchant / apply-magic-cloak.cpp
1 /*
2  * @brief クロークに耐性等の追加効果を付与する処理
3  * @date 2021/08/01
4  * @author Hourier
5  */
6
7 #include "object-enchant/apply-magic-cloak.h"
8 #include "artifact/random-art-generator.h"
9 #include "inventory/inventory-slot-types.h"
10 #include "object-enchant/object-ego.h"
11 #include "sv-definition/sv-protector-types.h"
12 #include "system/object-type-definition.h"
13
14 /*
15  * @brief コンストラクタ
16  * @param owner_ptr プレーヤーへの参照ポインタ
17  * @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
18  * @param level 生成基準階
19  * @param power 生成ランク
20  */
21 CloakEnchanter::CloakEnchanter(player_type *owner_ptr, object_type *o_ptr, DEPTH level, int power)
22     : AbstractProtectorEnchanter{ o_ptr, level, power }
23     , owner_ptr(owner_ptr)
24 {
25 }
26
27 /*
28  * @details power > 2はデバッグ専用.
29  */
30 void CloakEnchanter::apply_magic()
31 {
32     if (this->o_ptr->sval == SV_ELVEN_CLOAK) {
33         this->o_ptr->pval = randint1(4);
34     }
35
36     if (this->power > 1) {
37         if (one_in_(20) || (this->power > 2)) {
38             become_random_artifact(this->owner_ptr, this->o_ptr, false);
39             return;
40         }
41
42         this->o_ptr->name2 = get_random_ego(INVEN_OUTER, true);
43         return;
44     }
45
46     if (this->power < -1) {
47         this->o_ptr->name2 = get_random_ego(INVEN_OUTER, false);
48     }
49 }