OSDN Git Service

[Fix] HEAVY_SPELLとHARD_SPELLの統一
authordis- <dis.rogue@gmail.com>
Sat, 20 Jan 2024 18:32:10 +0000 (03:32 +0900)
committerdis- <dis.rogue@gmail.com>
Sat, 20 Jan 2024 19:39:39 +0000 (04:39 +0900)
Issue #1170で言及されている内容。
装備由来の呪文失敗率上昇フラグをHARD_SPELLに統一。
永続装備フラグTR_HARD_SPELLと一時呪いフラグCurseTraitType::HARD_SPELLで管理する。
一部重複処理を削除し、自己分析時の二重メッセージを解消した。

現在の仕様も記載しておく。

永続呪いは難度+25%で複数装備による累積なし。
一時呪いフラグは弱呪いで+3%、強呪いで+10%で累積あり。

12 files changed:
lib/edit/ArtifactDefinitions.txt
lib/edit/EgoDefinitions.txt
src/info-reader/baseitem-tokens-table.cpp
src/object-enchant/tr-types.h
src/perception/identification.cpp
src/player-info/body-improvement-info.cpp
src/player/player-status-flags.cpp
src/player/player-status-flags.h
src/player/player-status.cpp
src/smith/smith-tables.cpp
src/spell/spell-info.cpp
src/system/player-type-definition.h

index a8a1002..422daef 100644 (file)
@@ -4499,7 +4499,7 @@ E:'Alalarang'
 I:23:20:-2
 W:30:1:50:3500
 P:0:8d4:-10:-10:-15
-F:DEX | HIDE_TYPE | BLOWS | HEAVY_SPELL | AGGRAVATE | IM_COLD
+F:DEX | HIDE_TYPE | BLOWS | HARD_SPELL | AGGRAVATE | IM_COLD
 F:SHOW_MODS | SPEED | CURSED | HEAVY_CURSE | TY_CURSE
 F:RANDOM_CURSE0 | RANDOM_CURSE2 | WARNING
 D:$Ala, ala, ala.
index 12907e4..3e9ad29 100644 (file)
@@ -1532,7 +1532,7 @@ E:and Stupidity
 X:27:0
 W:30:0:0:0
 C:0:0:0:3
-F:INT | CURSED | HEAVY_CURSE | HEAVY_SPELL
+F:INT | CURSED | HEAVY_CURSE | HARD_SPELL
 
 N:216:反感の
 E:and Aggravate
index f7a8a73..6acbcc1 100644 (file)
@@ -154,7 +154,6 @@ const std::unordered_map<std::string_view, tr_type> baseitem_flags = {
     { "EASY2_WEAPON", TR_EASY2_WEAPON },
     { "DOWN_SAVING", TR_DOWN_SAVING },
     { "NO_AC", TR_NO_AC },
-    { "HEAVY_SPELL", TR_HEAVY_SPELL },
     { "RES_TIME", TR_RES_TIME },
     { "RES_WATER", TR_RES_WATER },
     { "INVULN_ARROW", TR_INVULN_ARROW },
index 6dfc445..fe65f12 100644 (file)
@@ -152,7 +152,7 @@ enum tr_type : int {
     TR_EASY2_WEAPON = 139,
     TR_DOWN_SAVING = 140,
     TR_NO_AC = 141,
-    TR_HEAVY_SPELL = 142,
+    TR_XXX_142 = 142, //!< 未使用 / Unused
     TR_RES_TIME = 143,
     TR_RES_WATER = 144,
     TR_INVULN_ARROW = 145,
index bbc05ca..ddf68c4 100644 (file)
@@ -93,10 +93,6 @@ bool screen_object(PlayerType *player_ptr, ItemEntity *o_ptr, BIT_FLAGS mode)
         info[i++] = _("それは魔法の難易度を下げる。", "It affects your ability to cast spells.");
     }
 
-    if (flags.has(TR_HEAVY_SPELL)) {
-        info[i++] = _("それは魔法の難易度を上げる。", "It interferes with casting spells.");
-    }
-
     if (flags.has(TR_MIGHTY_THROW)) {
         info[i++] = _("それは物を強く投げることを可能にする。", "It provides great strength when you throw an item.");
     }
index fb6016d..acea61f 100644 (file)
@@ -147,10 +147,6 @@ void set_body_improvement_info_3(PlayerType *player_ptr, self_info_type *self_pt
         self_ptr->info[self_ptr->line++] = _("あなたは低い失敗率で魔法を唱えることができる。", "Your magic fails less often.");
     }
 
-    if (player_ptr->heavy_spell) {
-        self_ptr->info[self_ptr->line++] = _("あなたは高い失敗率で魔法を唱えなければいけない。", "Your magic fails more often.");
-    }
-
     if (player_ptr->mighty_throw) {
         self_ptr->info[self_ptr->line++] = _("あなたは強く物を投げる。", "You can throw objects powerfully.");
     }
index 976269a..1ae2b98 100644 (file)
@@ -428,7 +428,9 @@ BIT_FLAGS get_player_flags(PlayerType *player_ptr, tr_type tr_flag)
     case TR_COWARDICE:
     case TR_LOW_MELEE:
     case TR_LOW_AC:
+        return check_equipment_flags(player_ptr, tr_flag);
     case TR_HARD_SPELL:
+        return has_hard_spell(player_ptr);
     case TR_FAST_DIGEST:
     case TR_SLOW_REGEN:
         return check_equipment_flags(player_ptr, tr_flag);
@@ -440,8 +442,8 @@ BIT_FLAGS get_player_flags(PlayerType *player_ptr, tr_type tr_flag)
         return has_down_saving(player_ptr);
     case TR_NO_AC:
         return has_no_ac(player_ptr);
-    case TR_HEAVY_SPELL:
-        return has_heavy_spell(player_ptr);
+    case TR_XXX_142:
+        return check_equipment_flags(player_ptr, tr_flag);
     case TR_INVULN_ARROW:
         return has_invuln_arrow(player_ptr);
     case TR_DARK_SOURCE:
@@ -862,9 +864,9 @@ BIT_FLAGS has_easy_spell(PlayerType *player_ptr)
     return common_cause_flags(player_ptr, TR_EASY_SPELL);
 }
 
-BIT_FLAGS has_heavy_spell(PlayerType *player_ptr)
+BIT_FLAGS has_hard_spell(PlayerType *player_ptr)
 {
-    return common_cause_flags(player_ptr, TR_HEAVY_SPELL);
+    return common_cause_flags(player_ptr, TR_HARD_SPELL);
 }
 
 BIT_FLAGS has_hold_exp(PlayerType *player_ptr)
index b7d2d16..0a59477 100644 (file)
@@ -84,7 +84,7 @@ BIT_FLAGS has_sh_fire(PlayerType *player_ptr);
 BIT_FLAGS has_sh_elec(PlayerType *player_ptr);
 BIT_FLAGS has_sh_cold(PlayerType *player_ptr);
 BIT_FLAGS has_easy_spell(PlayerType *player_ptr);
-BIT_FLAGS has_heavy_spell(PlayerType *player_ptr);
+BIT_FLAGS has_hard_spell(PlayerType *player_ptr);
 BIT_FLAGS has_hold_exp(PlayerType *player_ptr);
 BIT_FLAGS has_see_inv(PlayerType *player_ptr);
 BIT_FLAGS has_magic_mastery(PlayerType *player_ptr);
index c60a1d8..0d45a15 100644 (file)
@@ -306,7 +306,7 @@ static void update_bonuses(PlayerType *player_ptr)
     player_ptr->anti_magic = has_anti_magic(player_ptr);
     player_ptr->anti_tele = has_anti_tele(player_ptr);
     player_ptr->easy_spell = has_easy_spell(player_ptr);
-    player_ptr->heavy_spell = has_heavy_spell(player_ptr);
+    player_ptr->hard_spell = has_hard_spell(player_ptr);
     player_ptr->hold_exp = has_hold_exp(player_ptr);
     player_ptr->see_inv = has_see_inv(player_ptr);
     player_ptr->free_act = has_free_act(player_ptr);
index 89efd04..3bfbc0b 100644 (file)
@@ -332,7 +332,7 @@ const std::vector<essence_drain_type> Smith::essence_drain_info_table = {
     { TR_EASY2_WEAPON, { SmithEssenceType::EASY2_WEAPON }, 10 },
     { TR_DOWN_SAVING, {}, -1 },
     { TR_NO_AC, {}, -1 },
-    { TR_HEAVY_SPELL, {}, -1 },
+    { TR_XXX_142, {}, -1 },
     { TR_RES_TIME, { SmithEssenceType::RES_TIME }, 10 },
     { TR_RES_WATER, { SmithEssenceType::RES_WATER }, 10 },
     { TR_INVULN_ARROW, {}, 0 },
index c61c11f..6887faa 100644 (file)
@@ -73,7 +73,7 @@ PERCENTAGE mod_spell_chance_1(PlayerType *player_ptr, PERCENTAGE chance)
 {
     chance += player_ptr->to_m_chance;
 
-    if (player_ptr->heavy_spell) {
+    if (player_ptr->hard_spell) {
         chance += 20;
     }
 
@@ -105,7 +105,7 @@ PERCENTAGE mod_spell_chance_2(PlayerType *player_ptr, PERCENTAGE chance)
     if (player_ptr->dec_mana) {
         chance--;
     }
-    if (player_ptr->heavy_spell) {
+    if (player_ptr->hard_spell) {
         chance += 5;
     }
     return std::max(chance, 0);
index 33dcc8d..8088315 100644 (file)
@@ -335,7 +335,7 @@ public:
     BIT_FLAGS earthquake{}; //!< 地震を起こす装備をしている / Earthquake blows
     BIT_FLAGS dec_mana{};
     BIT_FLAGS easy_spell{};
-    BIT_FLAGS heavy_spell{};
+    BIT_FLAGS hard_spell{};
     BIT_FLAGS warning{};
     BIT_FLAGS mighty_throw{};
     BIT_FLAGS see_nocto{}; /* Noctovision */