OSDN Git Service

combined head-ego.
[hengband/hengband.git] / src / dungeon.c
index 115e354..2f404ad 100644 (file)
@@ -1179,39 +1179,45 @@ void leave_quest_check(void)
        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);
+                       }
                }
        }
 }
@@ -1228,6 +1234,8 @@ void leave_tower_check(void)
                {
                        quest[QUEST_TOWER1].status = QUEST_STATUS_FAILED;
                        quest[QUEST_TOWER1].complev = (byte)p_ptr->lev;
+                       update_playtime();
+                       quest[QUEST_TOWER1].comptime = playtime;
                }
        }
 }
@@ -1511,11 +1519,19 @@ static object_type *choose_cursed_obj_name(u32b flag)
                        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;
@@ -3405,13 +3421,18 @@ static void process_world_aux_movement(void)
 
                                        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);
                                                }
                                        }
                                }
@@ -7061,6 +7082,7 @@ prt("
                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();
        }