leaving_quest = p_ptr->inside_quest;
/* Leaving an 'only once' quest marks it as failed */
- if (leaving_quest &&
- ((quest[leaving_quest].flags & QUEST_FLAG_ONCE) || (quest[leaving_quest].type == QUEST_TYPE_RANDOM)) &&
- (quest[leaving_quest].status == QUEST_STATUS_TAKEN))
- {
- quest[leaving_quest].status = QUEST_STATUS_FAILED;
- quest[leaving_quest].complev = (byte)p_ptr->lev;
-
- /* Additional settings */
- switch (quest[leaving_quest].type)
+ if (leaving_quest)
+ {
+ quest_type* const q_ptr = &quest[leaving_quest];
+
+ if(((q_ptr->flags & QUEST_FLAG_ONCE) || (q_ptr->type == QUEST_TYPE_RANDOM)) &&
+ (q_ptr->status == QUEST_STATUS_TAKEN))
{
- case QUEST_TYPE_TOWER:
- quest[QUEST_TOWER1].status = QUEST_STATUS_FAILED;
- quest[QUEST_TOWER1].complev = (byte)p_ptr->lev;
- break;
- case QUEST_TYPE_FIND_ARTIFACT:
- a_info[quest[leaving_quest].k_idx].gen_flags &= ~(TRG_QUESTITEM);
- break;
- case QUEST_TYPE_RANDOM:
- r_info[quest[leaving_quest].r_idx].flags1 &= ~(RF1_QUESTOR);
+ q_ptr->status = QUEST_STATUS_FAILED;
+ q_ptr->complev = (byte)p_ptr->lev;
+ update_playtime();
+ q_ptr->comptime = playtime;
- /* Floor of random quest will be blocked */
- prepare_change_floor_mode(CFM_NO_RETURN);
- break;
- }
+ /* Additional settings */
+ switch (q_ptr->type)
+ {
+ case QUEST_TYPE_TOWER:
+ quest[QUEST_TOWER1].status = QUEST_STATUS_FAILED;
+ quest[QUEST_TOWER1].complev = (byte)p_ptr->lev;
+ break;
+ case QUEST_TYPE_FIND_ARTIFACT:
+ a_info[q_ptr->k_idx].gen_flags &= ~(TRG_QUESTITEM);
+ break;
+ case QUEST_TYPE_RANDOM:
+ r_info[q_ptr->r_idx].flags1 &= ~(RF1_QUESTOR);
- /* Record finishing a quest */
- if (quest[leaving_quest].type == QUEST_TYPE_RANDOM)
- {
- if (record_rand_quest) do_cmd_write_nikki(NIKKI_RAND_QUEST_F, leaving_quest, NULL);
- }
- else
- {
- if (record_fix_quest) do_cmd_write_nikki(NIKKI_FIX_QUEST_F, leaving_quest, NULL);
+ /* Floor of random quest will be blocked */
+ prepare_change_floor_mode(CFM_NO_RETURN);
+ break;
+ }
+
+ /* Record finishing a quest */
+ if (q_ptr->type == QUEST_TYPE_RANDOM)
+ {
+ if (record_rand_quest) do_cmd_write_nikki(NIKKI_RAND_QUEST_F, leaving_quest, NULL);
+ }
+ else
+ {
+ if (record_fix_quest) do_cmd_write_nikki(NIKKI_FIX_QUEST_F, leaving_quest, NULL);
+ }
}
}
}
{
quest[QUEST_TOWER1].status = QUEST_STATUS_FAILED;
quest[QUEST_TOWER1].complev = (byte)p_ptr->lev;
+ update_playtime();
+ quest[QUEST_TOWER1].comptime = playtime;
}
}
}
choices[number] = i;
number++;
}
- else if ((flag == TRC_ADD_L_CURSE) || (flag == TRC_ADD_H_CURSE))
+ else if ((flag == TRC_ADD_L_CURSE) || (flag == TRC_ADD_H_CURSE) ||
+ (flag == TRC_DRAIN_HP) || (flag == TRC_DRAIN_MANA) )
{
- u32b cf = (flag == TRC_ADD_L_CURSE) ? TR_ADD_L_CURSE : TR_ADD_H_CURSE;
+ u32b cf;
u32b flgs[4];
object_flags(o_ptr, flgs);
+ switch (flag)
+ {
+ case TRC_ADD_L_CURSE : cf = TR_ADD_L_CURSE; break;
+ case TRC_ADD_H_CURSE : cf = TR_ADD_H_CURSE; break;
+ case TRC_DRAIN_HP : cf = TR_DRAIN_HP; break;
+ default : cf = TR_DRAIN_MANA; break;
+ }
if (have_flag(flgs, cf))
{
choices[number] = i;
for (i = MIN_RANDOM_QUEST; i < MAX_RANDOM_QUEST + 1; i++)
{
- if ((quest[i].type == QUEST_TYPE_RANDOM) &&
- (quest[i].status == QUEST_STATUS_TAKEN) &&
- (quest[i].level < dun_level))
+ quest_type* const q_ptr = &quest[i];
+
+
+ if ((q_ptr->type == QUEST_TYPE_RANDOM) &&
+ (q_ptr->status == QUEST_STATUS_TAKEN) &&
+ (q_ptr->level < dun_level))
{
- quest[i].status = QUEST_STATUS_FAILED;
- quest[i].complev = (byte)p_ptr->lev;
- r_info[quest[i].r_idx].flags1 &= ~(RF1_QUESTOR);
+ q_ptr->status = QUEST_STATUS_FAILED;
+ q_ptr->complev = (byte)p_ptr->lev;
+ update_playtime();
+ q_ptr->comptime = playtime;
+ r_info[q_ptr->r_idx].flags1 &= ~(RF1_QUESTOR);
}
}
}
m_ptr->maxhp = r_ptr->hdice*(r_ptr->hside+1)/2;
m_ptr->max_maxhp = m_ptr->maxhp;
m_ptr->hp = r_ptr->hdice*(r_ptr->hside+1)/2;
+ m_ptr->dealt_damage = 0;
m_ptr->energy_need = ENERGY_NEED() + ENERGY_NEED();
}