OSDN Git Service

- スターダストでproject(-1, ...)で落ちてたので修正。
[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_HAJA_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 extern 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_HAJA_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            f1, f2, f3;
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, &f1, &f2, &f3);
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_HAJA_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
1642         /* Start dumping the result */
1643         t = tmp_val;
1644
1645 #ifdef JP
1646         if (basenm[0] == '&')
1647                 s = basenm + 2;
1648         else
1649                 s = basenm;
1650
1651         /* No prefix */
1652         if (!pref)
1653         {
1654                 /* Nothing */
1655         }
1656         else if (o_ptr->number > 1)
1657         {
1658                 if ( change_numeral == FALSE ){
1659                         t = object_desc_num(t, o_ptr->number);
1660                         if (o_ptr->number > 9)
1661                                 t = object_desc_str(t, "¸Ä¤Î ");
1662                         else
1663                                 t = object_desc_str(t, "¤Ä¤Î ");
1664                 }
1665                 else
1666                 {
1667                         t = object_desc_kosuu(t,o_ptr);
1668                         t = object_desc_str(t, "¤Î ");
1669                 }
1670         }
1671
1672         /* ±Ñ¸ì¤Î¾ì¹ç¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ï The ¤¬ÉÕ¤¯¤Î¤Çʬ¤«¤ë¤¬
1673          * ÆüËܸì¤Ç¤Ïʬ¤«¤é¤Ê¤¤¤Î¤Ç¥Þ¡¼¥¯¤ò¤Ä¤±¤ë 
1674          */
1675         if (known && artifact_p(o_ptr)) t = object_desc_str(t, "¡ú");
1676         else if (known && o_ptr->art_name) t = object_desc_str(t, "¡ù");
1677
1678 #else
1679
1680         /* The object "expects" a "number" */
1681         if (basenm[0] == '&')
1682         {
1683                 /* Skip the ampersand (and space) */
1684                 s = basenm + 2;
1685
1686                 /* No prefix */
1687                 if (!pref)
1688                 {
1689                         /* Nothing */
1690                 }
1691
1692                 /* Hack -- None left */
1693                 else if (o_ptr->number <= 0)
1694                 {
1695                         t = object_desc_str(t, "no more ");
1696                 }
1697
1698                 /* Extract the number */
1699                 else if (o_ptr->number > 1)
1700                 {
1701                         t = object_desc_num(t, o_ptr->number);
1702                         t = object_desc_chr(t, ' ');
1703                 }
1704
1705                 /* Hack -- The only one of its kind */
1706                 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
1707                 {
1708                         t = object_desc_str(t, "The ");
1709                 }
1710
1711                 /* Unique corpses are unique */
1712                 else if ((o_ptr->tval == TV_CORPSE) && (r_ptr->flags1 & RF1_UNIQUE))
1713                 {
1714                         t = object_desc_str(t, "The ");
1715                 }
1716
1717                 /* A single one, with a vowel in the modifier */
1718                 else if ((*s == '#') && (is_a_vowel(modstr[0])))
1719                 {
1720                         t = object_desc_str(t, "an ");
1721                 }
1722
1723                 /* A single one, with a vowel */
1724                 else if (is_a_vowel(*s))
1725                 {
1726                         t = object_desc_str(t, "an ");
1727                 }
1728
1729                 /* A single one, without a vowel */
1730                 else
1731                 {
1732                         t = object_desc_str(t, "a ");
1733                 }
1734         }
1735
1736         /* Hack -- objects that "never" take an article */
1737         else
1738         {
1739                 /* No ampersand */
1740                 s = basenm;
1741
1742                 /* No pref */
1743                 if (!pref)
1744                 {
1745                         /* Nothing */
1746                 }
1747
1748                 /* Hack -- all gone */
1749                 else if (o_ptr->number <= 0)
1750                 {
1751                         t = object_desc_str(t, "no more ");
1752                 }
1753
1754                 /* Prefix a number if required */
1755                 else if (o_ptr->number > 1)
1756                 {
1757                         t = object_desc_num(t, o_ptr->number);
1758                         t = object_desc_chr(t, ' ');
1759                 }
1760
1761                 /* Hack -- The only one of its kind */
1762                 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
1763                 {
1764                         t = object_desc_str(t, "The ");
1765                 }
1766
1767                 /* Hack -- single items get no prefix */
1768                 else
1769                 {
1770                         /* Nothing */
1771                 }
1772         }
1773 #endif
1774
1775         /* Paranoia -- skip illegal tildes */
1776         /* while (*s == '~') s++; */
1777
1778 #ifdef JP
1779         if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
1780         {
1781                 t = object_desc_str(t,format("ÃÃÌê»Õ%s¤Î",player_name));
1782         }
1783
1784         /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¡¢Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à¤Î̾Á°¤òÉղ乤ë */
1785         if (known) {
1786                 /* ¥é¥ó¥À¥à¡¦¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È */
1787                 if (o_ptr->art_name)
1788                 {       char temp[256];
1789                         strcpy(temp, quark_str(o_ptr->art_name));
1790                         /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
1791                         /* ±Ñ¸ìÈǤΥ»¡¼¥Ö¥Õ¥¡¥¤¥ë¤«¤éÍ褿 'of XXX' ¤Ï,¡ÖXXX¤Î¡×¤Èɽ¼¨¤¹¤ë */
1792                         if ( strncmp( temp , "of ",3)==0 ) {t=object_desc_str(t,&temp[3]);t=object_desc_str(t,"¤Î");}
1793                         else 
1794                         if ( strncmp( temp , "¡Ø" , 2 ) != 0 && temp[0]!='\'')
1795                                 t=object_desc_str(t,  temp);
1796                 }
1797                 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à */
1798                 else if (o_ptr->name1) {
1799                         artifact_type *a_ptr = &a_info[o_ptr->name1];
1800                         /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
1801                         if ( strncmp( (a_name + a_ptr->name), "¡Ø" , 2) != 0){
1802                                 t=object_desc_str(t, (a_name + a_ptr->name));
1803                         }
1804                 }
1805                 /* Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à */
1806                 else if (o_ptr->name2) {
1807                         ego_item_type *e_ptr = &e_info[o_ptr->name2];
1808                         t=object_desc_str(t, (e_name + e_ptr->name));
1809                 }
1810         }
1811 #endif
1812         /* Copy the string */
1813         for (; *s; s++)
1814         {
1815                 /* Pluralizer */
1816 #ifdef JP
1817                 if (*s == '#')
1818 #else
1819                 if (*s == '~')
1820                 {
1821                         /* Add a plural if needed */
1822                         if (pref && o_ptr->number != 1)
1823                         {
1824                                 char k = t[-1];
1825
1826                                 /* XXX XXX XXX Mega-Hack */
1827
1828                                 /* Hack -- "Cutlass-es" and "Torch-es" */
1829                                 if ((k == 's') || (k == 'h')) *t++ = 'e';
1830
1831                                 /* Add an 's' */
1832                                 *t++ = 's';
1833                         }
1834                 }
1835
1836                 /* Modifier */
1837                 else if (*s == '#')
1838 #endif
1839
1840                 {
1841                         /* Insert the modifier */
1842                         for (u = modstr; *u; u++) *t++ = *u;
1843                 }
1844
1845 #ifdef JP
1846                 else if (*s == '%')
1847                   /* saigo ¤ÎÂå¤ï¤ê¡£¸úǽ¤òÉÕ²½¤¹¤ë by ita*/
1848                 {
1849                   modstr=get_object_name(o_ptr);
1850                   for (u = modstr; *u; u++) *t++ = *u;
1851                 }
1852 #endif
1853                 /* Normal */
1854                 else
1855                 {
1856                         /* Copy */
1857                         *t++ = *s;
1858                 }
1859         }
1860
1861         /* Terminate */
1862         *t = '\0';
1863
1864
1865         /* Append the "kind name" to the "base name" */
1866 #ifndef JP
1867         if (append_name)
1868         {
1869                 t = object_desc_str(t, " of ");
1870                 t = object_desc_str(t, get_object_name(o_ptr));
1871         }
1872 #endif
1873
1874
1875 #ifdef JP
1876         /* '¡Ø'¤«¤é»Ï¤Þ¤ëÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ¸å¤ËÉղ乤ë */
1877         if (known) {
1878                 /* ¥é¥ó¥À¥à¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Î̾Á°¤Ï¥»¡¼¥Ö¥Õ¥¡¥¤¥ë¤Ëµ­Ï¿
1879                    ¤µ¤ì¤ë¤Î¤Ç¡¢±Ñ¸ìÈǤÎ̾Á°¤â¤½¤ì¤é¤·¤¯ÊÑ´¹¤¹¤ë */
1880                 if (o_ptr->art_name)
1881                 {       char temp[256];int itemp;
1882                         strcpy(temp, quark_str(o_ptr->art_name));
1883                         /* MEGA HACK by ita*/
1884                                 if ( strncmp( temp , "¡Ø" , 2 ) == 0 ) t=object_desc_str(t,  temp);else
1885                          if( temp[0]=='\'' ) { itemp=strlen(temp);temp[itemp-1]=0; 
1886                          t=object_desc_str(t,"¡Ø");
1887                          t=object_desc_str(t,&temp[1]);
1888                          t=object_desc_str(t,"¡Ù");}
1889                                 
1890                 }
1891                 else if (o_ptr->name1) {
1892                                 artifact_type *a_ptr = &a_info[o_ptr->name1];
1893                                 if ( strncmp( (a_name + a_ptr->name) , "¡Ø" , 2 ) == 0 ){
1894                                         t=object_desc_str(t, (a_name + a_ptr->name));
1895                                 }
1896                 }
1897                 else if (o_ptr->inscription)
1898                 {
1899                         cptr str = quark_str(o_ptr->inscription);
1900
1901                         while(*str)
1902                         {
1903                                 if (iskanji(*str))
1904                                 {
1905                                         str += 2;
1906                                         continue;
1907                                 }
1908                                 if (*str == '#') break;
1909                                 str++;
1910                         }
1911                         if (*str)
1912                         {
1913                                 /* Find the '#' */
1914                                 cptr str = strchr(quark_str(o_ptr->inscription), '#');
1915
1916                                 /* Add the false name */
1917                                 t=object_desc_str(t,"¡Ø");
1918                                 t = object_desc_str(t, &str[1]);
1919                                 t=object_desc_str(t,"¡Ù");
1920                         }
1921                 }
1922         }
1923 #else
1924         if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
1925         {
1926                 t = object_desc_str(t,format(" of %s the smith",player_name));
1927         }
1928
1929         /* Hack -- Append "Artifact" or "Special" names */
1930         if (known)
1931         {
1932                 /* Is it a new random artifact ? */
1933                 if (o_ptr->art_name)
1934                 {
1935                         t = object_desc_chr(t, ' ');
1936
1937                         t = object_desc_str(t, quark_str(o_ptr->art_name));
1938                 }
1939
1940                 /* Grab any artifact name */
1941                 else if (o_ptr->name1)
1942                 {
1943                         artifact_type *a_ptr = &a_info[o_ptr->name1];
1944
1945                         t = object_desc_chr(t, ' ');
1946                         t = object_desc_str(t, (a_name + a_ptr->name));
1947                 }
1948
1949                 /* Grab any ego-item name */
1950                 else
1951                 {
1952                         if (o_ptr->name2)
1953                         {
1954                                 ego_item_type *e_ptr = &e_info[o_ptr->name2];
1955
1956                                 t = object_desc_chr(t, ' ');
1957                                 t = object_desc_str(t, (e_name + e_ptr->name));
1958                         }
1959
1960                         if (o_ptr->inscription && strchr(quark_str(o_ptr->inscription), '#'))
1961                         {
1962                                 /* Find the '#' */
1963                                 cptr str = strchr(quark_str(o_ptr->inscription), '#');
1964
1965                                 /* Add the false name */
1966                                 t = object_desc_chr(t, ' ');
1967                                 t = object_desc_str(t, &str[1]);
1968                         }
1969                 }
1970         }
1971 #endif
1972
1973
1974
1975         /* No more details wanted */
1976         if (mode < 1) goto copyback;
1977
1978         /* Hack -- Chests must be described in detail */
1979         if (o_ptr->tval == TV_CHEST)
1980         {
1981                 /* Not searched yet */
1982                 if (!known)
1983                 {
1984                         /* Nothing */
1985                 }
1986
1987                 /* May be "empty" */
1988                 else if (!o_ptr->pval)
1989                 {
1990 #ifdef JP
1991 t = object_desc_str(t, "(¶õ)");
1992 #else
1993                         t = object_desc_str(t, " (empty)");
1994 #endif
1995
1996                 }
1997
1998                 /* May be "disarmed" */
1999                 else if (o_ptr->pval < 0)
2000                 {
2001                         if (chest_traps[0 - o_ptr->pval])
2002                         {
2003 #ifdef JP
2004 t = object_desc_str(t, "(²ò½üºÑ)");
2005 #else
2006                                 t = object_desc_str(t, " (disarmed)");
2007 #endif
2008
2009                         }
2010                         else
2011                         {
2012 #ifdef JP
2013 t = object_desc_str(t, "(Èó»Ü¾û)");
2014 #else
2015                                 t = object_desc_str(t, " (unlocked)");
2016 #endif
2017
2018                         }
2019                 }
2020
2021                 /* Describe the traps, if any */
2022                 else
2023                 {
2024                         /* Describe the traps */
2025                         switch (chest_traps[o_ptr->pval])
2026                         {
2027                                 case 0:
2028                                 {
2029 #ifdef JP
2030 t = object_desc_str(t, "(»Ü¾û)");
2031 #else
2032                                         t = object_desc_str(t, " (Locked)");
2033 #endif
2034
2035                                         break;
2036                                 }
2037                                 case CHEST_LOSE_STR:
2038                                 {
2039 #ifdef JP
2040 t = object_desc_str(t, "(ÆÇ¿Ë)");
2041 #else
2042                                         t = object_desc_str(t, " (Poison Needle)");
2043 #endif
2044
2045                                         break;
2046                                 }
2047                                 case CHEST_LOSE_CON:
2048                                 {
2049 #ifdef JP
2050 t = object_desc_str(t, "(ÆÇ¿Ë)");
2051 #else
2052                                         t = object_desc_str(t, " (Poison Needle)");
2053 #endif
2054
2055                                         break;
2056                                 }
2057                                 case CHEST_POISON:
2058                                 {
2059 #ifdef JP
2060 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2061 #else
2062                                         t = object_desc_str(t, " (Gas Trap)");
2063 #endif
2064
2065                                         break;
2066                                 }
2067                                 case CHEST_PARALYZE:
2068                                 {
2069 #ifdef JP
2070 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2071 #else
2072                                         t = object_desc_str(t, " (Gas Trap)");
2073 #endif
2074
2075                                         break;
2076                                 }
2077                                 case CHEST_EXPLODE:
2078                                 {
2079 #ifdef JP
2080 t = object_desc_str(t, "(ÇúȯÁõÃÖ)");
2081 #else
2082                                         t = object_desc_str(t, " (Explosion Device)");
2083 #endif
2084
2085                                         break;
2086                                 }
2087                                 case CHEST_SUMMON:
2088                                 case CHEST_BIRD_STORM:
2089                                 case CHEST_E_SUMMON:
2090                                 case CHEST_H_SUMMON:
2091                                 {
2092 #ifdef JP
2093 t = object_desc_str(t, "(¾¤´­¤Î¥ë¡¼¥ó)");
2094 #else
2095                                         t = object_desc_str(t, " (Summoning Runes)");
2096 #endif
2097
2098                                         break;
2099                                 }
2100                                 case CHEST_RUNES_OF_EVIL:
2101                                 {
2102 #ifdef JP
2103 t = object_desc_str(t, "(¼Ù°­¤Ê¥ë¡¼¥ó)");
2104 #else
2105                                         t = object_desc_str(t, " (Gleaming Black Runes)");
2106 #endif
2107
2108                                         break;
2109                                 }
2110                                 case CHEST_ALARM:
2111                                 {
2112 #ifdef JP
2113 t = object_desc_str(t, "(·ÙÊóÁõÃÖ)");
2114 #else
2115                                         t = object_desc_str(t, " (Alarm)");
2116 #endif
2117
2118                                         break;
2119                                 }
2120                                 default:
2121                                 {
2122 #ifdef JP
2123 t = object_desc_str(t, "(¥Þ¥ë¥Á¡¦¥È¥é¥Ã¥×)");
2124 #else
2125                                         t = object_desc_str(t, " (Multiple Traps)");
2126 #endif
2127
2128                                         break;
2129                                 }
2130                         }
2131                 }
2132         }
2133
2134
2135         /* Display the item like a weapon */
2136         if (f3 & (TR3_SHOW_MODS)) show_weapon = TRUE;
2137
2138         /* Display the item like a weapon */
2139         if (o_ptr->to_h && o_ptr->to_d) show_weapon = TRUE;
2140
2141         /* Display the item like armour */
2142         if (o_ptr->ac) show_armour = TRUE;
2143
2144
2145         /* Dump base weapon info */
2146         switch (o_ptr->tval)
2147         {
2148                 /* Missiles and Weapons */
2149                 case TV_SHOT:
2150                 case TV_BOLT:
2151                 case TV_ARROW:
2152                 case TV_HAFTED:
2153                 case TV_POLEARM:
2154                 case TV_SWORD:
2155                 case TV_DIGGING:
2156
2157                 /* Append a "damage" string */
2158                 t = object_desc_chr(t, ' ');
2159                 t = object_desc_chr(t, p1);
2160                 t = object_desc_num(t, o_ptr->dd);
2161                 t = object_desc_chr(t, 'd');
2162                 t = object_desc_num(t, o_ptr->ds);
2163                 t = object_desc_chr(t, p2);
2164
2165                 /* All done */
2166                 break;
2167
2168
2169                 /* Bows get a special "damage string" */
2170                 case TV_BOW:
2171
2172                 /* Mega-Hack -- Extract the "base power" */
2173                 power = (o_ptr->sval % 10);
2174
2175                 /* Apply the "Extra Might" flag */
2176                 if (f3 & (TR3_XTRA_MIGHT)) power++;
2177
2178                 /* Append a special "damage" string */
2179                 t = object_desc_chr(t, ' ');
2180                 t = object_desc_chr(t, p1);
2181                 t = object_desc_chr(t, 'x');
2182                 t = object_desc_num(t, power);
2183                 t = object_desc_chr(t, p2);
2184
2185                 /* All done */
2186                 break;
2187         }
2188
2189
2190         /* Add the weapon bonuses */
2191         if (known)
2192         {
2193                 /* Show the tohit/todam on request */
2194                 if (show_weapon)
2195                 {
2196                         t = object_desc_chr(t, ' ');
2197                         t = object_desc_chr(t, p1);
2198                         t = object_desc_int(t, o_ptr->to_h);
2199                         t = object_desc_chr(t, ',');
2200                         t = object_desc_int(t, o_ptr->to_d);
2201                         t = object_desc_chr(t, p2);
2202                 }
2203
2204                 /* Show the tohit if needed */
2205                 else if (o_ptr->to_h)
2206                 {
2207                         t = object_desc_chr(t, ' ');
2208                         t = object_desc_chr(t, p1);
2209                         t = object_desc_int(t, o_ptr->to_h);
2210                         t = object_desc_chr(t, p2);
2211                 }
2212
2213                 /* Show the todam if needed */
2214                 else if (o_ptr->to_d)
2215                 {
2216                         t = object_desc_chr(t, ' ');
2217                         t = object_desc_chr(t, p1);
2218                         t = object_desc_int(t, o_ptr->to_d);
2219                         t = object_desc_chr(t, p2);
2220                 }
2221         }
2222
2223         bow_ptr = &inventory[INVEN_BOW];
2224
2225         /* if have a firing weapon + ammo matches bow*/
2226         if (bow_ptr->k_idx &&
2227             (((bow_ptr->sval == SV_SLING) && (o_ptr->tval == TV_SHOT)) ||
2228              (((bow_ptr->sval == SV_SHORT_BOW) ||
2229                (bow_ptr->sval == SV_LONG_BOW) ||
2230                (bow_ptr->sval == SV_NAMAKE_BOW)) && (o_ptr->tval == TV_ARROW)) ||
2231              (((bow_ptr->sval == SV_LIGHT_XBOW) ||
2232                (bow_ptr->sval == SV_HEAVY_XBOW)) && (o_ptr->tval == TV_BOLT))))
2233         {
2234                 int avgdam = 10;
2235                 int tmul;
2236                 s16b energy_fire;
2237
2238                 avgdam = o_ptr->dd * (o_ptr->ds + 1) * 10 / 2;
2239
2240                 /* See if the bow is "known" - then set damage bonus*/
2241                 if (object_known_p(bow_ptr))
2242                 {
2243                         avgdam += (bow_ptr->to_d * 10);
2244                 }
2245
2246                 /* effect of ammo */
2247                 if (known) avgdam += (o_ptr->to_d * 10);
2248
2249                 energy_fire = bow_energy(bow_ptr->sval);
2250                 tmul = bow_tmul(bow_ptr->sval);
2251
2252                 /* Get extra "power" from "extra might" */
2253                 if (p_ptr->xtra_might) tmul++;
2254
2255                 tmul = tmul * (100 + (int)(adj_str_td[p_ptr->stat_ind[A_STR]]) - 128);
2256
2257                 /* launcher multiplier */
2258                 avgdam *= tmul;
2259                 avgdam /= (100 * 10);
2260                 if (avgdam < 0) avgdam = 0;
2261
2262                 /* display (shot damage/ avg damage) */
2263                 t = object_desc_chr(t, ' ');
2264                 t = object_desc_chr(t, p1);
2265                 t = object_desc_num(t, avgdam);
2266                 t = object_desc_chr(t, '/');
2267
2268                 if (p_ptr->num_fire == 0)
2269                 {
2270                         t = object_desc_chr(t, '0');
2271                 }
2272                 else
2273                 {
2274                         /* calc effects of energy */
2275                         avgdam *= (p_ptr->num_fire * 100);
2276
2277                         avgdam /= energy_fire;
2278
2279                         t = object_desc_num(t, avgdam);
2280                 }
2281
2282                 t = object_desc_chr(t, p2);
2283         }
2284         else if ((p_ptr->pclass == CLASS_NINJA) && (o_ptr->tval == TV_SPIKE))
2285         {
2286                 int avgdam;
2287                 s16b energy_fire;
2288
2289                 if (p_ptr->mighty_throw)
2290                         avgdam =  1 + 3;
2291                 else
2292                         avgdam =  1;
2293                 avgdam += ((p_ptr->lev+30)*(p_ptr->lev+30)-900)/55;
2294
2295                 energy_fire = 100 - p_ptr->lev;
2296
2297                 /* display (shot damage/ avg damage) */
2298                 t = object_desc_chr(t, ' ');
2299                 t = object_desc_chr(t, p1);
2300                 t = object_desc_num(t, avgdam);
2301                 t = object_desc_chr(t, '/');
2302
2303                 /* calc effects of energy */
2304                 avgdam = 100 * avgdam / energy_fire;
2305
2306                 t = object_desc_num(t, avgdam);
2307
2308                 t = object_desc_chr(t, p2);
2309         }
2310                
2311
2312         /* Add the armor bonuses */
2313         if (known)
2314         {
2315                 /* Show the armor class info */
2316                 if (show_armour)
2317                 {
2318                         t = object_desc_chr(t, ' ');
2319                         t = object_desc_chr(t, b1);
2320                         t = object_desc_num(t, o_ptr->ac);
2321                         t = object_desc_chr(t, ',');
2322                         t = object_desc_int(t, o_ptr->to_a);
2323                         t = object_desc_chr(t, b2);
2324                 }
2325
2326                 /* No base armor, but does increase armor */
2327                 else if (o_ptr->to_a)
2328                 {
2329                         t = object_desc_chr(t, ' ');
2330                         t = object_desc_chr(t, b1);
2331                         t = object_desc_int(t, o_ptr->to_a);
2332                         t = object_desc_chr(t, b2);
2333                 }
2334         }
2335
2336         /* Hack -- always show base armor */
2337         else if (show_armour)
2338         {
2339                 t = object_desc_chr(t, ' ');
2340                 t = object_desc_chr(t, b1);
2341                 t = object_desc_num(t, o_ptr->ac);
2342                 t = object_desc_chr(t, b2);
2343         }
2344
2345
2346         /* No more details wanted */
2347         if (mode < 2) goto copyback;
2348
2349
2350         /*
2351          * Hack -- Wands and Staffs have charges.  Make certain how many charges
2352          * a stack of staffs really has is clear. -LM-
2353          */
2354         if (known &&
2355             ((o_ptr->tval == TV_STAFF) ||
2356              (o_ptr->tval == TV_WAND)))
2357         {
2358                 /* Dump " (N charges)" */
2359                 t = object_desc_chr(t, ' ');
2360                 t = object_desc_chr(t, p1);
2361
2362                 /* Clear explaination for staffs. */
2363                 if ((o_ptr->tval == TV_STAFF) && (o_ptr->number > 1))
2364                 {
2365                         t = object_desc_num(t, o_ptr->number);
2366                         t = object_desc_str(t, "x ");
2367                 }
2368                 t = object_desc_num(t, o_ptr->pval);
2369 #ifdef JP
2370                 t = object_desc_str(t, "²óʬ");
2371 #else
2372                 t = object_desc_str(t, " charge");
2373
2374                 if (o_ptr->pval != 1)
2375                 {
2376                         t = object_desc_chr(t, 's');
2377                 }
2378 #endif
2379
2380
2381                 t = object_desc_chr(t, p2);
2382         }
2383         /* Hack -- Rods have a "charging" indicator.  Now that stacks of rods may
2384          * be in any state of charge or discharge, this now includes a number. -LM-
2385          */
2386         else if (known && (o_ptr->tval == TV_ROD))
2387         {
2388                 /* Hack -- Dump " (# charging)" if relevant */
2389                 if (o_ptr->timeout)
2390                 {
2391                         /* Stacks of rods display an exact count of charging rods. */
2392                         if (o_ptr->number > 1)
2393                         {
2394                                 /* Paranoia. */
2395                                 if (k_ptr->pval == 0) k_ptr->pval = 1;
2396
2397                                 /* Find out how many rods are charging, by dividing
2398                                  * current timeout by each rod's maximum timeout.
2399                                  * Ensure that any remainder is rounded up.  Display
2400                                  * very discharged stacks as merely fully discharged.
2401                                  */
2402                                 power = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval;
2403                                 if (power > o_ptr->number) power = o_ptr->number;
2404
2405                                 /* Display prettily. */
2406                                 t = object_desc_str(t, " (");
2407                                 t = object_desc_num(t, power);
2408 #ifdef JP
2409                                 t = object_desc_str(t, "ËÜ ½¼Å¶Ãæ)");
2410 #else
2411                                 t = object_desc_str(t, " charging)");
2412 #endif
2413
2414                         }
2415
2416                         /* "one Rod of Perception (1 charging)" would look tacky. */
2417                         else
2418                         {
2419 #ifdef JP
2420 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2421 #else
2422                                 t = object_desc_str(t, " (charging)");
2423 #endif
2424
2425                         }
2426                 }
2427         }
2428
2429         /* Dump "pval" flags for wearable items */
2430         if (known && (f1 & (TR1_PVAL_MASK)))
2431         {
2432                 /* Start the display */
2433                 t = object_desc_chr(t, ' ');
2434                 t = object_desc_chr(t, p1);
2435
2436                 /* Dump the "pval" itself */
2437                 t = object_desc_int(t, o_ptr->pval);
2438
2439                 /* Do not display the "pval" flags */
2440                 if (f3 & (TR3_HIDE_TYPE))
2441                 {
2442                         /* Nothing */
2443                 }
2444
2445                 /* Speed */
2446                 else if (f1 & (TR1_SPEED))
2447                 {
2448                         /* Dump " to speed" */
2449 #ifdef JP
2450 t = object_desc_str(t, "²Ã®");
2451 #else
2452                         t = object_desc_str(t, " to speed");
2453 #endif
2454
2455                 }
2456
2457                 /* Attack speed */
2458                 else if (f1 & (TR1_BLOWS))
2459                 {
2460                         /* Add " attack" */
2461 #ifdef JP
2462 t = object_desc_str(t, "¹¶·â");
2463 #else
2464                         t = object_desc_str(t, " attack");
2465
2466                         /* Add "attacks" */
2467                         if (ABS(o_ptr->pval) != 1) t = object_desc_chr(t, 's');
2468 #endif
2469
2470                 }
2471
2472                 /* Stealth */
2473                 else if (f1 & (TR1_STEALTH))
2474                 {
2475                         /* Dump " to stealth" */
2476 #ifdef JP
2477 t = object_desc_str(t, "±£Ì©");
2478 #else
2479                         t = object_desc_str(t, " to stealth");
2480 #endif
2481
2482                 }
2483
2484                 /* Search */
2485                 else if (f1 & (TR1_SEARCH))
2486                 {
2487                         /* Dump " to searching" */
2488 #ifdef JP
2489 t = object_desc_str(t, "õº÷");
2490 #else
2491                         t = object_desc_str(t, " to searching");
2492 #endif
2493
2494                 }
2495
2496                 /* Infravision */
2497                 else if (f1 & (TR1_INFRA))
2498                 {
2499                         /* Dump " to infravision" */
2500 #ifdef JP
2501 t = object_desc_str(t, "ÀÖ³°Àþ»ëÎÏ");
2502 #else
2503                         t = object_desc_str(t, " to infravision");
2504 #endif
2505
2506                 }
2507
2508                 /* Tunneling */
2509                 else if (f1 & (TR1_TUNNEL))
2510                 {
2511                         /* Nothing */
2512                 }
2513
2514                 /* Finish the display */
2515                 t = object_desc_chr(t, p2);
2516         }
2517
2518         /* Hack -- Process Lanterns/Torches */
2519         if (known && (o_ptr->tval == TV_LITE) && (!(artifact_p(o_ptr) || (o_ptr->sval == SV_LITE_FEANOR))))
2520         {
2521                 /* Hack -- Turns of light for normal lites */
2522 #ifdef JP
2523 t = object_desc_str(t, "(");
2524 #else
2525                 t = object_desc_str(t, " (with ");
2526 #endif
2527
2528                 if (o_ptr->name2 == EGO_LITE_LONG) t = object_desc_num(t, o_ptr->xtra4*2);
2529                 else t = object_desc_num(t, o_ptr->xtra4);
2530 #ifdef JP
2531 t = object_desc_str(t, "¥¿¡¼¥ó¤Î¼÷Ì¿)");
2532 #else
2533                 t = object_desc_str(t, " turns of light)");
2534 #endif
2535
2536         }
2537
2538
2539         /* Indicate charging objects, but not rods. */
2540         if (known && o_ptr->timeout && o_ptr->tval != TV_ROD)
2541         {
2542                 /* Hack -- Dump " (charging)" if relevant */
2543 #ifdef JP
2544 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2545 #else
2546                 t = object_desc_str(t, " (charging)");
2547 #endif
2548
2549         }
2550
2551
2552         /* No more details wanted */
2553         if (mode < 3) goto copyback;
2554
2555
2556         /* No inscription yet */
2557         tmp_val2[0] = '\0';
2558
2559         /* Use the game-generated "feeling" otherwise, if available */
2560         if (o_ptr->feeling)
2561         {
2562                 strcpy(tmp_val2, game_inscriptions[o_ptr->feeling]);
2563         }
2564
2565         /* Note "cursed" if the item is known to be cursed */
2566         else if (cursed_p(o_ptr) && (known || (o_ptr->ident & (IDENT_SENSE))))
2567         {
2568 #ifdef JP
2569 strcpy(tmp_val2, "¼ö¤ï¤ì¤Æ¤¤¤ë");
2570 #else
2571                 strcpy(tmp_val2, "cursed");
2572 #endif
2573
2574         }
2575  
2576         /* Note "unidentified" if the item is unidentified */
2577         else if ((o_ptr->tval == TV_RING || o_ptr->tval == TV_AMULET
2578                   || o_ptr->tval == TV_LITE || o_ptr->tval == TV_FIGURINE)
2579                  && object_aware_p(o_ptr) && !object_known_p(o_ptr)
2580                  && !((o_ptr->ident)&IDENT_SENSE))
2581         {
2582 #ifdef JP
2583 strcpy(tmp_val2, "̤´ÕÄê");
2584 #else
2585                 strcpy(tmp_val2, "unidentified");
2586 #endif
2587         }
2588
2589         /* Mega-Hack -- note empty wands/staffs */
2590         else if (!known && (o_ptr->ident & (IDENT_EMPTY)))
2591         {
2592 #ifdef JP
2593 strcpy(tmp_val2, "¶õ");
2594 #else
2595                 strcpy(tmp_val2, "empty");
2596 #endif
2597
2598         }
2599
2600         /* Note "tried" if the object has been tested unsuccessfully */
2601         else if (!aware && object_tried_p(o_ptr))
2602         {
2603 #ifdef JP
2604 strcpy(tmp_val2, "̤ȽÌÀ");
2605 #else
2606                 strcpy(tmp_val2, "tried");
2607 #endif
2608
2609         }
2610
2611         /* Use the standard inscription if available */
2612         if (o_ptr->inscription)
2613         {
2614                 char *u = tmp_val2;
2615
2616                 if (tmp_val2[0]) strcat(tmp_val2, ", ");
2617
2618                 strcat(tmp_val2, quark_str(o_ptr->inscription));
2619
2620                 for (; *u && (*u != '#'); u++);
2621
2622                 *u = '\0';
2623         }
2624
2625         /* Note the discount, if any */
2626         else if (o_ptr->discount && !(tmp_val2[0]))
2627         {
2628                 (void)object_desc_num(tmp_val2, o_ptr->discount);
2629 #ifdef JP
2630                 strcat(tmp_val2, "%°ú¤­");
2631 #else
2632                 strcat(tmp_val2, "% off");
2633 #endif
2634
2635         }
2636
2637         /* Append the inscription, if any */
2638         if (tmp_val2[0])
2639         {
2640                 /* Append the inscription */
2641                 t = object_desc_chr(t, ' ');
2642                 t = object_desc_chr(t, c1);
2643                 t = object_desc_str(t, tmp_val2);
2644                 t = object_desc_chr(t, c2);
2645         }
2646
2647 copyback:
2648         t = tmp_val;
2649         for (i = 0; i < MAX_NLEN-2; i++)
2650         {
2651 #ifdef JP
2652                 if (iskanji(*(t+i)))
2653                 {
2654                         *(buf+i) = *(t+i);
2655                         i++;
2656                 }
2657 #endif
2658                 *(buf+i) = *(t+i);
2659         }
2660         if (i == MAX_NLEN-2)
2661         {
2662 #ifdef JP
2663                 if (iskanji(*(t+i)))
2664                         *(buf+i) = '\0';
2665                 else
2666 #endif
2667                         *(buf+i) = *(t+i);
2668         }
2669         *(buf+MAX_NLEN-1) = '\0';
2670 }
2671