OSDN Git Service

[Refactor] #37353 stop_singing() を spell-status.c へ移動。 / Move stop_singing() to spell...
[hengband/hengband.git] / src / cmd-quaff.c
1 /*!\r
2  * @file cmd-quaff.c\r
3  * @brief プレイヤーの飲むコマンド実装\r
4  * @date 2018/09/07\r
5  * @details\r
6  * cmd6.cより分離。\r
7  */\r
8 \r
9 #include "angband.h"\r
10 #include "selfinfo.h"\r
11 #include "object-hook.h"\r
12 #include "mutation.h"\r
13 #include "avatar.h"\r
14 #include "spells-status.h"\r
15 \r
16 /*!\r
17  * @brief 薬を飲むコマンドのサブルーチン /\r
18  * Quaff a potion (from the pack or the floor)\r
19  * @param item 飲む薬オブジェクトの所持品ID\r
20  * @return なし\r
21  */\r
22 void do_cmd_quaff_potion_aux(INVENTORY_IDX item)\r
23 {\r
24         bool ident;\r
25         DEPTH lev;\r
26         object_type *o_ptr;\r
27         object_type forge;\r
28         object_type *q_ptr;\r
29 \r
30 \r
31         if (world_player)\r
32         {\r
33                 if (flush_failure) flush();\r
34                 msg_print(_("瓶から水が流れ出てこない!", "The potion doesn't flow out from a bottle."));\r
35 \r
36                 sound(SOUND_FAIL);\r
37                 return;\r
38         }\r
39 \r
40         if (music_singing_any()) stop_singing();\r
41         if (hex_spelling_any())\r
42         {\r
43                 if (!hex_spelling(HEX_INHAIL)) stop_hex_spell_all();\r
44         }\r
45 \r
46         /* Get the item (in the pack) */\r
47         if (item >= 0)\r
48         {\r
49                 o_ptr = &inventory[item];\r
50         }\r
51 \r
52         /* Get the item (on the floor) */\r
53         else\r
54         {\r
55                 o_ptr = &o_list[0 - item];\r
56         }\r
57         q_ptr = &forge;\r
58 \r
59         /* Obtain a local object */\r
60         object_copy(q_ptr, o_ptr);\r
61 \r
62         /* Single object */\r
63         q_ptr->number = 1;\r
64 \r
65         /* Reduce and describe inventory */\r
66         if (item >= 0)\r
67         {\r
68                 inven_item_increase(item, -1);\r
69                 inven_item_describe(item);\r
70                 inven_item_optimize(item);\r
71         }\r
72 \r
73         /* Reduce and describe floor item */\r
74         else\r
75         {\r
76                 floor_item_increase(0 - item, -1);\r
77                 floor_item_describe(0 - item);\r
78                 floor_item_optimize(0 - item);\r
79         }\r
80 \r
81         sound(SOUND_QUAFF);\r
82 \r
83 \r
84         /* Not identified yet */\r
85         ident = FALSE;\r
86 \r
87         /* Object level */\r
88         lev = k_info[q_ptr->k_idx].level;\r
89 \r
90         /* Analyze the potion */\r
91         if (q_ptr->tval == TV_POTION)\r
92         {\r
93                 switch (q_ptr->sval)\r
94                 {\r
95                         /* 飲みごたえをオリジナルより細かく表現 */\r
96                 case SV_POTION_WATER:\r
97                         msg_print(_("口の中がさっぱりした。", ""));\r
98                         msg_print(_("のどの渇きが少しおさまった。", "You feel less thirsty."));\r
99                         ident = TRUE;\r
100                         break;\r
101 \r
102                 case SV_POTION_APPLE_JUICE:\r
103                         msg_print(_("甘くてサッパリとしていて、とてもおいしい。", ""));\r
104                         msg_print(_("のどの渇きが少しおさまった。", "You feel less thirsty."));\r
105                         ident = TRUE;\r
106                         break;\r
107 \r
108                 case SV_POTION_SLIME_MOLD:\r
109                         msg_print(_("なんとも不気味な味だ。", ""));\r
110                         msg_print(_("のどの渇きが少しおさまった。", "You feel less thirsty."));\r
111                         ident = TRUE;\r
112                         break;\r
113 \r
114                 case SV_POTION_SLOWNESS:\r
115                         if (set_slow(randint1(25) + 15, FALSE)) ident = TRUE;\r
116                         break;\r
117 \r
118                 case SV_POTION_SALT_WATER:\r
119                         msg_print(_("うぇ!思わず吐いてしまった。", "The potion makes you vomit!"));\r
120 \r
121                         if (!(prace_is_(RACE_GOLEM) ||\r
122                               prace_is_(RACE_ZOMBIE) ||\r
123                               prace_is_(RACE_DEMON) ||\r
124                               prace_is_(RACE_ANDROID) ||\r
125                               prace_is_(RACE_SPECTRE) ||\r
126                               (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_NONLIVING)))\r
127                         {\r
128                                 /* Only living creatures get thirsty */\r
129                                 (void)set_food(PY_FOOD_STARVE - 1);\r
130                         }\r
131 \r
132                         (void)set_poisoned(0);\r
133                         (void)set_paralyzed(p_ptr->paralyzed + 4);\r
134                         ident = TRUE;\r
135                         break;\r
136 \r
137                 case SV_POTION_POISON:\r
138                         if (!(p_ptr->resist_pois || IS_OPPOSE_POIS()))\r
139                         {\r
140                                 if (set_poisoned(p_ptr->poisoned + randint0(15) + 10))\r
141                                 {\r
142                                         ident = TRUE;\r
143                                 }\r
144                         }\r
145                         break;\r
146 \r
147                 case SV_POTION_BLINDNESS:\r
148                         if (!p_ptr->resist_blind)\r
149                         {\r
150                                 if (set_blind(p_ptr->blind + randint0(100) + 100))\r
151                                 {\r
152                                         ident = TRUE;\r
153                                 }\r
154                         }\r
155                         break;\r
156 \r
157                 case SV_POTION_BOOZE:\r
158                         ident = booze(p_ptr);\r
159                         break;\r
160 \r
161                 case SV_POTION_SLEEP:\r
162                         if (!p_ptr->free_act)\r
163                         {\r
164                                 msg_print(_("あなたは眠ってしまった。", "You fall asleep."));\r
165 \r
166                                 if (ironman_nightmare)\r
167                                 {\r
168                                         msg_print(_("恐ろしい光景が頭に浮かんできた。", "A horrible vision enters your mind."));\r
169 \r
170                                         /* Have some nightmares */\r
171                                         sanity_blast(NULL, FALSE);\r
172                                 }\r
173                                 if (set_paralyzed(p_ptr->paralyzed + randint0(4) + 4))\r
174                                 {\r
175                                         ident = TRUE;\r
176                                 }\r
177                         }\r
178                         break;\r
179 \r
180                 case SV_POTION_LOSE_MEMORIES:\r
181                         if (!p_ptr->hold_exp && (p_ptr->exp > 0))\r
182                         {\r
183                                 msg_print(_("過去の記憶が薄れていく気がする。", "You feel your memories fade."));\r
184                                 chg_virtue(V_KNOWLEDGE, -5);\r
185 \r
186                                 lose_exp(p_ptr->exp / 4);\r
187                                 ident = TRUE;\r
188                         }\r
189                         break;\r
190 \r
191                 case SV_POTION_RUINATION:\r
192                         msg_print(_("身も心も弱ってきて、精気が抜けていくようだ。", "Your nerves and muscles feel weak and lifeless!"));\r
193                         take_hit(DAMAGE_LOSELIFE, damroll(10, 10), _("破滅の薬", "a potion of Ruination"), -1);\r
194 \r
195                         (void)dec_stat(A_DEX, 25, TRUE);\r
196                         (void)dec_stat(A_WIS, 25, TRUE);\r
197                         (void)dec_stat(A_CON, 25, TRUE);\r
198                         (void)dec_stat(A_STR, 25, TRUE);\r
199                         (void)dec_stat(A_CHR, 25, TRUE);\r
200                         (void)dec_stat(A_INT, 25, TRUE);\r
201                         ident = TRUE;\r
202                         break;\r
203 \r
204                 case SV_POTION_DEC_STR:\r
205                         if (do_dec_stat(A_STR)) ident = TRUE;\r
206                         break;\r
207 \r
208                 case SV_POTION_DEC_INT:\r
209                         if (do_dec_stat(A_INT)) ident = TRUE;\r
210                         break;\r
211 \r
212                 case SV_POTION_DEC_WIS:\r
213                         if (do_dec_stat(A_WIS)) ident = TRUE;\r
214                         break;\r
215 \r
216                 case SV_POTION_DEC_DEX:\r
217                         if (do_dec_stat(A_DEX)) ident = TRUE;\r
218                         break;\r
219 \r
220                 case SV_POTION_DEC_CON:\r
221                         if (do_dec_stat(A_CON)) ident = TRUE;\r
222                         break;\r
223 \r
224                 case SV_POTION_DEC_CHR:\r
225                         if (do_dec_stat(A_CHR)) ident = TRUE;\r
226                         break;\r
227 \r
228                 case SV_POTION_DETONATIONS:\r
229                         ident = detonation(p_ptr);\r
230                         break;\r
231 \r
232                 case SV_POTION_DEATH:\r
233                         chg_virtue(V_VITALITY, -1);\r
234                         chg_virtue(V_UNLIFE, 5);\r
235                         msg_print(_("死の予感が体中を駆けめぐった。", "A feeling of Death flows through your body."));\r
236                         take_hit(DAMAGE_LOSELIFE, 5000, _("死の薬", "a potion of Death"), -1);\r
237                         ident = TRUE;\r
238                         break;\r
239 \r
240                 case SV_POTION_INFRAVISION:\r
241                         if (set_tim_infra(p_ptr->tim_infra + 100 + randint1(100), FALSE))\r
242                         {\r
243                                 ident = TRUE;\r
244                         }\r
245                         break;\r
246 \r
247                 case SV_POTION_DETECT_INVIS:\r
248                         if (set_tim_invis(p_ptr->tim_invis + 12 + randint1(12), FALSE))\r
249                         {\r
250                                 ident = TRUE;\r
251                         }\r
252                         break;\r
253 \r
254                 case SV_POTION_SLOW_POISON:\r
255                         if (set_poisoned(p_ptr->poisoned / 2)) ident = TRUE;\r
256                         break;\r
257 \r
258                 case SV_POTION_CURE_POISON:\r
259                         if (set_poisoned(0)) ident = TRUE;\r
260                         break;\r
261 \r
262                 case SV_POTION_BOLDNESS:\r
263                         if (set_afraid(0)) ident = TRUE;\r
264                         break;\r
265 \r
266                 case SV_POTION_SPEED:\r
267                         if (!p_ptr->fast)\r
268                         {\r
269                                 if (set_fast(randint1(25) + 15, FALSE)) ident = TRUE;\r
270                         }\r
271                         else\r
272                         {\r
273                                 (void)set_fast(p_ptr->fast + 5, FALSE);\r
274                         }\r
275                         break;\r
276 \r
277                 case SV_POTION_RESIST_HEAT:\r
278                         if (set_oppose_fire(p_ptr->oppose_fire + randint1(10) + 10, FALSE))\r
279                         {\r
280                                 ident = TRUE;\r
281                         }\r
282                         break;\r
283 \r
284                 case SV_POTION_RESIST_COLD:\r
285                         if (set_oppose_cold(p_ptr->oppose_cold + randint1(10) + 10, FALSE))\r
286                         {\r
287                                 ident = TRUE;\r
288                         }\r
289                         break;\r
290 \r
291                 case SV_POTION_HEROISM:\r
292                         ident = heroism(25);\r
293                         break;\r
294 \r
295                 case SV_POTION_BESERK_STRENGTH:\r
296                         ident = berserk(randint1(25) + 25);\r
297                         break;\r
298 \r
299                 case SV_POTION_CURE_LIGHT:\r
300                         ident = cure_light_wounds(2, 8);\r
301                         break;\r
302 \r
303                 case SV_POTION_CURE_SERIOUS:\r
304                         ident = cure_serious_wounds(4, 8);\r
305                         break;\r
306 \r
307                 case SV_POTION_CURE_CRITICAL:\r
308                         ident = cure_critical_wounds(damroll(6, 8));\r
309                         break;\r
310 \r
311                 case SV_POTION_HEALING:\r
312                         ident = cure_critical_wounds(300);\r
313                         break;\r
314 \r
315                 case SV_POTION_STAR_HEALING:\r
316                         ident = cure_critical_wounds(1200);\r
317                         break;\r
318 \r
319                 case SV_POTION_LIFE:\r
320                         ident = life_stream(TRUE, TRUE);\r
321                         break;\r
322 \r
323                 case SV_POTION_RESTORE_MANA:\r
324                         ident = restore_mana(TRUE);\r
325                         break;\r
326 \r
327                 case SV_POTION_RESTORE_EXP:\r
328                         if (restore_level()) ident = TRUE;\r
329                         break;\r
330 \r
331                 case SV_POTION_RES_STR:\r
332                         if (do_res_stat(A_STR)) ident = TRUE;\r
333                         break;\r
334 \r
335                 case SV_POTION_RES_INT:\r
336                         if (do_res_stat(A_INT)) ident = TRUE;\r
337                         break;\r
338 \r
339                 case SV_POTION_RES_WIS:\r
340                         if (do_res_stat(A_WIS)) ident = TRUE;\r
341                         break;\r
342 \r
343                 case SV_POTION_RES_DEX:\r
344                         if (do_res_stat(A_DEX)) ident = TRUE;\r
345                         break;\r
346 \r
347                 case SV_POTION_RES_CON:\r
348                         if (do_res_stat(A_CON)) ident = TRUE;\r
349                         break;\r
350 \r
351                 case SV_POTION_RES_CHR:\r
352                         if (do_res_stat(A_CHR)) ident = TRUE;\r
353                         break;\r
354 \r
355                 case SV_POTION_INC_STR:\r
356                         if (do_inc_stat(A_STR)) ident = TRUE;\r
357                         break;\r
358 \r
359                 case SV_POTION_INC_INT:\r
360                         if (do_inc_stat(A_INT)) ident = TRUE;\r
361                         break;\r
362 \r
363                 case SV_POTION_INC_WIS:\r
364                         if (do_inc_stat(A_WIS)) ident = TRUE;\r
365                         break;\r
366 \r
367                 case SV_POTION_INC_DEX:\r
368                         if (do_inc_stat(A_DEX)) ident = TRUE;\r
369                         break;\r
370 \r
371                 case SV_POTION_INC_CON:\r
372                         if (do_inc_stat(A_CON)) ident = TRUE;\r
373                         break;\r
374 \r
375                 case SV_POTION_INC_CHR:\r
376                         if (do_inc_stat(A_CHR)) ident = TRUE;\r
377                         break;\r
378 \r
379                 case SV_POTION_AUGMENTATION:\r
380                         if (do_inc_stat(A_STR)) ident = TRUE;\r
381                         if (do_inc_stat(A_INT)) ident = TRUE;\r
382                         if (do_inc_stat(A_WIS)) ident = TRUE;\r
383                         if (do_inc_stat(A_DEX)) ident = TRUE;\r
384                         if (do_inc_stat(A_CON)) ident = TRUE;\r
385                         if (do_inc_stat(A_CHR)) ident = TRUE;\r
386                         break;\r
387 \r
388                 case SV_POTION_ENLIGHTENMENT:\r
389                         msg_print(_("自分の置かれている状況が脳裏に浮かんできた...", "An image of your surroundings forms in your mind..."));\r
390                         chg_virtue(V_KNOWLEDGE, 1);\r
391                         chg_virtue(V_ENLIGHTEN, 1);\r
392                         wiz_lite(FALSE);\r
393                         ident = TRUE;\r
394                         break;\r
395 \r
396                 case SV_POTION_STAR_ENLIGHTENMENT:\r
397                         msg_print(_("更なる啓蒙を感じた...", "You begin to feel more enlightened..."));\r
398                         chg_virtue(V_KNOWLEDGE, 1);\r
399                         chg_virtue(V_ENLIGHTEN, 2);\r
400                         msg_print(NULL);\r
401                         wiz_lite(FALSE);\r
402                         (void)do_inc_stat(A_INT);\r
403                         (void)do_inc_stat(A_WIS);\r
404                         (void)detect_traps(DETECT_RAD_DEFAULT, TRUE);\r
405                         (void)detect_doors(DETECT_RAD_DEFAULT);\r
406                         (void)detect_stairs(DETECT_RAD_DEFAULT);\r
407                         (void)detect_treasure(DETECT_RAD_DEFAULT);\r
408                         (void)detect_objects_gold(DETECT_RAD_DEFAULT);\r
409                         (void)detect_objects_normal(DETECT_RAD_DEFAULT);\r
410                         identify_pack();\r
411                         self_knowledge();\r
412                         ident = TRUE;\r
413                         break;\r
414 \r
415                 case SV_POTION_SELF_KNOWLEDGE:\r
416                         msg_print(_("自分自身のことが少しは分かった気がする...", "You begin to know yourself a little better..."));\r
417                         msg_print(NULL);\r
418                         self_knowledge();\r
419                         ident = TRUE;\r
420                         break;\r
421 \r
422                 case SV_POTION_EXPERIENCE:\r
423                         if (p_ptr->prace == RACE_ANDROID) break;\r
424                         chg_virtue(V_ENLIGHTEN, 1);\r
425                         if (p_ptr->exp < PY_MAX_EXP)\r
426                         {\r
427                                 s32b ee = (p_ptr->exp / 2) + 10;\r
428                                 if (ee > 100000L) ee = 100000L;\r
429                                 msg_print(_("更に経験を積んだような気がする。", "You feel more experienced."));\r
430                                 gain_exp(ee);\r
431                                 ident = TRUE;\r
432                         }\r
433                         break;\r
434 \r
435                 case SV_POTION_RESISTANCE:\r
436                         (void)set_oppose_acid(p_ptr->oppose_acid + randint1(20) + 20, FALSE);\r
437                         (void)set_oppose_elec(p_ptr->oppose_elec + randint1(20) + 20, FALSE);\r
438                         (void)set_oppose_fire(p_ptr->oppose_fire + randint1(20) + 20, FALSE);\r
439                         (void)set_oppose_cold(p_ptr->oppose_cold + randint1(20) + 20, FALSE);\r
440                         (void)set_oppose_pois(p_ptr->oppose_pois + randint1(20) + 20, FALSE);\r
441                         ident = TRUE;\r
442                         break;\r
443 \r
444                 case SV_POTION_CURING:\r
445                         if (true_healing(50)) ident = TRUE;\r
446                         break;\r
447 \r
448                 case SV_POTION_INVULNERABILITY:\r
449                         (void)set_invuln(p_ptr->invuln + randint1(4) + 4, FALSE);\r
450                         ident = TRUE;\r
451                         break;\r
452 \r
453                 case SV_POTION_NEW_LIFE:\r
454                         do_cmd_rerate(FALSE);\r
455                         get_max_stats();\r
456                         p_ptr->update |= PU_BONUS;\r
457                         lose_all_mutations();\r
458                         ident = TRUE;\r
459                         break;\r
460 \r
461                 case SV_POTION_NEO_TSUYOSHI:\r
462                         (void)set_image(0);\r
463                         (void)set_tsuyoshi(p_ptr->tsuyoshi + randint1(100) + 100, FALSE);\r
464                         ident = TRUE;\r
465                         break;\r
466 \r
467                 case SV_POTION_TSUYOSHI:\r
468                         msg_print(_("「オクレ兄さん!」", "Brother OKURE!"));\r
469                         msg_print(NULL);\r
470                         p_ptr->tsuyoshi = 1;\r
471                         (void)set_tsuyoshi(0, TRUE);\r
472                         if (!p_ptr->resist_chaos)\r
473                         {\r
474                                 (void)set_image(50 + randint1(50));\r
475                         }\r
476                         ident = TRUE;\r
477                         break;\r
478                 \r
479                 case SV_POTION_POLYMORPH:\r
480                         if ((p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3) && one_in_(23))\r
481                         {\r
482                                 lose_all_mutations();\r
483                         }\r
484                         else\r
485                         {\r
486                                 do\r
487                                 {\r
488                                         if (one_in_(2))\r
489                                         {\r
490                                                 if(gain_random_mutation(0)) ident = TRUE;\r
491                                         }\r
492                                         else if (lose_mutation(0)) ident = TRUE;\r
493                                 } while(!ident || one_in_(2));\r
494                         }\r
495                         break;\r
496                 }\r
497         }\r
498 \r
499         if (prace_is_(RACE_SKELETON))\r
500         {\r
501                 msg_print(_("液体の一部はあなたのアゴを素通りして落ちた!", "Some of the fluid falls through your jaws!"));\r
502                 (void)potion_smash_effect(0, p_ptr->y, p_ptr->x, q_ptr->k_idx);\r
503         }\r
504         p_ptr->update |= (PU_COMBINE | PU_REORDER);\r
505 \r
506         if (!(object_is_aware(q_ptr)))\r
507         {\r
508                 chg_virtue(V_PATIENCE, -1);\r
509                 chg_virtue(V_CHANCE, 1);\r
510                 chg_virtue(V_KNOWLEDGE, -1);\r
511         }\r
512 \r
513         /* The item has been tried */\r
514         object_tried(q_ptr);\r
515 \r
516         /* An identification was made */\r
517         if (ident && !object_is_aware(q_ptr))\r
518         {\r
519                 object_aware(q_ptr);\r
520                 gain_exp((lev + (p_ptr->lev >> 1)) / p_ptr->lev);\r
521         }\r
522 \r
523         p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);\r
524 \r
525         /* Potions can feed the player */\r
526         switch (p_ptr->mimic_form)\r
527         {\r
528         case MIMIC_NONE:\r
529                 switch (p_ptr->prace)\r
530                 {\r
531                         case RACE_VAMPIRE:\r
532                                 (void)set_food(p_ptr->food + (q_ptr->pval / 10));\r
533                                 break;\r
534                         case RACE_SKELETON:\r
535                                 /* Do nothing */\r
536                                 break;\r
537                         case RACE_GOLEM:\r
538                         case RACE_ZOMBIE:\r
539                         case RACE_DEMON:\r
540                         case RACE_SPECTRE:\r
541                                 set_food(p_ptr->food + ((q_ptr->pval) / 20));\r
542                                 break;\r
543                         case RACE_ANDROID:\r
544                                 if (q_ptr->tval == TV_FLASK)\r
545                                 {\r
546                                         msg_print(_("オイルを補給した。", "You replenish yourself with the oil."));\r
547                                         set_food(p_ptr->food + 5000);\r
548                                 }\r
549                                 else\r
550                                 {\r
551                                         set_food(p_ptr->food + ((q_ptr->pval) / 20));\r
552                                 }\r
553                                 break;\r
554                         case RACE_ENT:\r
555                                 msg_print(_("水分を取り込んだ。", "You are moistened."));\r
556                                 set_food(MIN(p_ptr->food + q_ptr->pval + MAX(0, q_ptr->pval * 10) + 2000, PY_FOOD_MAX - 1));\r
557                                 break;\r
558                         default:\r
559                                 (void)set_food(p_ptr->food + q_ptr->pval);\r
560                                 break;\r
561                 }\r
562                 break;\r
563         case MIMIC_DEMON:\r
564         case MIMIC_DEMON_LORD:\r
565                 set_food(p_ptr->food + ((q_ptr->pval) / 20));\r
566                 break;\r
567         case MIMIC_VAMPIRE:\r
568                 (void)set_food(p_ptr->food + (q_ptr->pval / 10));\r
569                 break;\r
570         default:\r
571                 (void)set_food(p_ptr->food + q_ptr->pval);\r
572                 break;\r
573         }\r
574 }\r
575 \r
576 \r
577 \r
578 /*!\r
579  * @brief 薬を飲むコマンドのメインルーチン /\r
580  * Quaff some potion (from the pack or floor)\r
581  * @return なし\r
582  */\r
583 void do_cmd_quaff_potion(void)\r
584 {\r
585         OBJECT_IDX item;\r
586         concptr q, s;\r
587 \r
588         if (p_ptr->wild_mode)\r
589         {\r
590                 return;\r
591         }\r
592 \r
593         if (p_ptr->inside_arena)\r
594         {\r
595                 msg_print(_("アリーナが魔法を吸収した!", "The arena absorbs all attempted magic!"));\r
596                 msg_print(NULL);\r
597                 return;\r
598         }\r
599 \r
600         if (p_ptr->special_defense & (KATA_MUSOU | KATA_KOUKIJIN))\r
601         {\r
602                 set_action(ACTION_NONE);\r
603         }\r
604 \r
605         /* Restrict choices to potions */\r
606         item_tester_hook = item_tester_hook_quaff;\r
607 \r
608         q = _("どの薬を飲みますか? ", "Quaff which potion? ");\r
609         s = _("飲める薬がない。", "You have no potions to quaff.");\r
610 \r
611         if (!choose_object(&item, q, s, (USE_INVEN | USE_FLOOR))) return;\r
612 \r
613         /* Quaff the potion */\r
614         do_cmd_quaff_potion_aux(item);\r
615 }\r