OSDN Git Service

[Refactor] #37353 chest_traps を trap.c へ移動。
[hengband/hengband.git] / src / flavor.c
index 30d3abf..f7f4f92 100644 (file)
@@ -1,6 +1,6 @@
-/*!
+/*!
  *  @file flavor.c
- *  @brief ¥ª¥Ö¥¸¥§¥¯¥È¤Îµ­½Ò½èÍý / Mbject flavor code
+ *  @brief オブジェクトの記述処理 / Mbject flavor code
  *  @date 2014/01/03
  *  @author
  * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke\n
  */
 
 #include "angband.h"
+#include "player-status.h"
+#include "shoot.h"
+#include "object-hook.h"
+#include "trap.h"
 
 /*!
- * @brief ºÇ½é¤«¤é´Ê°×¤Ê̾¾Î¤¬ÌÀ¤é¤«¤Ë¤Ê¤ë¥Ù¡¼¥¹¥¢¥¤¥Æ¥à¤ÎȽÄê¡£ /  Certain items, if aware, are known instantly 
- * @param i ¥Ù¡¼¥¹¥¢¥¤¥Æ¥àID
- * @return ´Ê°×̾¾Î¤òÌÀ¤é¤«¤Ë¤¹¤ë¤Ê¤éTRUE¤òÊÖ¤¹¡£
+ * @brief 最初から簡易な名称が明らかになるベースアイテムの判定。 /  Certain items, if aware, are known instantly 
+ * @param i ベースアイテムID
+ * @return 簡易名称を明らかにするならTRUEを返す。
  * @details
  * This function is used only by "flavor_init()"
  */
@@ -65,16 +69,15 @@ static bool object_easy_know(int i)
                }
        }
 
-       /* Nope */
        return (FALSE);
 }
 
 /*!
- * @brief ³Æ¼ï¸ì×䫤é¥é¥ó¥À¥à¤Ê̾Á°¤òºîÀ®¤¹¤ë / Create a name from random parts.
- * @param out_string ºîÀ®¤·¤¿Ì¾¤òÊݴɤ¹¤ë»²¾È¥Ý¥¤¥ó¥¿
- * @return ¤Ê¤·
- * @details ÆüËܸì¤Î¾ì¹ç aname_j.txt ±Ñ¸ì¤Î¾ì¹ç³ÎΨ¤Ë±þ¤¸¤Æ
- * syllables ÇÛÎó¤È elvish.txt ¤òÁȤ߹ç¤ï¤»¤ë¡£\n
+ * @brief 各種語彙からランダムな名前を作成する / Create a name from random parts.
+ * @param out_string ä½\9cæ\88\90ã\81\97ã\81\9få\90\8dã\82\92ä¿\9d管ã\81\99ã\82\8bå\8f\82ç\85§ã\83\9dã\82¤ã\83³ã\82¿
+ * @return なし
+ * @details 日本語の場合 aname_j.txt 英語の場合確率に応じて
+ * syllables 配列と elvish.txt を組み合わせる。\n
  */
 void get_table_name_aux(char *out_string)
 {
@@ -87,7 +90,7 @@ void get_table_name_aux(char *out_string)
 #else
 #define MAX_SYLLABLES 164       /* Used with scrolls (see below) */
 
-       static cptr syllables[MAX_SYLLABLES] = {
+       static concptr syllables[MAX_SYLLABLES] = {
                "a", "ab", "ag", "aks", "ala", "an", "ankh", "app",
                "arg", "arze", "ash", "aus", "ban", "bar", "bat", "bek",
                "bie", "bin", "bit", "bjor", "blu", "bot", "bu",
@@ -138,28 +141,23 @@ void get_table_name_aux(char *out_string)
 }
 
 /*!
- * @brief ¥é¥ó¥À¥à¤Ê̾Á°¤ò¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥ÈÌäȤ·¤ÆÀ°·Á¤¹¤ë¡£ / Create a name from random parts with quotes.
- * @param out_string ºîÀ®¤·¤¿Ì¾¤òÊݴɤ¹¤ë»²¾È¥Ý¥¤¥ó¥¿
- * @return ¤Ê¤·
- * @details get_table_name_aux()¤Û¤Ü´°Á´¤Ë¼ÂÁõ¤ò°Í¸¤·¤Æ¤¤¤ë¡£
+ * @brief ランダムな名前をアーティファクト銘として整形する。 / Create a name from random parts with quotes.
+ * @param out_string ä½\9cæ\88\90ã\81\97ã\81\9få\90\8dã\82\92ä¿\9d管ã\81\99ã\82\8bå\8f\82ç\85§ã\83\9dã\82¤ã\83³ã\82¿
+ * @return なし
+ * @details get_table_name_aux()ほぼ完全に実装を依存している。
  */
 void get_table_name(char *out_string)
 {
        char buff[80];
        get_table_name_aux(buff);
-
-#ifdef JP
-       sprintf(out_string, "¡Ø%s¡Ù", buff);
-#else
-       sprintf(out_string, "'%s'", buff);
-#endif
+       sprintf(out_string, _("『%s』", "'%s'"), buff);
 }
 
 /*!
- * @brief ¥é¥ó¥À¥à¤Ê¥·¥ó¥À¥ê¥óÌäòºîÀ®¤¹¤ë / Make random Sindarin name
- * @param out_string ºîÀ®¤·¤¿Ì¾¤òÊݴɤ¹¤ë»²¾È¥Ý¥¤¥ó¥¿
- * @return ¤Ê¤·
- * @details sname.txt¤¬¸ì´´¤Î¼­½ñ¤È¤Ê¤Ã¤Æ¤¤¤ë¡£
+ * @brief ランダムなシンダリン銘を作成する / Make random Sindarin name
+ * @param out_string ä½\9cæ\88\90ã\81\97ã\81\9få\90\8dã\82\92ä¿\9d管ã\81\99ã\82\8bå\8f\82ç\85§ã\83\9dã\82¤ã\83³ã\82¿
+ * @return なし
+ * @details sname.txtが語幹の辞書となっている。
  */
 void get_table_sindarin_aux(char *out_string)
 {
@@ -185,38 +183,33 @@ void get_table_sindarin_aux(char *out_string)
 }
 
 /*!
- * @brief ¥·¥ó¥À¥ê¥óÌäò¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥ÈÍѤËÀ°·Á¤¹¤ë¡£ / Make random Sindarin name with quotes
- * @param out_string ºîÀ®¤·¤¿Ì¾¤òÊݴɤ¹¤ë»²¾È¥Ý¥¤¥ó¥¿
- * @return ¤Ê¤·
- * @details get_table_sindarin_aux()¤Û¤Ü´°Á´¤Ë¼ÂÁõ¤ò°Í¸¤·¤Æ¤¤¤ë¡£
+ * @brief シンダリン銘をアーティファクト用に整形する。 / Make random Sindarin name with quotes
+ * @param out_string ä½\9cæ\88\90ã\81\97ã\81\9få\90\8dã\82\92ä¿\9d管ã\81\99ã\82\8bå\8f\82ç\85§ã\83\9dã\82¤ã\83³ã\82¿
+ * @return なし
+ * @details get_table_sindarin_aux()ほぼ完全に実装を依存している。
  */
 void get_table_sindarin(char *out_string)
 {
        char buff[80];
        get_table_sindarin_aux(buff);
-
-#ifdef JP
-       sprintf(out_string, "¡Ø%s¡Ù", buff);
-#else
-       sprintf(out_string, "'%s'", buff);
-#endif
+       sprintf(out_string, _("『%s』", "'%s'"), buff);
 }
 
 
 /*!
- * @brief ¥Ù¡¼¥¹¥¢¥¤¥Æ¥à¤Î̤³ÎÄê̾¤ò¶¦ÄÌtval´Ö¤Ç¥·¥ã¥Ã¥Õ¥ë¤¹¤ë / Shuffle flavor indices of a group of objects with given tval
- * @param byte ¥·¥ã¥Ã¥Õ¥ë¤·¤¿¤¤tval
- * @return ¤Ê¤·
- * @details ´¬Êª¡¢³Æ¼ïËâÆ»¶ñ¤Ê¤É¤ËÍøÍѤµ¤ì¤ë¡£
+ * @brief ベースアイテムの未確定名を共通tval間でシャッフルする / Shuffle flavor indices of a group of objects with given tval
+ * @param tval シャッフルしたいtval
+ * @return なし
+ * @details 巻物、各種魔道具などに利用される。
  */
-static void shuffle_flavors(byte tval)
+static void shuffle_flavors(OBJECT_TYPE_VALUE tval)
 {
-       s16b *k_idx_list;
-       int k_idx_list_num = 0;
-       int i;
+       KIND_OBJECT_IDX *k_idx_list;
+       KIND_OBJECT_IDX k_idx_list_num = 0;
+       KIND_OBJECT_IDX i;
 
        /* Allocate an array for a list of k_idx */
-       C_MAKE(k_idx_list, max_k_idx, s16b);
+       C_MAKE(k_idx_list, max_k_idx, KIND_OBJECT_IDX);
 
        /* Search objects with given tval for shuffle */
        for (i = 0; i < max_k_idx; i++)
@@ -256,8 +249,8 @@ static void shuffle_flavors(byte tval)
 }
 
 /*!
- * @brief ¥²¡¼¥à³«»Ï»þ¤Ë¹Ô¤ï¤ì¤ë¥Ù¡¼¥¹¥¢¥¤¥Æ¥à¤Î½é´ü²½¥ë¡¼¥Á¥ó / Prepare the "variable" part of the "k_info" array.
- * @return ¤Ê¤·
+ * @brief ゲーム開始時に行われるベースアイテムの初期化ルーチン / Prepare the "variable" part of the "k_info" array.
+ * @return なし
  * @details
  * Prepare the "variable" part of the "k_info" array.\n
  *\n
@@ -291,14 +284,14 @@ static void shuffle_flavors(byte tval)
  */
 void flavor_init(void)
 {
-       int i;
+       KIND_OBJECT_IDX i;
        u32b state_backup[4];
 
        /* Hack -- Backup the RNG state */
        Rand_state_backup(state_backup);
 
        /* Hack -- Induce consistant flavors */
-       Rand_state_init(seed_flavor);
+       Rand_state_set(seed_flavor);
 
 
        /* Initialize flavor index of each object by itself */
@@ -362,10 +355,10 @@ void flavor_init(void)
 
 
 /*!
- * @brief ÂоÝʸ»úÇÛÎó¤Ë°ìʸ»ú¤À¤±¤ò¥³¥Ô¡¼¤¹¤ë¡£
- * @param t ÊÝ´ÉÀèʸ»úÎó¥Ý¥¤¥ó¥¿
- * @param c Êݴɤ·¤¿¤¤1ʸ»ú
- * @return ¤Ê¤·
+ * @brief 対象文字配列に一文字だけをコピーする。
+ * @param t ä¿\9d管å\85\88æ\96\87å­\97å\88\97ã\83\9dã\82¤ã\83³ã\82¿
+ * @param c 保管したい1文字
+ * @return なし
  * @details
  * Print a char "c" into a string "t", as if by sprintf(t, "%c", c),\n
  * and return a pointer to the terminator (t + 1).\n
@@ -377,37 +370,33 @@ static char *object_desc_chr(char *t, char c)
 
        /* Terminate */
        *t = '\0';
-
-       /* Result */
        return (t);
 }
 
 /*!
- * @brief ÂоÝʸ»úÇÛÎó¤Ëʸ»úÎó¤ò¥³¥Ô¡¼¤¹¤ë¡£
- * @param t ÊÝ´ÉÀèʸ»úÎó¥Ý¥¤¥ó¥¿
- * @param c ¥³¥Ô¡¼¤·¤¿¤¤Ê¸»úÎó¥Ý¥¤¥ó¥¿
- * @return ¤Ê¤·
+ * @brief 対象文字配列に文字列をコピーする。
+ * @param t ä¿\9d管å\85\88æ\96\87å­\97å\88\97ã\83\9dã\82¤ã\83³ã\82¿
+ * @param s ã\82³ã\83\94ã\83¼ã\81\97ã\81\9fã\81\84æ\96\87å­\97å\88\97ã\83\9dã\82¤ã\83³ã\82¿
+ * @return 保管先の末尾アドレス
  * @details
  * Print a string "s" into a string "t", as if by strcpy(t, s),
  * and return a pointer to the terminator.
  */
-static char *object_desc_str(char *t, cptr s)
+static char *object_desc_str(char *t, concptr s)
 {
        /* Copy the string */
        while (*s) *t++ = *s++;
 
        /* Terminate */
        *t = '\0';
-
-       /* Result */
        return (t);
 }
 
 /*!
- * @brief ÂоÝʸ»úÇÛÎó¤ËÉä¹æ¤Ê¤·À°¿ôÃͤò¥³¥Ô¡¼¤¹¤ë¡£
- * @param t ÊÝ´ÉÀèʸ»úÎó¥Ý¥¤¥ó¥¿
- * @param n ¥³¥Ô¡¼¤·¤¿¤¤¿ôÃÍ
- * @return ¤Ê¤·
+ * @brief 対象文字配列に符号なし整数値をコピーする。
+ * @param t ä¿\9d管å\85\88æ\96\87å­\97å\88\97ã\83\9dã\82¤ã\83³ã\82¿
+ * @param n コピーしたい数値
+ * @return なし
  * @details
  * Print an unsigned number "n" into a string "t", as if by
  * sprintf(t, "%u", n), and return a pointer to the terminator.
@@ -434,8 +423,6 @@ static char *object_desc_num(char *t, uint n)
 
        /* Terminate */
        *t = '\0';
-
-       /* Result */
        return (t);
 }
 
@@ -444,12 +431,12 @@ static char *object_desc_num(char *t, uint n)
 
 #ifdef JP
 /*!
- * @brief ÆüËܸì¤Î¸Ä¿ôɽ¼¨¥ë¡¼¥Á¥ó
- * @param t ÊÝ´ÉÀèʸ»úÎó¥Ý¥¤¥ó¥¿
- * @param o_ptr µ­½Ò¤·¤¿¤¤¥ª¥Ö¥¸¥§¥¯¥È¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
- * @return ¤Ê¤·
+ * @brief 日本語の個数表示ルーチン
+ * @param t ä¿\9d管å\85\88æ\96\87å­\97å\88\97ã\83\9dã\82¤ã\83³ã\82¿
+ * @param o_ptr è¨\98è¿°ã\81\97ã\81\9fã\81\84ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\81®æ§\8bé\80 ä½\93å\8f\82ç\85§ã\83\9dã\82¤ã\83³ã\82¿
+ * @return なし
  * @details
- * cmd1.c ¤ÇήÍѤ¹¤ë¤¿¤á¤Ë object_desc_japanese ¤«¤é°ÜÆ°¤·¤¿¡£
+ * cmd1.c で流用するために object_desc_japanese から移動した。
  */
 char *object_desc_kosuu(char *t, object_type *o_ptr)
 {
@@ -465,17 +452,17 @@ char *object_desc_kosuu(char *t, object_type *o_ptr)
       case TV_ROD:
       case TV_DIGGING:
       {
-         t = object_desc_str(t, "ËÜ");
+         t = object_desc_str(t, "");
          break;
       }
       case TV_SCROLL:
       {
-         t = object_desc_str(t, "´¬");
+         t = object_desc_str(t, "");
          break;
       }
       case TV_POTION:
       {
-         t = object_desc_str(t, "Éþ");
+         t = object_desc_str(t, "");
          break;
       }
       case  TV_LIFE_BOOK:
@@ -492,7 +479,7 @@ char *object_desc_kosuu(char *t, object_type *o_ptr)
       case  TV_HISSATSU_BOOK:
          case TV_HEX_BOOK:
       {
-         t = object_desc_str(t, "ºý");
+         t = object_desc_str(t, "");
          break;
       }
       case TV_SOFT_ARMOR:
@@ -500,32 +487,32 @@ char *object_desc_kosuu(char *t, object_type *o_ptr)
       case TV_DRAG_ARMOR:
       case TV_CLOAK:
       {
-         t = object_desc_str(t, "Ãå");
+         t = object_desc_str(t, "");
          break;
       }
       case TV_SWORD:
       case TV_HAFTED:
       case TV_BOW:
       {
-         t = object_desc_str(t, "¿¶");
+         t = object_desc_str(t, "");
          break;
       }
       case TV_BOOTS:
       {
-         t = object_desc_str(t, "­");
+         t = object_desc_str(t, "");
          break;
       }
       case TV_CARD:
       {
-         t = object_desc_str(t, "Ëç");
+         t = object_desc_str(t, "");
          break;
       }
-           /* ¿©¤Ù¤â¤Î by ita */
+           /* 食べもの by ita */
       case TV_FOOD:
       {
          if(o_ptr->sval == SV_FOOD_JERKY)
          {
-             t = object_desc_str(t, "ÀÚ¤ì");
+             t = object_desc_str(t, "切れ");
              break;
          }
       }
@@ -533,11 +520,11 @@ char *object_desc_kosuu(char *t, object_type *o_ptr)
       {
          if (o_ptr->number < 10)
          {
-             t = object_desc_str(t, "¤Ä");
+             t = object_desc_str(t, "");
          }
          else
          {
-             t = object_desc_str(t, "¸Ä");
+             t = object_desc_str(t, "");
          }
          break;
       }
@@ -547,10 +534,10 @@ char *object_desc_kosuu(char *t, object_type *o_ptr)
 #endif
 
 /*!
- * @brief ÂоÝʸ»úÇÛÎó¤ËÉä¹æ¤¢¤êÀ°¿ôÃͤò¥³¥Ô¡¼¤¹¤ë¡£
- * @param t ÊÝ´ÉÀèʸ»úÎó¥Ý¥¤¥ó¥¿
- * @param v ¥³¥Ô¡¼¤·¤¿¤¤¿ôÃÍ
- * @return ¤Ê¤·
+ * @brief 対象文字配列に符号あり整数値をコピーする。
+ * @param t ä¿\9d管å\85\88æ\96\87å­\97å\88\97ã\83\9dã\82¤ã\83³ã\82¿
+ * @param v コピーしたい数値
+ * @return なし
  * @details
  * Print an signed number "v" into a string "t", as if by
  * sprintf(t, "%+d", n), and return a pointer to the terminator.
@@ -598,199 +585,197 @@ static char *object_desc_int(char *t, sint v)
 
        /* Terminate */
        *t = '\0';
-
-       /* Result */
        return (t);
 }
 
 
 /*!
- * ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë¤Î¹½Â¤ÂΠ/ Structs and tables for Auto Inscription for flags
+ * オブジェクトの特性表示記号テーブルの構造体 / Structs and tables for Auto Inscription for flags
  */
 typedef struct flag_insc_table
 {
 #ifdef JP
-       cptr japanese;
+       concptr japanese;
 #endif
-       cptr english;
+       concptr english;
        int flag;
        int except_flag;
 } flag_insc_table;
 
 #ifdef JP
-/*! ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë¤ÎÄêµÁ(pvalÍ×ÁÇ) */
+/*! オブジェクトの特性表示記号テーブルの定義(pval要素) */
 static flag_insc_table flag_insc_plus[] =
 {
-       { "¹¶", "At", TR_BLOWS, -1 },
-       { "®", "Sp", TR_SPEED, -1 },
-       { "ÏÓ", "St", TR_STR, -1 },
-       { "ÃÎ", "In", TR_INT, -1 },
-       { "¸­", "Wi", TR_WIS, -1 },
-       { "´ï", "Dx", TR_DEX, -1 },
-       { "ÂÑ", "Cn", TR_CON, -1 },
-       { "̥", "Ch", TR_CHR, -1 },
-       { "ƻ", "Md", TR_MAGIC_MASTERY, -1 },
-       { "±£", "Sl", TR_STEALTH, -1 },
-       { "õ", "Sr", TR_SEARCH, -1 },
-       { "ÀÖ", "If", TR_INFRA, -1 },
-       { "·¡", "Dg", TR_TUNNEL, -1 },
+       { "", "At", TR_BLOWS, -1 },
+       { "", "Sp", TR_SPEED, -1 },
+       { "", "St", TR_STR, -1 },
+       { "", "In", TR_INT, -1 },
+       { "", "Wi", TR_WIS, -1 },
+       { "", "Dx", TR_DEX, -1 },
+       { "", "Cn", TR_CON, -1 },
+       { "", "Ch", TR_CHR, -1 },
+       { "", "Md", TR_MAGIC_MASTERY, -1 },
+       { "", "Sl", TR_STEALTH, -1 },
+       { "", "Sr", TR_SEARCH, -1 },
+       { "", "If", TR_INFRA, -1 },
+       { "", "Dg", TR_TUNNEL, -1 },
        { NULL, NULL, 0, -1 }
 };
 
-/*! ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë¤ÎÄêµÁ(ÌȱÖ) */
+/*! オブジェクトの特性表示記号テーブルの定義(免疫) */
 static flag_insc_table flag_insc_immune[] =
 {
-       { "»À", "Ac", TR_IM_ACID, -1 },
-       { "ÅÅ", "El", TR_IM_ELEC, -1 },
-       { "²Ð", "Fi", TR_IM_FIRE, -1 },
-       { "Îä", "Co", TR_IM_COLD, -1 },
+       { "", "Ac", TR_IM_ACID, -1 },
+       { "", "El", TR_IM_ELEC, -1 },
+       { "", "Fi", TR_IM_FIRE, -1 },
+       { "", "Co", TR_IM_COLD, -1 },
        { NULL, NULL, 0, -1 }
 };
 
-/*! ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë¤ÎÄêµÁ(ÂÑÀ­) */
+/*! オブジェクトの特性表示記号テーブルの定義(耐性) */
 static flag_insc_table flag_insc_resistance[] =
 {
-       { "»À", "Ac", TR_RES_ACID, TR_IM_ACID },
-       { "ÅÅ", "El", TR_RES_ELEC, TR_IM_ELEC },
-       { "²Ð", "Fi", TR_RES_FIRE, TR_IM_FIRE },
-       { "Îä", "Co", TR_RES_COLD, TR_IM_COLD },
-       { "ÆÇ", "Po", TR_RES_POIS, -1 },
-       { "Á®", "Li", TR_RES_LITE, -1 },
-       { "°Å", "Dk", TR_RES_DARK, -1 },
-       { "ÇË", "Sh", TR_RES_SHARDS, -1 },
-       { "ÌÕ", "Bl", TR_RES_BLIND, -1 },
-       { "Íð", "Cf", TR_RES_CONF, -1 },
-       { "¹ì", "So", TR_RES_SOUND, -1 },
-       { "¹ö", "Nt", TR_RES_NETHER, -1 },
-       { "°ø", "Nx", TR_RES_NEXUS, -1 },
-       { "ÆÙ", "Ca", TR_RES_CHAOS, -1 },
-       { "Îô", "Di", TR_RES_DISEN, -1 },
-       { "¶²", "Fe", TR_RES_FEAR, -1 },
+       { "", "Ac", TR_RES_ACID, TR_IM_ACID },
+       { "", "El", TR_RES_ELEC, TR_IM_ELEC },
+       { "", "Fi", TR_RES_FIRE, TR_IM_FIRE },
+       { "", "Co", TR_RES_COLD, TR_IM_COLD },
+       { "", "Po", TR_RES_POIS, -1 },
+       { "", "Li", TR_RES_LITE, -1 },
+       { "", "Dk", TR_RES_DARK, -1 },
+       { "", "Sh", TR_RES_SHARDS, -1 },
+       { "", "Bl", TR_RES_BLIND, -1 },
+       { "", "Cf", TR_RES_CONF, -1 },
+       { "", "So", TR_RES_SOUND, -1 },
+       { "", "Nt", TR_RES_NETHER, -1 },
+       { "", "Nx", TR_RES_NEXUS, -1 },
+       { "", "Ca", TR_RES_CHAOS, -1 },
+       { "", "Di", TR_RES_DISEN, -1 },
+       { "", "Fe", TR_RES_FEAR, -1 },
        { NULL, NULL, 0, -1 }
 };
 
-/*! ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë¤ÎÄêµÁ(¤½¤Î¾ÆÃÀ­) */
+/*! オブジェクトの特性表示記号テーブルの定義(その他特性) */
 static flag_insc_table flag_insc_misc[] =
 {
-       { "°×", "Es", TR_EASY_SPELL, -1 },
-       { "¸º", "Dm", TR_DEC_MANA, -1 },
-       { "Åê", "Th", TR_THROW, -1 },
-       { "ȿ", "Rf", TR_REFLECT, -1 },
-       { "Ëã", "Fa", TR_FREE_ACT, -1 },
-       { "»ë", "Si", TR_SEE_INVIS, -1 },
-       { "·Ð", "Hl", TR_HOLD_LIFE, -1 },
-       { "ÃÙ", "Sd", TR_SLOW_DIGEST, -1 },
-       { "³è", "Rg", TR_REGEN, -1 },
-       { "Éâ", "Lv", TR_LEVITATION, -1 },
-       { "ÌÀ", "Lu", TR_LITE_1, -1 },
-       { "ÌÀ", "Lu", TR_LITE_2, -1 },
-       { "ÌÀ", "Lu", TR_LITE_3, -1 },
-       { "°Ç", "Dl", TR_LITE_M1, -1 },
-       { "°Ç", "Dl", TR_LITE_M2, -1 },
-       { "°Ç", "Dl", TR_LITE_M3, -1 },
-       { "·Ù", "Wr", TR_WARNING, -1 },
-       { "ÇÜ", "Xm", TR_XTRA_MIGHT, -1 },
-       { "¼Í", "Xs", TR_XTRA_SHOTS, -1 },
-       { "½Ö", "Te", TR_TELEPORT, -1 },
-       { "ÅÜ", "Ag", TR_AGGRAVATE, -1 },
-       { "½Ë", "Bs", TR_BLESSED, -1 },
-       { "´÷", "Ty", TR_TY_CURSE, -1 },
-       { "¼ö", "C-", TR_ADD_L_CURSE, -1 },
-       { "ëÇ", "C+", TR_ADD_H_CURSE, -1 },
+       { "", "Es", TR_EASY_SPELL, -1 },
+       { "", "Dm", TR_DEC_MANA, -1 },
+       { "", "Th", TR_THROW, -1 },
+       { "", "Rf", TR_REFLECT, -1 },
+       { "", "Fa", TR_FREE_ACT, -1 },
+       { "", "Si", TR_SEE_INVIS, -1 },
+       { "経", "Hl", TR_HOLD_EXP, -1 },
+       { "", "Sd", TR_SLOW_DIGEST, -1 },
+       { "", "Rg", TR_REGEN, -1 },
+       { "", "Lv", TR_LEVITATION, -1 },
+       { "", "Lu", TR_LITE_1, -1 },
+       { "", "Lu", TR_LITE_2, -1 },
+       { "", "Lu", TR_LITE_3, -1 },
+       { "", "Dl", TR_LITE_M1, -1 },
+       { "", "Dl", TR_LITE_M2, -1 },
+       { "", "Dl", TR_LITE_M3, -1 },
+       { "", "Wr", TR_WARNING, -1 },
+       { "", "Xm", TR_XTRA_MIGHT, -1 },
+       { "", "Xs", TR_XTRA_SHOTS, -1 },
+       { "", "Te", TR_TELEPORT, -1 },
+       { "", "Ag", TR_AGGRAVATE, -1 },
+       { "", "Bs", TR_BLESSED, -1 },
+       { "", "Ty", TR_TY_CURSE, -1 },
+       { "", "C-", TR_ADD_L_CURSE, -1 },
+       { "", "C+", TR_ADD_H_CURSE, -1 },
        { NULL, NULL, 0, -1 }
 };
 
-/*! ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë¤ÎÄêµÁ(¥ª¡¼¥é) */
+/*! オブジェクトの特性表示記号テーブルの定義(オーラ) */
 static flag_insc_table flag_insc_aura[] =
 {
-       { "±ê", "F", TR_SH_FIRE, -1 },
-       { "ÅÅ", "E", TR_SH_ELEC, -1 },
-       { "Îä", "C", TR_SH_COLD, -1 },
-       { "Ëâ", "M", TR_NO_MAGIC, -1 },
-       { "½Ö", "T", TR_NO_TELE, -1 },
+       { "", "F", TR_SH_FIRE, -1 },
+       { "", "E", TR_SH_ELEC, -1 },
+       { "", "C", TR_SH_COLD, -1 },
+       { "", "M", TR_NO_MAGIC, -1 },
+       { "", "T", TR_NO_TELE, -1 },
        { NULL, NULL, 0, -1 }
 };
 
-/*! ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë¤ÎÄêµÁ(°À­¥¹¥ì¥¤) */
+/*! ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\81®ç\89¹æ\80§è¡¨ç¤ºè¨\98å\8f·ã\83\86ã\83¼ã\83\96ã\83«ã\81®å®\9a義(å±\9eæ\80§ã\82¹ã\83¬ã\82¤) */
 static flag_insc_table flag_insc_brand[] =
 {
-       { "»À", "A", TR_BRAND_ACID, -1 },
-       { "ÅÅ", "E", TR_BRAND_ELEC, -1 },
-       { "¾Æ", "F", TR_BRAND_FIRE, -1 },
-       { "Åà", "Co", TR_BRAND_COLD, -1 },
-       { "ÆÇ", "P", TR_BRAND_POIS, -1 },
-       { "ÆÙ", "Ca", TR_CHAOTIC, -1 },
-       { "µÛ", "V", TR_VAMPIRIC, -1 },
-       { "¿Ì", "Q", TR_IMPACT, -1 },
-       { "ÀÚ", "S", TR_VORPAL, -1 },
-       { "Íý", "M", TR_FORCE_WEAPON, -1 },
+       { "", "A", TR_BRAND_ACID, -1 },
+       { "", "E", TR_BRAND_ELEC, -1 },
+       { "", "F", TR_BRAND_FIRE, -1 },
+       { "", "Co", TR_BRAND_COLD, -1 },
+       { "", "P", TR_BRAND_POIS, -1 },
+       { "", "Ca", TR_CHAOTIC, -1 },
+       { "", "V", TR_VAMPIRIC, -1 },
+       { "", "Q", TR_IMPACT, -1 },
+       { "", "S", TR_VORPAL, -1 },
+       { "", "M", TR_FORCE_WEAPON, -1 },
        { NULL, NULL, 0, -1 }
 };
 
-/*! ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë¤ÎÄêµÁ(¼ï²¥¹¥ì¥¤) */
+/*! ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\81®ç\89¹æ\80§è¡¨ç¤ºè¨\98å\8f·ã\83\86ã\83¼ã\83\96ã\83«ã\81®å®\9a義(種æ\97\8fã\82¹ã\83¬ã\82¤) */
 static flag_insc_table flag_insc_kill[] =
 {
-       { "¼Ù", "*", TR_KILL_EVIL, -1 },
-       { "¿Í", "p", TR_KILL_HUMAN, -1 },
-       { "ζ", "D", TR_KILL_DRAGON, -1 },
-       { "¥ª", "o", TR_KILL_ORC, -1 },
-       { "¥È", "T", TR_KILL_TROLL, -1 },
-       { "µð", "P", TR_KILL_GIANT, -1 },
-       { "¥Ç", "U", TR_KILL_DEMON, -1 },
-       { "»à", "L", TR_KILL_UNDEAD, -1 },
-       { "ư", "Z", TR_KILL_ANIMAL, -1 },
+       { "", "*", TR_KILL_EVIL, -1 },
+       { "", "p", TR_KILL_HUMAN, -1 },
+       { "", "D", TR_KILL_DRAGON, -1 },
+       { "ã\82ª", "o", TR_KILL_ORC, -1 },
+       { "", "T", TR_KILL_TROLL, -1 },
+       { "", "P", TR_KILL_GIANT, -1 },
+       { "", "U", TR_KILL_DEMON, -1 },
+       { "", "L", TR_KILL_UNDEAD, -1 },
+       { "", "Z", TR_KILL_ANIMAL, -1 },
        { NULL, NULL, 0, -1 }
 };
 
-/*! ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë¤ÎÄêµÁ(¼ï²*¥¹¥ì¥¤*) */
+/*! ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\81®ç\89¹æ\80§è¡¨ç¤ºè¨\98å\8f·ã\83\86ã\83¼ã\83\96ã\83«ã\81®å®\9a義(種æ\97\8f\82¹ã\83¬ã\82¤*) */
 static flag_insc_table flag_insc_slay[] =
 {
-       { "¼Ù", "*", TR_SLAY_EVIL, TR_KILL_EVIL },
-       { "¿Í", "p", TR_SLAY_HUMAN, TR_KILL_HUMAN },
-       { "ε", "D", TR_SLAY_DRAGON, TR_KILL_DRAGON },
-       { "¥ª", "o", TR_SLAY_ORC, TR_KILL_ORC },
-       { "¥È", "T", TR_SLAY_TROLL, TR_KILL_TROLL },
-       { "µð", "P", TR_SLAY_GIANT, TR_KILL_GIANT },
-       { "¥Ç", "U", TR_SLAY_DEMON, TR_KILL_DEMON },
-       { "»à", "L", TR_SLAY_UNDEAD, TR_KILL_UNDEAD },
-       { "ư", "Z", TR_SLAY_ANIMAL, TR_KILL_ANIMAL },
+       { "", "*", TR_SLAY_EVIL, TR_KILL_EVIL },
+       { "", "p", TR_SLAY_HUMAN, TR_KILL_HUMAN },
+       { "", "D", TR_SLAY_DRAGON, TR_KILL_DRAGON },
+       { "ã\82ª", "o", TR_SLAY_ORC, TR_KILL_ORC },
+       { "", "T", TR_SLAY_TROLL, TR_KILL_TROLL },
+       { "", "P", TR_SLAY_GIANT, TR_KILL_GIANT },
+       { "", "U", TR_SLAY_DEMON, TR_KILL_DEMON },
+       { "", "L", TR_SLAY_UNDEAD, TR_KILL_UNDEAD },
+       { "", "Z", TR_SLAY_ANIMAL, TR_KILL_ANIMAL },
        { NULL, NULL, 0, -1 }
 };
 
-/*! ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë¤ÎÄêµÁ(ESP1) */
+/*! オブジェクトの特性表示記号テーブルの定義(ESP1) */
 static flag_insc_table flag_insc_esp1[] =
 {
-       { "´¶", "Tele", TR_TELEPATHY, -1 },
-       { "¼Ù", "Evil", TR_ESP_EVIL, -1 },
-       { "Á±", "Good", TR_ESP_GOOD, -1 },
-       { "̵", "Nolv", TR_ESP_NONLIVING, -1 },
-       { "¸Ä", "Uniq", TR_ESP_UNIQUE, -1 },
+       { "", "Tele", TR_TELEPATHY, -1 },
+       { "", "Evil", TR_ESP_EVIL, -1 },
+       { "", "Good", TR_ESP_GOOD, -1 },
+       { "", "Nolv", TR_ESP_NONLIVING, -1 },
+       { "", "Uniq", TR_ESP_UNIQUE, -1 },
        { NULL, NULL, 0, -1 }
 };
 
-/*! ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë¤ÎÄêµÁ(ESP2) */
+/*! オブジェクトの特性表示記号テーブルの定義(ESP2) */
 static flag_insc_table flag_insc_esp2[] =
 {
-       { "¿Í", "p", TR_ESP_HUMAN, -1 },
-       { "ε", "D", TR_ESP_DRAGON, -1 },
-       { "¥ª", "o", TR_ESP_ORC, -1 },
-       { "¥È", "T", TR_ESP_TROLL, -1 },
-       { "µð", "P", TR_ESP_GIANT, -1 },
-       { "¥Ç", "U", TR_ESP_DEMON, -1 },
-       { "»à", "L", TR_ESP_UNDEAD, -1 },
-       { "ư", "Z", TR_ESP_ANIMAL, -1 },
+       { "", "p", TR_ESP_HUMAN, -1 },
+       { "", "D", TR_ESP_DRAGON, -1 },
+       { "ã\82ª", "o", TR_ESP_ORC, -1 },
+       { "", "T", TR_ESP_TROLL, -1 },
+       { "", "P", TR_ESP_GIANT, -1 },
+       { "", "U", TR_ESP_DEMON, -1 },
+       { "", "L", TR_ESP_UNDEAD, -1 },
+       { "", "Z", TR_ESP_ANIMAL, -1 },
        { NULL, NULL, 0, -1 }
 };
 
-/*! ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë¤ÎÄêµÁ(ǽÎÏ°Ý»ý) */
+/*! オブジェクトの特性表示記号テーブルの定義(能力維持) */
 static flag_insc_table flag_insc_sust[] =
 {
-       { "ÏÓ", "St", TR_SUST_STR, -1 },
-       { "ÃÎ", "In", TR_SUST_INT, -1 },
-       { "¸­", "Wi", TR_SUST_WIS, -1 },
-       { "´ï", "Dx", TR_SUST_DEX, -1 },
-       { "ÂÑ", "Cn", TR_SUST_CON, -1 },
-       { "̥", "Ch", TR_SUST_CHR, -1 },
+       { "", "St", TR_SUST_STR, -1 },
+       { "", "In", TR_SUST_INT, -1 },
+       { "", "Wi", TR_SUST_WIS, -1 },
+       { "", "Dx", TR_SUST_DEX, -1 },
+       { "", "Cn", TR_SUST_CON, -1 },
+       { "", "Ch", TR_SUST_CHR, -1 },
        { NULL, NULL, 0, -1 }
 };
 
@@ -851,7 +836,7 @@ static flag_insc_table flag_insc_misc[] =
        { "Rf", TR_REFLECT, -1 },
        { "Fa", TR_FREE_ACT, -1 },
        { "Si", TR_SEE_INVIS, -1 },
-       { "Hl", TR_HOLD_LIFE, -1 },
+       { "Hl", TR_HOLD_EXP, -1 },
        { "Sd", TR_SLOW_DIGEST, -1 },
        { "Rg", TR_REGEN, -1 },
        { "Lv", TR_LEVITATION, -1 },
@@ -961,22 +946,22 @@ static flag_insc_table flag_insc_sust[] =
 };
 #endif
 
-/* ¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥é¥°¤òÄɲ乤뤿¤á¤Î´Ê°×¤Ê¥Þ¥¯¥í / Simple macro for get_inscription() */
+/* オブジェクトフラグを追加するための簡易なマクロ / Simple macro for get_inscription() */
 #define ADD_INSC(STR) (void)(ptr = object_desc_str(ptr, (STR)))
 
 /*!
- * @brief get_inscription¤Î¥µ¥Ö¥»¥Ã¥È¤È¤·¤Æ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆÃÀ­¥Õ¥é¥°¤òÊÖ¤¹ / Helper function for get_inscription()
- * @param fi_ptr »²¾È¤¹¤ëÆÃÀ­É½¼¨µ­¹æ¥Æ¡¼¥Ö¥ë
- * @param flgs Âбþ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î¥Õ¥é¥°Ê¸»úÎó
- * @param kanji TRUE¤Ê¤é¤Ð´Á»úµ­½Ò/FALSE¤Ê¤é¤Ð±Ñ¸ìµ­½Ò
- * @param ptr ¥Õ¥é¥°·²¤òÊݴɤ¹¤ëʸ»úÎ󻲾ȥݥ¤¥ó¥¿
- * @return ¥Õ¥é¥°·²¤òÊݴɤ¹¤ëʸ»úÎ󻲾ȥݥ¤¥ó¥¿(ptr¤ÈƱ¤¸)
+ * @brief get_inscriptionのサブセットとしてオブジェクトの特性フラグを返す / Helper function for get_inscription()
+ * @param fi_ptr 参照する特性表示記号テーブル
+ * @param flgs 対応するオブジェクトのフラグ文字列
+ * @param kanji TRUEならば漢字記述/FALSEならば英語記述
+ * @param ptr ã\83\95ã\83©ã\82°ç¾¤ã\82\92ä¿\9d管ã\81\99ã\82\8bæ\96\87å­\97å\88\97å\8f\82ç\85§ã\83\9dã\82¤ã\83³ã\82¿
+ * @return フラグ群を保管する文字列参照ポインタ(ptrと同じ)
  * @details
  * Print an signed number "v" into a string "t", as if by
  * sprintf(t, "%+d", n), and return a pointer to the terminator.
  * Note that we always print a sign, either "+" or "-".
  */
-static char *inscribe_flags_aux(flag_insc_table *fi_ptr, u32b flgs[TR_FLAG_SIZE], bool kanji, char *ptr)
+static char *inscribe_flags_aux(flag_insc_table *fi_ptr, BIT_FLAGS flgs[TR_FLAG_SIZE], bool kanji, char *ptr)
 {
 #ifndef JP
        (void)kanji;
@@ -998,10 +983,13 @@ static char *inscribe_flags_aux(flag_insc_table *fi_ptr, u32b flgs[TR_FLAG_SIZE]
 }
 
 
-/*
- *  Special variation of have_flag for auto-inscription
+/*!
+ * @brief オブジェクトの特性表示記号テーブル1つに従いオブジェクトの特性フラグ配列に1つでも該当の特性があるかを返す / Special variation of have_flag for auto-inscription
+ * @param fi_ptr 参照する特性表示記号テーブル
+ * @param flgs 対応するオブジェクトのフラグ文字列
+ * @return 1つでも該当の特性があったらTRUEを返す。
  */
-static bool have_flag_of(flag_insc_table *fi_ptr, u32b flgs[TR_FLAG_SIZE])
+static bool have_flag_of(flag_insc_table *fi_ptr, BIT_FLAGS flgs[TR_FLAG_SIZE])
 {
        while (fi_ptr->english)
        {
@@ -1014,12 +1002,18 @@ static bool have_flag_of(flag_insc_table *fi_ptr, u32b flgs[TR_FLAG_SIZE])
        return (FALSE);
 }
 
+/*!
+ * @brief オブジェクト名の特性短縮表記をまとめて提示する。
+ * @param ptr 特性短縮表記を格納する文字列ポインタ
+ * @param o_ptr 特性短縮表記を得たいオブジェクト構造体の参照ポインタ
+ * @param kanji TRUEならば漢字表記 / FALSEなら英語表記
+ * @param all TRUEならばベースアイテム上で明らかなフラグは省略する
+ * @return ptrと同じアドレス
+ */
 static char *get_ability_abbreviation(char *ptr, object_type *o_ptr, bool kanji, bool all)
 {
        char *prev_ptr = ptr;
-       u32b flgs[TR_FLAG_SIZE];
-
-       /* Extract the flags */
+       BIT_FLAGS flgs[TR_FLAG_SIZE];
        object_flags(o_ptr, flgs);
 
        /* Remove obvious flags */
@@ -1161,12 +1155,15 @@ static char *get_ability_abbreviation(char *ptr, object_type *o_ptr, bool kanji,
 }
 
 
-/*
- *  Get object inscription with auto inscription of object flags.
+/*!
+ * @brief オブジェクト名の特性短縮表記+刻み内容を提示する。 / Get object inscription with auto inscription of object flags.
+ * @param buff 特性短縮表記を格納する文字列ポインタ
+ * @param o_ptr 特性短縮表記を得たいオブジェクト構造体の参照ポインタ
+ * @return なし
  */
 static void get_inscription(char *buff, object_type *o_ptr)
 {
-       cptr insc = quark_str(o_ptr->inscription);
+       concptr insc = quark_str(o_ptr->inscription);
        char *ptr = buff;
 
        /* Not fully identified */
@@ -1197,7 +1194,7 @@ static void get_inscription(char *buff, object_type *o_ptr)
                {
                        bool kanji = FALSE;
                        bool all;
-                       cptr start = ptr;
+                       concptr start = ptr;
 
                        /* check for too long inscription */
                        if (ptr >= buff + MAX_NLEN) continue;
@@ -1236,86 +1233,70 @@ static void get_inscription(char *buff, object_type *o_ptr)
        *ptr = '\0';
 }
 
-bool object_is_quest_target(object_type *o_ptr)
-{
-       if (p_ptr->inside_quest)
-       {
-               int a_idx = quest[p_ptr->inside_quest].k_idx;
-               if (a_idx)
-               {
-                       artifact_type *a_ptr = &a_info[a_idx];
-                       if (!(a_ptr->gen_flags & TRG_INSTA_ART))
-                       {
-                               if((o_ptr->tval == a_ptr->tval) && (o_ptr->sval == a_ptr->sval))
-                               {
-                                       return TRUE;
-                               }
-                       }
-               }
-       }
-       return FALSE;
-}
-
 
-/*
- * Creates a description of the item "o_ptr", and stores it in "out_val".
- *
- * One can choose the "verbosity" of the description, including whether
- * or not the "number" of items should be described, and how much detail
- * should be used when describing the item.
- *
- * The given "buf" must be MAX_NLEN chars long to hold the longest possible
- * description, which can get pretty long, including incriptions, such as:
- * "no more Maces of Disruption (Defender) (+10,+10) [+5] (+3 to stealth)".
- * Note that the inscription will be clipped to keep the total description
- * under MAX_NLEN-1 chars (plus a terminator).
- *
- * Note the use of "object_desc_num()" and "object_desc_int()" as hyper-efficient,
- * portable, versions of some common "sprintf()" commands.
- *
- * Note that all ego-items (when known) append an "Ego-Item Name", unless
- * the item is also an artifact, which should NEVER happen.
- *
- * Note that all artifacts (when known) append an "Artifact Name", so we
- * have special processing for "Specials" (artifact Lites, Rings, Amulets).
- * The "Specials" never use "modifiers" if they are "known", since they
- * have special "descriptions", such as "The Necklace of the Dwarves".
- *
- * Special Lite's use the "k_info" base-name (Phial, Star, or Arkenstone),
- * plus the artifact name, just like any other artifact, if known.
- *
- * Special Ring's and Amulet's, if not "aware", use the same code as normal
- * rings and amulets, and if "aware", use the "k_info" base-name (Ring or
- * Amulet or Necklace).  They will NEVER "append" the "k_info" name.  But,
- * they will append the artifact name, just like any artifact, if known.
- *
- * Hack -- Display "The One Ring" as "a Plain Gold Ring" until aware.
- *
- * Mode:
- *   OD_NAME_ONLY        : The Cloak of Death
- *   OD_NAME_AND_ENCHANT : The Cloak of Death [1,+3]
- *   OD_OMIT_INSCRIPTION : The Cloak of Death [1,+3] (+2 to Stealth)
- *   0                   : The Cloak of Death [1,+3] (+2 to Stealth) {nifty}
- *
- *   OD_OMIT_PREFIX      : Forbidden numeric prefix
- *   OD_NO_PLURAL        : Forbidden use of plural 
- *   OD_STORE            : Assume to be aware and known
- *   OD_NO_FLAVOR        : Allow to hidden flavor
- *   OD_FORCE_FLAVOR     : Get un-shuffled flavor name
+/*!
+ * @brief オブジェクトの各表記を返すメイン関数 / Creates a description of the item "o_ptr", and stores it in "out_val".
+ * @param buf 表記を返すための文字列参照ポインタ
+ * @param o_ptr 特性短縮表記を得たいオブジェクト構造体の参照ポインタ
+ * @param mode 表記に関するオプション指定
+ * @return 現在クエスト達成目的のアイテムならばTRUEを返す。
+ * @details
+ * One can choose the "verbosity" of the description, including whether\n
+ * or not the "number" of items should be described, and how much detail\n
+ * should be used when describing the item.\n
+ *\n
+ * The given "buf" must be MAX_NLEN chars long to hold the longest possible\n
+ * description, which can get pretty long, including incriptions, such as:\n
+ * "no more Maces of Disruption (Defender) (+10,+10) [+5] (+3 to stealth)".\n
+ * Note that the inscription will be clipped to keep the total description\n
+ * under MAX_NLEN-1 chars (plus a terminator).\n
+ *\n
+ * Note the use of "object_desc_num()" and "object_desc_int()" as hyper-efficient,\n
+ * portable, versions of some common "sprintf()" commands.\n
+ *\n
+ * Note that all ego-items (when known) append an "Ego-Item Name", unless\n
+ * the item is also an artifact, which should NEVER happen.\n
+ *\n
+ * Note that all artifacts (when known) append an "Artifact Name", so we\n
+ * have special processing for "Specials" (artifact Lites, Rings, Amulets).\n
+ * The "Specials" never use "modifiers" if they are "known", since they\n
+ * have special "descriptions", such as "The Necklace of the Dwarves".\n
+ *\n
+ * Special Lite's use the "k_info" base-name (Phial, Star, or Arkenstone),\n
+ * plus the artifact name, just like any other artifact, if known.\n
+ *\n
+ * Special Ring's and Amulet's, if not "aware", use the same code as normal\n
+ * rings and amulets, and if "aware", use the "k_info" base-name (Ring or\n
+ * Amulet or Necklace).  They will NEVER "append" the "k_info" name.  But,\n
+ * they will append the artifact name, just like any artifact, if known.\n
+ *\n
+ * Hack -- Display "The One Ring" as "a Plain Gold Ring" until aware.\n
+ *\n
+ * Mode:\n
+ *   OD_NAME_ONLY        : The Cloak of Death\n
+ *   OD_NAME_AND_ENCHANT : The Cloak of Death [1,+3]\n
+ *   OD_OMIT_INSCRIPTION : The Cloak of Death [1,+3] (+2 to Stealth)\n
+ *   0                   : The Cloak of Death [1,+3] (+2 to Stealth) {nifty}\n
+ *\n
+ *   OD_OMIT_PREFIX      : Forbidden numeric prefix\n
+ *   OD_NO_PLURAL        : Forbidden use of plural \n
+ *   OD_STORE            : Assume to be aware and known\n
+ *   OD_NO_FLAVOR        : Allow to hidden flavor\n
+ *   OD_FORCE_FLAVOR     : Get un-shuffled flavor name\n
  */
-void object_desc(char *buf, object_type *o_ptr, u32b mode)
+void object_desc(char *buf, object_type *o_ptr, BIT_FLAGS mode)
 {
        /* Extract object kind name */
-       cptr            kindname = k_name + k_info[o_ptr->k_idx].name;
+       concptr            kindname = k_name + k_info[o_ptr->k_idx].name;
 
        /* Extract default "base" string */
-       cptr            basenm = kindname;
+       concptr            basenm = kindname;
 
        /* Assume no "modifier" string */
-       cptr            modstr = "";
+       concptr            modstr = "";
 
-       int             power;
-       int                             fire_rate;
+       int power;
+       int fire_rate;
 
        bool            aware = FALSE;
        bool            known = FALSE;
@@ -1324,7 +1305,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
        bool            show_weapon = FALSE;
        bool            show_armour = FALSE;
 
-       cptr            s, s0;
+       concptr            s, s0;
        char            *t;
 
        char            p1 = '(', p2 = ')';
@@ -1335,7 +1316,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
        char            tmp_val2[MAX_NLEN+10];
        char            fake_insc_buf[30];
 
-       u32b flgs[TR_FLAG_SIZE];
+       BIT_FLAGS flgs[TR_FLAG_SIZE];
 
        object_type *bow_ptr;
 
@@ -1399,11 +1380,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        {
                                if (!o_ptr->pval)
                                {
-#ifdef JP
-                                       modstr = " (¶õ)";
-#else
-                                       modstr = " (empty)";
-#endif
+                                       modstr = _(" (空)", " (empty)");
                                }
                                else
                                {
@@ -1411,7 +1388,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                                        sprintf(tmp_val2, " (%s)",r_name + r_ptr->name);
                                        modstr = tmp_val2;
 #else
-                                       cptr t = r_name + r_ptr->name;
+                                       concptr t = r_name + r_ptr->name;
 
                                        if (!(r_ptr->flags1 & RF1_UNIQUE))
                                        {
@@ -1440,7 +1417,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
 #ifdef JP
                        modstr = r_name + r_ptr->name;
 #else
-                       cptr t = r_name + r_ptr->name;
+                       concptr t = r_name + r_ptr->name;
 
                        if (!(r_ptr->flags1 & RF1_UNIQUE))
                        {
@@ -1526,9 +1503,9 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        modstr = k_name + flavor_k_ptr->flavor_name;
 
 #ifdef JP
-                       if (!flavor)    basenm = "%¤Î¥¢¥ß¥å¥ì¥Ã¥È";
-                       else if (aware) basenm = "%¤Î#¥¢¥ß¥å¥ì¥Ã¥È";
-                       else            basenm = "#¥¢¥ß¥å¥ì¥Ã¥È";
+                       if (!flavor)    basenm = "%のアミュレット";
+                       else if (aware) basenm = "%の#アミュレット";
+                       else            basenm = "#アミュレット";
 #else
                        if (!flavor)    basenm = "& Amulet~ of %";
                        else if (aware) basenm = "& # Amulet~ of %";
@@ -1552,9 +1529,9 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        modstr = k_name + flavor_k_ptr->flavor_name;
 
 #ifdef JP
-                       if (!flavor)    basenm = "%¤Î»ØÎØ";
-                       else if (aware) basenm = "%¤Î#»ØÎØ";
-                       else            basenm = "#»ØÎØ";
+                       if (!flavor)    basenm = "%の指輪";
+                       else if (aware) basenm = "%の#指輪";
+                       else            basenm = "#指輪";
 #else
                        if (!flavor)    basenm = "& Ring~ of %";
                        else if (aware) basenm = "& # Ring~ of %";
@@ -1577,9 +1554,9 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        modstr = k_name + flavor_k_ptr->flavor_name;
 
 #ifdef JP
-                       if (!flavor)    basenm = "%¤Î¾ó";
-                       else if (aware) basenm = "%¤Î#¾ó";
-                       else            basenm = "#¾ó";
+                       if (!flavor)    basenm = "%の杖";
+                       else if (aware) basenm = "%の#杖";
+                       else            basenm = "#";
 #else
                        if (!flavor)    basenm = "& Staff~ of %";
                        else if (aware) basenm = "& # Staff~ of %";
@@ -1595,9 +1572,9 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        modstr = k_name + flavor_k_ptr->flavor_name;
 
 #ifdef JP
-                       if (!flavor)    basenm = "%¤ÎËâË¡ËÀ";
-                       else if (aware) basenm = "%¤Î#ËâË¡ËÀ";
-                       else            basenm = "#ËâË¡ËÀ";
+                       if (!flavor)    basenm = "%の魔法棒";
+                       else if (aware) basenm = "%の#魔法棒";
+                       else            basenm = "#魔法棒";
 #else
                        if (!flavor)    basenm = "& Wand~ of %";
                        else if (aware) basenm = "& # Wand~ of %";
@@ -1613,9 +1590,9 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        modstr = k_name + flavor_k_ptr->flavor_name;
 
 #ifdef JP
-                       if (!flavor)    basenm = "%¤Î¥í¥Ã¥É";
-                       else if (aware) basenm = "%¤Î#¥í¥Ã¥É";
-                       else            basenm = "#¥í¥Ã¥É";
+                       if (!flavor)    basenm = "%のロッド";
+                       else if (aware) basenm = "%の#ロッド";
+                       else            basenm = "#ロッド";
 #else
                        if (!flavor)    basenm = "& Rod~ of %";
                        else if (aware) basenm = "& # Rod~ of %";
@@ -1631,9 +1608,9 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        modstr = k_name + flavor_k_ptr->flavor_name;
 
 #ifdef JP
-                       if (!flavor)    basenm = "%¤Î´¬Êª";
-                       else if (aware) basenm = "¡Ö#¡×¤È½ñ¤«¤ì¤¿%¤Î´¬Êª";
-                       else            basenm = "¡Ö#¡×¤È½ñ¤«¤ì¤¿´¬Êª";
+                       if (!flavor)    basenm = "%の巻物";
+                       else if (aware) basenm = "「#」と書かれた%の巻物";
+                       else            basenm = "「#」と書かれた巻物";
 #else
                        if (!flavor)    basenm = "& Scroll~ of %";
                        else if (aware) basenm = "& Scroll~ titled \"#\" of %";
@@ -1649,9 +1626,9 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        modstr = k_name + flavor_k_ptr->flavor_name;
 
 #ifdef JP
-                       if (!flavor)    basenm = "%¤ÎÌô";
-                       else if (aware) basenm = "%¤Î#Ìô";
-                       else            basenm = "#Ìô";
+                       if (!flavor)    basenm = "%の薬";
+                       else if (aware) basenm = "%の#薬";
+                       else            basenm = "#";
 #else
                        if (!flavor)    basenm = "& Potion~ of %";
                        else if (aware) basenm = "& # Potion~ of %";
@@ -1670,9 +1647,9 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        modstr = k_name + flavor_k_ptr->flavor_name;
 
 #ifdef JP
-                       if (!flavor)    basenm = "%¤Î¥­¥Î¥³";
-                       else if (aware) basenm = "%¤Î#¥­¥Î¥³";
-                       else            basenm = "#¥­¥Î¥³";
+                       if (!flavor)    basenm = "%ã\81®ã\82­ã\83\8eã\82³";
+                       else if (aware) basenm = "%ã\81®#ã\82­ã\83\8eã\82³";
+                       else            basenm = "#ã\82­ã\83\8eã\82³";
 #else
                        if (!flavor)    basenm = "& Mushroom~ of %";
                        else if (aware) basenm = "& # Mushroom~ of %";
@@ -1684,11 +1661,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
 
                case TV_PARCHMENT:
                {
-#ifdef JP
-                       basenm = "ÍÓÈé»æ - %";
-#else
-                       basenm = "& Parchment~ - %";
-#endif
+                       basenm = _("羊皮紙 - %", "& Parchment~ - %");
                        break;
                }
 
@@ -1696,7 +1669,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                case TV_LIFE_BOOK:
                {
 #ifdef JP
-                       basenm = "À¸Ì¿¤ÎËâË¡½ñ%";
+                       basenm = "生命の魔法書%";
 #else
                        if (mp_ptr->spell_book == TV_LIFE_BOOK)
                                basenm = "& Book~ of Life Magic %";
@@ -1710,7 +1683,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                case TV_SORCERY_BOOK:
                {
 #ifdef JP
-                       basenm = "Àç½Ñ¤ÎËâË¡½ñ%";
+                       basenm = "仙術の魔法書%";
 #else
                        if (mp_ptr->spell_book == TV_LIFE_BOOK)
                                basenm = "& Book~ of Sorcery %";
@@ -1724,7 +1697,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                case TV_NATURE_BOOK:
                {
 #ifdef JP
-                       basenm = "¼«Á³¤ÎËâË¡½ñ%";
+                       basenm = "自然の魔法書%";
 #else
                        if (mp_ptr->spell_book == TV_LIFE_BOOK)
                                basenm = "& Book~ of Nature Magic %";
@@ -1738,7 +1711,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                case TV_CHAOS_BOOK:
                {
 #ifdef JP
-                       basenm = "¥«¥ª¥¹¤ÎËâË¡½ñ%";
+                       basenm = "カオスの魔法書%";
 #else
                        if (mp_ptr->spell_book == TV_LIFE_BOOK)
                                basenm = "& Book~ of Chaos Magic %";
@@ -1752,7 +1725,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                case TV_DEATH_BOOK:
                {
 #ifdef JP
-                       basenm = "°Å¹õ¤ÎËâË¡½ñ%";
+                       basenm = "暗黒の魔法書%";
 #else
                        if (mp_ptr->spell_book == TV_LIFE_BOOK)
                                basenm = "& Book~ of Death Magic %";
@@ -1766,7 +1739,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                case TV_TRUMP_BOOK:
                {
 #ifdef JP
-                       basenm = "¥È¥é¥ó¥×¤ÎËâË¡½ñ%";
+                       basenm = "トランプの魔法書%";
 #else
                        if (mp_ptr->spell_book == TV_LIFE_BOOK)
                                basenm = "& Book~ of Trump Magic %";
@@ -1780,7 +1753,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                case TV_ARCANE_BOOK:
                {
 #ifdef JP
-                       basenm = "Èë½Ñ¤ÎËâË¡½ñ%";
+                       basenm = "秘術の魔法書%";
 #else
                        if (mp_ptr->spell_book == TV_LIFE_BOOK)
                                basenm = "& Book~ of Arcane Magic %";
@@ -1794,7 +1767,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                case TV_CRAFT_BOOK:
                {
 #ifdef JP
-                       basenm = "¾¢¤ÎËâË¡½ñ%";
+                       basenm = "匠の魔法書%";
 #else
                        if (mp_ptr->spell_book == TV_LIFE_BOOK)
                                basenm = "& Book~ of Craft Magic %";
@@ -1808,7 +1781,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                case TV_DAEMON_BOOK:
                {
 #ifdef JP
-                       basenm = "°­Ëâ¤ÎËâË¡½ñ%";
+                       basenm = "悪魔の魔法書%";
 #else
                        if (mp_ptr->spell_book == TV_LIFE_BOOK)
                                basenm = "& Book~ of Daemon Magic %";
@@ -1822,7 +1795,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                case TV_CRUSADE_BOOK:
                {
 #ifdef JP
-                       basenm = "Ç˼٤ÎËâË¡½ñ%";
+                       basenm = "破邪の魔法書%";
 #else
                        if (mp_ptr->spell_book == TV_LIFE_BOOK)
                                basenm = "& Book~ of Crusade Magic %";
@@ -1835,30 +1808,20 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
 
                case TV_MUSIC_BOOK:
                {
-#ifdef JP
-                       basenm = "²Î½¸%";
-#else
-                       basenm = "& Song Book~ %";
-#endif
-
+                       basenm = _("歌集%", "& Song Book~ %");
                        break;
                }
 
                case TV_HISSATSU_BOOK:
                {
-#ifdef JP
-                       basenm = "& Éð·Ý¤Î½ñ%";
-#else
-                       basenm = "Book~ of Kendo %";
-#endif
-
+                       basenm = _("& 武芸の書%", "Book~ of Kendo %");
                        break;
                }
 
                case TV_HEX_BOOK:
                {
 #ifdef JP
-                       basenm = "¼ö½Ñ¤ÎËâË¡½ñ%";
+                       basenm = "呪術の魔法書%";
 #else
                        if (mp_ptr->spell_book == TV_LIFE_BOOK)
                                basenm = "& Book~ of Hex Magic %";
@@ -1879,12 +1842,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                /* Used in the "inventory" routine */
                default:
                {
-#ifdef JP
-                       strcpy(buf, "(¤Ê¤·)");
-#else
-                       strcpy(buf, "(nothing)");
-#endif
-
+                       strcpy(buf, _("(なし)", "(nothing)"));
                        return;
                }
        }
@@ -1913,16 +1871,16 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
        else if (o_ptr->number > 1)
        {
                t = object_desc_kosuu(t, o_ptr);
-               t = object_desc_str(t, "¤Î ");
+               t = object_desc_str(t, " ");
        }
 
-       /* ±Ñ¸ì¤Î¾ì¹ç¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ï The ¤¬ÉÕ¤¯¤Î¤Çʬ¤«¤ë¤¬
-        * ÆüËܸì¤Ç¤Ïʬ¤«¤é¤Ê¤¤¤Î¤Ç¥Þ¡¼¥¯¤ò¤Ä¤±¤ë 
+       /* 英語の場合アーティファクトは The が付くので分かるが
+        * 日本語では分からないのでマークをつける 
         */
        if (known)
        {
-               if (object_is_fixed_artifact(o_ptr)) t = object_desc_str(t, "¡ú");
-               else if (o_ptr->art_name) t = object_desc_str(t, "¡ù");
+               if (object_is_fixed_artifact(o_ptr)) t = object_desc_str(t, "");
+               else if (o_ptr->art_name) t = object_desc_str(t, "");
        }
 
 #else
@@ -2030,40 +1988,40 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
 #ifdef JP
        if (object_is_smith(o_ptr))
        {
-               t = object_desc_str(t, format("ÃÃÌê»Õ%s¤Î", player_name));
+               t = object_desc_str(t, format("鍛冶師%sの", p_ptr->name));
        }
 
-       /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¡¢Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à¤Î̾Á°¤òÉղ乤ë */
+       /* 伝説のアイテム、名のあるアイテムの名前を付加する */
        if (known)
        {
-               /* ¥é¥ó¥À¥à¡¦¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È */
+               /* ランダム・アーティファクト */
                if (o_ptr->art_name)
                {
-                       cptr temp = quark_str(o_ptr->art_name);
+                       concptr temp = quark_str(o_ptr->art_name);
 
-                       /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
-                       /* ±Ñ¸ìÈǤΥ»¡¼¥Ö¥Õ¥¡¥¤¥ë¤«¤éÍ褿 'of XXX' ¤Ï,¡ÖXXX¤Î¡×¤Èɽ¼¨¤¹¤ë */
+                       /* '『' から始まらない伝説のアイテムの名前は最初に付加する */
+                       /* 英語版のセーブファイルから来た 'of XXX' は,「XXXの」と表示する */
                        if (strncmp(temp, "of ", 3) == 0)
                        {
                                t = object_desc_str(t, &temp[3]);
-                               t = object_desc_str(t, "¤Î");
+                               t = object_desc_str(t, "");
                        }
-                       else if ((strncmp(temp, "¡Ø", 2) != 0) &&
-                                (strncmp(temp, "¡Ô", 2) != 0) &&
+                       else if ((strncmp(temp, "", 2) != 0) &&
+                                (strncmp(temp, "", 2) != 0) &&
                                 (temp[0] != '\''))
                                t = object_desc_str(t, temp);
                }
-               /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à */
+               /* 伝説のアイテム */
                else if (o_ptr->name1 && !have_flag(flgs, TR_FULL_NAME))
                {
                        artifact_type *a_ptr = &a_info[o_ptr->name1];
-                       /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
-                       if (strncmp(a_name + a_ptr->name, "¡Ø", 2) != 0)
+                       /* '『' から始まらない伝説のアイテムの名前は最初に付加する */
+                       if (strncmp(a_name + a_ptr->name, "", 2) != 0)
                        {
                                t = object_desc_str(t, a_name + a_ptr->name);
                        }
                }
-               /* Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à */
+               /* 名のあるアイテム */
                else if (object_is_ego(o_ptr))
                {
                        ego_item_type *e_ptr = &e_info[o_ptr->name2];
@@ -2111,7 +2069,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        {
                                char k = t[-1];
 
-                               /* XXX XXX XXX Mega-Hack */
+                               /* Mega-Hack */
 
                                /* Hack -- "Cutlass-es" and "Torch-es" */
                                if ((k == 's') || (k == 'h')) *t++ = 'e';
@@ -2136,40 +2094,40 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
 
 
 #ifdef JP
-       /* '¡Ø'¤«¤é»Ï¤Þ¤ëÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ¸å¤ËÉղ乤ë */
+       /* '『'から始まる伝説のアイテムの名前は最後に付加する */
        if (known)
        {
-               /* ¥é¥ó¥À¥à¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Î̾Á°¤Ï¥»¡¼¥Ö¥Õ¥¡¥¤¥ë¤Ëµ­Ï¿
-                  ¤µ¤ì¤ë¤Î¤Ç¡¢±Ñ¸ìÈǤÎ̾Á°¤â¤½¤ì¤é¤·¤¯ÊÑ´¹¤¹¤ë */
+               /* ランダムアーティファクトの名前はセーブファイルに記録
+                  されるので、英語版の名前もそれらしく変換する */
                if (o_ptr->art_name)
                {
                        char temp[256];
                        int itemp;
                        strcpy(temp, quark_str(o_ptr->art_name));
                        /* MEGA HACK by ita */
-                       if (strncmp(temp, "¡Ø", 2) == 0 ||
-                           strncmp(temp, "¡Ô", 2) == 0)
+                       if (strncmp(temp, "", 2) == 0 ||
+                           strncmp(temp, "", 2) == 0)
                                t = object_desc_str(t, temp);
                        else if (temp[0] == '\'')
                        {
                                itemp = strlen(temp);
                                temp[itemp - 1] = 0;
-                               t = object_desc_str(t, "¡Ø");
+                               t = object_desc_str(t, "");
                                t = object_desc_str(t, &temp[1]);
-                               t = object_desc_str(t, "¡Ù");
+                               t = object_desc_str(t, "");
                        }
                }
                else if (object_is_fixed_artifact(o_ptr))
                {
                        artifact_type *a_ptr = &a_info[o_ptr->name1];
-                       if (strncmp(a_name + a_ptr->name, "¡Ø", 2) == 0)
+                       if (strncmp(a_name + a_ptr->name, "", 2) == 0)
                        {
                                t = object_desc_str(t, a_name + a_ptr->name);
                        }
                }
                else if (o_ptr->inscription)
                {
-                       cptr str = quark_str(o_ptr->inscription);
+                       concptr str = quark_str(o_ptr->inscription);
 
                        while(*str)
                        {
@@ -2184,19 +2142,19 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        if (*str)
                        {
                                /* Find the '#' */
-                               cptr str = my_strchr(quark_str(o_ptr->inscription), '#');
+                               concptr str_aux = my_strchr(quark_str(o_ptr->inscription), '#');
 
                                /* Add the false name */
-                               t = object_desc_str(t,"¡Ø");
-                               t = object_desc_str(t, &str[1]);
-                               t = object_desc_str(t,"¡Ù");
+                               t = object_desc_str(t,"");
+                               t = object_desc_str(t, &str_aux[1]);
+                               t = object_desc_str(t,"");
                        }
                }
        }
 #else
        if (object_is_smith(o_ptr))
        {
-               t = object_desc_str(t,format(" of %s the Smith",player_name));
+               t = object_desc_str(t,format(" of %s the Smith",p_ptr->name));
        }
 
        /* Hack -- Append "Artifact" or "Special" names */
@@ -2232,7 +2190,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        if (o_ptr->inscription && my_strchr(quark_str(o_ptr->inscription), '#'))
                        {
                                /* Find the '#' */
-                               cptr str = my_strchr(quark_str(o_ptr->inscription), '#');
+                               concptr str = my_strchr(quark_str(o_ptr->inscription), '#');
 
                                /* Add the false name */
                                t = object_desc_chr(t, ' ');
@@ -2258,11 +2216,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                /* May be "empty" */
                else if (!o_ptr->pval)
                {
-#ifdef JP
-                       t = object_desc_str(t, "(¶õ)");
-#else
-                       t = object_desc_str(t, " (empty)");
-#endif
+                       t = object_desc_str(t, _("(空)", " (empty)"));
                }
 
                /* May be "disarmed" */
@@ -2270,19 +2224,11 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                {
                        if (chest_traps[0 - o_ptr->pval])
                        {
-#ifdef JP
-                               t = object_desc_str(t, "(²ò½üºÑ)");
-#else
-                               t = object_desc_str(t, " (disarmed)");
-#endif
+                               t = object_desc_str(t, _("(解除済)", " (disarmed)"));
                        }
                        else
                        {
-#ifdef JP
-                               t = object_desc_str(t, "(Èó»Ü¾û)");
-#else
-                               t = object_desc_str(t, " (unlocked)");
-#endif
+                               t = object_desc_str(t, _("(非施錠)", " (unlocked)"));
                        }
                }
 
@@ -2294,56 +2240,32 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        {
                                case 0:
                                {
-#ifdef JP
-                                       t = object_desc_str(t, "(»Ü¾û)");
-#else
-                                       t = object_desc_str(t, " (Locked)");
-#endif
+                                       t = object_desc_str(t, _("(施錠)", " (Locked)"));
                                        break;
                                }
                                case CHEST_LOSE_STR:
                                {
-#ifdef JP
-                                       t = object_desc_str(t, "(ÆÇ¿Ë)");
-#else
-                                       t = object_desc_str(t, " (Poison Needle)");
-#endif
+                                       t = object_desc_str(t, _("(毒針)", " (Poison Needle)"));
                                        break;
                                }
                                case CHEST_LOSE_CON:
                                {
-#ifdef JP
-                                       t = object_desc_str(t, "(ÆÇ¿Ë)");
-#else
-                                       t = object_desc_str(t, " (Poison Needle)");
-#endif
+                                       t = object_desc_str(t, _("(毒針)", " (Poison Needle)"));
                                        break;
                                }
                                case CHEST_POISON:
                                {
-#ifdef JP
-                                       t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
-#else
-                                       t = object_desc_str(t, " (Gas Trap)");
-#endif
+                                       t = object_desc_str(t, _("(ガス・トラップ)", " (Gas Trap)"));
                                        break;
                                }
                                case CHEST_PARALYZE:
                                {
-#ifdef JP
-                                       t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
-#else
-                                       t = object_desc_str(t, " (Gas Trap)");
-#endif
+                                       t = object_desc_str(t, _("(ガス・トラップ)", " (Gas Trap)"));
                                        break;
                                }
                                case CHEST_EXPLODE:
                                {
-#ifdef JP
-                                       t = object_desc_str(t, "(ÇúȯÁõÃÖ)");
-#else
-                                       t = object_desc_str(t, " (Explosion Device)");
-#endif
+                                       t = object_desc_str(t, _("(爆発装置)", " (Explosion Device)"));
                                        break;
                                }
                                case CHEST_SUMMON:
@@ -2351,38 +2273,22 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                                case CHEST_E_SUMMON:
                                case CHEST_H_SUMMON:
                                {
-#ifdef JP
-                                       t = object_desc_str(t, "(¾¤´­¤Î¥ë¡¼¥ó)");
-#else
-                                       t = object_desc_str(t, " (Summoning Runes)");
-#endif
+                                       t = object_desc_str(t, _("(召喚のルーン)", " (Summoning Runes)"));
                                        break;
                                }
                                case CHEST_RUNES_OF_EVIL:
                                {
-#ifdef JP
-                                       t = object_desc_str(t, "(¼Ù°­¤Ê¥ë¡¼¥ó)");
-#else
-                                       t = object_desc_str(t, " (Gleaming Black Runes)");
-#endif
+                                       t = object_desc_str(t, _("(邪悪なルーン)", " (Gleaming Black Runes)"));
                                        break;
                                }
                                case CHEST_ALARM:
                                {
-#ifdef JP
-                                       t = object_desc_str(t, "(·ÙÊóÁõÃÖ)");
-#else
-                                       t = object_desc_str(t, " (Alarm)");
-#endif
+                                       t = object_desc_str(t, _("(警報装置)", " (Alarm)"));
                                        break;
                                }
                                default:
                                {
-#ifdef JP
-                                       t = object_desc_str(t, "(¥Þ¥ë¥Á¡¦¥È¥é¥Ã¥×)");
-#else
-                                       t = object_desc_str(t, " (Multiple Traps)");
-#endif
+                                       t = object_desc_str(t, _("(マルチ・トラップ)", " (Multiple Traps)"));
                                        break;
                                }
                        }
@@ -2510,7 +2416,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
        {
                int avgdam = o_ptr->dd * (o_ptr->ds + 1) * 10 / 2;
                int tmul = bow_tmul(bow_ptr->sval);
-               s16b energy_fire = bow_energy(bow_ptr->sval);
+               ENERGY energy_fire = bow_energy(bow_ptr->sval);
 
                /* See if the bow is "known" - then set damage bonus */
                if (object_is_known(bow_ptr)) avgdam += (bow_ptr->to_d * 10);
@@ -2560,17 +2466,19 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        avgdam *= (p_ptr->num_fire * 100);
                        avgdam /= energy_fire;
                        t = object_desc_num(t, avgdam);
-                       t = object_desc_str(t, show_ammo_detail ? "/turn" : "");
+                       t = object_desc_str(t, show_ammo_detail ? "/current_world_ptr->game_turn" : "");
                        
                        if(show_ammo_crit_ratio)
                        {
-                               int percent = calc_crit_ratio_shot(o_ptr->weight, 
-                                               known ? o_ptr->to_h : 0, 
-                                               object_is_known(bow_ptr) ? bow_ptr->to_h : 0,  avgdam);
+                               int percent = calc_crit_ratio_shot(known ? o_ptr->to_h : 0, known ? bow_ptr->to_h : 0);
                                
                                t = object_desc_chr(t, '/');
                                t = object_desc_num(t, percent / 100);
                                t = object_desc_chr(t, '.');
+                if(percent % 100 < 10)
+                {
+                                   t = object_desc_chr(t, '0');
+                }
                                t = object_desc_num(t, percent % 100);
                                t = object_desc_str(t, show_ammo_detail ? "% crit" : "%");
                        }
@@ -2656,7 +2564,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        }
                        t = object_desc_num(t, o_ptr->pval);
 #ifdef JP
-                       t = object_desc_str(t, "²óʬ");
+                       t = object_desc_str(t, "回分");
 #else
                        t = object_desc_str(t, " charge");
                        if (o_ptr->pval != 1) t = object_desc_chr(t, 's');
@@ -2689,21 +2597,13 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                                        /* Display prettily. */
                                        t = object_desc_str(t, " (");
                                        t = object_desc_num(t, power);
-#ifdef JP
-                                       t = object_desc_str(t, "ËÜ ½¼Å¶Ãæ)");
-#else
-                                       t = object_desc_str(t, " charging)");
-#endif
+                                       t = object_desc_str(t, _("本 充填中)", " charging)"));
                                }
 
                                /* "one Rod of Perception (1 charging)" would look tacky. */
                                else
                                {
-#ifdef JP
-                                       t = object_desc_str(t, "(½¼Å¶Ãæ)");
-#else
-                                       t = object_desc_str(t, " (charging)");
-#endif
+                                       t = object_desc_str(t, _("(充填中)", " (charging)"));
                                }
                        }
                }
@@ -2724,15 +2624,10 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                                /* Nothing */
                        }
 
-                       /* Speed */
                        else if (have_flag(flgs, TR_SPEED))
                        {
                                /* Dump " to speed" */
-#ifdef JP
-                               t = object_desc_str(t, "²Ã®");
-#else
-                               t = object_desc_str(t, " to speed");
-#endif
+                               t = object_desc_str(t, _("加速", " to speed"));
                        }
 
                        /* Attack speed */
@@ -2740,7 +2635,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        {
                                /* Add " attack" */
 #ifdef JP
-                               t = object_desc_str(t, "¹¶·â");
+                               t = object_desc_str(t, "攻撃");
 #else
                                t = object_desc_str(t, " attack");
 
@@ -2753,33 +2648,21 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        else if (have_flag(flgs, TR_STEALTH))
                        {
                                /* Dump " to stealth" */
-#ifdef JP
-                               t = object_desc_str(t, "±£Ì©");
-#else
-                               t = object_desc_str(t, " to stealth");
-#endif
+                               t = object_desc_str(t, _("隠密", " to stealth"));
                        }
 
                        /* Search */
                        else if (have_flag(flgs, TR_SEARCH))
                        {
                                /* Dump " to searching" */
-#ifdef JP
-                               t = object_desc_str(t, "õº÷");
-#else
-                               t = object_desc_str(t, " to searching");
-#endif
+                               t = object_desc_str(t, _("探索", " to searching"));
                        }
 
                        /* Infravision */
                        else if (have_flag(flgs, TR_INFRA))
                        {
                                /* Dump " to infravision" */
-#ifdef JP
-                               t = object_desc_str(t, "ÀÖ³°Àþ»ëÎÏ");
-#else
-                               t = object_desc_str(t, " to infravision");
-#endif
+                               t = object_desc_str(t, _("赤外線視力", " to infravision"));
                        }
 
                        /* Finish the display */
@@ -2798,22 +2681,14 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
 
                        if (o_ptr->name2 == EGO_LITE_LONG) t = object_desc_num(t, o_ptr->xtra4 * 2);
                        else t = object_desc_num(t, o_ptr->xtra4);
-#ifdef JP
-                       t = object_desc_str(t, "¥¿¡¼¥ó¤Î¼÷Ì¿)");
-#else
-                       t = object_desc_str(t, " turns of light)");
-#endif
+                       t = object_desc_str(t, _("ターンの寿命)", " turns of light)"));
                }
 
                /* Indicate charging objects, but not rods. */
                if (o_ptr->timeout && (o_ptr->tval != TV_ROD))
                {
                        /* Hack -- Dump " (charging)" if relevant */
-#ifdef JP
-                       t = object_desc_str(t, "(½¼Å¶Ãæ)");
-#else
-                       t = object_desc_str(t, " (charging)");
-#endif
+                       t = object_desc_str(t, _("(充填中)", " (charging)"));
                }
        }
 
@@ -2870,11 +2745,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
        /* Note "cursed" if the item is known to be cursed */
        else if (object_is_cursed(o_ptr) && (known || (o_ptr->ident & IDENT_SENSE)))
        {
-#ifdef JP
-               strcpy(fake_insc_buf, "¼ö¤ï¤ì¤Æ¤¤¤ë");
-#else
-               strcpy(fake_insc_buf, "cursed");
-#endif
+               strcpy(fake_insc_buf, _("呪われている", "cursed"));
        }
 
        /* Note "unidentified" if the item is unidentified */
@@ -2883,31 +2754,19 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                 && aware && !known
                 && !(o_ptr->ident & IDENT_SENSE))
        {
-#ifdef JP
-               strcpy(fake_insc_buf, "̤´ÕÄê");
-#else
-               strcpy(fake_insc_buf, "unidentified");
-#endif
+               strcpy(fake_insc_buf, _("未鑑定", "unidentified"));
        }
 
        /* Mega-Hack -- note empty wands/staffs */
        else if (!known && (o_ptr->ident & IDENT_EMPTY))
        {
-#ifdef JP
-               strcpy(fake_insc_buf, "¶õ");
-#else
-               strcpy(fake_insc_buf, "empty");
-#endif
+               strcpy(fake_insc_buf, _("空", "empty"));
        }
 
        /* Note "tried" if the object has been tested unsuccessfully */
        else if (!aware && object_is_tried(o_ptr))
        {
-#ifdef JP
-               strcpy(fake_insc_buf, "̤ȽÌÀ");
-#else
-               strcpy(fake_insc_buf, "tried");
-#endif
+               strcpy(fake_insc_buf, _("未判明", "tried"));
        }
 
        /* Note the discount, if any */
@@ -2923,11 +2782,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
 
                        (void)object_desc_num(discount_num_buf, o_ptr->discount);
                        strcat(fake_insc_buf, discount_num_buf);
-#ifdef JP
-                       strcat(fake_insc_buf, "%°ú¤­");
-#else
-                       strcat(fake_insc_buf, "% off");
-#endif
+                       strcat(fake_insc_buf, _("%引き", "% off"));
                }
        }