cave_set_feat(y, x, FEAT_MORE);
/* Remember to update everything */
- p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MONSTERS);
+ p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MONSTERS | PU_MON_LITE);
}
/*
object_wipe(q_ptr);
/* Make a great object */
- make_object(q_ptr, TRUE, TRUE);
+ make_object(q_ptr, AM_GOOD | AM_GREAT);
/* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
}
}
+
+/*
+ * Return monster death string
+ */
+cptr extract_note_dies(monster_race *r_ptr)
+{
+ /* Some monsters get "destroyed" */
+ if (!monster_living(r_ptr))
+ {
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (r_ptr->blow[i].method == RBM_EXPLODE)
+ {
+#ifdef JP
+ return "¤ÏÇúȯ¤·¤ÆÊ´¡¹¤Ë¤Ê¤Ã¤¿¡£";
+#else
+ return " explodes into tiny shreds.";
+#endif
+ }
+ }
+
+#ifdef JP
+ return "¤òÅݤ·¤¿¡£";
+#else
+ return " is destroyed.";
+#endif
+ }
+
+ /* Assume a default death */
+#ifdef JP
+ return "¤Ï»à¤ó¤À¡£";
+#else
+ return " dies.";
+#endif
+}
+
+
/*
* Handle the "death" of a monster.
*
bool visible = (m_ptr->ml || (r_ptr->flags1 & RF1_UNIQUE));
- bool good = (r_ptr->flags1 & RF1_DROP_GOOD) ? TRUE : FALSE;
- bool great = (r_ptr->flags1 & RF1_DROP_GREAT) ? TRUE : FALSE;
+ u32b mo_mode = 0L;
bool do_gold = (!(r_ptr->flags1 & RF1_ONLY_ITEM));
bool do_item = (!(r_ptr->flags1 & RF1_ONLY_GOLD));
if (world_monster) world_monster = FALSE;
/* Notice changes in view */
- if (r_ptr->flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2 | RF7_SELF_LITE_1 | RF7_SELF_LITE_2))
+ if (r_ptr->flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))
{
/* Update some things */
p_ptr->update |= (PU_MON_LITE);
{
char m_name[80];
- monster_desc(m_name, m_ptr, 0x08);
+ monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
do_cmd_write_nikki(NIKKI_NAMED_PET, 3, m_name);
}
/* Handle the possibility of player vanquishing arena combatant -KMW- */
if (p_ptr->inside_arena && !is_pet(m_ptr))
{
- char m_name[80];
-
- /* Extract monster name */
- monster_desc(m_name, m_ptr, 0);
-
p_ptr->exit_bldg = TRUE;
if (p_ptr->arena_number > MAX_ARENA_MONS)
/* Prepare to make a prize */
object_prep(q_ptr, lookup_kind(arena_info[p_ptr->arena_number].tval, arena_info[p_ptr->arena_number].sval));
- apply_magic(q_ptr, object_level, FALSE, FALSE, FALSE, FALSE);
+ apply_magic(q_ptr, object_level, AM_NO_FIXED_ART);
/* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
if (p_ptr->arena_number > MAX_ARENA_MONS) p_ptr->arena_number++;
p_ptr->arena_number++;
- if (record_arena) do_cmd_write_nikki(NIKKI_ARENA, p_ptr->arena_number, m_name);
+ if (record_arena)
+ {
+ char m_name[80];
+
+ /* Extract monster name */
+ monster_desc(m_name, m_ptr, MD_IGNORE_HALLU | MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE);
+
+ do_cmd_write_nikki(NIKKI_ARENA, p_ptr->arena_number, m_name);
+ }
}
if (m_idx == p_ptr->riding)
/* Prepare to make an object */
object_prep(q_ptr, lookup_kind(TV_CORPSE, (corpse ? SV_CORPSE : SV_SKELETON)));
- apply_magic(q_ptr, object_level, FALSE, FALSE, FALSE, FALSE);
+ apply_magic(q_ptr, object_level, AM_NO_FIXED_ART);
q_ptr->pval = m_ptr->r_idx;
/* Drop objects being carried */
monster_drop_carried_objects(m_ptr);
+ if (r_ptr->flags1 & RF1_DROP_GOOD) mo_mode |= AM_GOOD;
+ if (r_ptr->flags1 & RF1_DROP_GREAT) mo_mode |= AM_GREAT;
+
switch (m_ptr->r_idx)
{
case MON_PINK_HORROR:
/* Prepare to make a Blade of Chaos */
object_prep(q_ptr, lookup_kind(TV_SWORD, SV_BLADE_OF_CHAOS));
- apply_magic(q_ptr, object_level, FALSE, FALSE, FALSE, FALSE);
+ apply_magic(q_ptr, object_level, AM_NO_FIXED_ART | mo_mode);
/* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
get_obj_num_prep();
/* Make a book */
- make_object(q_ptr, FALSE, FALSE);
+ make_object(q_ptr, mo_mode);
/* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
/* Reward for "lazy" player */
if (p_ptr->pseikaku == SEIKAKU_NAMAKE)
{
- int a_idx;
+ int a_idx = 0;
if (!drop_chosen_item) break;
+
do
{
switch (randint0(3))
q_ptr->name1 = ART_GROND;
/* Mega-Hack -- Actually create "Grond" */
- apply_magic(q_ptr, -1, TRUE, TRUE, TRUE, FALSE);
+ apply_magic(q_ptr, -1, AM_GOOD | AM_GREAT);
/* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
q_ptr->name1 = ART_CHAOS;
/* Mega-Hack -- Actually create "Chaos" */
- apply_magic(q_ptr, -1, TRUE, TRUE, TRUE, FALSE);
+ apply_magic(q_ptr, -1, AM_GOOD | AM_GREAT);
/* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
/* Prepare to make a Can of Toys */
object_prep(q_ptr, lookup_kind(TV_CHEST, SV_CHEST_KANDUME));
- apply_magic(q_ptr, object_level, FALSE, FALSE, FALSE, FALSE);
+ apply_magic(q_ptr, object_level, AM_NO_FIXED_ART);
/* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
get_obj_num_prep();
/* Make a cloak */
- make_object(q_ptr, FALSE, FALSE);
+ make_object(q_ptr, mo_mode);
/* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
get_obj_num_prep();
/* Make a poleweapon */
- make_object(q_ptr, FALSE, FALSE);
+ make_object(q_ptr, mo_mode);
/* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
get_obj_num_prep();
/* Make a hard armor */
- make_object(q_ptr, FALSE, FALSE);
+ make_object(q_ptr, mo_mode);
/* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
get_obj_num_prep();
/* Make a sword */
- make_object(q_ptr, FALSE, FALSE);
+ make_object(q_ptr, mo_mode);
/* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
break;
}
- /* Mega-Hack -- drop fixed artifacts */
+ /* Mega-Hack -- drop fixed items */
if (drop_chosen_item)
{
int a_idx = 0;
if ((r_ptr->flags7 & RF7_GUARDIAN) && (d_info[dungeon_type].final_guardian == m_ptr->r_idx))
{
- int k_idx = lookup_kind(TV_SCROLL, SV_SCROLL_ACQUIREMENT); /* Acquirement */;
-
- if (d_info[dungeon_type].final_object)
- k_idx = d_info[dungeon_type].final_object;
+ int k_idx = d_info[dungeon_type].final_object ? d_info[dungeon_type].final_object
+ : lookup_kind(TV_SCROLL, SV_SCROLL_ACQUIREMENT);
if (d_info[dungeon_type].final_artifact)
{
int a_idx = d_info[dungeon_type].final_artifact;
- if (a_info[a_idx].cur_num == 0)
+ if (!a_info[a_idx].cur_num)
{
/* Create the artifact */
create_named_art(a_idx, y, x);
-
a_info[a_idx].cur_num = 1;
- k_idx = 0;
+
+ /* Prevent rewarding both artifact and "default" object */
+ if (!d_info[dungeon_type].final_object) k_idx = 0;
}
}
/* Prepare to make a reward */
object_prep(q_ptr, k_idx);
- apply_magic(q_ptr, object_level, FALSE, TRUE, FALSE, FALSE);
+ apply_magic(q_ptr, object_level, AM_NO_FIXED_ART | AM_GOOD);
/* Drop it in the dungeon */
(void)drop_near(q_ptr, -1, y, x);
else
{
/* Make an object */
- if (!make_object(q_ptr, good, great)) continue;
+ if (!make_object(q_ptr, mo_mode)) continue;
/* XXX XXX XXX */
dump_item++;
{
monster_race *r_ptr = &r_info[m_ptr->r_idx];
- if ((r_ptr->flags3 & RF3_RES_ALL) && dam > 0)
+ if ((r_ptr->flagsr & RFR_RES_ALL) && dam > 0)
{
dam /= 100;
if((dam == 0) && one_in_(3)) dam = 1;
/* Wake it up */
m_ptr->csleep = 0;
+ if (r_ptr->flags7 & RF7_HAS_LD_MASK) p_ptr->update |= (PU_MON_LITE);
+
/* Hack - Cancel any special player stealth magics. -LM- */
if (p_ptr->special_defense & NINJA_S_STEALTH)
{
}
/* Extract monster name */
- monster_desc(m_name, m_ptr, 0x100);
+ monster_desc(m_name, m_ptr, MD_TRUE_NAME);
/* Don't kill Amberites */
if ((r_ptr->flags3 & RF3_AMBERITE) && one_in_(2))
/* Prevent bug of chaos patron's reward */
if (r_ptr->flags7 & RF7_KILL_EXP)
- get_exp_from_mon((long)m_ptr->max_maxhp*2, &exp_mon);
+ get_exp_from_mon((long)exp_mon.max_maxhp*2, &exp_mon);
else
- get_exp_from_mon(((long)m_ptr->max_maxhp+1L) * 9L / 10L, &exp_mon);
+ get_exp_from_mon(((long)exp_mon.max_maxhp+1L) * 9L / 10L, &exp_mon);
/* Not afraid */
(*fear) = FALSE;
/*
* Monster health description
*/
-cptr look_mon_desc(int m_idx, u32b mode)
+cptr look_mon_desc(monster_type *m_ptr, u32b mode)
{
- monster_type *m_ptr = &m_list[m_idx];
monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx];
bool living;
int perc;
if (!(in_bounds(y, x))) return (FALSE);
/* Player grid is always interesting */
- if ((y == py) && (x == px)) return (TRUE);
+ if (player_bold(y, x)) return (TRUE);
/* Handle hallucination */
byte feat;
/* Feature code (applying "mimic" field) */
- feat = c_ptr->mimic ? c_ptr->mimic : f_info[c_ptr->feat].mimic;
+ feat = f_info[c_ptr->mimic ? c_ptr->mimic : c_ptr->feat].mimic;
/* Notice glyphs */
if (c_ptr->info & CAVE_OBJECT) return (TRUE);
#endif /* ALLOW_EASY_FLOOR */
/* Hack -- under the player */
- if ((y == py) && (x == px))
+ if (player_bold(y, x))
{
/* Description */
#ifdef JP
boring = FALSE;
/* Get the monster name ("a kobold") */
- monster_desc(m_name, m_ptr, 0x08);
+ monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE);
/* Hack -- track this monster race */
monster_race_track(m_ptr->ap_r_idx);
evaluate_monster_exp(acount, m_ptr);
#ifdef JP
- sprintf(out_val, "[%s]%s%s(%s)%s%s [r»× %s%s]", acount, s1, m_name, look_mon_desc(c_ptr->m_idx, 0x01), s2, s3, x_info, info);
+ sprintf(out_val, "[%s]%s%s(%s)%s%s [r»× %s%s]", acount, s1, m_name, look_mon_desc(m_ptr, 0x01), s2, s3, x_info, info);
#else
- sprintf(out_val, "[%s]%s%s%s%s(%s) [r, %s%s]", acount, s1, s2, s3, m_name, look_mon_desc(c_ptr->m_idx, 0x01), x_info, info);
+ sprintf(out_val, "[%s]%s%s%s%s(%s) [r, %s%s]", acount, s1, s2, s3, m_name, look_mon_desc(m_ptr, 0x01), x_info, info);
#endif
prt(out_val, 0, 0);
while (1)
{
int i, o_idx;
- cave_type *c_ptr;
/* Save screen */
screen_save();
}
/* Get the object being moved. */
- c_ptr = &cave[y][x];
- o_idx = c_ptr->o_idx;
+ o_idx = c_ptr->o_idx;
/* Only rotate a pile of two or more objects. */
if (!(o_idx && o_list[o_idx].next_o_idx)) continue;
/* Feature code (applying "mimic" field) */
- feat = c_ptr->mimic ? c_ptr->mimic : f_info[c_ptr->feat].mimic;
+ feat = f_info[c_ptr->mimic ? c_ptr->mimic : c_ptr->feat].mimic;
/* Require knowledge about grid, or ability to see grid */
if (!(c_ptr->info & CAVE_MARK) && !player_can_see_bold(y, x))
case '5':
case '0':
/* illegal place */
- if (x == px && y == py) ch = 0;
-
+ if (player_bold(y, x)) ch = 0;
+
/* okay place */
else success = TRUE;