/*!
- * @brief 防具系のアイテムを強化して(恐らく床に)生成する処理
- * @date 2020/06/02
+ * @brief 武器でも防具でもアクセサリでもない、その他のアイテム群を生成・強化する処理
+ * @date 2022/02/23
* @author Hourier
- * @todo ちょっと長い。要分割
+ * @details 他との兼ね合いでEnchanterとなっているが、油つぼ・人形・死体・像は生成のみで強化はしない
*/
#include "object-enchant/others/apply-magic-others.h"
#include "util/bit-flags-calculator.h"
#include "view/display-messages.h"
+/*!
+ * @brief コンストラクタ
+ * @param player_ptr プレイヤーへの参照ポインタ
+ * @param o_ptr 強化を与えたい/生成したいオブジェクトの構造体参照ポインタ
+ * @param power 生成ランク
+ * @details power > 2はデバッグ専用.
+ */
OtherItemsEnchanter::OtherItemsEnchanter(PlayerType *player_ptr, ObjectType *o_ptr)
: player_ptr(player_ptr)
, o_ptr(o_ptr)
}
/*!
- * @brief その他雑多のオブジェクトに生成ランクごとの強化を与えるサブルーチン
- * Apply magic to an item known to be "boring"
- * @param player_ptr プレイヤーへの参照ポインタ
- * @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
- * @param power 生成ランク
+ * @brief その他雑多のオブジェクトに生成ランクごとの強化を与える
* @details power > 2はデバッグ専用.
*/
void OtherItemsEnchanter::apply_magic()
object_known(this->o_ptr);
break;
case ItemKindType::FIGURINE:
- this->enchant_figurine();
+ this->generate_figurine();
break;
case ItemKindType::CORPSE:
- this->enchant_corpse();
+ this->generate_corpse();
break;
case ItemKindType::STATUE:
- this->enchant_statue();
+ this->generate_statue();
break;
case ItemKindType::CHEST:
- this->enchant_chest();
+ this->generate_chest();
break;
default:
break;
this->o_ptr->pval = k_ptr->pval / 2 + randint1((k_ptr->pval + 1) / 2);
}
-void OtherItemsEnchanter::enchant_figurine()
+/*
+ * @brief ランダムに選択したモンスター種族IDからその人形を作る
+ * @details
+ * ツチノコの人形は作らない
+ * レアリティが1~100のものだけ生成対象になる
+ * レベルの高い人形ほど生成されにくい
+ * たまに呪われる
+ */
+void OtherItemsEnchanter::generate_figurine()
{
auto *floor_ptr = this->player_ptr->current_floor_ptr;
short r_idx;
}
}
-void OtherItemsEnchanter::enchant_corpse()
+/*
+ * @brief ランダムに選択したモンスター種族IDからその死体/骨を作る
+ * @details
+ * そもそも死体も骨も落とさないモンスターは対象外
+ * ユニークやあやしい影等、そこらに落ちている死体としてふさわしくないものは弾く
+ * レアリティが1~100のものだけ生成対象になる (はず)
+ * レベルの高い死体/骨ほど生成されにくい
+ */
+void OtherItemsEnchanter::generate_corpse()
{
uint32_t match = 0;
if (this->o_ptr->sval == SV_SKELETON) {
object_known(this->o_ptr);
}
-void OtherItemsEnchanter::enchant_statue()
+/*
+ * @brief ランダムに選択したモンスター種族IDからその像を作る
+ * @details レアリティが1以上のものだけ生成対象になる
+ */
+void OtherItemsEnchanter::generate_statue()
{
short r_idx;
auto &r_ref = r_info[0];
object_known(this->o_ptr);
}
-void OtherItemsEnchanter::enchant_chest()
+/*
+ * @brief 箱を生成する
+ * @details 箱にはレベルがあり、箱の召喚トラップが発動すると箱レベルと同等のモンスターが召喚される
+ */
+void OtherItemsEnchanter::generate_chest()
{
auto obj_level = k_info[this->o_ptr->k_idx].level;
if (obj_level <= 0) {