2 * @brief プレイヤーの鍛冶コマンド実装
7 #include "cmd-item/cmd-smith.h"
8 #include "autopick/autopick.h"
9 #include "cmd/cmd-basic.h"
10 #include "inventory/player-inventory.h"
11 #include "object-enchant/object-ego.h"
12 #include "object-enchant/special-object-flags.h"
13 #include "object-enchant/tr-types.h"
14 #include "object-enchant/trc-types.h"
15 #include "object/item-use-flags.h"
16 #include "object/object-flavor.h"
17 #include "object/object-generator.h"
18 #include "object/object-hook.h"
19 #include "object/object1.h"
20 #include "perception/object-perception.h"
21 #include "player/player-status.h"
22 #include "term/term-color-types.h"
23 #include "util/util.h"
24 #include "view/display-main-window.h"
27 * エッセンス情報の構造体 / A structure for smithing
30 int add; /* TR flag number or special essence id */
31 concptr add_name; /* Name of this ability */
32 ESSENCE_IDX type; /* Menu number */
33 int essence; /* Index for carrying essences */
34 int value; /* Needed value to add this ability */
39 * エッセンス情報テーブル Smithing type data for Weapon smith
42 static essence_type essence_info[] =
44 {TR_STR, "腕力", 4, TR_STR, 20},
45 {TR_INT, "知能", 4, TR_INT, 20},
46 {TR_WIS, "賢さ", 4, TR_WIS, 20},
47 {TR_DEX, "器用さ", 4, TR_DEX, 20},
48 {TR_CON, "耐久力", 4, TR_CON, 20},
49 {TR_CHR, "魅力", 4, TR_CHR, 20},
50 {TR_MAGIC_MASTERY, "魔力支配", 4, TR_MAGIC_MASTERY, 20},
51 {TR_STEALTH, "隠密", 4, TR_STEALTH, 40},
52 {TR_SEARCH, "探索", 4, TR_SEARCH, 15},
53 {TR_INFRA, "赤外線視力", 4, TR_INFRA, 15},
54 {TR_TUNNEL, "採掘", 4, TR_TUNNEL, 15},
55 {TR_SPEED, "スピード", 4, TR_SPEED, 12},
56 {TR_BLOWS, "追加攻撃", 1, TR_BLOWS, 20},
57 {TR_CHAOTIC, "カオス攻撃", 1, TR_CHAOTIC, 15},
58 {TR_VAMPIRIC, "吸血攻撃", 1, TR_VAMPIRIC, 60},
59 {TR_IMPACT, "地震発動", 7, TR_IMPACT, 15},
60 {TR_BRAND_POIS, "毒殺", 1, TR_BRAND_POIS, 20},
61 {TR_BRAND_ACID, "溶解", 1, TR_BRAND_ACID, 20},
62 {TR_BRAND_ELEC, "電撃", 1, TR_BRAND_ELEC, 20},
63 {TR_BRAND_FIRE, "焼棄", 1, TR_BRAND_FIRE, 20},
64 {TR_BRAND_COLD, "凍結", 1, TR_BRAND_COLD, 20},
65 {TR_SUST_STR, "腕力維持", 3, TR_SUST_STR, 15},
66 {TR_SUST_INT, "知能維持", 3, TR_SUST_STR, 15},
67 {TR_SUST_WIS, "賢さ維持", 3, TR_SUST_STR, 15},
68 {TR_SUST_DEX, "器用さ維持", 3, TR_SUST_STR, 15},
69 {TR_SUST_CON, "耐久力維持", 3, TR_SUST_STR, 15},
70 {TR_SUST_CHR, "魅力維持", 3, TR_SUST_STR, 15},
71 {TR_IM_ACID, "酸免疫", 2, TR_IM_ACID, 20},
72 {TR_IM_ELEC, "電撃免疫", 2, TR_IM_ACID, 20},
73 {TR_IM_FIRE, "火炎免疫", 2, TR_IM_ACID, 20},
74 {TR_IM_COLD, "冷気免疫", 2, TR_IM_ACID, 20},
75 {TR_REFLECT, "反射", 2, TR_REFLECT, 20},
76 {TR_FREE_ACT, "麻痺知らず", 3, TR_FREE_ACT, 20},
77 {TR_HOLD_EXP, "経験値維持", 3, TR_HOLD_EXP, 20},
78 {TR_RES_ACID, "耐酸", 2, TR_RES_ACID, 15},
79 {TR_RES_ELEC, "耐電撃", 2, TR_RES_ELEC, 15},
80 {TR_RES_FIRE, "耐火炎", 2, TR_RES_FIRE, 15},
81 {TR_RES_COLD, "耐冷気", 2, TR_RES_COLD, 15},
82 {TR_RES_POIS, "耐毒", 2, TR_RES_POIS, 25},
83 {TR_RES_FEAR, "耐恐怖", 2, TR_RES_FEAR, 20},
84 {TR_RES_LITE, "耐閃光", 2, TR_RES_LITE, 20},
85 {TR_RES_DARK, "耐暗黒", 2, TR_RES_DARK, 20},
86 {TR_RES_BLIND, "耐盲目", 2, TR_RES_BLIND, 20},
87 {TR_RES_CONF, "耐混乱", 2, TR_RES_CONF, 20},
88 {TR_RES_SOUND, "耐轟音", 2, TR_RES_SOUND, 20},
89 {TR_RES_SHARDS, "耐破片", 2, TR_RES_SHARDS, 20},
90 {TR_RES_NETHER, "耐地獄", 2, TR_RES_NETHER, 20},
91 {TR_RES_NEXUS, "耐因果混乱", 2, TR_RES_NEXUS, 20},
92 {TR_RES_CHAOS, "耐カオス", 2, TR_RES_CHAOS, 20},
93 {TR_RES_DISEN, "耐劣化", 2, TR_RES_DISEN, 20},
94 {TR_SH_FIRE, "", 0, -2, 0},
95 {TR_SH_ELEC, "", 0, -2, 0},
96 {TR_SH_COLD, "", 0, -2, 0},
97 {TR_NO_MAGIC, "反魔法", 3, TR_NO_MAGIC, 15},
98 {TR_WARNING, "警告", 3, TR_WARNING, 20},
99 {TR_LEVITATION, "浮遊", 3, TR_LEVITATION, 20},
100 {TR_LITE_1, "永久光源", 3, TR_LITE_1, 15},
101 {TR_LITE_2, "", 0, -2, 0},
102 {TR_LITE_3, "", 0, -2, 0},
103 {TR_SEE_INVIS, "可視透明", 3, TR_SEE_INVIS, 20},
104 {TR_TELEPATHY, "テレパシー", 6, TR_TELEPATHY, 15},
105 {TR_SLOW_DIGEST, "遅消化", 3, TR_SLOW_DIGEST, 15},
106 {TR_REGEN, "急速回復", 3, TR_REGEN, 20},
107 {TR_TELEPORT, "テレポート", 3, TR_TELEPORT, 25},
109 {TR_SLAY_EVIL, "邪悪倍打", 5, TR_SLAY_EVIL, 100},
110 {TR_KILL_EVIL, "邪悪倍倍打", 0, TR_SLAY_EVIL, 60},
111 {TR_SLAY_ANIMAL, "動物倍打", 5, TR_SLAY_ANIMAL, 20},
112 {TR_KILL_ANIMAL, "動物倍倍打", 5, TR_SLAY_ANIMAL, 60},
113 {TR_SLAY_UNDEAD, "不死倍打", 5, TR_SLAY_UNDEAD, 20},
114 {TR_KILL_UNDEAD, "不死倍倍打", 5, TR_SLAY_UNDEAD, 60},
115 {TR_SLAY_DEMON, "悪魔倍打", 5, TR_SLAY_DEMON, 20},
116 {TR_KILL_DEMON, "悪魔倍倍打", 5, TR_SLAY_DEMON, 60},
117 {TR_SLAY_ORC, "オーク倍打", 5, TR_SLAY_ORC, 15},
118 {TR_KILL_ORC, "オーク倍倍打", 5, TR_SLAY_ORC, 60},
119 {TR_SLAY_TROLL, "トロル倍打", 5, TR_SLAY_TROLL, 15},
120 {TR_KILL_TROLL, "トロル倍倍打", 5, TR_SLAY_TROLL, 60},
121 {TR_SLAY_GIANT, "巨人倍打", 5, TR_SLAY_GIANT, 20},
122 {TR_KILL_GIANT, "巨人倍倍打", 5, TR_SLAY_GIANT, 60},
123 {TR_SLAY_DRAGON, "竜倍打", 5, TR_SLAY_DRAGON, 20},
124 {TR_KILL_DRAGON, "竜倍倍打", 5, TR_SLAY_DRAGON, 60},
125 {TR_SLAY_HUMAN, "人間倍打", 5, TR_SLAY_HUMAN, 20},
126 {TR_KILL_HUMAN, "人間倍倍打", 5, TR_SLAY_HUMAN, 60},
128 {TR_ESP_ANIMAL, "動物ESP", 6, TR_SLAY_ANIMAL, 40},
129 {TR_ESP_UNDEAD, "不死ESP", 6, TR_SLAY_UNDEAD, 40},
130 {TR_ESP_DEMON, "悪魔ESP", 6, TR_SLAY_DEMON, 40},
131 {TR_ESP_ORC, "オークESP", 6, TR_SLAY_ORC, 40},
132 {TR_ESP_TROLL, "トロルESP", 6, TR_SLAY_TROLL, 40},
133 {TR_ESP_GIANT, "巨人ESP", 6, TR_SLAY_GIANT, 40},
134 {TR_ESP_DRAGON, "竜ESP", 6, TR_SLAY_DRAGON, 40},
135 {TR_ESP_HUMAN, "人間ESP", 6, TR_SLAY_HUMAN, 40},
137 {ESSENCE_ATTACK, "攻撃", 10, TR_ES_ATTACK, 30},
138 {ESSENCE_AC, "防御", 10, TR_ES_AC, 15},
139 {ESSENCE_TMP_RES_ACID, "酸耐性発動", 7, TR_RES_ACID, 50},
140 {ESSENCE_TMP_RES_ELEC, "電撃耐性発動", 7, TR_RES_ELEC, 50},
141 {ESSENCE_TMP_RES_FIRE, "火炎耐性発動", 7, TR_RES_FIRE, 50},
142 {ESSENCE_TMP_RES_COLD, "冷気耐性発動", 7, TR_RES_COLD, 50},
143 {ESSENCE_SH_FIRE, "火炎オーラ", 7, -1, 50},
144 {ESSENCE_SH_ELEC, "電撃オーラ", 7, -1, 50},
145 {ESSENCE_SH_COLD, "冷気オーラ", 7, -1, 50},
146 {ESSENCE_RESISTANCE, "全耐性", 2, -1, 150},
147 {ESSENCE_SUSTAIN, "装備保持", 10, -1, 10},
148 {ESSENCE_SLAY_GLOVE, "殺戮の小手", 1, TR_ES_ATTACK, 200},
153 static essence_type essence_info[] =
155 {TR_STR, "strength", 4, TR_STR, 20},
156 {TR_INT, "intelligence", 4, TR_INT, 20},
157 {TR_WIS, "wisdom", 4, TR_WIS, 20},
158 {TR_DEX, "dexterity", 4, TR_DEX, 20},
159 {TR_CON, "constitution", 4, TR_CON, 20},
160 {TR_CHR, "charisma", 4, TR_CHR, 20},
161 {TR_MAGIC_MASTERY, "magic mastery", 4, TR_MAGIC_MASTERY, 20},
162 {TR_STEALTH, "stealth", 4, TR_STEALTH, 40},
163 {TR_SEARCH, "serching", 4, TR_SEARCH, 15},
164 {TR_INFRA, "infravision", 4, TR_INFRA, 15},
165 {TR_TUNNEL, "digging", 4, TR_TUNNEL, 15},
166 {TR_SPEED, "speed", 4, TR_SPEED, 12},
167 {TR_BLOWS, "extra attack", 1, TR_BLOWS, 20},
168 {TR_CHAOTIC, "chaos brand", 1, TR_CHAOTIC, 15},
169 {TR_VAMPIRIC, "vampiric brand", 1, TR_VAMPIRIC, 60},
170 {TR_IMPACT, "quake activation", 7, TR_IMPACT, 15},
171 {TR_BRAND_POIS, "poison brand", 1, TR_BRAND_POIS, 20},
172 {TR_BRAND_ACID, "acid brand", 1, TR_BRAND_ACID, 20},
173 {TR_BRAND_ELEC, "electric brand", 1, TR_BRAND_ELEC, 20},
174 {TR_BRAND_FIRE, "fire brand", 1, TR_BRAND_FIRE, 20},
175 {TR_BRAND_COLD, "cold brand", 1, TR_BRAND_COLD, 20},
176 {TR_SUST_STR, "sustain strength", 3, TR_SUST_STR, 15},
177 {TR_SUST_INT, "sustain intelligence", 3, TR_SUST_STR, 15},
178 {TR_SUST_WIS, "sustain wisdom", 3, TR_SUST_STR, 15},
179 {TR_SUST_DEX, "sustain dexterity", 3, TR_SUST_STR, 15},
180 {TR_SUST_CON, "sustain constitution", 3, TR_SUST_STR, 15},
181 {TR_SUST_CHR, "sustain charisma", 3, TR_SUST_STR, 15},
182 {TR_IM_ACID, "acid immunity", 2, TR_IM_ACID, 20},
183 {TR_IM_ELEC, "electric immunity", 2, TR_IM_ACID, 20},
184 {TR_IM_FIRE, "fire immunity", 2, TR_IM_ACID, 20},
185 {TR_IM_COLD, "cold immunity", 2, TR_IM_ACID, 20},
186 {TR_REFLECT, "reflection", 2, TR_REFLECT, 20},
187 {TR_FREE_ACT, "free action", 3, TR_FREE_ACT, 20},
188 {TR_HOLD_EXP, "hold experience", 3, TR_HOLD_EXP, 20},
189 {TR_RES_ACID, "resistance to acid", 2, TR_RES_ACID, 15},
190 {TR_RES_ELEC, "resistance to electric", 2, TR_RES_ELEC, 15},
191 {TR_RES_FIRE, "resistance to fire", 2, TR_RES_FIRE, 15},
192 {TR_RES_COLD, "resistance to cold", 2, TR_RES_COLD, 15},
193 {TR_RES_POIS, "resistance to poison", 2, TR_RES_POIS, 25},
194 {TR_RES_FEAR, "resistance to fear", 2, TR_RES_FEAR, 20},
195 {TR_RES_LITE, "resistance to light", 2, TR_RES_LITE, 20},
196 {TR_RES_DARK, "resistance to dark", 2, TR_RES_DARK, 20},
197 {TR_RES_BLIND, "resistance to blind", 2, TR_RES_BLIND, 20},
198 {TR_RES_CONF, "resistance to confusion", 2, TR_RES_CONF, 20},
199 {TR_RES_SOUND, "resistance to sound", 2, TR_RES_SOUND, 20},
200 {TR_RES_SHARDS, "resistance to shard", 2, TR_RES_SHARDS, 20},
201 {TR_RES_NETHER, "resistance to nether", 2, TR_RES_NETHER, 20},
202 {TR_RES_NEXUS, "resistance to nexus", 2, TR_RES_NEXUS, 20},
203 {TR_RES_CHAOS, "resistance to chaos", 2, TR_RES_CHAOS, 20},
204 {TR_RES_DISEN, "resistance to disenchantment", 2, TR_RES_DISEN, 20},
205 {TR_SH_FIRE, "", 0, -2, 0},
206 {TR_SH_ELEC, "", 0, -2, 0},
207 {TR_SH_COLD, "", 0, -2, 0},
208 {TR_NO_MAGIC, "anti magic", 3, TR_NO_MAGIC, 15},
209 {TR_WARNING, "warning", 3, TR_WARNING, 20},
210 {TR_LEVITATION, "levitation", 3, TR_LEVITATION, 20},
211 {TR_LITE_1, "permanent light", 3, TR_LITE_1, 15},
212 {TR_LITE_2, "", 0, -2, 0},
213 {TR_LITE_3, "", 0, -2, 0},
214 {TR_SEE_INVIS, "see invisible", 3, TR_SEE_INVIS, 20},
215 {TR_TELEPATHY, "telepathy", 6, TR_TELEPATHY, 15},
216 {TR_SLOW_DIGEST, "slow digestion", 3, TR_SLOW_DIGEST, 15},
217 {TR_REGEN, "regeneration", 3, TR_REGEN, 20},
218 {TR_TELEPORT, "teleport", 3, TR_TELEPORT, 25},
220 {TR_SLAY_EVIL, "slay evil", 5, TR_SLAY_EVIL, 100},
221 {TR_SLAY_ANIMAL, "slay animal", 5, TR_SLAY_ANIMAL, 20},
222 {TR_KILL_ANIMAL, "kill animal", 5, TR_SLAY_ANIMAL, 60},
223 {TR_KILL_EVIL, "kill evil", 0, TR_SLAY_EVIL, 60},
224 {TR_SLAY_UNDEAD, "slay undead", 5, TR_SLAY_UNDEAD, 20},
225 {TR_KILL_UNDEAD, "kill undead", 5, TR_SLAY_UNDEAD, 60},
226 {TR_SLAY_DEMON, "slay demon", 5, TR_SLAY_DEMON, 20},
227 {TR_KILL_DEMON, "kill demon", 5, TR_SLAY_DEMON, 60},
228 {TR_SLAY_ORC, "slay orc", 5, TR_SLAY_ORC, 15},
229 {TR_KILL_ORC, "kill orc", 5, TR_SLAY_ORC, 60},
230 {TR_SLAY_TROLL, "slay troll", 5, TR_SLAY_TROLL, 15},
231 {TR_KILL_TROLL, "kill troll", 5, TR_SLAY_TROLL, 60},
232 {TR_SLAY_GIANT, "slay giant", 5, TR_SLAY_GIANT, 20},
233 {TR_KILL_GIANT, "kill giant", 5, TR_SLAY_GIANT, 60},
234 {TR_SLAY_DRAGON, "slay dragon", 5, TR_SLAY_DRAGON, 20},
235 {TR_KILL_DRAGON, "kill dragon", 5, TR_SLAY_DRAGON, 60},
236 {TR_SLAY_HUMAN, "slay human", 5, TR_SLAY_HUMAN, 20},
237 {TR_KILL_HUMAN, "kill human", 5, TR_SLAY_HUMAN, 60},
239 {TR_ESP_ANIMAL, "sense animal", 6, TR_SLAY_ANIMAL, 40},
240 {TR_ESP_UNDEAD, "sense undead", 6, TR_SLAY_UNDEAD, 40},
241 {TR_ESP_DEMON, "sense demon", 6, TR_SLAY_DEMON, 40},
242 {TR_ESP_ORC, "sense orc", 6, TR_SLAY_ORC, 40},
243 {TR_ESP_TROLL, "sense troll", 6, TR_SLAY_TROLL, 40},
244 {TR_ESP_GIANT, "sense giant", 6, TR_SLAY_GIANT, 40},
245 {TR_ESP_DRAGON, "sense dragon", 6, TR_SLAY_DRAGON, 40},
246 {TR_ESP_HUMAN, "sense human", 6, TR_SLAY_HUMAN, 40},
248 {ESSENCE_ATTACK, "weapon enchant", 10, TR_ES_ATTACK, 30},
249 {ESSENCE_AC, "armor enchant", 10, TR_ES_AC, 15},
250 {ESSENCE_TMP_RES_ACID, "resist acid activation", 7, TR_RES_ACID, 50},
251 {ESSENCE_TMP_RES_ELEC, "resist electricity activation", 7, TR_RES_ELEC, 50},
252 {ESSENCE_TMP_RES_FIRE, "resist fire activation", 7, TR_RES_FIRE, 50},
253 {ESSENCE_TMP_RES_COLD, "resist cold activation", 7, TR_RES_COLD, 50},
254 {ESSENCE_SH_FIRE, "fiery sheath", 7, -1, 50},
255 {ESSENCE_SH_ELEC, "electric sheath", 7, -1, 50},
256 {ESSENCE_SH_COLD, "sheath of coldness", 7, -1, 50},
257 {ESSENCE_RESISTANCE, "resistance", 2, -1, 150},
258 {ESSENCE_SUSTAIN, "elements proof", 10, -1, 10},
259 {ESSENCE_SLAY_GLOVE, "gauntlets of slaying", 1, TR_ES_ATTACK, 200},
267 * エッセンス名テーブル / Essense names for Weapon smith
270 concptr essence_name[] =
373 concptr essence_name[] =
475 static concptr const kaji_tips[5] =
478 "現在持っているエッセンスの一覧を表示する。",
479 "アイテムからエッセンスを取り出す。エッセンスを取られたアイテムは全く魔法がかかっていない初期状態に戻る。",
480 "既にエッセンスが付加されたアイテムからエッセンスのみ消し去る。エッセンスは手に入らない。",
481 "アイテムにエッセンスを付加する。既にエッセンスが付加されたアイテムやアーティファクトには付加できない。",
482 "武器や防具を強化したり、攻撃で傷つかないようにしたりする。エッセンスが付加されたアイテムやアーティファクトに対しても使用できる。",
484 "Display essences you have.",
485 "Extract essences from an item. The item become non magical.",
486 "Remove added essences from an equipment which was improved before. The removed essence will be ruined.",
487 "Add essences to an item. The improved items or artifacts cannot be reimprove.",
488 "Enchant an equipment or make an equiment element-proofed. The improved items and artifacts can be enchanted too.",
494 * @brief 所持しているエッセンス一覧を表示する
497 static void display_essence(player_type *creature_ptr)
502 for (i = 1; i < 22; i++)
506 prt(_("エッセンス 個数 エッセンス 個数 エッセンス 個数",
507 "Essence Num Essence Num Essence Num "), 1, 8);
508 for (i = 0; essence_name[i]; i++)
510 if (!essence_name[i][0]) continue;
511 prt(format("%-11s %5d", essence_name[i], creature_ptr->magic_num1[i]), 2 + num % 21, 8 + num / 21 * 22);
514 prt(_("現在所持しているエッセンス", "List of all essences you have."), 0, 0);
522 * @param creature_ptr プレーヤーへの参照ポインタ
525 static void drain_essence(player_type *creature_ptr)
527 int drain_value[sizeof(creature_ptr->magic_num1) / sizeof(s32b)];
531 bool observe = FALSE;
532 int old_ds, old_dd, old_to_h, old_to_d, old_ac, old_to_a, old_pval, old_name2;
533 TIME_EFFECT old_timeout;
534 BIT_FLAGS old_flgs[TR_FLAG_SIZE], new_flgs[TR_FLAG_SIZE];
540 OBJECT_IDX next_o_idx;
543 for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
546 item_tester_hook = object_is_weapon_armour_ammo;
548 q = _("どのアイテムから抽出しますか?", "Extract from which item? ");
549 s = _("抽出できるアイテムがありません。", "You have nothing you can extract from.");
551 o_ptr = choose_object(creature_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), 0);
554 if (object_is_known(o_ptr) && !object_is_nameless(o_ptr))
556 GAME_TEXT o_name[MAX_NLEN];
557 object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
558 if (!get_check(format(_("本当に%sから抽出してよろしいですか?", "Really extract from %s? "), o_name))) return;
561 take_turn(creature_ptr, 100);
563 object_flags(o_ptr, old_flgs);
564 if (have_flag(old_flgs, TR_KILL_DRAGON)) add_flag(old_flgs, TR_SLAY_DRAGON);
565 if (have_flag(old_flgs, TR_KILL_ANIMAL)) add_flag(old_flgs, TR_SLAY_ANIMAL);
566 if (have_flag(old_flgs, TR_KILL_EVIL)) add_flag(old_flgs, TR_SLAY_EVIL);
567 if (have_flag(old_flgs, TR_KILL_UNDEAD)) add_flag(old_flgs, TR_SLAY_UNDEAD);
568 if (have_flag(old_flgs, TR_KILL_DEMON)) add_flag(old_flgs, TR_SLAY_DEMON);
569 if (have_flag(old_flgs, TR_KILL_ORC)) add_flag(old_flgs, TR_SLAY_ORC);
570 if (have_flag(old_flgs, TR_KILL_TROLL)) add_flag(old_flgs, TR_SLAY_TROLL);
571 if (have_flag(old_flgs, TR_KILL_GIANT)) add_flag(old_flgs, TR_SLAY_GIANT);
572 if (have_flag(old_flgs, TR_KILL_HUMAN)) add_flag(old_flgs, TR_SLAY_HUMAN);
574 old_to_a = o_ptr->to_a;
576 old_to_h = o_ptr->to_h;
577 old_to_d = o_ptr->to_d;
580 old_pval = o_ptr->pval;
581 old_name2 = o_ptr->name2;
582 old_timeout = o_ptr->timeout;
583 if (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE | TRC_PERMA_CURSE)) dec--;
584 if (have_flag(old_flgs, TR_ADD_L_CURSE)) dec--;
585 if (have_flag(old_flgs, TR_ADD_H_CURSE)) dec--;
586 if (have_flag(old_flgs, TR_AGGRAVATE)) dec--;
587 if (have_flag(old_flgs, TR_NO_TELE)) dec--;
588 if (have_flag(old_flgs, TR_DRAIN_EXP)) dec--;
589 if (have_flag(old_flgs, TR_DRAIN_HP)) dec--;
590 if (have_flag(old_flgs, TR_DRAIN_MANA)) dec--;
591 if (have_flag(old_flgs, TR_CALL_ANIMAL)) dec--;
592 if (have_flag(old_flgs, TR_CALL_DEMON)) dec--;
593 if (have_flag(old_flgs, TR_CALL_DRAGON)) dec--;
594 if (have_flag(old_flgs, TR_CALL_UNDEAD)) dec--;
595 if (have_flag(old_flgs, TR_COWARDICE)) dec--;
596 if (have_flag(old_flgs, TR_LOW_MELEE)) dec--;
597 if (have_flag(old_flgs, TR_LOW_AC)) dec--;
598 if (have_flag(old_flgs, TR_LOW_MAGIC)) dec--;
599 if (have_flag(old_flgs, TR_FAST_DIGEST)) dec--;
600 if (have_flag(old_flgs, TR_SLOW_REGEN)) dec--;
601 if (have_flag(old_flgs, TR_TY_CURSE)) dec--;
605 next_o_idx = o_ptr->next_o_idx;
606 marked = o_ptr->marked;
607 weight = o_ptr->weight;
608 number = o_ptr->number;
610 object_prep(o_ptr, o_ptr->k_idx);
614 o_ptr->next_o_idx = next_o_idx;
615 o_ptr->marked = marked;
616 o_ptr->number = number;
617 if (o_ptr->tval == TV_DRAG_ARMOR) o_ptr->timeout = old_timeout;
618 if (item >= 0) creature_ptr->total_weight += (o_ptr->weight*o_ptr->number - weight * number);
619 o_ptr->ident |= (IDENT_FULL_KNOWN);
620 object_aware(creature_ptr, o_ptr);
623 object_flags(o_ptr, new_flgs);
625 for (i = 0; essence_info[i].add_name; i++)
627 essence_type *es_ptr = &essence_info[i];
628 PARAMETER_VALUE pval = 0;
630 if (es_ptr->add < TR_FLAG_MAX && is_pval_flag(es_ptr->add) && old_pval)
631 pval = (have_flag(new_flgs, es_ptr->add)) ? old_pval - o_ptr->pval : old_pval;
633 if (es_ptr->add < TR_FLAG_MAX &&
634 (!have_flag(new_flgs, es_ptr->add) || pval) &&
635 have_flag(old_flgs, es_ptr->add))
639 drain_value[es_ptr->essence] += 10 * pval;
641 else if (es_ptr->essence != -2)
643 drain_value[es_ptr->essence] += 10;
645 else if (es_ptr->add == TR_SH_FIRE)
647 drain_value[TR_BRAND_FIRE] += 10;
648 drain_value[TR_RES_FIRE] += 10;
650 else if (es_ptr->add == TR_SH_ELEC)
652 drain_value[TR_BRAND_ELEC] += 10;
653 drain_value[TR_RES_ELEC] += 10;
655 else if (es_ptr->add == TR_SH_COLD)
657 drain_value[TR_BRAND_COLD] += 10;
658 drain_value[TR_RES_COLD] += 10;
660 else if (es_ptr->add == TR_LITE_2)
662 drain_value[TR_LITE_1] += 20;
664 else if (es_ptr->add == TR_LITE_3)
666 drain_value[TR_LITE_1] += 30;
671 if ((have_flag(old_flgs, TR_FORCE_WEAPON)) && !(have_flag(new_flgs, TR_FORCE_WEAPON)))
673 drain_value[TR_INT] += 5;
674 drain_value[TR_WIS] += 5;
676 if ((have_flag(old_flgs, TR_VORPAL)) && !(have_flag(new_flgs, TR_VORPAL)))
678 drain_value[TR_BRAND_POIS] += 5;
679 drain_value[TR_BRAND_ACID] += 5;
680 drain_value[TR_BRAND_ELEC] += 5;
681 drain_value[TR_BRAND_FIRE] += 5;
682 drain_value[TR_BRAND_COLD] += 5;
684 if ((have_flag(old_flgs, TR_DEC_MANA)) && !(have_flag(new_flgs, TR_DEC_MANA)))
686 drain_value[TR_INT] += 10;
688 if ((have_flag(old_flgs, TR_XTRA_MIGHT)) && !(have_flag(new_flgs, TR_XTRA_MIGHT)))
690 drain_value[TR_STR] += 10;
692 if ((have_flag(old_flgs, TR_XTRA_SHOTS)) && !(have_flag(new_flgs, TR_XTRA_SHOTS)))
694 drain_value[TR_DEX] += 10;
696 if (old_name2 == EGO_2WEAPON)
698 drain_value[TR_DEX] += 20;
700 if (object_is_weapon_ammo(o_ptr))
702 if (old_ds > o_ptr->ds) drain_value[TR_ES_ATTACK] += (old_ds - o_ptr->ds) * 10;
704 if (old_dd > o_ptr->dd) drain_value[TR_ES_ATTACK] += (old_dd - o_ptr->dd) * 10;
706 if (old_to_h > o_ptr->to_h) drain_value[TR_ES_ATTACK] += (old_to_h - o_ptr->to_h) * 10;
707 if (old_to_d > o_ptr->to_d) drain_value[TR_ES_ATTACK] += (old_to_d - o_ptr->to_d) * 10;
708 if (old_ac > o_ptr->ac) drain_value[TR_ES_AC] += (old_ac - o_ptr->ac) * 10;
709 if (old_to_a > o_ptr->to_a) drain_value[TR_ES_AC] += (old_to_a - o_ptr->to_a) * 10;
711 for (i = 0; i < sizeof(drain_value) / sizeof(int); i++)
713 drain_value[i] *= number;
714 drain_value[i] = drain_value[i] * dec / 4;
715 drain_value[i] = MAX(drain_value[i], 0);
716 if ((o_ptr->tval >= TV_SHOT) && (o_ptr->tval <= TV_BOLT)) drain_value[i] /= 10;
724 msg_print(_("エッセンスは抽出できませんでした。", "You were not able to extract any essence."));
728 msg_print(_("抽出したエッセンス:", "Extracted essences:"));
730 for (i = 0; essence_name[i]; i++)
732 if (!essence_name[i][0]) continue;
733 if (!drain_value[i]) continue;
735 creature_ptr->magic_num1[i] += drain_value[i];
736 creature_ptr->magic_num1[i] = MIN(20000, creature_ptr->magic_num1[i]);
738 msg_format("%s...%d%s", essence_name[i], drain_value[i], _("。", ". "));
742 /* Apply autodestroy/inscription to the drained item */
743 autopick_alter_item(creature_ptr, item, TRUE);
744 creature_ptr->update |= (PU_COMBINE | PU_REORDER);
745 creature_ptr->window |= (PW_INVEN);
749 * @brief 付加するエッセンスの大別を選択する
750 * @return 選んだエッセンスの大別ID
752 static COMMAND_CODE choose_essence(void)
754 COMMAND_CODE mode = 0;
756 COMMAND_CODE menu_line = (use_menu ? 1 : 0);
759 concptr menu_name[] = {
769 concptr menu_name[] = {
779 const COMMAND_CODE mode_max = 7;
781 if (repeat_pull(&mode) && 1 <= mode && mode <= mode_max)
791 for (i = 0; i < mode_max; i++)
793 prt(format(" %s %s", (menu_line == 1 + i) ? "》" : " ", menu_name[i]), 2 + i, 14);
794 prt("どの種類のエッセンス付加を行いますか?", 0, 0);
796 prt(format(" %s %s", (menu_line == 1 + i) ? "> " : " ", menu_name[i]), 2 + i, 14);
797 prt("Choose from menu.", 0, 0);
816 menu_line += mode_max - 1;
825 if (menu_line > mode_max) menu_line -= mode_max;
836 for (i = 0; i < mode_max; i++)
837 prt(format(" %c) %s", 'a' + i, menu_name[i]), 2 + i, 14);
839 if (!get_com(_("何を付加しますか:", "Command :"), &choice, TRUE))
845 if (isupper(choice)) choice = (char)tolower(choice);
847 if ('a' <= choice && choice <= 'a' + (char)mode_max - 1)
848 mode = (int)choice - 'a' + 1;
858 * @brief エッセンスを実際に付加する
859 * @param mode エッセンスの大別ID
862 static void add_essence(player_type *creature_ptr, ESSENCE_IDX mode)
874 GAME_TEXT o_name[MAX_NLEN];
876 essence_type *es_ptr;
877 bool able[22] = { 0 };
879 int menu_line = (use_menu ? 1 : 0);
881 for (i = 0; essence_info[i].add_name; i++)
883 es_ptr = &essence_info[i];
885 if (es_ptr->type != mode) continue;
889 if (!repeat_pull(&i) || i < 0 || i >= max_num)
894 (void)strnfmt(out_val, 78, _("('*'で一覧, ESCで中断) どの能力を付加しますか?", "(*=List, ESC=exit) Add which ability? "));
895 if (use_menu) screen_save();
897 choice = (always_show_list || use_menu) ? ESCAPE : 1;
900 if (choice == ESCAPE) choice = ' ';
901 else if (!get_com(out_val, &choice, FALSE))break;
903 if (use_menu && choice != ' ')
917 menu_line += (max_num - 1);
954 if (menu_line > max_num) menu_line -= max_num;
957 if ((choice == ' ') || (choice == '*') || (choice == '?') || (use_menu && ask))
960 if (!redraw || use_menu)
964 char dummy[80], dummy2[80];
969 if (!use_menu) screen_save();
971 for (y = 1; y < 24; y++)
974 /* Print header(s) */
976 prt(format(" %-43s %6s/%s", "能力(必要エッセンス)", "必要数", "所持数"), 1, x);
979 prt(format(" %-43s %6s/%s", "Ability (needed essence)", "Needs", "Possess"), 1, x);
982 for (ctr = 0; ctr < max_num; ctr++)
984 es_ptr = &essence_info[num[ctr]];
988 if (ctr == (menu_line - 1))
989 strcpy(dummy, _("》 ", "> "));
990 else strcpy(dummy, " ");
993 /* letter/number for power selection */
996 sprintf(dummy, "%c) ", I2A(ctr));
999 strcat(dummy, es_ptr->add_name);
1004 if (es_ptr->essence != -1)
1006 strcat(dummy, format("(%s)", essence_name[es_ptr->essence]));
1007 if (creature_ptr->magic_num1[es_ptr->essence] < es_ptr->value) able[ctr] = FALSE;
1011 switch (es_ptr->add)
1013 case ESSENCE_SH_FIRE:
1014 strcat(dummy, _("(焼棄+耐火炎)", "(brand fire + res.fire)"));
1015 if (creature_ptr->magic_num1[TR_BRAND_FIRE] < es_ptr->value) able[ctr] = FALSE;
1016 if (creature_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1018 case ESSENCE_SH_ELEC:
1019 strcat(dummy, _("(電撃+耐電撃)", "(brand elec. + res. elec.)"));
1020 if (creature_ptr->magic_num1[TR_BRAND_ELEC] < es_ptr->value) able[ctr] = FALSE;
1021 if (creature_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1023 case ESSENCE_SH_COLD:
1024 strcat(dummy, _("(凍結+耐冷気)", "(brand cold + res. cold)"));
1025 if (creature_ptr->magic_num1[TR_BRAND_COLD] < es_ptr->value) able[ctr] = FALSE;
1026 if (creature_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1028 case ESSENCE_RESISTANCE:
1029 strcat(dummy, _("(耐火炎+耐冷気+耐電撃+耐酸)", "(r.fire+r.cold+r.elec+r.acid)"));
1030 if (creature_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1031 if (creature_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1032 if (creature_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1033 if (creature_ptr->magic_num1[TR_RES_ACID] < es_ptr->value) able[ctr] = FALSE;
1035 case ESSENCE_SUSTAIN:
1036 strcat(dummy, _("(耐火炎+耐冷気+耐電撃+耐酸)", "(r.fire+r.cold+r.elec+r.acid)"));
1037 if (creature_ptr->magic_num1[TR_RES_FIRE] < es_ptr->value) able[ctr] = FALSE;
1038 if (creature_ptr->magic_num1[TR_RES_COLD] < es_ptr->value) able[ctr] = FALSE;
1039 if (creature_ptr->magic_num1[TR_RES_ELEC] < es_ptr->value) able[ctr] = FALSE;
1040 if (creature_ptr->magic_num1[TR_RES_ACID] < es_ptr->value) able[ctr] = FALSE;
1045 if (!able[ctr]) col = TERM_RED;
1047 if (es_ptr->essence != -1)
1049 sprintf(dummy2, "%-49s %3d/%d", dummy, es_ptr->value, (int)creature_ptr->magic_num1[es_ptr->essence]);
1053 sprintf(dummy2, "%-49s %3d/(\?\?)", dummy, es_ptr->value);
1056 c_prt(col, dummy2, ctr + 2, x);
1075 ask = (isupper(choice));
1078 if (ask) choice = (char)tolower(choice);
1080 /* Extract request */
1081 i = (islower(choice) ? A2I(choice) : -1);
1084 /* Totally Illegal */
1085 if ((i < 0) || (i >= max_num) || !able[i])
1097 (void)strnfmt(tmp_val, 78, _("%sを付加しますか? ", "Add the abilitiy of %s? "), essence_info[num[i]].add_name);
1099 /* Belay that order */
1100 if (!get_check(tmp_val)) continue;
1106 if (redraw) screen_load();
1112 es_ptr = &essence_info[num[i]];
1114 if (es_ptr->add == ESSENCE_SLAY_GLOVE)
1116 else if (mode == 1 || mode == 5)
1117 item_tester_hook = item_tester_hook_melee_ammo;
1118 else if (es_ptr->add == ESSENCE_ATTACK)
1119 item_tester_hook = object_allow_enchant_weapon;
1120 else if (es_ptr->add == ESSENCE_AC)
1121 item_tester_hook = object_is_armour;
1123 item_tester_hook = object_is_weapon_armour_ammo;
1125 q = _("どのアイテムを改良しますか?", "Improve which item? ");
1126 s = _("改良できるアイテムがありません。", "You have nothing to improve.");
1128 o_ptr = choose_object(creature_ptr, &item, q, s, (USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), tval);
1131 if ((mode != 10) && (object_is_artifact(o_ptr) || object_is_smith(o_ptr)))
1133 msg_print(_("そのアイテムはこれ以上改良できない。", "This item can not be improved any further."));
1137 object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1139 use_essence = es_ptr->value;
1140 if ((o_ptr->tval >= TV_SHOT) && (o_ptr->tval <= TV_BOLT)) use_essence = (use_essence + 9) / 10;
1141 if (o_ptr->number > 1)
1143 use_essence *= o_ptr->number;
1144 msg_format(_("%d個あるのでエッセンスは%d必要です。", "For %d items, it will take %d essences."), o_ptr->number, use_essence);
1147 if (es_ptr->essence != -1)
1149 if (creature_ptr->magic_num1[es_ptr->essence] < use_essence)
1151 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1154 if (is_pval_flag(es_ptr->add))
1156 if (o_ptr->pval < 0)
1158 msg_print(_("このアイテムの能力修正を強化することはできない。", "You cannot increase magic number of this item."));
1161 else if (es_ptr->add == TR_BLOWS)
1163 if (o_ptr->pval > 1)
1165 if (!get_check(_("修正値は1になります。よろしいですか?", "The magic number of this weapon will become 1. Are you sure? "))) return;
1169 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1171 else if (o_ptr->pval > 0)
1173 use_essence *= o_ptr->pval;
1174 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1180 PARAMETER_VALUE pval;
1181 PARAMETER_VALUE limit = MIN(5, creature_ptr->magic_num1[es_ptr->essence] / es_ptr->value);
1183 sprintf(tmp, _("いくつ付加しますか? (1-%d): ", "Enchant how many? (1-%d): "), limit);
1184 strcpy(tmp_val, "1");
1186 if (!get_string(tmp, tmp_val, 1)) return;
1187 pval = (PARAMETER_VALUE)atoi(tmp_val);
1188 if (pval > limit) pval = limit;
1189 else if (pval < 1) pval = 1;
1190 o_ptr->pval += pval;
1191 use_essence *= pval;
1192 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1195 if (creature_ptr->magic_num1[es_ptr->essence] < use_essence)
1197 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1201 else if (es_ptr->add == ESSENCE_SLAY_GLOVE)
1208 strcpy(tmp_val, "1");
1209 if (!get_string(format(_("いくつ付加しますか? (1-%d):", "Enchant how many? (1-%d):"), creature_ptr->lev / 7 + 3), tmp_val, 2)) return;
1210 val = atoi(tmp_val);
1211 if (val > creature_ptr->lev / 7 + 3) val = creature_ptr->lev / 7 + 3;
1212 else if (val < 1) val = 1;
1214 msg_format(_("エッセンスを%d個使用します。", "It will take %d essences."), use_essence);
1215 if (creature_ptr->magic_num1[es_ptr->essence] < use_essence)
1217 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1220 get_to_h = ((val + 1) / 2 + randint0(val / 2 + 1));
1221 get_to_d = ((val + 1) / 2 + randint0(val / 2 + 1));
1222 o_ptr->xtra4 = (get_to_h << 8) + get_to_d;
1223 o_ptr->to_h += get_to_h;
1224 o_ptr->to_d += get_to_d;
1226 creature_ptr->magic_num1[es_ptr->essence] -= use_essence;
1227 if (es_ptr->add == ESSENCE_ATTACK)
1229 if ((o_ptr->to_h >= creature_ptr->lev / 5 + 5) && (o_ptr->to_d >= creature_ptr->lev / 5 + 5))
1231 msg_print(_("改良に失敗した。", "You failed to enchant."));
1232 take_turn(creature_ptr, 100);
1237 if (o_ptr->to_h < creature_ptr->lev / 5 + 5) o_ptr->to_h++;
1238 if (o_ptr->to_d < creature_ptr->lev / 5 + 5) o_ptr->to_d++;
1241 else if (es_ptr->add == ESSENCE_AC)
1243 if (o_ptr->to_a >= creature_ptr->lev / 5 + 5)
1245 msg_print(_("改良に失敗した。", "You failed to enchant."));
1246 take_turn(creature_ptr, 100);
1251 if (o_ptr->to_a < creature_ptr->lev / 5 + 5) o_ptr->to_a++;
1256 o_ptr->xtra3 = es_ptr->add + 1;
1261 bool success = TRUE;
1263 switch (es_ptr->add)
1265 case ESSENCE_SH_FIRE:
1266 if ((creature_ptr->magic_num1[TR_BRAND_FIRE] < use_essence) || (creature_ptr->magic_num1[TR_RES_FIRE] < use_essence))
1271 creature_ptr->magic_num1[TR_BRAND_FIRE] -= use_essence;
1272 creature_ptr->magic_num1[TR_RES_FIRE] -= use_essence;
1274 case ESSENCE_SH_ELEC:
1275 if ((creature_ptr->magic_num1[TR_BRAND_ELEC] < use_essence) || (creature_ptr->magic_num1[TR_RES_ELEC] < use_essence))
1280 creature_ptr->magic_num1[TR_BRAND_ELEC] -= use_essence;
1281 creature_ptr->magic_num1[TR_RES_ELEC] -= use_essence;
1283 case ESSENCE_SH_COLD:
1284 if ((creature_ptr->magic_num1[TR_BRAND_COLD] < use_essence) || (creature_ptr->magic_num1[TR_RES_COLD] < use_essence))
1289 creature_ptr->magic_num1[TR_BRAND_COLD] -= use_essence;
1290 creature_ptr->magic_num1[TR_RES_COLD] -= use_essence;
1292 case ESSENCE_RESISTANCE:
1293 case ESSENCE_SUSTAIN:
1294 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))
1299 creature_ptr->magic_num1[TR_RES_ACID] -= use_essence;
1300 creature_ptr->magic_num1[TR_RES_ELEC] -= use_essence;
1301 creature_ptr->magic_num1[TR_RES_FIRE] -= use_essence;
1302 creature_ptr->magic_num1[TR_RES_COLD] -= use_essence;
1307 msg_print(_("エッセンスが足りない。", "You don't have enough essences."));
1310 if (es_ptr->add == ESSENCE_SUSTAIN)
1312 add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
1313 add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
1314 add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
1315 add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
1319 o_ptr->xtra3 = es_ptr->add + 1;
1323 take_turn(creature_ptr, 100);
1324 _(msg_format("%sに%sの能力を付加しました。", o_name, es_ptr->add_name),
1325 msg_format("You have added ability of %s to %s.", es_ptr->add_name, o_name));
1326 creature_ptr->update |= (PU_COMBINE | PU_REORDER);
1327 creature_ptr->window |= (PW_INVEN);
1334 static void erase_essence(player_type *creature_ptr)
1339 GAME_TEXT o_name[MAX_NLEN];
1340 BIT_FLAGS flgs[TR_FLAG_SIZE];
1342 item_tester_hook = object_is_smith;
1344 q = _("どのアイテムのエッセンスを消去しますか?", "Remove from which item? ");
1345 s = _("エッセンスを付加したアイテムがありません。", "You have nothing to remove essence.");
1347 o_ptr = choose_object(creature_ptr, &item, q, s, (USE_INVEN | USE_FLOOR), 0);
1350 object_desc(creature_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
1351 if (!get_check(format(_("よろしいですか? [%s]", "Are you sure? [%s]"), o_name))) return;
1353 take_turn(creature_ptr, 100);
1355 if (o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE)
1357 o_ptr->to_h -= (o_ptr->xtra4 >> 8);
1358 o_ptr->to_d -= (o_ptr->xtra4 & 0x000f);
1360 if (o_ptr->to_h < 0) o_ptr->to_h = 0;
1361 if (o_ptr->to_d < 0) o_ptr->to_d = 0;
1364 object_flags(o_ptr, flgs);
1365 if (!(have_pval_flags(flgs))) o_ptr->pval = 0;
1366 msg_print(_("エッセンスを取り去った。", "You removed all essence you have added."));
1367 creature_ptr->update |= (PU_COMBINE | PU_REORDER);
1368 creature_ptr->window |= (PW_INVEN);
1372 * @brief 鍛冶コマンドのメインルーチン
1373 * @param only_browse TRUEならばエッセンス一覧の表示のみを行う
1376 void do_cmd_kaji(player_type *creature_ptr, bool only_browse)
1378 COMMAND_CODE mode = 0;
1381 COMMAND_CODE menu_line = (use_menu ? 1 : 0);
1385 if (cmd_limit_confused(creature_ptr)) return;
1386 if (cmd_limit_blind(creature_ptr)) return;
1387 if (cmd_limit_image(creature_ptr)) return;
1390 if (!(repeat_pull(&mode) && 1 <= mode && mode <= 5))
1392 if (only_browse) screen_save();
1394 if (!only_browse) screen_save();
1400 prt(format(" %s エッセンス一覧", (menu_line == 1) ? "》" : " "), 2, 14);
1401 prt(format(" %s エッセンス抽出", (menu_line == 2) ? "》" : " "), 3, 14);
1402 prt(format(" %s エッセンス消去", (menu_line == 3) ? "》" : " "), 4, 14);
1403 prt(format(" %s エッセンス付加", (menu_line == 4) ? "》" : " "), 5, 14);
1404 prt(format(" %s 武器/防具強化", (menu_line == 5) ? "》" : " "), 6, 14);
1405 prt(format("どの種類の技術を%sますか?", only_browse ? "調べ" : "使い"), 0, 0);
1407 prt(format(" %s List essences", (menu_line == 1) ? "> " : " "), 2, 14);
1408 prt(format(" %s Extract essence", (menu_line == 2) ? "> " : " "), 3, 14);
1409 prt(format(" %s Remove essence", (menu_line == 3) ? "> " : " "), 4, 14);
1410 prt(format(" %s Add essence", (menu_line == 4) ? "> " : " "), 5, 14);
1411 prt(format(" %s Enchant weapon/armor", (menu_line == 5) ? "> " : " "), 6, 14);
1412 prt(format("Choose command from menu."), 0, 0);
1439 if (menu_line > 5) menu_line -= 5;
1447 prt(_(" a) エッセンス一覧", " a) List essences"), 2, 14);
1448 prt(_(" b) エッセンス抽出", " b) Extract essence"), 3, 14);
1449 prt(_(" c) エッセンス消去", " c) Remove essence"), 4, 14);
1450 prt(_(" d) エッセンス付加", " d) Add essence"), 5, 14);
1451 prt(_(" e) 武器/防具強化", " e) Enchant weapon/armor"), 6, 14);
1453 if (!get_com(format("どの能力を%sますか:", only_browse ? "調べ" : "使い"), &choice, TRUE))
1455 if (!get_com("Command :", &choice, TRUE))
1492 /* Clear lines, position cursor (really should use strlen here) */
1493 Term_erase(14, 21, 255);
1494 Term_erase(14, 20, 255);
1495 Term_erase(14, 19, 255);
1496 Term_erase(14, 18, 255);
1497 Term_erase(14, 17, 255);
1498 Term_erase(14, 16, 255);
1500 roff_to_buf(kaji_tips[mode - 1], 62, temp, sizeof(temp));
1501 for (j = 0, line = 17; temp[j]; j += (1 + strlen(&temp[j])))
1503 prt(&temp[j], line, 15);
1508 if (!only_browse) screen_load();
1509 } while (only_browse);
1514 case 1: display_essence(creature_ptr); break;
1515 case 2: drain_essence(creature_ptr); break;
1516 case 3: erase_essence(creature_ptr); break;
1518 mode = choose_essence();
1521 add_essence(creature_ptr, mode);
1523 case 5: add_essence(creature_ptr, 10); break;