OSDN Git Service

Add Doxygen comment to wizard1.c.
[hengband/hengband.git] / src / wizard1.c
index b7a2a89..fc987c4 100644 (file)
@@ -1,15 +1,15 @@
-/* File: wizard1.c */
-
-/*
+/*!
+ *  @file wizard1.c
+ *  @brief ¥¦¥£¥¶¡¼¥É¥â¡¼¥É¤Î½èÍý(¥¹¥Ý¥¤¥é¡¼½ÐÎÏÃæ¿´) / Spoiler generation -BEN-
+ *  @date 2014/02/17
+ *  @author
  * Copyright (c) 1997 Ben Harrison, and others
- *
  * This software may be copied and distributed for educational, research,
  * and not for profit purposes provided that this copyright and statement
  * are included in all such copies.  Other copyrights may also apply.
+ * 2013 Deskull rearranged comment for Doxygen.
  */
 
-/* Purpose: Spoiler generation -BEN- */
-
 #include "angband.h"
 
 
@@ -23,58 +23,69 @@ static FILE *fff = NULL;
 
 
 
-/*
+/*!
+ * @brief ¥·¥ó¥Ü¥ë¿¦¤Îµ­½Ò̾¤òÊÖ¤¹ /
  * Extract a textual representation of an attribute
+ * @param r_ptr ¥â¥ó¥¹¥¿¡¼¼ï²¤Î¹½Â¤ÂΥݥ¤¥ó¥¿
+ * @return ¥·¥ó¥Ü¥ë¿¦¤Îµ­½Ò̾
  */
-static cptr attr_to_text(byte a)
+static cptr attr_to_text(monster_race *r_ptr)
 {
-       switch (a)
-       {
 #ifdef JP000
-case TERM_DARK:    return ("XXX¤¤");
-case TERM_WHITE:   return ("Çò¤¤");
-case TERM_SLATE:   return ("Àij¥¿§¤Î");
-case TERM_ORANGE:  return ("¥ª¥ì¥ó¥¸¤Î");
-case TERM_RED:     return ("ÀÖ¤¤");
-case TERM_GREEN:   return ("ÎФÎ");
-case TERM_BLUE:    return ("ÀĤ¤");
-case TERM_UMBER:   return ("àèàῧ¤Î");
-case TERM_L_DARK:  return ("³¥¿§¤Î");
-case TERM_L_WHITE: return ("ÌÀÀij¥¿§¤Î");
-case TERM_VIOLET:  return ("»ç¤Î");
-case TERM_YELLOW:  return ("²«¿§¤¤");
-case TERM_L_RED:   return ("ÌÀ¤¤ÀÖ¤Î");
-case TERM_L_GREEN: return ("ÌÀ¤¤ÎФÎ");
-case TERM_L_BLUE:  return ("ÌÀ¤¤ÀĤÎ");
-case TERM_L_UMBER: return ("ÌÀ¤¤àèàῧ¤Î");
+       if (r_ptr->flags1 & RF1_ATTR_CLEAR)    return "Æ©ÌÀ¤Ê";
+       if (r_ptr->flags1 & RF1_ATTR_MULTI)    return "Ëü¿§¤Î";
+       if (r_ptr->flags1 & RF1_ATTR_SEMIRAND) return "½à¥é¥ó¥À¥à¤Ê";
 #else
-               case TERM_DARK:    return ("xxx");
-               case TERM_WHITE:   return ("White");
-               case TERM_SLATE:   return ("Slate");
-               case TERM_ORANGE:  return ("Orange");
-               case TERM_RED:     return ("Red");
-               case TERM_GREEN:   return ("Green");
-               case TERM_BLUE:    return ("Blue");
-               case TERM_UMBER:   return ("Umber");
-               case TERM_L_DARK:  return ("L.Dark");
-               case TERM_L_WHITE: return ("L.Slate");
-               case TERM_VIOLET:  return ("Violet");
-               case TERM_YELLOW:  return ("Yellow");
-               case TERM_L_RED:   return ("L.Red");
-               case TERM_L_GREEN: return ("L.Green");
-               case TERM_L_BLUE:  return ("L.Blue");
-               case TERM_L_UMBER: return ("L.Umber");
+       if (r_ptr->flags1 & RF1_ATTR_CLEAR)    return "Clear";
+       if (r_ptr->flags1 & RF1_ATTR_MULTI)    return "Multi";
+       if (r_ptr->flags1 & RF1_ATTR_SEMIRAND) return "S.Rand";
 #endif
 
+       switch (r_ptr->d_attr)
+       {
+#ifdef JP000
+       case TERM_DARK:    return "XXX¤¤";
+       case TERM_WHITE:   return "Çò¤¤";
+       case TERM_SLATE:   return "Àij¥¿§¤Î";
+       case TERM_ORANGE:  return "¥ª¥ì¥ó¥¸¤Î";
+       case TERM_RED:     return "ÀÖ¤¤";
+       case TERM_GREEN:   return "ÎФÎ";
+       case TERM_BLUE:    return "ÀĤ¤";
+       case TERM_UMBER:   return "àèàῧ¤Î";
+       case TERM_L_DARK:  return "³¥¿§¤Î";
+       case TERM_L_WHITE: return "ÌÀÀij¥¿§¤Î";
+       case TERM_VIOLET:  return "»ç¤Î";
+       case TERM_YELLOW:  return "²«¿§¤¤";
+       case TERM_L_RED:   return "ÌÀ¤¤ÀÖ¤Î";
+       case TERM_L_GREEN: return "ÌÀ¤¤ÎФÎ";
+       case TERM_L_BLUE:  return "ÌÀ¤¤ÀĤÎ";
+       case TERM_L_UMBER: return "ÌÀ¤¤àèàῧ¤Î";
+#else
+       case TERM_DARK:    return "xxx";
+       case TERM_WHITE:   return "White";
+       case TERM_SLATE:   return "Slate";
+       case TERM_ORANGE:  return "Orange";
+       case TERM_RED:     return "Red";
+       case TERM_GREEN:   return "Green";
+       case TERM_BLUE:    return "Blue";
+       case TERM_UMBER:   return "Umber";
+       case TERM_L_DARK:  return "L.Dark";
+       case TERM_L_WHITE: return "L.Slate";
+       case TERM_VIOLET:  return "Violet";
+       case TERM_YELLOW:  return "Yellow";
+       case TERM_L_RED:   return "L.Red";
+       case TERM_L_GREEN: return "L.Green";
+       case TERM_L_BLUE:  return "L.Blue";
+       case TERM_L_UMBER: return "L.Umber";
+#endif
        }
 
        /* Oops */
 #ifdef JP000
-return ("ÊѤÊ");
+       return "ÊѤÊ";
 #else
-       return ("Icky");
+       return "Icky";
 #endif
-
 }
 
 
@@ -101,7 +112,7 @@ typedef struct
 static grouper group_item[] =
 {
 #ifdef JP
-{ TV_SHOT,          "¼Í·âʪ" },
+       { TV_SHOT,          "¼Í·âʪ" },
 #else
        { TV_SHOT,          "Ammo" },
 #endif
@@ -110,24 +121,23 @@ static grouper group_item[] =
        { TV_BOLT,          NULL },
 
 #ifdef JP
-{ TV_BOW,           "µÝ" },
+       { TV_BOW,           "µÝ" },
 #else
        { TV_BOW,           "Bows" },
 #endif
 
-
 #ifdef JP
-{ TV_SWORD,         "Éð´ï" },
+       { TV_DIGGING,       "Éð´ï" },
 #else
-       { TV_SWORD,         "Weapons" },
+       { TV_DIGGING,       "Weapons" },
 #endif
 
        { TV_POLEARM,       NULL },
        { TV_HAFTED,        NULL },
-       { TV_DIGGING,       NULL },
+       { TV_SWORD,         NULL },
 
 #ifdef JP
-{ TV_SOFT_ARMOR,    "Ëɶñ¡ÊÂΡË" },
+       { TV_SOFT_ARMOR,    "Ëɶñ (ÂÎ)" },
 #else
        { TV_SOFT_ARMOR,    "Armour (Body)" },
 #endif
@@ -136,61 +146,61 @@ static grouper group_item[] =
        { TV_DRAG_ARMOR,    NULL },
 
 #ifdef JP
-{ TV_CLOAK,         "Ëɶñ¡Ê¤½¤Î¾¡Ë" },
+       { TV_BOOTS,         "Ëɶñ (¤½¤Î¾)" },
 #else
-       { TV_CLOAK,         "Armour (Misc)" },
+       { TV_BOOTS,         "Armour (Misc)" },
 #endif
 
-       { TV_SHIELD,        NULL },
+       { TV_GLOVES,        NULL },
        { TV_HELM,          NULL },
        { TV_CROWN,         NULL },
-       { TV_GLOVES,        NULL },
-       { TV_BOOTS,         NULL },
+       { TV_SHIELD,        NULL },
+       { TV_CLOAK,         NULL },
 
 #ifdef JP
-{ TV_AMULET,        "¥¢¥ß¥å¥ì¥Ã¥È" },
-{ TV_RING,          "»ØÎØ" },
+       { TV_LITE,          "¸÷¸»" },
+       { TV_AMULET,        "¥¢¥ß¥å¥ì¥Ã¥È" },
+       { TV_RING,          "»ØÎØ" },
 #else
+       { TV_LITE,          "Light Sources" },
        { TV_AMULET,        "Amulets" },
        { TV_RING,          "Rings" },
 #endif
 
-
 #ifdef JP
-{ TV_SCROLL,        "´¬Êª" },
-{ TV_POTION,        "Ìô" },
-{ TV_FOOD,          "¿©ÎÁ" },
+       { TV_STAFF,         "¾ó" },
+       { TV_WAND,          "ËâË¡ËÀ" },
+       { TV_ROD,           "¥í¥Ã¥É" },
 #else
-       { TV_SCROLL,        "Scrolls" },
-       { TV_POTION,        "Potions" },
-       { TV_FOOD,          "Food" },
+       { TV_STAFF,         "Staffs" },
+       { TV_WAND,          "Wands" },
+       { TV_ROD,           "Rods" },
 #endif
 
-
 #ifdef JP
-{ TV_ROD,           "¥í¥Ã¥É" },
-{ TV_WAND,          "ËâË¡ËÀ" },
-{ TV_STAFF,         "¾ó" },
+       { TV_SCROLL,        "´¬Êª" },
+       { TV_POTION,        "Ìô" },
+       { TV_FOOD,          "¿©ÎÁ" },
 #else
-       { TV_ROD,           "Rods" },
-       { TV_WAND,          "Wands" },
-       { TV_STAFF,         "Staffs" },
+       { TV_SCROLL,        "Scrolls" },
+       { TV_POTION,        "Potions" },
+       { TV_FOOD,          "Food" },
 #endif
 
-
 #ifdef JP
-{ TV_LIFE_BOOK,     "ËâË¡½ñ¡ÊÀ¸Ì¿¡Ë" },
-{ TV_SORCERY_BOOK,  "ËâË¡½ñ¡ÊÀç½Ñ¡Ë" },
-{ TV_NATURE_BOOK,   "ËâË¡½ñ¡Ê¼«Á³¡Ë" },
-{ TV_CHAOS_BOOK,    "ËâË¡½ñ¡Ê¥«¥ª¥¹¡Ë" },
-{ TV_DEATH_BOOK,    "ËâË¡½ñ¡Ê°Å¹õ¡Ë" },
-{ TV_TRUMP_BOOK,    "ËâË¡½ñ¡Ê¥È¥é¥ó¥×¡Ë" },
-{ TV_ARCANE_BOOK,   "ËâË¡½ñ¡ÊÈë½Ñ¡Ë" },
-{ TV_ENCHANT_BOOK,  "ËâË¡½ñ¡Ê¾¢¡Ë" },
-{ TV_DAEMON_BOOK,   "ËâË¡½ñ¡Ê°­Ëâ¡Ë" },
-{ TV_CRUSADE_BOOK,     "ËâË¡½ñ¡ÊÇ˼١Ë" },
-{ TV_MUSIC_BOOK,    "²Î½¸" },
-{ TV_HISSATSU_BOOK, "Éð·Ý¤Î½ñ" },
+       { TV_LIFE_BOOK,     "ËâË¡½ñ (À¸Ì¿)" },
+       { TV_SORCERY_BOOK,  "ËâË¡½ñ (Àç½Ñ)" },
+       { TV_NATURE_BOOK,   "ËâË¡½ñ (¼«Á³)" },
+       { TV_CHAOS_BOOK,    "ËâË¡½ñ (¥«¥ª¥¹)" },
+       { TV_DEATH_BOOK,    "ËâË¡½ñ (°Å¹õ)" },
+       { TV_TRUMP_BOOK,    "ËâË¡½ñ (¥È¥é¥ó¥×)" },
+       { TV_ARCANE_BOOK,   "ËâË¡½ñ (Èë½Ñ)" },
+       { TV_CRAFT_BOOK,    "ËâË¡½ñ (¾¢)" },
+       { TV_DAEMON_BOOK,   "ËâË¡½ñ (°­Ëâ)" },
+       { TV_CRUSADE_BOOK,  "ËâË¡½ñ (Ç˼Ù)" },
+       { TV_MUSIC_BOOK,    "²Î½¸" },
+       { TV_HISSATSU_BOOK, "Éð·Ý¤Î½ñ" },
+       { TV_HEX_BOOK,      "ËâË¡½ñ (¼ö½Ñ)" },
 #else
        { TV_LIFE_BOOK,     "Books (Life)" },
        { TV_SORCERY_BOOK,  "Books (Sorcery)" },
@@ -199,65 +209,66 @@ static grouper group_item[] =
        { TV_DEATH_BOOK,    "Books (Death)" },
        { TV_TRUMP_BOOK,    "Books (Trump)" },
        { TV_ARCANE_BOOK,   "Books (Arcane)" },
-       { TV_ENCHANT_BOOK,  "Books (Craft)" },
+       { TV_CRAFT_BOOK,    "Books (Craft)" },
        { TV_DAEMON_BOOK,   "Books (Daemon)" },
-       { TV_CRUSADE_BOOK,     "Books (Crusade)" },
+       { TV_CRUSADE_BOOK,  "Books (Crusade)" },
        { TV_MUSIC_BOOK,    "Song Books" },
        { TV_HISSATSU_BOOK, "Books (Kendo)" },
+       { TV_HEX_BOOK,      "Books (Hex)" },
 #endif
 
 #ifdef JP
-{ TV_PARCHMENT,    "ÍÓÈé»æ" },
+       { TV_WHISTLE,       "ū" },
+       { TV_CAPTURE,       "¥­¥ã¥×¥Á¥ã¡¼¡¦¥Ü¡¼¥ë" },
+       { TV_CARD,          "¥¨¥¯¥¹¥×¥ì¥¹¥«¡¼¥É" },
 #else
-{ TV_PARCHMENT,    "Parchment" },
+       { TV_WHISTLE,       "Whistle" },
+       { TV_CAPTURE,       "Capture Ball" },
+       { TV_CARD,          "Express Card" },
 #endif
 
 #ifdef JP
-{ TV_CHEST,         "Ȣ" },
+       { TV_CHEST,         "Ȣ" },
 #else
        { TV_CHEST,         "Chests" },
 #endif
 
 #ifdef JP
-{ TV_CAPTURE,         "¥­¥ã¥×¥Á¥ã¡¼¡¦¥Ü¡¼¥ë" },
-#else
-       { TV_CAPTURE,         "Capture Ball" },
-#endif
-
-#ifdef JP
-{ TV_CARD,         "¥¨¥¯¥¹¥×¥ì¥¹¥«¡¼¥É" },
+       { TV_FIGURINE,      "¿Í·Á" },
+       { TV_STATUE,        "Áü" },
+       { TV_CORPSE,        "»àÂÎ" },
 #else
-       { TV_CARD,         "Express Card" },
-#endif
-
        { TV_FIGURINE,      "Magical Figurines" },
        { TV_STATUE,        "Statues" },
        { TV_CORPSE,        "Corpses" },
-
-#ifdef JP
-{ TV_WHISTLE,         "ū" },
-#else
-       { TV_WHISTLE,         "Whistle" },
 #endif
 
 #ifdef JP
-{ TV_SPIKE,         "¤¯¤µ¤Ó" },
+       { TV_SKELETON,      "¤½¤Î¾" },
 #else
-       { TV_SPIKE,         "Spike" },
+       { TV_SKELETON,      "Misc" },
 #endif
 
-       { TV_LITE,          NULL },
-       { TV_FLASK,         NULL },
-       { TV_JUNK,          NULL },
        { TV_BOTTLE,        NULL },
-       { TV_SKELETON,      NULL },
+       { TV_JUNK,          NULL },
+       { TV_SPIKE,         NULL },
+       { TV_FLASK,         NULL },
+       { TV_PARCHMENT,     NULL },
 
        { 0, "" }
 };
 
 
-/*
+/*!
+ * @brief ¥Ù¡¼¥¹¥¢¥¤¥Æ¥à¤Î³Æ¾ðÊó¤òʸ»úÎ󲽤¹¤ë /
  * Describe the kind
+ * @param buf Ì¾¾Î¤òÊÖ¤¹¥Ð¥Ã¥Õ¥¡»²¾È¥Ý¥¤¥ó¥¿
+ * @param dam ¥À¥á¡¼¥¸¥À¥¤¥¹µ­½Ò¤òÊÖ¤¹¥Ð¥Ã¥Õ¥¡»²¾È¥Ý¥¤¥ó¥¿
+ * @param wgt ½ÅÎ̵­½Ò¤òÊÖ¤¹¥Ð¥Ã¥Õ¥¡»²¾È¥Ý¥¤¥ó¥¿
+ * @param lev À¸À®³¬µ­½Ò¤òÊÖ¤¹¥Ð¥Ã¥Õ¥¡»²¾È¥Ý¥¤¥ó¥¿
+ * @param val ²ÁÃͤòÊÖ¤¹¥Ð¥Ã¥Õ¥¡»²¾È¥Ý¥¤¥ó¥¿
+ * @param k ¥Ù¡¼¥¹¥¢¥¤¥Æ¥àID
+ * @return ¤Ê¤·
  */
 static void kind_info(char *buf, char *dam, char *wgt, int *lev, s32b *val, int k)
 {
@@ -282,7 +293,7 @@ static void kind_info(char *buf, char *dam, char *wgt, int *lev, s32b *val, int
 
 
        /* Level */
-       (*lev) = get_object_level(q_ptr);
+       (*lev) = k_info[q_ptr->k_idx].level;
 
        /* Value */
        (*val) = object_value(q_ptr);
@@ -293,7 +304,7 @@ static void kind_info(char *buf, char *dam, char *wgt, int *lev, s32b *val, int
 
 
        /* Description (too brief) */
-       object_desc_store(buf, q_ptr, FALSE, 0);
+       object_desc(buf, q_ptr, (OD_NAME_ONLY | OD_STORE));
 
 
        /* Misc info */
@@ -349,12 +360,15 @@ static void kind_info(char *buf, char *dam, char *wgt, int *lev, s32b *val, int
 }
 
 
-/*
+/*!
+ * @brief ³Æ¥Ù¡¼¥¹¥¢¥¤¥Æ¥à¤Î¾ðÊó¤ò°ì¹ÔËè¤Ëµ­½Ò¤¹¤ë /
  * Create a spoiler file for items
+ * @param fname ¥Õ¥¡¥¤¥ë̾
+ * @return ¤Ê¤·
  */
 static void spoil_obj_desc(cptr fname)
 {
-       int i, k, s, t, n = 0;
+       int i, k, s, t, n = 0, group_start = 0;
 
        u16b who[200];
 
@@ -398,54 +412,59 @@ static void spoil_obj_desc(cptr fname)
                /* Write out the group title */
                if (group_item[i].name)
                {
-                       /* Hack -- bubble-sort by cost and then level */
-                       for (s = 0; s < n - 1; s++)
+                       if (n)
                        {
-                               for (t = 0; t < n - 1; t++)
+                               /* Hack -- bubble-sort by cost and then level */
+                               for (s = 0; s < n - 1; s++)
                                {
-                                       int i1 = t;
-                                       int i2 = t + 1;
+                                       for (t = 0; t < n - 1; t++)
+                                       {
+                                               int i1 = t;
+                                               int i2 = t + 1;
 
-                                       int e1;
-                                       int e2;
+                                               int e1;
+                                               int e2;
 
-                                       s32b t1;
-                                       s32b t2;
+                                               s32b t1;
+                                               s32b t2;
 
-                                       kind_info(NULL, NULL, NULL, &e1, &t1, who[i1]);
-                                       kind_info(NULL, NULL, NULL, &e2, &t2, who[i2]);
+                                               kind_info(NULL, NULL, NULL, &e1, &t1, who[i1]);
+                                               kind_info(NULL, NULL, NULL, &e2, &t2, who[i2]);
 
-                                       if ((t1 > t2) || ((t1 == t2) && (e1 > e2)))
-                                       {
-                                               int tmp = who[i1];
-                                               who[i1] = who[i2];
-                                               who[i2] = tmp;
+                                               if ((t1 > t2) || ((t1 == t2) && (e1 > e2)))
+                                               {
+                                                       int tmp = who[i1];
+                                                       who[i1] = who[i2];
+                                                       who[i2] = tmp;
+                                               }
                                        }
                                }
-                       }
 
-                       /* Spoil each item */
-                       for (s = 0; s < n; s++)
-                       {
-                               int e;
-                               s32b v;
+                               fprintf(fff, "\n\n%s\n\n", group_item[group_start].name);
 
-                               /* Describe the kind */
-                               kind_info(buf, dam, wgt, &e, &v, who[s]);
+                               /* Spoil each item */
+                               for (s = 0; s < n; s++)
+                               {
+                                       int e;
+                                       s32b v;
 
-                               /* Dump it */
-                               fprintf(fff, "     %-45s%8s%7s%5d%9ld\n",
-                                       buf, dam, wgt, e, (long)(v));
-                       }
+                                       /* Describe the kind */
+                                       kind_info(buf, dam, wgt, &e, &v, who[s]);
 
-                       /* Start a new set */
-                       n = 0;
+                                       /* Dump it */
+                                       fprintf(fff, "     %-45s%8s%7s%5d%9ld\n",
+                                               buf, dam, wgt, e, (long)(v));
+                               }
+
+                               /* Start a new set */
+                               n = 0;
+                       }
 
                        /* Notice the end */
                        if (!group_item[i].tval) break;
 
                        /* Start a new set */
-                       fprintf(fff, "\n\n%s\n\n", group_item[i].name);
+                       group_start = i;
                }
 
                /* Acquire legal item types */
@@ -518,6 +537,7 @@ static grouper group_artifact[] =
        { TV_DIGGING,           "¥·¥ã¥Ù¥ë/¤Ä¤ë¤Ï¤·" },
        { TV_BOW,               "Èô¤ÓÆ»¶ñ" },
        { TV_ARROW,             "Ìð" },
+       { TV_BOLT,              NULL },
 
        { TV_SOFT_ARMOR,        "³»" },
        { TV_HARD_ARMOR,        NULL },
@@ -541,6 +561,7 @@ static grouper group_artifact[] =
        { TV_DIGGING,           "Shovels/Picks" },
        { TV_BOW,               "Bows" },
        { TV_ARROW,             "Ammo" },
+       { TV_BOLT,              NULL },
 
        { TV_SOFT_ARMOR,        "Body Armor" },
        { TV_HARD_ARMOR,        NULL },
@@ -814,12 +835,12 @@ static const flag_desc misc_flags2_desc[] =
        { TR_THROW,      "ÅêÚ³" },
        { TR_REFLECT,    "È¿¼Í" },
        { TR_FREE_ACT,   "ËãáãÃΤ餺" },
-       { TR_HOLD_LIFE,  "À¸Ì¿ÎÏ°Ý»ý" },
+       { TR_HOLD_EXP,   "·Ð¸³ÃÍ°Ý»ý" },
 #else
        { TR_THROW,      "Throwing" },
        { TR_REFLECT,    "Reflection" },
        { TR_FREE_ACT,   "Free Action" },
-       { TR_HOLD_LIFE,  "Hold Life" },
+       { TR_HOLD_EXP,   "Hold Experience" },
 #endif
 };
 
@@ -838,21 +859,21 @@ static const flag_desc misc_flags3_desc[] =
        { TR_SH_COLD,            "Î䵤¥ª¡¼¥é" },
        { TR_NO_TELE,            "È¿¥Æ¥ì¥Ý¡¼¥È" },
        { TR_NO_MAGIC,           "È¿ËâË¡" },
-       { TR_FEATHER,            "ÉâÍ·" },
+       { TR_LEVITATION,         "ÉâÍ·" },
        { TR_SEE_INVIS,          "²Ä»ëÆ©ÌÀ" },
        { TR_TELEPATHY,          "¥Æ¥ì¥Ñ¥·¡¼" },
-       { TR_ESP_ANIMAL,             "ưʪ´¶ÃÎ" },
-       { TR_ESP_UNDEAD,             "ÉԻശÃÎ" },
-       { TR_ESP_DEMON,              "°­Ëâ´¶ÃÎ" },
-       { TR_ESP_ORC,                "¥ª¡¼¥¯´¶ÃÎ" },
-       { TR_ESP_TROLL,              "¥È¥í¥ë´¶ÃÎ" },
-       { TR_ESP_GIANT,              "µð¿Í´¶ÃÎ" },
-       { TR_ESP_DRAGON,             "¥É¥é¥´¥ó´¶ÃÎ" },
-       { TR_ESP_HUMAN,              "¿Í´Ö´¶ÃÎ" },
-       { TR_ESP_EVIL,               "¼Ù°­´¶ÃÎ" },
-       { TR_ESP_GOOD,               "Á±ÎÉ´¶ÃÎ" },
-       { TR_ESP_NONLIVING,          "̵À¸Êª´¶ÃÎ" },
-       { TR_ESP_UNIQUE,             "¥æ¥Ë¡¼¥¯´¶ÃÎ" },
+       { TR_ESP_ANIMAL,         "ưʪ´¶ÃÎ" },
+       { TR_ESP_UNDEAD,         "ÉԻശÃÎ" },
+       { TR_ESP_DEMON,          "°­Ëâ´¶ÃÎ" },
+       { TR_ESP_ORC,            "¥ª¡¼¥¯´¶ÃÎ" },
+       { TR_ESP_TROLL,          "¥È¥í¥ë´¶ÃÎ" },
+       { TR_ESP_GIANT,          "µð¿Í´¶ÃÎ" },
+       { TR_ESP_DRAGON,         "¥É¥é¥´¥ó´¶ÃÎ" },
+       { TR_ESP_HUMAN,          "¿Í´Ö´¶ÃÎ" },
+       { TR_ESP_EVIL,           "¼Ù°­´¶ÃÎ" },
+       { TR_ESP_GOOD,           "Á±ÎÉ´¶ÃÎ" },
+       { TR_ESP_NONLIVING,      "̵À¸Êª´¶ÃÎ" },
+       { TR_ESP_UNIQUE,         "¥æ¥Ë¡¼¥¯´¶ÃÎ" },
        { TR_SLOW_DIGEST,        "Ãپò½" },
        { TR_REGEN,              "µÞ®²óÉü" },
        { TR_WARNING,            "·Ù¹ð" },
@@ -868,9 +889,21 @@ static const flag_desc misc_flags3_desc[] =
        { TR_SH_COLD,            "Coldly Aura" },
        { TR_NO_TELE,            "Prevent Teleportation" },
        { TR_NO_MAGIC,           "Anti-Magic" },
-       { TR_FEATHER,            "Levitation" },
+       { TR_LEVITATION,            "Levitation" },
        { TR_SEE_INVIS,          "See Invisible" },
        { TR_TELEPATHY,          "ESP" },
+       { TR_ESP_ANIMAL,         "Sense Animal" },
+       { TR_ESP_UNDEAD,         "Sense Undead" },
+       { TR_ESP_DEMON,          "Sense Demon" },
+       { TR_ESP_ORC,            "Sense Orc" },
+       { TR_ESP_TROLL,          "Sense Troll" },
+       { TR_ESP_GIANT,          "Sense Giant" },
+       { TR_ESP_DRAGON,         "Sense Dragon" },
+       { TR_ESP_HUMAN,          "Sense Human" },
+       { TR_ESP_EVIL,           "Sense Evil" },
+       { TR_ESP_GOOD,           "Sense Good" },
+       { TR_ESP_NONLIVING,      "Sense Nonliving" },
+       { TR_ESP_UNIQUE,         "Sense Unique" },
        { TR_SLOW_DIGEST,        "Slow Digestion" },
        { TR_REGEN,              "Regeneration" },
        { TR_WARNING,            "Warning" },
@@ -1027,7 +1060,7 @@ static cptr *spoiler_flag_aux(const u32b art_flags[TR_FLAG_SIZE],
 static void analyze_general(object_type *o_ptr, char *desc_ptr)
 {
        /* Get a "useful" description of the object */
-       object_desc_store(desc_ptr, o_ptr, TRUE, 1);
+       object_desc(desc_ptr, o_ptr, (OD_NAME_AND_ENCHANT | OD_STORE));
 }
 
 
@@ -1189,6 +1222,8 @@ static void analyze_sustains(object_type *o_ptr, cptr *sustain_list)
 static void analyze_misc_magic(object_type *o_ptr, cptr *misc_list)
 {
        u32b flgs[TR_FLAG_SIZE];
+       int rad;
+       char desc[256];
 
        object_flags(o_ptr, flgs);
 
@@ -1199,69 +1234,62 @@ static void analyze_misc_magic(object_type *o_ptr, cptr *misc_list)
                                     N_ELEMENTS(misc_flags3_desc));
 
        /*
-        * Artifact lights -- large radius light.
-        */
-       if ((o_ptr->tval == TV_LITE) && artifact_p(o_ptr))
+        * Glowing artifacts -- small radius light.
+       */      
+       rad = 0;
+       if (have_flag(flgs, TR_LITE_1))  rad += 1;
+       if (have_flag(flgs, TR_LITE_2))  rad += 2;
+       if (have_flag(flgs, TR_LITE_3))  rad += 3;
+       if (have_flag(flgs, TR_LITE_M1)) rad -= 1;
+       if (have_flag(flgs, TR_LITE_M2)) rad -= 2;
+       if (have_flag(flgs, TR_LITE_M3)) rad -= 3;
+       
+       if(o_ptr->name2 == EGO_LITE_SHINE) rad++;
+
+       if (have_flag(flgs, TR_LITE_FUEL))
        {
-#ifdef JP
-               *misc_list++ = "±Êµ×¸÷¸»(Ⱦ·Â3)";
-#else
-               *misc_list++ = "Permanent Light(3)";
-#endif
+               if(rad > 0) sprintf(desc, _("¤½¤ì¤ÏdzÎÁÊäµë¤Ë¤è¤Ã¤ÆÌÀ¤«¤ê(Ⱦ·Â %d)¤ò¼ø¤±¤ë¡£", "It provides light (radius %d) when fueled."), rad);     
        }
-
-       /*
-        * Glowing artifacts -- small radius light.
-        */
-       if (have_flag(flgs, TR_LITE))
+       else
        {
-#ifdef JP
-               *misc_list++ = "±Êµ×¸÷¸»(Ⱦ·Â1)";
-#else
-               *misc_list++ = "Permanent Light(1)";
-#endif
+               if(rad > 0) sprintf(desc, _("±Êµ×¸÷¸»(Ⱦ·Â %d)", "Permanent Light(radius %d)"), rad);   
+               if(rad < 0) sprintf(desc, _("±Êµ×¸÷¸»(Ⱦ·Â-%d)¡£", "Permanent Light(radius -%d)"), -rad);
        }
 
+       if(rad != 0) *misc_list++ = quark_str(quark_add(desc));
+
        /*
         * Handle cursed objects here to avoid redundancies such as noting
         * that a permanently cursed object is heavily cursed as well as
         * being "lightly cursed".
         */
 
-/*     if (cursed_p(o_ptr)) */
+/*     if (object_is_cursed(o_ptr)) */
        {
                if (have_flag(flgs, TR_TY_CURSE))
                {
-#ifdef JP
-                       *misc_list++ = "ÂÀ¸Å¤Î±åÇ°";
-#else
-                       *misc_list++ = "Ancient Curse";
-#endif
+                       *misc_list++ = _("ÂÀ¸Å¤Î±åÇ°", "Ancient Curse");
                }
                if (o_ptr->curse_flags & TRC_PERMA_CURSE)
                {
-#ifdef JP
-                       *misc_list++ = "±Ê±ó¤Î¼ö¤¤";
-#else
-                       *misc_list++ = "Permanently Cursed";
-#endif
+                       *misc_list++ = _("±Ê±ó¤Î¼ö¤¤", "Permanently Cursed");
                }
                else if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
                {
-#ifdef JP
-                       *misc_list++ = "¶¯ÎϤʼö¤¤";
-#else
-                       *misc_list++ = "Heavily Cursed";
-#endif
+                       *misc_list++ = _("¶¯ÎϤʼö¤¤", "Heavily Cursed");
                }
 /*             else */
                else if (o_ptr->curse_flags & TRC_CURSED)
                {
-#ifdef JP
-                       *misc_list++ = "¼ö¤¤";
-#else
-                       *misc_list++ = "Cursed";
-#endif
+                       *misc_list++ = _("¼ö¤¤", "Cursed");
+               }
+               if (have_flag(flgs, TR_ADD_L_CURSE))
+               {
+                       *misc_list++ = _("¼ö¤¤¤òÁý¤ä¤¹", "Cursing");
+               }
+               if (have_flag(flgs, TR_ADD_H_CURSE))
+               {
+                       *misc_list++ = _("¶¯ÎϤʼö¤¤¤òÁý¤ä¤¹", "Heavily Cursing");
                }
        }
 
@@ -1321,7 +1349,7 @@ static void analyze_misc(object_type *o_ptr, char *misc_desc)
 #ifdef JP
        sprintf(misc_desc, "¥ì¥Ù¥ë %u, ´õ¾¯ÅÙ %u, %d.%d kg, ¡ð%ld",
                a_ptr->level, a_ptr->rarity,
-               lbtokg1(a_ptr->weight), lbtokg2(a_ptr->weight), a_ptr->cost);
+               lbtokg1(a_ptr->weight), lbtokg2(a_ptr->weight), (long int)a_ptr->cost);
 #else
        sprintf(misc_desc, "Level %u, Rarity %u, %d.%d lbs, %ld Gold",
                a_ptr->level, a_ptr->rarity,
@@ -1811,7 +1839,7 @@ static void spoil_mon_desc(cptr fname)
                sprintf(exp, "%ld", (long)(r_ptr->mexp));
 
                /* Hack -- use visual instead */
-               sprintf(exp, "%s '%c'", attr_to_text(r_ptr->d_attr), r_ptr->d_char);
+               sprintf(exp, "%s '%c'", attr_to_text(r_ptr), r_ptr->d_char);
 
                /* Dump the info */
                fprintf(fff, "%-42.42s%4s%4s%4s%7s%5s  %11.11s\n",
@@ -1858,8 +1886,11 @@ static void spoil_out(cptr str)
        /* Line buffer */
        static char roff_buf[256];
 
+       /* Delay buffer */
+       static char roff_waiting_buf[256];
+
 #ifdef JP
-       char iskanji2=0;
+       bool iskanji_flag = FALSE;
 #endif
        /* Current pointer into line roff_buf */
        static char *roff_p = roff_buf;
@@ -1867,17 +1898,28 @@ static void spoil_out(cptr str)
        /* Last space saved into roff_buf */
        static char *roff_s = NULL;
 
+       /* Mega-Hack -- Delayed output */
+       static bool waiting_output = FALSE;
+
        /* Special handling for "new sequence" */
        if (!str)
        {
+               if (waiting_output)
+               {
+                       fputs(roff_waiting_buf, fff);
+                       waiting_output = FALSE;
+               }
+
                if (roff_p != roff_buf) roff_p--;
                while (*roff_p == ' ' && roff_p != roff_buf) roff_p--;
+
                if (roff_p == roff_buf) fprintf(fff, "\n");
                else
                {
                        *(roff_p + 1) = '\0';
                        fprintf(fff, "%s\n\n", roff_buf);
                }
+
                roff_p = roff_buf;
                roff_s = NULL;
                roff_buf[0] = '\0';
@@ -1889,26 +1931,61 @@ static void spoil_out(cptr str)
        {
 #ifdef JP
                char cbak;
-               int k_flag = iskanji((unsigned char)(*str));
+               bool k_flag = iskanji((unsigned char)(*str));
 #endif
                char ch = *str;
-               int wrap = (ch == '\n');
+               bool wrap = (ch == '\n');
 
 #ifdef JP
-               if (!isprint(ch) && !k_flag && !iskanji2) ch = ' ';
-               if(k_flag && !iskanji2)iskanji2=1;else iskanji2=0;
+               if (!isprint(ch) && !k_flag && !iskanji_flag) ch = ' ';
+               iskanji_flag = k_flag && !iskanji_flag;
 #else
                if (!isprint(ch)) ch = ' ';
 #endif
 
+               if (waiting_output)
+               {
+                       fputs(roff_waiting_buf, fff);
+                       if (!wrap) fputc('\n', fff);
+                       waiting_output = FALSE;
+               }
+
+               if (!wrap)
+               {
+#ifdef JP
+                       if (roff_p >= roff_buf + (k_flag ? 74 : 75)) wrap = TRUE;
+                       else if ((ch == ' ') && (roff_p >= roff_buf + (k_flag ? 72 : 73))) wrap = TRUE;
+#else
+                       if (roff_p >= roff_buf + 75) wrap = TRUE;
+                       else if ((ch == ' ') && (roff_p >= roff_buf + 73)) wrap = TRUE;
+#endif
+
+                       if (wrap)
+                       {
+#ifdef JP
+                               bool k_flag_local;
+                               bool iskanji_flag_local = FALSE;
+                               cptr tail = str + (k_flag ? 2 : 1);
+#else
+                               cptr tail = str + 1;
+#endif
+
+                               for (; *tail; tail++)
+                               {
+                                       if (*tail == ' ') continue;
+
 #ifdef JP
-               if ( roff_p >= roff_buf+( (k_flag) ? 74 : 75) ) wrap=1;
-               if ((ch == ' ') && (roff_p + 2 >= roff_buf + ((k_flag) ? 74 : 75))) wrap = 1;
+                                       k_flag_local = iskanji((unsigned char)(*tail));
+                                       if (isprint(*tail) || k_flag_local || iskanji_flag_local) break;
+                                       iskanji_flag_local = k_flag_local && !iskanji_flag_local;
 #else
-               if (roff_p >= roff_buf + 75) wrap = 1;
-               if ((ch == ' ') && (roff_p + 2 >= roff_buf + 75)) wrap = 1;
+                                       if (isprint(*tail)) break;
 #endif
+                               }
 
+                               if (!*tail) waiting_output = TRUE;
+                       }
+               }
 
                /* Handle line-wrap */
                if (wrap)
@@ -1916,21 +1993,22 @@ static void spoil_out(cptr str)
                        *roff_p = '\0';
                        r = roff_p;
 #ifdef JP
-                               cbak=' ';
+                       cbak = ' ';
 #endif
                        if (roff_s && (ch != ' '))
                        {
 #ifdef JP
-                               cbak=*roff_s;
+                               cbak = *roff_s;
 #endif
                                *roff_s = '\0';
                                r = roff_s + 1;
                        }
-                       fprintf(fff, "%s\n", roff_buf);
+                       if (!waiting_output) fprintf(fff, "%s\n", roff_buf);
+                       else strcpy(roff_waiting_buf, roff_buf);
                        roff_s = NULL;
                        roff_p = roff_buf;
 #ifdef JP
-                       if(cbak != ' ') *roff_p++ = cbak; 
+                       if (cbak != ' ') *roff_p++ = cbak;
 #endif
                        while (*r) *roff_p++ = *r++;
                }
@@ -1939,16 +2017,18 @@ static void spoil_out(cptr str)
                if ((roff_p > roff_buf) || (ch != ' '))
                {
 #ifdef JP
-                 if( !k_flag ){
-                       if (ch == ' ' || ch == '(' ) roff_s = roff_p;
-                 }
-                 else{
-                   if( iskanji2 && 
-                       strncmp(str, "¡£", 2) != 0 && 
-                       strncmp(str, "¡¢", 2) != 0 &&
-                       strncmp(str, "¥£", 2) != 0 &&
-                       strncmp(str, "¡¼", 2) != 0) roff_s = roff_p;
-                 }
+                       if (!k_flag)
+                       {
+                               if ((ch == ' ') || (ch == '(')) roff_s = roff_p;
+                       }
+                       else
+                       {
+                               if (iskanji_flag &&
+                                   strncmp(str, "¡£", 2) != 0 &&
+                                   strncmp(str, "¡¢", 2) != 0 &&
+                                   strncmp(str, "¥£", 2) != 0 &&
+                                   strncmp(str, "¡¼", 2) != 0) roff_s = roff_p;
+                       }
 #else
                        if (ch == ' ') roff_s = roff_p;
 #endif
@@ -2039,11 +2119,14 @@ static void spoil_mon_info(cptr fname)
                flags1 = r_ptr->flags1;
 
                /* Prefix */
+               /*
                if (flags1 & (RF1_QUESTOR))
                {
                        spoil_out("[Q] ");
                }
-               else if (flags1 & (RF1_UNIQUE))
+               else
+               */
+               if (flags1 & (RF1_UNIQUE))
                {
                        spoil_out("[U] ");
                }
@@ -2064,7 +2147,7 @@ static void spoil_mon_info(cptr fname)
                spoil_out(buf);
 
                /* Color */
-               spoil_out(attr_to_text(r_ptr->d_attr));
+               spoil_out(attr_to_text(r_ptr));
 
                /* Symbol --(-- */
                sprintf(buf, " '%c')\n", r_ptr->d_char);
@@ -2342,7 +2425,7 @@ static void spoil_mon_evol(cptr fname)
 #endif
                for (n = 1; r_ptr->next_exp; n++)
                {
-                       fprintf(fff, "%*s-(%ld)-> ", n * 2, "", r_ptr->next_exp);
+                       fprintf(fff, "%*s-(%ld)-> ", n * 2, "", (long int)r_ptr->next_exp);
                        fprintf(fff, "[%d]: ", r_ptr->next_r_idx);
                        r_ptr = &r_info[r_ptr->next_r_idx];
 #ifdef JP
@@ -2549,7 +2632,7 @@ static void spoil_random_artifact_aux(object_type *o_ptr, int i)
 {
        obj_desc_list artifact;
 
-       if (!object_known_p(o_ptr) || !o_ptr->art_name
+       if (!object_is_known(o_ptr) || !o_ptr->art_name
                || o_ptr->tval != group_artifact[i].tval)
                return;