-/*!
+/*!
* @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->name2 == EgoType::NONE) {
- auto *k_ptr = &k_info[this->o_ptr->k_idx];
+ while (!this->o_ptr->is_ego()) {
+ 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;
}
- this->o_ptr->name2 = EgoType::AMU_SLOW_D;
+ this->o_ptr->ego_idx = EgoType::AMU_SLOW_D;
break;
case 3:
case 4:
break;
}
- this->o_ptr->name2 = EgoType::AMU_INFRA;
+ this->o_ptr->ego_idx = EgoType::AMU_INFRA;
break;
case 5:
case 6:
- if (k_ptr->flags.has(TR_SEE_INVIS)) {
+ if (baseitem.flags.has(TR_SEE_INVIS)) {
break;
}
- this->o_ptr->name2 = EgoType::AMU_SEE_INVIS;
+ this->o_ptr->ego_idx = EgoType::AMU_SEE_INVIS;
break;
case 7:
case 8:
- if (k_ptr->flags.has(TR_HOLD_EXP)) {
+ if (baseitem.flags.has(TR_HOLD_EXP)) {
break;
}
- this->o_ptr->name2 = EgoType::AMU_HOLD_EXP;
+ 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->name2 = EgoType::AMU_LEVITATION;
+ this->o_ptr->ego_idx = EgoType::AMU_LEVITATION;
break;
case 10:
case 11:
case 21:
- this->o_ptr->name2 = EgoType::AMU_AC;
+ 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;
}
if (m_bonus(10, this->level) > 8) {
- this->o_ptr->name2 = EgoType::AMU_RES_FIRE_;
+ this->o_ptr->ego_idx = EgoType::AMU_RES_FIRE_;
break;
}
- this->o_ptr->name2 = EgoType::AMU_RES_FIRE;
+ 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;
}
if (m_bonus(10, this->level) > 8) {
- this->o_ptr->name2 = EgoType::AMU_RES_COLD_;
+ this->o_ptr->ego_idx = EgoType::AMU_RES_COLD_;
break;
}
- this->o_ptr->name2 = EgoType::AMU_RES_COLD;
+ 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;
}
if (m_bonus(10, this->level) > 8) {
- this->o_ptr->name2 = EgoType::AMU_RES_ELEC_;
+ this->o_ptr->ego_idx = EgoType::AMU_RES_ELEC_;
break;
}
- this->o_ptr->name2 = EgoType::AMU_RES_ELEC;
+ 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;
}
if (m_bonus(10, this->level) > 8) {
- this->o_ptr->name2 = EgoType::AMU_RES_ACID_;
+ this->o_ptr->ego_idx = EgoType::AMU_RES_ACID_;
break;
}
- this->o_ptr->name2 = EgoType::AMU_RES_ACID;
+ this->o_ptr->ego_idx = EgoType::AMU_RES_ACID;
break;
case 16:
case 17:
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->name2 = EgoType::AMU_D_DOOR;
+ this->o_ptr->ego_idx = EgoType::AMU_D_DOOR;
break;
}
if (one_in_(2)) {
- this->o_ptr->name2 = EgoType::AMU_JUMP;
+ this->o_ptr->ego_idx = EgoType::AMU_JUMP;
break;
}
- this->o_ptr->name2 = EgoType::AMU_TELEPORT;
+ this->o_ptr->ego_idx = EgoType::AMU_TELEPORT;
break;
case SV_AMULET_RESIST_ACID:
if ((m_bonus(10, this->level) > 6) && one_in_(2)) {
- this->o_ptr->name2 = EgoType::AMU_RES_ACID_;
+ this->o_ptr->ego_idx = EgoType::AMU_RES_ACID_;
}
break;
case SV_AMULET_SEARCHING:
- this->o_ptr->name2 = EgoType::AMU_STEALTH;
+ this->o_ptr->ego_idx = EgoType::AMU_STEALTH;
break;
case SV_AMULET_BRILLIANCE:
if (!one_in_(3)) {
break;
}
- this->o_ptr->name2 = EgoType::AMU_IDENT;
+ this->o_ptr->ego_idx = EgoType::AMU_IDENT;
break;
case SV_AMULET_CHARISMA:
if (!one_in_(3)) {
break;
}
- this->o_ptr->name2 = EgoType::AMU_CHARM;
+ this->o_ptr->ego_idx = EgoType::AMU_CHARM;
break;
case SV_AMULET_THE_MAGI:
if (one_in_(2)) {
break;
}
- this->o_ptr->name2 = EgoType::AMU_GREAT;
+ this->o_ptr->ego_idx = EgoType::AMU_GREAT;
break;
case SV_AMULET_RESISTANCE:
if (!one_in_(5)) {
break;
}
- this->o_ptr->name2 = EgoType::AMU_DEFENDER;
+ this->o_ptr->ego_idx = EgoType::AMU_DEFENDER;
break;
case SV_AMULET_TELEPATHY:
if (!one_in_(3)) {
break;
}
- this->o_ptr->name2 = EgoType::AMU_DETECTION;
+ this->o_ptr->ego_idx = EgoType::AMU_DETECTION;
break;
default:
break;
this->o_ptr->pval = 0 - this->o_ptr->pval;
}
- while (this->o_ptr->name2 == EgoType::NONE) {
- auto *k_ptr = &k_info[this->o_ptr->k_idx];
+ while (!this->o_ptr->is_ego()) {
+ 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->name2 = EgoType::AMU_DRAIN_EXP;
+ this->o_ptr->ego_idx = EgoType::AMU_DRAIN_EXP;
break;
case 2:
- this->o_ptr->name2 = EgoType::AMU_FOOL;
+ 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->name2 = EgoType::AMU_AGGRAVATE;
+ 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;
}
- this->o_ptr->name2 = EgoType::AMU_TY_CURSE;
+ this->o_ptr->ego_idx = EgoType::AMU_TY_CURSE;
break;
case 5:
- this->o_ptr->name2 = EgoType::AMU_NAIVETY;
+ this->o_ptr->ego_idx = EgoType::AMU_NAIVETY;
break;
}
}