OSDN Git Service

los()やplayer_has_los_*()の使用に関する変更. 主に透明な壁の作成を想定
[hengband/hengband.git] / src / cmd6.c
index f85c223..e085d19 100644 (file)
@@ -523,12 +523,12 @@ msg_print("
        else if ((prace_is_(RACE_DEMON) ||
                 (mimic_info[p_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON)) &&
                 (o_ptr->tval == TV_CORPSE && o_ptr->sval == SV_CORPSE &&
-                 strchr("pht", r_info[o_ptr->pval].d_char)))
+                 my_strchr("pht", r_info[o_ptr->pval].d_char)))
        {
                /* Drain vitality of humanoids */
                char o_name[MAX_NLEN];
 
-               object_desc(o_name, o_ptr, FALSE, 0);
+               object_desc(o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY));
 
 #ifdef JP
                msg_format("%s¤Ïdz¤¨¾å¤ê³¥¤Ë¤Ê¤Ã¤¿¡£ÀºÎϤòµÛ¼ý¤·¤¿µ¤¤¬¤¹¤ë¡£", o_name);
@@ -657,7 +657,7 @@ static bool item_tester_hook_eatable(object_type *o_ptr)
        {
                if (o_ptr->tval == TV_CORPSE &&
                    o_ptr->sval == SV_CORPSE &&
-                   strchr("pht", r_info[o_ptr->pval].d_char))
+                   my_strchr("pht", r_info[o_ptr->pval].d_char))
                        return TRUE;
        }
 
@@ -1172,7 +1172,7 @@ msg_print("
 #ifdef JP
                                msg_print("Ƭ¤¬¥Ï¥Ã¥­¥ê¤È¤·¤¿¡£");
 #else
-                               msg_print("Your feel your head clear.");
+                               msg_print("You feel your head clear.");
 #endif
                                p_ptr->window |= (PW_PLAYER);
                                ident = TRUE;
@@ -1184,7 +1184,7 @@ msg_print("
 #ifdef JP
                                msg_print("Ƭ¤¬¥Ï¥Ã¥­¥ê¤È¤·¤¿¡£");
 #else
-                               msg_print("Your feel your head clear.");
+                               msg_print("You feel your head clear.");
 #endif
 
                                p_ptr->redraw |= (PR_MANA);
@@ -2162,7 +2162,7 @@ msg_print("
 #endif
                used_up = FALSE;
        }
-       else if (o_ptr->tval==TV_PARCHEMENT)
+       else if (o_ptr->tval==TV_PARCHMENT)
        {
                cptr q;
                char o_name[MAX_NLEN];
@@ -2174,7 +2174,7 @@ msg_print("
                q=format("book-%d_jp.txt",o_ptr->sval);
 
                /* Display object description */
-               object_desc(o_name, o_ptr, TRUE, 0);
+               object_desc(o_name, o_ptr, OD_NAME_ONLY);
 
                /* Build the filename */
                path_build(buf, sizeof(buf), ANGBAND_DIR_FILE, q);
@@ -2244,7 +2244,7 @@ msg_print("
  */
 static bool item_tester_hook_readable(object_type *o_ptr)
 {
-       if ((o_ptr->tval==TV_SCROLL) || (o_ptr->tval==TV_PARCHEMENT) || (o_ptr->name1 == ART_GHB) || (o_ptr->name1 == ART_POWER)) return (TRUE);
+       if ((o_ptr->tval==TV_SCROLL) || (o_ptr->tval==TV_PARCHMENT) || (o_ptr->name1 == ART_GHB) || (o_ptr->name1 == ART_POWER)) return (TRUE);
 
        /* Assume not */
        return (FALSE);
@@ -2431,7 +2431,7 @@ static int staff_effect(int sval, bool *use_charge, bool magic, bool known)
                                {
                                        scatter(&y, &x, py, px, 4, 0);
 
-                                       if (!cave_floor_bold(y, x)) continue;
+                                       if (!have_flag(f_flags_bold(y, x), FF_PROJECT)) continue;
 
                                        if (!player_bold(y, x)) break;
                                }
@@ -2533,7 +2533,7 @@ static int staff_effect(int sval, bool *use_charge, bool magic, bool known)
 #ifdef JP
                                msg_print("Ƭ¤¬¥Ï¥Ã¥­¥ê¤È¤·¤¿¡£");
 #else
-                               msg_print("Your feel your head clear.");
+                               msg_print("You feel your head clear.");
 #endif
 
                                p_ptr->redraw |= (PR_MANA);
@@ -4401,7 +4401,7 @@ msg_print("
                                        {
                                                scatter(&y, &x, py, px, 4, 0);
 
-                                               if (!cave_floor_bold(y, x)) continue;
+                                               if (!have_flag(f_flags_bold(y, x), FF_PROJECT)) continue;
 
                                                if (!player_bold(y, x)) break;
                                        }
@@ -5104,7 +5104,7 @@ msg_print("
                                detect_all(DETECT_RAD_DEFAULT);
                                probing();
                                identify_fully(FALSE);
-                               o_ptr->timeout = 1000;
+                               o_ptr->timeout = 100;
                                break;
                        }
 
@@ -5282,7 +5282,11 @@ msg_print("
 
                        case ART_BOROMIR:
                        {
+#ifdef JP
+                               msg_print("¤¢¤Ê¤¿¤ÏÎ϶¯¤¤ÆÍÉ÷¤ò¿á¤­ÌĤ餷¤¿¡£¼þ°Ï¤ÎŨ¤¬¿Ì¤¨¾å¤Ã¤Æ¤¤¤ë!");
+#else
                                msg_print("You wind a mighty blast; your enemies tremble!");
+#endif
                                (void)turn_monsters((3 * p_ptr->lev / 2) + 10);
                                o_ptr->timeout = randint0(40) + 40;
                                break;
@@ -5403,10 +5407,10 @@ msg_print("
                                y = py+ddy[dir];
                                x = px+ddx[dir];
                                tsuri_dir = dir;
-                               if (!(cave[y][x].feat == FEAT_DEEP_WATER) && !(cave[y][x].feat == FEAT_SHAL_WATER))
+                               if (!have_flag(f_flags_bold(y, x), FF_WATER))
                                {
 #ifdef JP
-                                       msg_print("¤½¤³¤ÏΦÃϤÀ¡£");
+                                       msg_print("¤½¤³¤Ï¿åÊդǤϤʤ¤¡£");
 #else
                                        msg_print("There is no fishing place.");
 #endif
@@ -5521,6 +5525,7 @@ msg_print("
                                                if (!m_ptr->r_idx) continue;
                                                if (!((m_ptr->r_idx == MON_SUKE) || (m_ptr->r_idx == MON_KAKU))) continue;
                                                if (!los(m_ptr->fy, m_ptr->fx, py, px)) continue;
+                                               if (!projectable(m_ptr->fy, m_ptr->fx, py, px)) continue;
                                                count++;
                                                break;
                                        }
@@ -5766,9 +5771,42 @@ msg_print("
 #else
                                msg_print("Your pendant glows pale...");
 #endif
-                               if (!get_aim_dir(&dir)) return;
-                               fire_ball(GF_MANA, dir, 200, 4);
-                               o_ptr->timeout = randint0(150) + 150;
+                               if (p_ptr->pclass == CLASS_MAGIC_EATER)
+                               {
+                                       int i;
+                                       for (i = 0; i < EATER_EXT*2; i++)
+                                       {
+                                               p_ptr->magic_num1[i] += (p_ptr->magic_num2[i] < 10) ? EATER_CHARGE * 3 : p_ptr->magic_num2[i]*EATER_CHARGE/3;
+                                               if (p_ptr->magic_num1[i] > p_ptr->magic_num2[i]*EATER_CHARGE) p_ptr->magic_num1[i] = p_ptr->magic_num2[i]*EATER_CHARGE;
+                                       }
+                                       for (; i < EATER_EXT*3; i++)
+                                       {
+                                               int k_idx = lookup_kind(TV_ROD, i-EATER_EXT*2);
+                                               p_ptr->magic_num1[i] -= ((p_ptr->magic_num2[i] < 10) ? EATER_ROD_CHARGE*3 : p_ptr->magic_num2[i]*EATER_ROD_CHARGE/3)*k_info[k_idx].pval;
+                                               if (p_ptr->magic_num1[i] < 0) p_ptr->magic_num1[i] = 0;
+                                       }
+#ifdef JP
+                                       msg_print("Ƭ¤¬¥Ï¥Ã¥­¥ê¤È¤·¤¿¡£");
+#else
+                                       msg_print("You feel your head clear.");
+#endif
+                                       p_ptr->window |= (PW_PLAYER);
+                               }
+                               else if (p_ptr->csp < p_ptr->msp)
+                               {
+                                       p_ptr->csp = p_ptr->msp;
+                                       p_ptr->csp_frac = 0;
+#ifdef JP
+                                       msg_print("Ƭ¤¬¥Ï¥Ã¥­¥ê¤È¤·¤¿¡£");
+#else
+                                       msg_print("You feel your head clear.");
+#endif
+
+                                       p_ptr->redraw |= (PR_MANA);
+                                       p_ptr->window |= (PW_PLAYER);
+                                       p_ptr->window |= (PW_SPELL);
+                               }
+                               o_ptr->timeout = 777;
                                break;
                        }
                }
@@ -6436,7 +6474,7 @@ msg_print("
                {
                        bool success = FALSE;
                        if (!get_rep_dir2(&dir)) return;
-                       if (cave_floor_bold(py+ddy[dir],px+ddx[dir]))
+                       if (monster_can_enter(py + ddy[dir], px + ddx[dir], &r_info[o_ptr->pval], 0))
                        {
                                if (place_monster_aux(0, py + ddy[dir], px + ddx[dir], o_ptr->pval, (PM_FORCE_PET | PM_NO_KAGE)))
                                {
@@ -6966,11 +7004,7 @@ static int select_magic_eater(bool only_browse)
                                {
                                        chance -= 3 * (p_ptr->lev - level);
                                }
-                               chance += p_ptr->to_m_chance;
-                               if (p_ptr->heavy_spell) chance += 20;
-                               if(p_ptr->dec_mana && p_ptr->easy_spell) chance-=4;
-                               else if (p_ptr->easy_spell) chance-=3;
-                               else if (p_ptr->dec_mana) chance-=2;
+                               chance = mod_spell_chance_1(chance);
                                chance = MAX(chance, adj_mag_fail[p_ptr->stat_ind[mp_ptr->spell_stat]]);
                                /* Stunning makes spells harder */
                                if (p_ptr->stun > 50) chance += 25;
@@ -6978,8 +7012,7 @@ static int select_magic_eater(bool only_browse)
 
                                if (chance > 95) chance = 95;
 
-                               if(p_ptr->dec_mana) chance--;
-                               if (p_ptr->heavy_spell) chance += 5;
+                               chance = mod_spell_chance_2(chance);
 
                                col = TERM_WHITE;
 
@@ -7270,11 +7303,7 @@ msg_print("
        {
                chance -= 3 * (p_ptr->lev - level);
        }
-       chance += p_ptr->to_m_chance;
-       if (p_ptr->heavy_spell) chance += 20;
-       if(p_ptr->dec_mana && p_ptr->easy_spell) chance-=4;
-       else if (p_ptr->easy_spell) chance-=3;
-       else if (p_ptr->dec_mana) chance-=2;
+       chance = mod_spell_chance_1(chance);
        chance = MAX(chance, adj_mag_fail[p_ptr->stat_ind[mp_ptr->spell_stat]]);
        /* Stunning makes spells harder */
        if (p_ptr->stun > 50) chance += 25;
@@ -7282,8 +7311,7 @@ msg_print("
 
        if (chance > 95) chance = 95;
 
-       if(p_ptr->dec_mana) chance--;
-       if (p_ptr->heavy_spell) chance += 5;
+       chance = mod_spell_chance_2(chance);
 
        if (randint0(100) < chance)
        {