-/*!
+/*!
* @brief アミュレットを強化生成する処理
* @date 2021/04/30
* @author Hourier
#include "object-enchant/object-ego.h"
#include "object-enchant/special-object-flags.h"
#include "object-enchant/trc-types.h"
-#include "object/object-kind.h"
#include "sv-definition/sv-amulet-types.h"
-#include "system/object-type-definition.h"
+#include "system/baseitem-info.h"
+#include "system/item-entity.h"
#include "system/player-type-definition.h"
#include "util/bit-flags-calculator.h"
* @param level 生成基準階
* @param power 生成ランク
*/
-AmuletEnchanter::AmuletEnchanter(PlayerType *player_ptr, ObjectType *o_ptr, DEPTH level, int power)
+AmuletEnchanter::AmuletEnchanter(PlayerType *player_ptr, ItemEntity *o_ptr, DEPTH level, int power)
: player_ptr(player_ptr)
, o_ptr(o_ptr)
, level(level)
void AmuletEnchanter::sval_enchant()
{
- switch (this->o_ptr->sval) {
+ const auto sval = this->o_ptr->bi_key.sval();
+ if (!sval) {
+ return;
+ }
+
+ switch (sval.value()) {
case SV_AMULET_INTELLIGENCE:
case SV_AMULET_WISDOM:
case SV_AMULET_CHARISMA:
void AmuletEnchanter::give_ego_index()
{
while (!this->o_ptr->is_ego()) {
- auto *k_ptr = &k_info[this->o_ptr->k_idx];
+ const auto &baseitem = this->o_ptr->get_baseitem();
switch (randint1(21)) {
case 1:
case 2:
- if (k_ptr->flags.has(TR_SLOW_DIGEST)) {
+ if (baseitem.flags.has(TR_SLOW_DIGEST)) {
break;
}
break;
case 5:
case 6:
- if (k_ptr->flags.has(TR_SEE_INVIS)) {
+ if (baseitem.flags.has(TR_SEE_INVIS)) {
break;
}
break;
case 7:
case 8:
- if (k_ptr->flags.has(TR_HOLD_EXP)) {
+ if (baseitem.flags.has(TR_HOLD_EXP)) {
break;
}
this->o_ptr->ego_idx = EgoType::AMU_HOLD_EXP;
break;
case 9:
- if (k_ptr->flags.has(TR_LEVITATION)) {
+ if (baseitem.flags.has(TR_LEVITATION)) {
break;
}
this->o_ptr->ego_idx = EgoType::AMU_AC;
break;
case 12:
- if (k_ptr->flags.has(TR_RES_FIRE)) {
+ if (baseitem.flags.has(TR_RES_FIRE)) {
break;
}
this->o_ptr->ego_idx = EgoType::AMU_RES_FIRE;
break;
case 13:
- if (k_ptr->flags.has(TR_RES_COLD)) {
+ if (baseitem.flags.has(TR_RES_COLD)) {
break;
}
this->o_ptr->ego_idx = EgoType::AMU_RES_COLD;
break;
case 14:
- if (k_ptr->flags.has(TR_RES_ELEC)) {
+ if (baseitem.flags.has(TR_RES_ELEC)) {
break;
}
this->o_ptr->ego_idx = EgoType::AMU_RES_ELEC;
break;
case 15:
- if (k_ptr->flags.has(TR_RES_ACID)) {
+ if (baseitem.flags.has(TR_RES_ACID)) {
break;
}
void AmuletEnchanter::give_high_ego_index()
{
- switch (this->o_ptr->sval) {
+ const auto sval = this->o_ptr->bi_key.sval();
+ if (!sval) {
+ return;
+ }
+
+ switch (sval.value()) {
case SV_AMULET_TELEPORT:
if (m_bonus(10, this->level) > 9) {
this->o_ptr->ego_idx = EgoType::AMU_D_DOOR;
}
while (!this->o_ptr->is_ego()) {
- auto *k_ptr = &k_info[this->o_ptr->k_idx];
+ const auto &baseitem = this->o_ptr->get_baseitem();
switch (randint1(5)) {
case 1:
- if (k_ptr->flags.has(TR_DRAIN_EXP)) {
+ if (baseitem.flags.has(TR_DRAIN_EXP)) {
break;
}
this->o_ptr->ego_idx = EgoType::AMU_FOOL;
break;
case 3:
- if (k_ptr->flags.has(TR_AGGRAVATE)) {
+ if (baseitem.flags.has(TR_AGGRAVATE)) {
break;
}
this->o_ptr->ego_idx = EgoType::AMU_AGGRAVATE;
break;
case 4:
- if (k_ptr->flags.has(TR_TY_CURSE)) {
+ if (baseitem.flags.has(TR_TY_CURSE)) {
break;
}