OSDN Git Service

Merge pull request #2447 from habu1010/feature/rand-shuffle
[hengbandforosx/hengbandosx.git] / src / object-enchant / weapon / apply-magic-polearm.cpp
1 /*!
2  * @brief 長柄/斧に耐性等の追加効果を付与する処理
3  * @date 2022/03/22
4  * @author Hourier
5  */
6
7 #include "object-enchant/weapon/apply-magic-polearm.h"
8 #include "floor/floor-base-definitions.h"
9 #include "inventory/inventory-slot-types.h"
10 #include "sv-definition/sv-weapon-types.h"
11 #include "system/object-type-definition.h"
12
13 /*!
14  * @brief 長柄/斧強化クラスのコンストラクタ
15  * @param player_ptr プレイヤーへの参照ポインタ
16  * @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
17  * @param level 生成基準階
18  * @param power 生成ランク
19  */
20 PolearmEnchanter::PolearmEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH level, int power)
21     : MeleeWeaponEnchanter(player_ptr, o_ptr, level, power)
22 {
23 }
24
25 void PolearmEnchanter::decide_skip()
26 {
27     AbstractWeaponEnchanter::decide_skip();
28     this->should_skip |= this->o_ptr->sval == SV_DEATH_SCYTHE;
29 }
30
31 void PolearmEnchanter::give_ego_index()
32 {
33     while (true) {
34         this->o_ptr->ego_idx = get_random_ego(INVEN_MAIN_HAND, true);
35         if ((this->o_ptr->ego_idx == EgoType::SHARPNESS) || (this->o_ptr->ego_idx == EgoType::EARTHQUAKES)) {
36             continue;
37         }
38
39         break;
40     }
41 }
42
43 void PolearmEnchanter::give_cursed()
44 {
45     if (randint0(MAX_DEPTH) >= this->level) {
46         return;
47     }
48
49     while (true) {
50         this->o_ptr->ego_idx = get_random_ego(INVEN_MAIN_HAND, false);
51         if (this->o_ptr->ego_idx == EgoType::WEIRD) {
52             continue;
53         }
54
55         return;
56     }
57 }