diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/init1.c | 20 | ||||
-rw-r--r-- | src/q_dragons.c | 5 | ||||
-rw-r--r-- | src/q_eol.c | 1 | ||||
-rw-r--r-- | src/q_evil.c | 5 | ||||
-rw-r--r-- | src/q_haunted.c | 8 | ||||
-rw-r--r-- | src/q_nazgul.c | 5 | ||||
-rw-r--r-- | src/q_one.c | 6 | ||||
-rw-r--r-- | src/q_poison.c | 1 | ||||
-rw-r--r-- | src/q_shroom.c | 11 | ||||
-rw-r--r-- | src/q_thrain.c | 9 | ||||
-rw-r--r-- | src/q_troll.c | 2 | ||||
-rw-r--r-- | src/q_wight.c | 2 | ||||
-rw-r--r-- | src/q_wolves.c | 10 |
13 files changed, 54 insertions, 31 deletions
diff --git a/src/init1.c b/src/init1.c index d7d90672..aff0301c 100644 --- a/src/init1.c +++ b/src/init1.c @@ -10956,6 +10956,7 @@ struct dungeon_grid int random; /* Number of the random effect */ int bx, by; /* For between gates */ int mimic; /* Mimiced features */ + s32b mflag; /* monster's mflag */ bool ok; bool defined; }; @@ -11007,12 +11008,12 @@ static errr process_dungeon_file_aux(char *buf, int *yval, int *xval, int xvalst return (0); } - /* Process "F:<letter>:<terrain>:<cave_info>:<monster>:<object>:<ego>:<artifact>:<trap>:<special>:<mimic>" -- info for dungeon grid */ + /* Process "F:<letter>:<terrain>:<cave_info>:<monster>:<object>:<ego>:<artifact>:<trap>:<special>:<mimic>:<mflag>" -- info for dungeon grid */ if (buf[0] == 'F') { int num; - if ((num = tokenize(buf + 2, 10, zz, ':', '/')) > 1) + if ((num = tokenize(buf + 2, 11, zz, ':', '/')) > 1) { int index = zz[0][0]; @@ -11027,6 +11028,7 @@ static errr process_dungeon_file_aux(char *buf, int *yval, int *xval, int xvalst letter[index].special = 0; letter[index].random = 0; letter[index].mimic = 0; + letter[index].mflag = 0; letter[index].ok = TRUE; letter[index].defined = TRUE; @@ -11170,6 +11172,11 @@ static errr process_dungeon_file_aux(char *buf, int *yval, int *xval, int xvalst letter[index].mimic = atoi(zz[9]); } + if (num > 10) + { + letter[index].mflag = atoi(zz[10]); + } + return (0); } } @@ -11205,7 +11212,7 @@ static errr process_dungeon_file_aux(char *buf, int *yval, int *xval, int xvalst /* Process "D:<dungeon>" -- info for the cave grids */ else if (buf[0] == 'D') { - int x; + int x, m_idx = 0; object_type object_type_body; @@ -11253,7 +11260,7 @@ static errr process_dungeon_file_aux(char *buf, int *yval, int *xval, int xvalst monster_level = quest[p_ptr->inside_quest].level + monster_index; - place_monster(y, x, meta_sleep, FALSE); + m_idx = place_monster(y, x, meta_sleep, FALSE); monster_level = level; } @@ -11261,10 +11268,13 @@ static errr process_dungeon_file_aux(char *buf, int *yval, int *xval, int xvalst { /* Place it */ m_allow_special[monster_index] = TRUE; - place_monster_aux(y, x, monster_index, meta_sleep, FALSE, MSTATUS_ENEMY); + m_idx = place_monster_aux(y, x, monster_index, meta_sleep, FALSE, MSTATUS_ENEMY); m_allow_special[monster_index] = FALSE; } + /* Set the mflag of the monster */ + if (m_idx) m_list[m_idx].mflag |= letter[idx].mflag; + /* Object (and possible trap) */ if ((random & RANDOM_OBJECT) && (random & RANDOM_TRAP)) { diff --git a/src/q_dragons.c b/src/q_dragons.c index a1501be8..e06dfbe7 100644 --- a/src/q_dragons.c +++ b/src/q_dragons.c @@ -53,7 +53,7 @@ bool quest_dragons_gen_hook(char *fmt) /* Place some random dragons */ for (i = 25; i > 0; ) { - int flags; + int m_idx, flags; y = rand_int(21) + 3; x = rand_int(31) + 3; flags = f_info[cave[y][x].feat].flags1; @@ -79,7 +79,8 @@ bool quest_dragons_gen_hook(char *fmt) dragon = mature_dragons[color]; --i; - place_monster_one(y, x, dragon, 0, magik(33), MSTATUS_ENEMY); + m_idx = place_monster_one(y, x, dragon, 0, magik(33), MSTATUS_ENEMY); + if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST; } } diff --git a/src/q_eol.c b/src/q_eol.c index ef46ef5d..4b66e8ad 100644 --- a/src/q_eol.c +++ b/src/q_eol.c @@ -64,6 +64,7 @@ bool quest_eol_gen_hook(char *fmt) m_allow_special[test_monster_name("Eol, the Dark Elf")] = TRUE; m_idx = place_monster_one(y, x, test_monster_name("Eol, the Dark Elf"), 0, FALSE, MSTATUS_ENEMY); m_allow_special[test_monster_name("Eol, the Dark Elf")] = FALSE; + if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST; } if (magik(18)) diff --git a/src/q_evil.c b/src/q_evil.c index 5e8259dc..1e5a19bb 100644 --- a/src/q_evil.c +++ b/src/q_evil.c @@ -37,13 +37,14 @@ bool quest_evil_gen_hook(char *fmt) /* Place some random balrogs */ for (i = 6; i > 0; ) { - int flags; + int m_idx, flags; y = rand_int(21) + 3; x = rand_int(31) + 3; flags = f_info[cave[y][x].feat].flags1; if (!(flags & FF1_PERMANENT) && (flags & FF1_FLOOR)) { - place_monster_one(y, x, 996, 0, FALSE, MSTATUS_ENEMY); + m_idx = place_monster_one(y, x, 996, 0, FALSE, MSTATUS_ENEMY); + if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST; --i; } } diff --git a/src/q_haunted.c b/src/q_haunted.c index d27e62e3..9cd76d81 100644 --- a/src/q_haunted.c +++ b/src/q_haunted.c @@ -3,7 +3,7 @@ bool quest_haunted_gen_hook(char *fmt) { - int x, y, i; + int x, y, i, m_idx; int xstart = 2; int ystart = 2; @@ -43,7 +43,8 @@ bool quest_haunted_gen_hook(char *fmt) flags = f_info[cave[y][x].feat].flags1; if (!(flags & FF1_PERMANENT) && (flags & FF1_FLOOR)) { - place_monster_one(y, x, 477, 0, FALSE, MSTATUS_ENEMY); + m_idx = place_monster_one(y, x, 477, 0, FALSE, MSTATUS_ENEMY); + if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST; --i; } } @@ -60,7 +61,8 @@ bool quest_haunted_gen_hook(char *fmt) int monsters[22] = { 65, 100, 124, 125, 133, 231, 273, 327, 365, 416, 418, 507, 508, 533, 534, 553, 554, 555, 577, 607, 622, 665}; int monster = monsters[rand_int(22)]; - place_monster_one(y, x, monster, 0, FALSE, MSTATUS_ENEMY); + m_idx = place_monster_one(y, x, monster, 0, FALSE, MSTATUS_ENEMY); + m_list[m_idx].mflag |= MFLAG_QUEST; --i; } } diff --git a/src/q_nazgul.c b/src/q_nazgul.c index 3114be13..ef188b16 100644 --- a/src/q_nazgul.c +++ b/src/q_nazgul.c @@ -3,7 +3,7 @@ bool quest_nazgul_gen_hook(char *fmt) { - int x = 1, y = 1, try = 10000; + int m_idx, x = 1, y = 1, try = 10000; s32b small; small = get_next_arg(fmt); @@ -27,7 +27,8 @@ bool quest_nazgul_gen_hook(char *fmt) /* Place the nazgul */ m_allow_special[test_monster_name("Uvatha the Horseman")] = TRUE; - place_monster_one(y, x, test_monster_name("Uvatha the Horseman"), 0, FALSE, MSTATUS_ENEMY); + m_idx = place_monster_one(y, x, test_monster_name("Uvatha the Horseman"), 0, FALSE, MSTATUS_ENEMY); + if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST; m_allow_special[test_monster_name("Uvatha the Horseman")] = FALSE; return FALSE; diff --git a/src/q_one.c b/src/q_one.c index a472979a..c11c5233 100644 --- a/src/q_one.c +++ b/src/q_one.c @@ -338,7 +338,11 @@ bool quest_one_gen_hook(char *fmt) try--; } - if (try) place_monster_one(y, x, test_monster_name("Sauron, the Sorcerer"), 0, FALSE, MSTATUS_ENEMY); + if (try) + { + int m_idx = place_monster_one(y, x, test_monster_name("Sauron, the Sorcerer"), 0, FALSE, MSTATUS_ENEMY); + if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST; + } return (FALSE); } diff --git a/src/q_poison.c b/src/q_poison.c index e3e1e69a..efc8712c 100644 --- a/src/q_poison.c +++ b/src/q_poison.c @@ -74,6 +74,7 @@ bool quest_poison_gen_hook(char *fmt) r_idx = get_mon_num(30); m_idx = place_monster_one(y, x, r_idx, 0, FALSE, MSTATUS_ENEMY); + if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST; /* Sometimes make it up some levels */ if (magik(80) && m_idx) diff --git a/src/q_shroom.c b/src/q_shroom.c index 87d48cf4..c8cc3bec 100644 --- a/src/q_shroom.c +++ b/src/q_shroom.c @@ -5,7 +5,7 @@ bool quest_shroom_speak_hook(char *fmt); bool quest_shroom_town_gen_hook(char *fmt) { - int x = 1, y = 1, try = 10000; + int m_idx, x = 1, y = 1, try = 10000; s32b small; small = get_next_arg(fmt); @@ -34,19 +34,22 @@ bool quest_shroom_town_gen_hook(char *fmt) y = rand_range((cur_hgt / 2) - 5, (cur_hgt / 2) + 5); x = rand_range((cur_wid / 2) - 7, (cur_wid / 2) + 7); m_allow_special[test_monster_name("Grip, Farmer Maggot's dog")] = TRUE; - place_monster_one(y, x, test_monster_name("Grip, Farmer Maggot's dog"), 0, FALSE, MSTATUS_ENEMY); + m_idx = place_monster_one(y, x, test_monster_name("Grip, Farmer Maggot's dog"), 0, FALSE, MSTATUS_ENEMY); + if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST; m_allow_special[test_monster_name("Grip, Farmer Maggot's dog")] = FALSE; y = rand_range((cur_hgt / 2) - 5, (cur_hgt / 2) + 5); x = rand_range((cur_wid / 2) - 7, (cur_wid / 2) + 7); m_allow_special[test_monster_name("Wolf, Farmer Maggot's dog")] = TRUE; - place_monster_one(y, x, test_monster_name("Wolf, Farmer Maggot's dog"), 0, FALSE, MSTATUS_ENEMY); + m_idx = place_monster_one(y, x, test_monster_name("Wolf, Farmer Maggot's dog"), 0, FALSE, MSTATUS_ENEMY); + if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST; m_allow_special[test_monster_name("Wolf, Farmer Maggot's dog")] = FALSE; y = rand_range((cur_hgt / 2) - 5, (cur_hgt / 2) + 5); x = rand_range((cur_wid / 2) - 7, (cur_wid / 2) + 7); m_allow_special[test_monster_name("Fang, Farmer Maggot's dog")] = TRUE; - place_monster_one(y, x, test_monster_name("Fang, Farmer Maggot's dog"), 0, FALSE, MSTATUS_ENEMY); + m_idx = place_monster_one(y, x, test_monster_name("Fang, Farmer Maggot's dog"), 0, FALSE, MSTATUS_ENEMY); + if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST; m_allow_special[test_monster_name("Fang, Farmer Maggot's dog")] = FALSE; msg_print("You hear frenzied barking."); diff --git a/src/q_thrain.c b/src/q_thrain.c index 5f5095d1..e7e3161a 100644 --- a/src/q_thrain.c +++ b/src/q_thrain.c @@ -157,16 +157,9 @@ bool quest_thrain_gen_hook(char *fmt) m_allow_special[test_monster_name("Thrain, the King Under the Mountain")] = TRUE; i = place_monster_one(y, x, test_monster_name("Thrain, the King Under the Mountain"), 0, FALSE, MSTATUS_NEUTRAL); + if (i) m_list[i].mflag |= MFLAG_QUEST; m_allow_special[test_monster_name("Thrain, the King Under the Mountain")] = FALSE; } - if (cave[y][x].m_idx) - { - m_ptr = &m_list[cave[y][x].m_idx]; - if ((m_ptr->r_idx == test_monster_name("Dwar, Dog Lord of Waw")) || (m_ptr->r_idx == test_monster_name("Hoarmurath of Dir"))) - { - m_ptr->mflag |= MFLAG_QUEST; - } - } } /* Don't try another one for this generation */ diff --git a/src/q_troll.c b/src/q_troll.c index b019b673..d1347ed6 100644 --- a/src/q_troll.c +++ b/src/q_troll.c @@ -48,6 +48,8 @@ bool quest_troll_gen_hook(char *fmt) /* Get local object */ object_type forge, *q_ptr = &forge; + m_list[m_idx].mflag |= MFLAG_QUEST; + a_allow_special[ART_GLAMDRING] = TRUE; /* Mega-Hack -- Prepare to make "Glamdring" */ diff --git a/src/q_wight.c b/src/q_wight.c index a49e3088..bf5b4868 100644 --- a/src/q_wight.c +++ b/src/q_wight.c @@ -48,6 +48,8 @@ bool quest_wight_gen_hook(char *fmt) /* Get local object */ object_type forge, *q_ptr = &forge; + m_list[m_idx].mflag |= MFLAG_QUEST; + /* Prepare to make the */ object_prep(q_ptr, lookup_kind(TV_SOFT_ARMOR, SV_FILTHY_RAG)); diff --git a/src/q_wolves.c b/src/q_wolves.c index 0b2825c7..39ef5794 100644 --- a/src/q_wolves.c +++ b/src/q_wolves.c @@ -37,13 +37,14 @@ bool quest_wolves_gen_hook(char *fmt) /* Place some random wolves */ for (i = damroll(4, 4); i > 0; ) { - int flags; + int m_idx, flags; y = rand_int(21) + 3; x = rand_int(31) + 3; flags = f_info[cave[y][x].feat].flags1; if (!(flags & FF1_PERMANENT) && (flags & FF1_FLOOR)) { - place_monster_one(y, x, 196, 0, magik(50), MSTATUS_ENEMY); + m_idx = place_monster_one(y, x, 196, 0, magik(50), MSTATUS_ENEMY); + if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST; --i; } } @@ -51,13 +52,14 @@ bool quest_wolves_gen_hook(char *fmt) /* Place some random wargs */ for (i = damroll(4, 4); i > 0; ) { - int flags; + int m_idx, flags; y = rand_int(21) + 3; x = rand_int(31) + 3; flags = f_info[cave[y][x].feat].flags1; if (!(flags & FF1_PERMANENT) && (flags & FF1_FLOOR)) { - place_monster_one(y, x, 257, 0, magik(50), MSTATUS_ENEMY); + m_idx = place_monster_one(y, x, 257, 0, magik(50), MSTATUS_ENEMY); + if (m_idx) m_list[m_idx].mflag |= MFLAG_QUEST; --i; } } |