OSDN Git Service

[Implement] 指定モンスターをクローンとして生成するデバッグコマンドを追加
authorSlimebreath6078 <slimebreath6078@yahoo.co.jp>
Sat, 30 Mar 2024 14:35:16 +0000 (23:35 +0900)
committerSlimebreath6078 <slimebreath6078@yahoo.co.jp>
Sat, 13 Apr 2024 04:32:53 +0000 (13:32 +0900)
コマンドキーは CTRL+N

src/wizard/cmd-wizard.cpp
src/wizard/wizard-spells.cpp
src/wizard/wizard-spells.h

index b743478..5e75bbb 100644 (file)
@@ -66,6 +66,7 @@ constexpr std::array debug_menu_table = {
     std::make_tuple('m', _("魔法の地図", "Magic mapping")),
     std::make_tuple('n', _("指定モンスター生成", "Summon target monster")),
     std::make_tuple('N', _("指定モンスターをペットとして生成", "Summon target monster as pet")),
+    std::make_tuple(KTRL('N'), _("指定モンスターをクローンとして生成", "Summon target monster as clone")),
     std::make_tuple('o', _("オブジェクトの能力変更", "Modift object abilities")),
     std::make_tuple('O', _("オプション設定をダンプ", "Dump current options")),
     std::make_tuple('p', _("ショート・テレポート", "Phase door")),
@@ -209,6 +210,9 @@ bool exe_cmd_debug(PlayerType *player_ptr, char cmd)
     case 'N':
         wiz_summon_pet(player_ptr, i2enum<MonsterRaceId>(command_arg));
         return true;
+    case KTRL('N'):
+        wiz_summon_clone(player_ptr, i2enum<MonsterRaceId>(command_arg));
+        return true;
     case 'o':
         wiz_modify_item(player_ptr);
         return true;
index ac9c95e..7ec001f 100644 (file)
@@ -257,6 +257,25 @@ void wiz_summon_pet(PlayerType *player_ptr, MonsterRaceId r_idx)
 }
 
 /*!
+ * @brief モンスターを種族IDを指定してクローン召喚(口寄せ)する /
+ * Summon a creature of the specified type
+ * @param r_idx モンスター種族ID(回数指定コマンド'0'で指定した回数がIDになる)
+ */
+void wiz_summon_clone(PlayerType *player_ptr, MonsterRaceId r_idx)
+{
+    if (!MonsterRace(r_idx).is_valid()) {
+        const auto new_monrace_id = input_numerics("MonsterID", 1, monraces_info.size() - 1, MonsterRaceId::FILTHY_URCHIN);
+        if (!new_monrace_id) {
+            return;
+        }
+
+        r_idx = *new_monrace_id;
+    }
+
+    (void)summon_named_creature(player_ptr, 0, player_ptr->y, player_ptr->x, r_idx, PM_ALLOW_SLEEP | PM_ALLOW_GROUP | PM_CLONE);
+}
+
+/*!
  * @brief ターゲットを指定して指定ダメージ・指定属性・半径0のボールを放つ
  * @param dam ダメージ量
  * @param effect_idx 属性ID
index cfe5513..6c92e43 100644 (file)
@@ -46,4 +46,5 @@ void wiz_generate_random_monster(PlayerType *player_ptr, int num);
 void wiz_summon_random_monster(PlayerType *player_ptr, int num);
 void wiz_summon_specific_monster(PlayerType *player_ptr, MonsterRaceId r_idx);
 void wiz_summon_pet(PlayerType *player_ptr, MonsterRaceId r_idx);
+void wiz_summon_clone(PlayerType *player_ptr, MonsterRaceId r_idx);
 void wiz_kill_target(PlayerType *player_ptr, int initial_dam = 1000000, AttributeType effect_idx = AttributeType::DEBUG, const bool self = false);