OSDN Git Service

#37907 [Fix] ものまね時の光の剣のダメージが0になる不具合を修正。 / Fix damage 0 when imitator uses PHY_SPEAR.
[hengband/hengband.git] / src / mane.c
index f6bd451..78e4bc3 100644 (file)
@@ -21,25 +21,18 @@ static int damage;
  * @param dam ものまねの威力
  * @return なし
  */
-static void mane_info(char *p, int power, int dam)
+static void mane_info(char *p, int power, HIT_POINT dam)
 {
        int plev = p_ptr->lev;
-#ifdef JP
-       cptr s_dam = "損傷:";
-       cptr s_dur = "期間:";
-       cptr s_range = "範囲:";
-       cptr s_heal = "回復:";
-#else
-       cptr s_dam = "dam ";
-       cptr s_dur = "dur ";
-       cptr s_range = "range ";
-       cptr s_heal = "heal ";
-#endif
+       cptr s_dam = _("損傷:", "dam ");
+       cptr s_dur = _("期間:", "dur ");
+       cptr s_range = _("範囲:", "range ");
+       cptr s_heal = _("回復:", "heal ");
 
        strcpy(p, "");
 
        if ((power > 2 && power < 41) || (power > 41 && power < 59) || (power == 75))
-               sprintf(p, " %s%d", s_dam, dam);
+               sprintf(p, " %s%d", s_dam, (int)dam);
        else
        {
                switch (power)
@@ -166,7 +159,7 @@ static int get_mane_power(int *sn, bool baigaesi)
                                        /* Reduce failure rate by INT/WIS adjustment */
                                        chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[spell.use_stat]] + adj_mag_stat[p_ptr->stat_ind[A_DEX]] - 2) / 2;
 
-                                       if (spell.manedam) chance = chance * p_ptr->mane_dam[i] / spell.manedam;
+                                       if (spell.manedam) chance = chance * (baigaesi ? p_ptr->mane_dam[i] * 2 : p_ptr->mane_dam[i]) / spell.manedam;
 
                                        chance += p_ptr->to_m_chance;
 
@@ -287,12 +280,15 @@ static bool use_mane(int spell)
        /* spell code */
        switch (spell)
        {
+
        case MS_SHRIEK:
                msg_print(_("かん高い金切り声をあげた。", "You make a high pitched shriek."));
                aggravate_monsters(0);
                break;
+
        case MS_XXX1:
                break;
+
        case MS_DISPEL:
        {
                MONSTER_IDX m_idx;
@@ -305,156 +301,165 @@ static bool use_mane(int spell)
                dispel_monster_status(m_idx);
                break;
        }
+
        case MS_ROCKET:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("ロケットを発射した。", "You fire a rocket."));
-               
                        fire_rocket(GF_ROCKET, dir, damage, 2);
                break;
+
        case MS_SHOOT:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("矢を放った。", "You fire an arrow."));
-               
                        fire_bolt(GF_ARROW, dir, damage);
                break;
+
        case MS_XXX2:
                break;
+
        case MS_XXX3:
                break;
+
        case MS_XXX4:
                break;
+
        case MS_BR_ACID:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("酸のブレスを吐いた。", "You breathe acid."));
-               
-                       fire_ball(GF_ACID, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_ACID, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_ELEC:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("稲妻のブレスを吐いた。", "You breathe lightning."));
-               
-                       fire_ball(GF_ELEC, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_ELEC, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_FIRE:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("火炎のブレスを吐いた。", "You breathe fire."));
-               
-                       fire_ball(GF_FIRE, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_FIRE, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_COLD:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("冷気のブレスを吐いた。", "You breathe frost."));
-               
-                       fire_ball(GF_COLD, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_COLD, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_POIS:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("ガスのブレスを吐いた。", "You breathe gas."));
-               
-                       fire_ball(GF_POIS, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_POIS, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_NETHER:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("地獄のブレスを吐いた。", "You breathe nether."));
-               
-                       fire_ball(GF_NETHER, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_NETHER, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_LITE:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("閃光のブレスを吐いた。", "You breathe light."));
-               
-                       fire_ball(GF_LITE, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_LITE, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_DARK:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("暗黒のブレスを吐いた。", "You breathe darkness."));
-               
-                       fire_ball(GF_DARK, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_DARK, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_CONF:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("混乱のブレスを吐いた。", "You breathe confusion."));
-               
-                       fire_ball(GF_CONFUSION, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_CONFUSION, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_SOUND:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("轟音のブレスを吐いた。", "You breathe sound."));
-               
-                       fire_ball(GF_SOUND, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_SOUND, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_CHAOS:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("カオスのブレスを吐いた。", "You breathe chaos."));
-               
-                       fire_ball(GF_CHAOS, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_CHAOS, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_DISEN:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("劣化のブレスを吐いた。", "You breathe disenchantment."));
-               
-                       fire_ball(GF_DISENCHANT, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_DISENCHANT, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_NEXUS:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("因果混乱のブレスを吐いた。", "You breathe nexus."));
-               
-                       fire_ball(GF_NEXUS, dir, damage, (plev > 35 ? -3 : -2));
+                       fire_breath(GF_NEXUS, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_TIME:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("時間逆転のブレスを吐いた。", "You breathe time."));
-               
-                       fire_ball(GF_TIME, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_TIME, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_INERTIA:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("遅鈍のブレスを吐いた。", "You breathe inertia."));
-               
-                       fire_ball(GF_INERTIAL, dir, damage, (plev > 35 ? -3 : -2));
+                       fire_breath(GF_INERTIAL, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_GRAVITY:
                if (!get_aim_dir(&dir)) return FALSE;
-               else msg_print(_("重力のブレスを吐いた。", "You breathe gravity."));
-               
-                       fire_ball(GF_GRAVITY, dir, damage, (plev > 35 ? -3 : -2));
+               else msg_print(_("重力のブレスを吐いた。", "You breathe gravity."));         
+               fire_breath(GF_GRAVITY, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_SHARDS:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("破片のブレスを吐いた。", "You breathe shards."));
-               
-                       fire_ball(GF_SHARDS, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_SHARDS, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_PLASMA:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("プラズマのブレスを吐いた。", "You breathe plasma."));
                
-                       fire_ball(GF_PLASMA, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_PLASMA, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_FORCE:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("フォースのブレスを吐いた。", "You breathe force."));
                
-                       fire_ball(GF_FORCE, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_FORCE, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BR_MANA:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("魔力のブレスを吐いた。", "You breathe mana."));
                
-                       fire_ball(GF_MANA, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_MANA, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BALL_NUKE:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("放射能球を放った。", "You cast a ball of radiation."));
                
                        fire_ball(GF_NUKE, dir, damage, 2);
                break;
+
        case MS_BR_NUKE:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("放射性廃棄物のブレスを吐いた。", "You breathe toxic waste."));
                
-                       fire_ball(GF_NUKE, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_NUKE, dir, damage, (plev > 35 ? 3 : 2));
                break;
+
        case MS_BALL_CHAOS:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("純ログルスを放った。", "You invoke a raw Logrus."));
@@ -465,7 +470,7 @@ static bool use_mane(int spell)
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("分解のブレスを吐いた。", "You breathe disintegration."));
                
-                       fire_ball(GF_DISINTEGRATE, dir, damage, (plev > 35 ? -3 : -2));
+               fire_breath(GF_DISINTEGRATE, dir, damage, (plev > 35 ? 3 : 2));
                break;
        case MS_BALL_ACID:
                if (!get_aim_dir(&dir)) return FALSE;
@@ -757,15 +762,18 @@ static bool use_mane(int spell)
                else teleport_level(target_m_idx);
                break;
        }
+
        case MS_PSY_SPEAR:
                if (!get_aim_dir(&dir)) return FALSE;
                else msg_print(_("光の剣を放った。", "You throw a psycho-spear."));
                (void)fire_beam(GF_PSY_SPEAR, dir, damage);
                break;
+
        case MS_DARKNESS:
                msg_print(_("暗闇の中で手を振った。", "You gesture in shadow."));
                (void)unlite_area(10, 3);
                break;
+
        case MS_MAKE_TRAP:
                if (!target_set(TARGET_KILL)) return FALSE;
                msg_print(_("呪文を唱えて邪悪に微笑んだ。", "You cast a spell and cackles evilly."));