#include "angband.h"\r
+#include "projection.h"\r
+#include "spells-summon.h"\r
\r
\r
\r
{\r
int k;\r
int ident = FALSE;\r
- int lev = powerful ? p_ptr->lev * 2 : p_ptr->lev;\r
- int detect_rad = powerful ? DETECT_RAD_DEFAULT * 3 / 2 : DETECT_RAD_DEFAULT;\r
+ PLAYER_LEVEL lev = powerful ? p_ptr->lev * 2 : p_ptr->lev;\r
+ POSITION detect_rad = powerful ? DETECT_RAD_DEFAULT * 3 / 2 : DETECT_RAD_DEFAULT;\r
\r
/* Analyze the staff */\r
switch (sval)\r
const int times = randint1(powerful ? 8 : 4);\r
for (k = 0; k < times; k++)\r
{\r
- if (summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)))\r
+ if (summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET), '\0'))\r
{\r
ident = TRUE;\r
}\r
bool result = powerful ? remove_all_curse() : remove_curse();\r
if (result)\r
{\r
- if (magic)\r
- {\r
- msg_print(_("誰かに見守られているような気がする。", "You feel as if someone is watching over you."));\r
- }\r
- else if (!p_ptr->blind)\r
- {\r
- msg_print(_("杖は一瞬ブルーに輝いた...", "The staff glows blue for a moment..."));\r
-\r
- }\r
ident = TRUE;\r
}\r
break;\r
\r
while (attempts--)\r
{\r
- scatter(&y, &x, p_ptr->y, p_ptr->x, 4, 0);\r
-\r
+ scatter(&y, &x, p_ptr->y, p_ptr->x, 4, PROJECT_LOS);\r
if (!cave_have_flag_bold(y, x, FF_PROJECT)) continue;\r
-\r
if (!player_bold(y, x)) break;\r
}\r
\r
project(0, 0, y, x, damroll(6 + lev / 8, 10), GF_LITE_WEAK,\r
- (PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_KILL), -1);\r
+ (PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_KILL | PROJECT_LOS), -1);\r
}\r
ident = TRUE;\r
break;\r
\r
case SV_STAFF_CURE_LIGHT:\r
{\r
- if (hp_player(damroll((powerful ? 4 : 2), 8))) ident = TRUE;\r
- if (powerful) {\r
- if (set_blind(0)) ident = TRUE;\r
- if (set_poisoned(0)) ident = TRUE;\r
- if (set_cut(p_ptr->cut - 10)) ident = TRUE;\r
- }\r
- if (set_shero(0, TRUE)) ident = TRUE;\r
+ ident = cure_light_wounds((powerful ? 4 : 2), 8);\r
break;\r
}\r
\r
case SV_STAFF_CURING:\r
{\r
- if (set_blind(0)) ident = TRUE;\r
- if (set_poisoned(0)) ident = TRUE;\r
- if (set_confused(0)) ident = TRUE;\r
- if (set_stun(0)) ident = TRUE;\r
- if (set_cut(0)) ident = TRUE;\r
- if (set_image(0)) ident = TRUE;\r
+ ident = true_healing(0);\r
if (set_shero(0, TRUE)) ident = TRUE;\r
break;\r
}\r
\r
case SV_STAFF_HEALING:\r
{\r
- if (hp_player(powerful ? 500 : 300)) ident = TRUE;\r
- if (set_stun(0)) ident = TRUE;\r
- if (set_cut(0)) ident = TRUE;\r
- if (set_shero(0, TRUE)) ident = TRUE;\r
+ if (cure_critical_wounds(powerful ? 500 : 300)) ident = TRUE;\r
break;\r
}\r
\r
case SV_STAFF_THE_MAGI:\r
{\r
if (do_res_stat(A_INT)) ident = TRUE;\r
- if (p_ptr->csp < p_ptr->msp)\r
- {\r
- p_ptr->csp = p_ptr->msp;\r
- p_ptr->csp_frac = 0;\r
- ident = TRUE;\r
- msg_print(_("頭がハッキリとした。", "You feel your head clear."));\r
-\r
- p_ptr->redraw |= (PR_MANA);\r
- p_ptr->window |= (PW_PLAYER);\r
- p_ptr->window |= (PW_SPELL);\r
- }\r
+ ident |= restore_mana(FALSE);\r
if (set_shero(0, TRUE)) ident = TRUE;\r
break;\r
}\r
\r
case SV_STAFF_HOLINESS:\r
{\r
- if (dispel_evil(powerful ? 225 : 150)) ident = TRUE;\r
- k = 3 * lev;\r
- if (set_protevil((magic ? 0 : p_ptr->protevil) + randint1(25) + k, FALSE)) ident = TRUE;\r
- if (set_poisoned(0)) ident = TRUE;\r
- if (set_afraid(0)) ident = TRUE;\r
- if (hp_player(50)) ident = TRUE;\r
- if (set_stun(0)) ident = TRUE;\r
- if (set_cut(0)) ident = TRUE;\r
+ if (cleansing_nova(p_ptr, magic, powerful)) ident = TRUE;\r
break;\r
}\r
\r
case SV_STAFF_GENOCIDE:\r
{\r
- (void)symbol_genocide((magic ? lev + 50 : 200), TRUE);\r
- ident = TRUE;\r
+ ident = symbol_genocide((magic ? lev + 50 : 200), TRUE);\r
break;\r
}\r
\r
* One charge of one staff disappears.\r
* Hack -- staffs of identify can be "cancelled".\r
*/\r
-void do_cmd_use_staff_aux(int item)\r
+void do_cmd_use_staff_aux(INVENTORY_IDX item)\r
{\r
int ident, chance, lev;\r
object_type *o_ptr;\r
}\r
\r
\r
- /* Take a turn */\r
p_ptr->energy_use = 100;\r
\r
/* Extract the item level */\r
o_ptr->ident |= (IDENT_EMPTY);\r
\r
/* Combine / Reorder the pack (later) */\r
- p_ptr->notice |= (PN_COMBINE | PN_REORDER);\r
+ p_ptr->update |= (PU_COMBINE | PU_REORDER);\r
p_ptr->window |= (PW_INVEN);\r
\r
return;\r
}\r
\r
\r
- /* Sound */\r
sound(SOUND_ZAP);\r
\r
ident = staff_effect(o_ptr->sval, &use_charge, FALSE, FALSE, object_is_aware(o_ptr));\r
}\r
\r
/* Combine / Reorder the pack (later) */\r
- p_ptr->notice |= (PN_COMBINE | PN_REORDER);\r
+ p_ptr->update |= (PU_COMBINE | PU_REORDER);\r
\r
/* Tried the item */\r
object_tried(o_ptr);\r
gain_exp((lev + (p_ptr->lev >> 1)) / p_ptr->lev);\r
}\r
\r
- /* Window stuff */\r
p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);\r
\r
\r
{\r
object_type forge;\r
object_type *q_ptr;\r
-\r
- /* Get local object */\r
q_ptr = &forge;\r
\r
/* Obtain a local object */\r
p_ptr->total_weight -= q_ptr->weight;\r
item = inven_carry(q_ptr);\r
\r
- /* Message */\r
msg_print(_("杖をまとめなおした。", "You unstack your staff."));\r
}\r
\r
void do_cmd_use_staff(void)\r
{\r
OBJECT_IDX item;\r
- cptr q, s;\r
+ concptr q, s;\r
+\r
+ if (p_ptr->wild_mode)\r
+ {\r
+ return;\r
+ }\r
+\r
+ if (p_ptr->inside_arena)\r
+ {\r
+ msg_print(_("アリーナが魔法を吸収した!", "The arena absorbs all attempted magic!"));\r
+ msg_print(NULL);\r
+ return;\r
+ }\r
\r
if (p_ptr->special_defense & (KATA_MUSOU | KATA_KOUKIJIN))\r
{\r
/* Restrict choices to wands */\r
item_tester_tval = TV_STAFF;\r
\r
- /* Get an item */\r
q = _("どの杖を使いますか? ", "Use which staff? ");\r
s = _("使える杖がない。", "You have no staff to use.");\r
\r
- if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) return;\r
+ if (!choose_object(&item, q, s, (USE_INVEN | USE_FLOOR))) return;\r
\r
do_cmd_use_staff_aux(item);\r
}\r