OSDN Git Service

[Implement] NO_QUESTモンスターフラグ実装。
authorDeskull <61610939+sikabane-works@users.noreply.github.com>
Sun, 13 Jun 2021 13:58:04 +0000 (22:58 +0900)
committerdeskull <deskull@users.sourceforge.jp>
Sat, 26 Jun 2021 12:56:54 +0000 (21:56 +0900)
 * ランダムクエストの対象にならない。
 * クエスト中のランダム選択配置の対象にならない。

src/dungeon/quest.cpp
src/floor/fixed-map-generator.cpp
src/info-reader/race-info-tokens-table.cpp
src/monster-floor/monster-generator.cpp
src/monster-floor/place-monster-types.h
src/monster-race/race-flags8.h

index e652b70..623e9d6 100644 (file)
@@ -73,6 +73,8 @@ void determine_random_questor(player_type *player_ptr, quest_type *q_ptr)
 
         if (!(r_ptr->flags1 & RF1_UNIQUE))
             continue;
+        if (r_ptr->flags8 & RF8_NO_QUEST)
+            continue;
         if (r_ptr->flags1 & RF1_QUESTOR)
             continue;
         if (r_ptr->rarity > 100)
index aad4943..d383cd8 100644 (file)
@@ -110,7 +110,7 @@ static void parse_qtw_D(player_type *player_ptr, qtwg_type *qtwg_ptr, char *s)
         if (random & RANDOM_MONSTER) {
             floor_ptr->monster_level = floor_ptr->base_level + monster_index;
 
-            place_monster(player_ptr, *qtwg_ptr->y, *qtwg_ptr->x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP));
+            place_monster(player_ptr, *qtwg_ptr->y, *qtwg_ptr->x, (PM_ALLOW_SLEEP | PM_ALLOW_GROUP | PM_NO_QUEST));
 
             floor_ptr->monster_level = floor_ptr->base_level;
         } else if (monster_index) {
index b20cee3..1894f81 100644 (file)
@@ -316,7 +316,8 @@ const std::unordered_map<std::string_view, race_flags7> r_info_flags7 = {
 const std::unordered_map<std::string_view, race_flags8> r_info_flags8 = {
        { "WILD_ONLY", RF8_WILD_ONLY },
        { "WILD_TOWN", RF8_WILD_TOWN },
-       { "WILD_SHORE", RF8_WILD_SHORE },
+    { "NO_QUEST", RF8_NO_QUEST },
+    { "WILD_SHORE", RF8_WILD_SHORE },
        { "WILD_OCEAN", RF8_WILD_OCEAN },
        { "WILD_WASTE", RF8_WILD_WASTE },
        { "WILD_WOOD", RF8_WILD_WOOD },
index 1cf86fc..67032dc 100644 (file)
@@ -19,6 +19,7 @@
 #include "monster-race/monster-race.h"
 #include "monster-race/race-flags1.h"
 #include "monster-race/race-flags7.h"
+#include "monster-race/race-flags8.h"
 #include "monster-race/race-indice-types.h"
 #include "monster/monster-flag-types.h"
 #include "monster/monster-info.h"
@@ -325,7 +326,11 @@ bool place_monster_aux(player_type *player_ptr, MONSTER_IDX who, POSITION y, POS
 bool place_monster(player_type *player_ptr, POSITION y, POSITION x, BIT_FLAGS mode)
 {
     get_mon_num_prep(player_ptr, get_monster_hook(player_ptr), get_monster_hook2(player_ptr, y, x));
-    MONRACE_IDX r_idx = get_mon_num(player_ptr, 0, player_ptr->current_floor_ptr->monster_level, 0);
+    MONRACE_IDX r_idx;
+    do {
+        r_idx = get_mon_num(player_ptr, 0, player_ptr->current_floor_ptr->monster_level, 0);
+    } while ((mode & PM_NO_QUEST) && (r_info[r_idx].flags8 & RF8_NO_QUEST));
+
     if (r_idx == 0)
         return false;
 
index 7ab0961..7e40514 100644 (file)
@@ -17,4 +17,5 @@ enum place_monster_type {
     PM_KAGE = 0x00000200, /*!< モンスター生成フラグ: 必ずあやしい影として生成する */
     PM_MULTIPLY = 0x00000400, /*!< モンスター生成フラグ: 増殖処理時として生成する */
     PM_JURAL = 0x00000800, /*!< モンスター生成フラグ: ジュラル星人として誤認生成する */
+    PM_NO_QUEST = 0x00001000, /*!< モンスター生成フラグ: クエスト除外モンスターを生成しない */
 };
index bd8d45b..6824eaa 100644 (file)
@@ -3,7 +3,7 @@
 enum race_flags8 : uint32_t {
        RF8_WILD_ONLY = 0x00000001,
     RF8_WILD_TOWN = 0x00000002,
-    RF8_XXX8X02 = 0x00000004,
+    RF8_NO_QUEST = 0x00000004,
     RF8_WILD_SHORE = 0x00000008,
     RF8_WILD_OCEAN = 0x00000010,
     RF8_WILD_WASTE = 0x00000020,