OSDN Git Service

MP操作が行われた後に再描画が必要な部分の修正.
[hengband/hengband.git] / src / racial.c
index dfc6da8..6308d93 100644 (file)
@@ -124,7 +124,7 @@ static bool do_cmd_archer(void)
                        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);
@@ -137,7 +137,7 @@ static bool do_cmd_archer(void)
 #endif
 
                        (void)wall_to_mud(dir);
-                       p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW);
+                       p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MONSTERS | PU_MON_LITE);
                        p_ptr->window |= (PW_OVERHEAD);
                }
                else
@@ -185,10 +185,10 @@ static bool do_cmd_archer(void)
 
                /* 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;
 
@@ -242,17 +242,17 @@ static bool do_cmd_archer(void)
                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;
 
@@ -728,7 +728,6 @@ static int racial_chance(power_desc_type *pd_ptr)
 
 
 static int  racial_cost;
-static bool racial_use_hp;
 
 /*
  * Note: return value indicates that we have succesfully used the power
@@ -739,12 +738,12 @@ static int racial_aux(power_desc_type *pd_ptr)
        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)
@@ -773,7 +772,7 @@ static int racial_aux(power_desc_type *pd_ptr)
        }
 
        /* Risk death? */
-       else if (racial_use_hp && (p_ptr->chp < racial_cost))
+       else if (p_ptr->chp < use_hp)
        {
 #ifdef JP
                if (!get_check("ËÜÅö¤Ëº£¤Î¿ê¼å¤·¤¿¾õÂ֤Ǥ³¤ÎǽÎϤò»È¤¤¤Þ¤¹¤«¡©"))
@@ -838,7 +837,6 @@ static bool cmd_racial_power_aux(s32b command)
                {
                        int y = 0, x = 0, i;
                        cave_type       *c_ptr;
-                       monster_type    *m_ptr;
 
                        for (i = 0; i < 6; i++)
                        {
@@ -847,9 +845,6 @@ static bool cmd_racial_power_aux(s32b command)
                                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);
@@ -944,14 +939,14 @@ static bool cmd_racial_power_aux(s32b command)
                {
                        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;
@@ -967,7 +962,7 @@ static bool cmd_racial_power_aux(s32b command)
                        }
                        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);
@@ -979,6 +974,10 @@ static bool cmd_racial_power_aux(s32b command)
                                        msg_print("You failed to convert.");
 #endif
                        }
+
+                       /* Redraw mana and hp */
+                       p_ptr->redraw |= (PR_HP | PR_MANA);
+
                        break;
                }
                case CLASS_CHAOS_WARRIOR:
@@ -1076,6 +1075,9 @@ static bool cmd_racial_power_aux(s32b command)
                                p_ptr->csp = p_ptr->msp;
                                p_ptr->csp_frac = 0;
                        }
+
+                       /* Redraw mana */
+                       p_ptr->redraw |= (PR_MANA);
                        break;
                }
                case CLASS_TOURIST:
@@ -1173,6 +1175,9 @@ static bool cmd_racial_power_aux(s32b command)
                                        p_ptr->csp = max_csp;
                                        p_ptr->csp_frac = 0;
                                }
+
+                               /* Redraw mana */
+                               p_ptr->redraw |= (PR_MANA);
                        }
                        else if (command == -4)
                        {
@@ -1321,6 +1326,9 @@ static bool cmd_racial_power_aux(s32b command)
                                                p_ptr->csp = p_ptr->msp;
                                                p_ptr->csp_frac = 0;
                                        }
+
+                                       /* Redraw mana */
+                                       p_ptr->redraw |= (PR_MANA);
                                }
                                else
                                {
@@ -3781,20 +3789,20 @@ prt("                            Lv   MP 
        {
                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);