}
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_print("You make some ammo.");
#endif
+ /* Auto-inscription */
+ if (slot >= 0) autopick_alter_item(slot, FALSE);
+
/* Destroy the wall */
cave_alter_feat(y, x, FF_HURT_ROCK);
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;
}
}
+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)
{
}
+
+void ratial_stop_mouth()
+{
+ if (music_singing_any()) stop_singing();
+ if (hex_spelling_any()) stop_hex_spell_all();
+}
+
+
static bool cmd_racial_power_aux(s32b command)
{
s16b plev = p_ptr->lev;
}
break;
}
- case CLASS_MAGE:
case CLASS_HIGH_MAGE:
+ if (p_ptr->realm1 == REALM_HEX)
+ {
+ bool retval = stop_hex_spell();
+ if (retval) energy_use = 10;
+ return (retval);
+ }
+ case CLASS_MAGE:
+ /* case CLASS_HIGH_MAGE: */
case CLASS_SORCERER:
{
if (!eat_magic(p_ptr->lev * 2)) return FALSE;
break;
}
case CLASS_RANGER:
+ case CLASS_SNIPER:
{
#ifdef JP
msg_print("Ũ¤òÄ´ºº¤·¤¿...");
#else
msg_print("You glare nearby monsters...");
#endif
- slow_monsters();
+ slow_monsters(p_ptr->lev);
stun_monsters(p_ptr->lev * 4);
confuse_monsters(p_ptr->lev * 4);
turn_monsters(p_ptr->lev * 4);
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_MAGIC_EATER:
{
- if (!gain_magic()) return FALSE;
+ if (command == -3) {
+ if (!gain_magic()) return FALSE;
+ } else if (command == -4) {
+ if (!can_do_cmd_cast()) return FALSE;
+ if (!do_cmd_magic_eater(FALSE, TRUE)) return FALSE;
+ }
break;
}
case CLASS_BARD:
}
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;
}
#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;
}
}
case CLASS_NINJA:
{
- if (p_ptr->action == ACTION_HAYAGAKE) set_action(ACTION_NONE);
- else set_action(ACTION_HAYAGAKE);
+ if (p_ptr->action == ACTION_HAYAGAKE)
+ {
+ set_action(ACTION_NONE);
+ }
+ else
+ {
+ cave_type *c_ptr = &cave[py][px];
+ feature_type *f_ptr = &f_info[c_ptr->feat];
+
+ if (!have_flag(f_ptr->flags, FF_PROJECT) ||
+ (!p_ptr->levitation && have_flag(f_ptr->flags, FF_DEEP)))
+ {
+#ifdef JP
+ msg_print("¤³¤³¤Ç¤ÏÁÇÁ᤯ư¤±¤Ê¤¤¡£");
+#else
+ msg_print("You cannot run in here.");
+#endif
+ }
+ else
+ {
+ set_action(ACTION_HAYAGAKE);
+ }
+ }
+
+
energy_use = 0;
break;
}
+
}
}
else if (p_ptr->mimic_form)
{
int type = (one_in_(2) ? GF_NETHER : GF_FIRE);
if (!get_aim_dir(&dir)) return FALSE;
- if (music_singing_any()) stop_singing();
+ ratial_stop_mouth();
#ifdef JP
msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£",((type == GF_NETHER) ? "ÃϹö" : "²Ð±ê"));
#else
x = px + ddx[dir];
c_ptr = &cave[y][x];
- if (music_singing_any()) stop_singing();
+ ratial_stop_mouth();
if (!c_ptr->m_idx)
{
case RACE_HALF_GIANT:
if (!get_aim_dir(&dir)) return FALSE;
- (void)wall_to_mud(dir);
+ (void)wall_to_mud(dir, 20 + randint1(30));
break;
case RACE_HALF_TITAN:
case RACE_YEEK:
if (!get_aim_dir(&dir)) return FALSE;
- if (music_singing_any()) stop_singing();
+ ratial_stop_mouth();
#ifdef JP
msg_print("¿È¤ÎÌÓ¤â¤è¤À¤Ä¶«¤ÓÀ¼¤ò¾å¤²¤¿¡ª");
#else
case RACE_KLACKON:
if (!get_aim_dir(&dir)) return FALSE;
- if (music_singing_any()) stop_singing();
+ ratial_stop_mouth();
#ifdef JP
msg_print("»À¤òÅǤ¤¤¿¡£");
#else
}
}
- if (music_singing_any()) stop_singing();
+ ratial_stop_mouth();
#ifdef JP
msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", Type_desc);
x = px + ddx[dir];
c_ptr = &cave[y][x];
- if (music_singing_any()) stop_singing();
+ ratial_stop_mouth();
if (!c_ptr->m_idx)
{
case RACE_SPECTRE:
if (!get_aim_dir(&dir)) return FALSE;
- if (music_singing_any()) stop_singing();
+ ratial_stop_mouth();
#ifdef JP
msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤¶«¤ÓÀ¼¤ò¤¢¤²¤¿¡ª");
#else
#endif
if (plev < 25) sleep_monsters_touch();
- else (void)sleep_monsters();
+ else (void)sleep_monsters(plev);
break;
case RACE_DEMON:
{
int type = (one_in_(2) ? GF_NETHER : GF_FIRE);
if (!get_aim_dir(&dir)) return FALSE;
- if (music_singing_any()) stop_singing();
+ ratial_stop_mouth();
#ifdef JP
msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£",((type == GF_NETHER) ? "ÃϹö" : "²Ð±ê"));
#else
}
break;
- case RACE_KUTA:
+ case RACE_KUTAR:
(void)set_tsubureru(randint1(20) + 30, FALSE);
break;
power_desc[num++].number = -3;
break;
}
- case CLASS_MAGE:
case CLASS_HIGH_MAGE:
+ if (p_ptr->realm1 == REALM_HEX)
+ {
+#ifdef JP
+ strcpy(power_desc[num].name, "±Ó¾§¤ò¤ä¤á¤ë");
+#else
+ strcpy(power_desc[num].name, "Stop spelling");
+#endif
+ power_desc[num].level = 1;
+ power_desc[num].cost = 0;
+ power_desc[num].stat = A_INT;
+ power_desc[num].fail = 0;
+ power_desc[num++].number = -3;
+ break;
+ }
+ case CLASS_MAGE:
+ /* case CLASS_HIGH_MAGE: */
case CLASS_SORCERER:
{
#ifdef JP
break;
}
case CLASS_RANGER:
+ case CLASS_SNIPER:
{
#ifdef JP
strcpy(power_desc[num].name, "¥â¥ó¥¹¥¿¡¼Ä´ºº");
power_desc[num].stat = A_INT;
power_desc[num].fail = 0;
power_desc[num++].number = -3;
+
+ strcpy(power_desc[num].name, _("¶¯ÎÏȯư", "Powerful Activation"));
+ power_desc[num].level = 10;
+ power_desc[num].cost = 10 + (lvl - 10) / 2;
+ power_desc[num].stat = A_INT;
+ power_desc[num].fail = 0;
+ power_desc[num++].number = -4;
break;
}
case CLASS_BARD:
power_desc[num].fail = 20;
power_desc[num++].number = -1;
break;
- case RACE_KUTA:
+ case RACE_KUTAR:
#ifdef JP
strcpy(power_desc[num].name, "²£¤Ë¿¤Ó¤ë");
#else