OSDN Git Service

空腹進行殴りを追加し、第三の乗り手『フェミン』のEAT_FOODを空腹進行に変更
authordaradarach <daradarach@gmail.com>
Sat, 14 Aug 2021 13:29:51 +0000 (22:29 +0900)
committerdaradarach <daradarach@gmail.com>
Sat, 14 Aug 2021 13:29:51 +0000 (22:29 +0900)
12 files changed:
lib/edit/r_info.txt
src/info-reader/race-info-tokens-table.cpp
src/io/gf-descriptions.cpp
src/io/gf-descriptions.h
src/lore/combat-types-setter.cpp
src/melee/melee-switcher.cpp
src/monster-attack/monster-attack-effect.h
src/monster-attack/monster-attack-switcher.cpp
src/monster-attack/monster-attack-types.cpp
src/monster-attack/monster-eating.cpp
src/monster-attack/monster-eating.h
src/spell/spell-types.h

index e79dc3c..3902035 100644 (file)
@@ -26517,7 +26517,7 @@ I:130:100d80:60:75:10
 W:80:16:0:30000:0:0
 B:GAZE:PARALYZE
 B:GAZE:CONFUSE
-B:HIT:EAT_FOOD:8d8
+B:HIT:HUNGRY:8d60
 B:HIT:STUN:8d8
 F:UNIQUE | MALE | DROP_CORPSE
 F:ONLY_ITEM | DROP_4D2 | DROP_GREAT
index 1894f81..de334f2 100644 (file)
@@ -74,8 +74,9 @@ const std::unordered_map<std::string_view, rbe_type> r_info_blow_effect = {
        { "DR_MANA", RBE_DR_MANA },
        { "SUPERHURT", RBE_SUPERHURT },
        { "INERTIA", RBE_INERTIA },
-       { "STUN", RBE_STUN },
-       { "FLAVOR", RBE_FLAVOR },
+    { "STUN", RBE_STUN },
+    { "HUNGRY", RBE_HUNGRY },
+    { "FLAVOR", RBE_FLAVOR },
 };
 
 /*!
index 9a6ec00..42d84dc 100644 (file)
@@ -109,4 +109,5 @@ const named_num gf_desc[MAX_NAMED_NUM] =
        {"GF_E_GENOCIDE",           GF_E_GENOCIDE       },
        {"GF_VOID",                 GF_VOID             },
        {"GF_ABYSS",                GF_ABYSS            },
+    {"GF_HUNGRY",               GF_HUNGRY           },
 };
index 0ab8fa6..624d892 100644 (file)
@@ -2,7 +2,7 @@
 
 #include "system/angband.h"
 
-#define MAX_NAMED_NUM 102
+#define MAX_NAMED_NUM 103
 
 typedef struct named_num
 {
index c8f8820..e314004 100644 (file)
@@ -253,6 +253,10 @@ void set_monster_blow_effect(lore_type *lore_ptr, int m)
         lore_ptr->q = _("朦朧とさせる", "stun");
         lore_ptr->qc = TERM_ORANGE;
         break;
+    case RBE_HUNGRY:
+        lore_ptr->q = _("空腹を進行させる", "be hangry");
+        lore_ptr->qc = TERM_L_BLUE;
+        break;
     case RBE_FLAVOR:
         // フレーバー打撃には何の効果もないので付加説明もない。
         break;
index 6632aca..bc7b304 100644 (file)
@@ -238,6 +238,9 @@ void decide_monster_attack_effect(player_type *subject_ptr, mam_type *mam_ptr)
     case RBE_STUN:
         mam_ptr->pt = GF_SOUND;
         break;
+    case RBE_HUNGRY:
+        mam_ptr->pt = GF_HUNGRY;
+        break;
     case RBE_FLAVOR:
         // フレーバー打撃には何の効果もない。
         mam_ptr->pt = GF_NONE;
index e43e141..c7be7a7 100644 (file)
@@ -44,6 +44,7 @@ enum rbe_type {
     RBE_INERTIA = 34, /*!< モンスターの攻撃効果: 減速させる*/
     RBE_STUN = 35, /*!< モンスターの攻撃効果: 朦朧とさせる*/
     RBE_FLAVOR = 36, /*!< モンスターの攻撃効果: フレーバー(メッセージ表示のみ) */
+    RBE_HUNGRY = 37, /*!< モンスターの攻撃効果: 空腹を進行させる*/
 
     NB_RBE_TYPE, /*!< enum バリアント数 */
 };
index fa296e5..7b63856 100644 (file)
@@ -282,6 +282,19 @@ static void calc_blow_inertia(player_type *target_ptr, monap_type *monap_ptr)
         monap_ptr->obvious = true;
 }
 
+/*!
+* @brief 空腹進行度を計算する (急速回復があれば+100%、遅消化があれば-50%)
+*/
+static void calc_blow_hungry(player_type *target_ptr, monap_type *monap_ptr)
+{
+    if (target_ptr->regenerate)
+        monap_ptr->damage = monap_ptr->damage * 2;
+    if (target_ptr->slow_digest)
+        monap_ptr->damage = monap_ptr->damage / 2;
+
+    process_monster_attack_hungry(target_ptr, monap_ptr);
+}
+
 void switch_monster_blow_to_player(player_type *target_ptr, monap_type *monap_ptr)
 {
     switch (monap_ptr->effect) {
@@ -463,7 +476,6 @@ void switch_monster_blow_to_player(player_type *target_ptr, monap_type *monap_pt
         monap_ptr->get_damage += take_hit(target_ptr, DAMAGE_ATTACK, monap_ptr->damage, monap_ptr->ddesc);
         if (target_ptr->is_dead)
             break;
-
         process_stun_attack(target_ptr, monap_ptr);
         break;
     case RBE_FLAVOR:
@@ -471,6 +483,9 @@ void switch_monster_blow_to_player(player_type *target_ptr, monap_type *monap_pt
         monap_ptr->obvious = true;
         monap_ptr->damage = 0;
         break;
+    case RBE_HUNGRY:
+        calc_blow_hungry(target_ptr, monap_ptr);
+        break;
 
     case NB_RBE_TYPE:
         break;
index 31a7f61..9d8a934 100644 (file)
@@ -186,6 +186,10 @@ const mbe_info_type mbe_info[NB_RBE_TYPE] = {
         GF_MISSILE,
     }, /* STUN */
     {
+        5,
+        GF_MISSILE,
+    }, /* HUNGRY */
+    {
         0,
         GF_NONE,
     }, /* FLAVOR */
index 6891c47..c09523c 100644 (file)
@@ -30,6 +30,7 @@
 #include "system/player-type-definition.h"
 #include "view/display-messages.h"
 #include "world/world-object.h"
+#include "player/digestion-processor.h"
 
 void process_eat_gold(player_type *target_ptr, monap_type *monap_ptr)
 {
@@ -295,3 +296,19 @@ void process_drain_mana(player_type *target_ptr, monap_type *monap_ptr)
 
     target_ptr->redraw |= (PR_MANA);
 }
+
+/*!
+ * @brief モンスターからの空腹進行処理
+ * @param target_ptr プレーヤーへの参照ポインタ
+ * @monap_ptr モンスターからモンスターへの直接攻撃構造体への参照ポインタ
+ */
+void process_monster_attack_hungry(player_type *target_ptr, monap_type *monap_ptr)
+{
+    /*hungry*/
+    set_food(target_ptr, target_ptr->food - monap_ptr->damage);
+#ifdef JP
+    msg_format("あなたは腹が減った!");
+#else
+    msg_format("You feel hungry!");
+#endif
+}
index 8b31c34..d619189 100644 (file)
@@ -14,3 +14,4 @@ bool process_un_power(player_type *target_ptr, monap_type *monap_ptr);
 bool check_drain_hp(player_type *target_ptr, const s32b d);
 void process_drain_life(player_type *target_ptr, monap_type *monap_ptr, const bool resist_drain);
 void process_drain_mana(player_type *target_ptr, monap_type *monap_ptr);
+void process_monster_attack_hungry(player_type *target_ptr, monap_type *monap_ptr);
index c8dd7cf..4c9eeed 100644 (file)
@@ -105,5 +105,6 @@ enum spells_type
     GF_E_GENOCIDE = 117,               /*!< 魔法効果: 元素抹殺 */
        GF_VOID = 118,              /*!< 魔法効果: 虚無 */
        GF_ABYSS = 119,             /*!< 魔法効果: 深淵 */
-       MAX_GF = 120,                           /*!< 欠番を無視した最大サイズ (直上の値+1) */
+    GF_HUNGRY = 120,            /*!< 魔法効果: 空腹>*/
+       MAX_GF = 121,                   /*!< 欠番を無視した最大サイズ (直上の値+1) */
 };