1 #include "spell-kind/spells-enchant.h"
2 #include "artifact/random-art-generator.h"
3 #include "avatar/avatar.h"
4 #include "flavor/flavor-describer.h"
5 #include "flavor/object-flavor-types.h"
6 #include "floor/floor-object.h"
7 #include "game-option/disturbance-options.h"
8 #include "game-option/play-record-options.h"
9 #include "inventory/inventory-object.h"
10 #include "io/write-diary.h"
11 #include "object-hook/hook-perception.h"
12 #include "object-hook/hook-weapon.h"
13 #include "object/item-tester-hooker.h"
14 #include "object/item-use-flags.h"
15 #include "racial/racial-android.h"
16 #include "system/object-type-definition.h"
17 #include "system/player-type-definition.h"
18 #include "term/screen-processor.h"
19 #include "view/display-messages.h"
24 * @brief アーティファクト生成の巻物処理 /
25 * @param player_ptr プレイヤーへの参照ポインタ
26 * @return 生成が実際に試みられたらTRUEを返す
28 bool artifact_scroll(PlayerType *player_ptr)
30 concptr q = _("どのアイテムを強化しますか? ", "Enchant which item? ");
31 concptr s = _("強化できるアイテムがない。", "You have nothing to enchant.");
34 o_ptr = choose_object(player_ptr, &item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), FuncItemTester(object_is_nameless_weapon_armour));
38 GAME_TEXT o_name[MAX_NLEN];
39 describe_flavor(player_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
41 msg_format("%s は眩い光を発した!", o_name);
43 msg_format("%s %s radiate%s a blinding light!", ((item >= 0) ? "Your" : "The"), o_name, ((o_ptr->number > 1) ? "" : "s"));
47 if (o_ptr->is_artifact()) {
49 msg_format("%sは既に伝説のアイテムです!", o_name);
51 msg_format("The %s %s already %s!", o_name, ((o_ptr->number > 1) ? "are" : "is"), ((o_ptr->number > 1) ? "artifacts" : "an artifact"));
54 } else if (o_ptr->is_ego()) {
56 msg_format("%sは既に名のあるアイテムです!", o_name);
58 msg_format("The %s %s already %s!", o_name, ((o_ptr->number > 1) ? "are" : "is"), ((o_ptr->number > 1) ? "ego items" : "an ego item"));
61 } else if (o_ptr->xtra3) {
63 msg_format("%sは既に強化されています!", o_name);
65 msg_format("The %s %s already %s!", o_name, ((o_ptr->number > 1) ? "are" : "is"), ((o_ptr->number > 1) ? "customized items" : "a customized item"));
68 if (o_ptr->number > 1) {
69 msg_print(_("複数のアイテムに魔法をかけるだけのエネルギーはありません!", "Not enough energy to enchant more than one object!"));
71 msg_format("%d 個の%sが壊れた!", (o_ptr->number) - 1, o_name);
73 msg_format("%d of your %s %s destroyed!", (o_ptr->number) - 1, o_name, (o_ptr->number > 2 ? "were" : "was"));
77 inven_item_increase(player_ptr, item, 1 - (o_ptr->number));
79 floor_item_increase(player_ptr, 0 - item, 1 - (o_ptr->number));
83 okay = become_random_artifact(player_ptr, o_ptr, true);
90 msg_print(_("強化に失敗した。", "The enchantment failed."));
92 chg_virtue(player_ptr, V_ENCHANT, -1);
94 calc_android_exp(player_ptr);
98 if (record_rand_art) {
99 describe_flavor(player_ptr, o_name, o_ptr, OD_NAME_ONLY);
100 exe_write_diary(player_ptr, DIARY_ART_SCROLL, 0, o_name);
103 chg_virtue(player_ptr, V_ENCHANT, 1);
104 calc_android_exp(player_ptr);
109 * @brief アイテム凡庸化のメインルーチン処理 /
110 * Identify an object in the inventory (or on the floor)
111 * @param player_ptr プレイヤーへの参照ポインタ
112 * @param only_equip 装備品のみを対象とするならばTRUEを返す
113 * @return 実際に凡庸化をを行ったならばTRUEを返す
116 * Mundanify an object in the inventory (or on the floor)
117 * This routine does *not* automatically combine objects.
118 * Returns TRUE if something was mundanified, else FALSE.
121 bool mundane_spell(PlayerType *player_ptr, bool only_equip)
123 std::unique_ptr<ItemTester> item_tester = std::make_unique<AllMatchItemTester>();
125 item_tester = std::make_unique<FuncItemTester>(&object_type::is_weapon_armour_ammo);
129 concptr q = _("どのアイテムを凡庸化しますか?", "Mundanify which item? ");
130 concptr s = _("凡庸化できるアイテムがない。", "You have nothing to mundanify.");
132 o_ptr = choose_object(player_ptr, &item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), *item_tester);
136 msg_print(_("まばゆい閃光が走った!", "There is a bright flash of light!"));
137 POSITION iy = o_ptr->iy;
138 POSITION ix = o_ptr->ix;
139 byte marked = o_ptr->marked;
140 uint16_t inscription = o_ptr->inscription;
142 o_ptr->prep(o_ptr->k_idx);
146 o_ptr->marked = marked;
147 o_ptr->inscription = inscription;
149 calc_android_exp(player_ptr);