2 #include "object-flavor.h"
3 #include "object-hook.h"
4 #include "player-status.h"
10 * エッセンス情報の構造体 / A structure for smithing
13 int add; /* TR flag number or special essence id */
14 concptr add_name; /* Name of this ability */
15 ESSENCE_IDX type; /* Menu number */
16 int essence; /* Index for carrying essences */
17 int value; /* Needed value to add this ability */
22 * エッセンス情報テーブル Smithing type data for Weapon smith
25 static essence_type essence_info[] =
27 {TR_STR, "腕力", 4, TR_STR, 20},
28 {TR_INT, "知能", 4, TR_INT, 20},
29 {TR_WIS, "賢さ", 4, TR_WIS, 20},
30 {TR_DEX, "器用さ", 4, TR_DEX, 20},
31 {TR_CON, "耐久力", 4, TR_CON, 20},
32 {TR_CHR, "魅力", 4, TR_CHR, 20},
33 {TR_MAGIC_MASTERY, "魔力支配", 4, TR_MAGIC_MASTERY, 20},
34 {TR_STEALTH, "隠密", 4, TR_STEALTH, 40},
35 {TR_SEARCH, "探索", 4, TR_SEARCH, 15},
36 {TR_INFRA, "赤外線視力", 4, TR_INFRA, 15},
37 {TR_TUNNEL, "採掘", 4, TR_TUNNEL, 15},
38 {TR_SPEED, "スピード", 4, TR_SPEED, 12},
39 {TR_BLOWS, "追加攻撃", 1, TR_BLOWS, 20},
40 {TR_CHAOTIC, "カオス攻撃", 1, TR_CHAOTIC, 15},
41 {TR_VAMPIRIC, "吸血攻撃", 1, TR_VAMPIRIC, 60},
42 {TR_IMPACT, "地震発動", 7, TR_IMPACT, 15},
43 {TR_BRAND_POIS, "毒殺", 1, TR_BRAND_POIS, 20},
44 {TR_BRAND_ACID, "溶解", 1, TR_BRAND_ACID, 20},
45 {TR_BRAND_ELEC, "電撃", 1, TR_BRAND_ELEC, 20},
46 {TR_BRAND_FIRE, "焼棄", 1, TR_BRAND_FIRE, 20},
47 {TR_BRAND_COLD, "凍結", 1, TR_BRAND_COLD, 20},
48 {TR_SUST_STR, "腕力維持", 3, TR_SUST_STR, 15},
49 {TR_SUST_INT, "知能維持", 3, TR_SUST_STR, 15},
50 {TR_SUST_WIS, "賢さ維持", 3, TR_SUST_STR, 15},
51 {TR_SUST_DEX, "器用さ維持", 3, TR_SUST_STR, 15},
52 {TR_SUST_CON, "耐久力維持", 3, TR_SUST_STR, 15},
53 {TR_SUST_CHR, "魅力維持", 3, TR_SUST_STR, 15},
54 {TR_IM_ACID, "酸免疫", 2, TR_IM_ACID, 20},
55 {TR_IM_ELEC, "電撃免疫", 2, TR_IM_ACID, 20},
56 {TR_IM_FIRE, "火炎免疫", 2, TR_IM_ACID, 20},
57 {TR_IM_COLD, "冷気免疫", 2, TR_IM_ACID, 20},
58 {TR_REFLECT, "反射", 2, TR_REFLECT, 20},
59 {TR_FREE_ACT, "麻痺知らず", 3, TR_FREE_ACT, 20},
60 {TR_HOLD_EXP, "経験値維持", 3, TR_HOLD_EXP, 20},
61 {TR_RES_ACID, "耐酸", 2, TR_RES_ACID, 15},
62 {TR_RES_ELEC, "耐電撃", 2, TR_RES_ELEC, 15},
63 {TR_RES_FIRE, "耐火炎", 2, TR_RES_FIRE, 15},
64 {TR_RES_COLD, "耐冷気", 2, TR_RES_COLD, 15},
65 {TR_RES_POIS, "耐毒", 2, TR_RES_POIS, 25},
66 {TR_RES_FEAR, "耐恐怖", 2, TR_RES_FEAR, 20},
67 {TR_RES_LITE, "耐閃光", 2, TR_RES_LITE, 20},
68 {TR_RES_DARK, "耐暗黒", 2, TR_RES_DARK, 20},
69 {TR_RES_BLIND, "耐盲目", 2, TR_RES_BLIND, 20},
70 {TR_RES_CONF, "耐混乱", 2, TR_RES_CONF, 20},
71 {TR_RES_SOUND, "耐轟音", 2, TR_RES_SOUND, 20},
72 {TR_RES_SHARDS, "耐破片", 2, TR_RES_SHARDS, 20},
73 {TR_RES_NETHER, "耐地獄", 2, TR_RES_NETHER, 20},
74 {TR_RES_NEXUS, "耐因果混乱", 2, TR_RES_NEXUS, 20},
75 {TR_RES_CHAOS, "耐カオス", 2, TR_RES_CHAOS, 20},
76 {TR_RES_DISEN, "耐劣化", 2, TR_RES_DISEN, 20},
77 {TR_SH_FIRE, "", 0, -2, 0},
78 {TR_SH_ELEC, "", 0, -2, 0},
79 {TR_SH_COLD, "", 0, -2, 0},
80 {TR_NO_MAGIC, "反魔法", 3, TR_NO_MAGIC, 15},
81 {TR_WARNING, "警告", 3, TR_WARNING, 20},
82 {TR_LEVITATION, "浮遊", 3, TR_LEVITATION, 20},
83 {TR_LITE_1, "永久光源", 3, TR_LITE_1, 15},
84 {TR_LITE_2, "", 0, -2, 0},
85 {TR_LITE_3, "", 0, -2, 0},
86 {TR_SEE_INVIS, "可視透明", 3, TR_SEE_INVIS, 20},
87 {TR_TELEPATHY, "テレパシー", 6, TR_TELEPATHY, 15},
88 {TR_SLOW_DIGEST, "遅消化", 3, TR_SLOW_DIGEST, 15},
89 {TR_REGEN, "急速回復", 3, TR_REGEN, 20},
90 {TR_TELEPORT, "テレポート", 3, TR_TELEPORT, 25},
92 {TR_SLAY_EVIL, "邪悪倍打", 5, TR_SLAY_EVIL, 100},
93 {TR_KILL_EVIL, "邪悪倍倍打", 0, TR_SLAY_EVIL, 60},
94 {TR_SLAY_ANIMAL, "動物倍打", 5, TR_SLAY_ANIMAL, 20},
95 {TR_KILL_ANIMAL, "動物倍倍打", 5, TR_SLAY_ANIMAL, 60},
96 {TR_SLAY_UNDEAD, "不死倍打", 5, TR_SLAY_UNDEAD, 20},
97 {TR_KILL_UNDEAD, "不死倍倍打", 5, TR_SLAY_UNDEAD, 60},
98 {TR_SLAY_DEMON, "悪魔倍打", 5, TR_SLAY_DEMON, 20},
99 {TR_KILL_DEMON, "悪魔倍倍打", 5, TR_SLAY_DEMON, 60},
100 {TR_SLAY_ORC, "オーク倍打", 5, TR_SLAY_ORC, 15},
101 {TR_KILL_ORC, "オーク倍倍打", 5, TR_SLAY_ORC, 60},
102 {TR_SLAY_TROLL, "トロル倍打", 5, TR_SLAY_TROLL, 15},
103 {TR_KILL_TROLL, "トロル倍倍打", 5, TR_SLAY_TROLL, 60},
104 {TR_SLAY_GIANT, "巨人倍打", 5, TR_SLAY_GIANT, 20},
105 {TR_KILL_GIANT, "巨人倍倍打", 5, TR_SLAY_GIANT, 60},
106 {TR_SLAY_DRAGON, "竜倍打", 5, TR_SLAY_DRAGON, 20},
107 {TR_KILL_DRAGON, "竜倍倍打", 5, TR_SLAY_DRAGON, 60},
108 {TR_SLAY_HUMAN, "人間倍打", 5, TR_SLAY_HUMAN, 20},
109 {TR_KILL_HUMAN, "人間倍倍打", 5, TR_SLAY_HUMAN, 60},
111 {TR_ESP_ANIMAL, "動物ESP", 6, TR_SLAY_ANIMAL, 40},
112 {TR_ESP_UNDEAD, "不死ESP", 6, TR_SLAY_UNDEAD, 40},
113 {TR_ESP_DEMON, "悪魔ESP", 6, TR_SLAY_DEMON, 40},
114 {TR_ESP_ORC, "オークESP", 6, TR_SLAY_ORC, 40},
115 {TR_ESP_TROLL, "トロルESP", 6, TR_SLAY_TROLL, 40},
116 {TR_ESP_GIANT, "巨人ESP", 6, TR_SLAY_GIANT, 40},
117 {TR_ESP_DRAGON, "竜ESP", 6, TR_SLAY_DRAGON, 40},
118 {TR_ESP_HUMAN, "人間ESP", 6, TR_SLAY_HUMAN, 40},
120 {ESSENCE_ATTACK, "攻撃", 10, TR_ES_ATTACK, 30},
121 {ESSENCE_AC, "防御", 10, TR_ES_AC, 15},
122 {ESSENCE_TMP_RES_ACID, "酸耐性発動", 7, TR_RES_ACID, 50},
123 {ESSENCE_TMP_RES_ELEC, "電撃耐性発動", 7, TR_RES_ELEC, 50},
124 {ESSENCE_TMP_RES_FIRE, "火炎耐性発動", 7, TR_RES_FIRE, 50},
125 {ESSENCE_TMP_RES_COLD, "冷気耐性発動", 7, TR_RES_COLD, 50},
126 {ESSENCE_SH_FIRE, "火炎オーラ", 7, -1, 50},
127 {ESSENCE_SH_ELEC, "電撃オーラ", 7, -1, 50},
128 {ESSENCE_SH_COLD, "冷気オーラ", 7, -1, 50},
129 {ESSENCE_RESISTANCE, "全耐性", 2, -1, 150},
130 {ESSENCE_SUSTAIN, "装備保持", 10, -1, 10},
131 {ESSENCE_SLAY_GLOVE, "殺戮の小手", 1, TR_ES_ATTACK, 200},
136 static essence_type essence_info[] =
138 {TR_STR, "strength", 4, TR_STR, 20},
139 {TR_INT, "intelligence", 4, TR_INT, 20},
140 {TR_WIS, "wisdom", 4, TR_WIS, 20},
141 {TR_DEX, "dexterity", 4, TR_DEX, 20},
142 {TR_CON, "constitution", 4, TR_CON, 20},
143 {TR_CHR, "charisma", 4, TR_CHR, 20},
144 {TR_MAGIC_MASTERY, "magic mastery", 4, TR_MAGIC_MASTERY, 20},
145 {TR_STEALTH, "stealth", 4, TR_STEALTH, 40},
146 {TR_SEARCH, "serching", 4, TR_SEARCH, 15},
147 {TR_INFRA, "infravision", 4, TR_INFRA, 15},
148 {TR_TUNNEL, "digging", 4, TR_TUNNEL, 15},
149 {TR_SPEED, "speed", 4, TR_SPEED, 12},
150 {TR_BLOWS, "extra attack", 1, TR_BLOWS, 20},
151 {TR_CHAOTIC, "chaos brand", 1, TR_CHAOTIC, 15},
152 {TR_VAMPIRIC, "vampiric brand", 1, TR_VAMPIRIC, 60},
153 {TR_IMPACT, "quake activation", 7, TR_IMPACT, 15},
154 {TR_BRAND_POIS, "poison brand", 1, TR_BRAND_POIS, 20},
155 {TR_BRAND_ACID, "acid brand", 1, TR_BRAND_ACID, 20},
156 {TR_BRAND_ELEC, "electric brand", 1, TR_BRAND_ELEC, 20},
157 {TR_BRAND_FIRE, "fire brand", 1, TR_BRAND_FIRE, 20},
158 {TR_BRAND_COLD, "cold brand", 1, TR_BRAND_COLD, 20},
159 {TR_SUST_STR, "sustain strength", 3, TR_SUST_STR, 15},
160 {TR_SUST_INT, "sustain intelligence", 3, TR_SUST_STR, 15},
161 {TR_SUST_WIS, "sustain wisdom", 3, TR_SUST_STR, 15},
162 {TR_SUST_DEX, "sustain dexterity", 3, TR_SUST_STR, 15},
163 {TR_SUST_CON, "sustain constitution", 3, TR_SUST_STR, 15},
164 {TR_SUST_CHR, "sustain charisma", 3, TR_SUST_STR, 15},
165 {TR_IM_ACID, "acid immunity", 2, TR_IM_ACID, 20},
166 {TR_IM_ELEC, "electric immunity", 2, TR_IM_ACID, 20},
167 {TR_IM_FIRE, "fire immunity", 2, TR_IM_ACID, 20},
168 {TR_IM_COLD, "cold immunity", 2, TR_IM_ACID, 20},
169 {TR_REFLECT, "reflection", 2, TR_REFLECT, 20},
170 {TR_FREE_ACT, "free action", 3, TR_FREE_ACT, 20},
171 {TR_HOLD_EXP, "hold experience", 3, TR_HOLD_EXP, 20},
172 {TR_RES_ACID, "resistance to acid", 2, TR_RES_ACID, 15},
173 {TR_RES_ELEC, "resistance to electric", 2, TR_RES_ELEC, 15},
174 {TR_RES_FIRE, "resistance to fire", 2, TR_RES_FIRE, 15},
175 {TR_RES_COLD, "resistance to cold", 2, TR_RES_COLD, 15},
176 {TR_RES_POIS, "resistance to poison", 2, TR_RES_POIS, 25},
177 {TR_RES_FEAR, "resistance to fear", 2, TR_RES_FEAR, 20},
178 {TR_RES_LITE, "resistance to light", 2, TR_RES_LITE, 20},
179 {TR_RES_DARK, "resistance to dark", 2, TR_RES_DARK, 20},
180 {TR_RES_BLIND, "resistance to blind", 2, TR_RES_BLIND, 20},
181 {TR_RES_CONF, "resistance to confusion", 2, TR_RES_CONF, 20},
182 {TR_RES_SOUND, "resistance to sound", 2, TR_RES_SOUND, 20},
183 {TR_RES_SHARDS, "resistance to shard", 2, TR_RES_SHARDS, 20},
184 {TR_RES_NETHER, "resistance to nether", 2, TR_RES_NETHER, 20},
185 {TR_RES_NEXUS, "resistance to nexus", 2, TR_RES_NEXUS, 20},
186 {TR_RES_CHAOS, "resistance to chaos", 2, TR_RES_CHAOS, 20},
187 {TR_RES_DISEN, "resistance to disenchantment", 2, TR_RES_DISEN, 20},
188 {TR_SH_FIRE, "", 0, -2, 0},
189 {TR_SH_ELEC, "", 0, -2, 0},
190 {TR_SH_COLD, "", 0, -2, 0},
191 {TR_NO_MAGIC, "anti magic", 3, TR_NO_MAGIC, 15},
192 {TR_WARNING, "warning", 3, TR_WARNING, 20},
193 {TR_LEVITATION, "levitation", 3, TR_LEVITATION, 20},
194 {TR_LITE_1, "permanent light", 3, TR_LITE_1, 15},
195 {TR_LITE_2, "", 0, -2, 0},
196 {TR_LITE_3, "", 0, -2, 0},
197 {TR_SEE_INVIS, "see invisible", 3, TR_SEE_INVIS, 20},
198 {TR_TELEPATHY, "telepathy", 6, TR_TELEPATHY, 15},
199 {TR_SLOW_DIGEST, "slow digestion", 3, TR_SLOW_DIGEST, 15},
200 {TR_REGEN, "regeneration", 3, TR_REGEN, 20},
201 {TR_TELEPORT, "teleport", 3, TR_TELEPORT, 25},
203 {TR_SLAY_EVIL, "slay evil", 5, TR_SLAY_EVIL, 100},
204 {TR_SLAY_ANIMAL, "slay animal", 5, TR_SLAY_ANIMAL, 20},
205 {TR_KILL_ANIMAL, "kill animal", 5, TR_SLAY_ANIMAL, 60},
206 {TR_KILL_EVIL, "kill evil", 0, TR_SLAY_EVIL, 60},
207 {TR_SLAY_UNDEAD, "slay undead", 5, TR_SLAY_UNDEAD, 20},
208 {TR_KILL_UNDEAD, "kill undead", 5, TR_SLAY_UNDEAD, 60},
209 {TR_SLAY_DEMON, "slay demon", 5, TR_SLAY_DEMON, 20},
210 {TR_KILL_DEMON, "kill demon", 5, TR_SLAY_DEMON, 60},
211 {TR_SLAY_ORC, "slay orc", 5, TR_SLAY_ORC, 15},
212 {TR_KILL_ORC, "kill orc", 5, TR_SLAY_ORC, 60},
213 {TR_SLAY_TROLL, "slay troll", 5, TR_SLAY_TROLL, 15},
214 {TR_KILL_TROLL, "kill troll", 5, TR_SLAY_TROLL, 60},
215 {TR_SLAY_GIANT, "slay giant", 5, TR_SLAY_GIANT, 20},
216 {TR_KILL_GIANT, "kill giant", 5, TR_SLAY_GIANT, 60},
217 {TR_SLAY_DRAGON, "slay dragon", 5, TR_SLAY_DRAGON, 20},
218 {TR_KILL_DRAGON, "kill dragon", 5, TR_SLAY_DRAGON, 60},
219 {TR_SLAY_HUMAN, "slay human", 5, TR_SLAY_HUMAN, 20},
220 {TR_KILL_HUMAN, "kill human", 5, TR_SLAY_HUMAN, 60},
222 {TR_ESP_ANIMAL, "sense animal", 6, TR_SLAY_ANIMAL, 40},
223 {TR_ESP_UNDEAD, "sense undead", 6, TR_SLAY_UNDEAD, 40},
224 {TR_ESP_DEMON, "sense demon", 6, TR_SLAY_DEMON, 40},
225 {TR_ESP_ORC, "sense orc", 6, TR_SLAY_ORC, 40},
226 {TR_ESP_TROLL, "sense troll", 6, TR_SLAY_TROLL, 40},
227 {TR_ESP_GIANT, "sense giant", 6, TR_SLAY_GIANT, 40},
228 {TR_ESP_DRAGON, "sense dragon", 6, TR_SLAY_DRAGON, 40},
229 {TR_ESP_HUMAN, "sense human", 6, TR_SLAY_HUMAN, 40},
231 {ESSENCE_ATTACK, "weapon enchant", 10, TR_ES_ATTACK, 30},
232 {ESSENCE_AC, "armor enchant", 10, TR_ES_AC, 15},
233 {ESSENCE_TMP_RES_ACID, "resist acid activation", 7, TR_RES_ACID, 50},
234 {ESSENCE_TMP_RES_ELEC, "resist electricity activation", 7, TR_RES_ELEC, 50},
235 {ESSENCE_TMP_RES_FIRE, "resist fire activation", 7, TR_RES_FIRE, 50},
236 {ESSENCE_TMP_RES_COLD, "resist cold activation", 7, TR_RES_COLD, 50},
237 {ESSENCE_SH_FIRE, "fiery sheath", 7, -1, 50},
238 {ESSENCE_SH_ELEC, "electric sheath", 7, -1, 50},
239 {ESSENCE_SH_COLD, "sheath of coldness", 7, -1, 50},
240 {ESSENCE_RESISTANCE, "resistance", 2, -1, 150},
241 {ESSENCE_SUSTAIN, "elements proof", 10, -1, 10},
242 {ESSENCE_SLAY_GLOVE, "gauntlets of slaying", 1, TR_ES_ATTACK, 200},
250 * エッセンス名テーブル / Essense names for Weapon smith
253 concptr essence_name[] =
356 concptr essence_name[] =
458 static concptr const kaji_tips[5] =
461 "現在持っているエッセンスの一覧を表示する。",
462 "アイテムからエッセンスを取り出す。エッセンスを取られたアイテムは全く魔法がかかっていない初期状態に戻る。",
463 "既にエッセンスが付加されたアイテムからエッセンスのみ消し去る。エッセンスは手に入らない。",
464 "アイテムにエッセンスを付加する。既にエッセンスが付加されたアイテムやアーティファクトには付加できない。",
465 "武器や防具を強化したり、攻撃で傷つかないようにしたりする。エッセンスが付加されたアイテムやアーティファクトに対しても使用できる。",
467 "Display essences you have.",
468 "Extract essences from an item. The item become non magical.",
469 "Remove added essences from an equipment which was improved before. The removed essence will be ruined.",
470 "Add essences to an item. The improved items or artifacts cannot be reimprove.",
471 "Enchant an equipment or make an equiment element-proofed. The improved items and artifacts can be enchanted too.",
477 * @brief 所持しているエッセンス一覧を表示する
480 static void display_essence(void)
485 for (i = 1; i < 22; i++)
489 prt(_("エッセンス 個数 エッセンス 個数 エッセンス 個数",
490 "Essence Num Essence Num Essence Num "), 1, 8);
491 for (i = 0; essence_name[i]; i++)
493 if (!essence_name[i][0]) continue;
494 prt(format("%-11s %5d", essence_name[i], p_ptr->magic_num1[i]), 2 + num % 21, 8 + num / 21 * 22);
497 prt(_("現在所持しているエッセンス", "List of all essences you have."), 0, 0);
507 static void drain_essence(void)
509 int drain_value[sizeof(p_ptr->magic_num1) / sizeof(s32b)];
513 bool observe = FALSE;
514 int old_ds, old_dd, old_to_h, old_to_d, old_ac, old_to_a, old_pval, old_name2;
515 TIME_EFFECT old_timeout;
516 BIT_FLAGS old_flgs[TR_FLAG_SIZE], new_flgs[TR_FLAG_SIZE];
522 OBJECT_IDX next_o_idx;
525 for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
528 item_tester_hook = object_is_weapon_armour_ammo;
530 q = _("どのアイテムから抽出しますか?", "Extract from which item? ");
531 s = _("抽出できるアイテムがありません。", "You have nothing you can extract from.");
533 o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT));
536 if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))
538 GAME_TEXT o_name[MAX_NLEN];
539 object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
540 if (!get_check(format(_("本当に%sから抽出してよろしいですか?", "Really extract from %s? "), o_name))) return;
543 take_turn(p_ptr, 100);
545 object_flags(o_ptr, old_flgs);
546 if (have_flag(old_flgs, TR_KILL_DRAGON)) add_flag(old_flgs, TR_SLAY_DRAGON);
547 if (have_flag(old_flgs, TR_KILL_ANIMAL)) add_flag(old_flgs, TR_SLAY_ANIMAL);
548 if (have_flag(old_flgs, TR_KILL_EVIL)) add_flag(old_flgs, TR_SLAY_EVIL);
549 if (have_flag(old_flgs, TR_KILL_UNDEAD)) add_flag(old_flgs, TR_SLAY_UNDEAD);
550 if (have_flag(old_flgs, TR_KILL_DEMON)) add_flag(old_flgs, TR_SLAY_DEMON);
551 if (have_flag(old_flgs, TR_KILL_ORC)) add_flag(old_flgs, TR_SLAY_ORC);
552 if (have_flag(old_flgs, TR_KILL_TROLL)) add_flag(old_flgs, TR_SLAY_TROLL);
553 if (have_flag(old_flgs, TR_KILL_GIANT)) add_flag(old_flgs, TR_SLAY_GIANT);
554 if (have_flag(old_flgs, TR_KILL_HUMAN)) add_flag(old_flgs, TR_SLAY_HUMAN);
556 old_to_a = o_ptr->to_a;
558 old_to_h = o_ptr->to_h;
559 old_to_d = o_ptr->to_d;
562 old_pval = o_ptr->pval;
563 old_name2 = o_ptr->name2;
564 old_timeout = o_ptr->timeout;
565 if (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE | TRC_PERMA_CURSE)) dec--;
566 if (have_flag(old_flgs, TR_ADD_L_CURSE)) dec--;
567 if (have_flag(old_flgs, TR_ADD_H_CURSE)) dec--;
568 if (have_flag(old_flgs, TR_AGGRAVATE)) dec--;
569 if (have_flag(old_flgs, TR_NO_TELE)) dec--;
570 if (have_flag(old_flgs, TR_DRAIN_EXP)) dec--;
571 if (have_flag(old_flgs, TR_DRAIN_HP)) dec--;
572 if (have_flag(old_flgs, TR_DRAIN_MANA)) dec--;
573 if (have_flag(old_flgs, TR_CALL_ANIMAL)) dec--;
574 if (have_flag(old_flgs, TR_CALL_DEMON)) dec--;
575 if (have_flag(old_flgs, TR_CALL_DRAGON)) dec--;
576 if (have_flag(old_flgs, TR_CALL_UNDEAD)) dec--;
577 if (have_flag(old_flgs, TR_COWARDICE)) dec--;
578 if (have_flag(old_flgs, TR_LOW_MELEE)) dec--;
579 if (have_flag(old_flgs, TR_LOW_AC)) dec--;
580 if (have_flag(old_flgs, TR_LOW_MAGIC)) dec--;
581 if (have_flag(old_flgs, TR_FAST_DIGEST)) dec--;
582 if (have_flag(old_flgs, TR_SLOW_REGEN)) dec--;
583 if (have_flag(old_flgs, TR_TY_CURSE)) dec--;
587 next_o_idx = o_ptr->next_o_idx;
588 marked = o_ptr->marked;
589 weight = o_ptr->weight;
590 number = o_ptr->number;
592 object_prep(o_ptr, o_ptr->k_idx);
596 o_ptr->next_o_idx = next_o_idx;
597 o_ptr->marked = marked;
598 o_ptr->number = number;
599 if (o_ptr->tval == TV_DRAG_ARMOR) o_ptr->timeout = old_timeout;
600 if (item >= 0) p_ptr->total_weight += (o_ptr->weight*o_ptr->number - weight * number);
601 o_ptr->ident |= (IDENT_MENTAL);
605 object_flags(o_ptr, new_flgs);
607 for (i = 0; essence_info[i].add_name; i++)
609 essence_type *es_ptr = &essence_info[i];
610 PARAMETER_VALUE pval = 0;
612 if (es_ptr->add < TR_FLAG_MAX && is_pval_flag(es_ptr->add) && old_pval)
613 pval = (have_flag(new_flgs, es_ptr->add)) ? old_pval - o_ptr->pval : old_pval;
615 if (es_ptr->add < TR_FLAG_MAX &&
616 (!have_flag(new_flgs, es_ptr->add) || pval) &&
617 have_flag(old_flgs, es_ptr->add))
621 drain_value[es_ptr->essence] += 10 * pval;
623 else if (es_ptr->essence != -2)
625 drain_value[es_ptr->essence] += 10;
627 else if (es_ptr->add == TR_SH_FIRE)
629 drain_value[TR_BRAND_FIRE] += 10;
630 drain_value[TR_RES_FIRE] += 10;
632 else if (es_ptr->add == TR_SH_ELEC)
634 drain_value[TR_BRAND_ELEC] += 10;
635 drain_value[TR_RES_ELEC] += 10;
637 else if (es_ptr->add == TR_SH_COLD)
639 drain_value[TR_BRAND_COLD] += 10;
640 drain_value[TR_RES_COLD] += 10;
642 else if (es_ptr->add == TR_LITE_2)
644 drain_value[TR_LITE_1] += 20;
646 else if (es_ptr->add == TR_LITE_3)
648 drain_value[TR_LITE_1] += 30;
653 if ((have_flag(old_flgs, TR_FORCE_WEAPON)) && !(have_flag(new_flgs, TR_FORCE_WEAPON)))
655 drain_value[TR_INT] += 5;
656 drain_value[TR_WIS] += 5;
658 if ((have_flag(old_flgs, TR_VORPAL)) && !(have_flag(new_flgs, TR_VORPAL)))
660 drain_value[TR_BRAND_POIS] += 5;
661 drain_value[TR_BRAND_ACID] += 5;
662 drain_value[TR_BRAND_ELEC] += 5;
663 drain_value[TR_BRAND_FIRE] += 5;
664 drain_value[TR_BRAND_COLD] += 5;
666 if ((have_flag(old_flgs, TR_DEC_MANA)) && !(have_flag(new_flgs, TR_DEC_MANA)))
668 drain_value[TR_INT] += 10;
670 if ((have_flag(old_flgs, TR_XTRA_MIGHT)) && !(have_flag(new_flgs, TR_XTRA_MIGHT)))
672 drain_value[TR_STR] += 10;
674 if ((have_flag(old_flgs, TR_XTRA_SHOTS)) && !(have_flag(new_flgs, TR_XTRA_SHOTS)))
676 drain_value[TR_DEX] += 10;
678 if (old_name2 == EGO_2WEAPON)
680 drain_value[TR_DEX] += 20;
682 if (object_is_weapon_ammo(o_ptr))
684 if (old_ds > o_ptr->ds) drain_value[TR_ES_ATTACK] += (old_ds - o_ptr->ds) * 10;
686 if (old_dd > o_ptr->dd) drain_value[TR_ES_ATTACK] += (old_dd - o_ptr->dd) * 10;
688 if (old_to_h > o_ptr->to_h) drain_value[TR_ES_ATTACK] += (old_to_h - o_ptr->to_h) * 10;
689 if (old_to_d > o_ptr->to_d) drain_value[TR_ES_ATTACK] += (old_to_d - o_ptr->to_d) * 10;
690 if (old_ac > o_ptr->ac) drain_value[TR_ES_AC] += (old_ac - o_ptr->ac) * 10;
691 if (old_to_a > o_ptr->to_a) drain_value[TR_ES_AC] += (old_to_a - o_ptr->to_a) * 10;
693 for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
695 drain_value[i] *= number;
696 drain_value[i] = drain_value[i] * dec / 4;
697 drain_value[i] = MAX(drain_value[i], 0);
698 if ((o_ptr->tval >= TV_SHOT) && (o_ptr->tval <= TV_BOLT)) drain_value[i] /= 10;
706 msg_print(_("エッセンスは抽出できませんでした。", "You were not able to extract any essence."));
710 msg_print(_("抽出したエッセンス:", "Extracted essences:"));
712 for (i = 0; essence_name[i]; i++)
714 if (!essence_name[i][0]) continue;
715 if (!drain_value[i]) continue;
717 p_ptr->magic_num1[i] += drain_value[i];
718 p_ptr->magic_num1[i] = MIN(20000, p_ptr->magic_num1[i]);
720 msg_format("%s...%d%s", essence_name[i], drain_value[i], _("。", ". "));
724 /* Apply autodestroy/inscription to the drained item */
725 autopick_alter_item(item, TRUE);
726 p_ptr->update |= (PU_COMBINE | PU_REORDER);
727 p_ptr->window |= (PW_INVEN);
731 * @brief 付加するエッセンスの大別を選択する
732 * @return 選んだエッセンスの大別ID
734 static COMMAND_CODE choose_essence(void)
736 COMMAND_CODE mode = 0;
738 COMMAND_CODE menu_line = (use_menu ? 1 : 0);
741 concptr menu_name[] = {
751 concptr menu_name[] = {
761 const COMMAND_CODE mode_max = 7;
763 if (repeat_pull(&mode) && 1 <= mode && mode <= mode_max)
773 for (i = 0; i < mode_max; i++)
775 prt(format(" %s %s", (menu_line == 1 + i) ? "》" : " ", menu_name[i]), 2 + i, 14);
776 prt("どの種類のエッセンス付加を行いますか?", 0, 0);
778 prt(format(" %s %s", (menu_line == 1 + i) ? "> " : " ", menu_name[i]), 2 + i, 14);
779 prt("Choose from menu.", 0, 0);
798 menu_line += mode_max - 1;
807 if (menu_line > mode_max) menu_line -= mode_max;
818 for (i = 0; i < mode_max; i++)
819 prt(format(" %c) %s", 'a' + i, menu_name[i]), 2 + i, 14);
821 if (!get_com(_("何を付加しますか:", "Command :"), &choice, TRUE))
827 if (isupper(choice)) choice = (char)tolower(choice);
829 if ('a' <= choice && choice <= 'a' + (char)mode_max - 1)
830 mode = (int)choice - 'a' + 1;
840 * @brief エッセンスを実際に付加する
841 * @param mode エッセンスの大別ID
844 static void add_essence(ESSENCE_IDX mode)
856 GAME_TEXT o_name[MAX_NLEN];
858 essence_type *es_ptr;
859 bool able[22] = { 0 };
861 int menu_line = (use_menu ? 1 : 0);
863 for (i = 0; essence_info[i].add_name; i++)
865 es_ptr = &essence_info[i];
867 if (es_ptr->type != mode) continue;
871 if (!repeat_pull(&i) || i < 0 || i >= max_num)
874 /* Nothing chosen yet */
881 (void)strnfmt(out_val, 78, _("('*'で一覧, ESCで中断) どの能力を付加しますか?", "(*=List, ESC=exit) Add which ability? "));
882 if (use_menu) screen_save();
884 choice = (always_show_list || use_menu) ? ESCAPE : 1;
887 if (choice == ESCAPE) choice = ' ';
888 else if (!get_com(out_val, &choice, FALSE))break;
890 if (use_menu && choice != ' ')
904 menu_line += (max_num - 1);
941 if (menu_line > max_num) menu_line -= max_num;
944 if ((choice == ' ') || (choice == '*') || (choice == '?') || (use_menu && ask))
947 if (!redraw || use_menu)
951 char dummy[80], dummy2[80];
956 if (!use_menu) screen_save();
958 for (y = 1; y < 24; y++)
961 /* Print header(s) */
963 prt(format(" %-43s %6s/%s", "能力(必要エッセンス)", "必要数", "所持数"), 1, x);
966 prt(format(" %-43s %6s/%s", "Ability (needed essence)", "Needs", "Possess"), 1, x);
969 for (ctr = 0; ctr < max_num; ctr++)
971 es_ptr = &essence_info[num[ctr]];
975 if (ctr == (menu_line - 1))
976 strcpy(dummy, _("》 ", "> "));
977 else strcpy(dummy, " ");
980 /* letter/number for power selection */
983 sprintf(dummy, "%c) ", I2A(ctr));
986 strcat(dummy, es_ptr->add_name);
991 if (es_ptr->essence != -1)
993 strcat(dummy, format("(%s)", essence_name[es_ptr->essence]));
994 if (p_ptr->magic_num1[es_ptr->essence] < es_ptr->value) able[ctr] = FALSE;
1000 case ESSENCE_SH_FIRE:
1001 strcat(dummy, _("(焼棄+耐火炎)", "(brand fire + res.fire)"));
1002 if (p_ptr->magic_num1[TR_BRAND_FIRE] < es_ptr->value) able[ctr] = FALSE;
1003 if (p_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1005 case ESSENCE_SH_ELEC:
1006 strcat(dummy, _("(電撃+耐電撃)", "(brand elec. + res. elec.)"));
1007 if (p_ptr->magic_num1[TR_BRAND_ELEC] < es_ptr->value) able[ctr] = FALSE;
1008 if (p_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1010 case ESSENCE_SH_COLD:
1011 strcat(dummy, _("(凍結+耐冷気)", "(brand cold + res. cold)"));
1012 if (p_ptr->magic_num1[TR_BRAND_COLD] < es_ptr->value) able[ctr] = FALSE;
1013 if (p_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1015 case ESSENCE_RESISTANCE:
1016 strcat(dummy, _("(耐火炎+耐冷気+耐電撃+耐酸)", "(r.fire+r.cold+r.elec+r.acid)"));
1017 if (p_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1018 if (p_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1019 if (p_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1020 if (p_ptr->magic_num1[TR_RES_ACID] < es_ptr->value) able[ctr] = FALSE;
1022 case ESSENCE_SUSTAIN:
1023 strcat(dummy, _("(耐火炎+耐冷気+耐電撃+耐酸)", "(r.fire+r.cold+r.elec+r.acid)"));
1024 if (p_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1025 if (p_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1026 if (p_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1027 if (p_ptr->magic_num1[TR_RES_ACID] < es_ptr->value) able[ctr] = FALSE;
1032 if (!able[ctr]) col = TERM_RED;
1034 if (es_ptr->essence != -1)
1036 sprintf(dummy2, "%-49s %3d/%d", dummy, es_ptr->value, (int)p_ptr->magic_num1[es_ptr->essence]);
1040 sprintf(dummy2, "%-49s %3d/(\?\?)", dummy, es_ptr->value);
1043 c_prt(col, dummy2, ctr + 2, x);
1062 ask = (isupper(choice));
1065 if (ask) choice = (char)tolower(choice);
1067 /* Extract request */
1068 i = (islower(choice) ? A2I(choice) : -1);
1071 /* Totally Illegal */
1072 if ((i < 0) || (i >= max_num) || !able[i])
1084 (void)strnfmt(tmp_val, 78, _("%sを付加しますか? ", "Add the abilitiy of %s? "), essence_info[num[i]].add_name);
1086 /* Belay that order */
1087 if (!get_check(tmp_val)) continue;
1093 if (redraw) screen_load();
1099 es_ptr = &essence_info[num[i]];
1101 if (es_ptr->add == ESSENCE_SLAY_GLOVE)
1102 item_tester_tval = TV_GLOVES;
1103 else if (mode == 1 || mode == 5)
1104 item_tester_hook = item_tester_hook_melee_ammo;
1105 else if (es_ptr->add == ESSENCE_ATTACK)
1106 item_tester_hook = object_allow_enchant_weapon;
1107 else if (es_ptr->add == ESSENCE_AC)
1108 item_tester_hook = object_is_armour;
1110 item_tester_hook = object_is_weapon_armour_ammo;
1112 q = _("どのアイテムを改良しますか?", "Improve which item? ");
1113 s = _("改良できるアイテムがありません。", "You have nothing to improve.");
1115 o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT));
1118 if ((mode != 10) && (object_is_artifact(o_ptr) || object_is_smith(o_ptr)))
1120 msg_print(_("そのアイテムはこれ以上改良できない。", "This item is no more able to be improved."));
1124 object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1126 use_essence = es_ptr->value;
1127 if ((o_ptr->tval >= TV_SHOT) && (o_ptr->tval <= TV_BOLT)) use_essence = (use_essence + 9) / 10;
1128 if (o_ptr->number > 1)
1130 use_essence *= o_ptr->number;
1131 msg_format(_("%d個あるのでエッセンスは%d必要です。", "It will take %d essences."), o_ptr->number, use_essence);
1134 if (es_ptr->essence != -1)
1136 if (p_ptr->magic_num1[es_ptr->essence] < use_essence)
1138 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1141 if (is_pval_flag(es_ptr->add))
1143 if (o_ptr->pval < 0)
1145 msg_print(_("このアイテムの能力修正を強化することはできない。", "You cannot increase magic number of this item."));
1148 else if (es_ptr->add == TR_BLOWS)
1150 if (o_ptr->pval > 1)
1152 if (!get_check(_("修正値は1になります。よろしいですか?", "The magic number of this weapon will become 1. Are you sure? "))) return;
1156 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1158 else if (o_ptr->pval > 0)
1160 use_essence *= o_ptr->pval;
1161 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1167 PARAMETER_VALUE pval;
1168 PARAMETER_VALUE limit = MIN(5, p_ptr->magic_num1[es_ptr->essence] / es_ptr->value);
1170 sprintf(tmp, _("いくつ付加しますか? (1-%d): ", "Enchant how many? (1-%d): "), limit);
1171 strcpy(tmp_val, "1");
1173 if (!get_string(tmp, tmp_val, 1)) return;
1174 pval = (PARAMETER_VALUE)atoi(tmp_val);
1175 if (pval > limit) pval = limit;
1176 else if (pval < 1) pval = 1;
1177 o_ptr->pval += pval;
1178 use_essence *= pval;
1179 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1182 if (p_ptr->magic_num1[es_ptr->essence] < use_essence)
1184 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1188 else if (es_ptr->add == ESSENCE_SLAY_GLOVE)
1195 strcpy(tmp_val, "1");
1196 if (!get_string(format(_("いくつ付加しますか? (1-%d):", "Enchant how many? (1-%d):"), p_ptr->lev / 7 + 3), tmp_val, 2)) return;
1197 val = atoi(tmp_val);
1198 if (val > p_ptr->lev / 7 + 3) val = p_ptr->lev / 7 + 3;
1199 else if (val < 1) val = 1;
1201 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1202 if (p_ptr->magic_num1[es_ptr->essence] < use_essence)
1204 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1207 get_to_h = ((val + 1) / 2 + randint0(val / 2 + 1));
1208 get_to_d = ((val + 1) / 2 + randint0(val / 2 + 1));
1209 o_ptr->xtra4 = (get_to_h << 8) + get_to_d;
1210 o_ptr->to_h += get_to_h;
1211 o_ptr->to_d += get_to_d;
1213 p_ptr->magic_num1[es_ptr->essence] -= use_essence;
1214 if (es_ptr->add == ESSENCE_ATTACK)
1216 if ((o_ptr->to_h >= p_ptr->lev / 5 + 5) && (o_ptr->to_d >= p_ptr->lev / 5 + 5))
1218 msg_print(_("改良に失敗した。", "You failed to enchant."));
1219 take_turn(p_ptr, 100);
1224 if (o_ptr->to_h < p_ptr->lev / 5 + 5) o_ptr->to_h++;
1225 if (o_ptr->to_d < p_ptr->lev / 5 + 5) o_ptr->to_d++;
1228 else if (es_ptr->add == ESSENCE_AC)
1230 if (o_ptr->to_a >= p_ptr->lev / 5 + 5)
1232 msg_print(_("改良に失敗した。", "You failed to enchant."));
1233 take_turn(p_ptr, 100);
1238 if (o_ptr->to_a < p_ptr->lev / 5 + 5) o_ptr->to_a++;
1243 o_ptr->xtra3 = es_ptr->add + 1;
1248 bool success = TRUE;
1250 switch (es_ptr->add)
1252 case ESSENCE_SH_FIRE:
1253 if ((p_ptr->magic_num1[TR_BRAND_FIRE] < use_essence) || (p_ptr->magic_num1[TR_RES_FIRE] < use_essence))
1258 p_ptr->magic_num1[TR_BRAND_FIRE] -= use_essence;
1259 p_ptr->magic_num1[TR_RES_FIRE] -= use_essence;
1261 case ESSENCE_SH_ELEC:
1262 if ((p_ptr->magic_num1[TR_BRAND_ELEC] < use_essence) || (p_ptr->magic_num1[TR_RES_ELEC] < use_essence))
1267 p_ptr->magic_num1[TR_BRAND_ELEC] -= use_essence;
1268 p_ptr->magic_num1[TR_RES_ELEC] -= use_essence;
1270 case ESSENCE_SH_COLD:
1271 if ((p_ptr->magic_num1[TR_BRAND_COLD] < use_essence) || (p_ptr->magic_num1[TR_RES_COLD] < use_essence))
1276 p_ptr->magic_num1[TR_BRAND_COLD] -= use_essence;
1277 p_ptr->magic_num1[TR_RES_COLD] -= use_essence;
1279 case ESSENCE_RESISTANCE:
1280 case ESSENCE_SUSTAIN:
1281 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))
1286 p_ptr->magic_num1[TR_RES_ACID] -= use_essence;
1287 p_ptr->magic_num1[TR_RES_ELEC] -= use_essence;
1288 p_ptr->magic_num1[TR_RES_FIRE] -= use_essence;
1289 p_ptr->magic_num1[TR_RES_COLD] -= use_essence;
1294 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1297 if (es_ptr->add == ESSENCE_SUSTAIN)
1299 add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
1300 add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
1301 add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
1302 add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
1306 o_ptr->xtra3 = es_ptr->add + 1;
1310 take_turn(p_ptr, 100);
1313 msg_format(_("%sに%sの能力を付加しました。", "You have added ability of %s to %s."), o_name, es_ptr->add_name);
1315 msg_format(, es_ptr->add_name, o_name);
1317 p_ptr->update |= (PU_COMBINE | PU_REORDER);
1318 p_ptr->window |= (PW_INVEN);
1325 static void erase_essence(void)
1330 GAME_TEXT o_name[MAX_NLEN];
1331 BIT_FLAGS flgs[TR_FLAG_SIZE];
1333 item_tester_hook = object_is_smith;
1335 q = _("どのアイテムのエッセンスを消去しますか?", "Remove from which item? ");
1336 s = _("エッセンスを付加したアイテムがありません。", "You have nothing to remove essence.");
1338 o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR));
1341 object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1342 if (!get_check(format(_("よろしいですか? [%s]", "Are you sure? [%s]"), o_name))) return;
1344 take_turn(p_ptr, 100);
1346 if (o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE)
1348 o_ptr->to_h -= (o_ptr->xtra4 >> 8);
1349 o_ptr->to_d -= (o_ptr->xtra4 & 0x000f);
1351 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
1352 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
1355 object_flags(o_ptr, flgs);
1356 if (!(have_pval_flags(flgs))) o_ptr->pval = 0;
1357 msg_print(_("エッセンスを取り去った。", "You removed all essence you have added."));
1358 p_ptr->update |= (PU_COMBINE | PU_REORDER);
1359 p_ptr->window |= (PW_INVEN);
1363 * @brief 鍛冶コマンドのメインルーチン
1364 * @param only_browse TRUEならばエッセンス一覧の表示のみを行う
1367 void do_cmd_kaji(bool only_browse)
1369 COMMAND_CODE mode = 0;
1372 COMMAND_CODE menu_line = (use_menu ? 1 : 0);
1376 if (cmd_limit_confused(p_ptr)) return;
1379 msg_print(_("目が見えなくて作業できない!", "You are blind!"));
1384 msg_print(_("うまく見えなくて作業できない!", "You are hallucinating!"));
1389 if (!(repeat_pull(&mode) && 1 <= mode && mode <= 5))
1391 if (only_browse) screen_save();
1393 if (!only_browse) screen_save();
1399 prt(format(" %s エッセンス一覧", (menu_line == 1) ? "》" : " "), 2, 14);
1400 prt(format(" %s エッセンス抽出", (menu_line == 2) ? "》" : " "), 3, 14);
1401 prt(format(" %s エッセンス消去", (menu_line == 3) ? "》" : " "), 4, 14);
1402 prt(format(" %s エッセンス付加", (menu_line == 4) ? "》" : " "), 5, 14);
1403 prt(format(" %s 武器/防具強化", (menu_line == 5) ? "》" : " "), 6, 14);
1404 prt(format("どの種類の技術を%sますか?", only_browse ? "調べ" : "使い"), 0, 0);
1406 prt(format(" %s List essences", (menu_line == 1) ? "> " : " "), 2, 14);
1407 prt(format(" %s Extract essence", (menu_line == 2) ? "> " : " "), 3, 14);
1408 prt(format(" %s Remove essence", (menu_line == 3) ? "> " : " "), 4, 14);
1409 prt(format(" %s Add essence", (menu_line == 4) ? "> " : " "), 5, 14);
1410 prt(format(" %s Enchant weapon/armor", (menu_line == 5) ? "> " : " "), 6, 14);
1411 prt(format("Choose command from menu."), 0, 0);
1438 if (menu_line > 5) menu_line -= 5;
1446 prt(_(" a) エッセンス一覧", " a) List essences"), 2, 14);
1447 prt(_(" b) エッセンス抽出", " b) Extract essence"), 3, 14);
1448 prt(_(" c) エッセンス消去", " c) Remove essence"), 4, 14);
1449 prt(_(" d) エッセンス付加", " d) Add essence"), 5, 14);
1450 prt(_(" e) 武器/防具強化", " e) Enchant weapon/armor"), 6, 14);
1452 if (!get_com(format("どの能力を%sますか:", only_browse ? "調べ" : "使い"), &choice, TRUE))
1454 if (!get_com("Command :", &choice, TRUE))
1491 /* Clear lines, position cursor (really should use strlen here) */
1492 Term_erase(14, 21, 255);
1493 Term_erase(14, 20, 255);
1494 Term_erase(14, 19, 255);
1495 Term_erase(14, 18, 255);
1496 Term_erase(14, 17, 255);
1497 Term_erase(14, 16, 255);
1499 roff_to_buf(kaji_tips[mode - 1], 62, temp, sizeof(temp));
1500 for (j = 0, line = 17; temp[j]; j += (1 + strlen(&temp[j])))
1502 prt(&temp[j], line, 15);
1507 if (!only_browse) screen_load();
1508 } while (only_browse);
1513 case 1: display_essence(); break;
1514 case 2: drain_essence(); break;
1515 case 3: erase_essence(); break;
1517 mode = choose_essence();
1522 case 5: add_essence(10); break;