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"
27 #include "view/display-messages.h"
30 * エッセンス情報の構造体 / A structure for smithing
33 int add; /* TR flag number or special essence id */
34 concptr add_name; /* Name of this ability */
35 ESSENCE_IDX type; /* Menu number */
36 int essence; /* Index for carrying essences */
37 int value; /* Needed value to add this ability */
42 * エッセンス情報テーブル Smithing type data for Weapon smith
45 static essence_type essence_info[] =
47 {TR_STR, "腕力", 4, TR_STR, 20},
48 {TR_INT, "知能", 4, TR_INT, 20},
49 {TR_WIS, "賢さ", 4, TR_WIS, 20},
50 {TR_DEX, "器用さ", 4, TR_DEX, 20},
51 {TR_CON, "耐久力", 4, TR_CON, 20},
52 {TR_CHR, "魅力", 4, TR_CHR, 20},
53 {TR_MAGIC_MASTERY, "魔力支配", 4, TR_MAGIC_MASTERY, 20},
54 {TR_STEALTH, "隠密", 4, TR_STEALTH, 40},
55 {TR_SEARCH, "探索", 4, TR_SEARCH, 15},
56 {TR_INFRA, "赤外線視力", 4, TR_INFRA, 15},
57 {TR_TUNNEL, "採掘", 4, TR_TUNNEL, 15},
58 {TR_SPEED, "スピード", 4, TR_SPEED, 12},
59 {TR_BLOWS, "追加攻撃", 1, TR_BLOWS, 20},
60 {TR_CHAOTIC, "カオス攻撃", 1, TR_CHAOTIC, 15},
61 {TR_VAMPIRIC, "吸血攻撃", 1, TR_VAMPIRIC, 60},
62 {TR_IMPACT, "地震発動", 7, TR_IMPACT, 15},
63 {TR_BRAND_POIS, "毒殺", 1, TR_BRAND_POIS, 20},
64 {TR_BRAND_ACID, "溶解", 1, TR_BRAND_ACID, 20},
65 {TR_BRAND_ELEC, "電撃", 1, TR_BRAND_ELEC, 20},
66 {TR_BRAND_FIRE, "焼棄", 1, TR_BRAND_FIRE, 20},
67 {TR_BRAND_COLD, "凍結", 1, TR_BRAND_COLD, 20},
68 {TR_SUST_STR, "腕力維持", 3, TR_SUST_STR, 15},
69 {TR_SUST_INT, "知能維持", 3, TR_SUST_STR, 15},
70 {TR_SUST_WIS, "賢さ維持", 3, TR_SUST_STR, 15},
71 {TR_SUST_DEX, "器用さ維持", 3, TR_SUST_STR, 15},
72 {TR_SUST_CON, "耐久力維持", 3, TR_SUST_STR, 15},
73 {TR_SUST_CHR, "魅力維持", 3, TR_SUST_STR, 15},
74 {TR_IM_ACID, "酸免疫", 2, TR_IM_ACID, 20},
75 {TR_IM_ELEC, "電撃免疫", 2, TR_IM_ACID, 20},
76 {TR_IM_FIRE, "火炎免疫", 2, TR_IM_ACID, 20},
77 {TR_IM_COLD, "冷気免疫", 2, TR_IM_ACID, 20},
78 {TR_REFLECT, "反射", 2, TR_REFLECT, 20},
79 {TR_FREE_ACT, "麻痺知らず", 3, TR_FREE_ACT, 20},
80 {TR_HOLD_EXP, "経験値維持", 3, TR_HOLD_EXP, 20},
81 {TR_RES_ACID, "耐酸", 2, TR_RES_ACID, 15},
82 {TR_RES_ELEC, "耐電撃", 2, TR_RES_ELEC, 15},
83 {TR_RES_FIRE, "耐火炎", 2, TR_RES_FIRE, 15},
84 {TR_RES_COLD, "耐冷気", 2, TR_RES_COLD, 15},
85 {TR_RES_POIS, "耐毒", 2, TR_RES_POIS, 25},
86 {TR_RES_FEAR, "耐恐怖", 2, TR_RES_FEAR, 20},
87 {TR_RES_LITE, "耐閃光", 2, TR_RES_LITE, 20},
88 {TR_RES_DARK, "耐暗黒", 2, TR_RES_DARK, 20},
89 {TR_RES_BLIND, "耐盲目", 2, TR_RES_BLIND, 20},
90 {TR_RES_CONF, "耐混乱", 2, TR_RES_CONF, 20},
91 {TR_RES_SOUND, "耐轟音", 2, TR_RES_SOUND, 20},
92 {TR_RES_SHARDS, "耐破片", 2, TR_RES_SHARDS, 20},
93 {TR_RES_NETHER, "耐地獄", 2, TR_RES_NETHER, 20},
94 {TR_RES_NEXUS, "耐因果混乱", 2, TR_RES_NEXUS, 20},
95 {TR_RES_CHAOS, "耐カオス", 2, TR_RES_CHAOS, 20},
96 {TR_RES_DISEN, "耐劣化", 2, TR_RES_DISEN, 20},
97 {TR_SH_FIRE, "", 0, -2, 0},
98 {TR_SH_ELEC, "", 0, -2, 0},
99 {TR_SH_COLD, "", 0, -2, 0},
100 {TR_NO_MAGIC, "反魔法", 3, TR_NO_MAGIC, 15},
101 {TR_WARNING, "警告", 3, TR_WARNING, 20},
102 {TR_LEVITATION, "浮遊", 3, TR_LEVITATION, 20},
103 {TR_LITE_1, "永久光源", 3, TR_LITE_1, 15},
104 {TR_LITE_2, "", 0, -2, 0},
105 {TR_LITE_3, "", 0, -2, 0},
106 {TR_SEE_INVIS, "可視透明", 3, TR_SEE_INVIS, 20},
107 {TR_TELEPATHY, "テレパシー", 6, TR_TELEPATHY, 15},
108 {TR_SLOW_DIGEST, "遅消化", 3, TR_SLOW_DIGEST, 15},
109 {TR_REGEN, "急速回復", 3, TR_REGEN, 20},
110 {TR_TELEPORT, "テレポート", 3, TR_TELEPORT, 25},
112 {TR_SLAY_EVIL, "邪悪倍打", 5, TR_SLAY_EVIL, 100},
113 {TR_KILL_EVIL, "邪悪倍倍打", 0, TR_SLAY_EVIL, 60},
114 {TR_SLAY_ANIMAL, "動物倍打", 5, TR_SLAY_ANIMAL, 20},
115 {TR_KILL_ANIMAL, "動物倍倍打", 5, TR_SLAY_ANIMAL, 60},
116 {TR_SLAY_UNDEAD, "不死倍打", 5, TR_SLAY_UNDEAD, 20},
117 {TR_KILL_UNDEAD, "不死倍倍打", 5, TR_SLAY_UNDEAD, 60},
118 {TR_SLAY_DEMON, "悪魔倍打", 5, TR_SLAY_DEMON, 20},
119 {TR_KILL_DEMON, "悪魔倍倍打", 5, TR_SLAY_DEMON, 60},
120 {TR_SLAY_ORC, "オーク倍打", 5, TR_SLAY_ORC, 15},
121 {TR_KILL_ORC, "オーク倍倍打", 5, TR_SLAY_ORC, 60},
122 {TR_SLAY_TROLL, "トロル倍打", 5, TR_SLAY_TROLL, 15},
123 {TR_KILL_TROLL, "トロル倍倍打", 5, TR_SLAY_TROLL, 60},
124 {TR_SLAY_GIANT, "巨人倍打", 5, TR_SLAY_GIANT, 20},
125 {TR_KILL_GIANT, "巨人倍倍打", 5, TR_SLAY_GIANT, 60},
126 {TR_SLAY_DRAGON, "竜倍打", 5, TR_SLAY_DRAGON, 20},
127 {TR_KILL_DRAGON, "竜倍倍打", 5, TR_SLAY_DRAGON, 60},
128 {TR_SLAY_HUMAN, "人間倍打", 5, TR_SLAY_HUMAN, 20},
129 {TR_KILL_HUMAN, "人間倍倍打", 5, TR_SLAY_HUMAN, 60},
131 {TR_ESP_ANIMAL, "動物ESP", 6, TR_SLAY_ANIMAL, 40},
132 {TR_ESP_UNDEAD, "不死ESP", 6, TR_SLAY_UNDEAD, 40},
133 {TR_ESP_DEMON, "悪魔ESP", 6, TR_SLAY_DEMON, 40},
134 {TR_ESP_ORC, "オークESP", 6, TR_SLAY_ORC, 40},
135 {TR_ESP_TROLL, "トロルESP", 6, TR_SLAY_TROLL, 40},
136 {TR_ESP_GIANT, "巨人ESP", 6, TR_SLAY_GIANT, 40},
137 {TR_ESP_DRAGON, "竜ESP", 6, TR_SLAY_DRAGON, 40},
138 {TR_ESP_HUMAN, "人間ESP", 6, TR_SLAY_HUMAN, 40},
140 {ESSENCE_ATTACK, "攻撃", 10, TR_ES_ATTACK, 30},
141 {ESSENCE_AC, "防御", 10, TR_ES_AC, 15},
142 {ESSENCE_TMP_RES_ACID, "酸耐性発動", 7, TR_RES_ACID, 50},
143 {ESSENCE_TMP_RES_ELEC, "電撃耐性発動", 7, TR_RES_ELEC, 50},
144 {ESSENCE_TMP_RES_FIRE, "火炎耐性発動", 7, TR_RES_FIRE, 50},
145 {ESSENCE_TMP_RES_COLD, "冷気耐性発動", 7, TR_RES_COLD, 50},
146 {ESSENCE_SH_FIRE, "火炎オーラ", 7, -1, 50},
147 {ESSENCE_SH_ELEC, "電撃オーラ", 7, -1, 50},
148 {ESSENCE_SH_COLD, "冷気オーラ", 7, -1, 50},
149 {ESSENCE_RESISTANCE, "全耐性", 2, -1, 150},
150 {ESSENCE_SUSTAIN, "装備保持", 10, -1, 10},
151 {ESSENCE_SLAY_GLOVE, "殺戮の小手", 1, TR_ES_ATTACK, 200},
156 static essence_type essence_info[] =
158 {TR_STR, "strength", 4, TR_STR, 20},
159 {TR_INT, "intelligence", 4, TR_INT, 20},
160 {TR_WIS, "wisdom", 4, TR_WIS, 20},
161 {TR_DEX, "dexterity", 4, TR_DEX, 20},
162 {TR_CON, "constitution", 4, TR_CON, 20},
163 {TR_CHR, "charisma", 4, TR_CHR, 20},
164 {TR_MAGIC_MASTERY, "magic mastery", 4, TR_MAGIC_MASTERY, 20},
165 {TR_STEALTH, "stealth", 4, TR_STEALTH, 40},
166 {TR_SEARCH, "serching", 4, TR_SEARCH, 15},
167 {TR_INFRA, "infravision", 4, TR_INFRA, 15},
168 {TR_TUNNEL, "digging", 4, TR_TUNNEL, 15},
169 {TR_SPEED, "speed", 4, TR_SPEED, 12},
170 {TR_BLOWS, "extra attack", 1, TR_BLOWS, 20},
171 {TR_CHAOTIC, "chaos brand", 1, TR_CHAOTIC, 15},
172 {TR_VAMPIRIC, "vampiric brand", 1, TR_VAMPIRIC, 60},
173 {TR_IMPACT, "quake activation", 7, TR_IMPACT, 15},
174 {TR_BRAND_POIS, "poison brand", 1, TR_BRAND_POIS, 20},
175 {TR_BRAND_ACID, "acid brand", 1, TR_BRAND_ACID, 20},
176 {TR_BRAND_ELEC, "electric brand", 1, TR_BRAND_ELEC, 20},
177 {TR_BRAND_FIRE, "fire brand", 1, TR_BRAND_FIRE, 20},
178 {TR_BRAND_COLD, "cold brand", 1, TR_BRAND_COLD, 20},
179 {TR_SUST_STR, "sustain strength", 3, TR_SUST_STR, 15},
180 {TR_SUST_INT, "sustain intelligence", 3, TR_SUST_STR, 15},
181 {TR_SUST_WIS, "sustain wisdom", 3, TR_SUST_STR, 15},
182 {TR_SUST_DEX, "sustain dexterity", 3, TR_SUST_STR, 15},
183 {TR_SUST_CON, "sustain constitution", 3, TR_SUST_STR, 15},
184 {TR_SUST_CHR, "sustain charisma", 3, TR_SUST_STR, 15},
185 {TR_IM_ACID, "acid immunity", 2, TR_IM_ACID, 20},
186 {TR_IM_ELEC, "electric immunity", 2, TR_IM_ACID, 20},
187 {TR_IM_FIRE, "fire immunity", 2, TR_IM_ACID, 20},
188 {TR_IM_COLD, "cold immunity", 2, TR_IM_ACID, 20},
189 {TR_REFLECT, "reflection", 2, TR_REFLECT, 20},
190 {TR_FREE_ACT, "free action", 3, TR_FREE_ACT, 20},
191 {TR_HOLD_EXP, "hold experience", 3, TR_HOLD_EXP, 20},
192 {TR_RES_ACID, "resistance to acid", 2, TR_RES_ACID, 15},
193 {TR_RES_ELEC, "resistance to electric", 2, TR_RES_ELEC, 15},
194 {TR_RES_FIRE, "resistance to fire", 2, TR_RES_FIRE, 15},
195 {TR_RES_COLD, "resistance to cold", 2, TR_RES_COLD, 15},
196 {TR_RES_POIS, "resistance to poison", 2, TR_RES_POIS, 25},
197 {TR_RES_FEAR, "resistance to fear", 2, TR_RES_FEAR, 20},
198 {TR_RES_LITE, "resistance to light", 2, TR_RES_LITE, 20},
199 {TR_RES_DARK, "resistance to dark", 2, TR_RES_DARK, 20},
200 {TR_RES_BLIND, "resistance to blind", 2, TR_RES_BLIND, 20},
201 {TR_RES_CONF, "resistance to confusion", 2, TR_RES_CONF, 20},
202 {TR_RES_SOUND, "resistance to sound", 2, TR_RES_SOUND, 20},
203 {TR_RES_SHARDS, "resistance to shard", 2, TR_RES_SHARDS, 20},
204 {TR_RES_NETHER, "resistance to nether", 2, TR_RES_NETHER, 20},
205 {TR_RES_NEXUS, "resistance to nexus", 2, TR_RES_NEXUS, 20},
206 {TR_RES_CHAOS, "resistance to chaos", 2, TR_RES_CHAOS, 20},
207 {TR_RES_DISEN, "resistance to disenchantment", 2, TR_RES_DISEN, 20},
208 {TR_SH_FIRE, "", 0, -2, 0},
209 {TR_SH_ELEC, "", 0, -2, 0},
210 {TR_SH_COLD, "", 0, -2, 0},
211 {TR_NO_MAGIC, "anti magic", 3, TR_NO_MAGIC, 15},
212 {TR_WARNING, "warning", 3, TR_WARNING, 20},
213 {TR_LEVITATION, "levitation", 3, TR_LEVITATION, 20},
214 {TR_LITE_1, "permanent light", 3, TR_LITE_1, 15},
215 {TR_LITE_2, "", 0, -2, 0},
216 {TR_LITE_3, "", 0, -2, 0},
217 {TR_SEE_INVIS, "see invisible", 3, TR_SEE_INVIS, 20},
218 {TR_TELEPATHY, "telepathy", 6, TR_TELEPATHY, 15},
219 {TR_SLOW_DIGEST, "slow digestion", 3, TR_SLOW_DIGEST, 15},
220 {TR_REGEN, "regeneration", 3, TR_REGEN, 20},
221 {TR_TELEPORT, "teleport", 3, TR_TELEPORT, 25},
223 {TR_SLAY_EVIL, "slay evil", 5, TR_SLAY_EVIL, 100},
224 {TR_SLAY_ANIMAL, "slay animal", 5, TR_SLAY_ANIMAL, 20},
225 {TR_KILL_ANIMAL, "kill animal", 5, TR_SLAY_ANIMAL, 60},
226 {TR_KILL_EVIL, "kill evil", 0, TR_SLAY_EVIL, 60},
227 {TR_SLAY_UNDEAD, "slay undead", 5, TR_SLAY_UNDEAD, 20},
228 {TR_KILL_UNDEAD, "kill undead", 5, TR_SLAY_UNDEAD, 60},
229 {TR_SLAY_DEMON, "slay demon", 5, TR_SLAY_DEMON, 20},
230 {TR_KILL_DEMON, "kill demon", 5, TR_SLAY_DEMON, 60},
231 {TR_SLAY_ORC, "slay orc", 5, TR_SLAY_ORC, 15},
232 {TR_KILL_ORC, "kill orc", 5, TR_SLAY_ORC, 60},
233 {TR_SLAY_TROLL, "slay troll", 5, TR_SLAY_TROLL, 15},
234 {TR_KILL_TROLL, "kill troll", 5, TR_SLAY_TROLL, 60},
235 {TR_SLAY_GIANT, "slay giant", 5, TR_SLAY_GIANT, 20},
236 {TR_KILL_GIANT, "kill giant", 5, TR_SLAY_GIANT, 60},
237 {TR_SLAY_DRAGON, "slay dragon", 5, TR_SLAY_DRAGON, 20},
238 {TR_KILL_DRAGON, "kill dragon", 5, TR_SLAY_DRAGON, 60},
239 {TR_SLAY_HUMAN, "slay human", 5, TR_SLAY_HUMAN, 20},
240 {TR_KILL_HUMAN, "kill human", 5, TR_SLAY_HUMAN, 60},
242 {TR_ESP_ANIMAL, "sense animal", 6, TR_SLAY_ANIMAL, 40},
243 {TR_ESP_UNDEAD, "sense undead", 6, TR_SLAY_UNDEAD, 40},
244 {TR_ESP_DEMON, "sense demon", 6, TR_SLAY_DEMON, 40},
245 {TR_ESP_ORC, "sense orc", 6, TR_SLAY_ORC, 40},
246 {TR_ESP_TROLL, "sense troll", 6, TR_SLAY_TROLL, 40},
247 {TR_ESP_GIANT, "sense giant", 6, TR_SLAY_GIANT, 40},
248 {TR_ESP_DRAGON, "sense dragon", 6, TR_SLAY_DRAGON, 40},
249 {TR_ESP_HUMAN, "sense human", 6, TR_SLAY_HUMAN, 40},
251 {ESSENCE_ATTACK, "weapon enchant", 10, TR_ES_ATTACK, 30},
252 {ESSENCE_AC, "armor enchant", 10, TR_ES_AC, 15},
253 {ESSENCE_TMP_RES_ACID, "resist acid activation", 7, TR_RES_ACID, 50},
254 {ESSENCE_TMP_RES_ELEC, "resist electricity activation", 7, TR_RES_ELEC, 50},
255 {ESSENCE_TMP_RES_FIRE, "resist fire activation", 7, TR_RES_FIRE, 50},
256 {ESSENCE_TMP_RES_COLD, "resist cold activation", 7, TR_RES_COLD, 50},
257 {ESSENCE_SH_FIRE, "fiery sheath", 7, -1, 50},
258 {ESSENCE_SH_ELEC, "electric sheath", 7, -1, 50},
259 {ESSENCE_SH_COLD, "sheath of coldness", 7, -1, 50},
260 {ESSENCE_RESISTANCE, "resistance", 2, -1, 150},
261 {ESSENCE_SUSTAIN, "elements proof", 10, -1, 10},
262 {ESSENCE_SLAY_GLOVE, "gauntlets of slaying", 1, TR_ES_ATTACK, 200},
270 * エッセンス名テーブル / Essense names for Weapon smith
273 concptr essence_name[] =
376 concptr essence_name[] =
478 static concptr const kaji_tips[5] =
481 "現在持っているエッセンスの一覧を表示する。",
482 "アイテムからエッセンスを取り出す。エッセンスを取られたアイテムは全く魔法がかかっていない初期状態に戻る。",
483 "既にエッセンスが付加されたアイテムからエッセンスのみ消し去る。エッセンスは手に入らない。",
484 "アイテムにエッセンスを付加する。既にエッセンスが付加されたアイテムやアーティファクトには付加できない。",
485 "武器や防具を強化したり、攻撃で傷つかないようにしたりする。エッセンスが付加されたアイテムやアーティファクトに対しても使用できる。",
487 "Display essences you have.",
488 "Extract essences from an item. The item become non magical.",
489 "Remove added essences from an equipment which was improved before. The removed essence will be ruined.",
490 "Add essences to an item. The improved items or artifacts cannot be reimprove.",
491 "Enchant an equipment or make an equiment element-proofed. The improved items and artifacts can be enchanted too.",
497 * @brief 所持しているエッセンス一覧を表示する
500 static void display_essence(player_type *creature_ptr)
505 for (i = 1; i < 22; i++)
509 prt(_("エッセンス 個数 エッセンス 個数 エッセンス 個数",
510 "Essence Num Essence Num Essence Num "), 1, 8);
511 for (i = 0; essence_name[i]; i++)
513 if (!essence_name[i][0]) continue;
514 prt(format("%-11s %5d", essence_name[i], creature_ptr->magic_num1[i]), 2 + num % 21, 8 + num / 21 * 22);
517 prt(_("現在所持しているエッセンス", "List of all essences you have."), 0, 0);
525 * @param creature_ptr プレーヤーへの参照ポインタ
528 static void drain_essence(player_type *creature_ptr)
530 int drain_value[sizeof(creature_ptr->magic_num1) / sizeof(s32b)];
534 bool observe = FALSE;
535 int old_ds, old_dd, old_to_h, old_to_d, old_ac, old_to_a, old_pval, old_name2;
536 TIME_EFFECT old_timeout;
537 BIT_FLAGS old_flgs[TR_FLAG_SIZE], new_flgs[TR_FLAG_SIZE];
543 OBJECT_IDX next_o_idx;
546 for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
549 item_tester_hook = object_is_weapon_armour_ammo;
551 q = _("どのアイテムから抽出しますか?", "Extract from which item? ");
552 s = _("抽出できるアイテムがありません。", "You have nothing you can extract from.");
554 o_ptr = choose_object(creature_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), 0);
557 if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))
559 GAME_TEXT o_name[MAX_NLEN];
560 object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
561 if (!get_check(format(_("本当に%sから抽出してよろしいですか?", "Really extract from %s? "), o_name))) return;
564 take_turn(creature_ptr, 100);
566 object_flags(o_ptr, old_flgs);
567 if (have_flag(old_flgs, TR_KILL_DRAGON)) add_flag(old_flgs, TR_SLAY_DRAGON);
568 if (have_flag(old_flgs, TR_KILL_ANIMAL)) add_flag(old_flgs, TR_SLAY_ANIMAL);
569 if (have_flag(old_flgs, TR_KILL_EVIL)) add_flag(old_flgs, TR_SLAY_EVIL);
570 if (have_flag(old_flgs, TR_KILL_UNDEAD)) add_flag(old_flgs, TR_SLAY_UNDEAD);
571 if (have_flag(old_flgs, TR_KILL_DEMON)) add_flag(old_flgs, TR_SLAY_DEMON);
572 if (have_flag(old_flgs, TR_KILL_ORC)) add_flag(old_flgs, TR_SLAY_ORC);
573 if (have_flag(old_flgs, TR_KILL_TROLL)) add_flag(old_flgs, TR_SLAY_TROLL);
574 if (have_flag(old_flgs, TR_KILL_GIANT)) add_flag(old_flgs, TR_SLAY_GIANT);
575 if (have_flag(old_flgs, TR_KILL_HUMAN)) add_flag(old_flgs, TR_SLAY_HUMAN);
577 old_to_a = o_ptr->to_a;
579 old_to_h = o_ptr->to_h;
580 old_to_d = o_ptr->to_d;
583 old_pval = o_ptr->pval;
584 old_name2 = o_ptr->name2;
585 old_timeout = o_ptr->timeout;
586 if (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE | TRC_PERMA_CURSE)) dec--;
587 if (have_flag(old_flgs, TR_ADD_L_CURSE)) dec--;
588 if (have_flag(old_flgs, TR_ADD_H_CURSE)) dec--;
589 if (have_flag(old_flgs, TR_AGGRAVATE)) dec--;
590 if (have_flag(old_flgs, TR_NO_TELE)) dec--;
591 if (have_flag(old_flgs, TR_DRAIN_EXP)) dec--;
592 if (have_flag(old_flgs, TR_DRAIN_HP)) dec--;
593 if (have_flag(old_flgs, TR_DRAIN_MANA)) dec--;
594 if (have_flag(old_flgs, TR_CALL_ANIMAL)) dec--;
595 if (have_flag(old_flgs, TR_CALL_DEMON)) dec--;
596 if (have_flag(old_flgs, TR_CALL_DRAGON)) dec--;
597 if (have_flag(old_flgs, TR_CALL_UNDEAD)) dec--;
598 if (have_flag(old_flgs, TR_COWARDICE)) dec--;
599 if (have_flag(old_flgs, TR_LOW_MELEE)) dec--;
600 if (have_flag(old_flgs, TR_LOW_AC)) dec--;
601 if (have_flag(old_flgs, TR_LOW_MAGIC)) dec--;
602 if (have_flag(old_flgs, TR_FAST_DIGEST)) dec--;
603 if (have_flag(old_flgs, TR_SLOW_REGEN)) dec--;
604 if (have_flag(old_flgs, TR_TY_CURSE)) dec--;
608 next_o_idx = o_ptr->next_o_idx;
609 marked = o_ptr->marked;
610 weight = o_ptr->weight;
611 number = o_ptr->number;
613 object_prep(o_ptr, o_ptr->k_idx);
617 o_ptr->next_o_idx = next_o_idx;
618 o_ptr->marked = marked;
619 o_ptr->number = number;
620 if (o_ptr->tval == TV_DRAG_ARMOR) o_ptr->timeout = old_timeout;
621 if (item >= 0) creature_ptr->total_weight += (o_ptr->weight*o_ptr->number - weight * number);
622 o_ptr->ident |= (IDENT_FULL_KNOWN);
623 object_aware(creature_ptr, o_ptr);
626 object_flags(o_ptr, new_flgs);
628 for (i = 0; essence_info[i].add_name; i++)
630 essence_type *es_ptr = &essence_info[i];
631 PARAMETER_VALUE pval = 0;
633 if (es_ptr->add < TR_FLAG_MAX && is_pval_flag(es_ptr->add) && old_pval)
634 pval = (have_flag(new_flgs, es_ptr->add)) ? old_pval - o_ptr->pval : old_pval;
636 if (es_ptr->add < TR_FLAG_MAX &&
637 (!have_flag(new_flgs, es_ptr->add) || pval) &&
638 have_flag(old_flgs, es_ptr->add))
642 drain_value[es_ptr->essence] += 10 * pval;
644 else if (es_ptr->essence != -2)
646 drain_value[es_ptr->essence] += 10;
648 else if (es_ptr->add == TR_SH_FIRE)
650 drain_value[TR_BRAND_FIRE] += 10;
651 drain_value[TR_RES_FIRE] += 10;
653 else if (es_ptr->add == TR_SH_ELEC)
655 drain_value[TR_BRAND_ELEC] += 10;
656 drain_value[TR_RES_ELEC] += 10;
658 else if (es_ptr->add == TR_SH_COLD)
660 drain_value[TR_BRAND_COLD] += 10;
661 drain_value[TR_RES_COLD] += 10;
663 else if (es_ptr->add == TR_LITE_2)
665 drain_value[TR_LITE_1] += 20;
667 else if (es_ptr->add == TR_LITE_3)
669 drain_value[TR_LITE_1] += 30;
674 if ((have_flag(old_flgs, TR_FORCE_WEAPON)) && !(have_flag(new_flgs, TR_FORCE_WEAPON)))
676 drain_value[TR_INT] += 5;
677 drain_value[TR_WIS] += 5;
679 if ((have_flag(old_flgs, TR_VORPAL)) && !(have_flag(new_flgs, TR_VORPAL)))
681 drain_value[TR_BRAND_POIS] += 5;
682 drain_value[TR_BRAND_ACID] += 5;
683 drain_value[TR_BRAND_ELEC] += 5;
684 drain_value[TR_BRAND_FIRE] += 5;
685 drain_value[TR_BRAND_COLD] += 5;
687 if ((have_flag(old_flgs, TR_DEC_MANA)) && !(have_flag(new_flgs, TR_DEC_MANA)))
689 drain_value[TR_INT] += 10;
691 if ((have_flag(old_flgs, TR_XTRA_MIGHT)) && !(have_flag(new_flgs, TR_XTRA_MIGHT)))
693 drain_value[TR_STR] += 10;
695 if ((have_flag(old_flgs, TR_XTRA_SHOTS)) && !(have_flag(new_flgs, TR_XTRA_SHOTS)))
697 drain_value[TR_DEX] += 10;
699 if (old_name2 == EGO_2WEAPON)
701 drain_value[TR_DEX] += 20;
703 if (object_is_weapon_ammo(o_ptr))
705 if (old_ds > o_ptr->ds) drain_value[TR_ES_ATTACK] += (old_ds - o_ptr->ds) * 10;
707 if (old_dd > o_ptr->dd) drain_value[TR_ES_ATTACK] += (old_dd - o_ptr->dd) * 10;
709 if (old_to_h > o_ptr->to_h) drain_value[TR_ES_ATTACK] += (old_to_h - o_ptr->to_h) * 10;
710 if (old_to_d > o_ptr->to_d) drain_value[TR_ES_ATTACK] += (old_to_d - o_ptr->to_d) * 10;
711 if (old_ac > o_ptr->ac) drain_value[TR_ES_AC] += (old_ac - o_ptr->ac) * 10;
712 if (old_to_a > o_ptr->to_a) drain_value[TR_ES_AC] += (old_to_a - o_ptr->to_a) * 10;
714 for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
716 drain_value[i] *= number;
717 drain_value[i] = drain_value[i] * dec / 4;
718 drain_value[i] = MAX(drain_value[i], 0);
719 if ((o_ptr->tval >= TV_SHOT) && (o_ptr->tval <= TV_BOLT)) drain_value[i] /= 10;
727 msg_print(_("エッセンスは抽出できませんでした。", "You were not able to extract any essence."));
731 msg_print(_("抽出したエッセンス:", "Extracted essences:"));
733 for (i = 0; essence_name[i]; i++)
735 if (!essence_name[i][0]) continue;
736 if (!drain_value[i]) continue;
738 creature_ptr->magic_num1[i] += drain_value[i];
739 creature_ptr->magic_num1[i] = MIN(20000, creature_ptr->magic_num1[i]);
741 msg_format("%s...%d%s", essence_name[i], drain_value[i], _("。", ". "));
745 /* Apply autodestroy/inscription to the drained item */
746 autopick_alter_item(creature_ptr, item, TRUE);
747 creature_ptr->update |= (PU_COMBINE | PU_REORDER);
748 creature_ptr->window |= (PW_INVEN);
752 * @brief 付加するエッセンスの大別を選択する
753 * @return 選んだエッセンスの大別ID
755 static COMMAND_CODE choose_essence(void)
757 COMMAND_CODE mode = 0;
759 COMMAND_CODE menu_line = (use_menu ? 1 : 0);
762 concptr menu_name[] = {
772 concptr menu_name[] = {
782 const COMMAND_CODE mode_max = 7;
784 if (repeat_pull(&mode) && 1 <= mode && mode <= mode_max)
794 for (i = 0; i < mode_max; i++)
796 prt(format(" %s %s", (menu_line == 1 + i) ? "》" : " ", menu_name[i]), 2 + i, 14);
797 prt("どの種類のエッセンス付加を行いますか?", 0, 0);
799 prt(format(" %s %s", (menu_line == 1 + i) ? "> " : " ", menu_name[i]), 2 + i, 14);
800 prt("Choose from menu.", 0, 0);
819 menu_line += mode_max - 1;
828 if (menu_line > mode_max) menu_line -= mode_max;
839 for (i = 0; i < mode_max; i++)
840 prt(format(" %c) %s", 'a' + i, menu_name[i]), 2 + i, 14);
842 if (!get_com(_("何を付加しますか:", "Command :"), &choice, TRUE))
848 if (isupper(choice)) choice = (char)tolower(choice);
850 if ('a' <= choice && choice <= 'a' + (char)mode_max - 1)
851 mode = (int)choice - 'a' + 1;
861 * @brief エッセンスを実際に付加する
862 * @param mode エッセンスの大別ID
865 static void add_essence(player_type *creature_ptr, ESSENCE_IDX mode)
877 GAME_TEXT o_name[MAX_NLEN];
879 essence_type *es_ptr;
880 bool able[22] = { 0 };
882 int menu_line = (use_menu ? 1 : 0);
884 for (i = 0; essence_info[i].add_name; i++)
886 es_ptr = &essence_info[i];
888 if (es_ptr->type != mode) continue;
892 if (!repeat_pull(&i) || i < 0 || i >= max_num)
897 (void)strnfmt(out_val, 78, _("('*'で一覧, ESCで中断) どの能力を付加しますか?", "(*=List, ESC=exit) Add which ability? "));
898 if (use_menu) screen_save();
900 choice = (always_show_list || use_menu) ? ESCAPE : 1;
903 if (choice == ESCAPE) choice = ' ';
904 else if (!get_com(out_val, &choice, FALSE))break;
906 if (use_menu && choice != ' ')
920 menu_line += (max_num - 1);
957 if (menu_line > max_num) menu_line -= max_num;
960 if ((choice == ' ') || (choice == '*') || (choice == '?') || (use_menu && ask))
963 if (!redraw || use_menu)
967 char dummy[80], dummy2[80];
972 if (!use_menu) screen_save();
974 for (y = 1; y < 24; y++)
977 /* Print header(s) */
979 prt(format(" %-43s %6s/%s", "能力(必要エッセンス)", "必要数", "所持数"), 1, x);
982 prt(format(" %-43s %6s/%s", "Ability (needed essence)", "Needs", "Possess"), 1, x);
985 for (ctr = 0; ctr < max_num; ctr++)
987 es_ptr = &essence_info[num[ctr]];
991 if (ctr == (menu_line - 1))
992 strcpy(dummy, _("》 ", "> "));
993 else strcpy(dummy, " ");
996 /* letter/number for power selection */
999 sprintf(dummy, "%c) ", I2A(ctr));
1002 strcat(dummy, es_ptr->add_name);
1007 if (es_ptr->essence != -1)
1009 strcat(dummy, format("(%s)", essence_name[es_ptr->essence]));
1010 if (creature_ptr->magic_num1[es_ptr->essence] < es_ptr->value) able[ctr] = FALSE;
1014 switch (es_ptr->add)
1016 case ESSENCE_SH_FIRE:
1017 strcat(dummy, _("(焼棄+耐火炎)", "(brand fire + res.fire)"));
1018 if (creature_ptr->magic_num1[TR_BRAND_FIRE] < es_ptr->value) able[ctr] = FALSE;
1019 if (creature_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1021 case ESSENCE_SH_ELEC:
1022 strcat(dummy, _("(電撃+耐電撃)", "(brand elec. + res. elec.)"));
1023 if (creature_ptr->magic_num1[TR_BRAND_ELEC] < es_ptr->value) able[ctr] = FALSE;
1024 if (creature_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1026 case ESSENCE_SH_COLD:
1027 strcat(dummy, _("(凍結+耐冷気)", "(brand cold + res. cold)"));
1028 if (creature_ptr->magic_num1[TR_BRAND_COLD] < es_ptr->value) able[ctr] = FALSE;
1029 if (creature_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1031 case ESSENCE_RESISTANCE:
1032 strcat(dummy, _("(耐火炎+耐冷気+耐電撃+耐酸)", "(r.fire+r.cold+r.elec+r.acid)"));
1033 if (creature_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1034 if (creature_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1035 if (creature_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1036 if (creature_ptr->magic_num1[TR_RES_ACID] < es_ptr->value) able[ctr] = FALSE;
1038 case ESSENCE_SUSTAIN:
1039 strcat(dummy, _("(耐火炎+耐冷気+耐電撃+耐酸)", "(r.fire+r.cold+r.elec+r.acid)"));
1040 if (creature_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1041 if (creature_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1042 if (creature_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1043 if (creature_ptr->magic_num1[TR_RES_ACID] < es_ptr->value) able[ctr] = FALSE;
1048 if (!able[ctr]) col = TERM_RED;
1050 if (es_ptr->essence != -1)
1052 sprintf(dummy2, "%-49s %3d/%d", dummy, es_ptr->value, (int)creature_ptr->magic_num1[es_ptr->essence]);
1056 sprintf(dummy2, "%-49s %3d/(\?\?)", dummy, es_ptr->value);
1059 c_prt(col, dummy2, ctr + 2, x);
1078 ask = (isupper(choice));
1081 if (ask) choice = (char)tolower(choice);
1083 /* Extract request */
1084 i = (islower(choice) ? A2I(choice) : -1);
1087 /* Totally Illegal */
1088 if ((i < 0) || (i >= max_num) || !able[i])
1100 (void)strnfmt(tmp_val, 78, _("%sを付加しますか? ", "Add the abilitiy of %s? "), essence_info[num[i]].add_name);
1102 /* Belay that order */
1103 if (!get_check(tmp_val)) continue;
1109 if (redraw) screen_load();
1115 es_ptr = &essence_info[num[i]];
1117 if (es_ptr->add == ESSENCE_SLAY_GLOVE)
1119 else if (mode == 1 || mode == 5)
1120 item_tester_hook = item_tester_hook_melee_ammo;
1121 else if (es_ptr->add == ESSENCE_ATTACK)
1122 item_tester_hook = object_allow_enchant_weapon;
1123 else if (es_ptr->add == ESSENCE_AC)
1124 item_tester_hook = object_is_armour;
1126 item_tester_hook = object_is_weapon_armour_ammo;
1128 q = _("どのアイテムを改良しますか?", "Improve which item? ");
1129 s = _("改良できるアイテムがありません。", "You have nothing to improve.");
1131 o_ptr = choose_object(creature_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), tval);
1134 if ((mode != 10) && (object_is_artifact(o_ptr) || object_is_smith(o_ptr)))
1136 msg_print(_("そのアイテムはこれ以上改良できない。", "This item can not be improved any further."));
1140 object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1142 use_essence = es_ptr->value;
1143 if ((o_ptr->tval >= TV_SHOT) && (o_ptr->tval <= TV_BOLT)) use_essence = (use_essence + 9) / 10;
1144 if (o_ptr->number > 1)
1146 use_essence *= o_ptr->number;
1147 msg_format(_("%d個あるのでエッセンスは%d必要です。", "For %d items, it will take %d essences."), o_ptr->number, use_essence);
1150 if (es_ptr->essence != -1)
1152 if (creature_ptr->magic_num1[es_ptr->essence] < use_essence)
1154 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1157 if (is_pval_flag(es_ptr->add))
1159 if (o_ptr->pval < 0)
1161 msg_print(_("このアイテムの能力修正を強化することはできない。", "You cannot increase magic number of this item."));
1164 else if (es_ptr->add == TR_BLOWS)
1166 if (o_ptr->pval > 1)
1168 if (!get_check(_("修正値は1になります。よろしいですか?", "The magic number of this weapon will become 1. Are you sure? "))) return;
1172 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1174 else if (o_ptr->pval > 0)
1176 use_essence *= o_ptr->pval;
1177 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1183 PARAMETER_VALUE pval;
1184 PARAMETER_VALUE limit = MIN(5, creature_ptr->magic_num1[es_ptr->essence] / es_ptr->value);
1186 sprintf(tmp, _("いくつ付加しますか? (1-%d): ", "Enchant how many? (1-%d): "), limit);
1187 strcpy(tmp_val, "1");
1189 if (!get_string(tmp, tmp_val, 1)) return;
1190 pval = (PARAMETER_VALUE)atoi(tmp_val);
1191 if (pval > limit) pval = limit;
1192 else if (pval < 1) pval = 1;
1193 o_ptr->pval += pval;
1194 use_essence *= pval;
1195 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1198 if (creature_ptr->magic_num1[es_ptr->essence] < use_essence)
1200 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1204 else if (es_ptr->add == ESSENCE_SLAY_GLOVE)
1211 strcpy(tmp_val, "1");
1212 if (!get_string(format(_("いくつ付加しますか? (1-%d):", "Enchant how many? (1-%d):"), creature_ptr->lev / 7 + 3), tmp_val, 2)) return;
1213 val = atoi(tmp_val);
1214 if (val > creature_ptr->lev / 7 + 3) val = creature_ptr->lev / 7 + 3;
1215 else if (val < 1) val = 1;
1217 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1218 if (creature_ptr->magic_num1[es_ptr->essence] < use_essence)
1220 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1223 get_to_h = ((val + 1) / 2 + randint0(val / 2 + 1));
1224 get_to_d = ((val + 1) / 2 + randint0(val / 2 + 1));
1225 o_ptr->xtra4 = (get_to_h << 8) + get_to_d;
1226 o_ptr->to_h += get_to_h;
1227 o_ptr->to_d += get_to_d;
1229 creature_ptr->magic_num1[es_ptr->essence] -= use_essence;
1230 if (es_ptr->add == ESSENCE_ATTACK)
1232 if ((o_ptr->to_h >= creature_ptr->lev / 5 + 5) && (o_ptr->to_d >= creature_ptr->lev / 5 + 5))
1234 msg_print(_("改良に失敗した。", "You failed to enchant."));
1235 take_turn(creature_ptr, 100);
1240 if (o_ptr->to_h < creature_ptr->lev / 5 + 5) o_ptr->to_h++;
1241 if (o_ptr->to_d < creature_ptr->lev / 5 + 5) o_ptr->to_d++;
1244 else if (es_ptr->add == ESSENCE_AC)
1246 if (o_ptr->to_a >= creature_ptr->lev / 5 + 5)
1248 msg_print(_("改良に失敗した。", "You failed to enchant."));
1249 take_turn(creature_ptr, 100);
1254 if (o_ptr->to_a < creature_ptr->lev / 5 + 5) o_ptr->to_a++;
1259 o_ptr->xtra3 = es_ptr->add + 1;
1264 bool success = TRUE;
1266 switch (es_ptr->add)
1268 case ESSENCE_SH_FIRE:
1269 if ((creature_ptr->magic_num1[TR_BRAND_FIRE] < use_essence) || (creature_ptr->magic_num1[TR_RES_FIRE] < use_essence))
1274 creature_ptr->magic_num1[TR_BRAND_FIRE] -= use_essence;
1275 creature_ptr->magic_num1[TR_RES_FIRE] -= use_essence;
1277 case ESSENCE_SH_ELEC:
1278 if ((creature_ptr->magic_num1[TR_BRAND_ELEC] < use_essence) || (creature_ptr->magic_num1[TR_RES_ELEC] < use_essence))
1283 creature_ptr->magic_num1[TR_BRAND_ELEC] -= use_essence;
1284 creature_ptr->magic_num1[TR_RES_ELEC] -= use_essence;
1286 case ESSENCE_SH_COLD:
1287 if ((creature_ptr->magic_num1[TR_BRAND_COLD] < use_essence) || (creature_ptr->magic_num1[TR_RES_COLD] < use_essence))
1292 creature_ptr->magic_num1[TR_BRAND_COLD] -= use_essence;
1293 creature_ptr->magic_num1[TR_RES_COLD] -= use_essence;
1295 case ESSENCE_RESISTANCE:
1296 case ESSENCE_SUSTAIN:
1297 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))
1302 creature_ptr->magic_num1[TR_RES_ACID] -= use_essence;
1303 creature_ptr->magic_num1[TR_RES_ELEC] -= use_essence;
1304 creature_ptr->magic_num1[TR_RES_FIRE] -= use_essence;
1305 creature_ptr->magic_num1[TR_RES_COLD] -= use_essence;
1310 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1313 if (es_ptr->add == ESSENCE_SUSTAIN)
1315 add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
1316 add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
1317 add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
1318 add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
1322 o_ptr->xtra3 = es_ptr->add + 1;
1326 take_turn(creature_ptr, 100);
1327 _(msg_format("%sに%sの能力を付加しました。", o_name, es_ptr->add_name),
1328 msg_format("You have added ability of %s to %s.", es_ptr->add_name, o_name));
1329 creature_ptr->update |= (PU_COMBINE | PU_REORDER);
1330 creature_ptr->window |= (PW_INVEN);
1337 static void erase_essence(player_type *creature_ptr)
1342 GAME_TEXT o_name[MAX_NLEN];
1343 BIT_FLAGS flgs[TR_FLAG_SIZE];
1345 item_tester_hook = object_is_smith;
1347 q = _("どのアイテムのエッセンスを消去しますか?", "Remove from which item? ");
1348 s = _("エッセンスを付加したアイテムがありません。", "You have nothing to remove essence.");
1350 o_ptr = choose_object(creature_ptr, &item, q, s, (USE_INVEN | USE_FLOOR), 0);
1353 object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1354 if (!get_check(format(_("よろしいですか? [%s]", "Are you sure? [%s]"), o_name))) return;
1356 take_turn(creature_ptr, 100);
1358 if (o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE)
1360 o_ptr->to_h -= (o_ptr->xtra4 >> 8);
1361 o_ptr->to_d -= (o_ptr->xtra4 & 0x000f);
1363 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
1364 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
1367 object_flags(o_ptr, flgs);
1368 if (!(have_pval_flags(flgs))) o_ptr->pval = 0;
1369 msg_print(_("エッセンスを取り去った。", "You removed all essence you have added."));
1370 creature_ptr->update |= (PU_COMBINE | PU_REORDER);
1371 creature_ptr->window |= (PW_INVEN);
1375 * @brief 鍛冶コマンドのメインルーチン
1376 * @param only_browse TRUEならばエッセンス一覧の表示のみを行う
1379 void do_cmd_kaji(player_type *creature_ptr, bool only_browse)
1381 COMMAND_CODE mode = 0;
1384 COMMAND_CODE menu_line = (use_menu ? 1 : 0);
1388 if (cmd_limit_confused(creature_ptr)) return;
1389 if (cmd_limit_blind(creature_ptr)) return;
1390 if (cmd_limit_image(creature_ptr)) return;
1393 if (!(repeat_pull(&mode) && 1 <= mode && mode <= 5))
1395 if (only_browse) screen_save();
1397 if (!only_browse) screen_save();
1403 prt(format(" %s エッセンス一覧", (menu_line == 1) ? "》" : " "), 2, 14);
1404 prt(format(" %s エッセンス抽出", (menu_line == 2) ? "》" : " "), 3, 14);
1405 prt(format(" %s エッセンス消去", (menu_line == 3) ? "》" : " "), 4, 14);
1406 prt(format(" %s エッセンス付加", (menu_line == 4) ? "》" : " "), 5, 14);
1407 prt(format(" %s 武器/防具強化", (menu_line == 5) ? "》" : " "), 6, 14);
1408 prt(format("どの種類の技術を%sますか?", only_browse ? "調べ" : "使い"), 0, 0);
1410 prt(format(" %s List essences", (menu_line == 1) ? "> " : " "), 2, 14);
1411 prt(format(" %s Extract essence", (menu_line == 2) ? "> " : " "), 3, 14);
1412 prt(format(" %s Remove essence", (menu_line == 3) ? "> " : " "), 4, 14);
1413 prt(format(" %s Add essence", (menu_line == 4) ? "> " : " "), 5, 14);
1414 prt(format(" %s Enchant weapon/armor", (menu_line == 5) ? "> " : " "), 6, 14);
1415 prt(format("Choose command from menu."), 0, 0);
1442 if (menu_line > 5) menu_line -= 5;
1450 prt(_(" a) エッセンス一覧", " a) List essences"), 2, 14);
1451 prt(_(" b) エッセンス抽出", " b) Extract essence"), 3, 14);
1452 prt(_(" c) エッセンス消去", " c) Remove essence"), 4, 14);
1453 prt(_(" d) エッセンス付加", " d) Add essence"), 5, 14);
1454 prt(_(" e) 武器/防具強化", " e) Enchant weapon/armor"), 6, 14);
1456 if (!get_com(format("どの能力を%sますか:", only_browse ? "調べ" : "使い"), &choice, TRUE))
1458 if (!get_com("Command :", &choice, TRUE))
1495 /* Clear lines, position cursor (really should use strlen here) */
1496 Term_erase(14, 21, 255);
1497 Term_erase(14, 20, 255);
1498 Term_erase(14, 19, 255);
1499 Term_erase(14, 18, 255);
1500 Term_erase(14, 17, 255);
1501 Term_erase(14, 16, 255);
1503 roff_to_buf(kaji_tips[mode - 1], 62, temp, sizeof(temp));
1504 for (j = 0, line = 17; temp[j]; j += (1 + strlen(&temp[j])))
1506 prt(&temp[j], line, 15);
1511 if (!only_browse) screen_load();
1512 } while (only_browse);
1517 case 1: display_essence(creature_ptr); break;
1518 case 2: drain_essence(creature_ptr); break;
1519 case 3: erase_essence(creature_ptr); break;
1521 mode = choose_essence();
1524 add_essence(creature_ptr, mode);
1526 case 5: add_essence(creature_ptr, 10); break;