if (autosave_l) do_cmd_save_game(TRUE);
- if (p_ptr->inside_quest)
+ /* For a random quest */
+ if (p_ptr->inside_quest &&
+ quest[p_ptr->inside_quest].type == QUEST_TYPE_RANDOM)
{
leave_quest_check();
- if (quest[leaving_quest].type != QUEST_TYPE_RANDOM)
- {
- p_ptr->inside_quest = c_ptr->special;
- dun_level = 0;
- }
- else
- {
- p_ptr->inside_quest = 0;
- }
+ p_ptr->inside_quest = 0;
+ }
+
+ /* For a fixed quest */
+ if (p_ptr->inside_quest &&
+ quest[p_ptr->inside_quest].type != QUEST_TYPE_RANDOM)
+ {
+ leave_quest_check();
+ p_ptr->inside_quest = c_ptr->special;
+ dun_level = 0;
up_num = 0;
}
+
+ /* For normal dungeon and random quest */
else
{
/* New depth */
if (record_stair)
{
#ifdef JP
- if (fall_trap) do_cmd_write_nikki(NIKKI_STAIR, down_num, "Í¸Í¤ËÍî¤Á¤¿");
+ if (fall_trap) do_cmd_write_nikki(NIKKI_STAIR, down_num, "Íî¤Ȥ·¸Í¤ËÍî¤Á¤¿");
else do_cmd_write_nikki(NIKKI_STAIR, down_num, "³¬Ãʤò²¼¤ê¤¿");
#else
if (fall_trap) do_cmd_write_nikki(NIKKI_STAIR, down_num, "fell through a trap door");
if (fall_trap)
{
#ifdef JP
- msg_print("¤ï¤¶¤ÈÍ¸Í¤ËÍî¤Á¤¿¡£");
+ msg_print("¤ï¤¶¤ÈÍî¤Ȥ·¸Í¤ËÍî¤Á¤¿¡£");
#else
msg_print("You deliberately jump through the trap door.");
#endif
int number;
bool small;
- bool great = FALSE;
+ u32b mode = AM_GOOD;
object_type forge;
object_type *q_ptr;
{
number = 5;
small = FALSE;
- great = TRUE;
+ mode |= AM_GREAT;
object_level = o_ptr->xtra3;
}
else
else
{
/* Make a good object */
- if (!make_object(q_ptr, TRUE, great)) continue;
+ if (!make_object(q_ptr, mode)) continue;
}
/* If chest scatters its contents, pick any floor square. */
else
{
#ifdef JP
- msg_print("±²´¬¤«¹çÂΤ·¡¢ÇËÎö¤·¤¿¡ª");
+ msg_print("±²´¬¤¬¹çÂΤ·¡¢ÇËÎö¤·¤¿¡ª");
#else
msg_print("Vortices coalesce and wreak destruction!");
#endif
/* Message. */
#ifdef JP
- msg_print("¶²¤·¤¤À¼¤¬¶Á¤¤¤¿: ¡Ö°Å°Ç¤¬Æò¤ò¤Ä¤Ä¤Þ¤ó¡ª¡×");
+ msg_print("¶²¤í¤·¤¤À¼¤¬¶Á¤¤¤¿: ¡Ö°Å°Ç¤¬Æò¤ò¤Ä¤Ä¤Þ¤ó¡ª¡×");
#else
msg_print("Hideous voices bid: 'Let the darkness have thee!'");
#endif
if (!(c_ptr->info & (CAVE_MARK))) 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;
+
/* Not looking for this feature */
if (!((*test)(feat))) continue;
c_ptr = &cave[y][x];
/* 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;
+
/* Check for chest */
o_idx = chest_check(y, x);
c_ptr = &cave[y][x];
/* Seeing true feature code (ignore mimic) */
-
+
/* Broken door */
if (c_ptr->feat == FEAT_BROKEN)
{
c_ptr = &cave[y][x];
/* 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 open/broken door */
if ((feat != FEAT_OPEN) && (feat != FEAT_BROKEN))
{
c_ptr = &cave[y][x];
/* 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;
/* Sound */
sound(SOUND_DIG);
#else
msg_print("You have finished the tunnel.");
#endif
- chg_virtue(V_DILIGENCE, 1);
- chg_virtue(V_NATURE, -1);
}
+
+ chg_virtue(V_DILIGENCE, 1);
+ chg_virtue(V_NATURE, -1);
}
/* Failure (quartz) */
if (randint0(100) < (15 - dun_level/2))
{
/* Create a simple object */
- place_object(y, x, FALSE, FALSE);
+ place_object(y, x, 0L);
/* Observe new object */
if (player_can_see_bold(y, x))
c_ptr = &cave[y][x];
/* 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;
/* No tunnelling through doors */
if (((feat >= FEAT_DOOR_HEAD) && (feat <= FEAT_DOOR_TAIL)) ||
cave_set_feat(y, x, FEAT_OPEN);
/* Update some things */
- p_ptr->update |= (PU_VIEW | PU_LITE | PU_MONSTERS);
+ p_ptr->update |= (PU_VIEW | PU_LITE | PU_MONSTERS | PU_MON_LITE);
/* Sound */
sound(SOUND_OPENDOOR);
cave_set_feat(y, x, FEAT_OPEN);
/* Update some things */
- p_ptr->update |= (PU_VIEW | PU_LITE | PU_MONSTERS);
+ p_ptr->update |= (PU_VIEW | PU_LITE | PU_MONSTERS | PU_MON_LITE);
/* Sound */
sound(SOUND_OPENDOOR);
c_ptr = &cave[y][x];
/* 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;
/* Check for chests */
o_idx = chest_check(y, x);
move_player(dir, FALSE, FALSE);
/* Update some things */
- p_ptr->update |= (PU_VIEW | PU_LITE);
+ p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
p_ptr->update |= (PU_DISTANCE);
}
c_ptr = &cave[y][x];
/* 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;
/* Nothing useful */
if (!((feat >= FEAT_DOOR_HEAD) &&
c_ptr = &cave[y][x];
/* 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;
/* Take a turn */
energy_use = 100;
c_ptr = &cave[y][x];
/* 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 closed door */
if (!((feat >= FEAT_DOOR_HEAD) &&
if ((have_flag(flgs, TR_SLAY_ANIMAL)) &&
(r_ptr->flags3 & RF3_ANIMAL))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_ANIMAL;
}
if ((have_flag(flgs, TR_KILL_ANIMAL)) &&
(r_ptr->flags3 & RF3_ANIMAL))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_ANIMAL;
}
if ((have_flag(flgs, TR_SLAY_EVIL)) &&
(r_ptr->flags3 & RF3_EVIL))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_EVIL;
}
if ((have_flag(flgs, TR_KILL_EVIL)) &&
(r_ptr->flags3 & RF3_EVIL))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_EVIL;
}
if ((have_flag(flgs, TR_SLAY_HUMAN)) &&
(r_ptr->flags2 & RF2_HUMAN))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags2 |= RF2_HUMAN;
}
if ((have_flag(flgs, TR_KILL_HUMAN)) &&
(r_ptr->flags2 & RF2_HUMAN))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags2 |= RF2_HUMAN;
}
if ((have_flag(flgs, TR_SLAY_UNDEAD)) &&
(r_ptr->flags3 & RF3_UNDEAD))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_UNDEAD;
}
if ((have_flag(flgs, TR_KILL_UNDEAD)) &&
(r_ptr->flags3 & RF3_UNDEAD))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_UNDEAD;
}
if ((have_flag(flgs, TR_SLAY_DEMON)) &&
(r_ptr->flags3 & RF3_DEMON))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_DEMON;
}
if ((have_flag(flgs, TR_KILL_DEMON)) &&
(r_ptr->flags3 & RF3_DEMON))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_DEMON;
}
if ((have_flag(flgs, TR_SLAY_ORC)) &&
(r_ptr->flags3 & RF3_ORC))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_ORC;
}
if ((have_flag(flgs, TR_KILL_ORC)) &&
(r_ptr->flags3 & RF3_ORC))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_ORC;
}
if ((have_flag(flgs, TR_SLAY_TROLL)) &&
(r_ptr->flags3 & RF3_TROLL))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_TROLL;
}
if ((have_flag(flgs, TR_KILL_TROLL)) &&
(r_ptr->flags3 & RF3_TROLL))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_TROLL;
}
if ((have_flag(flgs, TR_SLAY_GIANT)) &&
(r_ptr->flags3 & RF3_GIANT))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_GIANT;
}
if ((have_flag(flgs, TR_KILL_GIANT)) &&
(r_ptr->flags3 & RF3_GIANT))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_GIANT;
}
if ((have_flag(flgs, TR_SLAY_DRAGON)) &&
(r_ptr->flags3 & RF3_DRAGON))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_DRAGON;
}
if ((have_flag(flgs, TR_KILL_DRAGON)) &&
(r_ptr->flags3 & RF3_DRAGON))
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
r_ptr->r_flags3 |= RF3_DRAGON;
}
}
/* Brand (Acid) */
- if ((have_flag(flgs, TR_BRAND_ACID)) || (p_ptr->special_attack & (ATTACK_ACID)))
+ if (have_flag(flgs, TR_BRAND_ACID))
{
/* Notice immunity */
- if (r_ptr->flags3 & RF3_IM_ACID)
+ if (r_ptr->flagsr & RFR_EFF_IM_ACID_MASK)
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
- r_ptr->r_flags3 |= RF3_IM_ACID;
+ r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ACID_MASK);
}
}
}
/* Brand (Elec) */
- if ((have_flag(flgs, TR_BRAND_ELEC)) || (p_ptr->special_attack & (ATTACK_ELEC)))
+ if (have_flag(flgs, TR_BRAND_ELEC))
{
/* Notice immunity */
- if (r_ptr->flags3 & RF3_IM_ELEC)
+ if (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK)
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
- r_ptr->r_flags3 |= RF3_IM_ELEC;
+ r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_ELEC_MASK);
}
}
}
/* Brand (Fire) */
- if ((have_flag(flgs, TR_BRAND_FIRE)) || (p_ptr->special_attack & (ATTACK_FIRE)))
+ if (have_flag(flgs, TR_BRAND_FIRE))
{
/* Notice immunity */
- if (r_ptr->flags3 & RF3_IM_FIRE)
+ if (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK)
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
- r_ptr->r_flags3 |= RF3_IM_FIRE;
+ r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK);
}
}
/* Otherwise, take the damage */
else
{
- if (mult < 17) mult = 17;
+ if (r_ptr->flags3 & RF3_HURT_FIRE)
+ {
+ if (mult < 25) mult = 25;
+ if (m_ptr->ml && is_original_ap(m_ptr))
+ {
+ r_ptr->r_flags3 |= RF3_HURT_FIRE;
+ }
+ }
+ else if (mult < 17) mult = 17;
}
}
/* Brand (Cold) */
- if ((have_flag(flgs, TR_BRAND_COLD)) || (p_ptr->special_attack & (ATTACK_COLD)))
+ if (have_flag(flgs, TR_BRAND_COLD))
{
/* Notice immunity */
- if (r_ptr->flags3 & RF3_IM_COLD)
+ if (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK)
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
- r_ptr->r_flags3 |= RF3_IM_COLD;
+ r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_COLD_MASK);
}
}
/* Otherwise, take the damage */
else
{
- if (mult < 17) mult = 17;
+ if (r_ptr->flags3 & RF3_HURT_COLD)
+ {
+ if (mult < 25) mult = 25;
+ if (m_ptr->ml && is_original_ap(m_ptr))
+ {
+ r_ptr->r_flags3 |= RF3_HURT_COLD;
+ }
+ }
+ else if (mult < 17) mult = 17;
}
}
/* Brand (Poison) */
- if ((have_flag(flgs, TR_BRAND_POIS)) || (p_ptr->special_attack & (ATTACK_POIS)))
+ if (have_flag(flgs, TR_BRAND_POIS))
{
/* Notice immunity */
- if (r_ptr->flags3 & RF3_IM_POIS)
+ if (r_ptr->flagsr & RFR_EFF_IM_POIS_MASK)
{
- if (m_ptr->ml)
+ if (m_ptr->ml && is_original_ap(m_ptr))
{
- r_ptr->r_flags3 |= RF3_IM_POIS;
+ r_ptr->r_flagsr |= (r_ptr->flagsr & RFR_EFF_IM_POIS_MASK);
}
}
if (now_exp < s_info[p_ptr->pclass].w_max[0][j_ptr->sval])
{
int amount = 0;
- if (now_exp < SPELL_EXP_BEGINNER) amount = 80;
- else if (now_exp < SPELL_EXP_SKILLED) amount = 25;
- else if ((now_exp < SPELL_EXP_EXPERT) && (p_ptr->lev > 19)) amount = 10;
+ if (now_exp < WEAPON_EXP_BEGINNER) amount = 80;
+ else if (now_exp < WEAPON_EXP_SKILLED) amount = 25;
+ else if ((now_exp < WEAPON_EXP_EXPERT) && (p_ptr->lev > 19)) amount = 10;
else if (p_ptr->lev > 34) amount = 2;
p_ptr->weapon_exp[0][j_ptr->sval] += amount;
p_ptr->update |= (PU_BONUS);
{
bool fear = FALSE;
- /* Assume a default death */
-#ifdef JP
- cptr note_dies = "¤Ï»à¤ó¤À¡£";
-#else
- cptr note_dies = " dies.";
-#endif
-
- /* Some monsters get "destroyed" */
- if (!monster_living(r_ptr))
- {
- int i;
- bool explode = FALSE;
-
- for (i = 0; i < 4; i++)
- {
- if (r_ptr->blow[i].method == RBM_EXPLODE) explode = TRUE;
- }
-
- /* Special note at death */
- if (explode)
-#ifdef JP
-note_dies = "¤ÏÇúȯ¤·¤ÆÊ´¡¹¤Ë¤Ê¤Ã¤¿¡£";
-#else
- note_dies = " explodes into tiny shreds.";
-#endif
- else
-#ifdef JP
- note_dies = "¤òÅݤ·¤¿¡£";
-#else
- note_dies = " is destroyed.";
-#endif
-
- }
-
/* Handle unseen monster */
if (!visible)
{
}
/* Hit the monster, check for death */
- if (mon_take_hit(c_ptr->m_idx, tdam, &fear, note_dies))
+ if (mon_take_hit(c_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_ptr(m_ptr))))
{
/* Dead monster */
}
return FALSE;
}
- if (p_ptr->inside_arena)
+ if (p_ptr->inside_arena && !boomerang)
{
- if (o_ptr->tval != 5)
+ if (o_ptr->tval != TV_SPIKE)
{
#ifdef JP
msg_print("¥¢¥ê¡¼¥Ê¤Ç¤Ï¥¢¥¤¥Æ¥à¤ò»È¤¨¤Ê¤¤¡ª");
{
bool fear = FALSE;
- /* Assume a default death */
-#ifdef JP
- cptr note_dies = "¤Ï»à¤ó¤À¡£";
-#else
- cptr note_dies = " dies.";
-#endif
-
-
- /* Some monsters get "destroyed" */
- if (!monster_living(r_ptr))
- {
- int i;
- bool explode = FALSE;
-
- for (i = 0; i < 4; i++)
- {
- if (r_ptr->blow[i].method == RBM_EXPLODE) explode = TRUE;
- }
-
- /* Special note at death */
- if (explode)
-#ifdef JP
-note_dies = "¤ÏÇúȯ¤·¤ÆÊ´¡¹¤Ë¤Ê¤Ã¤¿¡£";
-#else
- note_dies = " explodes into tiny shreds.";
-#endif
- else
-#ifdef JP
- note_dies = "¤òÅݤ·¤¿¡£";
-#else
- note_dies = " is destroyed.";
-#endif
-
- }
-
-
/* Handle unseen monster */
if (!visible)
{
/* Hack -- Base damage from thrown object */
tdam = damroll(q_ptr->dd, q_ptr->ds);
/* Apply special damage XXX XXX XXX */
- tdam = tot_dam_aux(q_ptr, tdam, m_ptr, 0);
+ tdam = tot_dam_aux(q_ptr, tdam, m_ptr, 0, TRUE);
tdam = critical_shot(q_ptr->weight, q_ptr->to_h, tdam);
if (q_ptr->to_d > 0)
tdam += q_ptr->to_d;
}
/* Hit the monster, check for death */
- if (mon_take_hit(c_ptr->m_idx, tdam, &fear, note_dies))
+ if (mon_take_hit(c_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_ptr(m_ptr))))
{
/* Dead monster */
}