OSDN Git Service

鍛冶師の武器の英語版でキャピタライズが変だったので修正。
[hengband/hengband.git] / src / flavor.c
1 /* Purpose: Object flavor code */
2
3 /*
4  * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
5  *
6  * This software may be copied and distributed for educational, research, and
7  * not for profit purposes provided that this copyright and statement are
8  * included in all such copies.
9  */
10
11 #include "angband.h"
12
13
14 /*
15  * Hack -- note that "TERM_MULTI" is now just "TERM_VIOLET".
16  * We will have to find a cleaner method for "MULTI_HUED" later.
17  * There were only two multi-hued "flavors" (one potion, one food).
18  * Plus five multi-hued "base-objects" (3 dragon scales, one blade
19  * of chaos, and one something else).  See the SHIMMER_OBJECTS code
20  * in "dungeon.c" and the object color extractor in "cave.c".
21  */
22 #define TERM_MULTI      TERM_VIOLET
23
24
25 /*
26  * Max sizes of the following arrays
27  */
28 #define MAX_ROCKS      59       /* Used with rings (min 38) */
29 #define MAX_AMULETS    26       /* Used with amulets (min 14) */
30 #define MAX_WOODS      34       /* Used with staffs (min 30) */
31 #define MAX_METALS     40       /* Used with wands/rods (min 29/29) */
32 #define MAX_COLORS     70       /* Used with potions (min 60) */
33 #define MAX_SHROOM     20       /* Used with mushrooms (min 20) */
34 #define MAX_TITLES     55       /* Used with scrolls (min 48) */
35 #define MAX_SYLLABLES 164       /* Used with scrolls (see below) */
36
37
38 /*
39  * Rings (adjectives and colors)
40  */
41
42 static cptr ring_adj[MAX_ROCKS]
43 #ifndef JP
44 = {
45         "Alexandrite", "Amethyst", "Aquamarine", "Azurite", "Beryl",
46         "Bloodstone", "Calcite", "Carnelian", "Corundum", "Diamond",
47         "Emerald", "Fluorite", "Garnet", "Granite", "Jade",
48         "Jasper", "Lapis Lazuli", "Malachite", "Marble", "Moonstone",
49         "Onyx", "Opal", "Pearl", "Quartz", "Quartzite",
50         "Rhodonite", "Ruby", "Sapphire", "Tiger Eye", "Topaz",
51         "Turquoise", "Zircon", "Platinum", "Bronze", "Gold",
52         "Obsidian", "Silver", "Tortoise Shell", "Mithril", "Jet",
53         "Engagement", "Adamantite",
54         "Wire", "Dilithium", "Bone", "Wooden",
55         "Spikard", "Serpent",   "Wedding", "Double",
56         "Plain", "Brass",  "Scarab","Shining",
57         "Rusty","Transparent", "Steel", "Tanzanite",
58         "Nephrite",
59 };
60 #else
61 = {
62     "¶âÎÐÀФÎ","¥¢¥á¥¸¥¹¥È¤Î","¥¢¥¯¥¢¥Þ¥ê¥ó¤Î","¤á¤Î¤¦¤Î","ÎÐÃìÀФÎ",
63     "·ì¶Ì¿ï¤Î","Êý²òÀФÎ","ÀÖ¤á¤Î¤¦¤Î","¹Ë¶Ì¤Î","¥À¥¤¥¢¥â¥ó¥É¤Î",
64     "¥¨¥á¥é¥ë¥É¤Î","¥Û¥¿¥ëÀФÎ","¥¬¡¼¥Í¥Ã¥È¤Î","¸æ±ÆÀФÎ","¤Ò¤¹¤¤¤Î",
65     "¥¸¥ã¥¹¥Ñ¡¼¤Î","ÀÄÎÜÍþ¤Î","¥¯¥¸¥ã¥¯ÀФÎ","ÂçÍýÀФÎ","¥à¡¼¥ó¥¹¥È¡¼¥ó¤Î",
66     "¼Ê¤á¤Î¤¦¤Î","¥ª¥Ñ¡¼¥ë¤Î","¿¿¼î¤Î","¿å¾½¤Î","ÀбѴä¤Î",
67     "¥¶¥¯¥íÀФÎ","¥ë¥Ó¡¼¤Î","¥µ¥Õ¥¡¥¤¥¢¤Î","¥¿¥¤¥¬¡¼¥¢¥¤¤Î","¥È¥Ñ¡¼¥º¤Î",
68     "¥È¥ë¥³ÀФÎ","¥¸¥ë¥³¥ó¤Î","¥×¥é¥Á¥Ê¤Î","¥Ö¥í¥ó¥º¤Î","¶â¤Î",
69     "¹õÍËÀФÎ","¶ä¤Î","¤Ù¤Ã¹Ã¤Î","¥ß¥¹¥ê¥ë¤Î","¹õ¶Ì¤Î",
70     "º§Ìó","¥¢¥À¥Þ¥ó¥¿¥¤¥È¤Î",
71     "¿Ë¶â¤Î","¥Ç¥£¥ê¥·¥¦¥à¤Î","¹ü¤Î","ÌÚ¤Î",
72     "¥¹¥Ô¥«¤Î" /*nuke me*/ ,"¼Ø¤Î","·ëº§","Æó½Å¤Î",
73     "¾þ¤ê¤Î¤Ê¤¤","ÀÄƼ¤Î","¥¹¥«¥é¥Ù¤Î" ,"µ±¤¯",
74     "»¬¤Ó¤¿","Æ©ÌÀ¤Ê","¹ÝÅ´¤Î","¥¿¥ó¥¶¥Ê¥¤¥È¤Î",
75     "Æð¶Ì¤Î",
76 };
77 #endif
78
79 static byte ring_col[MAX_ROCKS] =
80 {
81         TERM_GREEN, TERM_VIOLET, TERM_L_BLUE, TERM_L_BLUE, TERM_L_GREEN,
82         TERM_RED, TERM_WHITE, TERM_RED, TERM_SLATE, TERM_WHITE,
83         TERM_GREEN, TERM_L_GREEN, TERM_RED, TERM_L_DARK, TERM_L_GREEN,
84         TERM_UMBER, TERM_BLUE, TERM_GREEN, TERM_WHITE, TERM_L_WHITE,
85         TERM_L_RED, TERM_L_WHITE, TERM_WHITE, TERM_L_WHITE, TERM_L_WHITE,
86         TERM_L_RED, TERM_RED, TERM_BLUE, TERM_YELLOW, TERM_YELLOW,
87         TERM_L_BLUE, TERM_L_UMBER, TERM_WHITE, TERM_L_UMBER, TERM_YELLOW,
88         TERM_L_DARK, TERM_L_WHITE, TERM_GREEN, TERM_L_BLUE, TERM_L_DARK,
89         TERM_YELLOW, TERM_VIOLET,
90         TERM_UMBER, TERM_L_WHITE, TERM_WHITE, TERM_UMBER,
91         TERM_BLUE, TERM_GREEN, TERM_YELLOW, TERM_ORANGE,
92         TERM_YELLOW, TERM_ORANGE, TERM_L_GREEN, TERM_YELLOW,
93         TERM_RED, TERM_WHITE, TERM_WHITE, TERM_YELLOW,
94         TERM_GREEN,
95 };
96
97
98 /*
99  * Amulets (adjectives and colors)
100  */
101 static cptr amulet_adj[MAX_AMULETS]
102 #ifndef JP
103 = {
104         "Amber", "Driftwood", "Coral", "Agate", "Ivory",
105         "Obsidian", "Bone", "Brass", "Bronze", "Pewter",
106         "Tortoise Shell", "Golden", "Azure", "Crystal", "Silver",
107         "Copper", "Swastika", "Platinum","Runed", "Rusty",
108         "Curved", "Dragon's claw", "Rosary", "Jade", "Mithril",
109         "Ruby"
110 };
111 #else
112 = {
113     "àèàá¤Î","ήÌÚ¤Î","¥µ¥ó¥´¤Î","¤á¤Î¤¦¤Î","¾Ý²ç¤Î",
114     "¹õÍËÀФÎ","¹ü¤Î","¿¿ï«¤Î","ÀÄƼ¤Î","¤·¤í¤á¤Î",
115     "¤Ù¤Ã¹Ã¤Î","¶â¤Î","ÎÜÍþ¤Î","¿å¾½¤Î","¶ä¤Î",
116     "Ƽ¤Î","ÒĤÎ", "¥×¥é¥Á¥Ê¤Î", "¥ë¡¼¥ó¤¬¹ï¤Þ¤ì¤¿","»¬¤Ó¤¿",
117     "¶Ê¤¬¤Ã¤¿", "¥É¥é¥´¥ó¤ÎÄÞ¤Î", "¿ô¼î¤Î", "¤Ò¤¹¤¤¤Î", "¥ß¥¹¥ê¥ë¤Î",
118     "¥ë¥Ó¡¼¤Î"
119 };
120 #endif
121
122 static byte amulet_col[MAX_AMULETS] =
123 {
124         TERM_YELLOW, TERM_L_UMBER, TERM_WHITE, TERM_L_WHITE, TERM_WHITE,
125         TERM_L_DARK, TERM_WHITE, TERM_L_UMBER, TERM_L_UMBER, TERM_SLATE,
126         TERM_GREEN, TERM_YELLOW, TERM_L_BLUE, TERM_L_BLUE, TERM_L_WHITE,
127         TERM_L_UMBER, TERM_VIOLET, TERM_WHITE, TERM_UMBER, TERM_RED, 
128         TERM_GREEN, TERM_L_GREEN, TERM_L_GREEN, TERM_GREEN, TERM_L_BLUE, 
129         TERM_RED
130 };
131
132
133 /*
134  * Staffs (adjectives and colors)
135  */
136 static cptr staff_adj[MAX_WOODS]
137 #ifndef JP
138 = {
139         "Aspen", "Balsa", "Banyan", "Birch", "Cedar",
140         "Cottonwood", "Cypress", "Dogwood", "Elm", "Eucalyptus",
141         "Hemlock", "Hickory", "Ironwood", "Locust", "Mahogany",
142         "Maple", "Mulberry", "Oak", "Pine", "Redwood",
143         "Rosewood", "Spruce", "Sycamore", "Teak", "Walnut",
144         "Mistletoe", "Hawthorn", "Bamboo", "Silver", "Runed",
145         "Golden", "Ashen", "Ivory","Gnarled"/*,"Willow"*/
146 };
147 #else
148 = {
149     "¥Ý¥×¥é¤Î","¥Ð¥ë¥µ¤Î","¥Ð¥ó¥ä¥ó¤Î","¥«¥Ð¤Î","À¾ÍÎ¥¹¥®¤Î",
150     "ÛؤÎ","¥¤¥È¥¹¥®¤Î","¥ß¥º¥­¤Î","¥Ë¥ì¤Î","¥æ¡¼¥«¥ê¤Î",
151     "¥Ä¥¬¤Î","¥Ö¥Ê¤Î","¹õÃɤÎ","¥¢¥«¥·¥¢¤Î","¥Þ¥Û¥¬¥Ë¡¼¤Î",
152     "¥«¥¨¥Ç¤Î","¥¯¥ï¤Î","¥«¥·¤Î","¾¾¤Î","¿ù¤Î",
153     "»çÃɤÎ","¥¨¥¾¥Þ¥Ä¤Î","¥¤¥Á¥¸¥¯¤Î","¥Á¡¼¥¯¤Î","¥¯¥ë¥ß¤Î",
154     "¥ä¥É¥ê¥®¤Î","¥µ¥ó¥¶¥·¤Î","ÃݤÎ","¶ä¤Î","¥ë¡¼¥ó¤Î",
155     "¶â¤Î","¥È¥Í¥ê¥³¤Î", "¾Ý²ç¤Î", "·î·Ë¼ù¤Î"
156 };
157 #endif
158
159 static byte staff_col[MAX_WOODS] =
160 {
161         TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER,
162         TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER,
163         TERM_L_UMBER, TERM_L_UMBER, TERM_UMBER, TERM_L_UMBER, TERM_UMBER,
164         TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_RED,
165         TERM_RED, TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_UMBER,
166         TERM_GREEN, TERM_L_UMBER, TERM_L_UMBER, TERM_L_WHITE, TERM_UMBER,
167         TERM_YELLOW, TERM_SLATE, TERM_WHITE, TERM_SLATE
168 };
169
170
171 /*
172  * Wands (adjectives and colors)
173  */
174 static cptr wand_adj[MAX_METALS]
175 #ifndef JP
176 = {
177         "Aluminum", "Cast Iron", "Chromium", "Copper", "Gold",
178         "Iron", "Magnesium", "Molybdenum", "Nickel", "Rusty",
179         "Silver", "Steel", "Tin", "Titanium", "Tungsten",
180         "Zirconium", "Zinc", "Aluminum-Plated", "Copper-Plated", "Gold-Plated",
181         "Nickel-Plated", "Silver-Plated", "Steel-Plated", "Tin-Plated", "Zinc-Plated",
182         "Mithril-Plated", "Mithril", "Runed", "Bronze", "Brass",
183         "Platinum", "Lead","Lead-Plated", "Ivory" , "Adamantite",
184         "Uridium", "Long", "Short", "Hexagonal", "Carbonized"
185 };
186 #else
187 = {
188     "¥¢¥ë¥ß¤Î","ÃòÅ´¤Î","¥¯¥í¥à¤Î","Ƽ¤Î","¶â¤Î",
189     "Å´¤Î","¥Þ¥°¥Í¥·¥¦¥à¤Î","¥â¥ê¥Ö¥Ç¥ó¤Î","¥Ë¥Ã¥±¥ë¤Î","»¬¤Ó¤¿",
190     "¶ä¤Î","¹ÝÅ´¤Î","¥Ö¥ê¥­¤Î","¥Á¥¿¥ó¤Î","¥¿¥ó¥°¥¹¥Æ¥ó¤Î",
191     "¥¸¥ë¥³¥ó¤Î","°¡±ô¤Î","¥¢¥ë¥ß¥á¥Ã¥­¤Î","Ƽ¥á¥Ã¥­¤Î","¶â¥á¥Ã¥­¤Î",
192     "ÇòƼ¥á¥Ã¥­¤Î","¶ä¥á¥Ã¥­¤Î","Å´¥á¥Ã¥­¤Î","¥¹¥º¥á¥Ã¥­¤Î","°¡±ô¥á¥Ã¥­¤Î",
193     "¥ß¥¹¥ê¥ë¥á¥Ã¥­¤Î","¥ß¥¹¥ê¥ë¤Î","¥ë¡¼¥ó¤¬¹ï¤Þ¤ì¤¿","ÀÄƼ¤Î","¿¿ï«¤Î",
194     "¥×¥é¥Á¥Ê¤Î","±ô¤Î","±ô¥á¥Ã¥­¤Î","¾Ý²ç¤Î","¥¢¥À¥Þ¥ó¥¿¥¤¥È¤Î",
195     "¥¤¥ê¥Â¥¦¥à¤Î","Ť¤","û¤¤","Ï»³Ñ·Á¤Î", "úÁǤÎ"
196 };
197 #endif
198
199 static byte wand_col[MAX_METALS] =
200 {
201         TERM_L_BLUE, TERM_L_DARK, TERM_WHITE, TERM_L_UMBER, TERM_YELLOW,
202         TERM_SLATE, TERM_L_WHITE, TERM_L_WHITE, TERM_L_UMBER, TERM_RED,
203         TERM_L_WHITE, TERM_L_WHITE, TERM_L_WHITE, TERM_WHITE, TERM_WHITE,
204         TERM_L_WHITE, TERM_L_WHITE, TERM_L_BLUE, TERM_L_UMBER, TERM_YELLOW,
205         TERM_L_UMBER, TERM_L_WHITE, TERM_L_WHITE, TERM_L_WHITE, TERM_L_WHITE,
206         TERM_L_BLUE, TERM_L_BLUE, TERM_UMBER, TERM_L_UMBER, TERM_L_UMBER,
207         TERM_WHITE, TERM_SLATE, TERM_SLATE, TERM_WHITE, TERM_VIOLET,
208         TERM_L_RED, TERM_L_BLUE, TERM_BLUE, TERM_RED, TERM_L_DARK
209 };
210
211
212 /*
213  * Rods (adjectives and colors).
214  * Efficiency -- copied from wand arrays
215  */
216
217 static cptr rod_adj[MAX_METALS];
218
219 static byte rod_col[MAX_METALS];
220
221
222 /*
223  * Mushrooms (adjectives and colors)
224  */
225
226 static cptr food_adj[MAX_SHROOM]
227 #ifndef JP
228 = {
229         "Blue", "Black", "Black Spotted", "Brown", "Dark Blue",
230         "Dark Green", "Dark Red", "Yellow", "Furry", "Green",
231         "Grey", "Light Blue", "Light Green", "Violet", "Red",
232         "Slimy", "Tan", "White", "White Spotted", "Wrinkled",
233 };
234 #else
235 = {
236     "ÀĤ¤","¹õ¤¤","¹õÈäÎ","Ã㿧¤Î","·²ÀĤÎ",
237     "¿¼ÎФÎ","¹È¿§¤Î","²«¿§¤¤","Âݤष¤¿","ÎФÎ",
238     "¥°¥ì¡¼¤Î","¶õ¿§¤Î","²«ÎФÎ","¥¹¥ß¥ì¿§¤Î","ÀÖ¤¤",
239     "¤Í¤Ð¤Í¤Ð¤·¤¿","²«³ì¿§¤Î","Çò¤¤","ÇòÈäÎ","¤·¤ï¤·¤ï¤Î",
240 };
241 #endif
242
243 static byte food_col[MAX_SHROOM] =
244 {
245         TERM_BLUE, TERM_L_DARK, TERM_L_DARK, TERM_UMBER, TERM_BLUE,
246         TERM_GREEN, TERM_RED, TERM_YELLOW, TERM_L_WHITE, TERM_GREEN,
247         TERM_SLATE, TERM_L_BLUE, TERM_L_GREEN, TERM_VIOLET, TERM_RED,
248         TERM_SLATE, TERM_L_UMBER, TERM_WHITE, TERM_WHITE, TERM_UMBER
249 };
250
251
252 /*
253  * Color adjectives and colors, for potions.
254  * Hack -- The first four entries are hard-coded.
255  * (water, apple juice, slime mold juice, something)
256  */
257
258 static cptr potion_adj[MAX_COLORS]
259 #ifndef JP
260 = {
261         "Clear", "Light Brown", "Icky Green", "xxx",
262         "Azure", "Blue", "Blue Speckled", "Black", "Brown", "Brown Speckled",
263         "Bubbling", "Chartreuse", "Cloudy", "Copper Speckled", "Crimson", "Cyan",
264         "Dark Blue", "Dark Green", "Dark Red", "Gold Speckled", "Green",
265         "Green Speckled", "Grey", "Grey Speckled", "Hazy", "Indigo",
266         "Light Blue", "Light Green", "Magenta", "Metallic Blue", "Metallic Red",
267         "Metallic Green", "Metallic Purple", "Misty", "Orange", "Orange Speckled",
268         "Pink", "Pink Speckled", "Puce", "Purple", "Purple Speckled",
269         "Red", "Red Speckled", "Silver Speckled", "Smoky", "Tangerine",
270         "Violet", "Vermilion", "White", "Yellow", "Violet Speckled",
271         "Pungent", "Clotted Red", "Viscous Pink", "Oily Yellow", "Gloopy Green",
272         "Shimmering", "Coagulated Crimson", "Yellow Speckled", "Gold",
273         "Manly", "Stinking", "Oily Black", "Ichor", "Ivory White", "Sky Blue",
274         "Gray", "Silver", "Bronze", "Flashing",
275 };
276 #else
277 = {
278     "Æ©ÌÀ¤Ê","ÇöÃ㿧¤Î","¤è¤É¤ó¤ÀÎФÎ","¼¿¹õ¤Î",
279     "º°ÊˤÎ","ÀĤ¤","ÀÄÈäÎ","¹õ¤¤","Ã㿧¤Î","ÃãÈäÎ",
280     "Ë¢¤À¤Ã¤¿","Çö²«Î理Î","Âù¤Ã¤¿","ƼÈäÎ","¹È¿§¤Î","¥·¥¢¥ó¿§¤Î",
281     "·²ÀÄ¿§¤Î","¿¼¤¤ÎФÎ","¿¼¤¤ÀÖ¿§¤Î","¶âÈäÎ","Î理Î",
282     "ÎÐÈäÎ","³¥¿§¤Î","³¥ÈäÎ","¤Ü¤ä¤±¤¿¿§¤Î","Íõ¿§¤Î",
283     "Çö¤¤ÀÄ¿§¤Î","Çö¤¤Î理Î","¥Þ¥¼¥ó¥¿¿§¤Î","ÀĤ¯µ±¤¯","ÀÖ¤¯µ±¤¯",
284     "ÎФ˵±¤¯","»ç¤Ëµ±¤¯","̸¾õ¤Î","¥ª¥ì¥ó¥¸¿§¤Î","¥ª¥ì¥ó¥¸ÈäÎ",
285     "¥Ô¥ó¥¯¿§¤Î","¥Ô¥ó¥¯ÈäÎ","¹õ³ì¿§¤Î","»ç¿§¤Î","¤¦¤¹¤¤»çÈäÎ",
286     "ÀÖ¤¤","ÀÖÈäÎ","¶äÈäÎ","±ì¤Ã¤¿","Üô¿§¤Î",
287     "¥¹¥ß¥ì¿§¤Î","¼ë¿§¤Î","Çò¤¤","²«¿§¤¤", "»çÈäÎ",
288     "»É·ã½­¤Î¤¹¤ë","¤è¤É¤ó¤ÀÀÖ¤Î","¥É¥í¥É¥í¤Î","¤Í¤Ð¤Ã¤¿²«¿§¤Î","°ÅÎ理Î",
289     "µ±¤¯","¤Í¤Ð¤Ã¤¿¿¼¹È¤Î","²«ÈäÎ","¶â¿§¤Î",
290     "Ã˽­¤¤" /*nuke me*/,"°­½­¤Î¤¹¤ë","¹õÌý¿§¤Î","ǾÞù¤Î",
291     "¾Ý²ç¿§¤Î","¶õ¿§¤Î", "¤Í¤º¤ß¿§¤Î", "¶ä¿§¤Î", "ÀÖƼ¿§¤Î",
292     "¥­¥é¥­¥é¸÷¤ë"
293 };
294 #endif
295
296 static byte potion_col[MAX_COLORS] =
297 {
298         TERM_WHITE, TERM_L_UMBER, TERM_GREEN, 0,
299         TERM_L_BLUE, TERM_BLUE, TERM_BLUE, TERM_L_DARK, TERM_UMBER, TERM_UMBER,
300         TERM_L_WHITE, TERM_L_GREEN, TERM_WHITE, TERM_L_UMBER, TERM_RED, TERM_L_BLUE,
301         TERM_BLUE, TERM_GREEN, TERM_RED, TERM_YELLOW, TERM_GREEN,
302         TERM_GREEN, TERM_SLATE, TERM_SLATE, TERM_L_WHITE, TERM_VIOLET,
303         TERM_L_BLUE, TERM_L_GREEN, TERM_RED, TERM_BLUE, TERM_RED,
304         TERM_GREEN, TERM_VIOLET, TERM_L_WHITE, TERM_ORANGE, TERM_ORANGE,
305         TERM_L_RED, TERM_L_RED, TERM_VIOLET, TERM_VIOLET, TERM_VIOLET,
306         TERM_RED, TERM_RED, TERM_L_WHITE, TERM_L_DARK, TERM_ORANGE,
307         TERM_VIOLET, TERM_RED, TERM_WHITE, TERM_YELLOW, TERM_VIOLET,
308         TERM_L_RED, TERM_RED, TERM_L_RED, TERM_YELLOW, TERM_GREEN,
309         TERM_MULTI, TERM_RED, TERM_YELLOW, TERM_YELLOW,
310         TERM_L_UMBER, TERM_UMBER, TERM_L_DARK, TERM_RED,
311         TERM_WHITE, TERM_L_BLUE, TERM_L_WHITE, TERM_WHITE, TERM_RED,
312         TERM_YELLOW
313 };
314
315
316 /*
317  * Syllables for scrolls (must be 1-4 letters each)
318  */
319
320 static cptr syllables[MAX_SYLLABLES]
321 #ifdef JP
322 = {
323         "Å·", "ÃÏ", "̵", "ÍÑ", "°ì", "Åá", "ξ", "ÃÇ",
324         "°á", "Ë¥", "Æü", "Àé", "½©", "Ëþ", "¿È", "ÁÏ",
325         "áØ", "¼·", "ž", "Ȭ", "ÅÝ", "²é", "¿Å",
326         "¾¨", "ÃÀ", "µ¯", "»à", "²ó", "À¸", "ʸ",
327         "Éð", "Æ»", "ε", "Ƭ", "¼Ø", "Èø", "ñ", "Åá", "ľ", "Æþ",
328         "¿Ê", "Âà", "¸Þ", "¡", "Ï»", "ç¥", "Âç", "»³", "ÌÄ",
329         "Æ°", "É÷", "ÎÓ", "²Ð", "Àä", "ÂÎ", "Ì¿", "»Í",
330         "ÌÌ", "Á¿", "²Î", "´°", "Á´", "·ç", "Ä·", "ÎÂ",
331         "ìí", "î½", "òµ", "Ì¥", "ò³", "ò´", "½Ä",
332         "²£", "¿Ô", "¿À", "½Ð", "µ´", "Ë×", "²¹", "¸Î", "ÃÎ",
333         "¿·", "½Õ", "²Æ", "Åß", "½ã", "¿¿", "¹¤", "¶½",
334         "Ì£", "ÄÅ", "³Î", "Èæ", "¶ì", "¿´", "»´", "߸",
335         "Ç°", "ȯ", "Á°", "Âå", "̤", "ʹ", "¶õ", "¸å",
336         "Ú¼", "¶â", "¿¹", "Íå", "Ëü", "¾Ý", "ÊÑ", "²½",
337         "½½", "Ãæ", "Ȭ", "¶å", "¿Í", "¿§", "»î", "¹Ô",
338         "ºø", "¸í", "»ö", "¼Â", "º¬", "µÛ", "¼ý", "¹ç",
339         "Ê»", "Á´", "¹ñ", "À©", "ÇÆ", "¾Æ", "Æù", "Äê",
340         "¿©", "¹ü", "²ç", "Ìø", "Èô", "æÆ", "Éõ", "°õ",
341         "¼À", "Íð", "Éð", "¾­", "·Ú", "Ǧ", "·õ", "ǽ",
342         "À»", "¼Ù", "¼ö", "¼±", "¸¸", "´¶", "ÆÇ", "°Ç",
343         "Íî", "±¢", "ÍÛ"
344 };
345 #else
346 = {
347         "a", "ab", "ag", "aks", "ala", "an", "ankh", "app",
348         "arg", "arze", "ash", "aus", "ban", "bar", "bat", "bek",
349         "bie", "bin", "bit", "bjor", "blu", "bot", "bu",
350         "byt", "comp", "con", "cos", "cre", "dalf", "dan",
351         "den", "der", "doe", "dok", "eep", "el", "eng", "er", "ere", "erk",
352         "esh", "evs", "fa", "fid", "flit", "for", "fri", "fu", "gan",
353         "gar", "glen", "gop", "gre", "ha", "he", "hyd", "i",
354         "ing", "ion", "ip", "ish", "it", "ite", "iv", "jo",
355         "kho", "kli", "klis", "la", "lech", "man", "mar",
356         "me", "mi", "mic", "mik", "mon", "mung", "mur", "nag", "nej",
357         "nelg", "nep", "ner", "nes", "nis", "nih", "nin", "o",
358         "od", "ood", "org", "orn", "ox", "oxy", "pay", "pet",
359         "ple", "plu", "po", "pot", "prok", "re", "rea", "rhov",
360         "ri", "ro", "rog", "rok", "rol", "sa", "san", "sat",
361         "see", "sef", "seh", "shu", "ski", "sna", "sne", "snik",
362         "sno", "so", "sol", "sri", "sta", "sun", "ta", "tab",
363         "tem", "ther", "ti", "tox", "trol", "tue", "turs", "u",
364         "ulk", "um", "un", "uni", "ur", "val", "viv", "vly",
365         "vom", "wah", "wed", "werg", "wex", "whon", "wun", "x",
366         "yerg", "yp", "zun", "tri", "blaa", "jah", "bul", "on",
367         "foo", "ju", "xuxu"
368 };
369 #endif
370
371
372 /*
373  * Hold the titles of scrolls, 6 to 14 characters each
374  * Also keep an array of scroll colors (always WHITE for now)
375  */
376 static char scroll_adj[MAX_TITLES][16];
377
378 static byte scroll_col[MAX_TITLES];
379
380
381 /*
382  * Certain items, if aware, are known instantly
383  * This function is used only by "flavor_init()"
384  */
385 static bool object_easy_know(int i)
386 {
387         object_kind *k_ptr = &k_info[i];
388
389         /* Analyze the "tval" */
390         switch (k_ptr->tval)
391         {
392                 /* Spellbooks */
393                 case TV_LIFE_BOOK:
394                 case TV_SORCERY_BOOK:
395                 case TV_NATURE_BOOK:
396                 case TV_CHAOS_BOOK:
397                 case TV_DEATH_BOOK:
398                 case TV_TRUMP_BOOK:
399                 case TV_ARCANE_BOOK:
400                 case TV_ENCHANT_BOOK:
401                 case TV_DAEMON_BOOK:
402                 case TV_CRUSADE_BOOK:
403                 case TV_MUSIC_BOOK:
404                 case TV_HISSATSU_BOOK:
405                 {
406                         return (TRUE);
407                 }
408
409                 /* Simple items */
410                 case TV_FLASK:
411                 case TV_JUNK:
412                 case TV_BOTTLE:
413                 case TV_SKELETON:
414                 case TV_SPIKE:
415                 case TV_WHISTLE:
416                 {
417                         return (TRUE);
418                 }
419
420                 /* All Food, Potions, Scrolls, Rods */
421                 case TV_FOOD:
422                 case TV_POTION:
423                 case TV_SCROLL:
424                 case TV_ROD:
425                 {
426                         return (TRUE);
427                 }
428         }
429
430         /* Nope */
431         return (FALSE);
432 }
433
434
435 /*
436  * Certain items have a flavor
437  * This function is used only by "flavor_init()"
438  */
439 static bool object_flavor(int k_idx)
440 {
441         object_kind *k_ptr = &k_info[k_idx];
442
443         /* Analyze the item */
444         switch (k_ptr->tval)
445         {
446                 case TV_AMULET:
447                 {
448                         return (0x80 + amulet_col[k_ptr->sval]);
449                 }
450
451                 case TV_RING:
452                 {
453                         return (0x90 + ring_col[k_ptr->sval]);
454                 }
455
456                 case TV_STAFF:
457                 {
458                         return (0xA0 + staff_col[k_ptr->sval]);
459                 }
460
461                 case TV_WAND:
462                 {
463                         return (0xB0 + wand_col[k_ptr->sval]);
464                 }
465
466                 case TV_ROD:
467                 {
468                         return (0xC0 + rod_col[k_ptr->sval]);
469                 }
470
471                 case TV_SCROLL:
472                 {
473                         return (0xD0 + scroll_col[k_ptr->sval]);
474                 }
475
476                 case TV_POTION:
477                 {
478                         return (0xE0 + potion_col[k_ptr->sval]);
479                 }
480
481                 case TV_FOOD:
482                 {
483                         if (k_ptr->sval < SV_FOOD_MIN_FOOD)
484                         {
485                                 return (0xF0 + food_col[k_ptr->sval]);
486                         }
487
488                         break;
489                 }
490         }
491
492         /* No flavor */
493         return (0);
494 }
495
496
497 void get_table_name(char *out_string)
498 {
499 #ifdef JP
500         char Syllable[80];
501         strcpy(out_string, "¡Ø");
502         get_rnd_line("aname_j.txt", 1, Syllable);
503         strcat(out_string, Syllable);
504         get_rnd_line("aname_j.txt", 2, Syllable);
505         strcat(out_string, Syllable);
506         strcat(out_string, "¡Ù");
507 #else
508         int testcounter = randint1(3) + 1;
509
510         strcpy(out_string, "'");
511
512         if (randint1(3) == 2)
513         {
514                 while (testcounter--)
515                         strcat(out_string, syllables[randint0(MAX_SYLLABLES)]);
516         }
517         else
518         {
519                 char Syllable[80];
520                 testcounter = randint1(2) + 1;
521                 while (testcounter--)
522                 {
523                         (void)get_rnd_line("elvish.txt", 0, Syllable);
524                         strcat(out_string, Syllable);
525                 }
526         }
527
528         out_string[1] = toupper(out_string[1]);
529
530         strcat(out_string, "'");
531 #endif
532
533
534         out_string[18] = '\0';
535
536         return;
537 }
538
539
540 /*
541  * Prepare the "variable" part of the "k_info" array.
542  *
543  * The "color"/"metal"/"type" of an item is its "flavor".
544  * For the most part, flavors are assigned randomly each game.
545  *
546  * Initialize descriptions for the "colored" objects, including:
547  * Rings, Amulets, Staffs, Wands, Rods, Food, Potions, Scrolls.
548  *
549  * The first 4 entries for potions are fixed (Water, Apple Juice,
550  * Slime Mold Juice, Unused Potion).
551  *
552  * Scroll titles are always between 6 and 14 letters long.  This is
553  * ensured because every title is composed of whole words, where every
554  * word is from 1 to 8 letters long (one or two syllables of 1 to 4
555  * letters each), and that no scroll is finished until it attempts to
556  * grow beyond 15 letters.  The first time this can happen is when the
557  * current title has 6 letters and the new word has 8 letters, which
558  * would result in a 6 letter scroll title.
559  *
560  * Duplicate titles are avoided by requiring that no two scrolls share
561  * the same first four letters (not the most efficient method, and not
562  * the least efficient method, but it will always work).
563  *
564  * Hack -- make sure everything stays the same for each saved game
565  * This is accomplished by the use of a saved "random seed", as in
566  * "town_gen()".  Since no other functions are called while the special
567  * seed is in effect, so this function is pretty "safe".
568  *
569  * Note that the "hacked seed" may provide an RNG with alternating parity!
570  */
571 void flavor_init(void)
572 {
573         int     i, j;
574
575         byte    temp_col;
576
577         cptr    temp_adj;
578
579
580         /* Hack -- Use the "simple" RNG */
581         Rand_quick = TRUE;
582
583         /* Hack -- Induce consistant flavors */
584         Rand_value = seed_flavor;
585
586
587         /* Efficiency -- Rods/Wands share initial array */
588         for (i = 0; i < MAX_METALS; i++)
589         {
590                 rod_adj[i] = wand_adj[i];
591                 rod_col[i] = wand_col[i];
592         }
593
594
595         /* Rings have "ring colors" */
596         for (i = 0; i < MAX_ROCKS; i++)
597         {
598                 j = randint0(MAX_ROCKS);
599                 temp_adj = ring_adj[i];
600                 ring_adj[i] = ring_adj[j];
601                 ring_adj[j] = temp_adj;
602
603                 temp_col = ring_col[i];
604                 ring_col[i] = ring_col[j];
605                 ring_col[j] = temp_col;
606         }
607
608         /* Hack -- The One Ring */
609 #ifdef JP
610         ring_adj[SV_RING_POWER] = "¶â̵¹¤¤Î";
611         ring_adj[SV_RING_AHO] = "¶âÍ­¹¤¤Î";
612 #else
613         ring_adj[SV_RING_POWER] = "Plain Gold";
614         ring_adj[SV_RING_AHO] = "Plain Goldarn";
615 #endif
616
617         if (!use_graphics)
618         {
619                 ring_col[SV_RING_POWER] = TERM_YELLOW;
620                 ring_col[SV_RING_AHO] = TERM_YELLOW;
621         }
622
623         /* Amulets have "amulet colors" */
624         for (i = 0; i < MAX_AMULETS; i++)
625         {
626                 j = randint0(MAX_AMULETS);
627                 temp_adj = amulet_adj[i];
628                 amulet_adj[i] = amulet_adj[j];
629                 amulet_adj[j] = temp_adj;
630
631                 temp_col = amulet_col[i];
632                 amulet_col[i] = amulet_col[j];
633                 amulet_col[j] = temp_col;
634         }
635
636         /* Staffs */
637         for (i = 0; i < MAX_WOODS; i++)
638         {
639                 j = randint0(MAX_WOODS);
640                 temp_adj = staff_adj[i];
641                 staff_adj[i] = staff_adj[j];
642                 staff_adj[j] = temp_adj;
643
644                 temp_col = staff_col[i];
645                 staff_col[i] = staff_col[j];
646                 staff_col[j] = temp_col;
647         }
648
649         /* Wands */
650         for (i = 0; i < MAX_METALS; i++)
651         {
652                 j = randint0(MAX_METALS);
653                 temp_adj = wand_adj[i];
654                 wand_adj[i] = wand_adj[j];
655                 wand_adj[j] = temp_adj;
656
657                 temp_col = wand_col[i];
658                 wand_col[i] = wand_col[j];
659                 wand_col[j] = temp_col;
660         }
661
662         /* Rods */
663         for (i = 0; i < MAX_METALS; i++)
664         {
665                 j = randint0(MAX_METALS);
666                 temp_adj = rod_adj[i];
667                 rod_adj[i] = rod_adj[j];
668                 rod_adj[j] = temp_adj;
669
670                 temp_col = rod_col[i];
671                 rod_col[i] = rod_col[j];
672                 rod_col[j] = temp_col;
673         }
674
675         /* Foods (Mushrooms) */
676         for (i = 0; i < MAX_SHROOM; i++)
677         {
678                 j = randint0(MAX_SHROOM);
679                 temp_adj = food_adj[i];
680                 food_adj[i] = food_adj[j];
681                 food_adj[j] = temp_adj;
682
683                 temp_col = food_col[i];
684                 food_col[i] = food_col[j];
685                 food_col[j] = temp_col;
686         }
687
688         /* Potions */
689         for (i = 4; i < MAX_COLORS; i++)
690         {
691                 j = randint0(MAX_COLORS - 4) + 4;
692                 temp_adj = potion_adj[i];
693                 potion_adj[i] = potion_adj[j];
694                 potion_adj[j] = temp_adj;
695
696                 temp_col = potion_col[i];
697                 potion_col[i] = potion_col[j];
698                 potion_col[j] = temp_col;
699         }
700
701         /* Scrolls (random titles, always white) */
702         for (i = 0; i < MAX_TITLES; i++)
703         {
704                 /* Get a new title */
705                 while (TRUE)
706                 {
707                         char buf[80];
708
709                         bool okay;
710
711                         /* Start a new title */
712                         buf[0] = '\0';
713
714                         /* Collect words until done */
715                         while (1)
716                         {
717                                 int q, s;
718
719                                 char tmp[80];
720
721                                 /* Start a new word */
722                                 tmp[0] = '\0';
723
724                                 /* Choose one or two syllables */
725                                 s = ((randint0(100) < 30) ? 1 : 2);
726
727                                 /* Add a one or two syllable word */
728                                 for (q = 0; q < s; q++)
729                                 {
730                                         /* Add the syllable */
731                                         strcat(tmp, syllables[randint0(MAX_SYLLABLES)]);
732                                 }
733
734                                 /* Stop before getting too long */
735                                 if (strlen(buf) + 1 + strlen(tmp) > 15) break;
736
737                                 /* Add a space */
738                                 strcat(buf, " ");
739
740                                 /* Add the word */
741                                 strcat(buf, tmp);
742                         }
743
744                         /* Save the title */
745                         strcpy(scroll_adj[i], buf+1);
746
747                         /* Assume okay */
748                         okay = TRUE;
749
750                         /* Check for "duplicate" scroll titles */
751                         for (j = 0; j < i; j++)
752                         {
753                                 cptr hack1 = scroll_adj[j];
754                                 cptr hack2 = scroll_adj[i];
755
756                                 /* Compare first four characters */
757                                 if (*hack1++ != *hack2++) continue;
758                                 if (*hack1++ != *hack2++) continue;
759                                 if (*hack1++ != *hack2++) continue;
760                                 if (*hack1++ != *hack2++) continue;
761
762                                 /* Not okay */
763                                 okay = FALSE;
764
765                                 /* Stop looking */
766                                 break;
767                         }
768
769                         /* Break when done */
770                         if (okay) break;
771                 }
772
773                 /* All scrolls are white */
774                 scroll_col[i] = TERM_WHITE;
775         }
776
777
778         /* Hack -- Use the "complex" RNG */
779         Rand_quick = FALSE;
780
781         /* Analyze every object */
782         for (i = 1; i < max_k_idx; i++)
783         {
784                 object_kind *k_ptr = &k_info[i];
785
786                 /* Skip "empty" objects */
787                 if (!k_ptr->name) continue;
788
789                 /* Extract "flavor" (if any) */
790                 k_ptr->flavor = object_flavor(i);
791
792                 /* No flavor yields aware */
793                 if (!k_ptr->flavor) k_ptr->aware = TRUE;
794
795                 /* Check for "easily known" */
796                 k_ptr->easy_know = object_easy_know(i);
797         }
798 }
799
800
801 /*
802  * Print a char "c" into a string "t", as if by sprintf(t, "%c", c),
803  * and return a pointer to the terminator (t + 1).
804  */
805 static char *object_desc_chr(char *t, char c)
806 {
807         /* Copy the char */
808         *t++ = c;
809
810         /* Terminate */
811         *t = '\0';
812
813         /* Result */
814         return (t);
815 }
816
817
818 /*
819  * Print a string "s" into a string "t", as if by strcpy(t, s),
820  * and return a pointer to the terminator.
821  */
822 static char *object_desc_str(char *t, cptr s)
823 {
824         /* Copy the string */
825         while (*s) *t++ = *s++;
826
827         /* Terminate */
828         *t = '\0';
829
830         /* Result */
831         return (t);
832 }
833
834
835
836 /*
837  * Print an unsigned number "n" into a string "t", as if by
838  * sprintf(t, "%u", n), and return a pointer to the terminator.
839  */
840 static char *object_desc_num(char *t, uint n)
841 {
842         uint p;
843
844         /* Find "size" of "n" */
845         for (p = 1; n >= p * 10; p = p * 10) /* loop */;
846
847         /* Dump each digit */
848         while (p >= 1)
849         {
850                 /* Dump the digit */
851                 *t++ = '0' + n / p;
852
853                 /* Remove the digit */
854                 n = n % p;
855
856                 /* Process next digit */
857                 p = p / 10;
858         }
859
860         /* Terminate */
861         *t = '\0';
862
863         /* Result */
864         return (t);
865 }
866
867
868
869
870 #ifdef JP
871 /*
872  * ÆüËܸì¤Î¸Ä¿ôɽ¼¨¥ë¡¼¥Á¥ó
873  *¡Êcmd1.c ¤ÇήÍѤ¹¤ë¤¿¤á¤Ë object_desc_japanese ¤«¤é°ÜÆ°¤·¤¿¡£¡Ë
874  */
875
876 char *object_desc_kosuu(char *t, object_type *o_ptr)
877 {
878     t = object_desc_num(t, o_ptr->number);
879
880     switch (o_ptr->tval)
881     {
882       case TV_BOLT:
883       case TV_ARROW:
884       case TV_POLEARM:
885       case TV_STAFF:
886       case TV_WAND:
887       case TV_ROD:
888       case TV_DIGGING:
889       {
890           t = object_desc_str(t, "ËÜ");
891           break;
892       }
893       case TV_SCROLL:
894       {
895           t = object_desc_str(t, "´¬");
896           break;
897       }
898       case TV_POTION:
899       {
900           t = object_desc_str(t, "Éþ");
901           break;
902       }
903       case  TV_LIFE_BOOK:
904       case  TV_SORCERY_BOOK:
905       case  TV_NATURE_BOOK:
906       case  TV_CHAOS_BOOK:
907       case  TV_DEATH_BOOK:
908       case  TV_TRUMP_BOOK:
909       case  TV_ARCANE_BOOK:
910       case  TV_ENCHANT_BOOK:
911       case  TV_DAEMON_BOOK:
912       case  TV_CRUSADE_BOOK:
913       case  TV_MUSIC_BOOK:
914       case  TV_HISSATSU_BOOK:
915       {
916           t = object_desc_str(t, "ºý");
917           break;
918       }
919       case TV_SOFT_ARMOR:
920       case TV_HARD_ARMOR:
921       case TV_DRAG_ARMOR:
922       case TV_CLOAK:
923       {
924           t = object_desc_str(t, "Ãå");
925           break;
926       }
927       case TV_SWORD:
928       case TV_HAFTED:
929       case TV_BOW:
930       {
931           t = object_desc_str(t, "¿¶");
932           break;
933       }
934       case TV_BOOTS:
935       {
936           t = object_desc_str(t, "­");
937           break;
938       }
939       case TV_CARD:
940       {
941           t = object_desc_str(t, "Ëç");
942           break;
943       }
944             /* ¿©¤Ù¤â¤Î by ita */
945       case TV_FOOD:
946       {
947           if(o_ptr->sval == SV_FOOD_JERKY)
948           {
949               t = object_desc_str(t, "ÀÚ¤ì");
950               break;
951           }
952       }
953       default:
954       {
955           if (o_ptr->number < 10)
956           {
957               t = object_desc_str(t, "¤Ä");
958           }
959           else
960           {
961               t = object_desc_str(t, "¸Ä");
962           }
963           break;
964       }
965   }
966   return (t);                  
967 }
968 #endif
969
970 /*
971  * Print an signed number "v" into a string "t", as if by
972  * sprintf(t, "%+d", n), and return a pointer to the terminator.
973  * Note that we always print a sign, either "+" or "-".
974  */
975 static char *object_desc_int(char *t, sint v)
976 {
977         uint p, n;
978
979         /* Negative */
980         if (v < 0)
981         {
982                 /* Take the absolute value */
983                 n = 0 - v;
984
985                 /* Use a "minus" sign */
986                 *t++ = '-';
987         }
988
989         /* Positive (or zero) */
990         else
991         {
992                 /* Use the actual number */
993                 n = v;
994
995                 /* Use a "plus" sign */
996                 *t++ = '+';
997         }
998
999         /* Find "size" of "n" */
1000         for (p = 1; n >= p * 10; p = p * 10) /* loop */;
1001
1002         /* Dump each digit */
1003         while (p >= 1)
1004         {
1005                 /* Dump the digit */
1006                 *t++ = '0' + n / p;
1007
1008                 /* Remove the digit */
1009                 n = n % p;
1010
1011                 /* Process next digit */
1012                 p = p / 10;
1013         }
1014
1015         /* Terminate */
1016         *t = '\0';
1017
1018         /* Result */
1019         return (t);
1020 }
1021
1022
1023 /*
1024  * Creates a description of the item "o_ptr", and stores it in "out_val".
1025  *
1026  * One can choose the "verbosity" of the description, including whether
1027  * or not the "number" of items should be described, and how much detail
1028  * should be used when describing the item.
1029  *
1030  * The given "buf" must be MAX_NLEN chars long to hold the longest possible
1031  * description, which can get pretty long, including incriptions, such as:
1032  * "no more Maces of Disruption (Defender) (+10,+10) [+5] (+3 to stealth)".
1033  * Note that the inscription will be clipped to keep the total description
1034  * under MAX_NLEN-1 chars (plus a terminator).
1035  *
1036  * Note the use of "object_desc_num()" and "object_desc_int()" as hyper-efficient,
1037  * portable, versions of some common "sprintf()" commands.
1038  *
1039  * Note that all ego-items (when known) append an "Ego-Item Name", unless
1040  * the item is also an artifact, which should NEVER happen.
1041  *
1042  * Note that all artifacts (when known) append an "Artifact Name", so we
1043  * have special processing for "Specials" (artifact Lites, Rings, Amulets).
1044  * The "Specials" never use "modifiers" if they are "known", since they
1045  * have special "descriptions", such as "The Necklace of the Dwarves".
1046  *
1047  * Special Lite's use the "k_info" base-name (Phial, Star, or Arkenstone),
1048  * plus the artifact name, just like any other artifact, if known.
1049  *
1050  * Special Ring's and Amulet's, if not "aware", use the same code as normal
1051  * rings and amulets, and if "aware", use the "k_info" base-name (Ring or
1052  * Amulet or Necklace).  They will NEVER "append" the "k_info" name.  But,
1053  * they will append the artifact name, just like any artifact, if known.
1054  *
1055  * Hack -- Display "The One Ring" as "a Plain Gold Ring" until aware.
1056  *
1057  * If "pref" then a "numeric" prefix will be pre-pended.
1058  *
1059  * Mode:
1060  *   0 -- The Cloak of Death
1061  *   1 -- The Cloak of Death [1,+3]
1062  *   2 -- The Cloak of Death [1,+3] (+2 to Stealth)
1063  *   3 -- The Cloak of Death [1,+3] (+2 to Stealth) {nifty}
1064  */
1065 void object_desc(char *buf, object_type *o_ptr, int pref, int mode)
1066 {
1067         cptr            basenm, modstr;
1068         int             power, indexx, i;
1069
1070         bool            aware = FALSE;
1071         bool            known = FALSE;
1072
1073         bool            append_name = FALSE;
1074
1075         bool            show_weapon = FALSE;
1076         bool            show_armour = FALSE;
1077
1078         cptr            s, u;
1079         char            *t;
1080
1081         char            p1 = '(', p2 = ')';
1082         char            b1 = '[', b2 = ']';
1083         char            c1 = '{', c2 = '}';
1084
1085         char            tmp_val[MAX_NLEN+160];
1086         char            tmp_val2[MAX_NLEN+10];
1087
1088         u32b flgs[TR_FLAG_SIZE];
1089
1090         object_type     *bow_ptr;
1091
1092
1093         object_kind *k_ptr = &k_info[o_ptr->k_idx];
1094
1095         monster_race *r_ptr = &r_info[o_ptr->pval];
1096
1097         /* Extract some flags */
1098         object_flags(o_ptr, flgs);
1099
1100         /* See if the object is "aware" */
1101         if (object_aware_p(o_ptr) || (o_ptr->ident & IDENT_MENTAL)) aware = TRUE;
1102
1103         /* See if the object is "known" */
1104         if (object_known_p(o_ptr)) known = TRUE;
1105
1106         /* Hack -- Extract the sub-type "indexx" */
1107         indexx = o_ptr->sval;
1108
1109         /* Extract default "base" string */
1110         basenm = get_object_name(o_ptr);
1111
1112         /* Assume no "modifier" string */
1113         modstr = "";
1114
1115
1116         /* Analyze the object */
1117         switch (o_ptr->tval)
1118         {
1119                 /* Some objects are easy to describe */
1120                 case TV_SKELETON:
1121                 case TV_BOTTLE:
1122                 case TV_JUNK:
1123                 case TV_SPIKE:
1124                 case TV_FLASK:
1125                 case TV_CHEST:
1126                 case TV_WHISTLE:
1127                 {
1128                         break;
1129                 }
1130
1131                 case TV_CAPTURE:
1132                 {
1133                         if (known)
1134                         {
1135                                 if (!o_ptr->pval)
1136                                 {
1137 #ifdef JP
1138                                         modstr = "¡Ê¶õ¡Ë";
1139 #else
1140                                         modstr = " (empty)";
1141 #endif
1142                                 }
1143                                 else
1144                                 {
1145 #ifdef JP
1146                                         sprintf(tmp_val2, "¡Ê%s¡Ë",r_name + r_ptr->name);
1147                                         modstr = tmp_val2;
1148 #else
1149                                         cptr t = r_name + r_ptr->name;
1150
1151                                         if (!(r_ptr->flags1 & RF1_UNIQUE))
1152                                         {
1153                                                 sprintf(tmp_val2, " (%s%s)", (is_a_vowel(*t) ? "an " : "a "), t);
1154
1155                                                 modstr = tmp_val2;
1156                                         }
1157                                         else
1158                                         {
1159                                                 sprintf(tmp_val2, "(%s)", t);
1160
1161                                                 modstr = t;
1162                                         }
1163 #endif
1164                                 }
1165                         }
1166                         break;
1167                 }
1168
1169                 /* Figurines/Statues */
1170                 case TV_FIGURINE:
1171                 case TV_STATUE:
1172                 {
1173 #ifdef JP
1174                         modstr = r_name + r_ptr->name;
1175 #else
1176                         cptr t = r_name + r_ptr->name;
1177
1178                         if (!(r_ptr->flags1 & RF1_UNIQUE))
1179                         {
1180                                 sprintf(tmp_val2, "%s%s", (is_a_vowel(*t) ? "an " : "a "), t);
1181
1182                                 modstr = tmp_val2;
1183                         }
1184                         else
1185                         {
1186                                 modstr = t;
1187                         }
1188 #endif
1189
1190
1191                         break;
1192                 }
1193
1194                 /* Corpses */
1195                 case TV_CORPSE:
1196                 {
1197                         modstr = r_name + r_ptr->name;
1198
1199
1200 #ifdef JP
1201                         sprintf(tmp_val2, "& #%s", basenm + 2);
1202 #else
1203                         if (r_ptr->flags1 & RF1_UNIQUE)
1204                         {
1205                                 sprintf(tmp_val2, "%s %s", basenm, "of #");
1206                         }
1207                         else
1208                         {
1209                                 sprintf(tmp_val2, "& # %s", basenm + 2);
1210                         }
1211 #endif
1212
1213
1214                         basenm = tmp_val2;
1215                         break;
1216                 }
1217
1218                 /* Missiles/ Bows/ Weapons */
1219                 case TV_SHOT:
1220                 case TV_BOLT:
1221                 case TV_ARROW:
1222                 case TV_BOW:
1223                 case TV_HAFTED:
1224                 case TV_POLEARM:
1225                 case TV_SWORD:
1226                 case TV_DIGGING:
1227                 {
1228                         show_weapon = TRUE;
1229                         break;
1230                 }
1231
1232
1233                 /* Armour */
1234                 case TV_BOOTS:
1235                 case TV_GLOVES:
1236                 case TV_CLOAK:
1237                 case TV_CROWN:
1238                 case TV_HELM:
1239                 case TV_SHIELD:
1240                 case TV_SOFT_ARMOR:
1241                 case TV_HARD_ARMOR:
1242                 case TV_DRAG_ARMOR:
1243                 {
1244                         show_armour = TRUE;
1245                         break;
1246                 }
1247
1248
1249                 /* Lites (including a few "Specials") */
1250                 case TV_LITE:
1251                 {
1252                         break;
1253                 }
1254
1255                 /* Amulets (including a few "Specials") */
1256                 case TV_AMULET:
1257                 {
1258                         /* Known artifacts */
1259                         if (artifact_p(o_ptr) && aware) break;
1260
1261                         if ((k_ptr->gen_flags & TRG_INSTA_ART) && aware) break;
1262
1263                         /* Color the object */
1264                         modstr = amulet_adj[indexx];
1265
1266                         if (aware) append_name = TRUE;
1267
1268                         if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1269 #ifdef JP
1270                                 basenm = aware ? "& %¤Î¥¢¥ß¥å¥ì¥Ã¥È" : "& ¥¢¥ß¥å¥ì¥Ã¥È";
1271                         else
1272                                 basenm = aware ? "& #%¤Î¥¢¥ß¥å¥ì¥Ã¥È" : "& #¥¢¥ß¥å¥ì¥Ã¥È";
1273 #else
1274                                 basenm = "& Amulet~";
1275                         else
1276                                 basenm = aware ? "& # Amulet~" : "& # Amulet~";
1277 #endif
1278
1279                         break;
1280                 }
1281
1282                 /* Rings (including a few "Specials") */
1283                 case TV_RING:
1284                 {
1285                         /* Known artifacts */
1286                         if (artifact_p(o_ptr) && aware) break;
1287
1288                         if ((k_ptr->gen_flags & TRG_INSTA_ART) && aware) break;
1289
1290                         /* Color the object */
1291                         modstr = ring_adj[indexx];
1292
1293                         if (aware) append_name = TRUE;
1294
1295                         if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1296 #ifdef JP
1297                                 basenm = aware ? "& %¤Î»ØÎØ" : "& »ØÎØ";
1298                         else
1299                                 basenm = aware ? "& #%¤Î»ØÎØ" : "& #»ØÎØ";
1300 #else
1301                                 basenm = "& Ring~";
1302                         else
1303                                 basenm = aware ? "& # Ring~" : "& # Ring~";
1304 #endif
1305
1306                         if (!k_ptr->to_h && !k_ptr->to_d && (o_ptr->to_h || o_ptr->to_d)) show_weapon = TRUE;
1307
1308                         break;
1309                 }
1310
1311                 case TV_CARD:
1312                 {
1313                         break;
1314                 }
1315
1316                 case TV_STAFF:
1317                 {
1318                         /* Color the object */
1319                         modstr = staff_adj[indexx];
1320
1321                         if (aware) append_name = TRUE;
1322                         if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1323 #ifdef JP
1324                                 basenm = aware ? "& %¤Î¾ó" : "& ¾ó";
1325                         else
1326                                 basenm = aware ? "& #%¤Î¾ó" : "& #¾ó";
1327 #else
1328                                 basenm = "& Staff~";
1329                         else
1330                                 basenm = aware ? "& # Staff~" : "& # Staff~";
1331 #endif
1332
1333                         break;
1334                 }
1335
1336                 case TV_WAND:
1337                 {
1338                         /* Color the object */
1339                         modstr = wand_adj[indexx];
1340
1341                         if (aware) append_name = TRUE;
1342                         if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1343 #ifdef JP
1344                                 basenm = aware? "& %¤ÎËâË¡ËÀ":"& ËâË¡ËÀ";
1345                         else
1346                                 basenm = aware ? "& #%¤ÎËâË¡ËÀ" : "& #ËâË¡ËÀ";
1347 #else
1348                                 basenm = "& Wand~";
1349                         else
1350                                 basenm = aware ? "& # Wand~" : "& # Wand~";
1351 #endif
1352
1353                         break;
1354                 }
1355
1356                 case TV_ROD:
1357                 {
1358                         /* Color the object */
1359                         modstr = rod_adj[indexx];
1360
1361                         if (aware) append_name = TRUE;
1362                         if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1363 #ifdef JP
1364                                 basenm = aware? "& %¤Î¥í¥Ã¥É":"& ¥í¥Ã¥É";
1365                         else
1366                                 basenm = aware ? "& #%¤Î¥í¥Ã¥É" : "& #¥í¥Ã¥É";
1367 #else
1368                                 basenm = "& Rod~";
1369                         else
1370                                 basenm = aware ? "& # Rod~" : "& # Rod~";
1371 #endif
1372
1373                         break;
1374                 }
1375
1376                 case TV_SCROLL:
1377                 {
1378                         /* Color the object */
1379                         modstr = scroll_adj[indexx];
1380                         if (aware) append_name = TRUE;
1381                         if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1382 #ifdef JP
1383                                 basenm = aware ? "& %¤Î´¬Êª" : "& ´¬Êª";
1384                         else
1385                                 basenm = aware ? "& ¡Ö#¡×¤È½ñ¤«¤ì¤¿%¤Î´¬Êª" : "& ¡Ö#¡×¤È½ñ¤«¤ì¤¿´¬Êª";
1386 #else
1387                                 basenm = "& Scroll~";
1388                         else
1389                                 basenm = aware ? "& Scroll~ titled \"#\"" : "& Scroll~ titled \"#\"";
1390 #endif
1391
1392                         break;
1393                 }
1394
1395                 case TV_POTION:
1396                 {
1397                         /* Color the object */
1398                         modstr = potion_adj[indexx];
1399
1400                         if (aware) append_name = TRUE;
1401                         if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1402 #ifdef JP
1403                                 basenm = aware ? "& %¤ÎÌô" : "& Ìô";
1404                         else
1405                                 basenm = aware ? "& #%¤ÎÌô" : "& #Ìô";
1406 #else
1407                                 basenm = "& Potion~";
1408                         else
1409                                 basenm = aware ? "& # Potion~" : "& # Potion~";
1410 #endif
1411
1412                         break;
1413                 }
1414
1415                 case TV_FOOD:
1416                 {
1417                         /* Ordinary food is "boring" */
1418                         if (o_ptr->sval >= SV_FOOD_MIN_FOOD) break;
1419
1420                         /* Color the object */
1421                         modstr = food_adj[indexx];
1422
1423                         if (aware) append_name = TRUE;
1424                         if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1425 #ifdef JP
1426                                 basenm = aware ? "& %¤Î¥­¥Î¥³" : "& ¥­¥Î¥³";
1427                         else
1428                                 basenm = aware ? "& #%¤Î¥­¥Î¥³" : "& #¥­¥Î¥³";
1429 #else
1430                                 basenm = "& Mushroom~";
1431                         else
1432                                 basenm = aware ? "& # Mushroom~" : "& # Mushroom~";
1433 #endif
1434
1435                         break;
1436                 }
1437
1438                 case TV_PARCHEMENT:
1439                 {
1440                         modstr = basenm;
1441 #ifdef JP
1442                         basenm = "& ÍÓÈé»æ - #";
1443 #else
1444                         basenm = "& Parchement~ - #";
1445 #endif
1446                         break;
1447                 }
1448
1449                 /* Magic Books */
1450                 case TV_LIFE_BOOK:
1451                 {
1452                         modstr = basenm;
1453 #ifdef JP
1454                                 basenm = "& À¸Ì¿¤ÎËâË¡½ñ#";
1455 #else
1456                         if (mp_ptr->spell_book == TV_LIFE_BOOK)
1457                                 basenm = "& Book~ of Life Magic #";
1458                         else
1459                                 basenm = "& Life Spellbook~ #";
1460 #endif
1461
1462                         break;
1463                 }
1464
1465                 case TV_SORCERY_BOOK:
1466                 {
1467                         modstr = basenm;
1468 #ifdef JP
1469                                 basenm = "& Àç½Ñ¤ÎËâË¡½ñ#";
1470 #else
1471                         if (mp_ptr->spell_book == TV_LIFE_BOOK)
1472                                 basenm = "& Book~ of Sorcery #";
1473                         else
1474                                 basenm = "& Sorcery Spellbook~ #";
1475 #endif
1476
1477                         break;
1478                 }
1479
1480                 case TV_NATURE_BOOK:
1481                 {
1482                         modstr = basenm;
1483 #ifdef JP
1484                                 basenm = "& ¼«Á³¤ÎËâË¡½ñ#";
1485 #else
1486                         if (mp_ptr->spell_book == TV_LIFE_BOOK)
1487                                 basenm = "& Book~ of Nature Magic #";
1488                         else
1489                                 basenm = "& Nature Spellbook~ #";
1490 #endif
1491
1492                         break;
1493                 }
1494
1495                 case TV_CHAOS_BOOK:
1496                 {
1497                         modstr = basenm;
1498 #ifdef JP
1499                                 basenm = "& ¥«¥ª¥¹¤ÎËâË¡½ñ#";
1500 #else
1501                         if (mp_ptr->spell_book == TV_LIFE_BOOK)
1502                                 basenm = "& Book~ of Chaos Magic #";
1503                         else
1504                                 basenm = "& Chaos Spellbook~ #";
1505 #endif
1506
1507                         break;
1508                 }
1509
1510                 case TV_DEATH_BOOK:
1511                 {
1512                         modstr = basenm;
1513 #ifdef JP
1514                                 basenm = "& °Å¹õ¤ÎËâË¡½ñ#";
1515 #else
1516                         if (mp_ptr->spell_book == TV_LIFE_BOOK)
1517                                 basenm = "& Book~ of Death Magic #";
1518                         else
1519                                 basenm = "& Death Spellbook~ #";
1520 #endif
1521
1522                         break;
1523                 }
1524
1525                 case TV_TRUMP_BOOK:
1526                 {
1527                         modstr = basenm;
1528 #ifdef JP
1529                                 basenm = "& ¥È¥é¥ó¥×¤ÎËâË¡½ñ#";
1530 #else
1531                         if (mp_ptr->spell_book == TV_LIFE_BOOK)
1532                                 basenm = "& Book~ of Trump Magic #";
1533                         else
1534                                 basenm = "& Trump Spellbook~ #";
1535 #endif
1536
1537                         break;
1538                 }
1539
1540                 case TV_ARCANE_BOOK:
1541                 {
1542                         modstr = basenm;
1543 #ifdef JP
1544                                 basenm = "& Èë½Ñ¤ÎËâË¡½ñ#";
1545 #else
1546                         if (mp_ptr->spell_book == TV_LIFE_BOOK)
1547                                 basenm = "& Book~ of Arcane Magic #";
1548                         else
1549                                 basenm = "& Arcane Spellbook~ #";
1550 #endif
1551
1552                         break;
1553                 }
1554                 case TV_ENCHANT_BOOK:
1555                 {
1556                         modstr = basenm;
1557 #ifdef JP
1558                                 basenm = "& ¾¢¤ÎËâË¡½ñ#";
1559 #else
1560                         if (mp_ptr->spell_book == TV_LIFE_BOOK)
1561                                 basenm = "& Book~ of Craft Magic #";
1562                         else
1563                                 basenm = "& Craft Spellbook~ #";
1564 #endif
1565
1566                         break;
1567                 }
1568                 case TV_DAEMON_BOOK:
1569                 {
1570                         modstr = basenm;
1571 #ifdef JP
1572                                 basenm = "& °­Ëâ¤ÎËâË¡½ñ#";
1573 #else
1574                         if (mp_ptr->spell_book == TV_LIFE_BOOK)
1575                                 basenm = "& Book~ of Daemon Magic #";
1576                         else
1577                                 basenm = "& Daemon Spellbook~ #";
1578 #endif
1579
1580                         break;
1581                 }
1582                 case TV_CRUSADE_BOOK:
1583                 {
1584                         modstr = basenm;
1585 #ifdef JP
1586                                 basenm = "& Ç˼٤ÎËâË¡½ñ#";
1587 #else
1588                         if (mp_ptr->spell_book == TV_LIFE_BOOK)
1589                                 basenm = "& Book~ of Crusade Magic #";
1590                         else
1591                                 basenm = "& Crusade Spellbook~ #";
1592 #endif
1593
1594                         break;
1595                 }
1596                 case TV_MUSIC_BOOK:
1597                 {
1598                         modstr = basenm;
1599 #ifdef JP
1600                                 basenm = "& ²Î½¸#";
1601 #else
1602                                 basenm = "& Song Book~ #";
1603 #endif
1604
1605                         break;
1606                 }
1607                 case TV_HISSATSU_BOOK:
1608                 {
1609                         modstr = basenm;
1610 #ifdef JP
1611                                 basenm = "& Éð·Ý¤Î½ñ#";
1612 #else
1613                                 basenm = "& Book~ of Kendo #";
1614 #endif
1615
1616                         break;
1617                 }
1618
1619
1620
1621                 /* Hack -- Gold/Gems */
1622                 case TV_GOLD:
1623                 {
1624                         strcpy(buf, basenm);
1625                         return;
1626                 }
1627
1628                 /* Used in the "inventory" routine */
1629                 default:
1630                 {
1631 #ifdef JP
1632                         strcpy(buf, "(¤Ê¤·)");
1633 #else
1634                         strcpy(buf, "(nothing)");
1635 #endif
1636
1637                         return;
1638                 }
1639         }
1640
1641         /* Use full name from k_info or a_info */
1642         if (aware && have_flag(flgs, TR_FULL_NAME))
1643         {
1644                 if (known && o_ptr->name1) basenm = a_name + a_info[o_ptr->name1].name;
1645                 else basenm = get_object_name(o_ptr);
1646         }
1647
1648         /* Start dumping the result */
1649         t = tmp_val;
1650
1651 #ifdef JP
1652         if (basenm[0] == '&')
1653                 s = basenm + 2;
1654         else
1655                 s = basenm;
1656
1657         /* No prefix */
1658         if (!pref)
1659         {
1660                 /* Nothing */
1661         }
1662         else if (o_ptr->number > 1)
1663         {
1664                 if ( change_numeral == FALSE ){
1665                         t = object_desc_num(t, o_ptr->number);
1666                         if (o_ptr->number > 9)
1667                                 t = object_desc_str(t, "¸Ä¤Î ");
1668                         else
1669                                 t = object_desc_str(t, "¤Ä¤Î ");
1670                 }
1671                 else
1672                 {
1673                         t = object_desc_kosuu(t,o_ptr);
1674                         t = object_desc_str(t, "¤Î ");
1675                 }
1676         }
1677
1678         /* ±Ñ¸ì¤Î¾ì¹ç¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ï The ¤¬ÉÕ¤¯¤Î¤Çʬ¤«¤ë¤¬
1679          * ÆüËܸì¤Ç¤Ïʬ¤«¤é¤Ê¤¤¤Î¤Ç¥Þ¡¼¥¯¤ò¤Ä¤±¤ë 
1680          */
1681         if (known && artifact_p(o_ptr)) t = object_desc_str(t, "¡ú");
1682         else if (known && o_ptr->art_name) t = object_desc_str(t, "¡ù");
1683
1684 #else
1685
1686         /* The object "expects" a "number" */
1687         if (basenm[0] == '&')
1688         {
1689                 /* Skip the ampersand (and space) */
1690                 s = basenm + 2;
1691
1692                 /* No prefix */
1693                 if (!pref)
1694                 {
1695                         /* Nothing */
1696                 }
1697
1698                 /* Hack -- None left */
1699                 else if (o_ptr->number <= 0)
1700                 {
1701                         t = object_desc_str(t, "no more ");
1702                 }
1703
1704                 /* Extract the number */
1705                 else if (o_ptr->number > 1)
1706                 {
1707                         t = object_desc_num(t, o_ptr->number);
1708                         t = object_desc_chr(t, ' ');
1709                 }
1710
1711                 /* Hack -- The only one of its kind */
1712                 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
1713                 {
1714                         t = object_desc_str(t, "The ");
1715                 }
1716
1717                 /* Unique corpses are unique */
1718                 else if ((o_ptr->tval == TV_CORPSE) && (r_ptr->flags1 & RF1_UNIQUE))
1719                 {
1720                         t = object_desc_str(t, "The ");
1721                 }
1722
1723                 /* A single one, with a vowel in the modifier */
1724                 else if ((*s == '#') && (is_a_vowel(modstr[0])))
1725                 {
1726                         t = object_desc_str(t, "an ");
1727                 }
1728
1729                 /* A single one, with a vowel */
1730                 else if (is_a_vowel(*s))
1731                 {
1732                         t = object_desc_str(t, "an ");
1733                 }
1734
1735                 /* A single one, without a vowel */
1736                 else
1737                 {
1738                         t = object_desc_str(t, "a ");
1739                 }
1740         }
1741
1742         /* Hack -- objects that "never" take an article */
1743         else
1744         {
1745                 /* No ampersand */
1746                 s = basenm;
1747
1748                 /* No pref */
1749                 if (!pref)
1750                 {
1751                         /* Nothing */
1752                 }
1753
1754                 /* Hack -- all gone */
1755                 else if (o_ptr->number <= 0)
1756                 {
1757                         t = object_desc_str(t, "no more ");
1758                 }
1759
1760                 /* Prefix a number if required */
1761                 else if (o_ptr->number > 1)
1762                 {
1763                         t = object_desc_num(t, o_ptr->number);
1764                         t = object_desc_chr(t, ' ');
1765                 }
1766
1767                 /* Hack -- The only one of its kind */
1768                 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
1769                 {
1770                         t = object_desc_str(t, "The ");
1771                 }
1772
1773                 /* Hack -- single items get no prefix */
1774                 else
1775                 {
1776                         /* Nothing */
1777                 }
1778         }
1779 #endif
1780
1781         /* Paranoia -- skip illegal tildes */
1782         /* while (*s == '~') s++; */
1783
1784 #ifdef JP
1785         if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
1786         {
1787                 t = object_desc_str(t,format("ÃÃÌê»Õ%s¤Î",player_name));
1788         }
1789
1790         /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¡¢Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à¤Î̾Á°¤òÉղ乤ë */
1791         if (known) {
1792                 /* ¥é¥ó¥À¥à¡¦¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È */
1793                 if (o_ptr->art_name)
1794                 {       char temp[256];
1795                         strcpy(temp, quark_str(o_ptr->art_name));
1796                         /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
1797                         /* ±Ñ¸ìÈǤΥ»¡¼¥Ö¥Õ¥¡¥¤¥ë¤«¤éÍ褿 'of XXX' ¤Ï,¡ÖXXX¤Î¡×¤Èɽ¼¨¤¹¤ë */
1798                         if ( strncmp( temp , "of ",3)==0 ) {t=object_desc_str(t,&temp[3]);t=object_desc_str(t,"¤Î");}
1799                         else 
1800                         if ( strncmp( temp , "¡Ø" , 2 ) != 0 && temp[0]!='\'')
1801                                 t=object_desc_str(t,  temp);
1802                 }
1803                 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à */
1804                 else if (o_ptr->name1 && !have_flag(flgs, TR_FULL_NAME)) {
1805                         artifact_type *a_ptr = &a_info[o_ptr->name1];
1806                         /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
1807                         if ( strncmp( (a_name + a_ptr->name), "¡Ø" , 2) != 0){
1808                                 t=object_desc_str(t, (a_name + a_ptr->name));
1809                         }
1810                 }
1811                 /* Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à */
1812                 else if (o_ptr->name2) {
1813                         ego_item_type *e_ptr = &e_info[o_ptr->name2];
1814                         t=object_desc_str(t, (e_name + e_ptr->name));
1815                 }
1816         }
1817 #endif
1818         /* Copy the string */
1819         for (; *s; s++)
1820         {
1821                 /* Pluralizer */
1822 #ifdef JP
1823                 if (*s == '#')
1824 #else
1825                 if (*s == '~')
1826                 {
1827                         /* Add a plural if needed */
1828                         if (pref && o_ptr->number != 1)
1829                         {
1830                                 char k = t[-1];
1831
1832                                 /* XXX XXX XXX Mega-Hack */
1833
1834                                 /* Hack -- "Cutlass-es" and "Torch-es" */
1835                                 if ((k == 's') || (k == 'h')) *t++ = 'e';
1836
1837                                 /* Add an 's' */
1838                                 *t++ = 's';
1839                         }
1840                 }
1841
1842                 /* Modifier */
1843                 else if (*s == '#')
1844 #endif
1845
1846                 {
1847                         /* Insert the modifier */
1848                         for (u = modstr; *u; u++) *t++ = *u;
1849                 }
1850
1851 #ifdef JP
1852                 else if (*s == '%')
1853                   /* saigo ¤ÎÂå¤ï¤ê¡£¸úǽ¤òÉÕ²½¤¹¤ë by ita*/
1854                 {
1855                   modstr=get_object_name(o_ptr);
1856                   for (u = modstr; *u; u++) *t++ = *u;
1857                 }
1858 #endif
1859                 /* Normal */
1860                 else
1861                 {
1862                         /* Copy */
1863                         *t++ = *s;
1864                 }
1865         }
1866
1867         /* Terminate */
1868         *t = '\0';
1869
1870
1871         /* Append the "kind name" to the "base name" */
1872 #ifndef JP
1873         if (append_name)
1874         {
1875                 t = object_desc_str(t, " of ");
1876                 t = object_desc_str(t, get_object_name(o_ptr));
1877         }
1878 #endif
1879
1880
1881 #ifdef JP
1882         /* '¡Ø'¤«¤é»Ï¤Þ¤ëÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ¸å¤ËÉղ乤ë */
1883         if (known) {
1884                 /* ¥é¥ó¥À¥à¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Î̾Á°¤Ï¥»¡¼¥Ö¥Õ¥¡¥¤¥ë¤Ëµ­Ï¿
1885                    ¤µ¤ì¤ë¤Î¤Ç¡¢±Ñ¸ìÈǤÎ̾Á°¤â¤½¤ì¤é¤·¤¯ÊÑ´¹¤¹¤ë */
1886                 if (o_ptr->art_name)
1887                 {       char temp[256];int itemp;
1888                         strcpy(temp, quark_str(o_ptr->art_name));
1889                         /* MEGA HACK by ita*/
1890                                 if ( strncmp( temp , "¡Ø" , 2 ) == 0 ) t=object_desc_str(t,  temp);else
1891                          if( temp[0]=='\'' ) { itemp=strlen(temp);temp[itemp-1]=0; 
1892                          t=object_desc_str(t,"¡Ø");
1893                          t=object_desc_str(t,&temp[1]);
1894                          t=object_desc_str(t,"¡Ù");}
1895                                 
1896                 }
1897                 else if (o_ptr->name1) {
1898                                 artifact_type *a_ptr = &a_info[o_ptr->name1];
1899                                 if ( strncmp( (a_name + a_ptr->name) , "¡Ø" , 2 ) == 0 ){
1900                                         t=object_desc_str(t, (a_name + a_ptr->name));
1901                                 }
1902                 }
1903                 else if (o_ptr->inscription)
1904                 {
1905                         cptr str = quark_str(o_ptr->inscription);
1906
1907                         while(*str)
1908                         {
1909                                 if (iskanji(*str))
1910                                 {
1911                                         str += 2;
1912                                         continue;
1913                                 }
1914                                 if (*str == '#') break;
1915                                 str++;
1916                         }
1917                         if (*str)
1918                         {
1919                                 /* Find the '#' */
1920                                 cptr str = strchr(quark_str(o_ptr->inscription), '#');
1921
1922                                 /* Add the false name */
1923                                 t=object_desc_str(t,"¡Ø");
1924                                 t = object_desc_str(t, &str[1]);
1925                                 t=object_desc_str(t,"¡Ù");
1926                         }
1927                 }
1928         }
1929 #else
1930         if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
1931         {
1932                 t = object_desc_str(t,format(" of %s the Smith",player_name));
1933         }
1934
1935         /* Hack -- Append "Artifact" or "Special" names */
1936         if (known && !have_flag(flgs, TR_FULL_NAME))
1937         {
1938                 /* Is it a new random artifact ? */
1939                 if (o_ptr->art_name)
1940                 {
1941                         t = object_desc_chr(t, ' ');
1942
1943                         t = object_desc_str(t, quark_str(o_ptr->art_name));
1944                 }
1945
1946                 /* Grab any artifact name */
1947                 else if (o_ptr->name1)
1948                 {
1949                         artifact_type *a_ptr = &a_info[o_ptr->name1];
1950
1951                         t = object_desc_chr(t, ' ');
1952                         t = object_desc_str(t, (a_name + a_ptr->name));
1953                 }
1954
1955                 /* Grab any ego-item name */
1956                 else
1957                 {
1958                         if (o_ptr->name2)
1959                         {
1960                                 ego_item_type *e_ptr = &e_info[o_ptr->name2];
1961
1962                                 t = object_desc_chr(t, ' ');
1963                                 t = object_desc_str(t, (e_name + e_ptr->name));
1964                         }
1965
1966                         if (o_ptr->inscription && strchr(quark_str(o_ptr->inscription), '#'))
1967                         {
1968                                 /* Find the '#' */
1969                                 cptr str = strchr(quark_str(o_ptr->inscription), '#');
1970
1971                                 /* Add the false name */
1972                                 t = object_desc_chr(t, ' ');
1973                                 t = object_desc_str(t, &str[1]);
1974                         }
1975                 }
1976         }
1977 #endif
1978
1979
1980
1981         /* No more details wanted */
1982         if (mode < 1) goto copyback;
1983
1984         /* Hack -- Chests must be described in detail */
1985         if (o_ptr->tval == TV_CHEST)
1986         {
1987                 /* Not searched yet */
1988                 if (!known)
1989                 {
1990                         /* Nothing */
1991                 }
1992
1993                 /* May be "empty" */
1994                 else if (!o_ptr->pval)
1995                 {
1996 #ifdef JP
1997 t = object_desc_str(t, "(¶õ)");
1998 #else
1999                         t = object_desc_str(t, " (empty)");
2000 #endif
2001
2002                 }
2003
2004                 /* May be "disarmed" */
2005                 else if (o_ptr->pval < 0)
2006                 {
2007                         if (chest_traps[0 - o_ptr->pval])
2008                         {
2009 #ifdef JP
2010 t = object_desc_str(t, "(²ò½üºÑ)");
2011 #else
2012                                 t = object_desc_str(t, " (disarmed)");
2013 #endif
2014
2015                         }
2016                         else
2017                         {
2018 #ifdef JP
2019 t = object_desc_str(t, "(Èó»Ü¾û)");
2020 #else
2021                                 t = object_desc_str(t, " (unlocked)");
2022 #endif
2023
2024                         }
2025                 }
2026
2027                 /* Describe the traps, if any */
2028                 else
2029                 {
2030                         /* Describe the traps */
2031                         switch (chest_traps[o_ptr->pval])
2032                         {
2033                                 case 0:
2034                                 {
2035 #ifdef JP
2036 t = object_desc_str(t, "(»Ü¾û)");
2037 #else
2038                                         t = object_desc_str(t, " (Locked)");
2039 #endif
2040
2041                                         break;
2042                                 }
2043                                 case CHEST_LOSE_STR:
2044                                 {
2045 #ifdef JP
2046 t = object_desc_str(t, "(ÆÇ¿Ë)");
2047 #else
2048                                         t = object_desc_str(t, " (Poison Needle)");
2049 #endif
2050
2051                                         break;
2052                                 }
2053                                 case CHEST_LOSE_CON:
2054                                 {
2055 #ifdef JP
2056 t = object_desc_str(t, "(ÆÇ¿Ë)");
2057 #else
2058                                         t = object_desc_str(t, " (Poison Needle)");
2059 #endif
2060
2061                                         break;
2062                                 }
2063                                 case CHEST_POISON:
2064                                 {
2065 #ifdef JP
2066 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2067 #else
2068                                         t = object_desc_str(t, " (Gas Trap)");
2069 #endif
2070
2071                                         break;
2072                                 }
2073                                 case CHEST_PARALYZE:
2074                                 {
2075 #ifdef JP
2076 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2077 #else
2078                                         t = object_desc_str(t, " (Gas Trap)");
2079 #endif
2080
2081                                         break;
2082                                 }
2083                                 case CHEST_EXPLODE:
2084                                 {
2085 #ifdef JP
2086 t = object_desc_str(t, "(ÇúȯÁõÃÖ)");
2087 #else
2088                                         t = object_desc_str(t, " (Explosion Device)");
2089 #endif
2090
2091                                         break;
2092                                 }
2093                                 case CHEST_SUMMON:
2094                                 case CHEST_BIRD_STORM:
2095                                 case CHEST_E_SUMMON:
2096                                 case CHEST_H_SUMMON:
2097                                 {
2098 #ifdef JP
2099 t = object_desc_str(t, "(¾¤´­¤Î¥ë¡¼¥ó)");
2100 #else
2101                                         t = object_desc_str(t, " (Summoning Runes)");
2102 #endif
2103
2104                                         break;
2105                                 }
2106                                 case CHEST_RUNES_OF_EVIL:
2107                                 {
2108 #ifdef JP
2109 t = object_desc_str(t, "(¼Ù°­¤Ê¥ë¡¼¥ó)");
2110 #else
2111                                         t = object_desc_str(t, " (Gleaming Black Runes)");
2112 #endif
2113
2114                                         break;
2115                                 }
2116                                 case CHEST_ALARM:
2117                                 {
2118 #ifdef JP
2119 t = object_desc_str(t, "(·ÙÊóÁõÃÖ)");
2120 #else
2121                                         t = object_desc_str(t, " (Alarm)");
2122 #endif
2123
2124                                         break;
2125                                 }
2126                                 default:
2127                                 {
2128 #ifdef JP
2129 t = object_desc_str(t, "(¥Þ¥ë¥Á¡¦¥È¥é¥Ã¥×)");
2130 #else
2131                                         t = object_desc_str(t, " (Multiple Traps)");
2132 #endif
2133
2134                                         break;
2135                                 }
2136                         }
2137                 }
2138         }
2139
2140
2141         /* Display the item like a weapon */
2142         if (have_flag(flgs, TR_SHOW_MODS)) show_weapon = TRUE;
2143
2144         /* Display the item like a weapon */
2145         if (o_ptr->to_h && o_ptr->to_d) show_weapon = TRUE;
2146
2147         /* Display the item like armour */
2148         if (o_ptr->ac) show_armour = TRUE;
2149
2150
2151         /* Dump base weapon info */
2152         switch (o_ptr->tval)
2153         {
2154                 /* Missiles and Weapons */
2155                 case TV_SHOT:
2156                 case TV_BOLT:
2157                 case TV_ARROW:
2158                 case TV_HAFTED:
2159                 case TV_POLEARM:
2160                 case TV_SWORD:
2161                 case TV_DIGGING:
2162
2163                 /* Append a "damage" string */
2164                 t = object_desc_chr(t, ' ');
2165                 t = object_desc_chr(t, p1);
2166                 t = object_desc_num(t, o_ptr->dd);
2167                 t = object_desc_chr(t, 'd');
2168                 t = object_desc_num(t, o_ptr->ds);
2169                 t = object_desc_chr(t, p2);
2170
2171                 /* All done */
2172                 break;
2173
2174
2175                 /* Bows get a special "damage string" */
2176                 case TV_BOW:
2177
2178                 /* Mega-Hack -- Extract the "base power" */
2179                 power = (o_ptr->sval % 10);
2180
2181                 /* Apply the "Extra Might" flag */
2182                 if (have_flag(flgs, TR_XTRA_MIGHT)) power++;
2183
2184                 /* Append a special "damage" string */
2185                 t = object_desc_chr(t, ' ');
2186                 t = object_desc_chr(t, p1);
2187                 t = object_desc_chr(t, 'x');
2188                 t = object_desc_num(t, power);
2189                 t = object_desc_chr(t, p2);
2190
2191                 /* All done */
2192                 break;
2193         }
2194
2195
2196         /* Add the weapon bonuses */
2197         if (known)
2198         {
2199                 /* Show the tohit/todam on request */
2200                 if (show_weapon)
2201                 {
2202                         t = object_desc_chr(t, ' ');
2203                         t = object_desc_chr(t, p1);
2204                         t = object_desc_int(t, o_ptr->to_h);
2205                         t = object_desc_chr(t, ',');
2206                         t = object_desc_int(t, o_ptr->to_d);
2207                         t = object_desc_chr(t, p2);
2208                 }
2209
2210                 /* Show the tohit if needed */
2211                 else if (o_ptr->to_h)
2212                 {
2213                         t = object_desc_chr(t, ' ');
2214                         t = object_desc_chr(t, p1);
2215                         t = object_desc_int(t, o_ptr->to_h);
2216                         t = object_desc_chr(t, p2);
2217                 }
2218
2219                 /* Show the todam if needed */
2220                 else if (o_ptr->to_d)
2221                 {
2222                         t = object_desc_chr(t, ' ');
2223                         t = object_desc_chr(t, p1);
2224                         t = object_desc_int(t, o_ptr->to_d);
2225                         t = object_desc_chr(t, p2);
2226                 }
2227         }
2228
2229         bow_ptr = &inventory[INVEN_BOW];
2230
2231         /* if have a firing weapon + ammo matches bow*/
2232         if (bow_ptr->k_idx &&
2233             (((bow_ptr->sval == SV_SLING) && (o_ptr->tval == TV_SHOT)) ||
2234              (((bow_ptr->sval == SV_SHORT_BOW) ||
2235                (bow_ptr->sval == SV_LONG_BOW) ||
2236                (bow_ptr->sval == SV_NAMAKE_BOW)) && (o_ptr->tval == TV_ARROW)) ||
2237              (((bow_ptr->sval == SV_LIGHT_XBOW) ||
2238                (bow_ptr->sval == SV_HEAVY_XBOW)) && (o_ptr->tval == TV_BOLT))))
2239         {
2240                 int avgdam = 10;
2241                 int tmul;
2242                 s16b energy_fire;
2243
2244                 avgdam = o_ptr->dd * (o_ptr->ds + 1) * 10 / 2;
2245
2246                 /* See if the bow is "known" - then set damage bonus*/
2247                 if (object_known_p(bow_ptr))
2248                 {
2249                         avgdam += (bow_ptr->to_d * 10);
2250                 }
2251
2252                 /* effect of ammo */
2253                 if (known) avgdam += (o_ptr->to_d * 10);
2254
2255                 energy_fire = bow_energy(bow_ptr->sval);
2256                 tmul = bow_tmul(bow_ptr->sval);
2257
2258                 /* Get extra "power" from "extra might" */
2259                 if (p_ptr->xtra_might) tmul++;
2260
2261                 tmul = tmul * (100 + (int)(adj_str_td[p_ptr->stat_ind[A_STR]]) - 128);
2262
2263                 /* launcher multiplier */
2264                 avgdam *= tmul;
2265                 avgdam /= (100 * 10);
2266                 if (avgdam < 0) avgdam = 0;
2267
2268                 /* display (shot damage/ avg damage) */
2269                 t = object_desc_chr(t, ' ');
2270                 t = object_desc_chr(t, p1);
2271                 t = object_desc_num(t, avgdam);
2272                 t = object_desc_chr(t, '/');
2273
2274                 if (p_ptr->num_fire == 0)
2275                 {
2276                         t = object_desc_chr(t, '0');
2277                 }
2278                 else
2279                 {
2280                         /* calc effects of energy */
2281                         avgdam *= (p_ptr->num_fire * 100);
2282
2283                         avgdam /= energy_fire;
2284
2285                         t = object_desc_num(t, avgdam);
2286                 }
2287
2288                 t = object_desc_chr(t, p2);
2289         }
2290         else if ((p_ptr->pclass == CLASS_NINJA) && (o_ptr->tval == TV_SPIKE))
2291         {
2292                 int avgdam;
2293                 s16b energy_fire;
2294
2295                 if (p_ptr->mighty_throw)
2296                         avgdam =  1 + 3;
2297                 else
2298                         avgdam =  1;
2299                 avgdam += ((p_ptr->lev+30)*(p_ptr->lev+30)-900)/55;
2300
2301                 energy_fire = 100 - p_ptr->lev;
2302
2303                 /* display (shot damage/ avg damage) */
2304                 t = object_desc_chr(t, ' ');
2305                 t = object_desc_chr(t, p1);
2306                 t = object_desc_num(t, avgdam);
2307                 t = object_desc_chr(t, '/');
2308
2309                 /* calc effects of energy */
2310                 avgdam = 100 * avgdam / energy_fire;
2311
2312                 t = object_desc_num(t, avgdam);
2313
2314                 t = object_desc_chr(t, p2);
2315         }
2316                
2317
2318         /* Add the armor bonuses */
2319         if (known)
2320         {
2321                 /* Show the armor class info */
2322                 if (show_armour)
2323                 {
2324                         t = object_desc_chr(t, ' ');
2325                         t = object_desc_chr(t, b1);
2326                         t = object_desc_num(t, o_ptr->ac);
2327                         t = object_desc_chr(t, ',');
2328                         t = object_desc_int(t, o_ptr->to_a);
2329                         t = object_desc_chr(t, b2);
2330                 }
2331
2332                 /* No base armor, but does increase armor */
2333                 else if (o_ptr->to_a)
2334                 {
2335                         t = object_desc_chr(t, ' ');
2336                         t = object_desc_chr(t, b1);
2337                         t = object_desc_int(t, o_ptr->to_a);
2338                         t = object_desc_chr(t, b2);
2339                 }
2340         }
2341
2342         /* Hack -- always show base armor */
2343         else if (show_armour)
2344         {
2345                 t = object_desc_chr(t, ' ');
2346                 t = object_desc_chr(t, b1);
2347                 t = object_desc_num(t, o_ptr->ac);
2348                 t = object_desc_chr(t, b2);
2349         }
2350
2351
2352         /* No more details wanted */
2353         if (mode < 2) goto copyback;
2354
2355
2356         /*
2357          * Hack -- Wands and Staffs have charges.  Make certain how many charges
2358          * a stack of staffs really has is clear. -LM-
2359          */
2360         if (known &&
2361             ((o_ptr->tval == TV_STAFF) ||
2362              (o_ptr->tval == TV_WAND)))
2363         {
2364                 /* Dump " (N charges)" */
2365                 t = object_desc_chr(t, ' ');
2366                 t = object_desc_chr(t, p1);
2367
2368                 /* Clear explaination for staffs. */
2369                 if ((o_ptr->tval == TV_STAFF) && (o_ptr->number > 1))
2370                 {
2371                         t = object_desc_num(t, o_ptr->number);
2372                         t = object_desc_str(t, "x ");
2373                 }
2374                 t = object_desc_num(t, o_ptr->pval);
2375 #ifdef JP
2376                 t = object_desc_str(t, "²óʬ");
2377 #else
2378                 t = object_desc_str(t, " charge");
2379
2380                 if (o_ptr->pval != 1)
2381                 {
2382                         t = object_desc_chr(t, 's');
2383                 }
2384 #endif
2385
2386
2387                 t = object_desc_chr(t, p2);
2388         }
2389         /* Hack -- Rods have a "charging" indicator.  Now that stacks of rods may
2390          * be in any state of charge or discharge, this now includes a number. -LM-
2391          */
2392         else if (known && (o_ptr->tval == TV_ROD))
2393         {
2394                 /* Hack -- Dump " (# charging)" if relevant */
2395                 if (o_ptr->timeout)
2396                 {
2397                         /* Stacks of rods display an exact count of charging rods. */
2398                         if (o_ptr->number > 1)
2399                         {
2400                                 /* Paranoia. */
2401                                 if (k_ptr->pval == 0) k_ptr->pval = 1;
2402
2403                                 /* Find out how many rods are charging, by dividing
2404                                  * current timeout by each rod's maximum timeout.
2405                                  * Ensure that any remainder is rounded up.  Display
2406                                  * very discharged stacks as merely fully discharged.
2407                                  */
2408                                 power = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval;
2409                                 if (power > o_ptr->number) power = o_ptr->number;
2410
2411                                 /* Display prettily. */
2412                                 t = object_desc_str(t, " (");
2413                                 t = object_desc_num(t, power);
2414 #ifdef JP
2415                                 t = object_desc_str(t, "ËÜ ½¼Å¶Ãæ)");
2416 #else
2417                                 t = object_desc_str(t, " charging)");
2418 #endif
2419
2420                         }
2421
2422                         /* "one Rod of Perception (1 charging)" would look tacky. */
2423                         else
2424                         {
2425 #ifdef JP
2426 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2427 #else
2428                                 t = object_desc_str(t, " (charging)");
2429 #endif
2430
2431                         }
2432                 }
2433         }
2434
2435         /* Dump "pval" flags for wearable items */
2436         if (known && (have_pval_flags(flgs)))
2437         {
2438                 /* Start the display */
2439                 t = object_desc_chr(t, ' ');
2440                 t = object_desc_chr(t, p1);
2441
2442                 /* Dump the "pval" itself */
2443                 t = object_desc_int(t, o_ptr->pval);
2444
2445                 /* Do not display the "pval" flags */
2446                 if (have_flag(flgs, TR_HIDE_TYPE))
2447                 {
2448                         /* Nothing */
2449                 }
2450
2451                 /* Speed */
2452                 else if (have_flag(flgs, TR_SPEED))
2453                 {
2454                         /* Dump " to speed" */
2455 #ifdef JP
2456 t = object_desc_str(t, "²Ã®");
2457 #else
2458                         t = object_desc_str(t, " to speed");
2459 #endif
2460
2461                 }
2462
2463                 /* Attack speed */
2464                 else if (have_flag(flgs, TR_BLOWS))
2465                 {
2466                         /* Add " attack" */
2467 #ifdef JP
2468 t = object_desc_str(t, "¹¶·â");
2469 #else
2470                         t = object_desc_str(t, " attack");
2471
2472                         /* Add "attacks" */
2473                         if (ABS(o_ptr->pval) != 1) t = object_desc_chr(t, 's');
2474 #endif
2475
2476                 }
2477
2478                 /* Stealth */
2479                 else if (have_flag(flgs, TR_STEALTH))
2480                 {
2481                         /* Dump " to stealth" */
2482 #ifdef JP
2483 t = object_desc_str(t, "±£Ì©");
2484 #else
2485                         t = object_desc_str(t, " to stealth");
2486 #endif
2487
2488                 }
2489
2490                 /* Search */
2491                 else if (have_flag(flgs, TR_SEARCH))
2492                 {
2493                         /* Dump " to searching" */
2494 #ifdef JP
2495 t = object_desc_str(t, "õº÷");
2496 #else
2497                         t = object_desc_str(t, " to searching");
2498 #endif
2499
2500                 }
2501
2502                 /* Infravision */
2503                 else if (have_flag(flgs, TR_INFRA))
2504                 {
2505                         /* Dump " to infravision" */
2506 #ifdef JP
2507 t = object_desc_str(t, "ÀÖ³°Àþ»ëÎÏ");
2508 #else
2509                         t = object_desc_str(t, " to infravision");
2510 #endif
2511
2512                 }
2513
2514                 /* Tunneling */
2515                 else if (have_flag(flgs, TR_TUNNEL))
2516                 {
2517                         /* Nothing */
2518                 }
2519
2520                 /* Finish the display */
2521                 t = object_desc_chr(t, p2);
2522         }
2523
2524         /* Hack -- Process Lanterns/Torches */
2525         if (known && (o_ptr->tval == TV_LITE) && (!(artifact_p(o_ptr) || (o_ptr->sval == SV_LITE_FEANOR))))
2526         {
2527                 /* Hack -- Turns of light for normal lites */
2528 #ifdef JP
2529 t = object_desc_str(t, "(");
2530 #else
2531                 t = object_desc_str(t, " (with ");
2532 #endif
2533
2534                 if (o_ptr->name2 == EGO_LITE_LONG) t = object_desc_num(t, o_ptr->xtra4*2);
2535                 else t = object_desc_num(t, o_ptr->xtra4);
2536 #ifdef JP
2537 t = object_desc_str(t, "¥¿¡¼¥ó¤Î¼÷Ì¿)");
2538 #else
2539                 t = object_desc_str(t, " turns of light)");
2540 #endif
2541
2542         }
2543
2544
2545         /* Indicate charging objects, but not rods. */
2546         if (known && o_ptr->timeout && o_ptr->tval != TV_ROD)
2547         {
2548                 /* Hack -- Dump " (charging)" if relevant */
2549 #ifdef JP
2550 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2551 #else
2552                 t = object_desc_str(t, " (charging)");
2553 #endif
2554
2555         }
2556
2557
2558         /* No more details wanted */
2559         if (mode < 3) goto copyback;
2560
2561
2562         /* No inscription yet */
2563         tmp_val2[0] = '\0';
2564
2565         /* Use the game-generated "feeling" otherwise, if available */
2566         if (o_ptr->feeling)
2567         {
2568                 strcpy(tmp_val2, game_inscriptions[o_ptr->feeling]);
2569         }
2570
2571         /* Note "cursed" if the item is known to be cursed */
2572         else if (cursed_p(o_ptr) && (known || (o_ptr->ident & (IDENT_SENSE))))
2573         {
2574 #ifdef JP
2575 strcpy(tmp_val2, "¼ö¤ï¤ì¤Æ¤¤¤ë");
2576 #else
2577                 strcpy(tmp_val2, "cursed");
2578 #endif
2579
2580         }
2581  
2582         /* Note "unidentified" if the item is unidentified */
2583         else if ((o_ptr->tval == TV_RING || o_ptr->tval == TV_AMULET
2584                   || o_ptr->tval == TV_LITE || o_ptr->tval == TV_FIGURINE)
2585                  && object_aware_p(o_ptr) && !object_known_p(o_ptr)
2586                  && !((o_ptr->ident)&IDENT_SENSE))
2587         {
2588 #ifdef JP
2589 strcpy(tmp_val2, "̤´ÕÄê");
2590 #else
2591                 strcpy(tmp_val2, "unidentified");
2592 #endif
2593         }
2594
2595         /* Mega-Hack -- note empty wands/staffs */
2596         else if (!known && (o_ptr->ident & (IDENT_EMPTY)))
2597         {
2598 #ifdef JP
2599 strcpy(tmp_val2, "¶õ");
2600 #else
2601                 strcpy(tmp_val2, "empty");
2602 #endif
2603
2604         }
2605
2606         /* Note "tried" if the object has been tested unsuccessfully */
2607         else if (!aware && object_tried_p(o_ptr))
2608         {
2609 #ifdef JP
2610 strcpy(tmp_val2, "̤ȽÌÀ");
2611 #else
2612                 strcpy(tmp_val2, "tried");
2613 #endif
2614
2615         }
2616
2617         /* Use the standard inscription if available */
2618         if (o_ptr->inscription)
2619         {
2620                 char *u = tmp_val2;
2621
2622                 if (tmp_val2[0]) strcat(tmp_val2, ", ");
2623
2624                 strcat(tmp_val2, quark_str(o_ptr->inscription));
2625
2626                 for (; *u && (*u != '#'); u++);
2627
2628                 *u = '\0';
2629         }
2630
2631         /* Note the discount, if any */
2632         else if (o_ptr->discount && !(tmp_val2[0]))
2633         {
2634                 (void)object_desc_num(tmp_val2, o_ptr->discount);
2635 #ifdef JP
2636                 strcat(tmp_val2, "%°ú¤­");
2637 #else
2638                 strcat(tmp_val2, "% off");
2639 #endif
2640
2641         }
2642
2643         /* Append the inscription, if any */
2644         if (tmp_val2[0])
2645         {
2646                 /* Append the inscription */
2647                 t = object_desc_chr(t, ' ');
2648                 t = object_desc_chr(t, c1);
2649                 t = object_desc_str(t, tmp_val2);
2650                 t = object_desc_chr(t, c2);
2651         }
2652
2653 copyback:
2654         t = tmp_val;
2655         for (i = 0; i < MAX_NLEN-2; i++)
2656         {
2657 #ifdef JP
2658                 if (iskanji(*(t+i)))
2659                 {
2660                         *(buf+i) = *(t+i);
2661                         i++;
2662                 }
2663 #endif
2664                 *(buf+i) = *(t+i);
2665         }
2666         if (i == MAX_NLEN-2)
2667         {
2668 #ifdef JP
2669                 if (iskanji(*(t+i)))
2670                         *(buf+i) = '\0';
2671                 else
2672 #endif
2673                         *(buf+i) = *(t+i);
2674         }
2675         *(buf+MAX_NLEN-1) = '\0';
2676 }
2677