過程で, 以下の変更を含む.
* 一般形のナズグルのmax_numである5を記号定数化. その記号定数が使われ
るのはユニークでない場合のみとした.
B:HIT:EXP_80:8d6
B:HIT:EXP_80:8d6
F:MALE |
-F:FORCE_MAXHP | UNIQUE_7 |
+F:FORCE_MAXHP | NAZGUL |
F:ONLY_ITEM | DROP_2D2 | DROP_GOOD | RES_TELE | RES_DARK |
F:COLD_BLOOD | OPEN_DOOR | BASH_DOOR | MOVE_BODY | RES_NETH | SMART |
F:EVIL | UNDEAD | IM_COLD | IM_POIS | HURT_LITE | NO_CONF | NO_SLEEP
/* Hack -- Reset the max counter */
if (r_ptr->flags1 & RF1_UNIQUE) r_ptr->max_num = 1;
- if (r_ptr->flags7 & RF7_UNIQUE_7) r_ptr->max_num = 5;
+
+ /* Hack -- Non-unique Nazguls are semi-unique */
+ else if (r_ptr->flags7 & RF7_NAZGUL) r_ptr->max_num = MAX_NAZGUL_NUM;
/* Clear player kills */
r_ptr->r_pkills = 0;
/* Decline unique monsters */
/* if (r_ptr->flags1 & (RF1_UNIQUE)) return (FALSE); */
-/* if (r_ptr->flags7 & (RF7_UNIQUE_7)) return (FALSE); */
+/* if (r_ptr->flags7 & (RF7_NAZGUL)) return (FALSE); */
if (r_ptr->flags1 & (RF1_NEVER_MOVE)) return (FALSE);
if (r_ptr->flags2 & (RF2_MULTIPLY)) return (FALSE);
#define RF7_CAN_SWIM 0x00000002 /* Monster can swim */
#define RF7_CAN_FLY 0x00000004 /* Monster can fly */
#define RF7_FRIENDLY 0x00000008 /* Monster is friendly */
-#define RF7_UNIQUE_7 0x00000010 /* Is a "Nazgul" unique */
+#define RF7_NAZGUL 0x00000010 /* Is a "Nazgul" unique */
#define RF7_UNIQUE2 0x00000020 /* Fake unique */
#define RF7_RIDING 0x00000040 /* Good for riding */
#define RF7_KAGE 0x00000080 /* Is kage */
#define MON_JIZOTAKO 1065
#define MON_TANUKI 1067
+/* Maximum "Nazguls" number */
+#define MAX_NAZGUL_NUM 5
+
#define MAX_AUTOPICK 1009
#define DO_AUTOPICK 0x01
#define DO_AUTODESTROY 0x02
r_ptr = &r_info[today_mon];
if (r_ptr->flags1 & RF1_UNIQUE) continue;
- if (r_ptr->flags7 & (RF7_UNIQUE_7 | RF7_UNIQUE2)) continue;
+ if (r_ptr->flags7 & (RF7_NAZGUL | RF7_UNIQUE2)) continue;
if (r_ptr->flags2 & RF2_MULTIPLY) continue;
if ((r_ptr->flags9 & (RF9_DROP_CORPSE | RF9_DROP_SKELETON)) != (RF9_DROP_CORPSE | RF9_DROP_SKELETON)) continue;
if (r_ptr->level < MIN(max_dl / 2, 40)) continue;
/* Memorize location of the unique monster */
if ((r_ptr->flags1 & RF1_UNIQUE) ||
- (r_ptr->flags7 & RF7_UNIQUE_7))
+ (r_ptr->flags7 & RF7_NAZGUL))
{
r_ptr->floor_id = cur_floor_id;
}
/* Ignore unique monsters */
if ((r_ptr->flags1 & RF1_UNIQUE) ||
- (r_ptr->flags7 & RF7_UNIQUE_7)) continue;
+ (r_ptr->flags7 & RF7_NAZGUL)) continue;
/* Delete non-unique quest monsters */
delete_monster_idx(i);
/* Ignore non-unique */
if (!(r_ptr->flags1 & RF1_UNIQUE) &&
- !(r_ptr->flags7 & RF7_UNIQUE_7)) continue;
+ !(r_ptr->flags7 & RF7_NAZGUL)) continue;
/* Appear at a different floor? */
if (r_ptr->floor_id != new_floor_id)
"CAN_SWIM",
"CAN_FLY",
"FRIENDLY",
- "UNIQUE_7",
+ "NAZGUL",
"UNIQUE2",
"RIDING",
"KAGE",
}
/* Make alive again */
- if (r_info[monster_index].flags7 & RF7_UNIQUE_7)
+ /* Hack -- Non-unique Nazguls are semi-unique */
+ else if (r_info[monster_index].flags7 & RF7_NAZGUL)
{
if (r_info[monster_index].cur_num == r_info[monster_index].max_num)
{
/* Hack -- Reset the death counter */
r_ptr->max_num = 100;
+
if (r_ptr->flags1 & RF1_UNIQUE) r_ptr->max_num = 1;
- if (r_ptr->flags7 & RF7_UNIQUE_7) r_ptr->max_num = 7;
+
+ /* Hack -- Non-unique Nazguls are semi-unique */
+ else if (r_ptr->flags7 & RF7_NAZGUL) r_ptr->max_num = MAX_NAZGUL_NUM;
}
/* Monster Memory */
/* It is dead now... or is it? */
if (m_ptr->hp < 0)
{
- if (((r_ptr->flags1 & RF1_UNIQUE) ||
- (r_ptr->flags7 & RF7_UNIQUE_7) ||
- (r_ptr->flags1 & RF1_QUESTOR)) &&
+ if (((r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) ||
+ (r_ptr->flags7 & RF7_NAZGUL)) &&
!p_ptr->inside_battle)
{
m_ptr->hp = 1;
mon_take_hit_mon(m_idx, 1, &fear, " explodes into tiny shreds.", m_idx);
#endif
- if ((is_pet(m_ptr) || is_friendly(m_ptr)) && ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE_7)) && !p_ptr->inside_battle)
+ if ((is_pet(m_ptr) || is_friendly(m_ptr)) && ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) && !p_ptr->inside_battle)
{
static int riding_pinch = 0;
/* Paranoia... no pet uniques outside wizard mode -- TY */
if (is_pet(m_ptr) &&
- ((((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE_7)) &&
+ ((((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) &&
monster_has_hostile_align(NULL, 10, -10, r_ptr))
|| (r_ptr->flagsr & RFR_RES_ALL)))
{
{
/* Hack -- "unique" monsters must be "unique" */
if (((r_ptr->flags1 & (RF1_UNIQUE)) ||
- (r_ptr->flags7 & (RF7_UNIQUE_7))) &&
+ (r_ptr->flags7 & (RF7_NAZGUL))) &&
(r_ptr->cur_num >= r_ptr->max_num))
{
continue;
{
/* Hack -- "unique" monsters must be "unique" */
if (((r_ptr->flags1 & (RF1_UNIQUE)) ||
- (r_ptr->flags7 & (RF7_UNIQUE_7))) &&
+ (r_ptr->flags7 & (RF7_NAZGUL))) &&
(r_ptr->cur_num >= r_ptr->max_num))
{
/* Cannot create */
}
- if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE_7) || (r_ptr->level < 10)) is_kage = FALSE;
+ if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL) || (r_ptr->level < 10)) is_kage = FALSE;
/* Make a new monster */
c_ptr->m_idx = m_pop();
* A unique monster move from old saved floor.
*/
if (character_dungeon &&
- ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE_7)))
+ ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)))
real_r_ptr(m_ptr)->floor_id = p_ptr->floor_id;
/* Hack -- Count the number of "reproducers" */
/* Hack -- no specific type specified */
if (!summon_specific_type) return (TRUE);
- if (!summon_unique_okay && ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE_7))) return FALSE;
+ if (!summon_unique_okay && ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL))) return FALSE;
if ((summon_specific_who < 0) &&
- ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE_7)) &&
+ ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL)) &&
monster_has_hostile_align(NULL, 10, -10, r_ptr))
return FALSE;
if (r_ptr->flags1 & RF1_UNIQUE) return (FALSE);
if (r_ptr->flags7 & RF7_KAGE) return (FALSE);
if (r_ptr->flagsr & RFR_RES_ALL) return (FALSE);
- if (r_ptr->flags7 & RF7_UNIQUE_7) return (FALSE);
+ if (r_ptr->flags7 & RF7_NAZGUL) return (FALSE);
if (r_ptr->flags1 & RF1_FORCE_DEPTH) return (FALSE);
if (r_ptr->flags7 & RF7_UNIQUE2) return (FALSE);
{
if (seen) obvious = TRUE;
- if (is_pet(m_ptr) || (r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (r_ptr->flags7 & (RF7_UNIQUE_7 | RF7_UNIQUE2)))
+ if (is_pet(m_ptr) || (r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (r_ptr->flags7 & (RF7_NAZGUL | RF7_UNIQUE2)))
{
#ifdef JP
note = "¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£";
break;
}
- if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE_7))
+ if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL))
dam = dam * 2 / 3;
/* Attempt a saving throw */
break;
}
- if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE_7))
+ if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL))
dam = dam * 2 / 3;
/* Attempt a saving throw */
break;
}
- if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE_7))
+ if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL))
dam = dam * 2 / 3;
/* Attempt a saving throw */
break;
}
- if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE_7))
+ if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL))
dam = dam * 2 / 3;
/* Attempt a saving throw */
break;
}
- if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE_7))
+ if ((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_NAZGUL))
dam = dam * 2 / 3;
/* Attempt a saving throw */
{
int nokori_hp;
if ((p_ptr->inside_quest && (quest[p_ptr->inside_quest].type == QUEST_TYPE_KILL_ALL) && !is_pet(m_ptr)) ||
- (r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flags7 & (RF7_UNIQUE_7)) || (r_ptr->flags7 & (RF7_UNIQUE2)) || (r_ptr->flags1 & RF1_QUESTOR))
+ (r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flags7 & (RF7_NAZGUL)) || (r_ptr->flags7 & (RF7_UNIQUE2)) || (r_ptr->flags1 & RF1_QUESTOR))
{
#ifdef JP
msg_format("%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡£",m_name);
if (p_ptr->riding && (c_ptr->m_idx == p_ptr->riding)) do_poly = FALSE;
/* "Unique" and "quest" monsters can only be "killed" by the player. */
- if (((r_ptr->flags1 & RF1_UNIQUE) || (r_ptr->flags7 & RF7_UNIQUE_7) || (r_ptr->flags1 & RF1_QUESTOR)) && !p_ptr->inside_battle)
+ if (((r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (r_ptr->flags7 & RF7_NAZGUL)) && !p_ptr->inside_battle)
{
if (who && (dam > m_ptr->hp)) dam = m_ptr->hp;
}
if (r_ptr->r_sights < MAX_SHORT) r_ptr->r_sights++;
}
- /* When the player kills a Unique, it stays dead */
- if (r_ptr->flags1 & RF1_UNIQUE && !(m_ptr->smart & SM_CLONED))
- r_ptr->max_num = 0;
+ if (!(m_ptr->smart & SM_CLONED))
+ {
+ /* When the player kills a Unique, it stays dead */
+ if (r_ptr->flags1 & RF1_UNIQUE) r_ptr->max_num = 0;
- /* When the player kills a Nazgul, it stays dead */
- if (r_ptr->flags7 & RF7_UNIQUE_7) r_ptr->max_num--;
+ /* When the player kills a Nazgul, it stays dead */
+ else if (r_ptr->flags7 & RF7_NAZGUL) r_ptr->max_num--;
+ }
/* Recall even invisible uniques or winners */
if (m_ptr->ml || (r_ptr->flags1 & RF1_UNIQUE))