<ClInclude Include="..\..\src\mind\mind-samurai.h" />\r
<ClInclude Include="..\..\src\mind\mind-warrior.h" />\r
<ClInclude Include="..\..\src\racial\racial-vampire.h" />\r
- <ClInclude Include="..\..\src\object-enchant\accessory-enchanter-base.h" />\r
+ <ClInclude Include="..\..\src\object-enchant\enchanter-base.h" />\r
<ClInclude Include="..\..\src\object-enchant\apply-magic-armor.h" />\r
<ClInclude Include="..\..\src\object-enchant\apply-magic-others.h" />\r
<ClInclude Include="..\..\src\object-enchant\apply-magic-weapon.h" />\r
<ClInclude Include="..\..\src\object-enchant\apply-magic-armor.h">\r
<Filter>object-enchant</Filter>\r
</ClInclude>\r
- <ClInclude Include="..\..\src\object-enchant\accessory-enchanter-base.h">\r
+ <ClInclude Include="..\..\src\object-enchant\enchanter-base.h">\r
<Filter>object-enchant</Filter>\r
</ClInclude>\r
<ClInclude Include="..\..\src\object-enchant\apply-magic-others.h">\r
object-activation/activation-teleport.cpp object-activation/activation-teleport.h \
object-activation/activation-util.cpp object-activation/activation-util.h \
\
- object-enchant/accessory-enchanter-base.h \
object-enchant/activation-info-table.cpp object-enchant/activation-info-table.h \
object-enchant/apply-magic.cpp object-enchant/apply-magic.h \
object-enchant/apply-magic-amulet.cpp object-enchant/apply-magic-amulet.h \
object-enchant/apply-magic-ring.cpp object-enchant/apply-magic-ring.h \
object-enchant/apply-magic-weapon.cpp object-enchant/apply-magic-weapon.h \
object-enchant/dragon-breaths-table.cpp object-enchant/dragon-breaths-table.h \
+ object-enchant/enchanter-base.h \
object-enchant/object-boost.cpp object-enchant/object-boost.h \
object-enchant/object-curse.cpp object-enchant/object-curse.h \
object-enchant/object-ego.cpp object-enchant/object-ego.h \
case RACE_ANDROID:
/* Flasks of oil */
object_prep(creature_ptr, q_ptr, lookup_kind(TV_FLASK, SV_ANY));
- apply_magic(creature_ptr, q_ptr, 1, AM_NO_FIXED_ART);
+ apply_magic_to_object(creature_ptr, q_ptr, 1, AM_NO_FIXED_ART);
q_ptr->number = (ITEM_NUMBER)rand_range(7, 12);
add_outfit(creature_ptr, q_ptr);
break;
coin_type = 0;
}
- apply_magic(player_ptr, o_ptr, floor_ptr->base_level, AM_NO_FIXED_ART | AM_GOOD);
+ apply_magic_to_object(player_ptr, o_ptr, floor_ptr->base_level, AM_NO_FIXED_ART | AM_GOOD);
drop_here(floor_ptr, o_ptr, *qtwg_ptr->y, *qtwg_ptr->x);
}
object_prep(owner_ptr, j_ptr, k_idx);
}
- apply_magic(owner_ptr, j_ptr, floor_ptr->object_level, mode);
+ apply_magic_to_object(owner_ptr, j_ptr, floor_ptr->object_level, mode);
switch (j_ptr->tval) {
case TV_SPIKE:
case TV_SHOT:
msg_format(_("これで合計 %d ポイント獲得しました。", "You earned %d point%s total."), num, (num > 1 ? "s" : ""));
object_prep(player_ptr, &forge, lookup_kind(prize_list[num - 1].tval, prize_list[num - 1].sval));
- apply_magic(player_ptr, &forge, player_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART);
+ apply_magic_to_object(player_ptr, &forge, player_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART);
object_aware(player_ptr, &forge);
object_known(&forge);
q_ptr->number = (byte)rand_range(15, 30);
object_aware(creature_ptr, q_ptr);
object_known(q_ptr);
- apply_magic(creature_ptr, q_ptr, creature_ptr->lev, AM_NO_FIXED_ART);
+ apply_magic_to_object(creature_ptr, q_ptr, creature_ptr->lev, AM_NO_FIXED_ART);
q_ptr->discount = 99;
s16b slot = store_item_to_inventory(creature_ptr, q_ptr);
GAME_TEXT o_name[MAX_NLEN];
q_ptr->number = (byte)rand_range(5, 10);
object_aware(creature_ptr, q_ptr);
object_known(q_ptr);
- apply_magic(creature_ptr, q_ptr, creature_ptr->lev, AM_NO_FIXED_ART);
+ apply_magic_to_object(creature_ptr, q_ptr, creature_ptr->lev, AM_NO_FIXED_ART);
q_ptr->discount = 99;
GAME_TEXT o_name[MAX_NLEN];
describe_flavor(creature_ptr, o_name, q_ptr, 0);
q_ptr->number = (byte)rand_range(4, 8);
object_aware(creature_ptr, q_ptr);
object_known(q_ptr);
- apply_magic(creature_ptr, q_ptr, creature_ptr->lev, AM_NO_FIXED_ART);
+ apply_magic_to_object(creature_ptr, q_ptr, creature_ptr->lev, AM_NO_FIXED_ART);
q_ptr->discount = 99;
GAME_TEXT o_name[MAX_NLEN];
describe_flavor(creature_ptr, o_name, q_ptr, 0);
object_type forge;
object_type *q_ptr = &forge;
object_prep(player_ptr, q_ptr, lookup_kind(arena_info[player_ptr->arena_number].tval, arena_info[player_ptr->arena_number].sval));
- apply_magic(player_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART);
+ apply_magic_to_object(player_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART);
(void)drop_near(player_ptr, q_ptr, -1, md_ptr->md_y, md_ptr->md_x);
}
object_type forge;
object_type *q_ptr = &forge;
object_prep(player_ptr, q_ptr, lookup_kind(TV_CORPSE, (corpse ? SV_CORPSE : SV_SKELETON)));
- apply_magic(player_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART);
+ apply_magic_to_object(player_ptr, q_ptr, floor_ptr->object_level, AM_NO_FIXED_ART);
q_ptr->pval = md_ptr->m_ptr->r_idx;
(void)drop_near(player_ptr, q_ptr, -1, md_ptr->md_y, md_ptr->md_x);
}
object_type forge;
object_type *q_ptr = &forge;
object_prep(player_ptr, q_ptr, k_idx);
- apply_magic(player_ptr, q_ptr, player_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART | AM_GOOD);
+ apply_magic_to_object(player_ptr, q_ptr, player_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART | AM_GOOD);
(void)drop_near(player_ptr, q_ptr, -1, md_ptr->md_y, md_ptr->md_x);
}
object_type forge;
object_type *q_ptr = &forge;
object_prep(player_ptr, q_ptr, lookup_kind(TV_SWORD, SV_BLADE_OF_CHAOS));
- apply_magic(player_ptr, q_ptr, player_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART | md_ptr->mo_mode);
+ apply_magic_to_object(player_ptr, q_ptr, player_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART | md_ptr->mo_mode);
(void)drop_near(player_ptr, q_ptr, -1, md_ptr->md_y, md_ptr->md_x);
}
object_type *q_ptr = &forge;
object_prep(player_ptr, q_ptr, lookup_kind(TV_HAFTED, SV_GROND));
q_ptr->name1 = ART_GROND;
- apply_magic(player_ptr, q_ptr, -1, AM_GOOD | AM_GREAT);
+ apply_magic_to_object(player_ptr, q_ptr, -1, AM_GOOD | AM_GREAT);
(void)drop_near(player_ptr, q_ptr, -1, md_ptr->md_y, md_ptr->md_x);
q_ptr = &forge;
object_prep(player_ptr, q_ptr, lookup_kind(TV_CROWN, SV_CHAOS));
q_ptr->name1 = ART_CHAOS;
- apply_magic(player_ptr, q_ptr, -1, AM_GOOD | AM_GREAT);
+ apply_magic_to_object(player_ptr, q_ptr, -1, AM_GOOD | AM_GREAT);
(void)drop_near(player_ptr, q_ptr, -1, md_ptr->md_y, md_ptr->md_x);
}
object_type forge;
object_type *q_ptr = &forge;
object_prep(player_ptr, q_ptr, lookup_kind(TV_CHEST, SV_CHEST_KANDUME));
- apply_magic(player_ptr, q_ptr, player_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART);
+ apply_magic_to_object(player_ptr, q_ptr, player_ptr->current_floor_ptr->object_level, AM_NO_FIXED_ART);
(void)drop_near(player_ptr, q_ptr, -1, md_ptr->md_y, md_ptr->md_x);
}
+++ /dev/null
-#pragma once
-
-#include "system/angband.h"
-
-typedef struct object_type object_type;
-typedef struct player_type player_type;
-class AccessoryEnchanterBase {
-public:
- virtual void apply_magic_accessary() = 0;
-
-protected:
- AccessoryEnchanterBase() = default;
- virtual ~AccessoryEnchanterBase() = default;
- virtual void enchant() = 0;
- virtual void give_ego_index() = 0;
- virtual void give_high_ego_index() = 0;
- virtual void give_cursed() = 0;
-};
* @return なし
* @details power > 2 is debug only
*/
-void AmuletEnchanter::apply_magic_accessary()
+void AmuletEnchanter::apply_magic()
{
enchant();
if ((one_in_(150) && (this->power > 0) && !object_is_cursed(this->o_ptr) && (this->level > 79)) || (this->power > 2)) {
#pragma once
-#include "object-enchant/accessory-enchanter-base.h"
+#include "object-enchant/enchanter-base.h"
#include "system/angband.h"
struct object_type;
struct player_type;
-class AmuletEnchanter : AccessoryEnchanterBase {
+class AmuletEnchanter : EnchanterBase {
public:
AmuletEnchanter(player_type *owner_ptr, object_type *o_ptr, DEPTH level, int power);
AmuletEnchanter() = delete;
virtual ~AmuletEnchanter() = default;
- void apply_magic_accessary() override;
+ void apply_magic() override;
protected:
void enchant() override;
* @return なし
* @details power > 2 is debug only
*/
-void RingEnchanter::apply_magic_accessary()
+void RingEnchanter::apply_magic()
{
enchant();
if ((one_in_(400) && (this->power > 0) && !object_is_cursed(this->o_ptr) && (this->level > 79)) || (this->power > 2)) {
#pragma once
-#include "object-enchant/accessory-enchanter-base.h"
+#include "object-enchant/enchanter-base.h"
#include "system/angband.h"
struct object_type;
struct player_type;
-class RingEnchanter : AccessoryEnchanterBase {
+class RingEnchanter : EnchanterBase {
public:
RingEnchanter(player_type *owner_ptr, object_type *o_ptr, DEPTH level, int power);
RingEnchanter() = delete;
virtual ~RingEnchanter() = default;
- void apply_magic_accessary() override;
+ void apply_magic() override;
protected:
void enchant() override;
* @details
* エゴ&アーティファクトの生成、呪い、pval強化
*/
-void apply_magic(player_type *owner_ptr, object_type *o_ptr, DEPTH lev, BIT_FLAGS mode)
+void apply_magic_to_object(player_type *owner_ptr, object_type *o_ptr, DEPTH lev, BIT_FLAGS mode)
{
if (owner_ptr->pseikaku == PERSONALITY_MUNCHKIN)
lev += randint0(owner_ptr->lev / 2 + 10);
power = -1;
}
- RingEnchanter(owner_ptr, o_ptr, lev, power).apply_magic_accessary();
+ RingEnchanter(owner_ptr, o_ptr, lev, power).apply_magic();
break;
case TV_AMULET: {
if (!power && (randint0(100) < 50)) {
power = -1;
}
- AmuletEnchanter(owner_ptr, o_ptr, lev, power).apply_magic_accessary();
+ AmuletEnchanter(owner_ptr, o_ptr, lev, power).apply_magic();
break;
}
default: {
typedef struct object_type object_type;
typedef struct player_type player_type;
-void apply_magic(player_type *owner_type, object_type *o_ptr, DEPTH lev, BIT_FLAGS mode);
+void apply_magic_to_object(player_type *owner_type, object_type *o_ptr, DEPTH lev, BIT_FLAGS mode);
--- /dev/null
+#pragma once
+
+/*
+ * @file enchanter-base.h
+ * @brief エゴ・ランダムアーティファクト・呪われたアイテムをベースアイテムから生成する処理の基底クラス
+ * @author Hourier
+ * @date 2021/04/30
+ * @details 純粋仮想関数につき、必要なメンバ変数は派生クラスで設定すること
+ */
+
+#include "system/angband.h"
+
+typedef struct object_type object_type;
+typedef struct player_type player_type;
+class EnchanterBase {
+public:
+ virtual void apply_magic() = 0;
+
+protected:
+ EnchanterBase() = default;
+ virtual ~EnchanterBase() = default;
+ virtual void enchant() = 0;
+ virtual void give_ego_index() = 0;
+ virtual void give_high_ego_index() = 0;
+ virtual void give_cursed() = 0;
+};
object_prep(creature_ptr, i_ptr, k_idx);
if (a_idx)
i_ptr->name1 = a_idx;
- apply_magic(creature_ptr, i_ptr, 1, AM_NO_FIXED_ART);
+ apply_magic_to_object(creature_ptr, i_ptr, 1, AM_NO_FIXED_ART);
if (amuse_info[i].flag & AMS_NO_UNIQUE) {
if (r_info[i_ptr->pval].flags1 & RF1_UNIQUE)
object_type *q_ptr;
q_ptr = &forge;
object_prep(player_ptr, q_ptr, k_idx);
- apply_magic(player_ptr, q_ptr, level, AM_NO_FIXED_ART);
+ apply_magic_to_object(player_ptr, q_ptr, level, AM_NO_FIXED_ART);
if (!(*store_will_buy)(player_ptr, q_ptr))
continue;
/* Apply bad magic, but first clear object */
case 'w':
object_prep(owner_ptr, q_ptr, o_ptr->k_idx);
- apply_magic(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD | AM_GREAT | AM_CURSED);
+ apply_magic_to_object(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD | AM_GREAT | AM_CURSED);
break;
/* Apply bad magic, but first clear object */
case 'c':
object_prep(owner_ptr, q_ptr, o_ptr->k_idx);
- apply_magic(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD | AM_CURSED);
+ apply_magic_to_object(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD | AM_CURSED);
break;
/* Apply normal magic, but first clear object */
case 'n':
object_prep(owner_ptr, q_ptr, o_ptr->k_idx);
- apply_magic(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART);
+ apply_magic_to_object(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART);
break;
/* Apply good magic, but first clear object */
case 'g':
object_prep(owner_ptr, q_ptr, o_ptr->k_idx);
- apply_magic(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD);
+ apply_magic_to_object(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD);
break;
/* Apply great magic, but first clear object */
case 'e':
object_prep(owner_ptr, q_ptr, o_ptr->k_idx);
- apply_magic(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD | AM_GREAT);
+ apply_magic_to_object(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART | AM_GOOD | AM_GREAT);
break;
/* Apply special magic, but first clear object */
case 's':
object_prep(owner_ptr, q_ptr, o_ptr->k_idx);
- apply_magic(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_GOOD | AM_GREAT | AM_SPECIAL);
+ apply_magic_to_object(owner_ptr, q_ptr, owner_ptr->current_floor_ptr->dun_level, AM_GOOD | AM_GREAT | AM_SPECIAL);
if (!object_is_artifact(q_ptr))
become_random_artifact(owner_ptr, q_ptr, FALSE);
if (must || ok_art) {
do {
object_prep(caster_ptr, o_ptr, k_idx);
- apply_magic(caster_ptr, o_ptr, k_ptr->level, (AM_SPECIAL | AM_NO_FIXED_ART));
+ apply_magic_to_object(caster_ptr, o_ptr, k_ptr->level, (AM_SPECIAL | AM_NO_FIXED_ART));
} while (!o_ptr->art_name || o_ptr->name1 || o_ptr->name2 || object_is_cursed(o_ptr));
if (o_ptr->art_name)
int i = 0;
for (i = 0; i < max_roll; i++) {
object_prep(caster_ptr, o_ptr, k_idx);
- (void)apply_magic(caster_ptr, o_ptr, k_ptr->level, (AM_GREAT | AM_NO_FIXED_ART));
+ (void)apply_magic_to_object(caster_ptr, o_ptr, k_ptr->level, (AM_GREAT | AM_NO_FIXED_ART));
if (o_ptr->name1 || o_ptr->art_name)
continue;
} else {
for (int i = 0; i < 100; i++) {
object_prep(caster_ptr, o_ptr, k_idx);
- apply_magic(caster_ptr, o_ptr, 0, (AM_NO_FIXED_ART));
+ apply_magic_to_object(caster_ptr, o_ptr, 0, (AM_NO_FIXED_ART));
if (!object_is_cursed(o_ptr))
break;
}
object_type *q_ptr;
q_ptr = &forge;
object_prep(caster_ptr, q_ptr, k_idx);
- apply_magic(caster_ptr, q_ptr, caster_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART);
+ apply_magic_to_object(caster_ptr, q_ptr, caster_ptr->current_floor_ptr->dun_level, AM_NO_FIXED_ART);
(void)drop_near(caster_ptr, q_ptr, -1, caster_ptr->y, caster_ptr->x);
msg_print("Allocated.");
}