1 /* Purpose: Object flavor code */
4 * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
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.
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".
22 #define TERM_MULTI TERM_VIOLET
26 * Max sizes of the following arrays
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) */
39 * Rings (adjectives and colors)
42 static cptr ring_adj[MAX_ROCKS] =
44 "Alexandrite", "Amethyst", "Aquamarine", "Azurite", "Beryl",
45 "Bloodstone", "Calcite", "Carnelian", "Corundum", "Diamond",
46 "Emerald", "Fluorite", "Garnet", "Granite", "Jade",
47 "Jasper", "Lapis Lazuli", "Malachite", "Marble", "Moonstone",
48 "Onyx", "Opal", "Pearl", "Quartz", "Quartzite",
49 "Rhodonite", "Ruby", "Sapphire", "Tiger Eye", "Topaz",
50 "Turquoise", "Zircon", "Platinum", "Bronze", "Gold",
51 "Obsidian", "Silver", "Tortoise Shell", "Mithril", "Jet",
52 "Engagement", "Adamantite",
53 "Wire", "Dilithium", "Bone", "Wooden",
54 "Spikard", "Serpent", "Wedding", "Double",
55 "Plain", "Brass", "Scarab","Shining",
56 "Rusty","Transparent", "Steel", "Tanzanite",
61 static cptr J_ring_adj[MAX_ROCKS] =
63 "¶âÎÐÀФÎ","¥¢¥á¥¸¥¹¥È¤Î","¥¢¥¯¥¢¥Þ¥ê¥ó¤Î","¤á¤Î¤¦¤Î","ÎÐÃìÀФÎ",
64 "·ì¶Ì¿ï¤Î","Êý²òÀФÎ","ÀÖ¤á¤Î¤¦¤Î","¹Ë¶Ì¤Î","¥À¥¤¥¢¥â¥ó¥É¤Î",
65 "¥¨¥á¥é¥ë¥É¤Î","¥Û¥¿¥ëÀФÎ","¥¬¡¼¥Í¥Ã¥È¤Î","¸æ±ÆÀФÎ","¤Ò¤¹¤¤¤Î",
66 "¥¸¥ã¥¹¥Ñ¡¼¤Î","ÀÄÎÜÍþ¤Î","¥¯¥¸¥ã¥¯ÀФÎ","ÂçÍýÀФÎ","¥à¡¼¥ó¥¹¥È¡¼¥ó¤Î",
67 "¼Ê¤á¤Î¤¦¤Î","¥ª¥Ñ¡¼¥ë¤Î","¿¿¼î¤Î","¿å¾½¤Î","ÀбѴä¤Î",
68 "¥¶¥¯¥íÀФÎ","¥ë¥Ó¡¼¤Î","¥µ¥Õ¥¡¥¤¥¢¤Î","¥¿¥¤¥¬¡¼¥¢¥¤¤Î","¥È¥Ñ¡¼¥º¤Î",
69 "¥È¥ë¥³ÀФÎ","¥¸¥ë¥³¥ó¤Î","¥×¥é¥Á¥Ê¤Î","¥Ö¥í¥ó¥º¤Î","¶â¤Î",
70 "¹õÍËÀФÎ","¶ä¤Î","¤Ù¤Ã¹Ã¤Î","¥ß¥¹¥ê¥ë¤Î","¹õ¶Ì¤Î",
71 "º§Ìó","¥¢¥À¥Þ¥ó¥¿¥¤¥È¤Î",
72 "¿Ë¶â¤Î","¥Ç¥£¥ê¥·¥¦¥à¤Î","¹ü¤Î","ÌÚ¤Î",
73 "¥¹¥Ô¥«¤Î" /*nuke me*/ ,"¼Ø¤Î","·ëº§","Æó½Å¤Î",
74 "¾þ¤ê¤Î¤Ê¤¤","ÀÄƼ¤Î","¥¹¥«¥é¥Ù¤Î" ,"µ±¤¯",
75 "»¬¤Ó¤¿","Æ©ÌÀ¤Ê","¹ÝÅ´¤Î","¥¿¥ó¥¶¥Ê¥¤¥È¤Î",
79 static byte ring_col[MAX_ROCKS] =
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,
99 * Amulets (adjectives and colors)
101 static cptr amulet_adj[MAX_AMULETS] =
103 "Amber", "Driftwood", "Coral", "Agate", "Ivory",
104 "Obsidian", "Bone", "Brass", "Bronze", "Pewter",
105 "Tortoise Shell", "Golden", "Azure", "Crystal", "Silver",
106 "Copper", "Swastika", "Platinum","Runed", "Rusty",
107 "Curved", "Dragon's claw", "Rosary", "Jade", "Mithril",
112 static cptr J_amulet_adj[MAX_AMULETS] =
114 "àèàá¤Î","ήÌÚ¤Î","¥µ¥ó¥´¤Î","¤á¤Î¤¦¤Î","¾Ý²ç¤Î",
115 "¹õÍËÀФÎ","¹ü¤Î","¿¿ï«¤Î","ÀÄƼ¤Î","¤·¤í¤á¤Î",
116 "¤Ù¤Ã¹Ã¤Î","¶â¤Î","ÎÜÍþ¤Î","¿å¾½¤Î","¶ä¤Î",
117 "Ƽ¤Î","ÒĤÎ", "¥×¥é¥Á¥Ê¤Î", "¥ë¡¼¥ó¤¬¹ï¤Þ¤ì¤¿","»¬¤Ó¤¿",
118 "¶Ê¤¬¤Ã¤¿", "¥É¥é¥´¥ó¤ÎÄÞ¤Î", "¿ô¼î¤Î", "¤Ò¤¹¤¤¤Î", "¥ß¥¹¥ê¥ë¤Î",
122 static byte amulet_col[MAX_AMULETS] =
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,
134 * Staffs (adjectives and colors)
136 static cptr staff_adj[MAX_WOODS] =
138 "Aspen", "Balsa", "Banyan", "Birch", "Cedar",
139 "Cottonwood", "Cypress", "Dogwood", "Elm", "Eucalyptus",
140 "Hemlock", "Hickory", "Ironwood", "Locust", "Mahogany",
141 "Maple", "Mulberry", "Oak", "Pine", "Redwood",
142 "Rosewood", "Spruce", "Sycamore", "Teak", "Walnut",
143 "Mistletoe", "Hawthorn", "Bamboo", "Silver", "Runed",
144 "Golden", "Ashen", "Ivory","Gnarled"/*,"Willow"*/
148 static cptr J_staff_adj[MAX_WOODS] =
150 "¥Ý¥×¥é¤Î","¥Ð¥ë¥µ¤Î","¥Ð¥ó¥ä¥ó¤Î","¥«¥Ð¤Î","À¾ÍÎ¥¹¥®¤Î",
151 "ÛؤÎ","¥¤¥È¥¹¥®¤Î","¥ß¥º¥¤Î","¥Ë¥ì¤Î","¥æ¡¼¥«¥ê¤Î",
152 "¥Ä¥¬¤Î","¥Ö¥Ê¤Î","¹õÃɤÎ","¥¢¥«¥·¥¢¤Î","¥Þ¥Û¥¬¥Ë¡¼¤Î",
153 "¥«¥¨¥Ç¤Î","¥¯¥ï¤Î","¥«¥·¤Î","¾¾¤Î","¿ù¤Î",
154 "»çÃɤÎ","¥¨¥¾¥Þ¥Ä¤Î","¥¤¥Á¥¸¥¯¤Î","¥Á¡¼¥¯¤Î","¥¯¥ë¥ß¤Î",
155 "¥ä¥É¥ê¥®¤Î","¥µ¥ó¥¶¥·¤Î","ÃݤÎ","¶ä¤Î","¥ë¡¼¥ó¤Î",
156 "¶â¤Î","¥È¥Í¥ê¥³¤Î", "¾Ý²ç¤Î", "·î·Ë¼ù¤Î"
159 static byte staff_col[MAX_WOODS] =
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
172 * Wands (adjectives and colors)
174 static cptr wand_adj[MAX_METALS] =
176 "Aluminum", "Cast Iron", "Chromium", "Copper", "Gold",
177 "Iron", "Magnesium", "Molybdenum", "Nickel", "Rusty",
178 "Silver", "Steel", "Tin", "Titanium", "Tungsten",
179 "Zirconium", "Zinc", "Aluminum-Plated", "Copper-Plated", "Gold-Plated",
180 "Nickel-Plated", "Silver-Plated", "Steel-Plated", "Tin-Plated", "Zinc-Plated",
181 "Mithril-Plated", "Mithril", "Runed", "Bronze", "Brass",
182 "Platinum", "Lead","Lead-Plated", "Ivory" , "Adamantite",
183 "Uridium", "Long", "Short", "Hexagonal", "Carbonized"
187 static cptr J_wand_adj[MAX_METALS] =
189 "¥¢¥ë¥ß¤Î","ÃòÅ´¤Î","¥¯¥í¥à¤Î","Ƽ¤Î","¶â¤Î",
190 "Å´¤Î","¥Þ¥°¥Í¥·¥¦¥à¤Î","¥â¥ê¥Ö¥Ç¥ó¤Î","¥Ë¥Ã¥±¥ë¤Î","»¬¤Ó¤¿",
191 "¶ä¤Î","¹ÝÅ´¤Î","¥Ö¥ê¥¤Î","¥Á¥¿¥ó¤Î","¥¿¥ó¥°¥¹¥Æ¥ó¤Î",
192 "¥¸¥ë¥³¥ó¤Î","°¡±ô¤Î","¥¢¥ë¥ß¥á¥Ã¥¤Î","Ƽ¥á¥Ã¥¤Î","¶â¥á¥Ã¥¤Î",
193 "ÇòƼ¥á¥Ã¥¤Î","¶ä¥á¥Ã¥¤Î","Å´¥á¥Ã¥¤Î","¥¹¥º¥á¥Ã¥¤Î","°¡±ô¥á¥Ã¥¤Î",
194 "¥ß¥¹¥ê¥ë¥á¥Ã¥¤Î","¥ß¥¹¥ê¥ë¤Î","¥ë¡¼¥ó¤¬¹ï¤Þ¤ì¤¿","ÀÄƼ¤Î","¿¿ï«¤Î",
195 "¥×¥é¥Á¥Ê¤Î","±ô¤Î","±ô¥á¥Ã¥¤Î","¾Ý²ç¤Î","¥¢¥À¥Þ¥ó¥¿¥¤¥È¤Î",
196 "¥¤¥ê¥Â¥¦¥à¤Î","Ť¤","û¤¤","Ï»³Ñ·Á¤Î", "úÁǤÎ"
199 static byte wand_col[MAX_METALS] =
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
213 * Rods (adjectives and colors).
214 * Efficiency -- copied from wand arrays
217 static cptr rod_adj[MAX_METALS];
220 static cptr J_rod_adj[MAX_METALS];
222 static byte rod_col[MAX_METALS];
226 * Mushrooms (adjectives and colors)
229 static cptr food_adj[MAX_SHROOM] =
231 "Blue", "Black", "Black Spotted", "Brown", "Dark Blue",
232 "Dark Green", "Dark Red", "Yellow", "Furry", "Green",
233 "Grey", "Light Blue", "Light Green", "Violet", "Red",
234 "Slimy", "Tan", "White", "White Spotted", "Wrinkled",
238 static cptr J_food_adj[MAX_SHROOM] =
240 "ÀĤ¤","¹õ¤¤","¹õÈäÎ","Ã㿧¤Î","·²ÀĤÎ",
241 "¿¼ÎФÎ","¹È¿§¤Î","²«¿§¤¤","Âݤष¤¿","ÎФÎ",
242 "¥°¥ì¡¼¤Î","¶õ¿§¤Î","²«ÎФÎ","¥¹¥ß¥ì¿§¤Î","ÀÖ¤¤",
243 "¤Í¤Ð¤Í¤Ð¤·¤¿","²«³ì¿§¤Î","Çò¤¤","ÇòÈäÎ","¤·¤ï¤·¤ï¤Î",
246 static byte food_col[MAX_SHROOM] =
248 TERM_BLUE, TERM_L_DARK, TERM_L_DARK, TERM_UMBER, TERM_BLUE,
249 TERM_GREEN, TERM_RED, TERM_YELLOW, TERM_L_WHITE, TERM_GREEN,
250 TERM_SLATE, TERM_L_BLUE, TERM_L_GREEN, TERM_VIOLET, TERM_RED,
251 TERM_SLATE, TERM_L_UMBER, TERM_WHITE, TERM_WHITE, TERM_UMBER
256 * Color adjectives and colors, for potions.
257 * Hack -- The first four entries are hard-coded.
258 * (water, apple juice, slime mold juice, something)
261 static cptr potion_adj[MAX_COLORS] =
263 "Clear", "Light Brown", "Icky Green", "xxx",
264 "Azure", "Blue", "Blue Speckled", "Black", "Brown", "Brown Speckled",
265 "Bubbling", "Chartreuse", "Cloudy", "Copper Speckled", "Crimson", "Cyan",
266 "Dark Blue", "Dark Green", "Dark Red", "Gold Speckled", "Green",
267 "Green Speckled", "Grey", "Grey Speckled", "Hazy", "Indigo",
268 "Light Blue", "Light Green", "Magenta", "Metallic Blue", "Metallic Red",
269 "Metallic Green", "Metallic Purple", "Misty", "Orange", "Orange Speckled",
270 "Pink", "Pink Speckled", "Puce", "Purple", "Purple Speckled",
271 "Red", "Red Speckled", "Silver Speckled", "Smoky", "Tangerine",
272 "Violet", "Vermilion", "White", "Yellow", "Violet Speckled",
273 "Pungent", "Clotted Red", "Viscous Pink", "Oily Yellow", "Gloopy Green",
274 "Shimmering", "Coagulated Crimson", "Yellow Speckled", "Gold",
275 "Manly", "Stinking", "Oily Black", "Ichor", "Ivory White", "Sky Blue",
276 "Gray", "Silver", "Bronze", "Flashing",
280 static cptr J_potion_adj[MAX_COLORS] =
282 "Æ©ÌÀ¤Ê","ÇöÃ㿧¤Î","¤è¤É¤ó¤ÀÎФÎ","¼¿¹õ¤Î",
283 "º°ÊˤÎ","ÀĤ¤","ÀÄÈäÎ","¹õ¤¤","Ã㿧¤Î","ÃãÈäÎ",
284 "Ë¢¤À¤Ã¤¿","Çö²«Î理Î","Âù¤Ã¤¿","ƼÈäÎ","¹È¿§¤Î","¥·¥¢¥ó¿§¤Î",
285 "·²ÀÄ¿§¤Î","¿¼¤¤ÎФÎ","¿¼¤¤ÀÖ¿§¤Î","¶âÈäÎ","Î理Î",
286 "ÎÐÈäÎ","³¥¿§¤Î","³¥ÈäÎ","¤Ü¤ä¤±¤¿¿§¤Î","Íõ¿§¤Î",
287 "Çö¤¤ÀÄ¿§¤Î","Çö¤¤Î理Î","¥Þ¥¼¥ó¥¿¿§¤Î","ÀĤ¯µ±¤¯","ÀÖ¤¯µ±¤¯",
288 "ÎФ˵±¤¯","»ç¤Ëµ±¤¯","̸¾õ¤Î","¥ª¥ì¥ó¥¸¿§¤Î","¥ª¥ì¥ó¥¸ÈäÎ",
289 "¥Ô¥ó¥¯¿§¤Î","¥Ô¥ó¥¯ÈäÎ","¹õ³ì¿§¤Î","»ç¿§¤Î","¤¦¤¹¤¤»çÈäÎ",
290 "ÀÖ¤¤","ÀÖÈäÎ","¶äÈäÎ","±ì¤Ã¤¿","Üô¿§¤Î",
291 "¥¹¥ß¥ì¿§¤Î","¼ë¿§¤Î","Çò¤¤","²«¿§¤¤", "»çÈäÎ",
292 "»É·ã½¤Î¤¹¤ë","¤è¤É¤ó¤ÀÀÖ¤Î","¥É¥í¥É¥í¤Î","¤Í¤Ð¤Ã¤¿²«¿§¤Î","°ÅÎ理Î",
293 "µ±¤¯","¤Í¤Ð¤Ã¤¿¿¼¹È¤Î","²«ÈäÎ","¶â¿§¤Î",
294 "Ã˽¤¤" /*nuke me*/,"°½¤Î¤¹¤ë","¹õÌý¿§¤Î","ǾÞù¤Î",
295 "¾Ý²ç¿§¤Î","¶õ¿§¤Î", "¤Í¤º¤ß¿§¤Î", "¶ä¿§¤Î", "ÀÖƼ¿§¤Î",
299 static byte potion_col[MAX_COLORS] =
301 TERM_WHITE, TERM_L_UMBER, TERM_GREEN, 0,
302 TERM_L_BLUE, TERM_BLUE, TERM_BLUE, TERM_L_DARK, TERM_UMBER, TERM_UMBER,
303 TERM_L_WHITE, TERM_L_GREEN, TERM_WHITE, TERM_L_UMBER, TERM_RED, TERM_L_BLUE,
304 TERM_BLUE, TERM_GREEN, TERM_RED, TERM_YELLOW, TERM_GREEN,
305 TERM_GREEN, TERM_SLATE, TERM_SLATE, TERM_L_WHITE, TERM_VIOLET,
306 TERM_L_BLUE, TERM_L_GREEN, TERM_RED, TERM_BLUE, TERM_RED,
307 TERM_GREEN, TERM_VIOLET, TERM_L_WHITE, TERM_ORANGE, TERM_ORANGE,
308 TERM_L_RED, TERM_L_RED, TERM_VIOLET, TERM_VIOLET, TERM_VIOLET,
309 TERM_RED, TERM_RED, TERM_L_WHITE, TERM_L_DARK, TERM_ORANGE,
310 TERM_VIOLET, TERM_RED, TERM_WHITE, TERM_YELLOW, TERM_VIOLET,
311 TERM_L_RED, TERM_RED, TERM_L_RED, TERM_YELLOW, TERM_GREEN,
312 TERM_MULTI, TERM_RED, TERM_YELLOW, TERM_YELLOW,
313 TERM_L_UMBER, TERM_UMBER, TERM_L_DARK, TERM_RED,
314 TERM_WHITE, TERM_L_BLUE, TERM_L_WHITE, TERM_WHITE, TERM_RED,
320 * Syllables for scrolls (must be 1-4 letters each)
324 static cptr J_syllables[MAX_SYLLABLES] =
326 "Å·", "ÃÏ", "̵", "ÍÑ", "°ì", "Åá", "ξ", "ÃÇ",
327 "°á", "Ë¥", "Æü", "Àé", "½©", "Ëþ", "¿È", "ÁÏ",
328 "áØ", "¼·", "ž", "Ȭ", "ÅÝ", "²é", "¿Å",
329 "¾¨", "ÃÀ", "µ¯", "»à", "²ó", "À¸", "ʸ",
330 "Éð", "Æ»", "ε", "Ƭ", "¼Ø", "Èø", "ñ", "Åá", "ľ", "Æþ",
331 "¿Ê", "Âà", "¸Þ", "¡", "Ï»", "ç¥", "Âç", "»³", "ÌÄ",
332 "Æ°", "É÷", "ÎÓ", "²Ð", "Àä", "ÂÎ", "Ì¿", "»Í",
333 "ÌÌ", "Á¿", "²Î", "´°", "Á´", "·ç", "Ä·", "ÎÂ",
334 "ìí", "î½", "òµ", "Ì¥", "ò³", "ò´", "½Ä",
335 "²£", "¿Ô", "¿À", "½Ð", "µ´", "Ë×", "²¹", "¸Î", "ÃÎ",
336 "¿·", "½Õ", "²Æ", "Åß", "½ã", "¿¿", "¹¤", "¶½",
337 "Ì£", "ÄÅ", "³Î", "Èæ", "¶ì", "¿´", "»´", "߸",
338 "Ç°", "ȯ", "Á°", "Âå", "̤", "ʹ", "¶õ", "¸å",
339 "Ú¼", "¶â", "¿¹", "Íå", "Ëü", "¾Ý", "ÊÑ", "²½",
340 "½½", "Ãæ", "Ȭ", "¶å", "¿Í", "¿§", "»î", "¹Ô",
341 "ºø", "¸í", "»ö", "¼Â", "º¬", "µÛ", "¼ý", "¹ç",
342 "Ê»", "Á´", "¹ñ", "À©", "ÇÆ", "¾Æ", "Æù", "Äê",
343 "¿©", "¹ü", "²ç", "Ìø", "Èô", "æÆ", "Éõ", "°õ",
344 "¼À", "Íð", "Éð", "¾", "·Ú", "Ǧ", "·õ", "ǽ",
345 "À»", "¼Ù", "¼ö", "¼±", "¸¸", "´¶", "ÆÇ", "°Ç",
349 static cptr syllables[MAX_SYLLABLES] =
351 "a", "ab", "ag", "aks", "ala", "an", "ankh", "app",
352 "arg", "arze", "ash", "aus", "ban", "bar", "bat", "bek",
353 "bie", "bin", "bit", "bjor", "blu", "bot", "bu",
354 "byt", "comp", "con", "cos", "cre", "dalf", "dan",
355 "den", "der", "doe", "dok", "eep", "el", "eng", "er", "ere", "erk",
356 "esh", "evs", "fa", "fid", "flit", "for", "fri", "fu", "gan",
357 "gar", "glen", "gop", "gre", "ha", "he", "hyd", "i",
358 "ing", "ion", "ip", "ish", "it", "ite", "iv", "jo",
359 "kho", "kli", "klis", "la", "lech", "man", "mar",
360 "me", "mi", "mic", "mik", "mon", "mung", "mur", "nag", "nej",
361 "nelg", "nep", "ner", "nes", "nis", "nih", "nin", "o",
362 "od", "ood", "org", "orn", "ox", "oxy", "pay", "pet",
363 "ple", "plu", "po", "pot", "prok", "re", "rea", "rhov",
364 "ri", "ro", "rog", "rok", "rol", "sa", "san", "sat",
365 "see", "sef", "seh", "shu", "ski", "sna", "sne", "snik",
366 "sno", "so", "sol", "sri", "sta", "sun", "ta", "tab",
367 "tem", "ther", "ti", "tox", "trol", "tue", "turs", "u",
368 "ulk", "um", "un", "uni", "ur", "val", "viv", "vly",
369 "vom", "wah", "wed", "werg", "wex", "whon", "wun", "x",
370 "yerg", "yp", "zun", "tri", "blaa", "jah", "bul", "on",
377 * Hold the titles of scrolls, 6 to 14 characters each
378 * Also keep an array of scroll colors (always WHITE for now)
380 static char scroll_adj[MAX_TITLES][16];
382 static byte scroll_col[MAX_TITLES];
386 * Certain items, if aware, are known instantly
387 * This function is used only by "flavor_init()"
389 static bool object_easy_know(int i)
391 object_kind *k_ptr = &k_info[i];
393 /* Analyze the "tval" */
398 case TV_SORCERY_BOOK:
404 case TV_ENCHANT_BOOK:
407 case TV_HISSATSU_BOOK:
423 /* All Food, Potions, Scrolls, Rods */
439 * Certain items have a flavor
440 * This function is used only by "flavor_init()"
442 static bool object_flavor(int k_idx)
444 object_kind *k_ptr = &k_info[k_idx];
446 /* Analyze the item */
451 return (0x80 + amulet_col[k_ptr->sval]);
456 if ((k_ptr->sval == SV_RING_POWER) || (k_ptr->sval == SV_RING_AHO)) return (0x90 + TERM_YELLOW);
457 else return (0x90 + ring_col[k_ptr->sval]);
462 return (0xA0 + staff_col[k_ptr->sval]);
467 return (0xB0 + wand_col[k_ptr->sval]);
472 return (0xC0 + rod_col[k_ptr->sval]);
477 return (0xD0 + scroll_col[k_ptr->sval]);
482 return (0xE0 + potion_col[k_ptr->sval]);
487 if (k_ptr->sval < SV_FOOD_MIN_FOOD)
489 return (0xF0 + food_col[k_ptr->sval]);
501 void get_table_name(char *out_string)
505 strcpy(out_string, "¡Ø");
506 get_rnd_line("aname_j.txt", 1, Syllable);
507 strcat(out_string, Syllable);
508 get_rnd_line("aname_j.txt", 2, Syllable);
509 strcat(out_string, Syllable);
510 strcat(out_string, "¡Ù");
512 int testcounter = randint(3) + 1;
514 strcpy(out_string, "'");
518 while (testcounter--)
519 strcat(out_string, syllables[rand_int(MAX_SYLLABLES)]);
524 testcounter = randint(2) + 1;
525 while (testcounter--)
527 (void)get_rnd_line("elvish.txt", 0, Syllable);
528 strcat(out_string, Syllable);
532 out_string[1] = toupper(out_string[1]);
534 strcat(out_string, "'");
538 out_string[18] = '\0';
545 * Prepare the "variable" part of the "k_info" array.
547 * The "color"/"metal"/"type" of an item is its "flavor".
548 * For the most part, flavors are assigned randomly each game.
550 * Initialize descriptions for the "colored" objects, including:
551 * Rings, Amulets, Staffs, Wands, Rods, Food, Potions, Scrolls.
553 * The first 4 entries for potions are fixed (Water, Apple Juice,
554 * Slime Mold Juice, Unused Potion).
556 * Scroll titles are always between 6 and 14 letters long. This is
557 * ensured because every title is composed of whole words, where every
558 * word is from 1 to 8 letters long (one or two syllables of 1 to 4
559 * letters each), and that no scroll is finished until it attempts to
560 * grow beyond 15 letters. The first time this can happen is when the
561 * current title has 6 letters and the new word has 8 letters, which
562 * would result in a 6 letter scroll title.
564 * Duplicate titles are avoided by requiring that no two scrolls share
565 * the same first four letters (not the most efficient method, and not
566 * the least efficient method, but it will always work).
568 * Hack -- make sure everything stays the same for each saved game
569 * This is accomplished by the use of a saved "random seed", as in
570 * "town_gen()". Since no other functions are called while the special
571 * seed is in effect, so this function is pretty "safe".
573 * Note that the "hacked seed" may provide an RNG with alternating parity!
575 void flavor_init(void)
584 /* Hack -- Use the "simple" RNG */
587 /* Hack -- Induce consistant flavors */
588 Rand_value = seed_flavor;
591 /* Efficiency -- Rods/Wands share initial array */
592 for (i = 0; i < MAX_METALS; i++)
594 rod_adj[i] = wand_adj[i];
596 J_rod_adj[i] = J_wand_adj[i];
598 rod_col[i] = wand_col[i];
602 /* Rings have "ring colors" */
603 for (i = 0; i < MAX_ROCKS; i++)
605 j = rand_int(MAX_ROCKS);
606 temp_adj = ring_adj[i];
607 ring_adj[i] = ring_adj[j];
608 ring_adj[j] = temp_adj;
610 temp_adj = J_ring_adj[i];
611 J_ring_adj[i] = J_ring_adj[j];
612 J_ring_adj[j] = temp_adj;
614 temp_col = ring_col[i];
615 ring_col[i] = ring_col[j];
616 ring_col[j] = temp_col;
619 /* Amulets have "amulet colors" */
620 for (i = 0; i < MAX_AMULETS; i++)
622 j = rand_int(MAX_AMULETS);
623 temp_adj = amulet_adj[i];
624 amulet_adj[i] = amulet_adj[j];
625 amulet_adj[j] = temp_adj;
627 temp_adj = J_amulet_adj[i];
628 J_amulet_adj[i] = J_amulet_adj[j];
629 J_amulet_adj[j] = temp_adj;
631 temp_col = amulet_col[i];
632 amulet_col[i] = amulet_col[j];
633 amulet_col[j] = temp_col;
637 for (i = 0; i < MAX_WOODS; i++)
639 j = rand_int(MAX_WOODS);
640 temp_adj = staff_adj[i];
641 staff_adj[i] = staff_adj[j];
642 staff_adj[j] = temp_adj;
644 temp_adj = J_staff_adj[i];
645 J_staff_adj[i] = J_staff_adj[j];
646 J_staff_adj[j] = temp_adj;
648 temp_col = staff_col[i];
649 staff_col[i] = staff_col[j];
650 staff_col[j] = temp_col;
654 for (i = 0; i < MAX_METALS; i++)
656 j = rand_int(MAX_METALS);
657 temp_adj = wand_adj[i];
658 wand_adj[i] = wand_adj[j];
659 wand_adj[j] = temp_adj;
661 temp_adj = J_wand_adj[i];
662 J_wand_adj[i] = J_wand_adj[j];
663 J_wand_adj[j] = temp_adj;
665 temp_col = wand_col[i];
666 wand_col[i] = wand_col[j];
667 wand_col[j] = temp_col;
671 for (i = 0; i < MAX_METALS; i++)
673 j = rand_int(MAX_METALS);
674 temp_adj = rod_adj[i];
675 rod_adj[i] = rod_adj[j];
676 rod_adj[j] = temp_adj;
678 temp_adj = J_rod_adj[i];
679 J_rod_adj[i] = J_rod_adj[j];
680 J_rod_adj[j] = temp_adj;
682 temp_col = rod_col[i];
683 rod_col[i] = rod_col[j];
684 rod_col[j] = temp_col;
687 /* Foods (Mushrooms) */
688 for (i = 0; i < MAX_SHROOM; i++)
690 j = rand_int(MAX_SHROOM);
691 temp_adj = food_adj[i];
692 food_adj[i] = food_adj[j];
693 food_adj[j] = temp_adj;
695 temp_adj = J_food_adj[i];
696 J_food_adj[i] = J_food_adj[j];
697 J_food_adj[j] = temp_adj;
699 temp_col = food_col[i];
700 food_col[i] = food_col[j];
701 food_col[j] = temp_col;
705 for (i = 4; i < MAX_COLORS; i++)
707 j = rand_int(MAX_COLORS - 4) + 4;
708 temp_adj = potion_adj[i];
709 potion_adj[i] = potion_adj[j];
710 potion_adj[j] = temp_adj;
712 temp_adj = J_potion_adj[i];
713 J_potion_adj[i] = J_potion_adj[j];
714 J_potion_adj[j] = temp_adj;
716 temp_col = potion_col[i];
717 potion_col[i] = potion_col[j];
718 potion_col[j] = temp_col;
721 /* Scrolls (random titles, always white) */
722 for (i = 0; i < MAX_TITLES; i++)
724 /* Get a new title */
731 /* Start a new title */
734 /* Collect words until done */
741 /* Start a new word */
744 /* Choose one or two syllables */
745 s = ((rand_int(100) < 30) ? 1 : 2);
747 /* Add a one or two syllable word */
748 for (q = 0; q < s; q++)
750 /* Add the syllable */
752 strcat(tmp, J_syllables[rand_int(MAX_SYLLABLES)]);
754 strcat(tmp, syllables[rand_int(MAX_SYLLABLES)]);
758 /* Stop before getting too long */
759 if (strlen(buf) + 1 + strlen(tmp) > 15) break;
769 strcpy(scroll_adj[i], buf+1);
774 /* Check for "duplicate" scroll titles */
775 for (j = 0; j < i; j++)
777 cptr hack1 = scroll_adj[j];
778 cptr hack2 = scroll_adj[i];
780 /* Compare first four characters */
781 if (*hack1++ != *hack2++) continue;
782 if (*hack1++ != *hack2++) continue;
783 if (*hack1++ != *hack2++) continue;
784 if (*hack1++ != *hack2++) continue;
793 /* Break when done */
797 /* All scrolls are white */
798 scroll_col[i] = TERM_WHITE;
802 /* Hack -- Use the "complex" RNG */
805 /* Analyze every object */
806 for (i = 1; i < max_k_idx; i++)
808 object_kind *k_ptr = &k_info[i];
810 /* Skip "empty" objects */
811 if (!k_ptr->name) continue;
813 /* Extract "flavor" (if any) */
814 k_ptr->flavor = object_flavor(i);
816 /* No flavor yields aware */
817 if (!k_ptr->flavor) k_ptr->aware = TRUE;
819 /* Check for "easily known" */
820 k_ptr->easy_know = object_easy_know(i);
826 * Print a char "c" into a string "t", as if by sprintf(t, "%c", c),
827 * and return a pointer to the terminator (t + 1).
829 static char *object_desc_chr(char *t, char c)
843 * Print a string "s" into a string "t", as if by strcpy(t, s),
844 * and return a pointer to the terminator.
846 static char *object_desc_str(char *t, cptr s)
848 /* Copy the string */
849 while (*s) *t++ = *s++;
861 * Print an unsigned number "n" into a string "t", as if by
862 * sprintf(t, "%u", n), and return a pointer to the terminator.
864 static char *object_desc_num(char *t, uint n)
868 /* Find "size" of "n" */
869 for (p = 1; n >= p * 10; p = p * 10) /* loop */;
871 /* Dump each digit */
877 /* Remove the digit */
880 /* Process next digit */
896 * ÆüËܸì¤Î¸Ä¿ôɽ¼¨¥ë¡¼¥Á¥ó
897 *¡Êcmd1.c ¤ÇήÍѤ¹¤ë¤¿¤á¤Ë object_desc_japanese ¤«¤é°ÜÆ°¤·¤¿¡£¡Ë
900 extern char *object_desc_kosuu(char *t, object_type *o_ptr)
902 t = object_desc_num(t, o_ptr->number);
914 t = object_desc_str(t, "ËÜ");
919 t = object_desc_str(t, "´¬");
924 t = object_desc_str(t, "Éþ");
928 case TV_SORCERY_BOOK:
934 case TV_ENCHANT_BOOK:
937 case TV_HISSATSU_BOOK:
939 t = object_desc_str(t, "ºý");
947 t = object_desc_str(t, "Ãå");
954 t = object_desc_str(t, "¿¶");
959 t = object_desc_str(t, "");
964 t = object_desc_str(t, "Ëç");
967 /* ¿©¤Ù¤â¤Î by ita */
970 if(o_ptr->sval == SV_FOOD_JERKY)
972 t = object_desc_str(t, "ÀÚ¤ì");
978 if (o_ptr->number < 10)
980 t = object_desc_str(t, "¤Ä");
984 t = object_desc_str(t, "¸Ä");
994 * Print an signed number "v" into a string "t", as if by
995 * sprintf(t, "%+d", n), and return a pointer to the terminator.
996 * Note that we always print a sign, either "+" or "-".
998 static char *object_desc_int(char *t, sint v)
1005 /* Take the absolute value */
1008 /* Use a "minus" sign */
1012 /* Positive (or zero) */
1015 /* Use the actual number */
1018 /* Use a "plus" sign */
1022 /* Find "size" of "n" */
1023 for (p = 1; n >= p * 10; p = p * 10) /* loop */;
1025 /* Dump each digit */
1028 /* Dump the digit */
1031 /* Remove the digit */
1034 /* Process next digit */
1047 * Creates a description of the item "o_ptr", and stores it in "out_val".
1049 * One can choose the "verbosity" of the description, including whether
1050 * or not the "number" of items should be described, and how much detail
1051 * should be used when describing the item.
1053 * The given "buf" must be MAX_NLEN chars long to hold the longest possible
1054 * description, which can get pretty long, including incriptions, such as:
1055 * "no more Maces of Disruption (Defender) (+10,+10) [+5] (+3 to stealth)".
1056 * Note that the inscription will be clipped to keep the total description
1057 * under MAX_NLEN-1 chars (plus a terminator).
1059 * Note the use of "object_desc_num()" and "object_desc_int()" as hyper-efficient,
1060 * portable, versions of some common "sprintf()" commands.
1062 * Note that all ego-items (when known) append an "Ego-Item Name", unless
1063 * the item is also an artifact, which should NEVER happen.
1065 * Note that all artifacts (when known) append an "Artifact Name", so we
1066 * have special processing for "Specials" (artifact Lites, Rings, Amulets).
1067 * The "Specials" never use "modifiers" if they are "known", since they
1068 * have special "descriptions", such as "The Necklace of the Dwarves".
1070 * Special Lite's use the "k_info" base-name (Phial, Star, or Arkenstone),
1071 * plus the artifact name, just like any other artifact, if known.
1073 * Special Ring's and Amulet's, if not "aware", use the same code as normal
1074 * rings and amulets, and if "aware", use the "k_info" base-name (Ring or
1075 * Amulet or Necklace). They will NEVER "append" the "k_info" name. But,
1076 * they will append the artifact name, just like any artifact, if known.
1078 * Hack -- Display "The One Ring" as "a Plain Gold Ring" until aware.
1080 * If "pref" then a "numeric" prefix will be pre-pended.
1083 * 0 -- The Cloak of Death
1084 * 1 -- The Cloak of Death [1,+3]
1085 * 2 -- The Cloak of Death [1,+3] (+2 to Stealth)
1086 * 3 -- The Cloak of Death [1,+3] (+2 to Stealth) {nifty}
1088 void object_desc(char *buf, object_type *o_ptr, int pref, int mode)
1090 cptr basenm, modstr;
1091 int power, indexx, i;
1096 bool append_name = FALSE;
1098 bool show_weapon = FALSE;
1099 bool show_armour = FALSE;
1104 char p1 = '(', p2 = ')';
1105 char b1 = '[', b2 = ']';
1106 char c1 = '{', c2 = '}';
1108 char tmp_val[MAX_NLEN+160];
1109 char tmp_val2[MAX_NLEN+10];
1113 object_type *bow_ptr;
1116 object_kind *k_ptr = &k_info[o_ptr->k_idx];
1118 monster_race *r_ptr = &r_info[o_ptr->pval];
1120 /* Extract some flags */
1121 object_flags(o_ptr, &f1, &f2, &f3);
1123 /* See if the object is "aware" */
1124 if (object_aware_p(o_ptr) || (o_ptr->ident & IDENT_MENTAL)) aware = TRUE;
1126 /* See if the object is "known" */
1127 if (object_known_p(o_ptr)) known = TRUE;
1129 /* Hack -- Extract the sub-type "indexx" */
1130 indexx = o_ptr->sval;
1132 /* Extract default "base" string */
1133 basenm = get_object_name(o_ptr);
1135 /* Assume no "modifier" string */
1139 /* Analyze the object */
1140 switch (o_ptr->tval)
1142 /* Some objects are easy to describe */
1163 modstr = " (empty)";
1169 sprintf(tmp_val2, "¡Ê%s¡Ë",r_name + r_ptr->name);
1172 cptr t = r_name + r_ptr->name;
1174 if (!(r_ptr->flags1 & RF1_UNIQUE))
1176 sprintf(tmp_val2, " (%s%s)", (is_a_vowel(*t) ? "an " : "a "), t);
1182 sprintf(tmp_val2, "(%s)", t);
1192 /* Figurines/Statues */
1197 modstr = r_name + r_ptr->name;
1199 cptr t = r_name + r_ptr->name;
1201 if (!(r_ptr->flags1 & RF1_UNIQUE))
1203 sprintf(tmp_val2, "%s%s", (is_a_vowel(*t) ? "an " : "a "), t);
1220 modstr = r_name + r_ptr->name;
1224 sprintf(tmp_val2, "& #%s", basenm + 2);
1226 if (r_ptr->flags1 & RF1_UNIQUE)
1228 sprintf(tmp_val2, "%s %s", basenm, "of #");
1232 sprintf(tmp_val2, "& # %s", basenm + 2);
1241 /* Missiles/ Bows/ Weapons */
1272 /* Lites (including a few "Specials") */
1278 /* Amulets (including a few "Specials") */
1281 /* Known artifacts */
1282 if (artifact_p(o_ptr) && aware) break;
1284 if ((k_ptr->flags3 & TR3_INSTA_ART) && aware) break;
1286 /* Color the object */
1288 modstr = J_amulet_adj[indexx];
1290 modstr = amulet_adj[indexx];
1293 if (aware) append_name = TRUE;
1295 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1297 basenm = aware ? "& %¤Î¥¢¥ß¥å¥ì¥Ã¥È" : "& ¥¢¥ß¥å¥ì¥Ã¥È";
1299 basenm = aware ? "& #%¤Î¥¢¥ß¥å¥ì¥Ã¥È" : "& #¥¢¥ß¥å¥ì¥Ã¥È";
1301 basenm = "& Amulet~";
1303 basenm = aware ? "& # Amulet~" : "& # Amulet~";
1309 /* Rings (including a few "Specials") */
1312 /* Known artifacts */
1313 if (artifact_p(o_ptr) && aware) break;
1315 if ((k_ptr->flags3 & TR3_INSTA_ART) && aware) break;
1317 /* Color the object */
1319 modstr = J_ring_adj[indexx];
1321 modstr = ring_adj[indexx];
1324 if (aware) append_name = TRUE;
1326 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1328 basenm = aware ? "& %¤Î»ØÎØ" : "& »ØÎØ";
1330 basenm = aware ? "& #%¤Î»ØÎØ" : "& #»ØÎØ";
1334 basenm = aware ? "& # Ring~" : "& # Ring~";
1338 /* Hack -- The One Ring */
1340 if (!aware && (o_ptr->sval == SV_RING_POWER)) modstr = "¶â̵¹¤¤Î";
1341 if (!aware && (o_ptr->sval == SV_RING_AHO)) modstr = "¶â͹¤¤Î";
1343 if (!aware && (o_ptr->sval == SV_RING_POWER)) modstr = "Plain Gold";
1344 if (!aware && (o_ptr->sval == SV_RING_AHO)) modstr = "Plain Goldarn";
1346 if (!k_ptr->to_h && !k_ptr->to_d && (o_ptr->to_h || o_ptr->to_d)) show_weapon = TRUE;
1358 /* Color the object */
1360 modstr = J_staff_adj[indexx];
1362 modstr = staff_adj[indexx];
1365 if (aware) append_name = TRUE;
1366 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1368 basenm = aware ? "& %¤Î¾ó" : "& ¾ó";
1370 basenm = aware ? "& #%¤Î¾ó" : "& #¾ó";
1372 basenm = "& Staff~";
1374 basenm = aware ? "& # Staff~" : "& # Staff~";
1382 /* Color the object */
1384 modstr = J_wand_adj[indexx];
1386 modstr = wand_adj[indexx];
1389 if (aware) append_name = TRUE;
1390 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1392 basenm = aware? "& %¤ÎËâË¡ËÀ":"& ËâË¡ËÀ";
1394 basenm = aware ? "& #%¤ÎËâË¡ËÀ" : "& #ËâË¡ËÀ";
1398 basenm = aware ? "& # Wand~" : "& # Wand~";
1406 /* Color the object */
1408 modstr = J_rod_adj[indexx];
1410 modstr = rod_adj[indexx];
1413 if (aware) append_name = TRUE;
1414 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1416 basenm = aware? "& %¤Î¥í¥Ã¥É":"& ¥í¥Ã¥É";
1418 basenm = aware ? "& #%¤Î¥í¥Ã¥É" : "& #¥í¥Ã¥É";
1422 basenm = aware ? "& # Rod~" : "& # Rod~";
1430 /* Color the object */
1431 modstr = scroll_adj[indexx];
1432 if (aware) append_name = TRUE;
1433 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1435 basenm = aware ? "& %¤Î´¬Êª" : "& ´¬Êª";
1437 basenm = aware ? "& ¡Ö#¡×¤È½ñ¤«¤ì¤¿%¤Î´¬Êª" : "& ¡Ö#¡×¤È½ñ¤«¤ì¤¿´¬Êª";
1439 basenm = "& Scroll~";
1441 basenm = aware ? "& Scroll~ titled \"#\"" : "& Scroll~ titled \"#\"";
1449 /* Color the object */
1451 modstr = J_potion_adj[indexx];
1453 modstr = potion_adj[indexx];
1456 if (aware) append_name = TRUE;
1457 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1459 basenm = aware ? "& %¤ÎÌô" : "& Ìô";
1461 basenm = aware ? "& #%¤ÎÌô" : "& #Ìô";
1463 basenm = "& Potion~";
1465 basenm = aware ? "& # Potion~" : "& # Potion~";
1473 /* Ordinary food is "boring" */
1474 if (o_ptr->sval >= SV_FOOD_MIN_FOOD) break;
1476 /* Color the object */
1478 modstr = J_food_adj[indexx];
1480 modstr = food_adj[indexx];
1483 if (aware) append_name = TRUE;
1484 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1486 basenm = aware ? "& %¤Î¥¥Î¥³" : "& ¥¥Î¥³";
1488 basenm = aware ? "& #%¤Î¥¥Î¥³" : "& #¥¥Î¥³";
1490 basenm = "& Mushroom~";
1492 basenm = aware ? "& # Mushroom~" : "& # Mushroom~";
1502 basenm = "& ÍÓÈé»æ - #";
1504 basenm = "& Parchement~ - #";
1514 basenm = "& À¸Ì¿¤ÎËâË¡½ñ#";
1516 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1517 basenm = "& Book~ of Life Magic #";
1519 basenm = "& Life Spellbook~ #";
1525 case TV_SORCERY_BOOK:
1529 basenm = "& Àç½Ñ¤ÎËâË¡½ñ#";
1531 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1532 basenm = "& Book~ of Sorcery #";
1534 basenm = "& Sorcery Spellbook~ #";
1540 case TV_NATURE_BOOK:
1544 basenm = "& ¼«Á³¤ÎËâË¡½ñ#";
1546 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1547 basenm = "& Book~ of Nature Magic #";
1549 basenm = "& Nature Spellbook~ #";
1559 basenm = "& ¥«¥ª¥¹¤ÎËâË¡½ñ#";
1561 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1562 basenm = "& Book~ of Chaos Magic #";
1564 basenm = "& Chaos Spellbook~ #";
1574 basenm = "& °Å¹õ¤ÎËâË¡½ñ#";
1576 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1577 basenm = "& Book~ of Death Magic #";
1579 basenm = "& Death Spellbook~ #";
1589 basenm = "& ¥È¥é¥ó¥×¤ÎËâË¡½ñ#";
1591 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1592 basenm = "& Book~ of Trump Magic #";
1594 basenm = "& Trump Spellbook~ #";
1600 case TV_ARCANE_BOOK:
1604 basenm = "& Èë½Ñ¤ÎËâË¡½ñ#";
1606 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1607 basenm = "& Book~ of Arcane Magic #";
1609 basenm = "& Arcane Spellbook~ #";
1614 case TV_ENCHANT_BOOK:
1618 basenm = "& ¾¢¤ÎËâË¡½ñ#";
1620 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1621 basenm = "& Book~ of Craft Magic #";
1623 basenm = "& Craft Spellbook~ #";
1628 case TV_DAEMON_BOOK:
1632 basenm = "& °Ëâ¤ÎËâË¡½ñ#";
1634 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1635 basenm = "& Book~ of Daemon Magic #";
1637 basenm = "& Daemon Spellbook~ #";
1648 basenm = "& Song Book~ #";
1653 case TV_HISSATSU_BOOK:
1657 basenm = "& Éð·Ý¤Î½ñ#";
1659 basenm = "& Book~ of Kendo #";
1667 /* Hack -- Gold/Gems */
1670 strcpy(buf, basenm);
1674 /* Used in the "inventory" routine */
1678 strcpy(buf, "(¤Ê¤·)");
1680 strcpy(buf, "(nothing)");
1688 /* Start dumping the result */
1692 if (basenm[0] == '&')
1702 else if (o_ptr->number > 1)
1704 if ( old_way_of_kaz == FALSE ){
1705 t = object_desc_num(t, o_ptr->number);
1706 if (o_ptr->number > 9)
1707 t = object_desc_str(t, "¸Ä¤Î ");
1709 t = object_desc_str(t, "¤Ä¤Î ");
1713 t = object_desc_kosuu(t,o_ptr);
1714 t = object_desc_str(t, "¤Î ");
1718 /* ±Ñ¸ì¤Î¾ì¹ç¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ï The ¤¬ÉÕ¤¯¤Î¤Çʬ¤«¤ë¤¬
1719 * ÆüËܸì¤Ç¤Ïʬ¤«¤é¤Ê¤¤¤Î¤Ç¥Þ¡¼¥¯¤ò¤Ä¤±¤ë
1721 if (known && artifact_p(o_ptr)) t = object_desc_str(t, "¡ú");
1722 else if (known && o_ptr->art_name) t = object_desc_str(t, "¡ù");
1726 /* The object "expects" a "number" */
1727 if (basenm[0] == '&')
1729 /* Skip the ampersand (and space) */
1738 /* Hack -- None left */
1739 else if (o_ptr->number <= 0)
1741 t = object_desc_str(t, "no more ");
1744 /* Extract the number */
1745 else if (o_ptr->number > 1)
1747 t = object_desc_num(t, o_ptr->number);
1748 t = object_desc_chr(t, ' ');
1751 /* Hack -- The only one of its kind */
1752 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
1754 t = object_desc_str(t, "The ");
1757 /* Unique corpses are unique */
1758 else if ((o_ptr->tval == TV_CORPSE) && (r_ptr->flags1 & RF1_UNIQUE))
1760 t = object_desc_str(t, "The ");
1763 /* A single one, with a vowel in the modifier */
1764 else if ((*s == '#') && (is_a_vowel(modstr[0])))
1766 t = object_desc_str(t, "an ");
1769 /* A single one, with a vowel */
1770 else if (is_a_vowel(*s))
1772 t = object_desc_str(t, "an ");
1775 /* A single one, without a vowel */
1778 t = object_desc_str(t, "a ");
1782 /* Hack -- objects that "never" take an article */
1794 /* Hack -- all gone */
1795 else if (o_ptr->number <= 0)
1797 t = object_desc_str(t, "no more ");
1800 /* Prefix a number if required */
1801 else if (o_ptr->number > 1)
1803 t = object_desc_num(t, o_ptr->number);
1804 t = object_desc_chr(t, ' ');
1807 /* Hack -- The only one of its kind */
1808 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
1810 t = object_desc_str(t, "The ");
1813 /* Hack -- single items get no prefix */
1821 /* Paranoia -- skip illegal tildes */
1822 /* while (*s == '~') s++; */
1825 if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
1827 t = object_desc_str(t,format("ÃÃÌê»Õ%s¤Î",player_name));
1830 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¡¢Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à¤Î̾Á°¤òÉղ乤ë */
1832 /* ¥é¥ó¥À¥à¡¦¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È */
1833 if (o_ptr->art_name)
1835 strcpy(temp, quark_str(o_ptr->art_name));
1836 /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
1837 /* ±Ñ¸ìÈǤΥ»¡¼¥Ö¥Õ¥¡¥¤¥ë¤«¤éÍ褿 'of XXX' ¤Ï,¡ÖXXX¤Î¡×¤Èɽ¼¨¤¹¤ë */
1838 if ( strncmp( temp , "of ",3)==0 ) {t=object_desc_str(t,&temp[3]);t=object_desc_str(t,"¤Î");}
1840 if ( strncmp( temp , "¡Ø" , 2 ) != 0 && temp[0]!='\'')
1841 t=object_desc_str(t, temp);
1843 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à */
1844 else if (o_ptr->name1) {
1845 artifact_type *a_ptr = &a_info[o_ptr->name1];
1846 /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
1847 if ( strncmp( (a_name + a_ptr->name), "¡Ø" , 2) != 0){
1848 t=object_desc_str(t, (a_name + a_ptr->name));
1851 /* ̾¤Î¤¢¤ë¥¢¥¤¥Æ¥à */
1852 else if (o_ptr->name2) {
1853 ego_item_type *e_ptr = &e_info[o_ptr->name2];
1854 t=object_desc_str(t, (e_name + e_ptr->name));
1858 /* Copy the string */
1867 /* Add a plural if needed */
1868 if (pref && o_ptr->number != 1)
1872 /* XXX XXX XXX Mega-Hack */
1874 /* Hack -- "Cutlass-es" and "Torch-es" */
1875 if ((k == 's') || (k == 'h')) *t++ = 'e';
1887 /* Insert the modifier */
1888 for (u = modstr; *u; u++) *t++ = *u;
1893 /* saigo ¤ÎÂå¤ï¤ê¡£¸úǽ¤òÉÕ²½¤¹¤ë by ita*/
1895 modstr=get_object_name(o_ptr);
1896 for (u = modstr; *u; u++) *t++ = *u;
1911 /* Append the "kind name" to the "base name" */
1915 t = object_desc_str(t, " of ");
1916 t = object_desc_str(t, get_object_name(o_ptr));
1922 /* '¡Ø'¤«¤é»Ï¤Þ¤ëÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ¸å¤ËÉղ乤ë */
1924 /* ¥é¥ó¥À¥à¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Î̾Á°¤Ï¥»¡¼¥Ö¥Õ¥¡¥¤¥ë¤ËµÏ¿
1925 ¤µ¤ì¤ë¤Î¤Ç¡¢±Ñ¸ìÈǤÎ̾Á°¤â¤½¤ì¤é¤·¤¯ÊÑ´¹¤¹¤ë */
1926 if (o_ptr->art_name)
1927 { char temp[256];int itemp;
1928 strcpy(temp, quark_str(o_ptr->art_name));
1929 /* MEGA HACK by ita*/
1930 if ( strncmp( temp , "¡Ø" , 2 ) == 0 ) t=object_desc_str(t, temp);else
1931 if( temp[0]=='\'' ) { itemp=strlen(temp);temp[itemp-1]=0;
1932 t=object_desc_str(t,"¡Ø");
1933 t=object_desc_str(t,&temp[1]);
1934 t=object_desc_str(t,"¡Ù");}
1937 else if (o_ptr->name1) {
1938 artifact_type *a_ptr = &a_info[o_ptr->name1];
1939 if ( strncmp( (a_name + a_ptr->name) , "¡Ø" , 2 ) == 0 ){
1940 t=object_desc_str(t, (a_name + a_ptr->name));
1943 else if (o_ptr->inscription)
1945 cptr str = quark_str(o_ptr->inscription);
1954 if (*str == '#') break;
1960 cptr str = strchr(quark_str(o_ptr->inscription), '#');
1962 /* Add the false name */
1963 t=object_desc_str(t,"¡Ø");
1964 t = object_desc_str(t, &str[1]);
1965 t=object_desc_str(t,"¡Ù");
1970 if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
1972 t = object_desc_str(t,format(" of %s the smith",player_name));
1975 /* Hack -- Append "Artifact" or "Special" names */
1978 /* Is it a new random artifact ? */
1979 if (o_ptr->art_name)
1981 t = object_desc_chr(t, ' ');
1983 t = object_desc_str(t, quark_str(o_ptr->art_name));
1986 /* Grab any artifact name */
1987 else if (o_ptr->name1)
1989 artifact_type *a_ptr = &a_info[o_ptr->name1];
1991 t = object_desc_chr(t, ' ');
1992 t = object_desc_str(t, (a_name + a_ptr->name));
1995 /* Grab any ego-item name */
2000 ego_item_type *e_ptr = &e_info[o_ptr->name2];
2002 t = object_desc_chr(t, ' ');
2003 t = object_desc_str(t, (e_name + e_ptr->name));
2006 if (o_ptr->inscription && strchr(quark_str(o_ptr->inscription), '#'))
2009 cptr str = strchr(quark_str(o_ptr->inscription), '#');
2011 /* Add the false name */
2012 t = object_desc_chr(t, ' ');
2013 t = object_desc_str(t, &str[1]);
2021 /* No more details wanted */
2022 if (mode < 1) goto copyback;
2024 /* Hack -- Chests must be described in detail */
2025 if (o_ptr->tval == TV_CHEST)
2027 /* Not searched yet */
2033 /* May be "empty" */
2034 else if (!o_ptr->pval)
2037 t = object_desc_str(t, "(¶õ)");
2039 t = object_desc_str(t, " (empty)");
2044 /* May be "disarmed" */
2045 else if (o_ptr->pval < 0)
2047 if (chest_traps[0 - o_ptr->pval])
2050 t = object_desc_str(t, "(²ò½üºÑ)");
2052 t = object_desc_str(t, " (disarmed)");
2059 t = object_desc_str(t, "(Èó»Ü¾û)");
2061 t = object_desc_str(t, " (unlocked)");
2067 /* Describe the traps, if any */
2070 /* Describe the traps */
2071 switch (chest_traps[o_ptr->pval])
2076 t = object_desc_str(t, "(»Ü¾û)");
2078 t = object_desc_str(t, " (Locked)");
2083 case CHEST_LOSE_STR:
2086 t = object_desc_str(t, "(ÆÇ¿Ë)");
2088 t = object_desc_str(t, " (Poison Needle)");
2093 case CHEST_LOSE_CON:
2096 t = object_desc_str(t, "(ÆÇ¿Ë)");
2098 t = object_desc_str(t, " (Poison Needle)");
2106 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2108 t = object_desc_str(t, " (Gas Trap)");
2113 case CHEST_PARALYZE:
2116 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2118 t = object_desc_str(t, " (Gas Trap)");
2126 t = object_desc_str(t, "(ÇúȯÁõÃÖ)");
2128 t = object_desc_str(t, " (Explosion Device)");
2134 case CHEST_BIRD_STORM:
2135 case CHEST_E_SUMMON:
2136 case CHEST_H_SUMMON:
2139 t = object_desc_str(t, "(¾¤´¤Î¥ë¡¼¥ó)");
2141 t = object_desc_str(t, " (Summoning Runes)");
2146 case CHEST_RUNES_OF_EVIL:
2149 t = object_desc_str(t, "(¼Ù°¤Ê¥ë¡¼¥ó)");
2151 t = object_desc_str(t, " (Gleaming Black Runes)");
2159 t = object_desc_str(t, "(¥Þ¥ë¥Á¡¦¥È¥é¥Ã¥×)");
2161 t = object_desc_str(t, " (Multiple Traps)");
2171 /* Display the item like a weapon */
2172 if (f3 & (TR3_SHOW_MODS)) show_weapon = TRUE;
2174 /* Display the item like a weapon */
2175 if (o_ptr->to_h && o_ptr->to_d) show_weapon = TRUE;
2177 /* Display the item like armour */
2178 if (o_ptr->ac) show_armour = TRUE;
2181 /* Dump base weapon info */
2182 switch (o_ptr->tval)
2184 /* Missiles and Weapons */
2193 /* Append a "damage" string */
2194 t = object_desc_chr(t, ' ');
2195 t = object_desc_chr(t, p1);
2196 t = object_desc_num(t, o_ptr->dd);
2197 t = object_desc_chr(t, 'd');
2198 t = object_desc_num(t, o_ptr->ds);
2199 t = object_desc_chr(t, p2);
2205 /* Bows get a special "damage string" */
2208 /* Mega-Hack -- Extract the "base power" */
2209 power = (o_ptr->sval % 10);
2211 /* Apply the "Extra Might" flag */
2212 if (f3 & (TR3_XTRA_MIGHT)) power++;
2214 /* Append a special "damage" string */
2215 t = object_desc_chr(t, ' ');
2216 t = object_desc_chr(t, p1);
2217 t = object_desc_chr(t, 'x');
2218 t = object_desc_num(t, power);
2219 t = object_desc_chr(t, p2);
2226 /* Add the weapon bonuses */
2229 /* Show the tohit/todam on request */
2232 t = object_desc_chr(t, ' ');
2233 t = object_desc_chr(t, p1);
2234 t = object_desc_int(t, o_ptr->to_h);
2235 t = object_desc_chr(t, ',');
2236 t = object_desc_int(t, o_ptr->to_d);
2237 t = object_desc_chr(t, p2);
2240 /* Show the tohit if needed */
2241 else if (o_ptr->to_h)
2243 t = object_desc_chr(t, ' ');
2244 t = object_desc_chr(t, p1);
2245 t = object_desc_int(t, o_ptr->to_h);
2246 t = object_desc_chr(t, p2);
2249 /* Show the todam if needed */
2250 else if (o_ptr->to_d)
2252 t = object_desc_chr(t, ' ');
2253 t = object_desc_chr(t, p1);
2254 t = object_desc_int(t, o_ptr->to_d);
2255 t = object_desc_chr(t, p2);
2259 bow_ptr = &inventory[INVEN_BOW];
2261 /* if have a firing weapon + ammo matches bow*/
2262 if (bow_ptr->k_idx &&
2263 (((bow_ptr->sval == SV_SLING) && (o_ptr->tval == TV_SHOT)) ||
2264 (((bow_ptr->sval == SV_SHORT_BOW) ||
2265 (bow_ptr->sval == SV_LONG_BOW) ||
2266 (bow_ptr->sval == SV_NAMAKE_BOW)) && (o_ptr->tval == TV_ARROW)) ||
2267 (((bow_ptr->sval == SV_LIGHT_XBOW) ||
2268 (bow_ptr->sval == SV_HEAVY_XBOW)) && (o_ptr->tval == TV_BOLT))))
2274 avgdam = o_ptr->dd * (o_ptr->ds + 1) * 10 / 2;
2276 /* See if the bow is "known" - then set damage bonus*/
2277 if (object_known_p(bow_ptr))
2279 avgdam += (bow_ptr->to_d * 10);
2282 /* effect of ammo */
2283 if (known) avgdam += (o_ptr->to_d * 10);
2285 energy_fire = bow_energy(bow_ptr->sval);
2286 tmul = bow_tmul(bow_ptr->sval);
2288 /* Get extra "power" from "extra might" */
2289 if (p_ptr->xtra_might) tmul++;
2291 tmul = tmul * (100 + (int)(adj_str_td[p_ptr->stat_ind[A_STR]]) - 128);
2293 /* launcher multiplier */
2295 avgdam /= (100 * 10);
2296 if (avgdam < 0) avgdam = 0;
2298 /* display (shot damage/ avg damage) */
2299 t = object_desc_chr(t, ' ');
2300 t = object_desc_chr(t, p1);
2301 t = object_desc_num(t, avgdam);
2302 t = object_desc_chr(t, '/');
2304 if (p_ptr->num_fire == 0)
2306 t = object_desc_chr(t, '0');
2310 /* calc effects of energy */
2311 avgdam *= (p_ptr->num_fire * 100);
2313 avgdam /= energy_fire;
2315 t = object_desc_num(t, avgdam);
2318 t = object_desc_chr(t, p2);
2322 /* Add the armor bonuses */
2325 /* Show the armor class info */
2328 t = object_desc_chr(t, ' ');
2329 t = object_desc_chr(t, b1);
2330 t = object_desc_num(t, o_ptr->ac);
2331 t = object_desc_chr(t, ',');
2332 t = object_desc_int(t, o_ptr->to_a);
2333 t = object_desc_chr(t, b2);
2336 /* No base armor, but does increase armor */
2337 else if (o_ptr->to_a)
2339 t = object_desc_chr(t, ' ');
2340 t = object_desc_chr(t, b1);
2341 t = object_desc_int(t, o_ptr->to_a);
2342 t = object_desc_chr(t, b2);
2346 /* Hack -- always show base armor */
2347 else if (show_armour)
2349 t = object_desc_chr(t, ' ');
2350 t = object_desc_chr(t, b1);
2351 t = object_desc_num(t, o_ptr->ac);
2352 t = object_desc_chr(t, b2);
2356 /* No more details wanted */
2357 if (mode < 2) goto copyback;
2361 * Hack -- Wands and Staffs have charges. Make certain how many charges
2362 * a stack of staffs really has is clear. -LM-
2365 ((o_ptr->tval == TV_STAFF) ||
2366 (o_ptr->tval == TV_WAND)))
2368 /* Dump " (N charges)" */
2369 t = object_desc_chr(t, ' ');
2370 t = object_desc_chr(t, p1);
2372 /* Clear explaination for staffs. */
2373 if ((o_ptr->tval == TV_STAFF) && (o_ptr->number > 1))
2375 t = object_desc_num(t, o_ptr->number);
2376 t = object_desc_str(t, "x ");
2378 t = object_desc_num(t, o_ptr->pval);
2380 t = object_desc_str(t, "²óʬ");
2382 t = object_desc_str(t, " charge");
2384 if (o_ptr->pval != 1)
2386 t = object_desc_chr(t, 's');
2391 t = object_desc_chr(t, p2);
2393 /* Hack -- Rods have a "charging" indicator. Now that stacks of rods may
2394 * be in any state of charge or discharge, this now includes a number. -LM-
2396 else if (known && (o_ptr->tval == TV_ROD))
2398 /* Hack -- Dump " (# charging)" if relevant */
2401 /* Stacks of rods display an exact count of charging rods. */
2402 if (o_ptr->number > 1)
2405 if (k_ptr->pval == 0) k_ptr->pval = 1;
2407 /* Find out how many rods are charging, by dividing
2408 * current timeout by each rod's maximum timeout.
2409 * Ensure that any remainder is rounded up. Display
2410 * very discharged stacks as merely fully discharged.
2412 power = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval;
2413 if (power > o_ptr->number) power = o_ptr->number;
2415 /* Display prettily. */
2416 t = object_desc_str(t, " (");
2417 t = object_desc_num(t, power);
2419 t = object_desc_str(t, "ËÜ ½¼Å¶Ãæ)");
2421 t = object_desc_str(t, " charging)");
2426 /* "one Rod of Perception (1 charging)" would look tacky. */
2430 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2432 t = object_desc_str(t, " (charging)");
2439 /* Dump "pval" flags for wearable items */
2440 if (known && (f1 & (TR1_PVAL_MASK)))
2442 /* Start the display */
2443 t = object_desc_chr(t, ' ');
2444 t = object_desc_chr(t, p1);
2446 /* Dump the "pval" itself */
2447 t = object_desc_int(t, o_ptr->pval);
2449 /* Do not display the "pval" flags */
2450 if (f3 & (TR3_HIDE_TYPE))
2456 else if (f1 & (TR1_SPEED))
2458 /* Dump " to speed" */
2460 t = object_desc_str(t, "²Ã®");
2462 t = object_desc_str(t, " to speed");
2468 else if (f1 & (TR1_BLOWS))
2472 t = object_desc_str(t, "¹¶·â");
2474 t = object_desc_str(t, " attack");
2477 if (ABS(o_ptr->pval) != 1) t = object_desc_chr(t, 's');
2483 else if (f1 & (TR1_STEALTH))
2485 /* Dump " to stealth" */
2487 t = object_desc_str(t, "±£Ì©");
2489 t = object_desc_str(t, " to stealth");
2495 else if (f1 & (TR1_SEARCH))
2497 /* Dump " to searching" */
2499 t = object_desc_str(t, "õº÷");
2501 t = object_desc_str(t, " to searching");
2507 else if (f1 & (TR1_INFRA))
2509 /* Dump " to infravision" */
2511 t = object_desc_str(t, "ÀÖ³°Àþ»ëÎÏ");
2513 t = object_desc_str(t, " to infravision");
2519 else if (f1 & (TR1_TUNNEL))
2524 /* Finish the display */
2525 t = object_desc_chr(t, p2);
2528 /* Hack -- Process Lanterns/Torches */
2529 if (known && (o_ptr->tval == TV_LITE) && (!(artifact_p(o_ptr) || (o_ptr->sval == SV_LITE_FEANOR))))
2531 /* Hack -- Turns of light for normal lites */
2533 t = object_desc_str(t, "(");
2535 t = object_desc_str(t, " (with ");
2538 if (o_ptr->name2 == EGO_LITE_LONG) t = object_desc_num(t, o_ptr->xtra4*2);
2539 else t = object_desc_num(t, o_ptr->xtra4);
2541 t = object_desc_str(t, "¥¿¡¼¥ó¤Î¼÷Ì¿)");
2543 t = object_desc_str(t, " turns of light)");
2549 /* Indicate charging objects, but not rods. */
2550 if (known && o_ptr->timeout && o_ptr->tval != TV_ROD)
2552 /* Hack -- Dump " (charging)" if relevant */
2554 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2556 t = object_desc_str(t, " (charging)");
2562 /* No more details wanted */
2563 if (mode < 3) goto copyback;
2566 /* No inscription yet */
2569 /* Use the standard inscription if available */
2570 if (o_ptr->inscription)
2574 strcpy(tmp_val2, quark_str(o_ptr->inscription));
2576 for (; *u && (*u != '#'); u++);
2581 /* Use the game-generated "feeling" otherwise, if available */
2582 else if (o_ptr->feeling)
2584 strcpy(tmp_val2, game_inscriptions[o_ptr->feeling]);
2587 /* Note "cursed" if the item is known to be cursed */
2588 else if (cursed_p(o_ptr) && (known || (o_ptr->ident & (IDENT_SENSE))))
2591 strcpy(tmp_val2, "¼ö¤ï¤ì¤Æ¤¤¤ë");
2593 strcpy(tmp_val2, "cursed");
2598 /* Note "unidentified" if the item is unidentified */
2599 else if ((o_ptr->tval == TV_RING || o_ptr->tval == TV_AMULET
2600 || o_ptr->tval == TV_LITE || o_ptr->tval == TV_FIGURINE)
2601 && object_aware_p(o_ptr) && !object_known_p(o_ptr)
2602 && !((o_ptr->ident)&IDENT_SENSE))
2605 strcpy(tmp_val2, "̤´ÕÄê");
2607 strcpy(tmp_val2, "unidentified");
2611 /* Mega-Hack -- note empty wands/staffs */
2612 else if (!known && (o_ptr->ident & (IDENT_EMPTY)))
2615 strcpy(tmp_val2, "¶õ");
2617 strcpy(tmp_val2, "empty");
2622 /* Note "tried" if the object has been tested unsuccessfully */
2623 else if (!aware && object_tried_p(o_ptr))
2626 strcpy(tmp_val2, "̤ȽÌÀ");
2628 strcpy(tmp_val2, "tried");
2633 /* Note the discount, if any */
2634 else if (o_ptr->discount)
2636 (void)object_desc_num(tmp_val2, o_ptr->discount);
2638 strcat(tmp_val2, "%°ú¤");
2640 strcat(tmp_val2, "% off");
2645 /* Append the inscription, if any */
2648 /* Append the inscription */
2649 t = object_desc_chr(t, ' ');
2650 t = object_desc_chr(t, c1);
2651 t = object_desc_str(t, tmp_val2);
2652 t = object_desc_chr(t, c2);
2657 for (i = 0; i < MAX_NLEN-2; i++)
2660 if (iskanji(*(t+i)))
2668 if (i == MAX_NLEN-2)
2671 if (iskanji(*(t+i)))
2677 *(buf+MAX_NLEN-1) = '\0';