From 66fcad36eba7191c948677230406c8eb691515af Mon Sep 17 00:00:00 2001 From: Slimebreath6078 Date: Sat, 29 Jul 2023 12:03:19 +0900 Subject: [PATCH] =?utf8?q?=E9=9A=95=E7=9F=B3=E8=80=90=E6=80=A7=E3=82=92?= =?utf8?q?=E8=BF=BD=E5=8A=A0=20=E9=9A=95=E7=9F=B3=E8=80=90=E6=80=A7?= =?utf8?q?=E3=80=81=E3=81=A8=E3=81=84=E3=81=86=E3=82=82=E3=81=AE=E3=82=82?= =?utf8?q?=E3=82=88=E3=81=8F=E3=82=8F=E3=81=8B=E3=82=89=E3=81=AA=E3=81=84?= =?utf8?q?=E3=81=8C=E3=80=81=E4=BB=96=E3=81=AB=E5=BD=93=E3=81=A6=E3=81=AF?= =?utf8?q?=E3=81=BE=E3=82=8A=E3=81=9D=E3=81=86=E3=81=AA=E8=80=90=E6=80=A7?= =?utf8?q?=E3=82=82=E3=81=AA=E3=81=84=EF=BC=88=E3=81=9B=E3=81=84=E3=81=9C?= =?utf8?q?=E3=81=84=E3=83=95=E3=82=A9=E3=83=BC=E3=82=B9=E3=81=8F=E3=82=89?= =?utf8?q?=E3=81=84=EF=BC=9F=EF=BC=89=E3=81=AE=E3=81=A7=E6=96=B0=E8=A6=8F?= =?utf8?q?=E3=81=AB=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/effect/effect-monster-resist-hurt.cpp | 20 ++++++++++++++++++++ src/effect/effect-monster-resist-hurt.h | 1 + src/effect/effect-monster-switcher.cpp | 3 ++- src/info-reader/race-info-tokens-table.cpp | 2 ++ src/monster-race/race-flags-resistance.h | 2 ++ src/view/display-lore-status.cpp | 5 +++++ 6 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/effect/effect-monster-resist-hurt.cpp b/src/effect/effect-monster-resist-hurt.cpp index 7cb870032..5259f4323 100644 --- a/src/effect/effect-monster-resist-hurt.cpp +++ b/src/effect/effect-monster-resist-hurt.cpp @@ -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; +} diff --git a/src/effect/effect-monster-resist-hurt.h b/src/effect/effect-monster-resist-hurt.h index 41a819d5a..a20373fc1 100644 --- a/src/effect/effect-monster-resist-hurt.h +++ b/src/effect/effect-monster-resist-hurt.h @@ -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); diff --git a/src/effect/effect-monster-switcher.cpp b/src/effect/effect-monster-switcher.cpp index ec90be933..60fefad72 100644 --- a/src/effect/effect-monster-switcher.cpp +++ b/src/effect/effect-monster-switcher.cpp @@ -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; diff --git a/src/info-reader/race-info-tokens-table.cpp b/src/info-reader/race-info-tokens-table.cpp index 7ca7f9aaf..0375e8ecc 100644 --- a/src/info-reader/race-info-tokens-table.cpp +++ b/src/info-reader/race-info-tokens-table.cpp @@ -327,6 +327,8 @@ const std::unordered_map 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 r_info_aura_flags = { diff --git a/src/monster-race/race-flags-resistance.h b/src/monster-race/race-flags-resistance.h index 798875c9d..15202c8c0 100644 --- a/src/monster-race/race-flags-resistance.h +++ b/src/monster-race/race-flags-resistance.h @@ -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 */ }; diff --git a/src/view/display-lore-status.cpp b/src/view/display-lore-status.cpp index 475320afa..4bde36cb5 100644 --- a/src/view/display-lore-status.cpp +++ b/src/view/display-lore-status.cpp @@ -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; -- 2.11.0