2 * @brief プレイヤーの鍛冶コマンド実装
7 #include "cmd-item/cmd-smith.h"
8 #include "autopick/autopick.h"
9 #include "cmd/cmd-basic.h"
10 #include "core/asking-player.h"
11 #include "game-option/text-display-options.h"
12 #include "inventory/player-inventory.h"
13 #include "io/input-key-acceptor.h"
14 #include "main/sound-of-music.h"
15 #include "object-enchant/object-ego.h"
16 #include "object-enchant/special-object-flags.h"
17 #include "object-enchant/tr-types.h"
18 #include "object-enchant/trc-types.h"
19 #include "object/item-use-flags.h"
20 #include "object/object-flags.h" // todo 相互参照している.
21 #include "object/object-flavor.h"
22 #include "object/object-generator.h"
23 #include "object/object-hook.h"
24 #include "perception/object-perception.h"
25 #include "player/player-status.h"
26 #include "term/screen-processor.h"
27 #include "term/term-color-types.h"
28 #include "view/display-main-window.h"
29 #include "view/display-messages.h"
32 * エッセンス情報の構造体 / A structure for smithing
35 int add; /* TR flag number or special essence id */
36 concptr add_name; /* Name of this ability */
37 ESSENCE_IDX type; /* Menu number */
38 int essence; /* Index for carrying essences */
39 int value; /* Needed value to add this ability */
44 * エッセンス情報テーブル Smithing type data for Weapon smith
47 static essence_type essence_info[] =
49 {TR_STR, "腕力", 4, TR_STR, 20},
50 {TR_INT, "知能", 4, TR_INT, 20},
51 {TR_WIS, "賢さ", 4, TR_WIS, 20},
52 {TR_DEX, "器用さ", 4, TR_DEX, 20},
53 {TR_CON, "耐久力", 4, TR_CON, 20},
54 {TR_CHR, "魅力", 4, TR_CHR, 20},
55 {TR_MAGIC_MASTERY, "魔力支配", 4, TR_MAGIC_MASTERY, 20},
56 {TR_STEALTH, "隠密", 4, TR_STEALTH, 40},
57 {TR_SEARCH, "探索", 4, TR_SEARCH, 15},
58 {TR_INFRA, "赤外線視力", 4, TR_INFRA, 15},
59 {TR_TUNNEL, "採掘", 4, TR_TUNNEL, 15},
60 {TR_SPEED, "スピード", 4, TR_SPEED, 12},
61 {TR_BLOWS, "追加攻撃", 1, TR_BLOWS, 20},
62 {TR_CHAOTIC, "カオス攻撃", 1, TR_CHAOTIC, 15},
63 {TR_VAMPIRIC, "吸血攻撃", 1, TR_VAMPIRIC, 60},
64 {TR_IMPACT, "地震発動", 7, TR_IMPACT, 15},
65 {TR_BRAND_POIS, "毒殺", 1, TR_BRAND_POIS, 20},
66 {TR_BRAND_ACID, "溶解", 1, TR_BRAND_ACID, 20},
67 {TR_BRAND_ELEC, "電撃", 1, TR_BRAND_ELEC, 20},
68 {TR_BRAND_FIRE, "焼棄", 1, TR_BRAND_FIRE, 20},
69 {TR_BRAND_COLD, "凍結", 1, TR_BRAND_COLD, 20},
70 {TR_SUST_STR, "腕力維持", 3, TR_SUST_STR, 15},
71 {TR_SUST_INT, "知能維持", 3, TR_SUST_STR, 15},
72 {TR_SUST_WIS, "賢さ維持", 3, TR_SUST_STR, 15},
73 {TR_SUST_DEX, "器用さ維持", 3, TR_SUST_STR, 15},
74 {TR_SUST_CON, "耐久力維持", 3, TR_SUST_STR, 15},
75 {TR_SUST_CHR, "魅力維持", 3, TR_SUST_STR, 15},
76 {TR_IM_ACID, "酸免疫", 2, TR_IM_ACID, 20},
77 {TR_IM_ELEC, "電撃免疫", 2, TR_IM_ACID, 20},
78 {TR_IM_FIRE, "火炎免疫", 2, TR_IM_ACID, 20},
79 {TR_IM_COLD, "冷気免疫", 2, TR_IM_ACID, 20},
80 {TR_REFLECT, "反射", 2, TR_REFLECT, 20},
81 {TR_FREE_ACT, "麻痺知らず", 3, TR_FREE_ACT, 20},
82 {TR_HOLD_EXP, "経験値維持", 3, TR_HOLD_EXP, 20},
83 {TR_RES_ACID, "耐酸", 2, TR_RES_ACID, 15},
84 {TR_RES_ELEC, "耐電撃", 2, TR_RES_ELEC, 15},
85 {TR_RES_FIRE, "耐火炎", 2, TR_RES_FIRE, 15},
86 {TR_RES_COLD, "耐冷気", 2, TR_RES_COLD, 15},
87 {TR_RES_POIS, "耐毒", 2, TR_RES_POIS, 25},
88 {TR_RES_FEAR, "耐恐怖", 2, TR_RES_FEAR, 20},
89 {TR_RES_LITE, "耐閃光", 2, TR_RES_LITE, 20},
90 {TR_RES_DARK, "耐暗黒", 2, TR_RES_DARK, 20},
91 {TR_RES_BLIND, "耐盲目", 2, TR_RES_BLIND, 20},
92 {TR_RES_CONF, "耐混乱", 2, TR_RES_CONF, 20},
93 {TR_RES_SOUND, "耐轟音", 2, TR_RES_SOUND, 20},
94 {TR_RES_SHARDS, "耐破片", 2, TR_RES_SHARDS, 20},
95 {TR_RES_NETHER, "耐地獄", 2, TR_RES_NETHER, 20},
96 {TR_RES_NEXUS, "耐因果混乱", 2, TR_RES_NEXUS, 20},
97 {TR_RES_CHAOS, "耐カオス", 2, TR_RES_CHAOS, 20},
98 {TR_RES_DISEN, "耐劣化", 2, TR_RES_DISEN, 20},
99 {TR_SH_FIRE, "", 0, -2, 0},
100 {TR_SH_ELEC, "", 0, -2, 0},
101 {TR_SH_COLD, "", 0, -2, 0},
102 {TR_NO_MAGIC, "反魔法", 3, TR_NO_MAGIC, 15},
103 {TR_WARNING, "警告", 3, TR_WARNING, 20},
104 {TR_LEVITATION, "浮遊", 3, TR_LEVITATION, 20},
105 {TR_LITE_1, "永久光源", 3, TR_LITE_1, 15},
106 {TR_LITE_2, "", 0, -2, 0},
107 {TR_LITE_3, "", 0, -2, 0},
108 {TR_SEE_INVIS, "可視透明", 3, TR_SEE_INVIS, 20},
109 {TR_TELEPATHY, "テレパシー", 6, TR_TELEPATHY, 15},
110 {TR_SLOW_DIGEST, "遅消化", 3, TR_SLOW_DIGEST, 15},
111 {TR_REGEN, "急速回復", 3, TR_REGEN, 20},
112 {TR_TELEPORT, "テレポート", 3, TR_TELEPORT, 25},
114 {TR_SLAY_EVIL, "邪悪倍打", 5, TR_SLAY_EVIL, 100},
115 {TR_KILL_EVIL, "邪悪倍倍打", 0, TR_SLAY_EVIL, 60},
116 {TR_SLAY_ANIMAL, "動物倍打", 5, TR_SLAY_ANIMAL, 20},
117 {TR_KILL_ANIMAL, "動物倍倍打", 5, TR_SLAY_ANIMAL, 60},
118 {TR_SLAY_UNDEAD, "不死倍打", 5, TR_SLAY_UNDEAD, 20},
119 {TR_KILL_UNDEAD, "不死倍倍打", 5, TR_SLAY_UNDEAD, 60},
120 {TR_SLAY_DEMON, "悪魔倍打", 5, TR_SLAY_DEMON, 20},
121 {TR_KILL_DEMON, "悪魔倍倍打", 5, TR_SLAY_DEMON, 60},
122 {TR_SLAY_ORC, "オーク倍打", 5, TR_SLAY_ORC, 15},
123 {TR_KILL_ORC, "オーク倍倍打", 5, TR_SLAY_ORC, 60},
124 {TR_SLAY_TROLL, "トロル倍打", 5, TR_SLAY_TROLL, 15},
125 {TR_KILL_TROLL, "トロル倍倍打", 5, TR_SLAY_TROLL, 60},
126 {TR_SLAY_GIANT, "巨人倍打", 5, TR_SLAY_GIANT, 20},
127 {TR_KILL_GIANT, "巨人倍倍打", 5, TR_SLAY_GIANT, 60},
128 {TR_SLAY_DRAGON, "竜倍打", 5, TR_SLAY_DRAGON, 20},
129 {TR_KILL_DRAGON, "竜倍倍打", 5, TR_SLAY_DRAGON, 60},
130 {TR_SLAY_HUMAN, "人間倍打", 5, TR_SLAY_HUMAN, 20},
131 {TR_KILL_HUMAN, "人間倍倍打", 5, TR_SLAY_HUMAN, 60},
133 {TR_ESP_ANIMAL, "動物ESP", 6, TR_SLAY_ANIMAL, 40},
134 {TR_ESP_UNDEAD, "不死ESP", 6, TR_SLAY_UNDEAD, 40},
135 {TR_ESP_DEMON, "悪魔ESP", 6, TR_SLAY_DEMON, 40},
136 {TR_ESP_ORC, "オークESP", 6, TR_SLAY_ORC, 40},
137 {TR_ESP_TROLL, "トロルESP", 6, TR_SLAY_TROLL, 40},
138 {TR_ESP_GIANT, "巨人ESP", 6, TR_SLAY_GIANT, 40},
139 {TR_ESP_DRAGON, "竜ESP", 6, TR_SLAY_DRAGON, 40},
140 {TR_ESP_HUMAN, "人間ESP", 6, TR_SLAY_HUMAN, 40},
142 {ESSENCE_ATTACK, "攻撃", 10, TR_ES_ATTACK, 30},
143 {ESSENCE_AC, "防御", 10, TR_ES_AC, 15},
144 {ESSENCE_TMP_RES_ACID, "酸耐性発動", 7, TR_RES_ACID, 50},
145 {ESSENCE_TMP_RES_ELEC, "電撃耐性発動", 7, TR_RES_ELEC, 50},
146 {ESSENCE_TMP_RES_FIRE, "火炎耐性発動", 7, TR_RES_FIRE, 50},
147 {ESSENCE_TMP_RES_COLD, "冷気耐性発動", 7, TR_RES_COLD, 50},
148 {ESSENCE_SH_FIRE, "火炎オーラ", 7, -1, 50},
149 {ESSENCE_SH_ELEC, "電撃オーラ", 7, -1, 50},
150 {ESSENCE_SH_COLD, "冷気オーラ", 7, -1, 50},
151 {ESSENCE_RESISTANCE, "全耐性", 2, -1, 150},
152 {ESSENCE_SUSTAIN, "装備保持", 10, -1, 10},
153 {ESSENCE_SLAY_GLOVE, "殺戮の小手", 1, TR_ES_ATTACK, 200},
158 static essence_type essence_info[] =
160 {TR_STR, "strength", 4, TR_STR, 20},
161 {TR_INT, "intelligence", 4, TR_INT, 20},
162 {TR_WIS, "wisdom", 4, TR_WIS, 20},
163 {TR_DEX, "dexterity", 4, TR_DEX, 20},
164 {TR_CON, "constitution", 4, TR_CON, 20},
165 {TR_CHR, "charisma", 4, TR_CHR, 20},
166 {TR_MAGIC_MASTERY, "magic mastery", 4, TR_MAGIC_MASTERY, 20},
167 {TR_STEALTH, "stealth", 4, TR_STEALTH, 40},
168 {TR_SEARCH, "serching", 4, TR_SEARCH, 15},
169 {TR_INFRA, "infravision", 4, TR_INFRA, 15},
170 {TR_TUNNEL, "digging", 4, TR_TUNNEL, 15},
171 {TR_SPEED, "speed", 4, TR_SPEED, 12},
172 {TR_BLOWS, "extra attack", 1, TR_BLOWS, 20},
173 {TR_CHAOTIC, "chaos brand", 1, TR_CHAOTIC, 15},
174 {TR_VAMPIRIC, "vampiric brand", 1, TR_VAMPIRIC, 60},
175 {TR_IMPACT, "quake activation", 7, TR_IMPACT, 15},
176 {TR_BRAND_POIS, "poison brand", 1, TR_BRAND_POIS, 20},
177 {TR_BRAND_ACID, "acid brand", 1, TR_BRAND_ACID, 20},
178 {TR_BRAND_ELEC, "electric brand", 1, TR_BRAND_ELEC, 20},
179 {TR_BRAND_FIRE, "fire brand", 1, TR_BRAND_FIRE, 20},
180 {TR_BRAND_COLD, "cold brand", 1, TR_BRAND_COLD, 20},
181 {TR_SUST_STR, "sustain strength", 3, TR_SUST_STR, 15},
182 {TR_SUST_INT, "sustain intelligence", 3, TR_SUST_STR, 15},
183 {TR_SUST_WIS, "sustain wisdom", 3, TR_SUST_STR, 15},
184 {TR_SUST_DEX, "sustain dexterity", 3, TR_SUST_STR, 15},
185 {TR_SUST_CON, "sustain constitution", 3, TR_SUST_STR, 15},
186 {TR_SUST_CHR, "sustain charisma", 3, TR_SUST_STR, 15},
187 {TR_IM_ACID, "acid immunity", 2, TR_IM_ACID, 20},
188 {TR_IM_ELEC, "electric immunity", 2, TR_IM_ACID, 20},
189 {TR_IM_FIRE, "fire immunity", 2, TR_IM_ACID, 20},
190 {TR_IM_COLD, "cold immunity", 2, TR_IM_ACID, 20},
191 {TR_REFLECT, "reflection", 2, TR_REFLECT, 20},
192 {TR_FREE_ACT, "free action", 3, TR_FREE_ACT, 20},
193 {TR_HOLD_EXP, "hold experience", 3, TR_HOLD_EXP, 20},
194 {TR_RES_ACID, "resistance to acid", 2, TR_RES_ACID, 15},
195 {TR_RES_ELEC, "resistance to electric", 2, TR_RES_ELEC, 15},
196 {TR_RES_FIRE, "resistance to fire", 2, TR_RES_FIRE, 15},
197 {TR_RES_COLD, "resistance to cold", 2, TR_RES_COLD, 15},
198 {TR_RES_POIS, "resistance to poison", 2, TR_RES_POIS, 25},
199 {TR_RES_FEAR, "resistance to fear", 2, TR_RES_FEAR, 20},
200 {TR_RES_LITE, "resistance to light", 2, TR_RES_LITE, 20},
201 {TR_RES_DARK, "resistance to dark", 2, TR_RES_DARK, 20},
202 {TR_RES_BLIND, "resistance to blind", 2, TR_RES_BLIND, 20},
203 {TR_RES_CONF, "resistance to confusion", 2, TR_RES_CONF, 20},
204 {TR_RES_SOUND, "resistance to sound", 2, TR_RES_SOUND, 20},
205 {TR_RES_SHARDS, "resistance to shard", 2, TR_RES_SHARDS, 20},
206 {TR_RES_NETHER, "resistance to nether", 2, TR_RES_NETHER, 20},
207 {TR_RES_NEXUS, "resistance to nexus", 2, TR_RES_NEXUS, 20},
208 {TR_RES_CHAOS, "resistance to chaos", 2, TR_RES_CHAOS, 20},
209 {TR_RES_DISEN, "resistance to disenchantment", 2, TR_RES_DISEN, 20},
210 {TR_SH_FIRE, "", 0, -2, 0},
211 {TR_SH_ELEC, "", 0, -2, 0},
212 {TR_SH_COLD, "", 0, -2, 0},
213 {TR_NO_MAGIC, "anti magic", 3, TR_NO_MAGIC, 15},
214 {TR_WARNING, "warning", 3, TR_WARNING, 20},
215 {TR_LEVITATION, "levitation", 3, TR_LEVITATION, 20},
216 {TR_LITE_1, "permanent light", 3, TR_LITE_1, 15},
217 {TR_LITE_2, "", 0, -2, 0},
218 {TR_LITE_3, "", 0, -2, 0},
219 {TR_SEE_INVIS, "see invisible", 3, TR_SEE_INVIS, 20},
220 {TR_TELEPATHY, "telepathy", 6, TR_TELEPATHY, 15},
221 {TR_SLOW_DIGEST, "slow digestion", 3, TR_SLOW_DIGEST, 15},
222 {TR_REGEN, "regeneration", 3, TR_REGEN, 20},
223 {TR_TELEPORT, "teleport", 3, TR_TELEPORT, 25},
225 {TR_SLAY_EVIL, "slay evil", 5, TR_SLAY_EVIL, 100},
226 {TR_SLAY_ANIMAL, "slay animal", 5, TR_SLAY_ANIMAL, 20},
227 {TR_KILL_ANIMAL, "kill animal", 5, TR_SLAY_ANIMAL, 60},
228 {TR_KILL_EVIL, "kill evil", 0, TR_SLAY_EVIL, 60},
229 {TR_SLAY_UNDEAD, "slay undead", 5, TR_SLAY_UNDEAD, 20},
230 {TR_KILL_UNDEAD, "kill undead", 5, TR_SLAY_UNDEAD, 60},
231 {TR_SLAY_DEMON, "slay demon", 5, TR_SLAY_DEMON, 20},
232 {TR_KILL_DEMON, "kill demon", 5, TR_SLAY_DEMON, 60},
233 {TR_SLAY_ORC, "slay orc", 5, TR_SLAY_ORC, 15},
234 {TR_KILL_ORC, "kill orc", 5, TR_SLAY_ORC, 60},
235 {TR_SLAY_TROLL, "slay troll", 5, TR_SLAY_TROLL, 15},
236 {TR_KILL_TROLL, "kill troll", 5, TR_SLAY_TROLL, 60},
237 {TR_SLAY_GIANT, "slay giant", 5, TR_SLAY_GIANT, 20},
238 {TR_KILL_GIANT, "kill giant", 5, TR_SLAY_GIANT, 60},
239 {TR_SLAY_DRAGON, "slay dragon", 5, TR_SLAY_DRAGON, 20},
240 {TR_KILL_DRAGON, "kill dragon", 5, TR_SLAY_DRAGON, 60},
241 {TR_SLAY_HUMAN, "slay human", 5, TR_SLAY_HUMAN, 20},
242 {TR_KILL_HUMAN, "kill human", 5, TR_SLAY_HUMAN, 60},
244 {TR_ESP_ANIMAL, "sense animal", 6, TR_SLAY_ANIMAL, 40},
245 {TR_ESP_UNDEAD, "sense undead", 6, TR_SLAY_UNDEAD, 40},
246 {TR_ESP_DEMON, "sense demon", 6, TR_SLAY_DEMON, 40},
247 {TR_ESP_ORC, "sense orc", 6, TR_SLAY_ORC, 40},
248 {TR_ESP_TROLL, "sense troll", 6, TR_SLAY_TROLL, 40},
249 {TR_ESP_GIANT, "sense giant", 6, TR_SLAY_GIANT, 40},
250 {TR_ESP_DRAGON, "sense dragon", 6, TR_SLAY_DRAGON, 40},
251 {TR_ESP_HUMAN, "sense human", 6, TR_SLAY_HUMAN, 40},
253 {ESSENCE_ATTACK, "weapon enchant", 10, TR_ES_ATTACK, 30},
254 {ESSENCE_AC, "armor enchant", 10, TR_ES_AC, 15},
255 {ESSENCE_TMP_RES_ACID, "resist acid activation", 7, TR_RES_ACID, 50},
256 {ESSENCE_TMP_RES_ELEC, "resist electricity activation", 7, TR_RES_ELEC, 50},
257 {ESSENCE_TMP_RES_FIRE, "resist fire activation", 7, TR_RES_FIRE, 50},
258 {ESSENCE_TMP_RES_COLD, "resist cold activation", 7, TR_RES_COLD, 50},
259 {ESSENCE_SH_FIRE, "fiery sheath", 7, -1, 50},
260 {ESSENCE_SH_ELEC, "electric sheath", 7, -1, 50},
261 {ESSENCE_SH_COLD, "sheath of coldness", 7, -1, 50},
262 {ESSENCE_RESISTANCE, "resistance", 2, -1, 150},
263 {ESSENCE_SUSTAIN, "elements proof", 10, -1, 10},
264 {ESSENCE_SLAY_GLOVE, "gauntlets of slaying", 1, TR_ES_ATTACK, 200},
272 * エッセンス名テーブル / Essense names for Weapon smith
275 concptr essence_name[] =
378 concptr essence_name[] =
480 static concptr const kaji_tips[5] =
483 "現在持っているエッセンスの一覧を表示する。",
484 "アイテムからエッセンスを取り出す。エッセンスを取られたアイテムは全く魔法がかかっていない初期状態に戻る。",
485 "既にエッセンスが付加されたアイテムからエッセンスのみ消し去る。エッセンスは手に入らない。",
486 "アイテムにエッセンスを付加する。既にエッセンスが付加されたアイテムやアーティファクトには付加できない。",
487 "武器や防具を強化したり、攻撃で傷つかないようにしたりする。エッセンスが付加されたアイテムやアーティファクトに対しても使用できる。",
489 "Display essences you have.",
490 "Extract essences from an item. The item become non magical.",
491 "Remove added essences from an equipment which was improved before. The removed essence will be ruined.",
492 "Add essences to an item. The improved items or artifacts cannot be reimprove.",
493 "Enchant an equipment or make an equiment element-proofed. The improved items and artifacts can be enchanted too.",
499 * @brief 所持しているエッセンス一覧を表示する
502 static void display_essence(player_type *creature_ptr)
507 for (i = 1; i < 22; i++)
511 prt(_("エッセンス 個数 エッセンス 個数 エッセンス 個数",
512 "Essence Num Essence Num Essence Num "), 1, 8);
513 for (i = 0; essence_name[i]; i++)
515 if (!essence_name[i][0]) continue;
516 prt(format("%-11s %5d", essence_name[i], creature_ptr->magic_num1[i]), 2 + num % 21, 8 + num / 21 * 22);
519 prt(_("現在所持しているエッセンス", "List of all essences you have."), 0, 0);
527 * @param creature_ptr プレーヤーへの参照ポインタ
530 static void drain_essence(player_type *creature_ptr)
532 int drain_value[sizeof(creature_ptr->magic_num1) / sizeof(s32b)];
536 bool observe = FALSE;
537 int old_ds, old_dd, old_to_h, old_to_d, old_ac, old_to_a, old_pval, old_name2;
538 TIME_EFFECT old_timeout;
539 BIT_FLAGS old_flgs[TR_FLAG_SIZE], new_flgs[TR_FLAG_SIZE];
545 OBJECT_IDX next_o_idx;
548 for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
551 item_tester_hook = object_is_weapon_armour_ammo;
553 q = _("どのアイテムから抽出しますか?", "Extract from which item? ");
554 s = _("抽出できるアイテムがありません。", "You have nothing you can extract from.");
556 o_ptr = choose_object(creature_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), 0);
559 if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))
561 GAME_TEXT o_name[MAX_NLEN];
562 object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
563 if (!get_check(format(_("本当に%sから抽出してよろしいですか?", "Really extract from %s? "), o_name))) return;
566 take_turn(creature_ptr, 100);
568 object_flags(o_ptr, old_flgs);
569 if (have_flag(old_flgs, TR_KILL_DRAGON)) add_flag(old_flgs, TR_SLAY_DRAGON);
570 if (have_flag(old_flgs, TR_KILL_ANIMAL)) add_flag(old_flgs, TR_SLAY_ANIMAL);
571 if (have_flag(old_flgs, TR_KILL_EVIL)) add_flag(old_flgs, TR_SLAY_EVIL);
572 if (have_flag(old_flgs, TR_KILL_UNDEAD)) add_flag(old_flgs, TR_SLAY_UNDEAD);
573 if (have_flag(old_flgs, TR_KILL_DEMON)) add_flag(old_flgs, TR_SLAY_DEMON);
574 if (have_flag(old_flgs, TR_KILL_ORC)) add_flag(old_flgs, TR_SLAY_ORC);
575 if (have_flag(old_flgs, TR_KILL_TROLL)) add_flag(old_flgs, TR_SLAY_TROLL);
576 if (have_flag(old_flgs, TR_KILL_GIANT)) add_flag(old_flgs, TR_SLAY_GIANT);
577 if (have_flag(old_flgs, TR_KILL_HUMAN)) add_flag(old_flgs, TR_SLAY_HUMAN);
579 old_to_a = o_ptr->to_a;
581 old_to_h = o_ptr->to_h;
582 old_to_d = o_ptr->to_d;
585 old_pval = o_ptr->pval;
586 old_name2 = o_ptr->name2;
587 old_timeout = o_ptr->timeout;
588 if (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE | TRC_PERMA_CURSE)) dec--;
589 if (have_flag(old_flgs, TR_ADD_L_CURSE)) dec--;
590 if (have_flag(old_flgs, TR_ADD_H_CURSE)) dec--;
591 if (have_flag(old_flgs, TR_AGGRAVATE)) dec--;
592 if (have_flag(old_flgs, TR_NO_TELE)) dec--;
593 if (have_flag(old_flgs, TR_DRAIN_EXP)) dec--;
594 if (have_flag(old_flgs, TR_DRAIN_HP)) dec--;
595 if (have_flag(old_flgs, TR_DRAIN_MANA)) dec--;
596 if (have_flag(old_flgs, TR_CALL_ANIMAL)) dec--;
597 if (have_flag(old_flgs, TR_CALL_DEMON)) dec--;
598 if (have_flag(old_flgs, TR_CALL_DRAGON)) dec--;
599 if (have_flag(old_flgs, TR_CALL_UNDEAD)) dec--;
600 if (have_flag(old_flgs, TR_COWARDICE)) dec--;
601 if (have_flag(old_flgs, TR_LOW_MELEE)) dec--;
602 if (have_flag(old_flgs, TR_LOW_AC)) dec--;
603 if (have_flag(old_flgs, TR_LOW_MAGIC)) dec--;
604 if (have_flag(old_flgs, TR_FAST_DIGEST)) dec--;
605 if (have_flag(old_flgs, TR_SLOW_REGEN)) dec--;
606 if (have_flag(old_flgs, TR_TY_CURSE)) dec--;
610 next_o_idx = o_ptr->next_o_idx;
611 marked = o_ptr->marked;
612 weight = o_ptr->weight;
613 number = o_ptr->number;
615 object_prep(o_ptr, o_ptr->k_idx);
619 o_ptr->next_o_idx = next_o_idx;
620 o_ptr->marked = marked;
621 o_ptr->number = number;
622 if (o_ptr->tval == TV_DRAG_ARMOR) o_ptr->timeout = old_timeout;
623 if (item >= 0) creature_ptr->total_weight += (o_ptr->weight*o_ptr->number - weight * number);
624 o_ptr->ident |= (IDENT_FULL_KNOWN);
625 object_aware(creature_ptr, o_ptr);
628 object_flags(o_ptr, new_flgs);
630 for (i = 0; essence_info[i].add_name; i++)
632 essence_type *es_ptr = &essence_info[i];
633 PARAMETER_VALUE pval = 0;
635 if (es_ptr->add < TR_FLAG_MAX && is_pval_flag(es_ptr->add) && old_pval)
636 pval = (have_flag(new_flgs, es_ptr->add)) ? old_pval - o_ptr->pval : old_pval;
638 if (es_ptr->add < TR_FLAG_MAX &&
639 (!have_flag(new_flgs, es_ptr->add) || pval) &&
640 have_flag(old_flgs, es_ptr->add))
644 drain_value[es_ptr->essence] += 10 * pval;
646 else if (es_ptr->essence != -2)
648 drain_value[es_ptr->essence] += 10;
650 else if (es_ptr->add == TR_SH_FIRE)
652 drain_value[TR_BRAND_FIRE] += 10;
653 drain_value[TR_RES_FIRE] += 10;
655 else if (es_ptr->add == TR_SH_ELEC)
657 drain_value[TR_BRAND_ELEC] += 10;
658 drain_value[TR_RES_ELEC] += 10;
660 else if (es_ptr->add == TR_SH_COLD)
662 drain_value[TR_BRAND_COLD] += 10;
663 drain_value[TR_RES_COLD] += 10;
665 else if (es_ptr->add == TR_LITE_2)
667 drain_value[TR_LITE_1] += 20;
669 else if (es_ptr->add == TR_LITE_3)
671 drain_value[TR_LITE_1] += 30;
676 if ((have_flag(old_flgs, TR_FORCE_WEAPON)) && !(have_flag(new_flgs, TR_FORCE_WEAPON)))
678 drain_value[TR_INT] += 5;
679 drain_value[TR_WIS] += 5;
681 if ((have_flag(old_flgs, TR_VORPAL)) && !(have_flag(new_flgs, TR_VORPAL)))
683 drain_value[TR_BRAND_POIS] += 5;
684 drain_value[TR_BRAND_ACID] += 5;
685 drain_value[TR_BRAND_ELEC] += 5;
686 drain_value[TR_BRAND_FIRE] += 5;
687 drain_value[TR_BRAND_COLD] += 5;
689 if ((have_flag(old_flgs, TR_DEC_MANA)) && !(have_flag(new_flgs, TR_DEC_MANA)))
691 drain_value[TR_INT] += 10;
693 if ((have_flag(old_flgs, TR_XTRA_MIGHT)) && !(have_flag(new_flgs, TR_XTRA_MIGHT)))
695 drain_value[TR_STR] += 10;
697 if ((have_flag(old_flgs, TR_XTRA_SHOTS)) && !(have_flag(new_flgs, TR_XTRA_SHOTS)))
699 drain_value[TR_DEX] += 10;
701 if (old_name2 == EGO_2WEAPON)
703 drain_value[TR_DEX] += 20;
705 if (object_is_weapon_ammo(o_ptr))
707 if (old_ds > o_ptr->ds) drain_value[TR_ES_ATTACK] += (old_ds - o_ptr->ds) * 10;
709 if (old_dd > o_ptr->dd) drain_value[TR_ES_ATTACK] += (old_dd - o_ptr->dd) * 10;
711 if (old_to_h > o_ptr->to_h) drain_value[TR_ES_ATTACK] += (old_to_h - o_ptr->to_h) * 10;
712 if (old_to_d > o_ptr->to_d) drain_value[TR_ES_ATTACK] += (old_to_d - o_ptr->to_d) * 10;
713 if (old_ac > o_ptr->ac) drain_value[TR_ES_AC] += (old_ac - o_ptr->ac) * 10;
714 if (old_to_a > o_ptr->to_a) drain_value[TR_ES_AC] += (old_to_a - o_ptr->to_a) * 10;
716 for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
718 drain_value[i] *= number;
719 drain_value[i] = drain_value[i] * dec / 4;
720 drain_value[i] = MAX(drain_value[i], 0);
721 if ((o_ptr->tval >= TV_SHOT) && (o_ptr->tval <= TV_BOLT)) drain_value[i] /= 10;
729 msg_print(_("エッセンスは抽出できませんでした。", "You were not able to extract any essence."));
733 msg_print(_("抽出したエッセンス:", "Extracted essences:"));
735 for (i = 0; essence_name[i]; i++)
737 if (!essence_name[i][0]) continue;
738 if (!drain_value[i]) continue;
740 creature_ptr->magic_num1[i] += drain_value[i];
741 creature_ptr->magic_num1[i] = MIN(20000, creature_ptr->magic_num1[i]);
743 msg_format("%s...%d%s", essence_name[i], drain_value[i], _("。", ". "));
747 /* Apply autodestroy/inscription to the drained item */
748 autopick_alter_item(creature_ptr, item, TRUE);
749 creature_ptr->update |= (PU_COMBINE | PU_REORDER);
750 creature_ptr->window |= (PW_INVEN);
754 * @brief 付加するエッセンスの大別を選択する
755 * @return 選んだエッセンスの大別ID
757 static COMMAND_CODE choose_essence(void)
759 COMMAND_CODE mode = 0;
761 COMMAND_CODE menu_line = (use_menu ? 1 : 0);
764 concptr menu_name[] = {
774 concptr menu_name[] = {
784 const COMMAND_CODE mode_max = 7;
786 if (repeat_pull(&mode) && 1 <= mode && mode <= mode_max)
796 for (i = 0; i < mode_max; i++)
798 prt(format(" %s %s", (menu_line == 1 + i) ? "》" : " ", menu_name[i]), 2 + i, 14);
799 prt("どの種類のエッセンス付加を行いますか?", 0, 0);
801 prt(format(" %s %s", (menu_line == 1 + i) ? "> " : " ", menu_name[i]), 2 + i, 14);
802 prt("Choose from menu.", 0, 0);
821 menu_line += mode_max - 1;
830 if (menu_line > mode_max) menu_line -= mode_max;
841 for (i = 0; i < mode_max; i++)
842 prt(format(" %c) %s", 'a' + i, menu_name[i]), 2 + i, 14);
844 if (!get_com(_("何を付加しますか:", "Command :"), &choice, TRUE))
850 if (isupper(choice)) choice = (char)tolower(choice);
852 if ('a' <= choice && choice <= 'a' + (char)mode_max - 1)
853 mode = (int)choice - 'a' + 1;
863 * @brief エッセンスを実際に付加する
864 * @param mode エッセンスの大別ID
867 static void add_essence(player_type *creature_ptr, ESSENCE_IDX mode)
879 GAME_TEXT o_name[MAX_NLEN];
881 essence_type *es_ptr;
882 bool able[22] = { 0 };
884 int menu_line = (use_menu ? 1 : 0);
886 for (i = 0; essence_info[i].add_name; i++)
888 es_ptr = &essence_info[i];
890 if (es_ptr->type != mode) continue;
894 if (!repeat_pull(&i) || i < 0 || i >= max_num)
899 (void)strnfmt(out_val, 78, _("('*'で一覧, ESCで中断) どの能力を付加しますか?", "(*=List, ESC=exit) Add which ability? "));
900 if (use_menu) screen_save();
902 choice = (always_show_list || use_menu) ? ESCAPE : 1;
905 if (choice == ESCAPE) choice = ' ';
906 else if (!get_com(out_val, &choice, FALSE))break;
908 if (use_menu && choice != ' ')
922 menu_line += (max_num - 1);
959 if (menu_line > max_num) menu_line -= max_num;
962 if ((choice == ' ') || (choice == '*') || (choice == '?') || (use_menu && ask))
965 if (!redraw || use_menu)
969 char dummy[80], dummy2[80];
974 if (!use_menu) screen_save();
976 for (y = 1; y < 24; y++)
979 /* Print header(s) */
981 prt(format(" %-43s %6s/%s", "能力(必要エッセンス)", "必要数", "所持数"), 1, x);
984 prt(format(" %-43s %6s/%s", "Ability (needed essence)", "Needs", "Possess"), 1, x);
987 for (ctr = 0; ctr < max_num; ctr++)
989 es_ptr = &essence_info[num[ctr]];
993 if (ctr == (menu_line - 1))
994 strcpy(dummy, _("》 ", "> "));
995 else strcpy(dummy, " ");
998 /* letter/number for power selection */
1001 sprintf(dummy, "%c) ", I2A(ctr));
1004 strcat(dummy, es_ptr->add_name);
1009 if (es_ptr->essence != -1)
1011 strcat(dummy, format("(%s)", essence_name[es_ptr->essence]));
1012 if (creature_ptr->magic_num1[es_ptr->essence] < es_ptr->value) able[ctr] = FALSE;
1016 switch (es_ptr->add)
1018 case ESSENCE_SH_FIRE:
1019 strcat(dummy, _("(焼棄+耐火炎)", "(brand fire + res.fire)"));
1020 if (creature_ptr->magic_num1[TR_BRAND_FIRE] < es_ptr->value) able[ctr] = FALSE;
1021 if (creature_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1023 case ESSENCE_SH_ELEC:
1024 strcat(dummy, _("(電撃+耐電撃)", "(brand elec. + res. elec.)"));
1025 if (creature_ptr->magic_num1[TR_BRAND_ELEC] < es_ptr->value) able[ctr] = FALSE;
1026 if (creature_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1028 case ESSENCE_SH_COLD:
1029 strcat(dummy, _("(凍結+耐冷気)", "(brand cold + res. cold)"));
1030 if (creature_ptr->magic_num1[TR_BRAND_COLD] < es_ptr->value) able[ctr] = FALSE;
1031 if (creature_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1033 case ESSENCE_RESISTANCE:
1034 strcat(dummy, _("(耐火炎+耐冷気+耐電撃+耐酸)", "(r.fire+r.cold+r.elec+r.acid)"));
1035 if (creature_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1036 if (creature_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1037 if (creature_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1038 if (creature_ptr->magic_num1[TR_RES_ACID] < es_ptr->value) able[ctr] = FALSE;
1040 case ESSENCE_SUSTAIN:
1041 strcat(dummy, _("(耐火炎+耐冷気+耐電撃+耐酸)", "(r.fire+r.cold+r.elec+r.acid)"));
1042 if (creature_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1043 if (creature_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1044 if (creature_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1045 if (creature_ptr->magic_num1[TR_RES_ACID] < es_ptr->value) able[ctr] = FALSE;
1050 if (!able[ctr]) col = TERM_RED;
1052 if (es_ptr->essence != -1)
1054 sprintf(dummy2, "%-49s %3d/%d", dummy, es_ptr->value, (int)creature_ptr->magic_num1[es_ptr->essence]);
1058 sprintf(dummy2, "%-49s %3d/(\?\?)", dummy, es_ptr->value);
1061 c_prt(col, dummy2, ctr + 2, x);
1080 ask = (isupper(choice));
1083 if (ask) choice = (char)tolower(choice);
1085 /* Extract request */
1086 i = (islower(choice) ? A2I(choice) : -1);
1089 /* Totally Illegal */
1090 if ((i < 0) || (i >= max_num) || !able[i])
1102 (void)strnfmt(tmp_val, 78, _("%sを付加しますか? ", "Add the abilitiy of %s? "), essence_info[num[i]].add_name);
1104 /* Belay that order */
1105 if (!get_check(tmp_val)) continue;
1111 if (redraw) screen_load();
1117 es_ptr = &essence_info[num[i]];
1119 if (es_ptr->add == ESSENCE_SLAY_GLOVE)
1121 else if (mode == 1 || mode == 5)
1122 item_tester_hook = item_tester_hook_melee_ammo;
1123 else if (es_ptr->add == ESSENCE_ATTACK)
1124 item_tester_hook = object_allow_enchant_weapon;
1125 else if (es_ptr->add == ESSENCE_AC)
1126 item_tester_hook = object_is_armour;
1128 item_tester_hook = object_is_weapon_armour_ammo;
1130 q = _("どのアイテムを改良しますか?", "Improve which item? ");
1131 s = _("改良できるアイテムがありません。", "You have nothing to improve.");
1133 o_ptr = choose_object(creature_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), tval);
1136 if ((mode != 10) && (object_is_artifact(o_ptr) || object_is_smith(o_ptr)))
1138 msg_print(_("そのアイテムはこれ以上改良できない。", "This item can not be improved any further."));
1142 object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1144 use_essence = es_ptr->value;
1145 if ((o_ptr->tval >= TV_SHOT) && (o_ptr->tval <= TV_BOLT)) use_essence = (use_essence + 9) / 10;
1146 if (o_ptr->number > 1)
1148 use_essence *= o_ptr->number;
1149 msg_format(_("%d個あるのでエッセンスは%d必要です。", "For %d items, it will take %d essences."), o_ptr->number, use_essence);
1152 if (es_ptr->essence != -1)
1154 if (creature_ptr->magic_num1[es_ptr->essence] < use_essence)
1156 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1159 if (is_pval_flag(es_ptr->add))
1161 if (o_ptr->pval < 0)
1163 msg_print(_("このアイテムの能力修正を強化することはできない。", "You cannot increase magic number of this item."));
1166 else if (es_ptr->add == TR_BLOWS)
1168 if (o_ptr->pval > 1)
1170 if (!get_check(_("修正値は1になります。よろしいですか?", "The magic number of this weapon will become 1. Are you sure? "))) return;
1174 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1176 else if (o_ptr->pval > 0)
1178 use_essence *= o_ptr->pval;
1179 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1185 PARAMETER_VALUE pval;
1186 PARAMETER_VALUE limit = MIN(5, creature_ptr->magic_num1[es_ptr->essence] / es_ptr->value);
1188 sprintf(tmp, _("いくつ付加しますか? (1-%d): ", "Enchant how many? (1-%d): "), limit);
1189 strcpy(tmp_val, "1");
1191 if (!get_string(tmp, tmp_val, 1)) return;
1192 pval = (PARAMETER_VALUE)atoi(tmp_val);
1193 if (pval > limit) pval = limit;
1194 else if (pval < 1) pval = 1;
1195 o_ptr->pval += pval;
1196 use_essence *= pval;
1197 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1200 if (creature_ptr->magic_num1[es_ptr->essence] < use_essence)
1202 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1206 else if (es_ptr->add == ESSENCE_SLAY_GLOVE)
1213 strcpy(tmp_val, "1");
1214 if (!get_string(format(_("いくつ付加しますか? (1-%d):", "Enchant how many? (1-%d):"), creature_ptr->lev / 7 + 3), tmp_val, 2)) return;
1215 val = atoi(tmp_val);
1216 if (val > creature_ptr->lev / 7 + 3) val = creature_ptr->lev / 7 + 3;
1217 else if (val < 1) val = 1;
1219 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1220 if (creature_ptr->magic_num1[es_ptr->essence] < use_essence)
1222 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1225 get_to_h = ((val + 1) / 2 + randint0(val / 2 + 1));
1226 get_to_d = ((val + 1) / 2 + randint0(val / 2 + 1));
1227 o_ptr->xtra4 = (get_to_h << 8) + get_to_d;
1228 o_ptr->to_h += get_to_h;
1229 o_ptr->to_d += get_to_d;
1231 creature_ptr->magic_num1[es_ptr->essence] -= use_essence;
1232 if (es_ptr->add == ESSENCE_ATTACK)
1234 if ((o_ptr->to_h >= creature_ptr->lev / 5 + 5) && (o_ptr->to_d >= creature_ptr->lev / 5 + 5))
1236 msg_print(_("改良に失敗した。", "You failed to enchant."));
1237 take_turn(creature_ptr, 100);
1242 if (o_ptr->to_h < creature_ptr->lev / 5 + 5) o_ptr->to_h++;
1243 if (o_ptr->to_d < creature_ptr->lev / 5 + 5) o_ptr->to_d++;
1246 else if (es_ptr->add == ESSENCE_AC)
1248 if (o_ptr->to_a >= creature_ptr->lev / 5 + 5)
1250 msg_print(_("改良に失敗した。", "You failed to enchant."));
1251 take_turn(creature_ptr, 100);
1256 if (o_ptr->to_a < creature_ptr->lev / 5 + 5) o_ptr->to_a++;
1261 o_ptr->xtra3 = es_ptr->add + 1;
1266 bool success = TRUE;
1268 switch (es_ptr->add)
1270 case ESSENCE_SH_FIRE:
1271 if ((creature_ptr->magic_num1[TR_BRAND_FIRE] < use_essence) || (creature_ptr->magic_num1[TR_RES_FIRE] < use_essence))
1276 creature_ptr->magic_num1[TR_BRAND_FIRE] -= use_essence;
1277 creature_ptr->magic_num1[TR_RES_FIRE] -= use_essence;
1279 case ESSENCE_SH_ELEC:
1280 if ((creature_ptr->magic_num1[TR_BRAND_ELEC] < use_essence) || (creature_ptr->magic_num1[TR_RES_ELEC] < use_essence))
1285 creature_ptr->magic_num1[TR_BRAND_ELEC] -= use_essence;
1286 creature_ptr->magic_num1[TR_RES_ELEC] -= use_essence;
1288 case ESSENCE_SH_COLD:
1289 if ((creature_ptr->magic_num1[TR_BRAND_COLD] < use_essence) || (creature_ptr->magic_num1[TR_RES_COLD] < use_essence))
1294 creature_ptr->magic_num1[TR_BRAND_COLD] -= use_essence;
1295 creature_ptr->magic_num1[TR_RES_COLD] -= use_essence;
1297 case ESSENCE_RESISTANCE:
1298 case ESSENCE_SUSTAIN:
1299 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))
1304 creature_ptr->magic_num1[TR_RES_ACID] -= use_essence;
1305 creature_ptr->magic_num1[TR_RES_ELEC] -= use_essence;
1306 creature_ptr->magic_num1[TR_RES_FIRE] -= use_essence;
1307 creature_ptr->magic_num1[TR_RES_COLD] -= use_essence;
1312 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1315 if (es_ptr->add == ESSENCE_SUSTAIN)
1317 add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
1318 add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
1319 add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
1320 add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
1324 o_ptr->xtra3 = es_ptr->add + 1;
1328 take_turn(creature_ptr, 100);
1329 _(msg_format("%sに%sの能力を付加しました。", o_name, es_ptr->add_name),
1330 msg_format("You have added ability of %s to %s.", es_ptr->add_name, o_name));
1331 creature_ptr->update |= (PU_COMBINE | PU_REORDER);
1332 creature_ptr->window |= (PW_INVEN);
1339 static void erase_essence(player_type *creature_ptr)
1344 GAME_TEXT o_name[MAX_NLEN];
1345 BIT_FLAGS flgs[TR_FLAG_SIZE];
1347 item_tester_hook = object_is_smith;
1349 q = _("どのアイテムのエッセンスを消去しますか?", "Remove from which item? ");
1350 s = _("エッセンスを付加したアイテムがありません。", "You have nothing to remove essence.");
1352 o_ptr = choose_object(creature_ptr, &item, q, s, (USE_INVEN | USE_FLOOR), 0);
1355 object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1356 if (!get_check(format(_("よろしいですか? [%s]", "Are you sure? [%s]"), o_name))) return;
1358 take_turn(creature_ptr, 100);
1360 if (o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE)
1362 o_ptr->to_h -= (o_ptr->xtra4 >> 8);
1363 o_ptr->to_d -= (o_ptr->xtra4 & 0x000f);
1365 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
1366 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
1369 object_flags(o_ptr, flgs);
1370 if (!(have_pval_flags(flgs))) o_ptr->pval = 0;
1371 msg_print(_("エッセンスを取り去った。", "You removed all essence you have added."));
1372 creature_ptr->update |= (PU_COMBINE | PU_REORDER);
1373 creature_ptr->window |= (PW_INVEN);
1377 * @brief 鍛冶コマンドのメインルーチン
1378 * @param only_browse TRUEならばエッセンス一覧の表示のみを行う
1381 void do_cmd_kaji(player_type *creature_ptr, bool only_browse)
1383 COMMAND_CODE mode = 0;
1386 COMMAND_CODE menu_line = (use_menu ? 1 : 0);
1390 if (cmd_limit_confused(creature_ptr)) return;
1391 if (cmd_limit_blind(creature_ptr)) return;
1392 if (cmd_limit_image(creature_ptr)) return;
1395 if (!(repeat_pull(&mode) && 1 <= mode && mode <= 5))
1397 if (only_browse) screen_save();
1399 if (!only_browse) screen_save();
1405 prt(format(" %s エッセンス一覧", (menu_line == 1) ? "》" : " "), 2, 14);
1406 prt(format(" %s エッセンス抽出", (menu_line == 2) ? "》" : " "), 3, 14);
1407 prt(format(" %s エッセンス消去", (menu_line == 3) ? "》" : " "), 4, 14);
1408 prt(format(" %s エッセンス付加", (menu_line == 4) ? "》" : " "), 5, 14);
1409 prt(format(" %s 武器/防具強化", (menu_line == 5) ? "》" : " "), 6, 14);
1410 prt(format("どの種類の技術を%sますか?", only_browse ? "調べ" : "使い"), 0, 0);
1412 prt(format(" %s List essences", (menu_line == 1) ? "> " : " "), 2, 14);
1413 prt(format(" %s Extract essence", (menu_line == 2) ? "> " : " "), 3, 14);
1414 prt(format(" %s Remove essence", (menu_line == 3) ? "> " : " "), 4, 14);
1415 prt(format(" %s Add essence", (menu_line == 4) ? "> " : " "), 5, 14);
1416 prt(format(" %s Enchant weapon/armor", (menu_line == 5) ? "> " : " "), 6, 14);
1417 prt(format("Choose command from menu."), 0, 0);
1444 if (menu_line > 5) menu_line -= 5;
1452 prt(_(" a) エッセンス一覧", " a) List essences"), 2, 14);
1453 prt(_(" b) エッセンス抽出", " b) Extract essence"), 3, 14);
1454 prt(_(" c) エッセンス消去", " c) Remove essence"), 4, 14);
1455 prt(_(" d) エッセンス付加", " d) Add essence"), 5, 14);
1456 prt(_(" e) 武器/防具強化", " e) Enchant weapon/armor"), 6, 14);
1458 if (!get_com(format("どの能力を%sますか:", only_browse ? "調べ" : "使い"), &choice, TRUE))
1460 if (!get_com("Command :", &choice, TRUE))
1497 /* Clear lines, position cursor (really should use strlen here) */
1498 Term_erase(14, 21, 255);
1499 Term_erase(14, 20, 255);
1500 Term_erase(14, 19, 255);
1501 Term_erase(14, 18, 255);
1502 Term_erase(14, 17, 255);
1503 Term_erase(14, 16, 255);
1505 roff_to_buf(kaji_tips[mode - 1], 62, temp, sizeof(temp));
1506 for (j = 0, line = 17; temp[j]; j += (1 + strlen(&temp[j])))
1508 prt(&temp[j], line, 15);
1513 if (!only_browse) screen_load();
1514 } while (only_browse);
1519 case 1: display_essence(creature_ptr); break;
1520 case 2: drain_essence(creature_ptr); break;
1521 case 3: erase_essence(creature_ptr); break;
1523 mode = choose_essence();
1526 add_essence(creature_ptr, mode);
1528 case 5: add_essence(creature_ptr, 10); break;