OSDN Git Service

Merge pull request #3532 from sikabane-works/release/3.0.0.87-alpha
[hengbandforosx/hengbandosx.git] / src / object-enchant / protector / abstract-protector-enchanter.cpp
1 /*
2  * @brief 防具類に耐性等を付与する処理の共通部分
3  * @date 2021/08/01
4  * @author Hourier
5  */
6
7 #include "object-enchant/protector/abstract-protector-enchanter.h"
8 #include "object-enchant/object-boost.h"
9 #include "system/item-entity.h"
10
11 /*
12  * @brief コンストラクタ
13  * @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
14  * @param level 生成基準階
15  * @param power 生成ランク
16  */
17 AbstractProtectorEnchanter::AbstractProtectorEnchanter(ItemEntity *o_ptr, DEPTH level, int power)
18     : o_ptr(o_ptr)
19     , power(power)
20 {
21     if (this->power == 0) {
22         return;
23     }
24
25     auto toac1 = (ARMOUR_CLASS)(randint1(5) + m_bonus(5, level));
26     auto toac2 = (ARMOUR_CLASS)m_bonus(10, level);
27     if (this->power > 0) {
28         this->o_ptr->to_a += toac1;
29         if (this->power > 1) {
30             this->o_ptr->to_a += toac2;
31         }
32
33         return;
34     }
35
36     if (this->power < 0) {
37         this->o_ptr->to_a -= toac1;
38         if (this->power < -1) {
39             this->o_ptr->to_a -= toac2;
40         }
41
42         if (this->o_ptr->to_a < 0) {
43             this->o_ptr->curse_flags.set(CurseTraitType::CURSED);
44         }
45     }
46 }