}
}
+static bool ang_sort_comp_quest_num(vptr u, vptr v, int a, int b)
+{
+ int *q_num = (int *)u;
+
+ return (quest[q_num[b]].complev >= quest[q_num[a]].complev);
+}
+
+static void ang_sort_swap_quest_num(vptr u, vptr v, int a, int b)
+{
+ int *q_num = (int *)u;
+ int tmp;
+
+ tmp = q_num[a];
+ q_num[a] = q_num[b];
+ q_num[b] = tmp;
+}
+
errr make_character_dump(FILE *fff)
{
int i, x, y;
char o_name[MAX_NLEN];
char buf[1024];
int total;
+ int *quest_num;
+ int dummy;
#ifdef JP
fprintf(fff, " [ÊѶòÈÚÅÜ %d.%d.%d ¥¥ã¥é¥¯¥¿¾ðÊó]\n\n",
#else
fprintf(fff, "\n< Completed Quest >\n");
#endif
+
+ /* Allocate Memory */
+ C_MAKE(quest_num, max_quests, int);
+
+ /* Sort by compete level */
+ for (i = 1; i < max_quests; i++)
+ {
+ quest_num[i] = i;
+ }
+ ang_sort_comp = ang_sort_comp_quest_num;
+ ang_sort_swap = ang_sort_swap_quest_num;
+ ang_sort(quest_num, &dummy, max_quests);
+
+ /* Dump Quest Information */
total = 0;
for (i = 1; i < max_quests; i++)
{
+ int num = quest_num[i];
+
/* No info from "silent" quests */
- if (quest[i].flags & QUEST_FLAG_SILENT) continue;
+ if (quest[num].flags & QUEST_FLAG_SILENT) continue;
- if (quest[i].status == QUEST_STATUS_FINISHED)
+ if (quest[num].status == QUEST_STATUS_FINISHED)
{
int old_quest;
total++;
- if (i < MIN_RANDOM_QUEST)
+ if (num < MIN_RANDOM_QUEST)
{
/* Set the quest number temporary */
old_quest = p_ptr->inside_quest;
- p_ptr->inside_quest = i;
+ p_ptr->inside_quest = num;
/* Get the quest */
init_flags = INIT_ASSIGN;
p_ptr->inside_quest = old_quest;
}
- if ((i >= MIN_RANDOM_QUEST) && quest[i].r_idx)
+ if ((num >= MIN_RANDOM_QUEST) && quest[num].r_idx)
{
/* Print the quest info */
- if (quest[i].complev == 0)
+ if (quest[num].complev == 0)
{
fprintf(fff,
#ifdef JP
#else
" %s (Dungeon level: %d) - (Cancelled)\n",
#endif
- r_name+r_info[quest[i].r_idx].name,
- quest[i].level);
+ r_name+r_info[quest[num].r_idx].name,
+ quest[num].level);
}
else
{
#else
" %s (Dungeon level: %d) - level %d\n",
#endif
- r_name+r_info[quest[i].r_idx].name,
- quest[i].level,
- quest[i].complev);
+ r_name+r_info[quest[num].r_idx].name,
+ quest[num].level,
+ quest[num].complev);
}
}
else
fprintf(fff, " %s (Danger level: %d) - level %d\n",
#endif
- quest[i].name, quest[i].level, quest[i].complev);
+ quest[num].name, quest[num].level, quest[num].complev);
}
}
}
total = 0;
for (i = 1; i < max_quests; i++)
{
+ int num = quest_num[i];
+
/* No info from "silent" quests */
- if (quest[i].flags & QUEST_FLAG_SILENT) continue;
+ if (quest[num].flags & QUEST_FLAG_SILENT) continue;
- if ((quest[i].status == QUEST_STATUS_FAILED_DONE) || (quest[i].status == QUEST_STATUS_FAILED))
+ if ((quest[num].status == QUEST_STATUS_FAILED_DONE) || (quest[num].status == QUEST_STATUS_FAILED))
{
int old_quest;
total++;
- if (i < MIN_RANDOM_QUEST)
+ if (num < MIN_RANDOM_QUEST)
{
/* Set the quest number temporary */
old_quest = p_ptr->inside_quest;
- p_ptr->inside_quest = i;
+ p_ptr->inside_quest = num;
/* Get the quest text */
init_flags = INIT_ASSIGN;
p_ptr->inside_quest = old_quest;
}
- if ((i >= MIN_RANDOM_QUEST) && quest[i].r_idx)
+ if ((num >= MIN_RANDOM_QUEST) && quest[num].r_idx)
{
/* Print the quest info */
#ifdef JP
fprintf(fff, " %s (Dungeon level: %d) - level %d\n",
#endif
- r_name+r_info[quest[i].r_idx].name, quest[i].level, quest[i].complev);
+ r_name+r_info[quest[num].r_idx].name, quest[num].level, quest[num].complev);
}
else
{
fprintf(fff, " %s (Danger level: %d) - level %d\n",
#endif
- quest[i].name, quest[i].level, quest[i].complev);
+ quest[num].name, quest[num].level, quest[num].complev);
}
}
}
+
#ifdef JP
if (!total) fprintf(fff, " ¤Ê¤·\n");
#else
#endif
fprintf(fff, "\n");
+ /* Free Memory */
+ C_KILL(quest_num, max_quests, int);
+
if (p_ptr->is_dead && !p_ptr->total_winner)
{
#ifdef JP