OSDN Git Service

Merge pull request #2122 from sikabane-works/release/3.0.0Alpha52
[hengbandforosx/hengbandosx.git] / src / object-enchant / protector / apply-magic-boots.cpp
1 /*
2  * @brief 靴に耐性等の追加効果を付与する処理
3  * @date 2021/08/01
4  * @author Hourier
5  * @details ドラゴンブーツは必ず付与する. それ以外は確率的に付与する.
6  */
7
8 #include "object-enchant/protector/apply-magic-boots.h"
9 #include "artifact/random-art-generator.h"
10 #include "inventory/inventory-slot-types.h"
11 #include "object-enchant/object-boost.h"
12 #include "object-enchant/object-ego.h"
13 #include "sv-definition/sv-protector-types.h"
14 #include "system/object-type-definition.h"
15
16 /*
17  * @brief コンストラクタ
18  * @param player_ptr プレイヤーへの参照ポインタ
19  * @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
20  * @param level 生成基準階
21  * @param power 生成ランク
22  */
23 BootsEnchanter::BootsEnchanter(PlayerType *player_ptr, object_type *o_ptr, DEPTH level, int power)
24     : AbstractProtectorEnchanter{ o_ptr, level, power }
25     , player_ptr(player_ptr)
26 {
27 }
28
29 /*
30  * power > 2はデバッグ専用.
31  */
32 void BootsEnchanter::apply_magic()
33 {
34     if (this->o_ptr->sval == SV_PAIR_OF_DRAGON_GREAVE) {
35         dragon_resist(this->o_ptr);
36         if (!one_in_(3)) {
37             return;
38         }
39     }
40
41     if (this->power > 1) {
42         if (one_in_(20) || (this->power > 2)) {
43             become_random_artifact(this->player_ptr, this->o_ptr, false);
44             return;
45         }
46
47         this->o_ptr->name2 = get_random_ego(INVEN_FEET, true);
48         return;
49     }
50
51     if (this->power < -1) {
52         this->o_ptr->name2 = get_random_ego(INVEN_FEET, false);
53     }
54 }