OSDN Git Service

Merge pull request #3532 from sikabane-works/release/3.0.0.87-alpha
[hengbandforosx/hengbandosx.git] / src / object-enchant / weapon / melee-weapon-enchanter.cpp
1 /*!
2  * @brief 剣・鈍器・長柄/斧武器に耐性等の追加効果を付与する処理
3  * @date 2022/03/22
4  * @author Hourier
5  */
6
7 #include "object-enchant/weapon/melee-weapon-enchanter.h"
8 #include "artifact/random-art-generator.h"
9 #include "system/item-entity.h"
10
11 MeleeWeaponEnchanter::MeleeWeaponEnchanter(PlayerType *player_ptr, ItemEntity *o_ptr, DEPTH level, int power)
12     : AbstractWeaponEnchanter(o_ptr, level, power)
13     , player_ptr(player_ptr)
14 {
15 }
16
17 /*!
18  * @brief 打撃系オブジェクトに生成ランクごとの強化を与えるサブルーチン
19  * @details power > 2はデバッグ専用.
20  */
21 void MeleeWeaponEnchanter::apply_magic()
22 {
23     if (this->should_skip) {
24         return;
25     }
26
27     if (this->power > 1) {
28         this->strengthen();
29         return;
30     }
31
32     if (this->power < -1) {
33         this->give_cursed();
34     }
35 }
36
37 /*!
38  * @brief アーティファクト生成・ダイス強化処理
39  * @details power > 2はデバッグ専用.
40  */
41 void MeleeWeaponEnchanter::strengthen()
42 {
43     if ((this->power > 2) || one_in_(40)) {
44         become_random_artifact(this->player_ptr, this->o_ptr, false);
45         return;
46     }
47
48     this->give_ego_index();
49     if (this->o_ptr->is_random_artifact()) {
50         return;
51     }
52
53     while (one_in_(10 * this->o_ptr->dd * this->o_ptr->ds)) {
54         this->o_ptr->dd++;
55     }
56
57     if (this->o_ptr->dd > 9) {
58         this->o_ptr->dd = 9;
59     }
60 }