OSDN Git Service

Use const pointer for many times referred quest[*]
[hengband/hengband.git] / src / mind.c
index 8957753..7e97b9d 100644 (file)
@@ -295,128 +295,128 @@ void mindcraft_info(char *p, int use_mind, int power)
        cptr s_dur = "dur ";
        cptr s_range = "range ";
 #endif
-  int plev = p_ptr->lev;
+       int plev = p_ptr->lev;
 
-  strcpy(p, "");
+       strcpy(p, "");
 
-  switch (use_mind)
-    {
-    case MIND_MINDCRAFTER:
-      switch (power)
+       switch (use_mind)
        {
-       case 0:  break;
-       case 1:  sprintf(p, " %s%dd%d", s_dam, 3 + ((plev - 1) / 4), 3 + plev/15); break;
-       case 2:  sprintf(p, " %s10", s_range); break;
-       case 3:  sprintf(p, " %s%d", s_range, plev * 5);  break;
-       case 4:  break;
-       case 5: sprintf(p, " %s%dd8", s_dam, 8 + ((plev - 5) / 4));  break;
-       case 6:  sprintf(p, " %s%d", s_dur, plev);  break;
-       case 7:  break;
-       case 8:  sprintf(p, (plev < 25 ? " %s%d" : " %sd%d"), s_dam, (plev < 25 ? plev * 3 / 2 : plev * ((plev - 5) / 10 + 1))); break;
-       case 9:  sprintf(p, " %s10+d%d", s_dur, plev * 3 / 2);  break;
+       case MIND_MINDCRAFTER:
+               switch (power)
+               {
+               case 0:  break;
+               case 1:  sprintf(p, " %s%dd%d", s_dam, 3 + ((plev - 1) / 4), 3 + plev/15); break;
+               case 2:  sprintf(p, " %s10", s_range); break;
+               case 3:  sprintf(p, " %s%d", s_range, plev * 5);  break;
+               case 4:  break;
+               case 5: sprintf(p, " %s%dd8", s_dam, 8 + ((plev - 5) / 4));  break;
+               case 6:  sprintf(p, " %s%d", s_dur, plev);  break;
+               case 7:  break;
+               case 8:  sprintf(p, (plev < 25 ? " %s%d" : " %sd%d"), s_dam, (plev < 25 ? plev * 3 / 2 : plev * ((plev - 5) / 10 + 1))); break;
+               case 9:  sprintf(p, " %s10+d%d", s_dur, plev * 3 / 2);  break;
 #ifdef JP
-       case 10: sprintf(p, " ºÇÂç½ÅÎÌ:%d.%dkg", lbtokg1(plev * 15),lbtokg2(plev * 15));  break;
+               case 10: sprintf(p, " ºÇÂç½ÅÎÌ:%d.%dkg", lbtokg1(plev * 15),lbtokg2(plev * 15));  break;
 #else
-       case 10: sprintf(p, " max wgt %d", plev * 15);  break;
+               case 10: sprintf(p, " max wgt %d", plev * 15);  break;
 #endif
-       case 11: sprintf(p, " %s%dd6", s_dam, plev / 2);  break;
-       case 12: sprintf(p, " %sd%d+%d", s_dam, plev * 3, plev * 3); break;
+               case 11: sprintf(p, " %s%dd6", s_dam, plev / 2);  break;
+               case 12: sprintf(p, " %sd%d+%d", s_dam, plev * 3, plev * 3); break;
 #ifdef JP
-       case 13: sprintf(p, " ¹ÔÆ°:%ld²ó", (p_ptr->csp + 100-p_ptr->energy_need - 50)/100); break;
+               case 13: sprintf(p, " ¹ÔÆ°:%ld²ó", (long int)(p_ptr->csp + 100-p_ptr->energy_need - 50)/100); break;
 #else
-       case 13: sprintf(p, " %ld acts.", (p_ptr->csp + 100-p_ptr->energy_need - 50)/100); break;
+               case 13: sprintf(p, " %ld acts.", (p_ptr->csp + 100-p_ptr->energy_need - 50)/100); break;
 #endif
-       }
-      break;
-    case MIND_KI:
-      {
-       int boost = p_ptr->magic_num1[0];
+               }
+               break;
+       case MIND_KI:
+       {
+               int boost = p_ptr->magic_num1[0];
 
-       if (heavy_armor()) boost /= 2;
+               if (heavy_armor()) boost /= 2;
 
-       switch (power)
-         {
-         case 0:  sprintf(p, " %s%dd4", s_dam, 3 + ((plev - 1) / 5) + boost / 12); break;
-         case 1:  break;
-         case 2:  sprintf(p, " %s%d+d30", s_dur, 30 + boost / 5); break;
-         case 3:  sprintf(p, " %s%dd5", s_dam, 5 + ((plev - 1) / 5) + boost / 10); break;
-         case 4:  sprintf(p, " %s%d+d20", s_dur, 20 + boost / 5); break;
-         case 5:  break;
-         case 6:  sprintf(p, " %s%d+d%d", s_dur, 15 + boost / 7, plev / 2); break;
-         case 7:  sprintf(p, " %s%dd8", s_dam, 8 + ((plev - 5) / 5) + boost / 12); break;
-         case 8:  sprintf(p, " %s10d6+%d", s_dam, plev * 3 / 2 + boost * 3 / 5); break;
-         case 9:  break;
+               switch (power)
+               {
+               case 0:  sprintf(p, " %s%dd4", s_dam, 3 + ((plev - 1) / 5) + boost / 12); break;
+               case 1:  break;
+               case 2:  sprintf(p, " %s%d+d30", s_dur, 30 + boost / 5); break;
+               case 3:  sprintf(p, " %s%dd5", s_dam, 5 + ((plev - 1) / 5) + boost / 10); break;
+               case 4:  sprintf(p, " %s%d+d20", s_dur, 20 + boost / 5); break;
+               case 5:  break;
+               case 6:  sprintf(p, " %s%d+d%d", s_dur, 15 + boost / 7, plev / 2); break;
+               case 7:  sprintf(p, " %s%dd8", s_dam, 8 + ((plev - 5) / 5) + boost / 12); break;
+               case 8:  sprintf(p, " %s10d6+%d", s_dam, plev * 3 / 2 + boost * 3 / 5); break;
+               case 9:  break;
 #ifdef JP
-         case 10: sprintf(p, " ºÇÂç%dɤ", 1+boost/100); break;
+               case 10: sprintf(p, " ºÇÂç%dÂÎ", 1+boost/100); break;
 #else
-         case 10: sprintf(p, " max %d", 1+boost/100); break;
+               case 10: sprintf(p, " max %d", 1+boost/100); break;
 #endif
-         case 11: sprintf(p, " %s%d", s_dam, 100 + plev + boost); break;
-         case 12: sprintf(p, " %s%dd15", s_dam, 10 + plev / 2 + boost * 3 / 10); break;
+               case 11: sprintf(p, " %s%d", s_dam, 100 + plev + boost); break;
+               case 12: sprintf(p, " %s%dd15", s_dam, 10 + plev / 2 + boost * 3 / 10); break;
 #ifdef JP
-         case 13: sprintf(p, " ¹ÔÆ°:%d+d16²ó", 16+boost/20); break;
+               case 13: sprintf(p, " ¹ÔÆ°:%d+d16²ó", 16+boost/20); break;
 #else
-         case 13: sprintf(p, " %d+d16 acts", 16+boost/20); break;
+               case 13: sprintf(p, " %d+d16 acts", 16+boost/20); break;
 #endif
-         }
-       break;
-      case MIND_MIRROR_MASTER:
+               }
+               break;
+       }
+       case MIND_MIRROR_MASTER:
        {
-         switch (power)
-           {
-           case 0:  break;
-           case 1:  break;
-           case 2:  sprintf(p, " %s%dd4", s_dam,  3 + ((plev - 1) / 5) ); break;
-           case 3:  sprintf(p, " %s10", s_range); break;
-           case 4:  break;
-           case 5:  sprintf(p, " %s%d", s_range, plev *5); break;
-           case 6:  sprintf(p, " %s20+d20", s_dur);  break;
-           case 7:  break;
-           case 8:  sprintf(p, " %s%dd8", s_dam, 8+((plev -5)/4) ); break;
-           case 9:  break;
-           case 10: sprintf(p, " %s%dd8", s_dam, 11+(plev-5)/4 ); break;
-           case 11: break;
-           case 12: sprintf(p, " %s20+d20", s_dur);  break;
-           case 13: sprintf(p, " %s150+d%d", s_dam, plev*2 ); break;
-           case 14: break;
-           case 15: break;
-           case 16: sprintf(p, " %s%d", s_range, plev/2 +10); break;
-           case 17: break;
-           case 18: sprintf(p, " %s6+d6", s_dur);  break;
-           case 19: sprintf(p, " %s%d", s_dam, plev*11+5 ); break;
-           case 20: sprintf(p, " %s4+d4", s_dur);  break;
-           }
-         break;
+               switch (power)
+               {
+               case 0:  break;
+               case 1:  break;
+               case 2:  sprintf(p, " %s%dd4", s_dam,  3 + ((plev - 1) / 5) ); break;
+               case 3:  sprintf(p, " %s10", s_range); break;
+               case 4:  break;
+               case 5:  sprintf(p, " %s%d", s_range, plev *5); break;
+               case 6:  sprintf(p, " %s20+d20", s_dur);  break;
+               case 7:  break;
+               case 8:  sprintf(p, " %s%dd8", s_dam, 8+((plev -5)/4) ); break;
+               case 9:  break;
+               case 10: sprintf(p, " %s%dd8", s_dam, 11+(plev-5)/4 ); break;
+               case 11: break;
+               case 12: sprintf(p, " %s20+d20", s_dur);  break;
+               case 13: sprintf(p, " %s150+d%d", s_dam, plev*2 ); break;
+               case 14: break;
+               case 15: break;
+               case 16: sprintf(p, " %s%d", s_range, plev/2 +10); break;
+               case 17: break;
+               case 18: sprintf(p, " %s6+d6", s_dur);  break;
+               case 19: sprintf(p, " %s%d", s_dam, plev*11+5 ); break;
+               case 20: sprintf(p, " %s4+d4", s_dur);  break;
+               }
+               break;
        }
-      case MIND_NINJUTSU:
+       case MIND_NINJUTSU:
        {
-         switch (power)
-           {
-           case 0:  break;
-           case 1:  break;
-           case 2:  sprintf(p, " %s10", s_range); break;
-           case 3:  break;
-           case 4:  sprintf(p, " %s%d", s_range , plev *5); break;
-           case 5:  sprintf(p, " %s30", s_range); break;
-           case 6:  break;
-           case 7:  break;
-           case 8:  sprintf(p, " %s20+d20", s_dur);  break;
-           case 9:  sprintf(p, " %s%d", s_dam, (50+plev)/2 ); break;
-           case 10: break;
-           case 11: break;
-           case 12: break;
-           case 13: break;
-           case 14: break;
-           case 15: break;
-           case 16: sprintf(p, " %s%d+d%d", s_dur, plev/2, plev/2);  break;
-           case 17: sprintf(p, " %s%d*3", s_dam, (75+plev*2/3)/2 ); break;
-           case 18: sprintf(p, " %s%dd10", s_dam, 6+plev/8 ); break;
-           case 19: sprintf(p, " %s6+d6", s_dur);  break;
-           }
-         break;
+               switch (power)
+               {
+               case 0:  break;
+               case 1:  break;
+               case 2:  sprintf(p, " %s10", s_range); break;
+               case 3:  break;
+               case 4:  sprintf(p, " %s%d", s_range , plev *5); break;
+               case 5:  sprintf(p, " %s30", s_range); break;
+               case 6:  break;
+               case 7:  break;
+               case 8:  sprintf(p, " %s20+d20", s_dur);  break;
+               case 9:  sprintf(p, " %s%d", s_dam, (50+plev)/2 ); break;
+               case 10: break;
+               case 11: break;
+               case 12: break;
+               case 13: break;
+               case 14: break;
+               case 15: break;
+               case 16: sprintf(p, " %s%d+d%d", s_dur, plev/2, plev/2);  break;
+               case 17: sprintf(p, " %s%d*3", s_dam, (75+plev*2/3)/2 ); break;
+               case 18: sprintf(p, " %s%dd10", s_dam, 6+plev/8 ); break;
+               case 19: sprintf(p, " %s6+d6", s_dur);  break;
+               }
+               break;
+       }
        }
-      }
-    }
 }
 
   /*
@@ -889,11 +889,11 @@ if (!b) msg_print("
                break;
        case 2:
                /* Minor displace */
-               teleport_player(10, FALSE);
+               teleport_player(10, 0L);
                break;
        case 3:
                /* Major displace */
-               teleport_player(plev * 5, FALSE);
+               teleport_player(plev * 5, 0L);
                break;
        case 4:
                /* Domination */
@@ -1056,7 +1056,7 @@ static bool cast_force_spell(int spell)
                (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
                break;
        case 2:
-               set_tim_ffall(randint1(30) + 30 + boost / 5, FALSE);
+               set_tim_levitation(randint1(30) + 30 + boost / 5, FALSE);
                break;
        case 3:
                project_length = plev / 8 + 3;
@@ -1166,49 +1166,14 @@ static bool cast_force_spell(int spell)
                break;
        case 9:
        {
-               monster_type *m_ptr;
-               char m_name[80];
+               int m_idx;
 
                if (!target_set(TARGET_KILL)) return FALSE;
-               if (!cave[target_row][target_col].m_idx) break;
-               if (!los(py, px, target_row, target_col)) break;
+               m_idx = cave[target_row][target_col].m_idx;
+               if (!m_idx) break;
+               if (!player_has_los_bold(target_row, target_col)) break;
                if (!projectable(py, px, target_row, target_col)) break;
-               m_ptr = &m_list[cave[target_row][target_col].m_idx];
-               monster_desc(m_name, m_ptr, 0);
-               if (m_ptr->invulner)
-               {
-                       m_ptr->invulner = 0;
-                       if (m_ptr->ml)
-                       {
-#ifdef JP
-                               msg_format("%s¤Ï¤â¤¦ÌµÅ¨¤Ç¤Ï¤Ê¤¤¡£", m_name);
-#else
-                               msg_format("%^s is no longer invulnerable.", m_name);
-#endif
-                               p_ptr->redraw |= (PR_HEALTH);
-                               if (p_ptr->riding == cave[target_row][target_col].m_idx) p_ptr->redraw |= (PR_UHEALTH);
-                       }
-                       m_ptr->energy_need += ENERGY_NEED();
-               }
-               if (m_ptr->fast)
-               {
-                       m_ptr->fast = 0;
-#ifdef JP
-                       if (m_ptr->ml) msg_format("%s¤Ï¤â¤¦²Ã®¤µ¤ì¤Æ¤¤¤Ê¤¤¡£", m_name);
-#else
-                       if (m_ptr->ml) msg_format("%^s is no longer fast.", m_name);
-#endif
-               }
-               if (m_ptr->slow)
-               {
-                       m_ptr->slow = 0;
-#ifdef JP
-                       if (m_ptr->ml) msg_format("%s¤Ï¤â¤¦¸ºÂ®¤µ¤ì¤Æ¤¤¤Ê¤¤¡£", m_name);
-#else
-                       if (m_ptr->ml) msg_format("%^s is no longer slow.", m_name);
-#endif
-               }
-
+               dispel_monster_status(m_idx);
                break;
        }
        case 10:
@@ -1325,7 +1290,7 @@ msg_format("There are too many mirrors to control!");
          break;
        /* warped mirror */
        case 3:
-         teleport_player(10, FALSE);
+         teleport_player(10, 0L);
          break;
        /* mirror of light */
        case 4:
@@ -1333,7 +1298,7 @@ msg_format("There are too many mirrors to control!");
          break;
        /* mirror of wandering */
        case 5:
-         teleport_player(plev * 5, FALSE);
+         teleport_player(plev * 5, 0L);
          break;
        /* robe of dust */
        case 6:
@@ -1384,7 +1349,7 @@ msg_format("There are too many mirrors to control!");
        /* illusion light */
        case 14:
          tmp = is_mirror_grid(&cave[py][px]) ? 4 : 3;
-         slow_monsters();
+         slow_monsters(plev);
          stun_monsters(plev*tmp);
          confuse_monsters(plev*tmp);
          turn_monsters(plev*tmp);
@@ -1531,7 +1496,7 @@ static bool cast_berserk_spell(int spell)
                        m_ptr = &m_list[c_ptr->m_idx];
 
                        /* Hack -- attack monsters */
-                       if (c_ptr->m_idx && (m_ptr->ml || have_flag(f_flags_bold(y, x), FF_PROJECT)))
+                       if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT)))
                                py_attack(y, x, 0);
                }
                break;
@@ -1584,9 +1549,7 @@ static bool cast_ninja_spell(int spell)
                break;
        case 2:
        {
-               teleport_player(10, FALSE);
-               if (cave[py][px].info & (CAVE_GLOW | CAVE_MNLT)) set_superstealth(FALSE);
-               else if (p_ptr->cur_lite <= 0) set_superstealth(TRUE);
+               teleport_player(10, 0L);
                break;
        }
        case 3:
@@ -1606,9 +1569,7 @@ static bool cast_ninja_spell(int spell)
        }
        case 4:
        {
-               teleport_player(p_ptr->lev * 5, FALSE);
-               if (cave[py][px].info & (CAVE_GLOW | CAVE_MNLT)) set_superstealth(FALSE);
-               else if (p_ptr->cur_lite <= 0) set_superstealth(TRUE);
+               teleport_player(p_ptr->lev * 5, 0L);
                break;
        }
        case 5:
@@ -1627,9 +1588,7 @@ msg_print("
 #endif
                        else
                        {
-                               teleport_player(30, FALSE);
-                               if (cave[py][px].info & (CAVE_GLOW | CAVE_MNLT)) set_superstealth(FALSE);
-                               else if (p_ptr->cur_lite <= 0) set_superstealth(TRUE);
+                               teleport_player(30, 0L);
                        }
                }
                else
@@ -1653,13 +1612,11 @@ msg_print("
        case 7:
                return ident_spell(FALSE);
        case 8:
-               set_tim_ffall(randint1(20) + 20, FALSE);
+               set_tim_levitation(randint1(20) + 20, FALSE);
                break;
        case 9:
                fire_ball(GF_FIRE, 0, 50+plev, plev/10+2);
-               teleport_player(30, FALSE);
-               if (cave[py][px].info & (CAVE_GLOW | CAVE_MNLT)) set_superstealth(FALSE);
-               else if (p_ptr->cur_lite <= 0) set_superstealth(TRUE);
+               teleport_player(30, 0L);
                set_oppose_fire(plev, FALSE);
                break;
        case 10:
@@ -1707,6 +1664,7 @@ msg_print("
                if (!target_set(TARGET_KILL)) return FALSE;
                m_idx = cave[target_row][target_col].m_idx;
                if (!m_idx) break;
+               if (m_idx == p_ptr->riding) break;
                if (!player_has_los_bold(target_row, target_col)) break;
                if (!projectable(py, px, target_row, target_col)) break;
                m_ptr = &m_list[m_idx];
@@ -1744,7 +1702,7 @@ msg_print("
                m_ptr->fx = tx;
 
                /* Wake the monster up */
-               m_ptr->csleep = 0;
+               (void)set_monster_csleep(m_idx, 0);
 
                /* Update the monster (new location) */
                update_mon(m_idx, TRUE);
@@ -1758,6 +1716,15 @@ msg_print("
                if (r_info[m_ptr->r_idx].flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))
                        p_ptr->update |= (PU_MON_LITE);
 
+               if (m_ptr->ml)
+               {
+                       /* Auto-Recall if possible and visible */
+                       if (!p_ptr->image) monster_race_track(m_ptr->ap_r_idx);
+
+                       /* Track a new monster */
+                       health_track(m_idx);
+               }
+
                break;
        }
        case 13:
@@ -1786,9 +1753,7 @@ msg_print("
                fire_ball(GF_POIS, 0, 75+plev*2/3, plev/5+2);
                fire_ball(GF_OLD_DRAIN, 0, 75+plev*2/3, plev/5+2);
                fire_ball(GF_CONFUSION, 0, 75+plev*2/3, plev/5+2);
-               teleport_player(30, FALSE);
-               if (cave[py][px].info & (CAVE_GLOW | CAVE_MNLT)) set_superstealth(FALSE);
-               else if (p_ptr->cur_lite <= 0) set_superstealth(TRUE);
+               teleport_player(30, 0L);
                break;
        case 18:
        {
@@ -2047,7 +2012,7 @@ msg_format("%s
                                        msg_print("Your mind unleashes its power in an uncontrollable storm!");
 #endif
 
-                                       project(1, 2 + plev / 10, py, px, plev * 2,
+                                       project(PROJECT_WHO_UNCTRL_POWER, 2 + plev / 10, py, px, plev * 2,
                                                GF_MANA, PROJECT_JUMP | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM, -1);
                                        p_ptr->csp = MAX(0, p_ptr->csp - plev * MAX(1, plev / 10));
                                }
@@ -2064,7 +2029,7 @@ msg_print("
 #else
                                        msg_print("Weird visions seem to dance before your eyes...");
 #endif
-                                       teleport_player(10, TRUE);
+                                       teleport_player(10, TELEPORT_PASSIVE);
                                }
                                else if (b < 96)
                                {
@@ -2085,7 +2050,7 @@ msg_format("%s
                                        msg_print("Your mind unleashes its power in an uncontrollable storm!");
 #endif
 
-                                       project(1, 2 + plev / 10, py, px, plev * 2,
+                                       project(PROJECT_WHO_UNCTRL_POWER, 2 + plev / 10, py, px, plev * 2,
                                                GF_MANA, PROJECT_JUMP | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM, -1);
                                        p_ptr->csp = MAX(0, p_ptr->csp - plev * MAX(1, plev / 10));
                                }