OSDN Git Service

[Refactor] #37353 cmd2.c を cmd-basic.c/h に整理。
[hengband/hengband.git] / src / snipe.c
index 5d251bc..d9f7ae4 100644 (file)
@@ -8,6 +8,7 @@
 
 #include "angband.h"
 #include "player-status.h"
+#include "cmd-basic.h"
 
 #define MAX_SNIPE_POWERS 16
 
@@ -17,8 +18,8 @@ typedef struct snipe_power snipe_power;
 /*! スナイパー技能情報の構造体 */
 struct snipe_power
 {
-       int     min_lev;
-       int     mana_cost;
+       PLAYER_LEVEL min_lev;
+       MANA_POINT mana_cost;
        concptr name;
 };
 
@@ -157,24 +158,18 @@ int boost_concentration_damage(int tdam)
  */
 void display_snipe_list(void)
 {
-       int             i;
-       int             y = 1;
-       int             x = 1;
+       int i;
+       TERM_LEN y = 1;
+       TERM_LEN x = 1;
        PLAYER_LEVEL plev = p_ptr->lev;
        snipe_power     spell;
        char            psi_desc[80];
 
        /* Display a list of spells */
        prt("", y, x);
-#ifdef JP
-       put_str("名前", y, x + 5);
-       put_str("Lv   MP", y, x + 35);
-#else
-       put_str("Name", y, x + 5);
-       put_str("Lv Mana", y, x + 35);
-#endif
+       put_str(_("名前", "Name"), y, x + 5);
+       put_str(_("Lv   MP", "Lv Mana"), y, x + 35);
 
-       /* Dump the spells */
        for (i = 0; i < MAX_SNIPE_POWERS; i++)
        {
                /* Access the available spell */
@@ -182,7 +177,6 @@ void display_snipe_list(void)
                if (spell.min_lev > plev) continue;
                if (spell.mana_cost > (int)p_ptr->concent) continue;
 
-               /* Dump the spell */
                sprintf(psi_desc, "  %c) %-30s%2d %4d",
                        I2A(i), spell.name, spell.min_lev, spell.mana_cost);
 
@@ -214,8 +208,8 @@ static int get_snipe_power(COMMAND_CODE *sn, bool only_browse)
 {
        COMMAND_CODE i;
        int             num = 0;
-       int             y = 1;
-       int             x = 20;
+       TERM_LEN y = 1;
+       TERM_LEN x = 20;
        PLAYER_LEVEL plev = p_ptr->lev;
        int             ask;
        char            choice;
@@ -270,7 +264,6 @@ static int get_snipe_power(COMMAND_CODE *sn, bool only_browse)
                                        p, I2A(0), I2A(num), p);
        }
 
-       /* Get a spell from the user */
        choice = always_show_list ? ESCAPE : 1;
        while (!flag)
        {
@@ -284,20 +277,13 @@ static int get_snipe_power(COMMAND_CODE *sn, bool only_browse)
                        if (!redraw)
                        {
                                char psi_desc[80];
-
-                               /* Show list */
                                redraw = TRUE;
                                if (!only_browse) screen_save();
 
                                /* Display a list of spells */
                                prt("", y, x);
-#ifdef JP
-                               put_str("名前", y, x + 5);
-                               if (only_browse) put_str("Lv   集中度", y, x + 35);
-#else
-                               put_str("Name", y, x + 5);
-                               if (only_browse) put_str("Lv Pow", y, x + 35);
-#endif
+                               put_str(_("名前", "Name"), y, x + 5);
+                               if (only_browse) put_str(_("Lv   集中度", "Lv Pow"), y, x + 35);
 
                                /* Dump the spells */
                                for (i = 0; i < MAX_SNIPE_POWERS; i++)
@@ -393,7 +379,7 @@ static int get_snipe_power(COMMAND_CODE *sn, bool only_browse)
  * @param m_ptr 目標となるモンスターの構造体参照ポインタ
  * @return スレイの倍率(/10倍)
  */
-int tot_dam_aux_snipe(int mult, monster_type *m_ptr)
+MULTIPLY tot_dam_aux_snipe(MULTIPLY mult, monster_type *m_ptr, SPELL_IDX snipe_type)
 {
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
        bool seen = is_seen(m_ptr);
@@ -403,7 +389,7 @@ int tot_dam_aux_snipe(int mult, monster_type *m_ptr)
        case SP_LITE:
                if (r_ptr->flags3 & (RF3_HURT_LITE))
                {
-                       int n = 20 + p_ptr->concent;
+                       MULTIPLY n = 20 + p_ptr->concent;
                        if (seen) r_ptr->r_flags3 |= (RF3_HURT_LITE);
                        if (mult < n) mult = n;
                }
@@ -415,7 +401,7 @@ int tot_dam_aux_snipe(int mult, monster_type *m_ptr)
                }
                else
                {
-                       int n = 15 + (p_ptr->concent * 3);
+                       MULTIPLY n = 15 + (p_ptr->concent * 3);
                        if (mult < n) mult = n;
                }
                break;
@@ -426,7 +412,7 @@ int tot_dam_aux_snipe(int mult, monster_type *m_ptr)
                }
                else
                {
-                       int n = 15 + (p_ptr->concent * 3);
+                       MULTIPLY n = 15 + (p_ptr->concent * 3);
                        if (mult < n) mult = n;
                }
                break;
@@ -437,20 +423,20 @@ int tot_dam_aux_snipe(int mult, monster_type *m_ptr)
                }
                else
                {
-                       int n = 18 + (p_ptr->concent * 4);
+                       MULTIPLY n = 18 + (p_ptr->concent * 4);
                        if (mult < n) mult = n;
                }
                break;
        case SP_KILL_WALL:
                if (r_ptr->flags3 & RF3_HURT_ROCK)
                {
-                       int n = 15 + (p_ptr->concent * 2);
+                       MULTIPLY n = 15 + (p_ptr->concent * 2);
                        if (seen) r_ptr->r_flags3 |= RF3_HURT_ROCK;
                        if (mult < n) mult = n;
                }
                else if (r_ptr->flags3 & RF3_NONLIVING)
                {
-                       int n = 15 + (p_ptr->concent * 2);
+                       MULTIPLY n = 15 + (p_ptr->concent * 2);
                        if (seen) r_ptr->r_flags3 |= RF3_NONLIVING;
                        if (mult < n) mult = n;
                }
@@ -458,7 +444,7 @@ int tot_dam_aux_snipe(int mult, monster_type *m_ptr)
        case SP_EVILNESS:
                if (r_ptr->flags3 & RF3_GOOD)
                {
-                       int n = 15 + (p_ptr->concent * 4);
+                       MULTIPLY n = 15 + (p_ptr->concent * 4);
                        if (seen) r_ptr->r_flags3 |= RF3_GOOD;
                        if (mult < n) mult = n;
                }
@@ -466,7 +452,7 @@ int tot_dam_aux_snipe(int mult, monster_type *m_ptr)
        case SP_HOLYNESS:
                if (r_ptr->flags3 & RF3_EVIL)
                {
-                       int n = 12 + (p_ptr->concent * 3);
+                       MULTIPLY n = 12 + (p_ptr->concent * 3);
                        if (seen) r_ptr->r_flags3 |= RF3_EVIL;
                        if (r_ptr->flags3 & (RF3_HURT_LITE))
                        {
@@ -494,6 +480,7 @@ int tot_dam_aux_snipe(int mult, monster_type *m_ptr)
 static bool cast_sniper_spell(int spell)
 {
        object_type *o_ptr = &inventory[INVEN_BOW];
+       SPELL_IDX snipe_type = SP_NONE;
 
        if (o_ptr->tval != TV_BOW)
        {
@@ -528,8 +515,7 @@ static bool cast_sniper_spell(int spell)
        }
 
        command_cmd = 'f';
-       do_cmd_fire();
-       snipe_type = 0;
+       do_cmd_fire(snipe_type);
 
        return (is_fired);
 }
@@ -541,35 +527,19 @@ static bool cast_sniper_spell(int spell)
 void do_cmd_snipe(void)
 {
        COMMAND_CODE n = 0;
-       bool            cast;
+       bool cast;
 
-       if (cmd_limit_confused(p_ptr)) return;
+       if(cmd_limit_confused(p_ptr)) return;
+       if(cmd_limit_image(p_ptr)) return;
+       if(cmd_limit_stun(p_ptr)) return;
 
-       /* not if hullucinated */
-       if (p_ptr->image)
-       {
-               msg_print(_("幻覚が見えて集中できない!", "You are too hallucinated!"));
-               return;
-       }
-
-       /* not if stuned */
-       if (p_ptr->stun)
-       {
-               msg_print(_("頭が朦朧としていて集中できない!", "You are too stuned!"));
-               return;
-       }
-
-       /* get power */
        if (!get_snipe_power(&n, FALSE)) return;
 
        sound(SOUND_SHOOT);
-
-       /* Cast the spell */
        cast = cast_sniper_spell(n);
 
        if (!cast) return;
        p_ptr->redraw |= (PR_HP | PR_MANA);
-
        p_ptr->window |= (PW_PLAYER);
        p_ptr->window |= (PW_SPELL);
 }
@@ -588,7 +558,6 @@ void do_cmd_snipe_browse(void)
 
        while(1)
        {
-               /* get power */
                if (!get_snipe_power(&n, TRUE))
                {
                        screen_load();