OSDN Git Service

アリーナに関する変更.
authornothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 5 Jun 2003 17:29:12 +0000 (17:29 +0000)
committernothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 5 Jun 2003 17:29:12 +0000 (17:29 +0000)
* アリーナの何戦目で誰に敗北したかをダンプに明記するように変更.
* p_ptr->arena_numberが負であれば敗北とみなすようになったため, 古い
  バージョンで敗北した場合の識別用の数値99を負の数値に変換する必要が
  生じたので, セーブファイルバージョンを1.5.0.1に上げ, -MAX_SHORTに変
  換している.
* 英語版アリーナで使われる序数のsuffixを関数にまとめた.

src/bldg.c
src/cmd4.c
src/defines.h
src/dungeon.c
src/effects.c
src/externs.h
src/files.c
src/load.c
src/xtra1.c

index 96d8025..7bc55e5 100644 (file)
@@ -4860,7 +4860,7 @@ msg_print("
        /* 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("¡ÖÇÔ¼Ô¤ËÍѤϤʤ¤¡£¡×");
index 6d198a9..d2d0908 100644 (file)
@@ -332,6 +332,28 @@ static void close_auto_dump(void)
 }
 
 
+#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.
  */
@@ -620,21 +642,20 @@ errr do_cmd_write_nikki(int type, int num, cptr note)
                }
                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)
                        {
index 7896bcd..3af846b 100644 (file)
@@ -49,7 +49,7 @@
 #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))
 
 
 /*
index 5ec9ad4..fb3bc06 100644 (file)
@@ -7022,10 +7022,10 @@ prt("
                        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;
index 934150f..1abd5da 100644 (file)
@@ -5147,7 +5147,7 @@ int take_hit(int damage_type, int damage, cptr hit_from, int monspell)
                        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
                {
index 7514f0e..79cc8b3 100644 (file)
@@ -650,6 +650,9 @@ extern bool ang_sort_comp_hook(vptr u, vptr v, int a, int b);
 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);
index 91a45e0..c353d8a 100644 (file)
@@ -4305,15 +4305,29 @@ errr make_character_dump(FILE *fff)
        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");
@@ -4321,7 +4335,7 @@ errr make_character_dump(FILE *fff)
                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");
@@ -5811,7 +5825,7 @@ long total_points(void)
        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;
index 0344281..3ecb341 100644 (file)
@@ -1572,6 +1572,11 @@ static void rd_extra(void)
 
        /* 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);
index d02e603..d1dc81e 100644 (file)
@@ -677,12 +677,11 @@ static void prt_title(void)
        /* 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
@@ -692,7 +691,6 @@ static void prt_title(void)
 #ifdef JP
                        /* ±ÑÆüÀÚ¤êÂؤ¨µ¡Ç½ ¾Î¹æ */
                        p = "***¾¡Íø¼Ô***";
-
 #else
                        p = "***WINNER***";
 #endif