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 return (0x90 + ring_col[k_ptr->sval]);
461 return (0xA0 + staff_col[k_ptr->sval]);
466 return (0xB0 + wand_col[k_ptr->sval]);
471 return (0xC0 + rod_col[k_ptr->sval]);
476 return (0xD0 + scroll_col[k_ptr->sval]);
481 return (0xE0 + potion_col[k_ptr->sval]);
486 if (k_ptr->sval < SV_FOOD_MIN_FOOD)
488 return (0xF0 + food_col[k_ptr->sval]);
500 void get_table_name(char *out_string)
504 strcpy(out_string, "¡Ø");
505 get_rnd_line("aname_j.txt", 1, Syllable);
506 strcat(out_string, Syllable);
507 get_rnd_line("aname_j.txt", 2, Syllable);
508 strcat(out_string, Syllable);
509 strcat(out_string, "¡Ù");
511 int testcounter = randint(3) + 1;
513 strcpy(out_string, "'");
517 while (testcounter--)
518 strcat(out_string, syllables[rand_int(MAX_SYLLABLES)]);
523 testcounter = randint(2) + 1;
524 while (testcounter--)
526 (void)get_rnd_line("elvish.txt", 0, Syllable);
527 strcat(out_string, Syllable);
531 out_string[1] = toupper(out_string[1]);
533 strcat(out_string, "'");
537 out_string[18] = '\0';
544 * Prepare the "variable" part of the "k_info" array.
546 * The "color"/"metal"/"type" of an item is its "flavor".
547 * For the most part, flavors are assigned randomly each game.
549 * Initialize descriptions for the "colored" objects, including:
550 * Rings, Amulets, Staffs, Wands, Rods, Food, Potions, Scrolls.
552 * The first 4 entries for potions are fixed (Water, Apple Juice,
553 * Slime Mold Juice, Unused Potion).
555 * Scroll titles are always between 6 and 14 letters long. This is
556 * ensured because every title is composed of whole words, where every
557 * word is from 1 to 8 letters long (one or two syllables of 1 to 4
558 * letters each), and that no scroll is finished until it attempts to
559 * grow beyond 15 letters. The first time this can happen is when the
560 * current title has 6 letters and the new word has 8 letters, which
561 * would result in a 6 letter scroll title.
563 * Duplicate titles are avoided by requiring that no two scrolls share
564 * the same first four letters (not the most efficient method, and not
565 * the least efficient method, but it will always work).
567 * Hack -- make sure everything stays the same for each saved game
568 * This is accomplished by the use of a saved "random seed", as in
569 * "town_gen()". Since no other functions are called while the special
570 * seed is in effect, so this function is pretty "safe".
572 * Note that the "hacked seed" may provide an RNG with alternating parity!
574 void flavor_init(void)
583 /* Hack -- Use the "simple" RNG */
586 /* Hack -- Induce consistant flavors */
587 Rand_value = seed_flavor;
590 /* Efficiency -- Rods/Wands share initial array */
591 for (i = 0; i < MAX_METALS; i++)
593 rod_adj[i] = wand_adj[i];
595 J_rod_adj[i] = J_wand_adj[i];
597 rod_col[i] = wand_col[i];
601 /* Rings have "ring colors" */
602 for (i = 0; i < MAX_ROCKS; i++)
604 j = rand_int(MAX_ROCKS);
605 temp_adj = ring_adj[i];
606 ring_adj[i] = ring_adj[j];
607 ring_adj[j] = temp_adj;
609 temp_adj = J_ring_adj[i];
610 J_ring_adj[i] = J_ring_adj[j];
611 J_ring_adj[j] = temp_adj;
613 temp_col = ring_col[i];
614 ring_col[i] = ring_col[j];
615 ring_col[j] = temp_col;
618 /* Amulets have "amulet colors" */
619 for (i = 0; i < MAX_AMULETS; i++)
621 j = rand_int(MAX_AMULETS);
622 temp_adj = amulet_adj[i];
623 amulet_adj[i] = amulet_adj[j];
624 amulet_adj[j] = temp_adj;
626 temp_adj = J_amulet_adj[i];
627 J_amulet_adj[i] = J_amulet_adj[j];
628 J_amulet_adj[j] = temp_adj;
630 temp_col = amulet_col[i];
631 amulet_col[i] = amulet_col[j];
632 amulet_col[j] = temp_col;
636 for (i = 0; i < MAX_WOODS; i++)
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;
643 temp_adj = J_staff_adj[i];
644 J_staff_adj[i] = J_staff_adj[j];
645 J_staff_adj[j] = temp_adj;
647 temp_col = staff_col[i];
648 staff_col[i] = staff_col[j];
649 staff_col[j] = temp_col;
653 for (i = 0; i < MAX_METALS; i++)
655 j = rand_int(MAX_METALS);
656 temp_adj = wand_adj[i];
657 wand_adj[i] = wand_adj[j];
658 wand_adj[j] = temp_adj;
660 temp_adj = J_wand_adj[i];
661 J_wand_adj[i] = J_wand_adj[j];
662 J_wand_adj[j] = temp_adj;
664 temp_col = wand_col[i];
665 wand_col[i] = wand_col[j];
666 wand_col[j] = temp_col;
670 for (i = 0; i < MAX_METALS; i++)
672 j = rand_int(MAX_METALS);
673 temp_adj = rod_adj[i];
674 rod_adj[i] = rod_adj[j];
675 rod_adj[j] = temp_adj;
677 temp_adj = J_rod_adj[i];
678 J_rod_adj[i] = J_rod_adj[j];
679 J_rod_adj[j] = temp_adj;
681 temp_col = rod_col[i];
682 rod_col[i] = rod_col[j];
683 rod_col[j] = temp_col;
686 /* Foods (Mushrooms) */
687 for (i = 0; i < MAX_SHROOM; i++)
689 j = rand_int(MAX_SHROOM);
690 temp_adj = food_adj[i];
691 food_adj[i] = food_adj[j];
692 food_adj[j] = temp_adj;
694 temp_adj = J_food_adj[i];
695 J_food_adj[i] = J_food_adj[j];
696 J_food_adj[j] = temp_adj;
698 temp_col = food_col[i];
699 food_col[i] = food_col[j];
700 food_col[j] = temp_col;
704 for (i = 4; i < MAX_COLORS; i++)
706 j = rand_int(MAX_COLORS - 4) + 4;
707 temp_adj = potion_adj[i];
708 potion_adj[i] = potion_adj[j];
709 potion_adj[j] = temp_adj;
711 temp_adj = J_potion_adj[i];
712 J_potion_adj[i] = J_potion_adj[j];
713 J_potion_adj[j] = temp_adj;
715 temp_col = potion_col[i];
716 potion_col[i] = potion_col[j];
717 potion_col[j] = temp_col;
720 /* Scrolls (random titles, always white) */
721 for (i = 0; i < MAX_TITLES; i++)
723 /* Get a new title */
730 /* Start a new title */
733 /* Collect words until done */
740 /* Start a new word */
743 /* Choose one or two syllables */
744 s = ((rand_int(100) < 30) ? 1 : 2);
746 /* Add a one or two syllable word */
747 for (q = 0; q < s; q++)
749 /* Add the syllable */
751 strcat(tmp, J_syllables[rand_int(MAX_SYLLABLES)]);
753 strcat(tmp, syllables[rand_int(MAX_SYLLABLES)]);
757 /* Stop before getting too long */
758 if (strlen(buf) + 1 + strlen(tmp) > 15) break;
768 strcpy(scroll_adj[i], buf+1);
773 /* Check for "duplicate" scroll titles */
774 for (j = 0; j < i; j++)
776 cptr hack1 = scroll_adj[j];
777 cptr hack2 = scroll_adj[i];
779 /* Compare first four characters */
780 if (*hack1++ != *hack2++) continue;
781 if (*hack1++ != *hack2++) continue;
782 if (*hack1++ != *hack2++) continue;
783 if (*hack1++ != *hack2++) continue;
792 /* Break when done */
796 /* All scrolls are white */
797 scroll_col[i] = TERM_WHITE;
801 /* Hack -- Use the "complex" RNG */
804 /* Analyze every object */
805 for (i = 1; i < max_k_idx; i++)
807 object_kind *k_ptr = &k_info[i];
809 /* Skip "empty" objects */
810 if (!k_ptr->name) continue;
812 /* Extract "flavor" (if any) */
813 k_ptr->flavor = object_flavor(i);
815 /* No flavor yields aware */
816 if (!k_ptr->flavor) k_ptr->aware = TRUE;
818 /* Check for "easily known" */
819 k_ptr->easy_know = object_easy_know(i);
825 * Print a char "c" into a string "t", as if by sprintf(t, "%c", c),
826 * and return a pointer to the terminator (t + 1).
828 static char *object_desc_chr(char *t, char c)
842 * Print a string "s" into a string "t", as if by strcpy(t, s),
843 * and return a pointer to the terminator.
845 static char *object_desc_str(char *t, cptr s)
847 /* Copy the string */
848 while (*s) *t++ = *s++;
860 * Print an unsigned number "n" into a string "t", as if by
861 * sprintf(t, "%u", n), and return a pointer to the terminator.
863 static char *object_desc_num(char *t, uint n)
867 /* Find "size" of "n" */
868 for (p = 1; n >= p * 10; p = p * 10) /* loop */;
870 /* Dump each digit */
876 /* Remove the digit */
879 /* Process next digit */
895 * ÆüËܸì¤Î¸Ä¿ôɽ¼¨¥ë¡¼¥Á¥ó
896 *¡Êcmd1.c ¤ÇήÍѤ¹¤ë¤¿¤á¤Ë object_desc_japanese ¤«¤é°ÜÆ°¤·¤¿¡£¡Ë
899 extern char *object_desc_kosuu(char *t, object_type *o_ptr)
901 t = object_desc_num(t, o_ptr->number);
913 t = object_desc_str(t, "ËÜ");
918 t = object_desc_str(t, "´¬");
923 t = object_desc_str(t, "Éþ");
927 case TV_SORCERY_BOOK:
933 case TV_ENCHANT_BOOK:
936 case TV_HISSATSU_BOOK:
938 t = object_desc_str(t, "ºý");
946 t = object_desc_str(t, "Ãå");
953 t = object_desc_str(t, "¿¶");
958 t = object_desc_str(t, "");
963 t = object_desc_str(t, "Ëç");
966 /* ¿©¤Ù¤â¤Î by ita */
969 if(o_ptr->sval == SV_FOOD_JERKY)
971 t = object_desc_str(t, "ÀÚ¤ì");
977 if (o_ptr->number < 10)
979 t = object_desc_str(t, "¤Ä");
983 t = object_desc_str(t, "¸Ä");
993 * Print an signed number "v" into a string "t", as if by
994 * sprintf(t, "%+d", n), and return a pointer to the terminator.
995 * Note that we always print a sign, either "+" or "-".
997 static char *object_desc_int(char *t, sint v)
1004 /* Take the absolute value */
1007 /* Use a "minus" sign */
1011 /* Positive (or zero) */
1014 /* Use the actual number */
1017 /* Use a "plus" sign */
1021 /* Find "size" of "n" */
1022 for (p = 1; n >= p * 10; p = p * 10) /* loop */;
1024 /* Dump each digit */
1027 /* Dump the digit */
1030 /* Remove the digit */
1033 /* Process next digit */
1046 * Creates a description of the item "o_ptr", and stores it in "out_val".
1048 * One can choose the "verbosity" of the description, including whether
1049 * or not the "number" of items should be described, and how much detail
1050 * should be used when describing the item.
1052 * The given "buf" must be MAX_NLEN chars long to hold the longest possible
1053 * description, which can get pretty long, including incriptions, such as:
1054 * "no more Maces of Disruption (Defender) (+10,+10) [+5] (+3 to stealth)".
1055 * Note that the inscription will be clipped to keep the total description
1056 * under MAX_NLEN-1 chars (plus a terminator).
1058 * Note the use of "object_desc_num()" and "object_desc_int()" as hyper-efficient,
1059 * portable, versions of some common "sprintf()" commands.
1061 * Note that all ego-items (when known) append an "Ego-Item Name", unless
1062 * the item is also an artifact, which should NEVER happen.
1064 * Note that all artifacts (when known) append an "Artifact Name", so we
1065 * have special processing for "Specials" (artifact Lites, Rings, Amulets).
1066 * The "Specials" never use "modifiers" if they are "known", since they
1067 * have special "descriptions", such as "The Necklace of the Dwarves".
1069 * Special Lite's use the "k_info" base-name (Phial, Star, or Arkenstone),
1070 * plus the artifact name, just like any other artifact, if known.
1072 * Special Ring's and Amulet's, if not "aware", use the same code as normal
1073 * rings and amulets, and if "aware", use the "k_info" base-name (Ring or
1074 * Amulet or Necklace). They will NEVER "append" the "k_info" name. But,
1075 * they will append the artifact name, just like any artifact, if known.
1077 * Hack -- Display "The One Ring" as "a Plain Gold Ring" until aware.
1079 * If "pref" then a "numeric" prefix will be pre-pended.
1082 * 0 -- The Cloak of Death
1083 * 1 -- The Cloak of Death [1,+3]
1084 * 2 -- The Cloak of Death [1,+3] (+2 to Stealth)
1085 * 3 -- The Cloak of Death [1,+3] (+2 to Stealth) {nifty}
1087 void object_desc(char *buf, object_type *o_ptr, int pref, int mode)
1089 cptr basenm, modstr;
1090 int power, indexx, i;
1095 bool append_name = FALSE;
1097 bool show_weapon = FALSE;
1098 bool show_armour = FALSE;
1103 char p1 = '(', p2 = ')';
1104 char b1 = '[', b2 = ']';
1105 char c1 = '{', c2 = '}';
1107 char tmp_val[MAX_NLEN+160];
1108 char tmp_val2[MAX_NLEN+10];
1112 object_type *bow_ptr;
1115 object_kind *k_ptr = &k_info[o_ptr->k_idx];
1117 monster_race *r_ptr = &r_info[o_ptr->pval];
1119 /* Extract some flags */
1120 object_flags(o_ptr, &f1, &f2, &f3);
1122 /* See if the object is "aware" */
1123 if (object_aware_p(o_ptr) || (o_ptr->ident & IDENT_MENTAL)) aware = TRUE;
1125 /* See if the object is "known" */
1126 if (object_known_p(o_ptr)) known = TRUE;
1128 /* Hack -- Extract the sub-type "indexx" */
1129 indexx = o_ptr->sval;
1131 /* Extract default "base" string */
1132 basenm = get_object_name(o_ptr);
1134 /* Assume no "modifier" string */
1138 /* Analyze the object */
1139 switch (o_ptr->tval)
1141 /* Some objects are easy to describe */
1162 modstr = " (empty)";
1168 sprintf(tmp_val2, "¡Ê%s¡Ë",r_name + r_ptr->name);
1171 cptr t = r_name + r_ptr->name;
1173 if (!(r_ptr->flags1 & RF1_UNIQUE))
1175 sprintf(tmp_val2, " (%s%s)", (is_a_vowel(*t) ? "an " : "a "), t);
1181 sprintf(tmp_val2, "(%s)", t);
1191 /* Figurines/Statues */
1196 modstr = r_name + r_ptr->name;
1198 cptr t = r_name + r_ptr->name;
1200 if (!(r_ptr->flags1 & RF1_UNIQUE))
1202 sprintf(tmp_val2, "%s%s", (is_a_vowel(*t) ? "an " : "a "), t);
1219 modstr = r_name + r_ptr->name;
1223 sprintf(tmp_val2, "& #%s", basenm + 2);
1225 if (r_ptr->flags1 & RF1_UNIQUE)
1227 sprintf(tmp_val2, "%s %s", basenm, "of #");
1231 sprintf(tmp_val2, "& # %s", basenm + 2);
1240 /* Missiles/ Bows/ Weapons */
1271 /* Lites (including a few "Specials") */
1277 /* Amulets (including a few "Specials") */
1280 /* Known artifacts */
1281 if (artifact_p(o_ptr) && aware) break;
1283 if ((k_ptr->flags3 & TR3_INSTA_ART) && aware) break;
1285 /* Color the object */
1287 modstr = J_amulet_adj[indexx];
1289 modstr = amulet_adj[indexx];
1292 if (aware) append_name = TRUE;
1294 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1296 basenm = aware ? "& %¤Î¥¢¥ß¥å¥ì¥Ã¥È" : "& ¥¢¥ß¥å¥ì¥Ã¥È";
1298 basenm = aware ? "& #%¤Î¥¢¥ß¥å¥ì¥Ã¥È" : "& #¥¢¥ß¥å¥ì¥Ã¥È";
1300 basenm = "& Amulet~";
1302 basenm = aware ? "& # Amulet~" : "& # Amulet~";
1308 /* Rings (including a few "Specials") */
1311 /* Known artifacts */
1312 if (artifact_p(o_ptr) && aware) break;
1314 if ((k_ptr->flags3 & TR3_INSTA_ART) && aware) break;
1316 /* Color the object */
1318 modstr = J_ring_adj[indexx];
1320 modstr = ring_adj[indexx];
1323 if (aware) append_name = TRUE;
1325 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1327 basenm = aware ? "& %¤Î»ØÎØ" : "& »ØÎØ";
1329 basenm = aware ? "& #%¤Î»ØÎØ" : "& #»ØÎØ";
1333 basenm = aware ? "& # Ring~" : "& # Ring~";
1337 /* Hack -- The One Ring */
1339 if (!aware && (o_ptr->sval == SV_RING_POWER)) modstr = "¶â̵¹¤¤Î";
1340 if (!aware && (o_ptr->sval == SV_RING_AHO)) modstr = "¶â͹¤¤Î";
1342 if (!aware && (o_ptr->sval == SV_RING_POWER)) modstr = "Plain Gold";
1343 if (!aware && (o_ptr->sval == SV_RING_AHO)) modstr = "Plain Goldarn";
1345 if (!k_ptr->to_h && !k_ptr->to_d && (o_ptr->to_h || o_ptr->to_d)) show_weapon = TRUE;
1357 /* Color the object */
1359 modstr = J_staff_adj[indexx];
1361 modstr = staff_adj[indexx];
1364 if (aware) append_name = TRUE;
1365 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1367 basenm = aware ? "& %¤Î¾ó" : "& ¾ó";
1369 basenm = aware ? "& #%¤Î¾ó" : "& #¾ó";
1371 basenm = "& Staff~";
1373 basenm = aware ? "& # Staff~" : "& # Staff~";
1381 /* Color the object */
1383 modstr = J_wand_adj[indexx];
1385 modstr = wand_adj[indexx];
1388 if (aware) append_name = TRUE;
1389 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1391 basenm = aware? "& %¤ÎËâË¡ËÀ":"& ËâË¡ËÀ";
1393 basenm = aware ? "& #%¤ÎËâË¡ËÀ" : "& #ËâË¡ËÀ";
1397 basenm = aware ? "& # Wand~" : "& # Wand~";
1405 /* Color the object */
1407 modstr = J_rod_adj[indexx];
1409 modstr = rod_adj[indexx];
1412 if (aware) append_name = TRUE;
1413 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1415 basenm = aware? "& %¤Î¥í¥Ã¥É":"& ¥í¥Ã¥É";
1417 basenm = aware ? "& #%¤Î¥í¥Ã¥É" : "& #¥í¥Ã¥É";
1421 basenm = aware ? "& # Rod~" : "& # Rod~";
1429 /* Color the object */
1430 modstr = scroll_adj[indexx];
1431 if (aware) append_name = TRUE;
1432 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1434 basenm = aware ? "& %¤Î´¬Êª" : "& ´¬Êª";
1436 basenm = aware ? "& ¡Ö#¡×¤È½ñ¤«¤ì¤¿%¤Î´¬Êª" : "& ¡Ö#¡×¤È½ñ¤«¤ì¤¿´¬Êª";
1438 basenm = "& Scroll~";
1440 basenm = aware ? "& Scroll~ titled \"#\"" : "& Scroll~ titled \"#\"";
1448 /* Color the object */
1450 modstr = J_potion_adj[indexx];
1452 modstr = potion_adj[indexx];
1455 if (aware) append_name = TRUE;
1456 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1458 basenm = aware ? "& %¤ÎÌô" : "& Ìô";
1460 basenm = aware ? "& #%¤ÎÌô" : "& #Ìô";
1462 basenm = "& Potion~";
1464 basenm = aware ? "& # Potion~" : "& # Potion~";
1472 /* Ordinary food is "boring" */
1473 if (o_ptr->sval >= SV_FOOD_MIN_FOOD) break;
1475 /* Color the object */
1477 modstr = J_food_adj[indexx];
1479 modstr = food_adj[indexx];
1482 if (aware) append_name = TRUE;
1483 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1485 basenm = aware ? "& %¤Î¥¥Î¥³" : "& ¥¥Î¥³";
1487 basenm = aware ? "& #%¤Î¥¥Î¥³" : "& #¥¥Î¥³";
1489 basenm = "& Mushroom~";
1491 basenm = aware ? "& # Mushroom~" : "& # Mushroom~";
1501 basenm = "& ÍÓÈé»æ - #";
1503 basenm = "& Parchement~ - #";
1513 basenm = "& À¸Ì¿¤ÎËâË¡½ñ#";
1515 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1516 basenm = "& Book~ of Life Magic #";
1518 basenm = "& Life Spellbook~ #";
1524 case TV_SORCERY_BOOK:
1528 basenm = "& Àç½Ñ¤ÎËâË¡½ñ#";
1530 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1531 basenm = "& Book~ of Sorcery #";
1533 basenm = "& Sorcery Spellbook~ #";
1539 case TV_NATURE_BOOK:
1543 basenm = "& ¼«Á³¤ÎËâË¡½ñ#";
1545 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1546 basenm = "& Book~ of Nature Magic #";
1548 basenm = "& Nature Spellbook~ #";
1558 basenm = "& ¥«¥ª¥¹¤ÎËâË¡½ñ#";
1560 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1561 basenm = "& Book~ of Chaos Magic #";
1563 basenm = "& Chaos Spellbook~ #";
1573 basenm = "& °Å¹õ¤ÎËâË¡½ñ#";
1575 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1576 basenm = "& Book~ of Death Magic #";
1578 basenm = "& Death Spellbook~ #";
1588 basenm = "& ¥È¥é¥ó¥×¤ÎËâË¡½ñ#";
1590 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1591 basenm = "& Book~ of Trump Magic #";
1593 basenm = "& Trump Spellbook~ #";
1599 case TV_ARCANE_BOOK:
1603 basenm = "& Èë½Ñ¤ÎËâË¡½ñ#";
1605 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1606 basenm = "& Book~ of Arcane Magic #";
1608 basenm = "& Arcane Spellbook~ #";
1613 case TV_ENCHANT_BOOK:
1617 basenm = "& ¾¢¤ÎËâË¡½ñ#";
1619 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1620 basenm = "& Book~ of Craft Magic #";
1622 basenm = "& Craft Spellbook~ #";
1627 case TV_DAEMON_BOOK:
1631 basenm = "& °Ëâ¤ÎËâË¡½ñ#";
1633 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1634 basenm = "& Book~ of Daemon Magic #";
1636 basenm = "& Daemon Spellbook~ #";
1647 basenm = "& Song Book~ #";
1652 case TV_HISSATSU_BOOK:
1656 basenm = "& Éð·Ý¤Î½ñ#";
1658 basenm = "& Book~ of Kendo #";
1666 /* Hack -- Gold/Gems */
1669 strcpy(buf, basenm);
1673 /* Used in the "inventory" routine */
1677 strcpy(buf, "(¤Ê¤·)");
1679 strcpy(buf, "(nothing)");
1687 /* Start dumping the result */
1691 if (basenm[0] == '&')
1701 else if (o_ptr->number > 1)
1703 if ( old_way_of_kaz == FALSE ){
1704 t = object_desc_num(t, o_ptr->number);
1705 if (o_ptr->number > 9)
1706 t = object_desc_str(t, "¸Ä¤Î ");
1708 t = object_desc_str(t, "¤Ä¤Î ");
1712 t = object_desc_kosuu(t,o_ptr);
1713 t = object_desc_str(t, "¤Î ");
1717 /* ±Ñ¸ì¤Î¾ì¹ç¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ï The ¤¬ÉÕ¤¯¤Î¤Çʬ¤«¤ë¤¬
1718 * ÆüËܸì¤Ç¤Ïʬ¤«¤é¤Ê¤¤¤Î¤Ç¥Þ¡¼¥¯¤ò¤Ä¤±¤ë
1720 if (known && artifact_p(o_ptr)) t = object_desc_str(t, "¡ú");
1721 else if (known && o_ptr->art_name) t = object_desc_str(t, "¡ù");
1725 /* The object "expects" a "number" */
1726 if (basenm[0] == '&')
1728 /* Skip the ampersand (and space) */
1737 /* Hack -- None left */
1738 else if (o_ptr->number <= 0)
1740 t = object_desc_str(t, "no more ");
1743 /* Extract the number */
1744 else if (o_ptr->number > 1)
1746 t = object_desc_num(t, o_ptr->number);
1747 t = object_desc_chr(t, ' ');
1750 /* Hack -- The only one of its kind */
1751 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
1753 t = object_desc_str(t, "The ");
1756 /* Unique corpses are unique */
1757 else if ((o_ptr->tval == TV_CORPSE) && (r_ptr->flags1 & RF1_UNIQUE))
1759 t = object_desc_str(t, "The ");
1762 /* A single one, with a vowel in the modifier */
1763 else if ((*s == '#') && (is_a_vowel(modstr[0])))
1765 t = object_desc_str(t, "an ");
1768 /* A single one, with a vowel */
1769 else if (is_a_vowel(*s))
1771 t = object_desc_str(t, "an ");
1774 /* A single one, without a vowel */
1777 t = object_desc_str(t, "a ");
1781 /* Hack -- objects that "never" take an article */
1793 /* Hack -- all gone */
1794 else if (o_ptr->number <= 0)
1796 t = object_desc_str(t, "no more ");
1799 /* Prefix a number if required */
1800 else if (o_ptr->number > 1)
1802 t = object_desc_num(t, o_ptr->number);
1803 t = object_desc_chr(t, ' ');
1806 /* Hack -- The only one of its kind */
1807 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
1809 t = object_desc_str(t, "The ");
1812 /* Hack -- single items get no prefix */
1820 /* Paranoia -- skip illegal tildes */
1821 /* while (*s == '~') s++; */
1824 if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
1826 t = object_desc_str(t,format("ÃÃÌê»Õ%s¤Î",player_name));
1829 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¡¢Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à¤Î̾Á°¤òÉղ乤ë */
1831 /* ¥é¥ó¥À¥à¡¦¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È */
1832 if (o_ptr->art_name)
1834 strcpy(temp, quark_str(o_ptr->art_name));
1835 /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
1836 /* ±Ñ¸ìÈǤΥ»¡¼¥Ö¥Õ¥¡¥¤¥ë¤«¤éÍ褿 'of XXX' ¤Ï,¡ÖXXX¤Î¡×¤Èɽ¼¨¤¹¤ë */
1837 if ( strncmp( temp , "of ",3)==0 ) {t=object_desc_str(t,&temp[3]);t=object_desc_str(t,"¤Î");}
1839 if ( strncmp( temp , "¡Ø" , 2 ) != 0 && temp[0]!='\'')
1840 t=object_desc_str(t, temp);
1842 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à */
1843 else if (o_ptr->name1) {
1844 artifact_type *a_ptr = &a_info[o_ptr->name1];
1845 /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
1846 if ( strncmp( (a_name + a_ptr->name), "¡Ø" , 2) != 0){
1847 t=object_desc_str(t, (a_name + a_ptr->name));
1850 /* ̾¤Î¤¢¤ë¥¢¥¤¥Æ¥à */
1851 else if (o_ptr->name2) {
1852 ego_item_type *e_ptr = &e_info[o_ptr->name2];
1853 t=object_desc_str(t, (e_name + e_ptr->name));
1857 /* Copy the string */
1866 /* Add a plural if needed */
1867 if (pref && o_ptr->number != 1)
1871 /* XXX XXX XXX Mega-Hack */
1873 /* Hack -- "Cutlass-es" and "Torch-es" */
1874 if ((k == 's') || (k == 'h')) *t++ = 'e';
1886 /* Insert the modifier */
1887 for (u = modstr; *u; u++) *t++ = *u;
1892 /* saigo ¤ÎÂå¤ï¤ê¡£¸úǽ¤òÉÕ²½¤¹¤ë by ita*/
1894 modstr=get_object_name(o_ptr);
1895 for (u = modstr; *u; u++) *t++ = *u;
1910 /* Append the "kind name" to the "base name" */
1914 t = object_desc_str(t, " of ");
1915 t = object_desc_str(t, get_object_name(o_ptr));
1921 /* '¡Ø'¤«¤é»Ï¤Þ¤ëÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ¸å¤ËÉղ乤ë */
1923 /* ¥é¥ó¥À¥à¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Î̾Á°¤Ï¥»¡¼¥Ö¥Õ¥¡¥¤¥ë¤ËµÏ¿
1924 ¤µ¤ì¤ë¤Î¤Ç¡¢±Ñ¸ìÈǤÎ̾Á°¤â¤½¤ì¤é¤·¤¯ÊÑ´¹¤¹¤ë */
1925 if (o_ptr->art_name)
1926 { char temp[256];int itemp;
1927 strcpy(temp, quark_str(o_ptr->art_name));
1928 /* MEGA HACK by ita*/
1929 if ( strncmp( temp , "¡Ø" , 2 ) == 0 ) t=object_desc_str(t, temp);else
1930 if( temp[0]=='\'' ) { itemp=strlen(temp);temp[itemp-1]=0;
1931 t=object_desc_str(t,"¡Ø");
1932 t=object_desc_str(t,&temp[1]);
1933 t=object_desc_str(t,"¡Ù");}
1936 else if (o_ptr->name1) {
1937 artifact_type *a_ptr = &a_info[o_ptr->name1];
1938 if ( strncmp( (a_name + a_ptr->name) , "¡Ø" , 2 ) == 0 ){
1939 t=object_desc_str(t, (a_name + a_ptr->name));
1942 else if (o_ptr->inscription)
1944 cptr str = quark_str(o_ptr->inscription);
1953 if (*str == '#') break;
1959 cptr str = strchr(quark_str(o_ptr->inscription), '#');
1961 /* Add the false name */
1962 t=object_desc_str(t,"¡Ø");
1963 t = object_desc_str(t, &str[1]);
1964 t=object_desc_str(t,"¡Ù");
1969 if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
1971 t = object_desc_str(t,format(" of %s the smith",player_name));
1974 /* Hack -- Append "Artifact" or "Special" names */
1977 if (o_ptr->inscription && strchr(quark_str(o_ptr->inscription), '#'))
1980 cptr str = strchr(quark_str(o_ptr->inscription), '#');
1982 /* Add the false name */
1983 t = object_desc_chr(t, ' ');
1984 t = object_desc_str(t, &str[1]);
1987 /* Is it a new random artifact ? */
1988 else if (o_ptr->art_name)
1990 t = object_desc_chr(t, ' ');
1992 t = object_desc_str(t, quark_str(o_ptr->art_name));
1995 /* Grab any artifact name */
1996 else if (o_ptr->name1)
1998 artifact_type *a_ptr = &a_info[o_ptr->name1];
2000 t = object_desc_chr(t, ' ');
2001 t = object_desc_str(t, (a_name + a_ptr->name));
2004 /* Grab any ego-item name */
2005 else if (o_ptr->name2)
2007 ego_item_type *e_ptr = &e_info[o_ptr->name2];
2009 t = object_desc_chr(t, ' ');
2010 t = object_desc_str(t, (e_name + e_ptr->name));
2017 /* No more details wanted */
2018 if (mode < 1) goto copyback;
2020 /* Hack -- Chests must be described in detail */
2021 if (o_ptr->tval == TV_CHEST)
2023 /* Not searched yet */
2029 /* May be "empty" */
2030 else if (!o_ptr->pval)
2033 t = object_desc_str(t, "(¶õ)");
2035 t = object_desc_str(t, " (empty)");
2040 /* May be "disarmed" */
2041 else if (o_ptr->pval < 0)
2043 if (chest_traps[0 - o_ptr->pval])
2046 t = object_desc_str(t, "(²ò½üºÑ)");
2048 t = object_desc_str(t, " (disarmed)");
2055 t = object_desc_str(t, "(Èó»Ü¾û)");
2057 t = object_desc_str(t, " (unlocked)");
2063 /* Describe the traps, if any */
2066 /* Describe the traps */
2067 switch (chest_traps[o_ptr->pval])
2072 t = object_desc_str(t, "(»Ü¾û)");
2074 t = object_desc_str(t, " (Locked)");
2079 case CHEST_LOSE_STR:
2082 t = object_desc_str(t, "(ÆÇ¿Ë)");
2084 t = object_desc_str(t, " (Poison Needle)");
2089 case CHEST_LOSE_CON:
2092 t = object_desc_str(t, "(ÆÇ¿Ë)");
2094 t = object_desc_str(t, " (Poison Needle)");
2102 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2104 t = object_desc_str(t, " (Gas Trap)");
2109 case CHEST_PARALYZE:
2112 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2114 t = object_desc_str(t, " (Gas Trap)");
2122 t = object_desc_str(t, "(ÇúȯÁõÃÖ)");
2124 t = object_desc_str(t, " (Explosion Device)");
2130 case CHEST_BIRD_STORM:
2131 case CHEST_E_SUMMON:
2132 case CHEST_H_SUMMON:
2135 t = object_desc_str(t, "(¾¤´¤Î¥ë¡¼¥ó)");
2137 t = object_desc_str(t, " (Summoning Runes)");
2142 case CHEST_RUNES_OF_EVIL:
2145 t = object_desc_str(t, "(¼Ù°¤Ê¥ë¡¼¥ó)");
2147 t = object_desc_str(t, " (Gleaming Black Runes)");
2155 t = object_desc_str(t, "(¥Þ¥ë¥Á¡¦¥È¥é¥Ã¥×)");
2157 t = object_desc_str(t, " (Multiple Traps)");
2167 /* Display the item like a weapon */
2168 if (f3 & (TR3_SHOW_MODS)) show_weapon = TRUE;
2170 /* Display the item like a weapon */
2171 if (o_ptr->to_h && o_ptr->to_d) show_weapon = TRUE;
2173 /* Display the item like armour */
2174 if (o_ptr->ac) show_armour = TRUE;
2177 /* Dump base weapon info */
2178 switch (o_ptr->tval)
2180 /* Missiles and Weapons */
2189 /* Append a "damage" string */
2190 t = object_desc_chr(t, ' ');
2191 t = object_desc_chr(t, p1);
2192 t = object_desc_num(t, o_ptr->dd);
2193 t = object_desc_chr(t, 'd');
2194 t = object_desc_num(t, o_ptr->ds);
2195 t = object_desc_chr(t, p2);
2201 /* Bows get a special "damage string" */
2204 /* Mega-Hack -- Extract the "base power" */
2205 power = (o_ptr->sval % 10);
2207 /* Apply the "Extra Might" flag */
2208 if (f3 & (TR3_XTRA_MIGHT)) power++;
2210 /* Append a special "damage" string */
2211 t = object_desc_chr(t, ' ');
2212 t = object_desc_chr(t, p1);
2213 t = object_desc_chr(t, 'x');
2214 t = object_desc_num(t, power);
2215 t = object_desc_chr(t, p2);
2222 /* Add the weapon bonuses */
2225 /* Show the tohit/todam on request */
2228 t = object_desc_chr(t, ' ');
2229 t = object_desc_chr(t, p1);
2230 t = object_desc_int(t, o_ptr->to_h);
2231 t = object_desc_chr(t, ',');
2232 t = object_desc_int(t, o_ptr->to_d);
2233 t = object_desc_chr(t, p2);
2236 /* Show the tohit if needed */
2237 else if (o_ptr->to_h)
2239 t = object_desc_chr(t, ' ');
2240 t = object_desc_chr(t, p1);
2241 t = object_desc_int(t, o_ptr->to_h);
2242 t = object_desc_chr(t, p2);
2245 /* Show the todam if needed */
2246 else if (o_ptr->to_d)
2248 t = object_desc_chr(t, ' ');
2249 t = object_desc_chr(t, p1);
2250 t = object_desc_int(t, o_ptr->to_d);
2251 t = object_desc_chr(t, p2);
2255 bow_ptr = &inventory[INVEN_BOW];
2257 /* if have a firing weapon + ammo matches bow*/
2258 if (bow_ptr->k_idx &&
2259 (((bow_ptr->sval == SV_SLING) && (o_ptr->tval == TV_SHOT)) ||
2260 (((bow_ptr->sval == SV_SHORT_BOW) ||
2261 (bow_ptr->sval == SV_LONG_BOW) ||
2262 (bow_ptr->sval == SV_NAMAKE_BOW)) && (o_ptr->tval == TV_ARROW)) ||
2263 (((bow_ptr->sval == SV_LIGHT_XBOW) ||
2264 (bow_ptr->sval == SV_HEAVY_XBOW)) && (o_ptr->tval == TV_BOLT))))
2270 avgdam = o_ptr->dd * (o_ptr->ds + 1) * 10 / 2;
2272 /* See if the bow is "known" - then set damage bonus*/
2273 if (object_known_p(bow_ptr))
2275 avgdam += (bow_ptr->to_d * 10);
2278 /* effect of ammo */
2279 if (known) avgdam += (o_ptr->to_d * 10);
2281 energy_fire = bow_energy(bow_ptr->sval);
2282 tmul = bow_tmul(bow_ptr->sval);
2284 /* Get extra "power" from "extra might" */
2285 if (p_ptr->xtra_might) tmul++;
2287 tmul = tmul * (100 + (int)(adj_str_td[p_ptr->stat_ind[A_STR]]) - 128);
2289 /* launcher multiplier */
2291 avgdam /= (100 * 10);
2292 if (avgdam < 0) avgdam = 0;
2294 /* display (shot damage/ avg damage) */
2295 t = object_desc_chr(t, ' ');
2296 t = object_desc_chr(t, p1);
2297 t = object_desc_num(t, avgdam);
2298 t = object_desc_chr(t, '/');
2300 if (p_ptr->num_fire == 0)
2302 t = object_desc_chr(t, '0');
2306 /* calc effects of energy */
2307 avgdam *= (p_ptr->num_fire * 100);
2309 avgdam /= energy_fire;
2311 t = object_desc_num(t, avgdam);
2314 t = object_desc_chr(t, p2);
2318 /* Add the armor bonuses */
2321 /* Show the armor class info */
2324 t = object_desc_chr(t, ' ');
2325 t = object_desc_chr(t, b1);
2326 t = object_desc_num(t, o_ptr->ac);
2327 t = object_desc_chr(t, ',');
2328 t = object_desc_int(t, o_ptr->to_a);
2329 t = object_desc_chr(t, b2);
2332 /* No base armor, but does increase armor */
2333 else if (o_ptr->to_a)
2335 t = object_desc_chr(t, ' ');
2336 t = object_desc_chr(t, b1);
2337 t = object_desc_int(t, o_ptr->to_a);
2338 t = object_desc_chr(t, b2);
2342 /* Hack -- always show base armor */
2343 else if (show_armour)
2345 t = object_desc_chr(t, ' ');
2346 t = object_desc_chr(t, b1);
2347 t = object_desc_num(t, o_ptr->ac);
2348 t = object_desc_chr(t, b2);
2352 /* No more details wanted */
2353 if (mode < 2) goto copyback;
2357 * Hack -- Wands and Staffs have charges. Make certain how many charges
2358 * a stack of staffs really has is clear. -LM-
2361 ((o_ptr->tval == TV_STAFF) ||
2362 (o_ptr->tval == TV_WAND)))
2364 /* Dump " (N charges)" */
2365 t = object_desc_chr(t, ' ');
2366 t = object_desc_chr(t, p1);
2368 /* Clear explaination for staffs. */
2369 if ((o_ptr->tval == TV_STAFF) && (o_ptr->number > 1))
2371 t = object_desc_num(t, o_ptr->number);
2372 t = object_desc_str(t, "x ");
2374 t = object_desc_num(t, o_ptr->pval);
2376 t = object_desc_str(t, "²óʬ");
2378 t = object_desc_str(t, " charge");
2380 if (o_ptr->pval != 1)
2382 t = object_desc_chr(t, 's');
2387 t = object_desc_chr(t, p2);
2389 /* Hack -- Rods have a "charging" indicator. Now that stacks of rods may
2390 * be in any state of charge or discharge, this now includes a number. -LM-
2392 else if (known && (o_ptr->tval == TV_ROD))
2394 /* Hack -- Dump " (# charging)" if relevant */
2397 /* Stacks of rods display an exact count of charging rods. */
2398 if (o_ptr->number > 1)
2401 if (k_ptr->pval == 0) k_ptr->pval = 1;
2403 /* Find out how many rods are charging, by dividing
2404 * current timeout by each rod's maximum timeout.
2405 * Ensure that any remainder is rounded up. Display
2406 * very discharged stacks as merely fully discharged.
2408 power = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval;
2409 if (power > o_ptr->number) power = o_ptr->number;
2411 /* Display prettily. */
2412 t = object_desc_str(t, " (");
2413 t = object_desc_num(t, power);
2415 t = object_desc_str(t, "ËÜ ½¼Å¶Ãæ)");
2417 t = object_desc_str(t, " charging)");
2422 /* "one Rod of Perception (1 charging)" would look tacky. */
2426 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2428 t = object_desc_str(t, " (charging)");
2435 /* Dump "pval" flags for wearable items */
2436 if (known && (f1 & (TR1_PVAL_MASK)))
2438 /* Start the display */
2439 t = object_desc_chr(t, ' ');
2440 t = object_desc_chr(t, p1);
2442 /* Dump the "pval" itself */
2443 t = object_desc_int(t, o_ptr->pval);
2445 /* Do not display the "pval" flags */
2446 if (f3 & (TR3_HIDE_TYPE))
2452 else if (f1 & (TR1_SPEED))
2454 /* Dump " to speed" */
2456 t = object_desc_str(t, "²Ã®");
2458 t = object_desc_str(t, " to speed");
2464 else if (f1 & (TR1_BLOWS))
2468 t = object_desc_str(t, "¹¶·â");
2470 t = object_desc_str(t, " attack");
2473 if (ABS(o_ptr->pval) != 1) t = object_desc_chr(t, 's');
2479 else if (f1 & (TR1_STEALTH))
2481 /* Dump " to stealth" */
2483 t = object_desc_str(t, "±£Ì©");
2485 t = object_desc_str(t, " to stealth");
2491 else if (f1 & (TR1_SEARCH))
2493 /* Dump " to searching" */
2495 t = object_desc_str(t, "õº÷");
2497 t = object_desc_str(t, " to searching");
2503 else if (f1 & (TR1_INFRA))
2505 /* Dump " to infravision" */
2507 t = object_desc_str(t, "ÀÖ³°Àþ»ëÎÏ");
2509 t = object_desc_str(t, " to infravision");
2515 else if (f1 & (TR1_TUNNEL))
2520 /* Finish the display */
2521 t = object_desc_chr(t, p2);
2524 /* Hack -- Process Lanterns/Torches */
2525 if (known && (o_ptr->tval == TV_LITE) && (!(artifact_p(o_ptr) || (o_ptr->sval == SV_LITE_FEANOR))))
2527 /* Hack -- Turns of light for normal lites */
2529 t = object_desc_str(t, "(");
2531 t = object_desc_str(t, " (with ");
2534 if (o_ptr->name2 == EGO_LITE_LONG) t = object_desc_num(t, o_ptr->xtra4*2);
2535 else t = object_desc_num(t, o_ptr->xtra4);
2537 t = object_desc_str(t, "¥¿¡¼¥ó¤Î¼÷Ì¿)");
2539 t = object_desc_str(t, " turns of light)");
2545 /* Indicate charging objects, but not rods. */
2546 if (known && o_ptr->timeout && o_ptr->tval != TV_ROD)
2548 /* Hack -- Dump " (charging)" if relevant */
2550 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2552 t = object_desc_str(t, " (charging)");
2558 /* No more details wanted */
2559 if (mode < 3) goto copyback;
2562 /* No inscription yet */
2565 /* Use the standard inscription if available */
2566 if (o_ptr->inscription)
2570 strcpy(tmp_val2, quark_str(o_ptr->inscription));
2572 for (; *u && (*u != '#'); u++);
2577 /* Use the game-generated "feeling" otherwise, if available */
2578 else if (o_ptr->feeling)
2580 strcpy(tmp_val2, game_inscriptions[o_ptr->feeling]);
2583 /* Note "cursed" if the item is known to be cursed */
2584 else if (cursed_p(o_ptr) && (known || (o_ptr->ident & (IDENT_SENSE))))
2587 strcpy(tmp_val2, "¼ö¤ï¤ì¤Æ¤¤¤ë");
2589 strcpy(tmp_val2, "cursed");
2594 /* Note "unidentified" if the item is unidentified */
2595 else if ((o_ptr->tval == TV_RING || o_ptr->tval == TV_AMULET
2596 || o_ptr->tval == TV_LITE || o_ptr->tval == TV_FIGURINE)
2597 && object_aware_p(o_ptr) && !object_known_p(o_ptr)
2598 && !((o_ptr->ident)&IDENT_SENSE))
2601 strcpy(tmp_val2, "̤´ÕÄê");
2603 strcpy(tmp_val2, "unidentified");
2607 /* Mega-Hack -- note empty wands/staffs */
2608 else if (!known && (o_ptr->ident & (IDENT_EMPTY)))
2611 strcpy(tmp_val2, "¶õ");
2613 strcpy(tmp_val2, "empty");
2618 /* Note "tried" if the object has been tested unsuccessfully */
2619 else if (!aware && object_tried_p(o_ptr))
2622 strcpy(tmp_val2, "̤ȽÌÀ");
2624 strcpy(tmp_val2, "tried");
2629 /* Note the discount, if any */
2630 else if (o_ptr->discount)
2632 (void)object_desc_num(tmp_val2, o_ptr->discount);
2634 strcat(tmp_val2, "%°ú¤");
2636 strcat(tmp_val2, "% off");
2641 /* Append the inscription, if any */
2644 /* Append the inscription */
2645 t = object_desc_chr(t, ' ');
2646 t = object_desc_chr(t, c1);
2647 t = object_desc_str(t, tmp_val2);
2648 t = object_desc_chr(t, c2);
2653 for (i = 0; i < MAX_NLEN-2; i++)
2656 if (iskanji(*(t+i)))
2664 if (i == MAX_NLEN-2)
2667 if (iskanji(*(t+i)))
2673 *(buf+MAX_NLEN-1) = '\0';