* アリーナの何戦目で誰に敗北したかをダンプに明記するように変更.
* p_ptr->arena_numberが負であれば敗北とみなすようになったため, 古い
バージョンで敗北した場合の識別用の数値99を負の数値に変換する必要が
生じたので, セーブファイルバージョンを1.5.0.1に上げ, -MAX_SHORTに変
換している.
* 英語版アリーナで使われる序数のsuffixを関数にまとめた.
/* Don't re-init the wilderness */
reinit_wilderness = FALSE;
- if ((which == 2) && (p_ptr->arena_number == 99))
+ if ((which == 2) && (p_ptr->arena_number < 0))
{
#ifdef JP
msg_print("¡ÖÇÔ¼Ô¤ËÍѤϤʤ¤¡£¡×");
}
+#ifndef JP
+/*
+ * Return suffix of ordinal number
+ */
+cptr get_ordinal_number_suffix(int num)
+{
+ num = ABS(num) % 100;
+ switch (num % 10)
+ {
+ case 1:
+ return (num == 11) ? "th" : "st";
+ case 2:
+ return (num == 12) ? "th" : "nd";
+ case 3:
+ return (num == 13) ? "th" : "rd";
+ default:
+ return "th";
+ }
+}
+#endif
+
+
/*
* Take note to the diary.
*/
}
case NIKKI_ARENA:
{
- if (num == 99)
+ if (num < 0)
{
-
#ifdef JP
- fprintf(fff, " %2d:%02d %20s Æ®µ»¾ì¤Î%d²óÀï¤Ç¡¢%s¤ÎÁ°¤ËÇÔ¤ìµî¤Ã¤¿¡£\n", hour, min, note_level, p_ptr->arena_number + 1, note);
+ fprintf(fff, " %2d:%02d %20s Æ®µ»¾ì¤Î%d²óÀï¤Ç¡¢%s¤ÎÁ°¤ËÇÔ¤ìµî¤Ã¤¿¡£\n", hour, min, note_level, -num, note);
#else
- int n = p_ptr->arena_number + 1;
- fprintf(fff, " %2d:%02d %20s beaten by %s in the %d%s fight.\n", hour, min, note_level, note, n, (n%10==1?"st":n%10==2?"nd":n%10==3?"rd":"th"));
+ int n = -num;
+ fprintf(fff, " %2d:%02d %20s beaten by %s in the %d%s fight.\n", hour, min, note_level, note, n, get_ordinal_number_suffix(n));
#endif
break;
}
#ifdef JP
fprintf(fff, " %2d:%02d %20s Æ®µ»¾ì¤Î%d²óÀï(%s)¤Ë¾¡Íø¤·¤¿¡£\n", hour, min, note_level, num, note);
#else
- fprintf(fff, " %2d:%02d %20s won the %d%s fight (%s).\n", hour, min, note_level, num, (num%10==1?"st":num%10==2?"nd":num%10==3?"rd":"th"), note);
+ fprintf(fff, " %2d:%02d %20s won the %d%s fight (%s).\n", hour, min, note_level, num, get_ordinal_number_suffix(num), note);
#endif
if (num == MAX_ARENA_MONS)
{
#define H_VER_MAJOR 1
#define H_VER_MINOR 5
#define H_VER_PATCH 0
-#define H_VER_EXTRA 0
+#define H_VER_EXTRA 1
/* Added for ZAngband */
#define FAKE_VERSION 0
* Arena constants
*/
#define MAX_ARENA_MONS 38 /* -KMW- */
+#define ARENA_DEFEATED_OLD_VER (-(MAX_SHORT))
/*
if (p_ptr->inside_arena)
{
p_ptr->inside_arena = FALSE;
- if(p_ptr->arena_number > MAX_ARENA_MONS)
+ if (p_ptr->arena_number > MAX_ARENA_MONS)
p_ptr->arena_number++;
else
- p_ptr->arena_number = 99;
+ p_ptr->arena_number = -1 - p_ptr->arena_number;
p_ptr->is_dead = FALSE;
p_ptr->chp = 0;
p_ptr->chp_frac = 0;
msg_format("You are beaten by %s.", m_name);
#endif
msg_print(NULL);
- if (record_arena) do_cmd_write_nikki(NIKKI_ARENA, 99, m_name);
+ if (record_arena) do_cmd_write_nikki(NIKKI_ARENA, -1 - p_ptr->arena_number, m_name);
}
else
{
extern void ang_sort_swap_hook(vptr u, vptr v, int a, int b);
/* cmd4.c */
+#ifndef JP
+extern cptr get_ordinal_number_suffix(int num);
+#endif
extern errr do_cmd_write_nikki(int type, int num, cptr note);
extern void do_cmd_nikki(void);
extern void do_cmd_redraw(void);
fprintf(fff, "\n Num. Random Quests: %d", number_of_quests());
#endif
- if (p_ptr->arena_number == 99)
+ if (p_ptr->arena_number < 0)
{
+ if (p_ptr->arena_number <= ARENA_DEFEATED_OLD_VER)
+ {
+#ifdef JP
+ fprintf(fff, "\n Æ®µ»¾ì: ÇÔËÌ\n");
+#else
+ fprintf(fff, "\n Arena: defeated\n");
+#endif
+ }
+ else
+ {
#ifdef JP
- fprintf(fff, "\n Æ®µ»¾ì: ÇÔËÌ\n");
+ fprintf(fff, "\n Æ®µ»¾ì: %d²óÀï¤Ç%s¤ÎÁ°¤ËÇÔËÌ\n", -p_ptr->arena_number,
+ r_name + r_info[arena_info[-1 - p_ptr->arena_number].r_idx].name);
#else
- fprintf(fff, "\n Arena: defeated\n");
+ fprintf(fff, "\n Arena: defeated by %s in the %d%s fight\n",
+ r_name + r_info[arena_info[-1 - p_ptr->arena_number].r_idx].name,
+ -p_ptr->arena_number, get_ordinal_number_suffix(-p_ptr->arena_number));
#endif
+ }
}
- else if (p_ptr->arena_number > MAX_ARENA_MONS+2)
+ else if (p_ptr->arena_number > MAX_ARENA_MONS + 2)
{
#ifdef JP
fprintf(fff, "\n Æ®µ»¾ì: ¿¿¤Î¥Á¥ã¥ó¥Ô¥ª¥ó\n");
fprintf(fff, "\n Arena: True Champion\n");
#endif
}
- else if (p_ptr->arena_number > MAX_ARENA_MONS-1)
+ else if (p_ptr->arena_number > MAX_ARENA_MONS - 1)
{
#ifdef JP
fprintf(fff, "\n Æ®µ»¾ì: ¥Á¥ã¥ó¥Ô¥ª¥ó\n");
point_l /= 100;
point = (point_h << 16) + (point_l);
- if (p_ptr->arena_number < 99)
+ if (p_ptr->arena_number >= 0)
point += (arena_win * arena_win * (arena_win > 29 ? 1000 : 100));
if (ironman_downward) point *= 2;
/* Read arena and rewards information */
rd_s16b(&p_ptr->arena_number);
+ if (h_older_than(1, 5, 0, 1))
+ {
+ /* Arena loser of previous version was marked number 99 */
+ if (p_ptr->arena_number >= 99) p_ptr->arena_number = ARENA_DEFEATED_OLD_VER;
+ }
rd_s16b(&tmp16s);
p_ptr->inside_arena = (bool)tmp16s;
rd_s16b(&p_ptr->inside_quest);
/* Winner */
else if (p_ptr->total_winner || (p_ptr->lev > PY_MAX_LEVEL))
{
- if ((p_ptr->arena_number > MAX_ARENA_MONS+2) && (p_ptr->arena_number < 99))
+ if (p_ptr->arena_number > MAX_ARENA_MONS + 2)
{
#ifdef JP
/* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½ ¾Î¹æ */
p = "*¿¿¡¦¾¡Íø¼Ô*";
-
#else
p = "*TRUEWINNER*";
#endif
#ifdef JP
/* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½ ¾Î¹æ */
p = "***¾¡Íø¼Ô***";
-
#else
p = "***WINNER***";
#endif