2 * @brief プレイヤーの鍛冶コマンド実装
7 #include "cmd-item/cmd-smith.h"
8 #include "autopick/autopick.h"
9 #include "cmd/cmd-basic.h"
10 #include "game-option/text-display-options.h"
11 #include "inventory/player-inventory.h"
12 #include "io/input-key-acceptor.h"
13 #include "main/sound-of-music.h"
14 #include "object-enchant/object-ego.h"
15 #include "object-enchant/special-object-flags.h"
16 #include "object-enchant/tr-types.h"
17 #include "object-enchant/trc-types.h"
18 #include "object/item-use-flags.h"
19 #include "object/object-flags.h" // todo 相互参照している.
20 #include "object/object-flavor.h"
21 #include "object/object-generator.h"
22 #include "object/object-hook.h"
23 #include "perception/object-perception.h"
24 #include "player/player-status.h"
25 #include "term/term-color-types.h"
26 #include "view/display-main-window.h"
29 * エッセンス情報の構造体 / A structure for smithing
32 int add; /* TR flag number or special essence id */
33 concptr add_name; /* Name of this ability */
34 ESSENCE_IDX type; /* Menu number */
35 int essence; /* Index for carrying essences */
36 int value; /* Needed value to add this ability */
41 * エッセンス情報テーブル Smithing type data for Weapon smith
44 static essence_type essence_info[] =
46 {TR_STR, "腕力", 4, TR_STR, 20},
47 {TR_INT, "知能", 4, TR_INT, 20},
48 {TR_WIS, "賢さ", 4, TR_WIS, 20},
49 {TR_DEX, "器用さ", 4, TR_DEX, 20},
50 {TR_CON, "耐久力", 4, TR_CON, 20},
51 {TR_CHR, "魅力", 4, TR_CHR, 20},
52 {TR_MAGIC_MASTERY, "魔力支配", 4, TR_MAGIC_MASTERY, 20},
53 {TR_STEALTH, "隠密", 4, TR_STEALTH, 40},
54 {TR_SEARCH, "探索", 4, TR_SEARCH, 15},
55 {TR_INFRA, "赤外線視力", 4, TR_INFRA, 15},
56 {TR_TUNNEL, "採掘", 4, TR_TUNNEL, 15},
57 {TR_SPEED, "スピード", 4, TR_SPEED, 12},
58 {TR_BLOWS, "追加攻撃", 1, TR_BLOWS, 20},
59 {TR_CHAOTIC, "カオス攻撃", 1, TR_CHAOTIC, 15},
60 {TR_VAMPIRIC, "吸血攻撃", 1, TR_VAMPIRIC, 60},
61 {TR_IMPACT, "地震発動", 7, TR_IMPACT, 15},
62 {TR_BRAND_POIS, "毒殺", 1, TR_BRAND_POIS, 20},
63 {TR_BRAND_ACID, "溶解", 1, TR_BRAND_ACID, 20},
64 {TR_BRAND_ELEC, "電撃", 1, TR_BRAND_ELEC, 20},
65 {TR_BRAND_FIRE, "焼棄", 1, TR_BRAND_FIRE, 20},
66 {TR_BRAND_COLD, "凍結", 1, TR_BRAND_COLD, 20},
67 {TR_SUST_STR, "腕力維持", 3, TR_SUST_STR, 15},
68 {TR_SUST_INT, "知能維持", 3, TR_SUST_STR, 15},
69 {TR_SUST_WIS, "賢さ維持", 3, TR_SUST_STR, 15},
70 {TR_SUST_DEX, "器用さ維持", 3, TR_SUST_STR, 15},
71 {TR_SUST_CON, "耐久力維持", 3, TR_SUST_STR, 15},
72 {TR_SUST_CHR, "魅力維持", 3, TR_SUST_STR, 15},
73 {TR_IM_ACID, "酸免疫", 2, TR_IM_ACID, 20},
74 {TR_IM_ELEC, "電撃免疫", 2, TR_IM_ACID, 20},
75 {TR_IM_FIRE, "火炎免疫", 2, TR_IM_ACID, 20},
76 {TR_IM_COLD, "冷気免疫", 2, TR_IM_ACID, 20},
77 {TR_REFLECT, "反射", 2, TR_REFLECT, 20},
78 {TR_FREE_ACT, "麻痺知らず", 3, TR_FREE_ACT, 20},
79 {TR_HOLD_EXP, "経験値維持", 3, TR_HOLD_EXP, 20},
80 {TR_RES_ACID, "耐酸", 2, TR_RES_ACID, 15},
81 {TR_RES_ELEC, "耐電撃", 2, TR_RES_ELEC, 15},
82 {TR_RES_FIRE, "耐火炎", 2, TR_RES_FIRE, 15},
83 {TR_RES_COLD, "耐冷気", 2, TR_RES_COLD, 15},
84 {TR_RES_POIS, "耐毒", 2, TR_RES_POIS, 25},
85 {TR_RES_FEAR, "耐恐怖", 2, TR_RES_FEAR, 20},
86 {TR_RES_LITE, "耐閃光", 2, TR_RES_LITE, 20},
87 {TR_RES_DARK, "耐暗黒", 2, TR_RES_DARK, 20},
88 {TR_RES_BLIND, "耐盲目", 2, TR_RES_BLIND, 20},
89 {TR_RES_CONF, "耐混乱", 2, TR_RES_CONF, 20},
90 {TR_RES_SOUND, "耐轟音", 2, TR_RES_SOUND, 20},
91 {TR_RES_SHARDS, "耐破片", 2, TR_RES_SHARDS, 20},
92 {TR_RES_NETHER, "耐地獄", 2, TR_RES_NETHER, 20},
93 {TR_RES_NEXUS, "耐因果混乱", 2, TR_RES_NEXUS, 20},
94 {TR_RES_CHAOS, "耐カオス", 2, TR_RES_CHAOS, 20},
95 {TR_RES_DISEN, "耐劣化", 2, TR_RES_DISEN, 20},
96 {TR_SH_FIRE, "", 0, -2, 0},
97 {TR_SH_ELEC, "", 0, -2, 0},
98 {TR_SH_COLD, "", 0, -2, 0},
99 {TR_NO_MAGIC, "反魔法", 3, TR_NO_MAGIC, 15},
100 {TR_WARNING, "警告", 3, TR_WARNING, 20},
101 {TR_LEVITATION, "浮遊", 3, TR_LEVITATION, 20},
102 {TR_LITE_1, "永久光源", 3, TR_LITE_1, 15},
103 {TR_LITE_2, "", 0, -2, 0},
104 {TR_LITE_3, "", 0, -2, 0},
105 {TR_SEE_INVIS, "可視透明", 3, TR_SEE_INVIS, 20},
106 {TR_TELEPATHY, "テレパシー", 6, TR_TELEPATHY, 15},
107 {TR_SLOW_DIGEST, "遅消化", 3, TR_SLOW_DIGEST, 15},
108 {TR_REGEN, "急速回復", 3, TR_REGEN, 20},
109 {TR_TELEPORT, "テレポート", 3, TR_TELEPORT, 25},
111 {TR_SLAY_EVIL, "邪悪倍打", 5, TR_SLAY_EVIL, 100},
112 {TR_KILL_EVIL, "邪悪倍倍打", 0, TR_SLAY_EVIL, 60},
113 {TR_SLAY_ANIMAL, "動物倍打", 5, TR_SLAY_ANIMAL, 20},
114 {TR_KILL_ANIMAL, "動物倍倍打", 5, TR_SLAY_ANIMAL, 60},
115 {TR_SLAY_UNDEAD, "不死倍打", 5, TR_SLAY_UNDEAD, 20},
116 {TR_KILL_UNDEAD, "不死倍倍打", 5, TR_SLAY_UNDEAD, 60},
117 {TR_SLAY_DEMON, "悪魔倍打", 5, TR_SLAY_DEMON, 20},
118 {TR_KILL_DEMON, "悪魔倍倍打", 5, TR_SLAY_DEMON, 60},
119 {TR_SLAY_ORC, "オーク倍打", 5, TR_SLAY_ORC, 15},
120 {TR_KILL_ORC, "オーク倍倍打", 5, TR_SLAY_ORC, 60},
121 {TR_SLAY_TROLL, "トロル倍打", 5, TR_SLAY_TROLL, 15},
122 {TR_KILL_TROLL, "トロル倍倍打", 5, TR_SLAY_TROLL, 60},
123 {TR_SLAY_GIANT, "巨人倍打", 5, TR_SLAY_GIANT, 20},
124 {TR_KILL_GIANT, "巨人倍倍打", 5, TR_SLAY_GIANT, 60},
125 {TR_SLAY_DRAGON, "竜倍打", 5, TR_SLAY_DRAGON, 20},
126 {TR_KILL_DRAGON, "竜倍倍打", 5, TR_SLAY_DRAGON, 60},
127 {TR_SLAY_HUMAN, "人間倍打", 5, TR_SLAY_HUMAN, 20},
128 {TR_KILL_HUMAN, "人間倍倍打", 5, TR_SLAY_HUMAN, 60},
130 {TR_ESP_ANIMAL, "動物ESP", 6, TR_SLAY_ANIMAL, 40},
131 {TR_ESP_UNDEAD, "不死ESP", 6, TR_SLAY_UNDEAD, 40},
132 {TR_ESP_DEMON, "悪魔ESP", 6, TR_SLAY_DEMON, 40},
133 {TR_ESP_ORC, "オークESP", 6, TR_SLAY_ORC, 40},
134 {TR_ESP_TROLL, "トロルESP", 6, TR_SLAY_TROLL, 40},
135 {TR_ESP_GIANT, "巨人ESP", 6, TR_SLAY_GIANT, 40},
136 {TR_ESP_DRAGON, "竜ESP", 6, TR_SLAY_DRAGON, 40},
137 {TR_ESP_HUMAN, "人間ESP", 6, TR_SLAY_HUMAN, 40},
139 {ESSENCE_ATTACK, "攻撃", 10, TR_ES_ATTACK, 30},
140 {ESSENCE_AC, "防御", 10, TR_ES_AC, 15},
141 {ESSENCE_TMP_RES_ACID, "酸耐性発動", 7, TR_RES_ACID, 50},
142 {ESSENCE_TMP_RES_ELEC, "電撃耐性発動", 7, TR_RES_ELEC, 50},
143 {ESSENCE_TMP_RES_FIRE, "火炎耐性発動", 7, TR_RES_FIRE, 50},
144 {ESSENCE_TMP_RES_COLD, "冷気耐性発動", 7, TR_RES_COLD, 50},
145 {ESSENCE_SH_FIRE, "火炎オーラ", 7, -1, 50},
146 {ESSENCE_SH_ELEC, "電撃オーラ", 7, -1, 50},
147 {ESSENCE_SH_COLD, "冷気オーラ", 7, -1, 50},
148 {ESSENCE_RESISTANCE, "全耐性", 2, -1, 150},
149 {ESSENCE_SUSTAIN, "装備保持", 10, -1, 10},
150 {ESSENCE_SLAY_GLOVE, "殺戮の小手", 1, TR_ES_ATTACK, 200},
155 static essence_type essence_info[] =
157 {TR_STR, "strength", 4, TR_STR, 20},
158 {TR_INT, "intelligence", 4, TR_INT, 20},
159 {TR_WIS, "wisdom", 4, TR_WIS, 20},
160 {TR_DEX, "dexterity", 4, TR_DEX, 20},
161 {TR_CON, "constitution", 4, TR_CON, 20},
162 {TR_CHR, "charisma", 4, TR_CHR, 20},
163 {TR_MAGIC_MASTERY, "magic mastery", 4, TR_MAGIC_MASTERY, 20},
164 {TR_STEALTH, "stealth", 4, TR_STEALTH, 40},
165 {TR_SEARCH, "serching", 4, TR_SEARCH, 15},
166 {TR_INFRA, "infravision", 4, TR_INFRA, 15},
167 {TR_TUNNEL, "digging", 4, TR_TUNNEL, 15},
168 {TR_SPEED, "speed", 4, TR_SPEED, 12},
169 {TR_BLOWS, "extra attack", 1, TR_BLOWS, 20},
170 {TR_CHAOTIC, "chaos brand", 1, TR_CHAOTIC, 15},
171 {TR_VAMPIRIC, "vampiric brand", 1, TR_VAMPIRIC, 60},
172 {TR_IMPACT, "quake activation", 7, TR_IMPACT, 15},
173 {TR_BRAND_POIS, "poison brand", 1, TR_BRAND_POIS, 20},
174 {TR_BRAND_ACID, "acid brand", 1, TR_BRAND_ACID, 20},
175 {TR_BRAND_ELEC, "electric brand", 1, TR_BRAND_ELEC, 20},
176 {TR_BRAND_FIRE, "fire brand", 1, TR_BRAND_FIRE, 20},
177 {TR_BRAND_COLD, "cold brand", 1, TR_BRAND_COLD, 20},
178 {TR_SUST_STR, "sustain strength", 3, TR_SUST_STR, 15},
179 {TR_SUST_INT, "sustain intelligence", 3, TR_SUST_STR, 15},
180 {TR_SUST_WIS, "sustain wisdom", 3, TR_SUST_STR, 15},
181 {TR_SUST_DEX, "sustain dexterity", 3, TR_SUST_STR, 15},
182 {TR_SUST_CON, "sustain constitution", 3, TR_SUST_STR, 15},
183 {TR_SUST_CHR, "sustain charisma", 3, TR_SUST_STR, 15},
184 {TR_IM_ACID, "acid immunity", 2, TR_IM_ACID, 20},
185 {TR_IM_ELEC, "electric immunity", 2, TR_IM_ACID, 20},
186 {TR_IM_FIRE, "fire immunity", 2, TR_IM_ACID, 20},
187 {TR_IM_COLD, "cold immunity", 2, TR_IM_ACID, 20},
188 {TR_REFLECT, "reflection", 2, TR_REFLECT, 20},
189 {TR_FREE_ACT, "free action", 3, TR_FREE_ACT, 20},
190 {TR_HOLD_EXP, "hold experience", 3, TR_HOLD_EXP, 20},
191 {TR_RES_ACID, "resistance to acid", 2, TR_RES_ACID, 15},
192 {TR_RES_ELEC, "resistance to electric", 2, TR_RES_ELEC, 15},
193 {TR_RES_FIRE, "resistance to fire", 2, TR_RES_FIRE, 15},
194 {TR_RES_COLD, "resistance to cold", 2, TR_RES_COLD, 15},
195 {TR_RES_POIS, "resistance to poison", 2, TR_RES_POIS, 25},
196 {TR_RES_FEAR, "resistance to fear", 2, TR_RES_FEAR, 20},
197 {TR_RES_LITE, "resistance to light", 2, TR_RES_LITE, 20},
198 {TR_RES_DARK, "resistance to dark", 2, TR_RES_DARK, 20},
199 {TR_RES_BLIND, "resistance to blind", 2, TR_RES_BLIND, 20},
200 {TR_RES_CONF, "resistance to confusion", 2, TR_RES_CONF, 20},
201 {TR_RES_SOUND, "resistance to sound", 2, TR_RES_SOUND, 20},
202 {TR_RES_SHARDS, "resistance to shard", 2, TR_RES_SHARDS, 20},
203 {TR_RES_NETHER, "resistance to nether", 2, TR_RES_NETHER, 20},
204 {TR_RES_NEXUS, "resistance to nexus", 2, TR_RES_NEXUS, 20},
205 {TR_RES_CHAOS, "resistance to chaos", 2, TR_RES_CHAOS, 20},
206 {TR_RES_DISEN, "resistance to disenchantment", 2, TR_RES_DISEN, 20},
207 {TR_SH_FIRE, "", 0, -2, 0},
208 {TR_SH_ELEC, "", 0, -2, 0},
209 {TR_SH_COLD, "", 0, -2, 0},
210 {TR_NO_MAGIC, "anti magic", 3, TR_NO_MAGIC, 15},
211 {TR_WARNING, "warning", 3, TR_WARNING, 20},
212 {TR_LEVITATION, "levitation", 3, TR_LEVITATION, 20},
213 {TR_LITE_1, "permanent light", 3, TR_LITE_1, 15},
214 {TR_LITE_2, "", 0, -2, 0},
215 {TR_LITE_3, "", 0, -2, 0},
216 {TR_SEE_INVIS, "see invisible", 3, TR_SEE_INVIS, 20},
217 {TR_TELEPATHY, "telepathy", 6, TR_TELEPATHY, 15},
218 {TR_SLOW_DIGEST, "slow digestion", 3, TR_SLOW_DIGEST, 15},
219 {TR_REGEN, "regeneration", 3, TR_REGEN, 20},
220 {TR_TELEPORT, "teleport", 3, TR_TELEPORT, 25},
222 {TR_SLAY_EVIL, "slay evil", 5, TR_SLAY_EVIL, 100},
223 {TR_SLAY_ANIMAL, "slay animal", 5, TR_SLAY_ANIMAL, 20},
224 {TR_KILL_ANIMAL, "kill animal", 5, TR_SLAY_ANIMAL, 60},
225 {TR_KILL_EVIL, "kill evil", 0, TR_SLAY_EVIL, 60},
226 {TR_SLAY_UNDEAD, "slay undead", 5, TR_SLAY_UNDEAD, 20},
227 {TR_KILL_UNDEAD, "kill undead", 5, TR_SLAY_UNDEAD, 60},
228 {TR_SLAY_DEMON, "slay demon", 5, TR_SLAY_DEMON, 20},
229 {TR_KILL_DEMON, "kill demon", 5, TR_SLAY_DEMON, 60},
230 {TR_SLAY_ORC, "slay orc", 5, TR_SLAY_ORC, 15},
231 {TR_KILL_ORC, "kill orc", 5, TR_SLAY_ORC, 60},
232 {TR_SLAY_TROLL, "slay troll", 5, TR_SLAY_TROLL, 15},
233 {TR_KILL_TROLL, "kill troll", 5, TR_SLAY_TROLL, 60},
234 {TR_SLAY_GIANT, "slay giant", 5, TR_SLAY_GIANT, 20},
235 {TR_KILL_GIANT, "kill giant", 5, TR_SLAY_GIANT, 60},
236 {TR_SLAY_DRAGON, "slay dragon", 5, TR_SLAY_DRAGON, 20},
237 {TR_KILL_DRAGON, "kill dragon", 5, TR_SLAY_DRAGON, 60},
238 {TR_SLAY_HUMAN, "slay human", 5, TR_SLAY_HUMAN, 20},
239 {TR_KILL_HUMAN, "kill human", 5, TR_SLAY_HUMAN, 60},
241 {TR_ESP_ANIMAL, "sense animal", 6, TR_SLAY_ANIMAL, 40},
242 {TR_ESP_UNDEAD, "sense undead", 6, TR_SLAY_UNDEAD, 40},
243 {TR_ESP_DEMON, "sense demon", 6, TR_SLAY_DEMON, 40},
244 {TR_ESP_ORC, "sense orc", 6, TR_SLAY_ORC, 40},
245 {TR_ESP_TROLL, "sense troll", 6, TR_SLAY_TROLL, 40},
246 {TR_ESP_GIANT, "sense giant", 6, TR_SLAY_GIANT, 40},
247 {TR_ESP_DRAGON, "sense dragon", 6, TR_SLAY_DRAGON, 40},
248 {TR_ESP_HUMAN, "sense human", 6, TR_SLAY_HUMAN, 40},
250 {ESSENCE_ATTACK, "weapon enchant", 10, TR_ES_ATTACK, 30},
251 {ESSENCE_AC, "armor enchant", 10, TR_ES_AC, 15},
252 {ESSENCE_TMP_RES_ACID, "resist acid activation", 7, TR_RES_ACID, 50},
253 {ESSENCE_TMP_RES_ELEC, "resist electricity activation", 7, TR_RES_ELEC, 50},
254 {ESSENCE_TMP_RES_FIRE, "resist fire activation", 7, TR_RES_FIRE, 50},
255 {ESSENCE_TMP_RES_COLD, "resist cold activation", 7, TR_RES_COLD, 50},
256 {ESSENCE_SH_FIRE, "fiery sheath", 7, -1, 50},
257 {ESSENCE_SH_ELEC, "electric sheath", 7, -1, 50},
258 {ESSENCE_SH_COLD, "sheath of coldness", 7, -1, 50},
259 {ESSENCE_RESISTANCE, "resistance", 2, -1, 150},
260 {ESSENCE_SUSTAIN, "elements proof", 10, -1, 10},
261 {ESSENCE_SLAY_GLOVE, "gauntlets of slaying", 1, TR_ES_ATTACK, 200},
269 * エッセンス名テーブル / Essense names for Weapon smith
272 concptr essence_name[] =
375 concptr essence_name[] =
477 static concptr const kaji_tips[5] =
480 "現在持っているエッセンスの一覧を表示する。",
481 "アイテムからエッセンスを取り出す。エッセンスを取られたアイテムは全く魔法がかかっていない初期状態に戻る。",
482 "既にエッセンスが付加されたアイテムからエッセンスのみ消し去る。エッセンスは手に入らない。",
483 "アイテムにエッセンスを付加する。既にエッセンスが付加されたアイテムやアーティファクトには付加できない。",
484 "武器や防具を強化したり、攻撃で傷つかないようにしたりする。エッセンスが付加されたアイテムやアーティファクトに対しても使用できる。",
486 "Display essences you have.",
487 "Extract essences from an item. The item become non magical.",
488 "Remove added essences from an equipment which was improved before. The removed essence will be ruined.",
489 "Add essences to an item. The improved items or artifacts cannot be reimprove.",
490 "Enchant an equipment or make an equiment element-proofed. The improved items and artifacts can be enchanted too.",
496 * @brief 所持しているエッセンス一覧を表示する
499 static void display_essence(player_type *creature_ptr)
504 for (i = 1; i < 22; i++)
508 prt(_("エッセンス 個数 エッセンス 個数 エッセンス 個数",
509 "Essence Num Essence Num Essence Num "), 1, 8);
510 for (i = 0; essence_name[i]; i++)
512 if (!essence_name[i][0]) continue;
513 prt(format("%-11s %5d", essence_name[i], creature_ptr->magic_num1[i]), 2 + num % 21, 8 + num / 21 * 22);
516 prt(_("現在所持しているエッセンス", "List of all essences you have."), 0, 0);
524 * @param creature_ptr プレーヤーへの参照ポインタ
527 static void drain_essence(player_type *creature_ptr)
529 int drain_value[sizeof(creature_ptr->magic_num1) / sizeof(s32b)];
533 bool observe = FALSE;
534 int old_ds, old_dd, old_to_h, old_to_d, old_ac, old_to_a, old_pval, old_name2;
535 TIME_EFFECT old_timeout;
536 BIT_FLAGS old_flgs[TR_FLAG_SIZE], new_flgs[TR_FLAG_SIZE];
542 OBJECT_IDX next_o_idx;
545 for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
548 item_tester_hook = object_is_weapon_armour_ammo;
550 q = _("どのアイテムから抽出しますか?", "Extract from which item? ");
551 s = _("抽出できるアイテムがありません。", "You have nothing you can extract from.");
553 o_ptr = choose_object(creature_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), 0);
556 if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))
558 GAME_TEXT o_name[MAX_NLEN];
559 object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
560 if (!get_check(format(_("本当に%sから抽出してよろしいですか?", "Really extract from %s? "), o_name))) return;
563 take_turn(creature_ptr, 100);
565 object_flags(o_ptr, old_flgs);
566 if (have_flag(old_flgs, TR_KILL_DRAGON)) add_flag(old_flgs, TR_SLAY_DRAGON);
567 if (have_flag(old_flgs, TR_KILL_ANIMAL)) add_flag(old_flgs, TR_SLAY_ANIMAL);
568 if (have_flag(old_flgs, TR_KILL_EVIL)) add_flag(old_flgs, TR_SLAY_EVIL);
569 if (have_flag(old_flgs, TR_KILL_UNDEAD)) add_flag(old_flgs, TR_SLAY_UNDEAD);
570 if (have_flag(old_flgs, TR_KILL_DEMON)) add_flag(old_flgs, TR_SLAY_DEMON);
571 if (have_flag(old_flgs, TR_KILL_ORC)) add_flag(old_flgs, TR_SLAY_ORC);
572 if (have_flag(old_flgs, TR_KILL_TROLL)) add_flag(old_flgs, TR_SLAY_TROLL);
573 if (have_flag(old_flgs, TR_KILL_GIANT)) add_flag(old_flgs, TR_SLAY_GIANT);
574 if (have_flag(old_flgs, TR_KILL_HUMAN)) add_flag(old_flgs, TR_SLAY_HUMAN);
576 old_to_a = o_ptr->to_a;
578 old_to_h = o_ptr->to_h;
579 old_to_d = o_ptr->to_d;
582 old_pval = o_ptr->pval;
583 old_name2 = o_ptr->name2;
584 old_timeout = o_ptr->timeout;
585 if (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE | TRC_PERMA_CURSE)) dec--;
586 if (have_flag(old_flgs, TR_ADD_L_CURSE)) dec--;
587 if (have_flag(old_flgs, TR_ADD_H_CURSE)) dec--;
588 if (have_flag(old_flgs, TR_AGGRAVATE)) dec--;
589 if (have_flag(old_flgs, TR_NO_TELE)) dec--;
590 if (have_flag(old_flgs, TR_DRAIN_EXP)) dec--;
591 if (have_flag(old_flgs, TR_DRAIN_HP)) dec--;
592 if (have_flag(old_flgs, TR_DRAIN_MANA)) dec--;
593 if (have_flag(old_flgs, TR_CALL_ANIMAL)) dec--;
594 if (have_flag(old_flgs, TR_CALL_DEMON)) dec--;
595 if (have_flag(old_flgs, TR_CALL_DRAGON)) dec--;
596 if (have_flag(old_flgs, TR_CALL_UNDEAD)) dec--;
597 if (have_flag(old_flgs, TR_COWARDICE)) dec--;
598 if (have_flag(old_flgs, TR_LOW_MELEE)) dec--;
599 if (have_flag(old_flgs, TR_LOW_AC)) dec--;
600 if (have_flag(old_flgs, TR_LOW_MAGIC)) dec--;
601 if (have_flag(old_flgs, TR_FAST_DIGEST)) dec--;
602 if (have_flag(old_flgs, TR_SLOW_REGEN)) dec--;
603 if (have_flag(old_flgs, TR_TY_CURSE)) dec--;
607 next_o_idx = o_ptr->next_o_idx;
608 marked = o_ptr->marked;
609 weight = o_ptr->weight;
610 number = o_ptr->number;
612 object_prep(o_ptr, o_ptr->k_idx);
616 o_ptr->next_o_idx = next_o_idx;
617 o_ptr->marked = marked;
618 o_ptr->number = number;
619 if (o_ptr->tval == TV_DRAG_ARMOR) o_ptr->timeout = old_timeout;
620 if (item >= 0) creature_ptr->total_weight += (o_ptr->weight*o_ptr->number - weight * number);
621 o_ptr->ident |= (IDENT_FULL_KNOWN);
622 object_aware(creature_ptr, o_ptr);
625 object_flags(o_ptr, new_flgs);
627 for (i = 0; essence_info[i].add_name; i++)
629 essence_type *es_ptr = &essence_info[i];
630 PARAMETER_VALUE pval = 0;
632 if (es_ptr->add < TR_FLAG_MAX && is_pval_flag(es_ptr->add) && old_pval)
633 pval = (have_flag(new_flgs, es_ptr->add)) ? old_pval - o_ptr->pval : old_pval;
635 if (es_ptr->add < TR_FLAG_MAX &&
636 (!have_flag(new_flgs, es_ptr->add) || pval) &&
637 have_flag(old_flgs, es_ptr->add))
641 drain_value[es_ptr->essence] += 10 * pval;
643 else if (es_ptr->essence != -2)
645 drain_value[es_ptr->essence] += 10;
647 else if (es_ptr->add == TR_SH_FIRE)
649 drain_value[TR_BRAND_FIRE] += 10;
650 drain_value[TR_RES_FIRE] += 10;
652 else if (es_ptr->add == TR_SH_ELEC)
654 drain_value[TR_BRAND_ELEC] += 10;
655 drain_value[TR_RES_ELEC] += 10;
657 else if (es_ptr->add == TR_SH_COLD)
659 drain_value[TR_BRAND_COLD] += 10;
660 drain_value[TR_RES_COLD] += 10;
662 else if (es_ptr->add == TR_LITE_2)
664 drain_value[TR_LITE_1] += 20;
666 else if (es_ptr->add == TR_LITE_3)
668 drain_value[TR_LITE_1] += 30;
673 if ((have_flag(old_flgs, TR_FORCE_WEAPON)) && !(have_flag(new_flgs, TR_FORCE_WEAPON)))
675 drain_value[TR_INT] += 5;
676 drain_value[TR_WIS] += 5;
678 if ((have_flag(old_flgs, TR_VORPAL)) && !(have_flag(new_flgs, TR_VORPAL)))
680 drain_value[TR_BRAND_POIS] += 5;
681 drain_value[TR_BRAND_ACID] += 5;
682 drain_value[TR_BRAND_ELEC] += 5;
683 drain_value[TR_BRAND_FIRE] += 5;
684 drain_value[TR_BRAND_COLD] += 5;
686 if ((have_flag(old_flgs, TR_DEC_MANA)) && !(have_flag(new_flgs, TR_DEC_MANA)))
688 drain_value[TR_INT] += 10;
690 if ((have_flag(old_flgs, TR_XTRA_MIGHT)) && !(have_flag(new_flgs, TR_XTRA_MIGHT)))
692 drain_value[TR_STR] += 10;
694 if ((have_flag(old_flgs, TR_XTRA_SHOTS)) && !(have_flag(new_flgs, TR_XTRA_SHOTS)))
696 drain_value[TR_DEX] += 10;
698 if (old_name2 == EGO_2WEAPON)
700 drain_value[TR_DEX] += 20;
702 if (object_is_weapon_ammo(o_ptr))
704 if (old_ds > o_ptr->ds) drain_value[TR_ES_ATTACK] += (old_ds - o_ptr->ds) * 10;
706 if (old_dd > o_ptr->dd) drain_value[TR_ES_ATTACK] += (old_dd - o_ptr->dd) * 10;
708 if (old_to_h > o_ptr->to_h) drain_value[TR_ES_ATTACK] += (old_to_h - o_ptr->to_h) * 10;
709 if (old_to_d > o_ptr->to_d) drain_value[TR_ES_ATTACK] += (old_to_d - o_ptr->to_d) * 10;
710 if (old_ac > o_ptr->ac) drain_value[TR_ES_AC] += (old_ac - o_ptr->ac) * 10;
711 if (old_to_a > o_ptr->to_a) drain_value[TR_ES_AC] += (old_to_a - o_ptr->to_a) * 10;
713 for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
715 drain_value[i] *= number;
716 drain_value[i] = drain_value[i] * dec / 4;
717 drain_value[i] = MAX(drain_value[i], 0);
718 if ((o_ptr->tval >= TV_SHOT) && (o_ptr->tval <= TV_BOLT)) drain_value[i] /= 10;
726 msg_print(_("エッセンスは抽出できませんでした。", "You were not able to extract any essence."));
730 msg_print(_("抽出したエッセンス:", "Extracted essences:"));
732 for (i = 0; essence_name[i]; i++)
734 if (!essence_name[i][0]) continue;
735 if (!drain_value[i]) continue;
737 creature_ptr->magic_num1[i] += drain_value[i];
738 creature_ptr->magic_num1[i] = MIN(20000, creature_ptr->magic_num1[i]);
740 msg_format("%s...%d%s", essence_name[i], drain_value[i], _("。", ". "));
744 /* Apply autodestroy/inscription to the drained item */
745 autopick_alter_item(creature_ptr, item, TRUE);
746 creature_ptr->update |= (PU_COMBINE | PU_REORDER);
747 creature_ptr->window |= (PW_INVEN);
751 * @brief 付加するエッセンスの大別を選択する
752 * @return 選んだエッセンスの大別ID
754 static COMMAND_CODE choose_essence(void)
756 COMMAND_CODE mode = 0;
758 COMMAND_CODE menu_line = (use_menu ? 1 : 0);
761 concptr menu_name[] = {
771 concptr menu_name[] = {
781 const COMMAND_CODE mode_max = 7;
783 if (repeat_pull(&mode) && 1 <= mode && mode <= mode_max)
793 for (i = 0; i < mode_max; i++)
795 prt(format(" %s %s", (menu_line == 1 + i) ? "》" : " ", menu_name[i]), 2 + i, 14);
796 prt("どの種類のエッセンス付加を行いますか?", 0, 0);
798 prt(format(" %s %s", (menu_line == 1 + i) ? "> " : " ", menu_name[i]), 2 + i, 14);
799 prt("Choose from menu.", 0, 0);
818 menu_line += mode_max - 1;
827 if (menu_line > mode_max) menu_line -= mode_max;
838 for (i = 0; i < mode_max; i++)
839 prt(format(" %c) %s", 'a' + i, menu_name[i]), 2 + i, 14);
841 if (!get_com(_("何を付加しますか:", "Command :"), &choice, TRUE))
847 if (isupper(choice)) choice = (char)tolower(choice);
849 if ('a' <= choice && choice <= 'a' + (char)mode_max - 1)
850 mode = (int)choice - 'a' + 1;
860 * @brief エッセンスを実際に付加する
861 * @param mode エッセンスの大別ID
864 static void add_essence(player_type *creature_ptr, ESSENCE_IDX mode)
876 GAME_TEXT o_name[MAX_NLEN];
878 essence_type *es_ptr;
879 bool able[22] = { 0 };
881 int menu_line = (use_menu ? 1 : 0);
883 for (i = 0; essence_info[i].add_name; i++)
885 es_ptr = &essence_info[i];
887 if (es_ptr->type != mode) continue;
891 if (!repeat_pull(&i) || i < 0 || i >= max_num)
896 (void)strnfmt(out_val, 78, _("('*'で一覧, ESCで中断) どの能力を付加しますか?", "(*=List, ESC=exit) Add which ability? "));
897 if (use_menu) screen_save();
899 choice = (always_show_list || use_menu) ? ESCAPE : 1;
902 if (choice == ESCAPE) choice = ' ';
903 else if (!get_com(out_val, &choice, FALSE))break;
905 if (use_menu && choice != ' ')
919 menu_line += (max_num - 1);
956 if (menu_line > max_num) menu_line -= max_num;
959 if ((choice == ' ') || (choice == '*') || (choice == '?') || (use_menu && ask))
962 if (!redraw || use_menu)
966 char dummy[80], dummy2[80];
971 if (!use_menu) screen_save();
973 for (y = 1; y < 24; y++)
976 /* Print header(s) */
978 prt(format(" %-43s %6s/%s", "能力(必要エッセンス)", "必要数", "所持数"), 1, x);
981 prt(format(" %-43s %6s/%s", "Ability (needed essence)", "Needs", "Possess"), 1, x);
984 for (ctr = 0; ctr < max_num; ctr++)
986 es_ptr = &essence_info[num[ctr]];
990 if (ctr == (menu_line - 1))
991 strcpy(dummy, _("》 ", "> "));
992 else strcpy(dummy, " ");
995 /* letter/number for power selection */
998 sprintf(dummy, "%c) ", I2A(ctr));
1001 strcat(dummy, es_ptr->add_name);
1006 if (es_ptr->essence != -1)
1008 strcat(dummy, format("(%s)", essence_name[es_ptr->essence]));
1009 if (creature_ptr->magic_num1[es_ptr->essence] < es_ptr->value) able[ctr] = FALSE;
1013 switch (es_ptr->add)
1015 case ESSENCE_SH_FIRE:
1016 strcat(dummy, _("(焼棄+耐火炎)", "(brand fire + res.fire)"));
1017 if (creature_ptr->magic_num1[TR_BRAND_FIRE] < es_ptr->value) able[ctr] = FALSE;
1018 if (creature_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1020 case ESSENCE_SH_ELEC:
1021 strcat(dummy, _("(電撃+耐電撃)", "(brand elec. + res. elec.)"));
1022 if (creature_ptr->magic_num1[TR_BRAND_ELEC] < es_ptr->value) able[ctr] = FALSE;
1023 if (creature_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1025 case ESSENCE_SH_COLD:
1026 strcat(dummy, _("(凍結+耐冷気)", "(brand cold + res. cold)"));
1027 if (creature_ptr->magic_num1[TR_BRAND_COLD] < es_ptr->value) able[ctr] = FALSE;
1028 if (creature_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1030 case ESSENCE_RESISTANCE:
1031 strcat(dummy, _("(耐火炎+耐冷気+耐電撃+耐酸)", "(r.fire+r.cold+r.elec+r.acid)"));
1032 if (creature_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1033 if (creature_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1034 if (creature_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1035 if (creature_ptr->magic_num1[TR_RES_ACID] < es_ptr->value) able[ctr] = FALSE;
1037 case ESSENCE_SUSTAIN:
1038 strcat(dummy, _("(耐火炎+耐冷気+耐電撃+耐酸)", "(r.fire+r.cold+r.elec+r.acid)"));
1039 if (creature_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1040 if (creature_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1041 if (creature_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1042 if (creature_ptr->magic_num1[TR_RES_ACID] < es_ptr->value) able[ctr] = FALSE;
1047 if (!able[ctr]) col = TERM_RED;
1049 if (es_ptr->essence != -1)
1051 sprintf(dummy2, "%-49s %3d/%d", dummy, es_ptr->value, (int)creature_ptr->magic_num1[es_ptr->essence]);
1055 sprintf(dummy2, "%-49s %3d/(\?\?)", dummy, es_ptr->value);
1058 c_prt(col, dummy2, ctr + 2, x);
1077 ask = (isupper(choice));
1080 if (ask) choice = (char)tolower(choice);
1082 /* Extract request */
1083 i = (islower(choice) ? A2I(choice) : -1);
1086 /* Totally Illegal */
1087 if ((i < 0) || (i >= max_num) || !able[i])
1099 (void)strnfmt(tmp_val, 78, _("%sを付加しますか? ", "Add the abilitiy of %s? "), essence_info[num[i]].add_name);
1101 /* Belay that order */
1102 if (!get_check(tmp_val)) continue;
1108 if (redraw) screen_load();
1114 es_ptr = &essence_info[num[i]];
1116 if (es_ptr->add == ESSENCE_SLAY_GLOVE)
1118 else if (mode == 1 || mode == 5)
1119 item_tester_hook = item_tester_hook_melee_ammo;
1120 else if (es_ptr->add == ESSENCE_ATTACK)
1121 item_tester_hook = object_allow_enchant_weapon;
1122 else if (es_ptr->add == ESSENCE_AC)
1123 item_tester_hook = object_is_armour;
1125 item_tester_hook = object_is_weapon_armour_ammo;
1127 q = _("どのアイテムを改良しますか?", "Improve which item? ");
1128 s = _("改良できるアイテムがありません。", "You have nothing to improve.");
1130 o_ptr = choose_object(creature_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), tval);
1133 if ((mode != 10) && (object_is_artifact(o_ptr) || object_is_smith(o_ptr)))
1135 msg_print(_("そのアイテムはこれ以上改良できない。", "This item can not be improved any further."));
1139 object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1141 use_essence = es_ptr->value;
1142 if ((o_ptr->tval >= TV_SHOT) && (o_ptr->tval <= TV_BOLT)) use_essence = (use_essence + 9) / 10;
1143 if (o_ptr->number > 1)
1145 use_essence *= o_ptr->number;
1146 msg_format(_("%d個あるのでエッセンスは%d必要です。", "For %d items, it will take %d essences."), o_ptr->number, use_essence);
1149 if (es_ptr->essence != -1)
1151 if (creature_ptr->magic_num1[es_ptr->essence] < use_essence)
1153 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1156 if (is_pval_flag(es_ptr->add))
1158 if (o_ptr->pval < 0)
1160 msg_print(_("このアイテムの能力修正を強化することはできない。", "You cannot increase magic number of this item."));
1163 else if (es_ptr->add == TR_BLOWS)
1165 if (o_ptr->pval > 1)
1167 if (!get_check(_("修正値は1になります。よろしいですか?", "The magic number of this weapon will become 1. Are you sure? "))) return;
1171 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1173 else if (o_ptr->pval > 0)
1175 use_essence *= o_ptr->pval;
1176 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1182 PARAMETER_VALUE pval;
1183 PARAMETER_VALUE limit = MIN(5, creature_ptr->magic_num1[es_ptr->essence] / es_ptr->value);
1185 sprintf(tmp, _("いくつ付加しますか? (1-%d): ", "Enchant how many? (1-%d): "), limit);
1186 strcpy(tmp_val, "1");
1188 if (!get_string(tmp, tmp_val, 1)) return;
1189 pval = (PARAMETER_VALUE)atoi(tmp_val);
1190 if (pval > limit) pval = limit;
1191 else if (pval < 1) pval = 1;
1192 o_ptr->pval += pval;
1193 use_essence *= pval;
1194 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1197 if (creature_ptr->magic_num1[es_ptr->essence] < use_essence)
1199 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1203 else if (es_ptr->add == ESSENCE_SLAY_GLOVE)
1210 strcpy(tmp_val, "1");
1211 if (!get_string(format(_("いくつ付加しますか? (1-%d):", "Enchant how many? (1-%d):"), creature_ptr->lev / 7 + 3), tmp_val, 2)) return;
1212 val = atoi(tmp_val);
1213 if (val > creature_ptr->lev / 7 + 3) val = creature_ptr->lev / 7 + 3;
1214 else if (val < 1) val = 1;
1216 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1217 if (creature_ptr->magic_num1[es_ptr->essence] < use_essence)
1219 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1222 get_to_h = ((val + 1) / 2 + randint0(val / 2 + 1));
1223 get_to_d = ((val + 1) / 2 + randint0(val / 2 + 1));
1224 o_ptr->xtra4 = (get_to_h << 8) + get_to_d;
1225 o_ptr->to_h += get_to_h;
1226 o_ptr->to_d += get_to_d;
1228 creature_ptr->magic_num1[es_ptr->essence] -= use_essence;
1229 if (es_ptr->add == ESSENCE_ATTACK)
1231 if ((o_ptr->to_h >= creature_ptr->lev / 5 + 5) && (o_ptr->to_d >= creature_ptr->lev / 5 + 5))
1233 msg_print(_("改良に失敗した。", "You failed to enchant."));
1234 take_turn(creature_ptr, 100);
1239 if (o_ptr->to_h < creature_ptr->lev / 5 + 5) o_ptr->to_h++;
1240 if (o_ptr->to_d < creature_ptr->lev / 5 + 5) o_ptr->to_d++;
1243 else if (es_ptr->add == ESSENCE_AC)
1245 if (o_ptr->to_a >= creature_ptr->lev / 5 + 5)
1247 msg_print(_("改良に失敗した。", "You failed to enchant."));
1248 take_turn(creature_ptr, 100);
1253 if (o_ptr->to_a < creature_ptr->lev / 5 + 5) o_ptr->to_a++;
1258 o_ptr->xtra3 = es_ptr->add + 1;
1263 bool success = TRUE;
1265 switch (es_ptr->add)
1267 case ESSENCE_SH_FIRE:
1268 if ((creature_ptr->magic_num1[TR_BRAND_FIRE] < use_essence) || (creature_ptr->magic_num1[TR_RES_FIRE] < use_essence))
1273 creature_ptr->magic_num1[TR_BRAND_FIRE] -= use_essence;
1274 creature_ptr->magic_num1[TR_RES_FIRE] -= use_essence;
1276 case ESSENCE_SH_ELEC:
1277 if ((creature_ptr->magic_num1[TR_BRAND_ELEC] < use_essence) || (creature_ptr->magic_num1[TR_RES_ELEC] < use_essence))
1282 creature_ptr->magic_num1[TR_BRAND_ELEC] -= use_essence;
1283 creature_ptr->magic_num1[TR_RES_ELEC] -= use_essence;
1285 case ESSENCE_SH_COLD:
1286 if ((creature_ptr->magic_num1[TR_BRAND_COLD] < use_essence) || (creature_ptr->magic_num1[TR_RES_COLD] < use_essence))
1291 creature_ptr->magic_num1[TR_BRAND_COLD] -= use_essence;
1292 creature_ptr->magic_num1[TR_RES_COLD] -= use_essence;
1294 case ESSENCE_RESISTANCE:
1295 case ESSENCE_SUSTAIN:
1296 if ((creature_ptr->magic_num1[TR_RES_ACID] < use_essence) || (creature_ptr->magic_num1[TR_RES_ELEC] < use_essence) || (creature_ptr->magic_num1[TR_RES_FIRE] < use_essence) || (creature_ptr->magic_num1[TR_RES_COLD] < use_essence))
1301 creature_ptr->magic_num1[TR_RES_ACID] -= use_essence;
1302 creature_ptr->magic_num1[TR_RES_ELEC] -= use_essence;
1303 creature_ptr->magic_num1[TR_RES_FIRE] -= use_essence;
1304 creature_ptr->magic_num1[TR_RES_COLD] -= use_essence;
1309 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1312 if (es_ptr->add == ESSENCE_SUSTAIN)
1314 add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
1315 add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
1316 add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
1317 add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
1321 o_ptr->xtra3 = es_ptr->add + 1;
1325 take_turn(creature_ptr, 100);
1326 _(msg_format("%sに%sの能力を付加しました。", o_name, es_ptr->add_name),
1327 msg_format("You have added ability of %s to %s.", es_ptr->add_name, o_name));
1328 creature_ptr->update |= (PU_COMBINE | PU_REORDER);
1329 creature_ptr->window |= (PW_INVEN);
1336 static void erase_essence(player_type *creature_ptr)
1341 GAME_TEXT o_name[MAX_NLEN];
1342 BIT_FLAGS flgs[TR_FLAG_SIZE];
1344 item_tester_hook = object_is_smith;
1346 q = _("どのアイテムのエッセンスを消去しますか?", "Remove from which item? ");
1347 s = _("エッセンスを付加したアイテムがありません。", "You have nothing to remove essence.");
1349 o_ptr = choose_object(creature_ptr, &item, q, s, (USE_INVEN | USE_FLOOR), 0);
1352 object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1353 if (!get_check(format(_("よろしいですか? [%s]", "Are you sure? [%s]"), o_name))) return;
1355 take_turn(creature_ptr, 100);
1357 if (o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE)
1359 o_ptr->to_h -= (o_ptr->xtra4 >> 8);
1360 o_ptr->to_d -= (o_ptr->xtra4 & 0x000f);
1362 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
1363 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
1366 object_flags(o_ptr, flgs);
1367 if (!(have_pval_flags(flgs))) o_ptr->pval = 0;
1368 msg_print(_("エッセンスを取り去った。", "You removed all essence you have added."));
1369 creature_ptr->update |= (PU_COMBINE | PU_REORDER);
1370 creature_ptr->window |= (PW_INVEN);
1374 * @brief 鍛冶コマンドのメインルーチン
1375 * @param only_browse TRUEならばエッセンス一覧の表示のみを行う
1378 void do_cmd_kaji(player_type *creature_ptr, bool only_browse)
1380 COMMAND_CODE mode = 0;
1383 COMMAND_CODE menu_line = (use_menu ? 1 : 0);
1387 if (cmd_limit_confused(creature_ptr)) return;
1388 if (cmd_limit_blind(creature_ptr)) return;
1389 if (cmd_limit_image(creature_ptr)) return;
1392 if (!(repeat_pull(&mode) && 1 <= mode && mode <= 5))
1394 if (only_browse) screen_save();
1396 if (!only_browse) screen_save();
1402 prt(format(" %s エッセンス一覧", (menu_line == 1) ? "》" : " "), 2, 14);
1403 prt(format(" %s エッセンス抽出", (menu_line == 2) ? "》" : " "), 3, 14);
1404 prt(format(" %s エッセンス消去", (menu_line == 3) ? "》" : " "), 4, 14);
1405 prt(format(" %s エッセンス付加", (menu_line == 4) ? "》" : " "), 5, 14);
1406 prt(format(" %s 武器/防具強化", (menu_line == 5) ? "》" : " "), 6, 14);
1407 prt(format("どの種類の技術を%sますか?", only_browse ? "調べ" : "使い"), 0, 0);
1409 prt(format(" %s List essences", (menu_line == 1) ? "> " : " "), 2, 14);
1410 prt(format(" %s Extract essence", (menu_line == 2) ? "> " : " "), 3, 14);
1411 prt(format(" %s Remove essence", (menu_line == 3) ? "> " : " "), 4, 14);
1412 prt(format(" %s Add essence", (menu_line == 4) ? "> " : " "), 5, 14);
1413 prt(format(" %s Enchant weapon/armor", (menu_line == 5) ? "> " : " "), 6, 14);
1414 prt(format("Choose command from menu."), 0, 0);
1441 if (menu_line > 5) menu_line -= 5;
1449 prt(_(" a) エッセンス一覧", " a) List essences"), 2, 14);
1450 prt(_(" b) エッセンス抽出", " b) Extract essence"), 3, 14);
1451 prt(_(" c) エッセンス消去", " c) Remove essence"), 4, 14);
1452 prt(_(" d) エッセンス付加", " d) Add essence"), 5, 14);
1453 prt(_(" e) 武器/防具強化", " e) Enchant weapon/armor"), 6, 14);
1455 if (!get_com(format("どの能力を%sますか:", only_browse ? "調べ" : "使い"), &choice, TRUE))
1457 if (!get_com("Command :", &choice, TRUE))
1494 /* Clear lines, position cursor (really should use strlen here) */
1495 Term_erase(14, 21, 255);
1496 Term_erase(14, 20, 255);
1497 Term_erase(14, 19, 255);
1498 Term_erase(14, 18, 255);
1499 Term_erase(14, 17, 255);
1500 Term_erase(14, 16, 255);
1502 roff_to_buf(kaji_tips[mode - 1], 62, temp, sizeof(temp));
1503 for (j = 0, line = 17; temp[j]; j += (1 + strlen(&temp[j])))
1505 prt(&temp[j], line, 15);
1510 if (!only_browse) screen_load();
1511 } while (only_browse);
1516 case 1: display_essence(creature_ptr); break;
1517 case 2: drain_essence(creature_ptr); break;
1518 case 3: erase_essence(creature_ptr); break;
1520 mode = choose_essence();
1523 add_essence(creature_ptr, mode);
1525 case 5: add_essence(creature_ptr, 10); break;