y = py + ddy[dir];
x = px + ddx[dir];
c_ptr = &cave[y][x];
- if (c_ptr->feat == FEAT_RUBBLE)
+
+ if (!have_flag(f_info[get_feat_mimic(c_ptr)].flags, FF_CAN_DIG))
+ {
+#ifdef JP
+ msg_print("¤½¤³¤Ë¤Ï´äÀФ¬¤Ê¤¤¡£");
+#else
+ msg_print("You need pile of rubble.");
+#endif
+ return FALSE;
+ }
+ else if (!cave_have_flag_grid(c_ptr, FF_CAN_DIG) || !cave_have_flag_grid(c_ptr, FF_HURT_ROCK))
{
+#ifdef JP
+ msg_print("¹Å¤¹¤®¤ÆÊø¤»¤Ê¤«¤Ã¤¿¡£");
+#else
+ msg_print("You failed to make ammo.");
+#endif
+ }
+ else
+ {
+ s16b slot;
+
/* Get local object */
q_ptr = &forge;
apply_magic(q_ptr, p_ptr->lev, AM_NO_FIXED_ART);
q_ptr->discount = 99;
- (void)inven_carry(q_ptr);
+ slot = inven_carry(q_ptr);
object_desc(o_name, q_ptr, 0);
#ifdef JP
- msg_format("´äÀФòºï¤Ã¤Æ%s¤òºî¤Ã¤¿¡£",o_name);
+ msg_format("%s¤òºî¤Ã¤¿¡£", o_name);
#else
msg_print("You make some ammo.");
#endif
- (void)wall_to_mud(dir);
- p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MONSTERS | PU_MON_LITE);
- p_ptr->window |= (PW_OVERHEAD);
- }
- else
- {
-#ifdef JP
- msg_print("¤½¤³¤Ë¤Ï´äÀФ¬¤Ê¤¤¡£");
-#else
- msg_print("You need pile of rubble.");
-#endif
+ /* Auto-inscription */
+ if (slot >= 0) autopick_alter_item(slot, FALSE);
+
+ /* Destroy the wall */
+ cave_alter_feat(y, x, FF_HURT_ROCK);
+
+ p_ptr->update |= (PU_FLOW);
}
}
/**********Create arrows*********/
else if (ext == 2)
{
int item;
-
cptr q, s;
+ s16b slot;
item_tester_hook = item_tester_hook_convertible;
else
{
q_ptr = &o_list[0 - item];
- }
+ }
/* Get local object */
q_ptr = &forge;
floor_item_describe(0 - item);
floor_item_optimize(0 - item);
}
- (void)inven_carry(q_ptr);
+
+ slot = inven_carry(q_ptr);
+
+ /* Auto-inscription */
+ if (slot >= 0) autopick_alter_item(slot, FALSE);
}
/**********Create bolts*********/
else if (ext == 3)
{
int item;
-
cptr q, s;
+ s16b slot;
item_tester_hook = item_tester_hook_convertible;
floor_item_optimize(0 - item);
}
- (void)inven_carry(q_ptr);
+ slot = inven_carry(q_ptr);
+
+ /* Auto-inscription */
+ if (slot >= 0) autopick_alter_item(slot, FALSE);
}
return TRUE;
}
}
- if (!object_known_p(o_ptr))
+ if (!object_is_known(o_ptr))
{
#ifdef JP
msg_print("´ÕÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È¼è¤ê¹þ¤á¤Ê¤¤¡£");
}
+static bool can_do_cmd_cast(void)
+{
+ if (dun_level && (d_info[dungeon_type].flags1 & DF1_NO_MAGIC))
+ {
+#ifdef JP
+ msg_print("¥À¥ó¥¸¥ç¥ó¤¬ËâË¡¤òµÛ¼ý¤·¤¿¡ª");
+#else
+ msg_print("The dungeon absorbs all attempted magic!");
+#endif
+ msg_print(NULL);
+ return FALSE;
+ }
+ else if (p_ptr->anti_magic)
+ {
+#ifdef JP
+ msg_print("È¿ËâË¡¥Ð¥ê¥¢¤¬ËâË¡¤ò¼ÙË⤷¤¿¡ª");
+#else
+ msg_print("An anti-magic shell disrupts your magic!");
+#endif
+ return FALSE;
+ }
+ else if (p_ptr->shero)
+ {
+#ifdef JP
+ msg_format("¶¸Àï»Î²½¤·¤Æ¤¤¤ÆƬ¤¬²ó¤é¤Ê¤¤¡ª");
+#else
+ msg_format("You cannot think directly!");
+#endif
+ return FALSE;
+ }
+ else
+ return TRUE;
+}
+
+
static bool choose_kamae(void)
{
char choice;
screen_load();
return FALSE;
}
- else if ((choice == 'a') || (choice == 'A') || (choice == ESCAPE))
+ else if ((choice == 'a') || (choice == 'A'))
{
if (p_ptr->action == ACTION_KAMAE)
{
screen_load();
return FALSE;
}
- else if ((choice == 'a') || (choice == 'A') || (choice == ESCAPE))
+ else if ((choice == 'a') || (choice == 'A'))
{
if (p_ptr->action == ACTION_KATA)
{
#else
msg_print("You are failed to run away.");
#endif
- else teleport_player(30);
+ else teleport_player(30, 0L);
}
else
{
#endif
return FALSE;
}
+ if (p_ptr->riding)
+ {
+#ifdef JP
+ msg_print("¾èÇÏÃæ¤Ï¤Ç¤¤Þ¤»¤ó¡£");
+#else
+ msg_print("You need to get off a pet.");
+#endif
+ return FALSE;
+ }
if (command == -3)
{
- if (choose_kamae()) energy_use = 100;
- else energy_use = 0;
+ if (!choose_kamae()) return FALSE;
p_ptr->update |= (PU_BONUS);
- p_ptr->redraw |= (PR_ARMOR);
}
else if (command == -4)
{
}
case CLASS_RED_MAGE:
{
+ if (!can_do_cmd_cast()) return FALSE;
handle_stuff();
do_cmd_cast();
handle_stuff();
- if (!p_ptr->paralyzed)
+ if (!p_ptr->paralyzed && can_do_cmd_cast())
do_cmd_cast();
break;
}
}
else if (command == -4)
{
- if (!buki_motteruka(INVEN_RARM))
+ if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM))
{
#ifdef JP
msg_print("Éð´ï¤ò»ý¤¿¤Ê¤¤¤È¤¤¤±¤Þ¤»¤ó¡£");
#endif
return FALSE;
}
- if (choose_kata()) energy_use = 100;
- else energy_use = 0;
+ if (!choose_kata()) return FALSE;
p_ptr->update |= (PU_BONUS);
- p_ptr->redraw |= (PR_ARMOR);
}
break;
}
{
int type = (one_in_(2) ? GF_NETHER : GF_FIRE);
if (!get_aim_dir(&dir)) return FALSE;
+ if (music_singing_any()) stop_singing();
#ifdef JP
msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£",((type == GF_NETHER) ? "ÃϹö" : "²Ð±ê"));
#else
x = px + ddx[dir];
c_ptr = &cave[y][x];
+ if (music_singing_any()) stop_singing();
+
if (!c_ptr->m_idx)
{
#ifdef JP
msg_print("Blink!");
#endif
- teleport_player(10);
+ teleport_player(10, 0L);
break;
case RACE_HALF_ORC:
case RACE_YEEK:
if (!get_aim_dir(&dir)) return FALSE;
+ if (music_singing_any()) stop_singing();
#ifdef JP
msg_print("¿È¤ÎÌÓ¤â¤è¤À¤Ä¶«¤ÓÀ¼¤ò¾å¤²¤¿¡ª");
#else
case RACE_KLACKON:
if (!get_aim_dir(&dir)) return FALSE;
+ if (music_singing_any()) stop_singing();
#ifdef JP
msg_print("»À¤òÅǤ¤¤¿¡£");
#else
}
}
+ if (music_singing_any()) stop_singing();
+
#ifdef JP
msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", Type_desc);
#else
x = px + ddx[dir];
c_ptr = &cave[y][x];
+ if (music_singing_any()) stop_singing();
+
if (!c_ptr->m_idx)
{
#ifdef JP
case RACE_SPECTRE:
if (!get_aim_dir(&dir)) return FALSE;
+ if (music_singing_any()) stop_singing();
#ifdef JP
msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤¶«¤ÓÀ¼¤ò¤¢¤²¤¿¡ª");
#else
{
int type = (one_in_(2) ? GF_NETHER : GF_FIRE);
if (!get_aim_dir(&dir)) return FALSE;
+ if (music_singing_any()) stop_singing();
#ifdef JP
msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£",((type == GF_NETHER) ? "ÃϹö" : "²Ð±ê"));
#else
#else
msg_print("You fire a rocket.");
#endif
- fire_ball(GF_ROCKET, dir, plev * 5, 2);
+ fire_rocket(GF_ROCKET, dir, plev * 5, 2);
}
break;