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;
q_ptr->number = (byte)rand_range(15,30);
object_aware(q_ptr);
object_known(q_ptr);
- apply_magic(q_ptr, p_ptr->lev, FALSE, FALSE, FALSE, FALSE);
+ 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, TRUE, 2);
+ 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);
- 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;
/* Hack -- Give the player some small firestones */
object_prep(q_ptr, lookup_kind(TV_ARROW, m_bonus(1, p_ptr->lev)+ 1));
- q_ptr->number = (byte)rand_range(5,10);
+ q_ptr->number = (byte)rand_range(5, 10);
object_aware(q_ptr);
object_known(q_ptr);
- apply_magic(q_ptr, p_ptr->lev, FALSE, FALSE, FALSE, FALSE);
+ apply_magic(q_ptr, p_ptr->lev, AM_NO_FIXED_ART);
q_ptr->discount = 99;
- object_desc(o_name, q_ptr, TRUE, 2);
+ object_desc(o_name, q_ptr, 0);
#ifdef JP
msg_format("%s¤òºî¤Ã¤¿¡£", o_name);
#else
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;
else
{
q_ptr = &o_list[0 - item];
- }
+ }
/* Get local object */
q_ptr = &forge;
/* Hack -- Give the player some small firestones */
object_prep(q_ptr, lookup_kind(TV_BOLT, m_bonus(1, p_ptr->lev)+1));
- q_ptr->number = (byte)rand_range(4,8);
+ q_ptr->number = (byte)rand_range(4, 8);
object_aware(q_ptr);
object_known(q_ptr);
- apply_magic(q_ptr, p_ptr->lev, FALSE, FALSE, FALSE, FALSE);
+ apply_magic(q_ptr, p_ptr->lev, AM_NO_FIXED_ART);
q_ptr->discount = 99;
- object_desc(o_name, q_ptr, TRUE, 2);
+ object_desc(o_name, q_ptr, 0);
#ifdef JP
msg_format("%s¤òºî¤Ã¤¿¡£", o_name);
#else
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("´ÕÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È¼è¤ê¹þ¤á¤Ê¤¤¡£");
}
}
- object_desc(o_name, o_ptr, TRUE, 3);
+ object_desc(o_name, o_ptr, 0);
/* Message */
#ifdef JP
msg_format("%s¤ÎËâÎϤò¼è¤ê¹þ¤ó¤À¡£", o_name);
}
+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)
{
static int racial_cost;
-static bool racial_use_hp;
/*
* Note: return value indicates that we have succesfully used the power
s16b min_level = pd_ptr->level;
int use_stat = pd_ptr->stat;
int difficulty = pd_ptr->fail;
+ int use_hp = 0;
- racial_cost = pd_ptr->cost;
- racial_use_hp = FALSE;
+ racial_cost = pd_ptr->cost;
/* Not enough mana - use hp */
- if (p_ptr->csp < racial_cost) racial_use_hp = TRUE;
+ if (p_ptr->csp < racial_cost) use_hp = racial_cost - p_ptr->csp;
/* Power is not available yet */
if (p_ptr->lev < min_level)
}
/* Risk death? */
- else if (racial_use_hp && (p_ptr->chp < racial_cost))
+ else if (p_ptr->chp < use_hp)
{
#ifdef JP
if (!get_check("ËÜÅö¤Ëº£¤Î¿ê¼å¤·¤¿¾õÂ֤Ǥ³¤ÎǽÎϤò»È¤¤¤Þ¤¹¤«¡©"))
return 1;
}
+ if (flush_failure) flush();
#ifdef JP
msg_print("½¼Ê¬¤Ë½¸Ãæ¤Ç¤¤Ê¤«¤Ã¤¿¡£");
#else
msg_print("You've failed to concentrate hard enough.");
#endif
- if (flush_failure) flush();
return -1;
}
+
+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;
{
int y = 0, x = 0, i;
cave_type *c_ptr;
- monster_type *m_ptr;
for (i = 0; i < 6; i++)
{
x = px + ddx_ddd[dir];
c_ptr = &cave[y][x];
- /* Get the monster */
- m_ptr = &m_list[c_ptr->m_idx];
-
/* Hack -- attack monsters */
if (c_ptr->m_idx)
py_attack(y, x, 0);
}
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;
#else
msg_print("You are failed to run away.");
#endif
- else teleport_player(30);
+ else teleport_player(30, 0L);
}
else
{
break;
}
case CLASS_RANGER:
+ case CLASS_SNIPER:
{
#ifdef JP
msg_print("Ũ¤òÄ´ºº¤·¤¿...");
}
case CLASS_PALADIN:
{
- if (is_good_realm(p_ptr->realm1))
- {
- if (!get_aim_dir(&dir)) return FALSE;
- fire_beam(GF_HOLY_FIRE, dir, plev * 3);
- }
- else
- {
- if (!get_aim_dir(&dir)) return FALSE;
- fire_beam(GF_HELL_FIRE, dir, plev * 3);
- }
+ if (!get_aim_dir(&dir)) return FALSE;
+ fire_beam(is_good_realm(p_ptr->realm1) ? GF_HOLY_FIRE : GF_HELL_FIRE,
+ dir, plev * 3);
break;
}
case CLASS_WARRIOR_MAGE:
{
if (command == -3)
{
- int gain_sp;
#ifdef JP
- if ((gain_sp = take_hit(DAMAGE_USELIFE, p_ptr->lev, "£È£Ð¤«¤é£Í£Ð¤Ø¤Î̵ËŤÊÊÑ´¹", -1)))
+ int gain_sp = take_hit(DAMAGE_USELIFE, p_ptr->lev, "£È£Ð¤«¤é£Í£Ð¤Ø¤Î̵ËŤÊÊÑ´¹", -1) / 5;
#else
- if ((gain_sp = take_hit(DAMAGE_USELIFE, p_ptr->lev, "thoughtless convertion from HP to SP", -1)))
+ int gain_sp = take_hit(DAMAGE_USELIFE, p_ptr->lev, "thoughtless convertion from HP to SP", -1) / 5;
#endif
+ if (gain_sp)
{
- p_ptr->csp += gain_sp / 5;
+ p_ptr->csp += gain_sp;
if (p_ptr->csp > p_ptr->msp)
{
p_ptr->csp = p_ptr->msp;
}
else if (command == -4)
{
- if (p_ptr->csp >= p_ptr->lev/5)
+ if (p_ptr->csp >= p_ptr->lev / 5)
{
p_ptr->csp -= p_ptr->lev / 5;
hp_player(p_ptr->lev);
msg_print("You failed to convert.");
#endif
}
+
+ /* Redraw mana and hp */
+ p_ptr->redraw |= (PR_HP | PR_MANA);
+
break;
}
case CLASS_CHAOS_WARRIOR:
#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);
}
case CLASS_MONK:
{
- if (empty_hands(TRUE) < 2)
+ if (!(empty_hands(TRUE) & EMPTY_HAND_RARM))
{
#ifdef JP
msg_print("ÁǼꤸ¤ã¤Ê¤¤¤È¤Ç¤¤Þ¤»¤ó¡£");
#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)
{
p_ptr->csp = p_ptr->msp;
p_ptr->csp_frac = 0;
}
+
+ /* Redraw mana */
+ p_ptr->redraw |= (PR_MANA);
break;
}
case CLASS_TOURIST:
{
if (!get_aim_dir(&dir)) return FALSE;
(void)fire_ball_hide(GF_CONTROL_LIVING, dir, p_ptr->lev, 0);
- break;
}
else if (command == -4)
{
project_hack(GF_CONTROL_LIVING, p_ptr->lev);
- break;
}
+ break;
}
case CLASS_ARCHER:
{
}
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:
{
+ /* Singing is already stopped */
+ if (!p_ptr->magic_num1[0] && !p_ptr->magic_num1[1]) return FALSE;
+
stop_singing();
energy_use = 10;
- return FALSE;
+ break;
}
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;
}
p_ptr->csp = max_csp;
p_ptr->csp_frac = 0;
}
+
+ /* Redraw mana */
+ p_ptr->redraw |= (PR_MANA);
}
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;
}
rlev = r_ptr->level;
if (r_ptr->flags1 & RF1_UNIQUE) rlev = rlev * 3 / 2;
if (rlev > 60) rlev = 60+(rlev-60)/2;
- if ((randint1(p_ptr->skill_exp[GINOU_RIDING]/120+p_ptr->lev*2/3) > rlev) && one_in_(2) && !p_ptr->inside_arena && !p_ptr->inside_battle && !(r_ptr->flags7 & (RF7_GUARDIAN)) && !(r_ptr->flags1 & (RF1_QUESTOR)) && (rlev < p_ptr->lev*3/2+randint0(p_ptr->lev/5)))
+ if ((randint1(p_ptr->skill_exp[GINOU_RIDING] / 120 + p_ptr->lev * 2 / 3) > rlev)
+ && one_in_(2) && !p_ptr->inside_arena && !p_ptr->inside_battle
+ && !(r_ptr->flags7 & (RF7_GUARDIAN)) && !(r_ptr->flags1 & (RF1_QUESTOR))
+ && (rlev < p_ptr->lev * 3 / 2 + randint0(p_ptr->lev / 5)))
{
#ifdef JP
msg_format("%s¤ò¼ê¤Ê¤º¤±¤¿¡£",m_name);
{
if (command == -3)
{
- int x, y;
- for (x = 0; x < cur_wid; x++)
- {
- for (y = 0; y < cur_hgt; y++)
- {
- if (is_mirror_grid(&cave[y][x]))
- {
- remove_mirror(y, x);
- project(0, 2, y, x, p_ptr->lev / 2 + 5, GF_SHARDS,
- (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP | PROJECT_NO_HANGEKI), -1);
- }
- }
- }
+ /* Explode all mirrors */
+ remove_all_mirrors(TRUE);
}
else if (command == -4)
{
p_ptr->csp = p_ptr->msp;
p_ptr->csp_frac = 0;
}
+
+ /* Redraw mana */
+ p_ptr->redraw |= (PR_MANA);
}
else
{
}
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;
+ ratial_stop_mouth();
#ifdef JP
msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£",((type == GF_NETHER) ? "ÃϹö" : "²Ð±ê"));
#else
x = px + ddx[dir];
c_ptr = &cave[y][x];
+ ratial_stop_mouth();
+
if (!c_ptr->m_idx)
{
#ifdef JP
q_ptr = &forge;
/* Create the food ration */
- object_prep(q_ptr, 21);
+ object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
/* Drop the object from heaven */
(void)drop_near(q_ptr, -1, py, px);
msg_print("Blink!");
#endif
- teleport_player(10);
+ teleport_player(10, 0L);
break;
case RACE_HALF_ORC:
case RACE_HALF_GIANT:
if (!get_aim_dir(&dir)) return FALSE;
-#ifdef JP
- msg_print("ÀФÎÊɤòᤤĤ±¤¿¡£");
-#else
- msg_print("You bash at a stone wall.");
-#endif
-
- (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;
+ ratial_stop_mouth();
#ifdef JP
msg_print("¿È¤ÎÌÓ¤â¤è¤À¤Ä¶«¤ÓÀ¼¤ò¾å¤²¤¿¡ª");
#else
case RACE_KLACKON:
if (!get_aim_dir(&dir)) return FALSE;
+ ratial_stop_mouth();
#ifdef JP
msg_print("»À¤òÅǤ¤¤¿¡£");
#else
}
}
+ ratial_stop_mouth();
+
#ifdef JP
msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", Type_desc);
#else
x = px + ddx[dir];
c_ptr = &cave[y][x];
+ ratial_stop_mouth();
+
if (!c_ptr->m_idx)
{
#ifdef JP
case RACE_SPECTRE:
if (!get_aim_dir(&dir)) return FALSE;
+ 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;
+ 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;
#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;
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
{
if (racial_cost)
{
- if (racial_use_hp)
+ int actual_racial_cost = racial_cost / 2 + randint1(racial_cost / 2);
+
+ /* If mana is not enough, player consumes hit point! */
+ if (p_ptr->csp < actual_racial_cost)
{
+ actual_racial_cost -= p_ptr->csp;
+ p_ptr->csp = 0;
#ifdef JP
- take_hit(DAMAGE_USELIFE, (racial_cost / 2) + randint1(racial_cost / 2),
- "²áÅ٤ν¸Ãæ", -1);
+ take_hit(DAMAGE_USELIFE, actual_racial_cost, "²áÅ٤ν¸Ãæ", -1);
#else
- take_hit(DAMAGE_USELIFE, (racial_cost / 2) + randint1(racial_cost / 2),
- "concentrating too hard", -1);
+ take_hit(DAMAGE_USELIFE, actual_racial_cost, "concentrating too hard", -1);
#endif
}
- else
- {
- p_ptr->csp -= (racial_cost / 2) + randint1(racial_cost / 2);
- }
+ else p_ptr->csp -= actual_racial_cost;
/* Redraw mana and hp */
p_ptr->redraw |= (PR_HP | PR_MANA);