OSDN Git Service

#37353 狂戦士化の効果をberserk()にまとめる。
[hengband/hengband.git] / src / racial.c
index 7ce3b7e..cd6ab9f 100644 (file)
  */
 
 #include "angband.h"
+#include "cmd-magiceat.h"
+#include "cmd-zapwand.h"
+#include "cmd-pet.h"
 
-/*!
- * @brief 対象のアイテムが矢やクロスボウの矢の材料になるかを返す。/
- * Hook to determine if an object is contertible in an arrow/bolt
- * @param o_ptr オブジェクトの構造体の参照ポインタ。
- * @return 材料にできるならTRUEを返す
- */
-static bool item_tester_hook_convertible(object_type *o_ptr)
-{
-       if((o_ptr->tval==TV_JUNK) || (o_ptr->tval==TV_SKELETON)) return TRUE;
-
-       if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON)) return TRUE;
-       /* Assume not */
-       return (FALSE);
-}
+#include "object-hook.h"
 
 /*!
  * @brief レイシャル「弾/矢の製造」処理 / do_cmd_cast calls this function if the player's class is 'archer'.
@@ -115,7 +105,7 @@ static bool do_cmd_archer(void)
                        q_ptr = &forge;
 
                        /* Hack -- Give the player some small firestones */
-                       object_prep(q_ptr, lookup_kind(TV_SHOT, m_bonus(1, p_ptr->lev) + 1));
+                       object_prep(q_ptr, lookup_kind(TV_SHOT, (OBJECT_SUBTYPE_VALUE)m_bonus(1, p_ptr->lev) + 1));
                        q_ptr->number = (byte)rand_range(15,30);
                        object_aware(q_ptr);
                        object_known(q_ptr);
@@ -139,7 +129,7 @@ static bool do_cmd_archer(void)
        /**********Create arrows*********/
        else if (ext == 2)
        {
-               int item;
+               OBJECT_IDX item;
                cptr q, s;
                s16b slot;
 
@@ -166,7 +156,7 @@ static bool do_cmd_archer(void)
                q_ptr = &forge;
 
                /* Hack -- Give the player some small firestones */
-               object_prep(q_ptr, lookup_kind(TV_ARROW, m_bonus(1, p_ptr->lev)+ 1));
+               object_prep(q_ptr, lookup_kind(TV_ARROW, (OBJECT_SUBTYPE_VALUE)m_bonus(1, p_ptr->lev)+ 1));
                q_ptr->number = (byte)rand_range(5, 10);
                object_aware(q_ptr);
                object_known(q_ptr);
@@ -198,7 +188,7 @@ static bool do_cmd_archer(void)
        /**********Create bolts*********/
        else if (ext == 3)
        {
-               int item;
+               OBJECT_IDX item;
                cptr q, s;
                s16b slot;
 
@@ -225,7 +215,7 @@ static bool do_cmd_archer(void)
                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));
+               object_prep(q_ptr, lookup_kind(TV_BOLT, (OBJECT_SUBTYPE_VALUE)m_bonus(1, p_ptr->lev)+1));
                q_ptr->number = (byte)rand_range(4, 8);
                object_aware(q_ptr);
                object_known(q_ptr);
@@ -263,7 +253,7 @@ static bool do_cmd_archer(void)
  */
 bool gain_magic(void)
 {
-       int item;
+       OBJECT_IDX item;
        PARAMETER_VALUE pval;
        int ext = 0;
        cptr q, s;
@@ -318,7 +308,7 @@ bool gain_magic(void)
 
        if (o_ptr->tval == TV_ROD)
        {
-               p_ptr->magic_num2[o_ptr->sval + ext] += o_ptr->number;
+               p_ptr->magic_num2[o_ptr->sval + ext] += (MAGIC_NUM2)o_ptr->number;
                if (p_ptr->magic_num2[o_ptr->sval + ext] > 99) p_ptr->magic_num2[o_ptr->sval + ext] = 99;
        }
        else
@@ -334,7 +324,7 @@ bool gain_magic(void)
                                gain_num = (gain_num/3 + randint0(gain_num/3)) / 256;
                                if (gain_num < 1) gain_num = 1;
                        }
-                       p_ptr->magic_num2[o_ptr->sval + ext] += gain_num;
+                       p_ptr->magic_num2[o_ptr->sval + ext] += (MAGIC_NUM2)gain_num;
                        if (p_ptr->magic_num2[o_ptr->sval + ext] > 99) p_ptr->magic_num2[o_ptr->sval + ext] = 99;
                        p_ptr->magic_num1[o_ptr->sval + ext] += pval * 0x10000;
                        if (p_ptr->magic_num1[o_ptr->sval + ext] > 99 * 0x10000) p_ptr->magic_num1[o_ptr->sval + ext] = 99 * 0x10000;
@@ -602,7 +592,7 @@ typedef struct power_desc_type power_desc_type;
  */
 struct power_desc_type
 {
-       char name[40];
+       char name[80];
        PLAYER_LEVEL level;
        int  cost;
        int  stat;
@@ -1001,11 +991,11 @@ static bool cmd_racial_power_aux(s32b command)
                        if (command == -3)
                        {
                                if (!get_aim_dir(&dir)) return FALSE;
-                               (void)fire_ball_hide(GF_CONTROL_LIVING, dir, p_ptr->lev, 0);
+                               (void)fire_ball_hide(GF_CHARM_LIVING, dir, p_ptr->lev, 0);
                        }
                        else if (command == -4)
                        {
-                               project_hack(GF_CONTROL_LIVING, p_ptr->lev);
+                               project_hack(GF_CHARM_LIVING, p_ptr->lev);
                        }
                        break;
                }
@@ -1027,7 +1017,7 @@ static bool cmd_racial_power_aux(s32b command)
                case CLASS_BARD:
                {
                        /* Singing is already stopped */
-                       if (!p_ptr->magic_num1[0] && !p_ptr->magic_num1[1]) return FALSE;
+                       if (!SINGING_SONG_EFFECT(p_ptr) && !INTERUPTING_SONG_EFFECT(p_ptr)) return FALSE;
 
                        stop_singing();
                        p_ptr->energy_use = 10;
@@ -1233,7 +1223,7 @@ static bool cmd_racial_power_aux(s32b command)
                        msg_format("You breathe %s.",((type == GF_NETHER) ? "nether" : "fire"));
 #endif
 
-                       fire_ball(type, dir, plev * 3, -(plev / 15) - 1);
+                       fire_breath(type, dir, plev * 3, (plev / 15) + 1);
                        break;
                }
                case MIMIC_VAMPIRE:
@@ -1263,7 +1253,7 @@ static bool cmd_racial_power_aux(s32b command)
 
                                msg_print(_("あなたはニヤリとして牙をむいた...", "You grin and bare your fangs..."));
                                dummy = plev + randint1(plev) * MAX(1, plev / 10);   /* Dmg */
-                               if (drain_life(dir, dummy))
+                               if (hypodynamic_bolt(dir, dummy))
                                {
                                        if (p_ptr->food < PY_FOOD_FULL)
                                                /* No heal if we are "full" */
@@ -1327,9 +1317,7 @@ static bool cmd_racial_power_aux(s32b command)
 
                case RACE_HALF_TROLL:
                        msg_print(_("うがぁぁ!", "RAAAGH!"));
-                       (void)set_afraid(0);
-                       (void)set_shero(10 + randint1(plev), FALSE);
-                       (void)hp_player(30);
+                       (void)berserk(10 + randint1(plev));
                        break;
 
                case RACE_AMBERITE:
@@ -1342,27 +1330,15 @@ static bool cmd_racial_power_aux(s32b command)
                        {
                                msg_print(_("あなたは「パターン」を心に描いてその上を歩いた...", "You picture the Pattern in your mind and walk it..."));
 
-                               (void)set_poisoned(0);
-                               (void)set_image(0);
-                               (void)set_stun(0);
-                               (void)set_cut(0);
-                               (void)set_blind(0);
-                               (void)set_afraid(0);
-                               (void)do_res_stat(A_STR);
-                               (void)do_res_stat(A_INT);
-                               (void)do_res_stat(A_WIS);
-                               (void)do_res_stat(A_DEX);
-                               (void)do_res_stat(A_CON);
-                               (void)do_res_stat(A_CHR);
+                               (void)true_healing(0);
+                               (void)restore_all_status();
                                (void)restore_level();
                        }
                        break;
 
                case RACE_BARBARIAN:
                        msg_print(_("うぉぉおお!", "Raaagh!"));
-                       (void)set_afraid(0);
-                       (void)set_shero(10 + randint1(plev), FALSE);
-                       (void)hp_player(30);
+                       (void)berserk(10 + randint1(plev));
                        break;
 
                case RACE_HALF_OGRE:
@@ -1555,8 +1531,7 @@ static bool cmd_racial_power_aux(s32b command)
                                ratial_stop_mouth();
                                msg_format(_("あなたは%sのブレスを吐いた。", "You breathe %s."), Type_desc);
 
-                               fire_ball(Type, dir, plev * 2,
-                                   -(plev / 15) - 1);
+                               fire_breath(Type, dir, plev * 2, (plev / 15) + 1);
                        }
                        break;
 
@@ -1617,7 +1592,7 @@ static bool cmd_racial_power_aux(s32b command)
 
                                msg_print(_("あなたはニヤリとして牙をむいた...", "You grin and bare your fangs..."));
                                dummy = plev + randint1(plev) * MAX(1, plev / 10);   /* Dmg */
-                               if (drain_life(dir, dummy))
+                               if (hypodynamic_bolt(dir, dummy))
                                {
                                        if (p_ptr->food < PY_FOOD_FULL)
                                                /* No heal if we are "full" */
@@ -1662,7 +1637,7 @@ static bool cmd_racial_power_aux(s32b command)
                                msg_format("You breathe %s.",((type == GF_NETHER) ? "nether" : "fire"));
 #endif
 
-                               fire_ball(type, dir, plev * 3, -(plev / 15) - 1);
+                               fire_breath(type, dir, plev * 3, (plev / 15) + 1);
                        }
                        break;
 
@@ -2093,7 +2068,7 @@ void do_cmd_racial_power(void)
                        power_desc[num++].number = -1;
                        break;
                case MIMIC_VAMPIRE:
-                       strcpy(power_desc[num].name, _("生命力吸収", "Drain Life"));
+                       strcpy(power_desc[num].name, _("吸血", "Vampiric Drain"));
                        power_desc[num].level = 2;
                        power_desc[num].cost = 1 + (lvl / 3);
                        power_desc[num].stat = A_CON;
@@ -2291,7 +2266,7 @@ void do_cmd_racial_power(void)
                        power_desc[num++].number = -1;
                        break;
                case RACE_VAMPIRE:
-                       strcpy(power_desc[num].name, _("生命力吸収", "Drain Life"));
+                       strcpy(power_desc[num].name, _("吸血", "Vampiric Drain"));
                        power_desc[num].level = 2;
                        power_desc[num].cost = 1 + (lvl / 3);
                        power_desc[num].stat = A_CON;
@@ -2442,7 +2417,7 @@ void do_cmd_racial_power(void)
 
                if (p_ptr->muta1 & MUT1_VAMPIRISM)
                {
-                       strcpy(power_desc[num].name, _("吸血ドレイン", "Vampiric Drain"));
+                       strcpy(power_desc[num].name, _("吸血", "Vampiric Drain"));
                        power_desc[num].level = 2;
                        power_desc[num].cost = (1 + (lvl / 3));
                        power_desc[num].stat = A_CON;
@@ -2850,7 +2825,7 @@ if (!repeat_pull(&i) || i<0 || i>=num) {
                                ask = (isupper(choice));
 
                                /* Lowercase */
-                               if (ask) choice = tolower(choice);
+                               if (ask) choice = (char)tolower(choice);
 
                                /* Extract request */
                                i = (islower(choice) ? A2I(choice) : -1);