OSDN Git Service

隕石耐性を追加
authorSlimebreath6078 <slimebreath6078@yahoo.co.jp>
Sat, 29 Jul 2023 03:03:19 +0000 (12:03 +0900)
committerSlimebreath6078 <slimebreath6078@yahoo.co.jp>
Sun, 6 Aug 2023 07:07:35 +0000 (16:07 +0900)
隕石耐性、というものもよくわからないが、他に当てはまりそうな耐性もない(せいぜいフォースくらい?)ので新規に追加

src/effect/effect-monster-resist-hurt.cpp
src/effect/effect-monster-resist-hurt.h
src/effect/effect-monster-switcher.cpp
src/info-reader/race-info-tokens-table.cpp
src/monster-race/race-flags-resistance.h
src/view/display-lore-status.cpp

index 7cb8700..5259f43 100644 (file)
@@ -772,3 +772,23 @@ ProcessResult effect_monster_abyss(PlayerType *player_ptr, EffectMonster *em_ptr
 
     return ProcessResult::PROCESS_CONTINUE;
 }
+
+ProcessResult effect_monster_meteor(PlayerType *player_ptr, EffectMonster *em_ptr)
+{
+    if (em_ptr->seen) {
+        em_ptr->obvious = true;
+    }
+
+    if (em_ptr->r_ptr->resistance_flags.has_not(MonsterResistanceType::RESIST_METEOR)) {
+        return ProcessResult::PROCESS_CONTINUE;
+    }
+
+    em_ptr->note = _("には耐性がある!", " resists!");
+    em_ptr->dam *= 3;
+    em_ptr->dam /= randint1(6) + 6;
+    if (is_original_ap_and_seen(player_ptr, em_ptr->m_ptr)) {
+        em_ptr->r_ptr->r_resistance_flags.set(MonsterResistanceType::RESIST_METEOR);
+    }
+
+    return ProcessResult::PROCESS_CONTINUE;
+}
index 41a819d..a20373f 100644 (file)
@@ -31,3 +31,4 @@ ProcessResult effect_monster_disintegration(PlayerType *player_ptr, EffectMonste
 ProcessResult effect_monster_icee_bolt(PlayerType *player_ptr, EffectMonster *em_ptr);
 ProcessResult effect_monster_void(PlayerType *player_ptr, EffectMonster *em_ptr);
 ProcessResult effect_monster_abyss(PlayerType *player_ptr, EffectMonster *em_ptr);
+ProcessResult effect_monster_meteor(PlayerType *player_ptr, EffectMonster *em_ptr);
index ec90be9..60fefad 100644 (file)
@@ -330,7 +330,6 @@ ProcessResult switch_effects_monster(PlayerType *player_ptr, EffectMonster *em_p
     case AttributeType::MISSILE:
     case AttributeType::DEBUG:
     case AttributeType::MANA:
-    case AttributeType::METEOR:
     case AttributeType::BLOOD_CURSE:
     case AttributeType::SEEKER:
     case AttributeType::SUPER_RAY:
@@ -497,6 +496,8 @@ ProcessResult switch_effects_monster(PlayerType *player_ptr, EffectMonster *em_p
         return effect_monster_void(player_ptr, em_ptr);
     case AttributeType::ABYSS:
         return effect_monster_abyss(player_ptr, em_ptr);
+    case AttributeType::METEOR:
+        return effect_monster_meteor(player_ptr, em_ptr);
     default: {
         em_ptr->skipped = true;
         em_ptr->dam = 0;
index 7ca7f9a..0375e8e 100644 (file)
@@ -327,6 +327,8 @@ const std::unordered_map<std::string_view, MonsterResistanceType> r_info_flagsr
     { "RES_ABYSS", MonsterResistanceType::RESIST_ABYSS },
     { "HURT_VOID", MonsterResistanceType::HURT_VOID_MAGIC },
     { "RES_VOID", MonsterResistanceType::RESIST_VOID_MAGIC },
+    { "HURT_METEOR", MonsterResistanceType::HURT_METEOR },
+    { "RES_METEOR", MonsterResistanceType::RESIST_METEOR },
 };
 
 const std::unordered_map<std::string_view, MonsterAuraType> r_info_aura_flags = {
index 798875c..15202c8 100644 (file)
@@ -52,5 +52,7 @@ enum class MonsterResistanceType {
     RESIST_ABYSS = 48, /* Resist abyss */
     HURT_VOID_MAGIC = 49, /* Hurt badly by void */
     RESIST_VOID_MAGIC = 50, /* Resist void */
+    HURT_METEOR = 51, /* Hurt badly by meteor */
+    RESIST_METEOR = 52, /* Resist meteor */
     MAX, /* Max of Resistances */
 };
index 475320a..4bde36c 100644 (file)
@@ -312,6 +312,11 @@ void display_monster_concrete_resistances(lore_type *lore_ptr)
         lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
     }
 
+    if (lore_ptr->resistance_flags.has(MonsterResistanceType::RESIST_METEOR)) {
+        lore_ptr->vp[lore_ptr->vn] = _("隕石", "meteor");
+        lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
+    }
+
     if (lore_ptr->resistance_flags.has(MonsterResistanceType::RESIST_ALL)) {
         lore_ptr->vp[lore_ptr->vn] = _("あらゆる攻撃", "all");
         lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW;