OSDN Git Service

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