OSDN Git Service

[Fix] #2470 ダイヤモンド・エッジだけは殺戮修正が付くように再修正した
authorHourier <66951241+Hourier@users.noreply.github.com>
Sat, 9 Apr 2022 13:41:57 +0000 (22:41 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sat, 9 Apr 2022 13:57:30 +0000 (22:57 +0900)
13 files changed:
src/object-enchant/weapon/abstract-weapon-enchanter.cpp
src/object-enchant/weapon/abstract-weapon-enchanter.h
src/object-enchant/weapon/apply-magic-arrow.cpp
src/object-enchant/weapon/apply-magic-bow.cpp
src/object-enchant/weapon/apply-magic-digging.cpp
src/object-enchant/weapon/apply-magic-hafted.cpp
src/object-enchant/weapon/apply-magic-hafted.h
src/object-enchant/weapon/apply-magic-polearm.cpp
src/object-enchant/weapon/apply-magic-polearm.h
src/object-enchant/weapon/apply-magic-sword.cpp
src/object-enchant/weapon/apply-magic-sword.h
src/object-enchant/weapon/melee-weapon-enchanter.cpp
src/object-enchant/weapon/melee-weapon-enchanter.h

index 2eeb7de..5d2f7c2 100644 (file)
@@ -18,17 +18,15 @@ void AbstractWeaponEnchanter::decide_skip()
     }
 }
 
-void AbstractWeaponEnchanter::apply_magic()
+/*!
+ * @brief 武器に殺戮修正を付与する
+ */
+void AbstractWeaponEnchanter::give_killing_bonus()
 {
     if (this->should_skip) {
         return;
     }
 
-    this->prepare_application();
-}
-
-void AbstractWeaponEnchanter::prepare_application()
-{
     auto tohit1 = static_cast<short>(randint1(5) + m_bonus(5, this->level));
     auto todam1 = static_cast<short>(randint1(5) + m_bonus(5, this->level));
     auto tohit2 = static_cast<short>(m_bonus(10, this->level));
index 973e5d9..b5c284b 100644 (file)
@@ -15,9 +15,6 @@ protected:
     int power;
     bool should_skip = false;
 
-    virtual void apply_magic();
+    void give_killing_bonus();
     virtual void decide_skip();
-
-private:
-    void prepare_application();
 };
index 13172a8..797cb1c 100644 (file)
@@ -35,6 +35,7 @@ void ArrowEnchanter::apply_magic()
         return;
     }
 
+    this->give_killing_bonus();
     if (this->power > 1) {
         if (this->power > 2) {
             become_random_artifact(this->player_ptr, this->o_ptr, false);
index c5340ee..ea7e5cb 100644 (file)
@@ -34,6 +34,7 @@ void BowEnchanter::apply_magic()
         return;
     }
 
+    this->give_killing_bonus();
     if (this->power > 1) {
         if ((this->power > 2) || one_in_(20)) {
             become_random_artifact(this->player_ptr, this->o_ptr, false);
index c3dc70e..9bdec38 100644 (file)
@@ -33,6 +33,7 @@ void DiggingEnchanter::apply_magic()
         return;
     }
 
+    this->give_killing_bonus();
     if (this->power > 1) {
         if ((this->power > 2) || one_in_(30)) {
             become_random_artifact(this->player_ptr, this->o_ptr, false);
index 61599b7..79bdbcc 100644 (file)
@@ -23,6 +23,12 @@ HaftedEnchanter::HaftedEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPT
 {
 }
 
+void HaftedEnchanter::apply_magic()
+{
+    this->decide_skip();
+    MeleeWeaponEnchanter::apply_magic();
+}
+
 void HaftedEnchanter::give_ego_index()
 {
     while (true) {
index 0fb8384..8c283fe 100644 (file)
@@ -9,6 +9,8 @@ class HaftedEnchanter : public MeleeWeaponEnchanter {
 public:
     HaftedEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH level, int power);
 
+    void apply_magic() override;
+
 protected:
     void sval_enchant() override{};
     void give_ego_index() override;
index 752e5e9..b493bb9 100644 (file)
@@ -22,6 +22,12 @@ PolearmEnchanter::PolearmEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DE
 {
 }
 
+void PolearmEnchanter::apply_magic()
+{
+    this->decide_skip();
+    MeleeWeaponEnchanter::apply_magic();
+}
+
 void PolearmEnchanter::decide_skip()
 {
     AbstractWeaponEnchanter::decide_skip();
index 0c33140..1ea4011 100644 (file)
@@ -9,6 +9,8 @@ class PolearmEnchanter : public MeleeWeaponEnchanter {
 public:
     PolearmEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH level, int power);
 
+    void apply_magic() override;
+
 protected:
     void decide_skip() override;
     void sval_enchant() override{};
index c5dc492..9eed94c 100644 (file)
@@ -27,10 +27,24 @@ SwordEnchanter::SwordEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH
 void SwordEnchanter::decide_skip()
 {
     AbstractWeaponEnchanter::decide_skip();
-    this->should_skip |= this->o_ptr->sval == SV_DIAMOND_EDGE;
     this->should_skip |= this->o_ptr->sval == SV_POISON_NEEDLE;
 }
 
+void SwordEnchanter::apply_magic()
+{
+    this->decide_skip();
+    if (this->should_skip) {
+        return;
+    }
+
+    this->give_killing_bonus();
+    if (this->o_ptr->sval == SV_DIAMOND_EDGE) {
+        return;
+    }
+
+    MeleeWeaponEnchanter::apply_magic();
+}
+
 void SwordEnchanter::give_ego_index()
 {
     while (true) {
index 9ec5d9a..8605359 100644 (file)
@@ -9,6 +9,8 @@ class SwordEnchanter : public MeleeWeaponEnchanter {
 public:
     SwordEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH level, int power);
 
+    void apply_magic() override;
+
 protected:
     void decide_skip() override;
     void sval_enchant() override{};
index 2ce437e..2a0075c 100644 (file)
@@ -20,8 +20,6 @@ MeleeWeaponEnchanter::MeleeWeaponEnchanter(PlayerType *player_ptr, ObjectType *o
  */
 void MeleeWeaponEnchanter::apply_magic()
 {
-    this->decide_skip();
-    AbstractWeaponEnchanter::apply_magic();
     if (this->should_skip) {
         return;
     }
index b723984..e5e4755 100644 (file)
@@ -16,6 +16,8 @@ protected:
 
     PlayerType *player_ptr;
 
+    void prepare_magic_application();
+
 private:
     void strengthen();
 };