1 #include "artifact/random-art-activation.h"
2 #include "artifact/random-art-effects.h"
3 #include "artifact/random-art-bias-types.h"
4 #include "object-enchant/object-boost.h"
5 #include "object-enchant/tr-types.h"
6 #include "system/object-type-definition.h"
7 #include "util/bit-flags-calculator.h"
9 static int invest_activation_elec(void)
20 static int invest_activation_fire(void)
31 static int invest_activation_cold(void)
45 static int invest_activation_chaos(void) { return one_in_(6) ? ACT_SUMMON_DEMON : ACT_CALL_CHAOS; }
47 static int invest_activation_priest(void)
50 return ACT_CHARM_UNDEAD;
53 return ACT_BANISH_EVIL;
76 static int invest_activation_necromancy(void)
91 return ACT_SUMMON_UNDEAD;
97 return ACT_CHARM_UNDEAD;
102 static int invest_activation_law(void)
105 return ACT_BANISH_EVIL;
108 return ACT_DISP_EVIL;
110 return ACT_PROT_EVIL;
113 static int invest_activation_rogue(void)
122 return ACT_DETECT_ALL;
130 static int invest_activation_mage(void)
133 return ACT_SUMMON_ELEMENTAL;
136 return ACT_SUMMON_PHANTOM;
139 return ACT_RUNE_EXPLO;
144 static int invest_activation_warrior(void) { return one_in_(100) ? ACT_INVULN : ACT_BERSERK; }
146 static int invest_activation_ranger(void)
149 return ACT_CHARM_ANIMALS;
152 return ACT_SUMMON_ANIMAL;
155 return ACT_CHARM_ANIMAL;
158 return ACT_RESIST_ALL;
163 return ACT_CURE_POISON;
167 * @brief ランダムアーティファクト生成中、対象のオブジェクトにバイアスに依存した発動を与える。/ Add one activaton of randam artifact depend on bias.
168 * @details バイアスが無い場合、一部のバイアスの確率によっては one_ability() に処理が移行する。
169 * @param o_ptr 対象のオブジェクト構造体ポインタ
172 void give_activation_power(object_type *o_ptr)
176 switch (o_ptr->artifact_bias) {
178 type = invest_activation_elec();
182 type = ACT_BA_POIS_1;
186 type = invest_activation_fire();
190 type = invest_activation_cold();
194 type = invest_activation_chaos();
198 type = invest_activation_priest();
201 case BIAS_NECROMANTIC:
202 type = invest_activation_necromancy();
206 type = invest_activation_law();
210 type = invest_activation_rogue();
214 type = invest_activation_mage();
218 type = invest_activation_warrior();
222 type = invest_activation_ranger();
227 if (!type || (randint1(100) >= chance)) {
228 one_activation(o_ptr);
232 o_ptr->xtra2 = (byte)type;
233 add_flag(o_ptr->art_flags, TR_ACTIVATE);