5 #include "object-flavor.h"
6 #include "object-hook.h"
7 #include "object-ego.h"
8 #include "player-status.h"
10 #include "cmd-smith.h"
11 #include "objectkind.h"
13 #include "view-mainwindow.h"
18 * エッセンス情報の構造体 / A structure for smithing
21 int add; /* TR flag number or special essence id */
22 concptr add_name; /* Name of this ability */
23 ESSENCE_IDX type; /* Menu number */
24 int essence; /* Index for carrying essences */
25 int value; /* Needed value to add this ability */
30 * エッセンス情報テーブル Smithing type data for Weapon smith
33 static essence_type essence_info[] =
35 {TR_STR, "腕力", 4, TR_STR, 20},
36 {TR_INT, "知能", 4, TR_INT, 20},
37 {TR_WIS, "賢さ", 4, TR_WIS, 20},
38 {TR_DEX, "器用さ", 4, TR_DEX, 20},
39 {TR_CON, "耐久力", 4, TR_CON, 20},
40 {TR_CHR, "魅力", 4, TR_CHR, 20},
41 {TR_MAGIC_MASTERY, "魔力支配", 4, TR_MAGIC_MASTERY, 20},
42 {TR_STEALTH, "隠密", 4, TR_STEALTH, 40},
43 {TR_SEARCH, "探索", 4, TR_SEARCH, 15},
44 {TR_INFRA, "赤外線視力", 4, TR_INFRA, 15},
45 {TR_TUNNEL, "採掘", 4, TR_TUNNEL, 15},
46 {TR_SPEED, "スピード", 4, TR_SPEED, 12},
47 {TR_BLOWS, "追加攻撃", 1, TR_BLOWS, 20},
48 {TR_CHAOTIC, "カオス攻撃", 1, TR_CHAOTIC, 15},
49 {TR_VAMPIRIC, "吸血攻撃", 1, TR_VAMPIRIC, 60},
50 {TR_IMPACT, "地震発動", 7, TR_IMPACT, 15},
51 {TR_BRAND_POIS, "毒殺", 1, TR_BRAND_POIS, 20},
52 {TR_BRAND_ACID, "溶解", 1, TR_BRAND_ACID, 20},
53 {TR_BRAND_ELEC, "電撃", 1, TR_BRAND_ELEC, 20},
54 {TR_BRAND_FIRE, "焼棄", 1, TR_BRAND_FIRE, 20},
55 {TR_BRAND_COLD, "凍結", 1, TR_BRAND_COLD, 20},
56 {TR_SUST_STR, "腕力維持", 3, TR_SUST_STR, 15},
57 {TR_SUST_INT, "知能維持", 3, TR_SUST_STR, 15},
58 {TR_SUST_WIS, "賢さ維持", 3, TR_SUST_STR, 15},
59 {TR_SUST_DEX, "器用さ維持", 3, TR_SUST_STR, 15},
60 {TR_SUST_CON, "耐久力維持", 3, TR_SUST_STR, 15},
61 {TR_SUST_CHR, "魅力維持", 3, TR_SUST_STR, 15},
62 {TR_IM_ACID, "酸免疫", 2, TR_IM_ACID, 20},
63 {TR_IM_ELEC, "電撃免疫", 2, TR_IM_ACID, 20},
64 {TR_IM_FIRE, "火炎免疫", 2, TR_IM_ACID, 20},
65 {TR_IM_COLD, "冷気免疫", 2, TR_IM_ACID, 20},
66 {TR_REFLECT, "反射", 2, TR_REFLECT, 20},
67 {TR_FREE_ACT, "麻痺知らず", 3, TR_FREE_ACT, 20},
68 {TR_HOLD_EXP, "経験値維持", 3, TR_HOLD_EXP, 20},
69 {TR_RES_ACID, "耐酸", 2, TR_RES_ACID, 15},
70 {TR_RES_ELEC, "耐電撃", 2, TR_RES_ELEC, 15},
71 {TR_RES_FIRE, "耐火炎", 2, TR_RES_FIRE, 15},
72 {TR_RES_COLD, "耐冷気", 2, TR_RES_COLD, 15},
73 {TR_RES_POIS, "耐毒", 2, TR_RES_POIS, 25},
74 {TR_RES_FEAR, "耐恐怖", 2, TR_RES_FEAR, 20},
75 {TR_RES_LITE, "耐閃光", 2, TR_RES_LITE, 20},
76 {TR_RES_DARK, "耐暗黒", 2, TR_RES_DARK, 20},
77 {TR_RES_BLIND, "耐盲目", 2, TR_RES_BLIND, 20},
78 {TR_RES_CONF, "耐混乱", 2, TR_RES_CONF, 20},
79 {TR_RES_SOUND, "耐轟音", 2, TR_RES_SOUND, 20},
80 {TR_RES_SHARDS, "耐破片", 2, TR_RES_SHARDS, 20},
81 {TR_RES_NETHER, "耐地獄", 2, TR_RES_NETHER, 20},
82 {TR_RES_NEXUS, "耐因果混乱", 2, TR_RES_NEXUS, 20},
83 {TR_RES_CHAOS, "耐カオス", 2, TR_RES_CHAOS, 20},
84 {TR_RES_DISEN, "耐劣化", 2, TR_RES_DISEN, 20},
85 {TR_SH_FIRE, "", 0, -2, 0},
86 {TR_SH_ELEC, "", 0, -2, 0},
87 {TR_SH_COLD, "", 0, -2, 0},
88 {TR_NO_MAGIC, "反魔法", 3, TR_NO_MAGIC, 15},
89 {TR_WARNING, "警告", 3, TR_WARNING, 20},
90 {TR_LEVITATION, "浮遊", 3, TR_LEVITATION, 20},
91 {TR_LITE_1, "永久光源", 3, TR_LITE_1, 15},
92 {TR_LITE_2, "", 0, -2, 0},
93 {TR_LITE_3, "", 0, -2, 0},
94 {TR_SEE_INVIS, "可視透明", 3, TR_SEE_INVIS, 20},
95 {TR_TELEPATHY, "テレパシー", 6, TR_TELEPATHY, 15},
96 {TR_SLOW_DIGEST, "遅消化", 3, TR_SLOW_DIGEST, 15},
97 {TR_REGEN, "急速回復", 3, TR_REGEN, 20},
98 {TR_TELEPORT, "テレポート", 3, TR_TELEPORT, 25},
100 {TR_SLAY_EVIL, "邪悪倍打", 5, TR_SLAY_EVIL, 100},
101 {TR_KILL_EVIL, "邪悪倍倍打", 0, TR_SLAY_EVIL, 60},
102 {TR_SLAY_ANIMAL, "動物倍打", 5, TR_SLAY_ANIMAL, 20},
103 {TR_KILL_ANIMAL, "動物倍倍打", 5, TR_SLAY_ANIMAL, 60},
104 {TR_SLAY_UNDEAD, "不死倍打", 5, TR_SLAY_UNDEAD, 20},
105 {TR_KILL_UNDEAD, "不死倍倍打", 5, TR_SLAY_UNDEAD, 60},
106 {TR_SLAY_DEMON, "悪魔倍打", 5, TR_SLAY_DEMON, 20},
107 {TR_KILL_DEMON, "悪魔倍倍打", 5, TR_SLAY_DEMON, 60},
108 {TR_SLAY_ORC, "オーク倍打", 5, TR_SLAY_ORC, 15},
109 {TR_KILL_ORC, "オーク倍倍打", 5, TR_SLAY_ORC, 60},
110 {TR_SLAY_TROLL, "トロル倍打", 5, TR_SLAY_TROLL, 15},
111 {TR_KILL_TROLL, "トロル倍倍打", 5, TR_SLAY_TROLL, 60},
112 {TR_SLAY_GIANT, "巨人倍打", 5, TR_SLAY_GIANT, 20},
113 {TR_KILL_GIANT, "巨人倍倍打", 5, TR_SLAY_GIANT, 60},
114 {TR_SLAY_DRAGON, "竜倍打", 5, TR_SLAY_DRAGON, 20},
115 {TR_KILL_DRAGON, "竜倍倍打", 5, TR_SLAY_DRAGON, 60},
116 {TR_SLAY_HUMAN, "人間倍打", 5, TR_SLAY_HUMAN, 20},
117 {TR_KILL_HUMAN, "人間倍倍打", 5, TR_SLAY_HUMAN, 60},
119 {TR_ESP_ANIMAL, "動物ESP", 6, TR_SLAY_ANIMAL, 40},
120 {TR_ESP_UNDEAD, "不死ESP", 6, TR_SLAY_UNDEAD, 40},
121 {TR_ESP_DEMON, "悪魔ESP", 6, TR_SLAY_DEMON, 40},
122 {TR_ESP_ORC, "オークESP", 6, TR_SLAY_ORC, 40},
123 {TR_ESP_TROLL, "トロルESP", 6, TR_SLAY_TROLL, 40},
124 {TR_ESP_GIANT, "巨人ESP", 6, TR_SLAY_GIANT, 40},
125 {TR_ESP_DRAGON, "竜ESP", 6, TR_SLAY_DRAGON, 40},
126 {TR_ESP_HUMAN, "人間ESP", 6, TR_SLAY_HUMAN, 40},
128 {ESSENCE_ATTACK, "攻撃", 10, TR_ES_ATTACK, 30},
129 {ESSENCE_AC, "防御", 10, TR_ES_AC, 15},
130 {ESSENCE_TMP_RES_ACID, "酸耐性発動", 7, TR_RES_ACID, 50},
131 {ESSENCE_TMP_RES_ELEC, "電撃耐性発動", 7, TR_RES_ELEC, 50},
132 {ESSENCE_TMP_RES_FIRE, "火炎耐性発動", 7, TR_RES_FIRE, 50},
133 {ESSENCE_TMP_RES_COLD, "冷気耐性発動", 7, TR_RES_COLD, 50},
134 {ESSENCE_SH_FIRE, "火炎オーラ", 7, -1, 50},
135 {ESSENCE_SH_ELEC, "電撃オーラ", 7, -1, 50},
136 {ESSENCE_SH_COLD, "冷気オーラ", 7, -1, 50},
137 {ESSENCE_RESISTANCE, "全耐性", 2, -1, 150},
138 {ESSENCE_SUSTAIN, "装備保持", 10, -1, 10},
139 {ESSENCE_SLAY_GLOVE, "殺戮の小手", 1, TR_ES_ATTACK, 200},
144 static essence_type essence_info[] =
146 {TR_STR, "strength", 4, TR_STR, 20},
147 {TR_INT, "intelligence", 4, TR_INT, 20},
148 {TR_WIS, "wisdom", 4, TR_WIS, 20},
149 {TR_DEX, "dexterity", 4, TR_DEX, 20},
150 {TR_CON, "constitution", 4, TR_CON, 20},
151 {TR_CHR, "charisma", 4, TR_CHR, 20},
152 {TR_MAGIC_MASTERY, "magic mastery", 4, TR_MAGIC_MASTERY, 20},
153 {TR_STEALTH, "stealth", 4, TR_STEALTH, 40},
154 {TR_SEARCH, "serching", 4, TR_SEARCH, 15},
155 {TR_INFRA, "infravision", 4, TR_INFRA, 15},
156 {TR_TUNNEL, "digging", 4, TR_TUNNEL, 15},
157 {TR_SPEED, "speed", 4, TR_SPEED, 12},
158 {TR_BLOWS, "extra attack", 1, TR_BLOWS, 20},
159 {TR_CHAOTIC, "chaos brand", 1, TR_CHAOTIC, 15},
160 {TR_VAMPIRIC, "vampiric brand", 1, TR_VAMPIRIC, 60},
161 {TR_IMPACT, "quake activation", 7, TR_IMPACT, 15},
162 {TR_BRAND_POIS, "poison brand", 1, TR_BRAND_POIS, 20},
163 {TR_BRAND_ACID, "acid brand", 1, TR_BRAND_ACID, 20},
164 {TR_BRAND_ELEC, "electric brand", 1, TR_BRAND_ELEC, 20},
165 {TR_BRAND_FIRE, "fire brand", 1, TR_BRAND_FIRE, 20},
166 {TR_BRAND_COLD, "cold brand", 1, TR_BRAND_COLD, 20},
167 {TR_SUST_STR, "sustain strength", 3, TR_SUST_STR, 15},
168 {TR_SUST_INT, "sustain intelligence", 3, TR_SUST_STR, 15},
169 {TR_SUST_WIS, "sustain wisdom", 3, TR_SUST_STR, 15},
170 {TR_SUST_DEX, "sustain dexterity", 3, TR_SUST_STR, 15},
171 {TR_SUST_CON, "sustain constitution", 3, TR_SUST_STR, 15},
172 {TR_SUST_CHR, "sustain charisma", 3, TR_SUST_STR, 15},
173 {TR_IM_ACID, "acid immunity", 2, TR_IM_ACID, 20},
174 {TR_IM_ELEC, "electric immunity", 2, TR_IM_ACID, 20},
175 {TR_IM_FIRE, "fire immunity", 2, TR_IM_ACID, 20},
176 {TR_IM_COLD, "cold immunity", 2, TR_IM_ACID, 20},
177 {TR_REFLECT, "reflection", 2, TR_REFLECT, 20},
178 {TR_FREE_ACT, "free action", 3, TR_FREE_ACT, 20},
179 {TR_HOLD_EXP, "hold experience", 3, TR_HOLD_EXP, 20},
180 {TR_RES_ACID, "resistance to acid", 2, TR_RES_ACID, 15},
181 {TR_RES_ELEC, "resistance to electric", 2, TR_RES_ELEC, 15},
182 {TR_RES_FIRE, "resistance to fire", 2, TR_RES_FIRE, 15},
183 {TR_RES_COLD, "resistance to cold", 2, TR_RES_COLD, 15},
184 {TR_RES_POIS, "resistance to poison", 2, TR_RES_POIS, 25},
185 {TR_RES_FEAR, "resistance to fear", 2, TR_RES_FEAR, 20},
186 {TR_RES_LITE, "resistance to light", 2, TR_RES_LITE, 20},
187 {TR_RES_DARK, "resistance to dark", 2, TR_RES_DARK, 20},
188 {TR_RES_BLIND, "resistance to blind", 2, TR_RES_BLIND, 20},
189 {TR_RES_CONF, "resistance to confusion", 2, TR_RES_CONF, 20},
190 {TR_RES_SOUND, "resistance to sound", 2, TR_RES_SOUND, 20},
191 {TR_RES_SHARDS, "resistance to shard", 2, TR_RES_SHARDS, 20},
192 {TR_RES_NETHER, "resistance to nether", 2, TR_RES_NETHER, 20},
193 {TR_RES_NEXUS, "resistance to nexus", 2, TR_RES_NEXUS, 20},
194 {TR_RES_CHAOS, "resistance to chaos", 2, TR_RES_CHAOS, 20},
195 {TR_RES_DISEN, "resistance to disenchantment", 2, TR_RES_DISEN, 20},
196 {TR_SH_FIRE, "", 0, -2, 0},
197 {TR_SH_ELEC, "", 0, -2, 0},
198 {TR_SH_COLD, "", 0, -2, 0},
199 {TR_NO_MAGIC, "anti magic", 3, TR_NO_MAGIC, 15},
200 {TR_WARNING, "warning", 3, TR_WARNING, 20},
201 {TR_LEVITATION, "levitation", 3, TR_LEVITATION, 20},
202 {TR_LITE_1, "permanent light", 3, TR_LITE_1, 15},
203 {TR_LITE_2, "", 0, -2, 0},
204 {TR_LITE_3, "", 0, -2, 0},
205 {TR_SEE_INVIS, "see invisible", 3, TR_SEE_INVIS, 20},
206 {TR_TELEPATHY, "telepathy", 6, TR_TELEPATHY, 15},
207 {TR_SLOW_DIGEST, "slow digestion", 3, TR_SLOW_DIGEST, 15},
208 {TR_REGEN, "regeneration", 3, TR_REGEN, 20},
209 {TR_TELEPORT, "teleport", 3, TR_TELEPORT, 25},
211 {TR_SLAY_EVIL, "slay evil", 5, TR_SLAY_EVIL, 100},
212 {TR_SLAY_ANIMAL, "slay animal", 5, TR_SLAY_ANIMAL, 20},
213 {TR_KILL_ANIMAL, "kill animal", 5, TR_SLAY_ANIMAL, 60},
214 {TR_KILL_EVIL, "kill evil", 0, TR_SLAY_EVIL, 60},
215 {TR_SLAY_UNDEAD, "slay undead", 5, TR_SLAY_UNDEAD, 20},
216 {TR_KILL_UNDEAD, "kill undead", 5, TR_SLAY_UNDEAD, 60},
217 {TR_SLAY_DEMON, "slay demon", 5, TR_SLAY_DEMON, 20},
218 {TR_KILL_DEMON, "kill demon", 5, TR_SLAY_DEMON, 60},
219 {TR_SLAY_ORC, "slay orc", 5, TR_SLAY_ORC, 15},
220 {TR_KILL_ORC, "kill orc", 5, TR_SLAY_ORC, 60},
221 {TR_SLAY_TROLL, "slay troll", 5, TR_SLAY_TROLL, 15},
222 {TR_KILL_TROLL, "kill troll", 5, TR_SLAY_TROLL, 60},
223 {TR_SLAY_GIANT, "slay giant", 5, TR_SLAY_GIANT, 20},
224 {TR_KILL_GIANT, "kill giant", 5, TR_SLAY_GIANT, 60},
225 {TR_SLAY_DRAGON, "slay dragon", 5, TR_SLAY_DRAGON, 20},
226 {TR_KILL_DRAGON, "kill dragon", 5, TR_SLAY_DRAGON, 60},
227 {TR_SLAY_HUMAN, "slay human", 5, TR_SLAY_HUMAN, 20},
228 {TR_KILL_HUMAN, "kill human", 5, TR_SLAY_HUMAN, 60},
230 {TR_ESP_ANIMAL, "sense animal", 6, TR_SLAY_ANIMAL, 40},
231 {TR_ESP_UNDEAD, "sense undead", 6, TR_SLAY_UNDEAD, 40},
232 {TR_ESP_DEMON, "sense demon", 6, TR_SLAY_DEMON, 40},
233 {TR_ESP_ORC, "sense orc", 6, TR_SLAY_ORC, 40},
234 {TR_ESP_TROLL, "sense troll", 6, TR_SLAY_TROLL, 40},
235 {TR_ESP_GIANT, "sense giant", 6, TR_SLAY_GIANT, 40},
236 {TR_ESP_DRAGON, "sense dragon", 6, TR_SLAY_DRAGON, 40},
237 {TR_ESP_HUMAN, "sense human", 6, TR_SLAY_HUMAN, 40},
239 {ESSENCE_ATTACK, "weapon enchant", 10, TR_ES_ATTACK, 30},
240 {ESSENCE_AC, "armor enchant", 10, TR_ES_AC, 15},
241 {ESSENCE_TMP_RES_ACID, "resist acid activation", 7, TR_RES_ACID, 50},
242 {ESSENCE_TMP_RES_ELEC, "resist electricity activation", 7, TR_RES_ELEC, 50},
243 {ESSENCE_TMP_RES_FIRE, "resist fire activation", 7, TR_RES_FIRE, 50},
244 {ESSENCE_TMP_RES_COLD, "resist cold activation", 7, TR_RES_COLD, 50},
245 {ESSENCE_SH_FIRE, "fiery sheath", 7, -1, 50},
246 {ESSENCE_SH_ELEC, "electric sheath", 7, -1, 50},
247 {ESSENCE_SH_COLD, "sheath of coldness", 7, -1, 50},
248 {ESSENCE_RESISTANCE, "resistance", 2, -1, 150},
249 {ESSENCE_SUSTAIN, "elements proof", 10, -1, 10},
250 {ESSENCE_SLAY_GLOVE, "gauntlets of slaying", 1, TR_ES_ATTACK, 200},
258 * エッセンス名テーブル / Essense names for Weapon smith
261 concptr essence_name[] =
364 concptr essence_name[] =
466 static concptr const kaji_tips[5] =
469 "現在持っているエッセンスの一覧を表示する。",
470 "アイテムからエッセンスを取り出す。エッセンスを取られたアイテムは全く魔法がかかっていない初期状態に戻る。",
471 "既にエッセンスが付加されたアイテムからエッセンスのみ消し去る。エッセンスは手に入らない。",
472 "アイテムにエッセンスを付加する。既にエッセンスが付加されたアイテムやアーティファクトには付加できない。",
473 "武器や防具を強化したり、攻撃で傷つかないようにしたりする。エッセンスが付加されたアイテムやアーティファクトに対しても使用できる。",
475 "Display essences you have.",
476 "Extract essences from an item. The item become non magical.",
477 "Remove added essences from an equipment which was improved before. The removed essence will be ruined.",
478 "Add essences to an item. The improved items or artifacts cannot be reimprove.",
479 "Enchant an equipment or make an equiment element-proofed. The improved items and artifacts can be enchanted too.",
485 * @brief 所持しているエッセンス一覧を表示する
488 static void display_essence(void)
493 for (i = 1; i < 22; i++)
497 prt(_("エッセンス 個数 エッセンス 個数 エッセンス 個数",
498 "Essence Num Essence Num Essence Num "), 1, 8);
499 for (i = 0; essence_name[i]; i++)
501 if (!essence_name[i][0]) continue;
502 prt(format("%-11s %5d", essence_name[i], p_ptr->magic_num1[i]), 2 + num % 21, 8 + num / 21 * 22);
505 prt(_("現在所持しているエッセンス", "List of all essences you have."), 0, 0);
515 static void drain_essence(void)
517 int drain_value[sizeof(p_ptr->magic_num1) / sizeof(s32b)];
521 bool observe = FALSE;
522 int old_ds, old_dd, old_to_h, old_to_d, old_ac, old_to_a, old_pval, old_name2;
523 TIME_EFFECT old_timeout;
524 BIT_FLAGS old_flgs[TR_FLAG_SIZE], new_flgs[TR_FLAG_SIZE];
530 OBJECT_IDX next_o_idx;
533 for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
536 item_tester_hook = object_is_weapon_armour_ammo;
538 q = _("どのアイテムから抽出しますか?", "Extract from which item? ");
539 s = _("抽出できるアイテムがありません。", "You have nothing you can extract from.");
541 o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT));
544 if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))
546 GAME_TEXT o_name[MAX_NLEN];
547 object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
548 if (!get_check(format(_("本当に%sから抽出してよろしいですか?", "Really extract from %s? "), o_name))) return;
551 take_turn(p_ptr, 100);
553 object_flags(o_ptr, old_flgs);
554 if (have_flag(old_flgs, TR_KILL_DRAGON)) add_flag(old_flgs, TR_SLAY_DRAGON);
555 if (have_flag(old_flgs, TR_KILL_ANIMAL)) add_flag(old_flgs, TR_SLAY_ANIMAL);
556 if (have_flag(old_flgs, TR_KILL_EVIL)) add_flag(old_flgs, TR_SLAY_EVIL);
557 if (have_flag(old_flgs, TR_KILL_UNDEAD)) add_flag(old_flgs, TR_SLAY_UNDEAD);
558 if (have_flag(old_flgs, TR_KILL_DEMON)) add_flag(old_flgs, TR_SLAY_DEMON);
559 if (have_flag(old_flgs, TR_KILL_ORC)) add_flag(old_flgs, TR_SLAY_ORC);
560 if (have_flag(old_flgs, TR_KILL_TROLL)) add_flag(old_flgs, TR_SLAY_TROLL);
561 if (have_flag(old_flgs, TR_KILL_GIANT)) add_flag(old_flgs, TR_SLAY_GIANT);
562 if (have_flag(old_flgs, TR_KILL_HUMAN)) add_flag(old_flgs, TR_SLAY_HUMAN);
564 old_to_a = o_ptr->to_a;
566 old_to_h = o_ptr->to_h;
567 old_to_d = o_ptr->to_d;
570 old_pval = o_ptr->pval;
571 old_name2 = o_ptr->name2;
572 old_timeout = o_ptr->timeout;
573 if (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE | TRC_PERMA_CURSE)) dec--;
574 if (have_flag(old_flgs, TR_ADD_L_CURSE)) dec--;
575 if (have_flag(old_flgs, TR_ADD_H_CURSE)) dec--;
576 if (have_flag(old_flgs, TR_AGGRAVATE)) dec--;
577 if (have_flag(old_flgs, TR_NO_TELE)) dec--;
578 if (have_flag(old_flgs, TR_DRAIN_EXP)) dec--;
579 if (have_flag(old_flgs, TR_DRAIN_HP)) dec--;
580 if (have_flag(old_flgs, TR_DRAIN_MANA)) dec--;
581 if (have_flag(old_flgs, TR_CALL_ANIMAL)) dec--;
582 if (have_flag(old_flgs, TR_CALL_DEMON)) dec--;
583 if (have_flag(old_flgs, TR_CALL_DRAGON)) dec--;
584 if (have_flag(old_flgs, TR_CALL_UNDEAD)) dec--;
585 if (have_flag(old_flgs, TR_COWARDICE)) dec--;
586 if (have_flag(old_flgs, TR_LOW_MELEE)) dec--;
587 if (have_flag(old_flgs, TR_LOW_AC)) dec--;
588 if (have_flag(old_flgs, TR_LOW_MAGIC)) dec--;
589 if (have_flag(old_flgs, TR_FAST_DIGEST)) dec--;
590 if (have_flag(old_flgs, TR_SLOW_REGEN)) dec--;
591 if (have_flag(old_flgs, TR_TY_CURSE)) dec--;
595 next_o_idx = o_ptr->next_o_idx;
596 marked = o_ptr->marked;
597 weight = o_ptr->weight;
598 number = o_ptr->number;
600 object_prep(o_ptr, o_ptr->k_idx);
604 o_ptr->next_o_idx = next_o_idx;
605 o_ptr->marked = marked;
606 o_ptr->number = number;
607 if (o_ptr->tval == TV_DRAG_ARMOR) o_ptr->timeout = old_timeout;
608 if (item >= 0) p_ptr->total_weight += (o_ptr->weight*o_ptr->number - weight * number);
609 o_ptr->ident |= (IDENT_MENTAL);
613 object_flags(o_ptr, new_flgs);
615 for (i = 0; essence_info[i].add_name; i++)
617 essence_type *es_ptr = &essence_info[i];
618 PARAMETER_VALUE pval = 0;
620 if (es_ptr->add < TR_FLAG_MAX && is_pval_flag(es_ptr->add) && old_pval)
621 pval = (have_flag(new_flgs, es_ptr->add)) ? old_pval - o_ptr->pval : old_pval;
623 if (es_ptr->add < TR_FLAG_MAX &&
624 (!have_flag(new_flgs, es_ptr->add) || pval) &&
625 have_flag(old_flgs, es_ptr->add))
629 drain_value[es_ptr->essence] += 10 * pval;
631 else if (es_ptr->essence != -2)
633 drain_value[es_ptr->essence] += 10;
635 else if (es_ptr->add == TR_SH_FIRE)
637 drain_value[TR_BRAND_FIRE] += 10;
638 drain_value[TR_RES_FIRE] += 10;
640 else if (es_ptr->add == TR_SH_ELEC)
642 drain_value[TR_BRAND_ELEC] += 10;
643 drain_value[TR_RES_ELEC] += 10;
645 else if (es_ptr->add == TR_SH_COLD)
647 drain_value[TR_BRAND_COLD] += 10;
648 drain_value[TR_RES_COLD] += 10;
650 else if (es_ptr->add == TR_LITE_2)
652 drain_value[TR_LITE_1] += 20;
654 else if (es_ptr->add == TR_LITE_3)
656 drain_value[TR_LITE_1] += 30;
661 if ((have_flag(old_flgs, TR_FORCE_WEAPON)) && !(have_flag(new_flgs, TR_FORCE_WEAPON)))
663 drain_value[TR_INT] += 5;
664 drain_value[TR_WIS] += 5;
666 if ((have_flag(old_flgs, TR_VORPAL)) && !(have_flag(new_flgs, TR_VORPAL)))
668 drain_value[TR_BRAND_POIS] += 5;
669 drain_value[TR_BRAND_ACID] += 5;
670 drain_value[TR_BRAND_ELEC] += 5;
671 drain_value[TR_BRAND_FIRE] += 5;
672 drain_value[TR_BRAND_COLD] += 5;
674 if ((have_flag(old_flgs, TR_DEC_MANA)) && !(have_flag(new_flgs, TR_DEC_MANA)))
676 drain_value[TR_INT] += 10;
678 if ((have_flag(old_flgs, TR_XTRA_MIGHT)) && !(have_flag(new_flgs, TR_XTRA_MIGHT)))
680 drain_value[TR_STR] += 10;
682 if ((have_flag(old_flgs, TR_XTRA_SHOTS)) && !(have_flag(new_flgs, TR_XTRA_SHOTS)))
684 drain_value[TR_DEX] += 10;
686 if (old_name2 == EGO_2WEAPON)
688 drain_value[TR_DEX] += 20;
690 if (object_is_weapon_ammo(o_ptr))
692 if (old_ds > o_ptr->ds) drain_value[TR_ES_ATTACK] += (old_ds - o_ptr->ds) * 10;
694 if (old_dd > o_ptr->dd) drain_value[TR_ES_ATTACK] += (old_dd - o_ptr->dd) * 10;
696 if (old_to_h > o_ptr->to_h) drain_value[TR_ES_ATTACK] += (old_to_h - o_ptr->to_h) * 10;
697 if (old_to_d > o_ptr->to_d) drain_value[TR_ES_ATTACK] += (old_to_d - o_ptr->to_d) * 10;
698 if (old_ac > o_ptr->ac) drain_value[TR_ES_AC] += (old_ac - o_ptr->ac) * 10;
699 if (old_to_a > o_ptr->to_a) drain_value[TR_ES_AC] += (old_to_a - o_ptr->to_a) * 10;
701 for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
703 drain_value[i] *= number;
704 drain_value[i] = drain_value[i] * dec / 4;
705 drain_value[i] = MAX(drain_value[i], 0);
706 if ((o_ptr->tval >= TV_SHOT) && (o_ptr->tval <= TV_BOLT)) drain_value[i] /= 10;
714 msg_print(_("エッセンスは抽出できませんでした。", "You were not able to extract any essence."));
718 msg_print(_("抽出したエッセンス:", "Extracted essences:"));
720 for (i = 0; essence_name[i]; i++)
722 if (!essence_name[i][0]) continue;
723 if (!drain_value[i]) continue;
725 p_ptr->magic_num1[i] += drain_value[i];
726 p_ptr->magic_num1[i] = MIN(20000, p_ptr->magic_num1[i]);
728 msg_format("%s...%d%s", essence_name[i], drain_value[i], _("。", ". "));
732 /* Apply autodestroy/inscription to the drained item */
733 autopick_alter_item(item, TRUE);
734 p_ptr->update |= (PU_COMBINE | PU_REORDER);
735 p_ptr->window |= (PW_INVEN);
739 * @brief 付加するエッセンスの大別を選択する
740 * @return 選んだエッセンスの大別ID
742 static COMMAND_CODE choose_essence(void)
744 COMMAND_CODE mode = 0;
746 COMMAND_CODE menu_line = (use_menu ? 1 : 0);
749 concptr menu_name[] = {
759 concptr menu_name[] = {
769 const COMMAND_CODE mode_max = 7;
771 if (repeat_pull(&mode) && 1 <= mode && mode <= mode_max)
781 for (i = 0; i < mode_max; i++)
783 prt(format(" %s %s", (menu_line == 1 + i) ? "》" : " ", menu_name[i]), 2 + i, 14);
784 prt("どの種類のエッセンス付加を行いますか?", 0, 0);
786 prt(format(" %s %s", (menu_line == 1 + i) ? "> " : " ", menu_name[i]), 2 + i, 14);
787 prt("Choose from menu.", 0, 0);
806 menu_line += mode_max - 1;
815 if (menu_line > mode_max) menu_line -= mode_max;
826 for (i = 0; i < mode_max; i++)
827 prt(format(" %c) %s", 'a' + i, menu_name[i]), 2 + i, 14);
829 if (!get_com(_("何を付加しますか:", "Command :"), &choice, TRUE))
835 if (isupper(choice)) choice = (char)tolower(choice);
837 if ('a' <= choice && choice <= 'a' + (char)mode_max - 1)
838 mode = (int)choice - 'a' + 1;
848 * @brief エッセンスを実際に付加する
849 * @param mode エッセンスの大別ID
852 static void add_essence(ESSENCE_IDX mode)
864 GAME_TEXT o_name[MAX_NLEN];
866 essence_type *es_ptr;
867 bool able[22] = { 0 };
869 int menu_line = (use_menu ? 1 : 0);
871 for (i = 0; essence_info[i].add_name; i++)
873 es_ptr = &essence_info[i];
875 if (es_ptr->type != mode) continue;
879 if (!repeat_pull(&i) || i < 0 || i >= max_num)
882 /* Nothing chosen yet */
889 (void)strnfmt(out_val, 78, _("('*'で一覧, ESCで中断) どの能力を付加しますか?", "(*=List, ESC=exit) Add which ability? "));
890 if (use_menu) screen_save();
892 choice = (always_show_list || use_menu) ? ESCAPE : 1;
895 if (choice == ESCAPE) choice = ' ';
896 else if (!get_com(out_val, &choice, FALSE))break;
898 if (use_menu && choice != ' ')
912 menu_line += (max_num - 1);
949 if (menu_line > max_num) menu_line -= max_num;
952 if ((choice == ' ') || (choice == '*') || (choice == '?') || (use_menu && ask))
955 if (!redraw || use_menu)
959 char dummy[80], dummy2[80];
964 if (!use_menu) screen_save();
966 for (y = 1; y < 24; y++)
969 /* Print header(s) */
971 prt(format(" %-43s %6s/%s", "能力(必要エッセンス)", "必要数", "所持数"), 1, x);
974 prt(format(" %-43s %6s/%s", "Ability (needed essence)", "Needs", "Possess"), 1, x);
977 for (ctr = 0; ctr < max_num; ctr++)
979 es_ptr = &essence_info[num[ctr]];
983 if (ctr == (menu_line - 1))
984 strcpy(dummy, _("》 ", "> "));
985 else strcpy(dummy, " ");
988 /* letter/number for power selection */
991 sprintf(dummy, "%c) ", I2A(ctr));
994 strcat(dummy, es_ptr->add_name);
999 if (es_ptr->essence != -1)
1001 strcat(dummy, format("(%s)", essence_name[es_ptr->essence]));
1002 if (p_ptr->magic_num1[es_ptr->essence] < es_ptr->value) able[ctr] = FALSE;
1006 switch (es_ptr->add)
1008 case ESSENCE_SH_FIRE:
1009 strcat(dummy, _("(焼棄+耐火炎)", "(brand fire + res.fire)"));
1010 if (p_ptr->magic_num1[TR_BRAND_FIRE] < es_ptr->value) able[ctr] = FALSE;
1011 if (p_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1013 case ESSENCE_SH_ELEC:
1014 strcat(dummy, _("(電撃+耐電撃)", "(brand elec. + res. elec.)"));
1015 if (p_ptr->magic_num1[TR_BRAND_ELEC] < es_ptr->value) able[ctr] = FALSE;
1016 if (p_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1018 case ESSENCE_SH_COLD:
1019 strcat(dummy, _("(凍結+耐冷気)", "(brand cold + res. cold)"));
1020 if (p_ptr->magic_num1[TR_BRAND_COLD] < es_ptr->value) able[ctr] = FALSE;
1021 if (p_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1023 case ESSENCE_RESISTANCE:
1024 strcat(dummy, _("(耐火炎+耐冷気+耐電撃+耐酸)", "(r.fire+r.cold+r.elec+r.acid)"));
1025 if (p_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1026 if (p_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1027 if (p_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1028 if (p_ptr->magic_num1[TR_RES_ACID] < es_ptr->value) able[ctr] = FALSE;
1030 case ESSENCE_SUSTAIN:
1031 strcat(dummy, _("(耐火炎+耐冷気+耐電撃+耐酸)", "(r.fire+r.cold+r.elec+r.acid)"));
1032 if (p_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1033 if (p_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1034 if (p_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1035 if (p_ptr->magic_num1[TR_RES_ACID] < es_ptr->value) able[ctr] = FALSE;
1040 if (!able[ctr]) col = TERM_RED;
1042 if (es_ptr->essence != -1)
1044 sprintf(dummy2, "%-49s %3d/%d", dummy, es_ptr->value, (int)p_ptr->magic_num1[es_ptr->essence]);
1048 sprintf(dummy2, "%-49s %3d/(\?\?)", dummy, es_ptr->value);
1051 c_prt(col, dummy2, ctr + 2, x);
1070 ask = (isupper(choice));
1073 if (ask) choice = (char)tolower(choice);
1075 /* Extract request */
1076 i = (islower(choice) ? A2I(choice) : -1);
1079 /* Totally Illegal */
1080 if ((i < 0) || (i >= max_num) || !able[i])
1092 (void)strnfmt(tmp_val, 78, _("%sを付加しますか? ", "Add the abilitiy of %s? "), essence_info[num[i]].add_name);
1094 /* Belay that order */
1095 if (!get_check(tmp_val)) continue;
1101 if (redraw) screen_load();
1107 es_ptr = &essence_info[num[i]];
1109 if (es_ptr->add == ESSENCE_SLAY_GLOVE)
1110 item_tester_tval = TV_GLOVES;
1111 else if (mode == 1 || mode == 5)
1112 item_tester_hook = item_tester_hook_melee_ammo;
1113 else if (es_ptr->add == ESSENCE_ATTACK)
1114 item_tester_hook = object_allow_enchant_weapon;
1115 else if (es_ptr->add == ESSENCE_AC)
1116 item_tester_hook = object_is_armour;
1118 item_tester_hook = object_is_weapon_armour_ammo;
1120 q = _("どのアイテムを改良しますか?", "Improve which item? ");
1121 s = _("改良できるアイテムがありません。", "You have nothing to improve.");
1123 o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT));
1126 if ((mode != 10) && (object_is_artifact(o_ptr) || object_is_smith(o_ptr)))
1128 msg_print(_("そのアイテムはこれ以上改良できない。", "This item is no more able to be improved."));
1132 object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1134 use_essence = es_ptr->value;
1135 if ((o_ptr->tval >= TV_SHOT) && (o_ptr->tval <= TV_BOLT)) use_essence = (use_essence + 9) / 10;
1136 if (o_ptr->number > 1)
1138 use_essence *= o_ptr->number;
1139 msg_format(_("%d個あるのでエッセンスは%d必要です。", "It will take %d essences."), o_ptr->number, use_essence);
1142 if (es_ptr->essence != -1)
1144 if (p_ptr->magic_num1[es_ptr->essence] < use_essence)
1146 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1149 if (is_pval_flag(es_ptr->add))
1151 if (o_ptr->pval < 0)
1153 msg_print(_("このアイテムの能力修正を強化することはできない。", "You cannot increase magic number of this item."));
1156 else if (es_ptr->add == TR_BLOWS)
1158 if (o_ptr->pval > 1)
1160 if (!get_check(_("修正値は1になります。よろしいですか?", "The magic number of this weapon will become 1. Are you sure? "))) return;
1164 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1166 else if (o_ptr->pval > 0)
1168 use_essence *= o_ptr->pval;
1169 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1175 PARAMETER_VALUE pval;
1176 PARAMETER_VALUE limit = MIN(5, p_ptr->magic_num1[es_ptr->essence] / es_ptr->value);
1178 sprintf(tmp, _("いくつ付加しますか? (1-%d): ", "Enchant how many? (1-%d): "), limit);
1179 strcpy(tmp_val, "1");
1181 if (!get_string(tmp, tmp_val, 1)) return;
1182 pval = (PARAMETER_VALUE)atoi(tmp_val);
1183 if (pval > limit) pval = limit;
1184 else if (pval < 1) pval = 1;
1185 o_ptr->pval += pval;
1186 use_essence *= pval;
1187 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1190 if (p_ptr->magic_num1[es_ptr->essence] < use_essence)
1192 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1196 else if (es_ptr->add == ESSENCE_SLAY_GLOVE)
1203 strcpy(tmp_val, "1");
1204 if (!get_string(format(_("いくつ付加しますか? (1-%d):", "Enchant how many? (1-%d):"), p_ptr->lev / 7 + 3), tmp_val, 2)) return;
1205 val = atoi(tmp_val);
1206 if (val > p_ptr->lev / 7 + 3) val = p_ptr->lev / 7 + 3;
1207 else if (val < 1) val = 1;
1209 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1210 if (p_ptr->magic_num1[es_ptr->essence] < use_essence)
1212 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1215 get_to_h = ((val + 1) / 2 + randint0(val / 2 + 1));
1216 get_to_d = ((val + 1) / 2 + randint0(val / 2 + 1));
1217 o_ptr->xtra4 = (get_to_h << 8) + get_to_d;
1218 o_ptr->to_h += get_to_h;
1219 o_ptr->to_d += get_to_d;
1221 p_ptr->magic_num1[es_ptr->essence] -= use_essence;
1222 if (es_ptr->add == ESSENCE_ATTACK)
1224 if ((o_ptr->to_h >= p_ptr->lev / 5 + 5) && (o_ptr->to_d >= p_ptr->lev / 5 + 5))
1226 msg_print(_("改良に失敗した。", "You failed to enchant."));
1227 take_turn(p_ptr, 100);
1232 if (o_ptr->to_h < p_ptr->lev / 5 + 5) o_ptr->to_h++;
1233 if (o_ptr->to_d < p_ptr->lev / 5 + 5) o_ptr->to_d++;
1236 else if (es_ptr->add == ESSENCE_AC)
1238 if (o_ptr->to_a >= p_ptr->lev / 5 + 5)
1240 msg_print(_("改良に失敗した。", "You failed to enchant."));
1241 take_turn(p_ptr, 100);
1246 if (o_ptr->to_a < p_ptr->lev / 5 + 5) o_ptr->to_a++;
1251 o_ptr->xtra3 = es_ptr->add + 1;
1256 bool success = TRUE;
1258 switch (es_ptr->add)
1260 case ESSENCE_SH_FIRE:
1261 if ((p_ptr->magic_num1[TR_BRAND_FIRE] < use_essence) || (p_ptr->magic_num1[TR_RES_FIRE] < use_essence))
1266 p_ptr->magic_num1[TR_BRAND_FIRE] -= use_essence;
1267 p_ptr->magic_num1[TR_RES_FIRE] -= use_essence;
1269 case ESSENCE_SH_ELEC:
1270 if ((p_ptr->magic_num1[TR_BRAND_ELEC] < use_essence) || (p_ptr->magic_num1[TR_RES_ELEC] < use_essence))
1275 p_ptr->magic_num1[TR_BRAND_ELEC] -= use_essence;
1276 p_ptr->magic_num1[TR_RES_ELEC] -= use_essence;
1278 case ESSENCE_SH_COLD:
1279 if ((p_ptr->magic_num1[TR_BRAND_COLD] < use_essence) || (p_ptr->magic_num1[TR_RES_COLD] < use_essence))
1284 p_ptr->magic_num1[TR_BRAND_COLD] -= use_essence;
1285 p_ptr->magic_num1[TR_RES_COLD] -= use_essence;
1287 case ESSENCE_RESISTANCE:
1288 case ESSENCE_SUSTAIN:
1289 if ((p_ptr->magic_num1[TR_RES_ACID] < use_essence) || (p_ptr->magic_num1[TR_RES_ELEC] < use_essence) || (p_ptr->magic_num1[TR_RES_FIRE] < use_essence) || (p_ptr->magic_num1[TR_RES_COLD] < use_essence))
1294 p_ptr->magic_num1[TR_RES_ACID] -= use_essence;
1295 p_ptr->magic_num1[TR_RES_ELEC] -= use_essence;
1296 p_ptr->magic_num1[TR_RES_FIRE] -= use_essence;
1297 p_ptr->magic_num1[TR_RES_COLD] -= use_essence;
1302 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1305 if (es_ptr->add == ESSENCE_SUSTAIN)
1307 add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
1308 add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
1309 add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
1310 add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
1314 o_ptr->xtra3 = es_ptr->add + 1;
1318 take_turn(p_ptr, 100);
1320 msg_format(_("%sに%sの能力を付加しました。", "You have added ability of %s to %s."), o_name, es_ptr->add_name);
1321 p_ptr->update |= (PU_COMBINE | PU_REORDER);
1322 p_ptr->window |= (PW_INVEN);
1329 static void erase_essence(void)
1334 GAME_TEXT o_name[MAX_NLEN];
1335 BIT_FLAGS flgs[TR_FLAG_SIZE];
1337 item_tester_hook = object_is_smith;
1339 q = _("どのアイテムのエッセンスを消去しますか?", "Remove from which item? ");
1340 s = _("エッセンスを付加したアイテムがありません。", "You have nothing to remove essence.");
1342 o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR));
1345 object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1346 if (!get_check(format(_("よろしいですか? [%s]", "Are you sure? [%s]"), o_name))) return;
1348 take_turn(p_ptr, 100);
1350 if (o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE)
1352 o_ptr->to_h -= (o_ptr->xtra4 >> 8);
1353 o_ptr->to_d -= (o_ptr->xtra4 & 0x000f);
1355 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
1356 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
1359 object_flags(o_ptr, flgs);
1360 if (!(have_pval_flags(flgs))) o_ptr->pval = 0;
1361 msg_print(_("エッセンスを取り去った。", "You removed all essence you have added."));
1362 p_ptr->update |= (PU_COMBINE | PU_REORDER);
1363 p_ptr->window |= (PW_INVEN);
1367 * @brief 鍛冶コマンドのメインルーチン
1368 * @param only_browse TRUEならばエッセンス一覧の表示のみを行う
1371 void do_cmd_kaji(bool only_browse)
1373 COMMAND_CODE mode = 0;
1376 COMMAND_CODE menu_line = (use_menu ? 1 : 0);
1380 if (cmd_limit_confused(p_ptr)) return;
1381 if (cmd_limit_blind(p_ptr)) return;
1382 if (cmd_limit_image(p_ptr)) return;
1385 if (!(repeat_pull(&mode) && 1 <= mode && mode <= 5))
1387 if (only_browse) screen_save();
1389 if (!only_browse) screen_save();
1395 prt(format(" %s エッセンス一覧", (menu_line == 1) ? "》" : " "), 2, 14);
1396 prt(format(" %s エッセンス抽出", (menu_line == 2) ? "》" : " "), 3, 14);
1397 prt(format(" %s エッセンス消去", (menu_line == 3) ? "》" : " "), 4, 14);
1398 prt(format(" %s エッセンス付加", (menu_line == 4) ? "》" : " "), 5, 14);
1399 prt(format(" %s 武器/防具強化", (menu_line == 5) ? "》" : " "), 6, 14);
1400 prt(format("どの種類の技術を%sますか?", only_browse ? "調べ" : "使い"), 0, 0);
1402 prt(format(" %s List essences", (menu_line == 1) ? "> " : " "), 2, 14);
1403 prt(format(" %s Extract essence", (menu_line == 2) ? "> " : " "), 3, 14);
1404 prt(format(" %s Remove essence", (menu_line == 3) ? "> " : " "), 4, 14);
1405 prt(format(" %s Add essence", (menu_line == 4) ? "> " : " "), 5, 14);
1406 prt(format(" %s Enchant weapon/armor", (menu_line == 5) ? "> " : " "), 6, 14);
1407 prt(format("Choose command from menu."), 0, 0);
1434 if (menu_line > 5) menu_line -= 5;
1442 prt(_(" a) エッセンス一覧", " a) List essences"), 2, 14);
1443 prt(_(" b) エッセンス抽出", " b) Extract essence"), 3, 14);
1444 prt(_(" c) エッセンス消去", " c) Remove essence"), 4, 14);
1445 prt(_(" d) エッセンス付加", " d) Add essence"), 5, 14);
1446 prt(_(" e) 武器/防具強化", " e) Enchant weapon/armor"), 6, 14);
1448 if (!get_com(format("どの能力を%sますか:", only_browse ? "調べ" : "使い"), &choice, TRUE))
1450 if (!get_com("Command :", &choice, TRUE))
1487 /* Clear lines, position cursor (really should use strlen here) */
1488 Term_erase(14, 21, 255);
1489 Term_erase(14, 20, 255);
1490 Term_erase(14, 19, 255);
1491 Term_erase(14, 18, 255);
1492 Term_erase(14, 17, 255);
1493 Term_erase(14, 16, 255);
1495 roff_to_buf(kaji_tips[mode - 1], 62, temp, sizeof(temp));
1496 for (j = 0, line = 17; temp[j]; j += (1 + strlen(&temp[j])))
1498 prt(&temp[j], line, 15);
1503 if (!only_browse) screen_load();
1504 } while (only_browse);
1509 case 1: display_essence(); break;
1510 case 2: drain_essence(); break;
1511 case 3: erase_essence(); break;
1513 mode = choose_essence();
1518 case 5: add_essence(10); break;