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]
45 "Alexandrite", "Amethyst", "Aquamarine", "Azurite", "Beryl",
46 "Bloodstone", "Calcite", "Carnelian", "Corundum", "Diamond",
47 "Emerald", "Fluorite", "Garnet", "Granite", "Jade",
48 "Jasper", "Lapis Lazuli", "Malachite", "Marble", "Moonstone",
49 "Onyx", "Opal", "Pearl", "Quartz", "Quartzite",
50 "Rhodonite", "Ruby", "Sapphire", "Tiger Eye", "Topaz",
51 "Turquoise", "Zircon", "Platinum", "Bronze", "Gold",
52 "Obsidian", "Silver", "Tortoise Shell", "Mithril", "Jet",
53 "Engagement", "Adamantite",
54 "Wire", "Dilithium", "Bone", "Wooden",
55 "Spikard", "Serpent", "Wedding", "Double",
56 "Plain", "Brass", "Scarab","Shining",
57 "Rusty","Transparent", "Steel", "Tanzanite",
62 "¶âÎÐÀФÎ","¥¢¥á¥¸¥¹¥È¤Î","¥¢¥¯¥¢¥Þ¥ê¥ó¤Î","¤á¤Î¤¦¤Î","ÎÐÃìÀФÎ",
63 "·ì¶Ì¿ï¤Î","Êý²òÀФÎ","ÀÖ¤á¤Î¤¦¤Î","¹Ë¶Ì¤Î","¥À¥¤¥¢¥â¥ó¥É¤Î",
64 "¥¨¥á¥é¥ë¥É¤Î","¥Û¥¿¥ëÀФÎ","¥¬¡¼¥Í¥Ã¥È¤Î","¸æ±ÆÀФÎ","¤Ò¤¹¤¤¤Î",
65 "¥¸¥ã¥¹¥Ñ¡¼¤Î","ÀÄÎÜÍþ¤Î","¥¯¥¸¥ã¥¯ÀФÎ","ÂçÍýÀФÎ","¥à¡¼¥ó¥¹¥È¡¼¥ó¤Î",
66 "¼Ê¤á¤Î¤¦¤Î","¥ª¥Ñ¡¼¥ë¤Î","¿¿¼î¤Î","¿å¾½¤Î","ÀбѴä¤Î",
67 "¥¶¥¯¥íÀФÎ","¥ë¥Ó¡¼¤Î","¥µ¥Õ¥¡¥¤¥¢¤Î","¥¿¥¤¥¬¡¼¥¢¥¤¤Î","¥È¥Ñ¡¼¥º¤Î",
68 "¥È¥ë¥³ÀФÎ","¥¸¥ë¥³¥ó¤Î","¥×¥é¥Á¥Ê¤Î","¥Ö¥í¥ó¥º¤Î","¶â¤Î",
69 "¹õÍËÀФÎ","¶ä¤Î","¤Ù¤Ã¹Ã¤Î","¥ß¥¹¥ê¥ë¤Î","¹õ¶Ì¤Î",
70 "º§Ìó","¥¢¥À¥Þ¥ó¥¿¥¤¥È¤Î",
71 "¿Ë¶â¤Î","¥Ç¥£¥ê¥·¥¦¥à¤Î","¹ü¤Î","ÌÚ¤Î",
72 "¥¹¥Ô¥«¤Î" /*nuke me*/ ,"¼Ø¤Î","·ëº§","Æó½Å¤Î",
73 "¾þ¤ê¤Î¤Ê¤¤","ÀÄƼ¤Î","¥¹¥«¥é¥Ù¤Î" ,"µ±¤¯",
74 "»¬¤Ó¤¿","Æ©ÌÀ¤Ê","¹ÝÅ´¤Î","¥¿¥ó¥¶¥Ê¥¤¥È¤Î",
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]
104 "Amber", "Driftwood", "Coral", "Agate", "Ivory",
105 "Obsidian", "Bone", "Brass", "Bronze", "Pewter",
106 "Tortoise Shell", "Golden", "Azure", "Crystal", "Silver",
107 "Copper", "Swastika", "Platinum","Runed", "Rusty",
108 "Curved", "Dragon's claw", "Rosary", "Jade", "Mithril",
113 "àèàá¤Î","ήÌÚ¤Î","¥µ¥ó¥´¤Î","¤á¤Î¤¦¤Î","¾Ý²ç¤Î",
114 "¹õÍËÀФÎ","¹ü¤Î","¿¿ï«¤Î","ÀÄƼ¤Î","¤·¤í¤á¤Î",
115 "¤Ù¤Ã¹Ã¤Î","¶â¤Î","ÎÜÍþ¤Î","¿å¾½¤Î","¶ä¤Î",
116 "Ƽ¤Î","ÒĤÎ", "¥×¥é¥Á¥Ê¤Î", "¥ë¡¼¥ó¤¬¹ï¤Þ¤ì¤¿","»¬¤Ó¤¿",
117 "¶Ê¤¬¤Ã¤¿", "¥É¥é¥´¥ó¤ÎÄÞ¤Î", "¿ô¼î¤Î", "¤Ò¤¹¤¤¤Î", "¥ß¥¹¥ê¥ë¤Î",
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]
139 "Aspen", "Balsa", "Banyan", "Birch", "Cedar",
140 "Cottonwood", "Cypress", "Dogwood", "Elm", "Eucalyptus",
141 "Hemlock", "Hickory", "Ironwood", "Locust", "Mahogany",
142 "Maple", "Mulberry", "Oak", "Pine", "Redwood",
143 "Rosewood", "Spruce", "Sycamore", "Teak", "Walnut",
144 "Mistletoe", "Hawthorn", "Bamboo", "Silver", "Runed",
145 "Golden", "Ashen", "Ivory","Gnarled"/*,"Willow"*/
149 "¥Ý¥×¥é¤Î","¥Ð¥ë¥µ¤Î","¥Ð¥ó¥ä¥ó¤Î","¥«¥Ð¤Î","À¾ÍÎ¥¹¥®¤Î",
150 "ÛؤÎ","¥¤¥È¥¹¥®¤Î","¥ß¥º¥¤Î","¥Ë¥ì¤Î","¥æ¡¼¥«¥ê¤Î",
151 "¥Ä¥¬¤Î","¥Ö¥Ê¤Î","¹õÃɤÎ","¥¢¥«¥·¥¢¤Î","¥Þ¥Û¥¬¥Ë¡¼¤Î",
152 "¥«¥¨¥Ç¤Î","¥¯¥ï¤Î","¥«¥·¤Î","¾¾¤Î","¿ù¤Î",
153 "»çÃɤÎ","¥¨¥¾¥Þ¥Ä¤Î","¥¤¥Á¥¸¥¯¤Î","¥Á¡¼¥¯¤Î","¥¯¥ë¥ß¤Î",
154 "¥ä¥É¥ê¥®¤Î","¥µ¥ó¥¶¥·¤Î","ÃݤÎ","¶ä¤Î","¥ë¡¼¥ó¤Î",
155 "¶â¤Î","¥È¥Í¥ê¥³¤Î", "¾Ý²ç¤Î", "·î·Ë¼ù¤Î"
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]
177 "Aluminum", "Cast Iron", "Chromium", "Copper", "Gold",
178 "Iron", "Magnesium", "Molybdenum", "Nickel", "Rusty",
179 "Silver", "Steel", "Tin", "Titanium", "Tungsten",
180 "Zirconium", "Zinc", "Aluminum-Plated", "Copper-Plated", "Gold-Plated",
181 "Nickel-Plated", "Silver-Plated", "Steel-Plated", "Tin-Plated", "Zinc-Plated",
182 "Mithril-Plated", "Mithril", "Runed", "Bronze", "Brass",
183 "Platinum", "Lead","Lead-Plated", "Ivory" , "Adamantite",
184 "Uridium", "Long", "Short", "Hexagonal", "Carbonized"
188 "¥¢¥ë¥ß¤Î","ÃòÅ´¤Î","¥¯¥í¥à¤Î","Ƽ¤Î","¶â¤Î",
189 "Å´¤Î","¥Þ¥°¥Í¥·¥¦¥à¤Î","¥â¥ê¥Ö¥Ç¥ó¤Î","¥Ë¥Ã¥±¥ë¤Î","»¬¤Ó¤¿",
190 "¶ä¤Î","¹ÝÅ´¤Î","¥Ö¥ê¥¤Î","¥Á¥¿¥ó¤Î","¥¿¥ó¥°¥¹¥Æ¥ó¤Î",
191 "¥¸¥ë¥³¥ó¤Î","°¡±ô¤Î","¥¢¥ë¥ß¥á¥Ã¥¤Î","Ƽ¥á¥Ã¥¤Î","¶â¥á¥Ã¥¤Î",
192 "ÇòƼ¥á¥Ã¥¤Î","¶ä¥á¥Ã¥¤Î","Å´¥á¥Ã¥¤Î","¥¹¥º¥á¥Ã¥¤Î","°¡±ô¥á¥Ã¥¤Î",
193 "¥ß¥¹¥ê¥ë¥á¥Ã¥¤Î","¥ß¥¹¥ê¥ë¤Î","¥ë¡¼¥ó¤¬¹ï¤Þ¤ì¤¿","ÀÄƼ¤Î","¿¿ï«¤Î",
194 "¥×¥é¥Á¥Ê¤Î","±ô¤Î","±ô¥á¥Ã¥¤Î","¾Ý²ç¤Î","¥¢¥À¥Þ¥ó¥¿¥¤¥È¤Î",
195 "¥¤¥ê¥Â¥¦¥à¤Î","Ť¤","û¤¤","Ï»³Ñ·Á¤Î", "úÁǤÎ"
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];
219 static byte rod_col[MAX_METALS];
223 * Mushrooms (adjectives and colors)
226 static cptr food_adj[MAX_SHROOM]
229 "Blue", "Black", "Black Spotted", "Brown", "Dark Blue",
230 "Dark Green", "Dark Red", "Yellow", "Furry", "Green",
231 "Grey", "Light Blue", "Light Green", "Violet", "Red",
232 "Slimy", "Tan", "White", "White Spotted", "Wrinkled",
236 "ÀĤ¤","¹õ¤¤","¹õÈäÎ","Ã㿧¤Î","·²ÀĤÎ",
237 "¿¼ÎФÎ","¹È¿§¤Î","²«¿§¤¤","Âݤष¤¿","ÎФÎ",
238 "¥°¥ì¡¼¤Î","¶õ¿§¤Î","²«ÎФÎ","¥¹¥ß¥ì¿§¤Î","ÀÖ¤¤",
239 "¤Í¤Ð¤Í¤Ð¤·¤¿","²«³ì¿§¤Î","Çò¤¤","ÇòÈäÎ","¤·¤ï¤·¤ï¤Î",
243 static byte food_col[MAX_SHROOM] =
245 TERM_BLUE, TERM_L_DARK, TERM_L_DARK, TERM_UMBER, TERM_BLUE,
246 TERM_GREEN, TERM_RED, TERM_YELLOW, TERM_L_WHITE, TERM_GREEN,
247 TERM_SLATE, TERM_L_BLUE, TERM_L_GREEN, TERM_VIOLET, TERM_RED,
248 TERM_SLATE, TERM_L_UMBER, TERM_WHITE, TERM_WHITE, TERM_UMBER
253 * Color adjectives and colors, for potions.
254 * Hack -- The first four entries are hard-coded.
255 * (water, apple juice, slime mold juice, something)
258 static cptr potion_adj[MAX_COLORS]
261 "Clear", "Light Brown", "Icky Green", "xxx",
262 "Azure", "Blue", "Blue Speckled", "Black", "Brown", "Brown Speckled",
263 "Bubbling", "Chartreuse", "Cloudy", "Copper Speckled", "Crimson", "Cyan",
264 "Dark Blue", "Dark Green", "Dark Red", "Gold Speckled", "Green",
265 "Green Speckled", "Grey", "Grey Speckled", "Hazy", "Indigo",
266 "Light Blue", "Light Green", "Magenta", "Metallic Blue", "Metallic Red",
267 "Metallic Green", "Metallic Purple", "Misty", "Orange", "Orange Speckled",
268 "Pink", "Pink Speckled", "Puce", "Purple", "Purple Speckled",
269 "Red", "Red Speckled", "Silver Speckled", "Smoky", "Tangerine",
270 "Violet", "Vermilion", "White", "Yellow", "Violet Speckled",
271 "Pungent", "Clotted Red", "Viscous Pink", "Oily Yellow", "Gloopy Green",
272 "Shimmering", "Coagulated Crimson", "Yellow Speckled", "Gold",
273 "Manly", "Stinking", "Oily Black", "Ichor", "Ivory White", "Sky Blue",
274 "Gray", "Silver", "Bronze", "Flashing",
278 "Æ©ÌÀ¤Ê","ÇöÃ㿧¤Î","¤è¤É¤ó¤ÀÎФÎ","¼¿¹õ¤Î",
279 "º°ÊˤÎ","ÀĤ¤","ÀÄÈäÎ","¹õ¤¤","Ã㿧¤Î","ÃãÈäÎ",
280 "Ë¢¤À¤Ã¤¿","Çö²«Î理Î","Âù¤Ã¤¿","ƼÈäÎ","¹È¿§¤Î","¥·¥¢¥ó¿§¤Î",
281 "·²ÀÄ¿§¤Î","¿¼¤¤ÎФÎ","¿¼¤¤ÀÖ¿§¤Î","¶âÈäÎ","Î理Î",
282 "ÎÐÈäÎ","³¥¿§¤Î","³¥ÈäÎ","¤Ü¤ä¤±¤¿¿§¤Î","Íõ¿§¤Î",
283 "Çö¤¤ÀÄ¿§¤Î","Çö¤¤Î理Î","¥Þ¥¼¥ó¥¿¿§¤Î","ÀĤ¯µ±¤¯","ÀÖ¤¯µ±¤¯",
284 "ÎФ˵±¤¯","»ç¤Ëµ±¤¯","̸¾õ¤Î","¥ª¥ì¥ó¥¸¿§¤Î","¥ª¥ì¥ó¥¸ÈäÎ",
285 "¥Ô¥ó¥¯¿§¤Î","¥Ô¥ó¥¯ÈäÎ","¹õ³ì¿§¤Î","»ç¿§¤Î","¤¦¤¹¤¤»çÈäÎ",
286 "ÀÖ¤¤","ÀÖÈäÎ","¶äÈäÎ","±ì¤Ã¤¿","Üô¿§¤Î",
287 "¥¹¥ß¥ì¿§¤Î","¼ë¿§¤Î","Çò¤¤","²«¿§¤¤", "»çÈäÎ",
288 "»É·ã½¤Î¤¹¤ë","¤è¤É¤ó¤ÀÀÖ¤Î","¥É¥í¥É¥í¤Î","¤Í¤Ð¤Ã¤¿²«¿§¤Î","°ÅÎ理Î",
289 "µ±¤¯","¤Í¤Ð¤Ã¤¿¿¼¹È¤Î","²«ÈäÎ","¶â¿§¤Î",
290 "Ã˽¤¤" /*nuke me*/,"°½¤Î¤¹¤ë","¹õÌý¿§¤Î","ǾÞù¤Î",
291 "¾Ý²ç¿§¤Î","¶õ¿§¤Î", "¤Í¤º¤ß¿§¤Î", "¶ä¿§¤Î", "ÀÖƼ¿§¤Î",
296 static byte potion_col[MAX_COLORS] =
298 TERM_WHITE, TERM_L_UMBER, TERM_GREEN, 0,
299 TERM_L_BLUE, TERM_BLUE, TERM_BLUE, TERM_L_DARK, TERM_UMBER, TERM_UMBER,
300 TERM_L_WHITE, TERM_L_GREEN, TERM_WHITE, TERM_L_UMBER, TERM_RED, TERM_L_BLUE,
301 TERM_BLUE, TERM_GREEN, TERM_RED, TERM_YELLOW, TERM_GREEN,
302 TERM_GREEN, TERM_SLATE, TERM_SLATE, TERM_L_WHITE, TERM_VIOLET,
303 TERM_L_BLUE, TERM_L_GREEN, TERM_RED, TERM_BLUE, TERM_RED,
304 TERM_GREEN, TERM_VIOLET, TERM_L_WHITE, TERM_ORANGE, TERM_ORANGE,
305 TERM_L_RED, TERM_L_RED, TERM_VIOLET, TERM_VIOLET, TERM_VIOLET,
306 TERM_RED, TERM_RED, TERM_L_WHITE, TERM_L_DARK, TERM_ORANGE,
307 TERM_VIOLET, TERM_RED, TERM_WHITE, TERM_YELLOW, TERM_VIOLET,
308 TERM_L_RED, TERM_RED, TERM_L_RED, TERM_YELLOW, TERM_GREEN,
309 TERM_MULTI, TERM_RED, TERM_YELLOW, TERM_YELLOW,
310 TERM_L_UMBER, TERM_UMBER, TERM_L_DARK, TERM_RED,
311 TERM_WHITE, TERM_L_BLUE, TERM_L_WHITE, TERM_WHITE, TERM_RED,
317 * Syllables for scrolls (must be 1-4 letters each)
320 static cptr syllables[MAX_SYLLABLES]
323 "Å·", "ÃÏ", "̵", "ÍÑ", "°ì", "Åá", "ξ", "ÃÇ",
324 "°á", "Ë¥", "Æü", "Àé", "½©", "Ëþ", "¿È", "ÁÏ",
325 "áØ", "¼·", "ž", "Ȭ", "ÅÝ", "²é", "¿Å",
326 "¾¨", "ÃÀ", "µ¯", "»à", "²ó", "À¸", "ʸ",
327 "Éð", "Æ»", "ε", "Ƭ", "¼Ø", "Èø", "ñ", "Åá", "ľ", "Æþ",
328 "¿Ê", "Âà", "¸Þ", "¡", "Ï»", "ç¥", "Âç", "»³", "ÌÄ",
329 "Æ°", "É÷", "ÎÓ", "²Ð", "Àä", "ÂÎ", "Ì¿", "»Í",
330 "ÌÌ", "Á¿", "²Î", "´°", "Á´", "·ç", "Ä·", "ÎÂ",
331 "ìí", "î½", "òµ", "Ì¥", "ò³", "ò´", "½Ä",
332 "²£", "¿Ô", "¿À", "½Ð", "µ´", "Ë×", "²¹", "¸Î", "ÃÎ",
333 "¿·", "½Õ", "²Æ", "Åß", "½ã", "¿¿", "¹¤", "¶½",
334 "Ì£", "ÄÅ", "³Î", "Èæ", "¶ì", "¿´", "»´", "߸",
335 "Ç°", "ȯ", "Á°", "Âå", "̤", "ʹ", "¶õ", "¸å",
336 "Ú¼", "¶â", "¿¹", "Íå", "Ëü", "¾Ý", "ÊÑ", "²½",
337 "½½", "Ãæ", "Ȭ", "¶å", "¿Í", "¿§", "»î", "¹Ô",
338 "ºø", "¸í", "»ö", "¼Â", "º¬", "µÛ", "¼ý", "¹ç",
339 "Ê»", "Á´", "¹ñ", "À©", "ÇÆ", "¾Æ", "Æù", "Äê",
340 "¿©", "¹ü", "²ç", "Ìø", "Èô", "æÆ", "Éõ", "°õ",
341 "¼À", "Íð", "Éð", "¾", "·Ú", "Ǧ", "·õ", "ǽ",
342 "À»", "¼Ù", "¼ö", "¼±", "¸¸", "´¶", "ÆÇ", "°Ç",
347 "a", "ab", "ag", "aks", "ala", "an", "ankh", "app",
348 "arg", "arze", "ash", "aus", "ban", "bar", "bat", "bek",
349 "bie", "bin", "bit", "bjor", "blu", "bot", "bu",
350 "byt", "comp", "con", "cos", "cre", "dalf", "dan",
351 "den", "der", "doe", "dok", "eep", "el", "eng", "er", "ere", "erk",
352 "esh", "evs", "fa", "fid", "flit", "for", "fri", "fu", "gan",
353 "gar", "glen", "gop", "gre", "ha", "he", "hyd", "i",
354 "ing", "ion", "ip", "ish", "it", "ite", "iv", "jo",
355 "kho", "kli", "klis", "la", "lech", "man", "mar",
356 "me", "mi", "mic", "mik", "mon", "mung", "mur", "nag", "nej",
357 "nelg", "nep", "ner", "nes", "nis", "nih", "nin", "o",
358 "od", "ood", "org", "orn", "ox", "oxy", "pay", "pet",
359 "ple", "plu", "po", "pot", "prok", "re", "rea", "rhov",
360 "ri", "ro", "rog", "rok", "rol", "sa", "san", "sat",
361 "see", "sef", "seh", "shu", "ski", "sna", "sne", "snik",
362 "sno", "so", "sol", "sri", "sta", "sun", "ta", "tab",
363 "tem", "ther", "ti", "tox", "trol", "tue", "turs", "u",
364 "ulk", "um", "un", "uni", "ur", "val", "viv", "vly",
365 "vom", "wah", "wed", "werg", "wex", "whon", "wun", "x",
366 "yerg", "yp", "zun", "tri", "blaa", "jah", "bul", "on",
373 * Hold the titles of scrolls, 6 to 14 characters each
374 * Also keep an array of scroll colors (always WHITE for now)
376 static char scroll_adj[MAX_TITLES][16];
378 static byte scroll_col[MAX_TITLES];
382 * Certain items, if aware, are known instantly
383 * This function is used only by "flavor_init()"
385 static bool object_easy_know(int i)
387 object_kind *k_ptr = &k_info[i];
389 /* Analyze the "tval" */
394 case TV_SORCERY_BOOK:
400 case TV_ENCHANT_BOOK:
403 case TV_HISSATSU_BOOK:
419 /* All Food, Potions, Scrolls, Rods */
435 * Certain items have a flavor
436 * This function is used only by "flavor_init()"
438 static bool object_flavor(int k_idx)
440 object_kind *k_ptr = &k_info[k_idx];
442 /* Analyze the item */
447 return (0x80 + amulet_col[k_ptr->sval]);
452 return (0x90 + ring_col[k_ptr->sval]);
457 return (0xA0 + staff_col[k_ptr->sval]);
462 return (0xB0 + wand_col[k_ptr->sval]);
467 return (0xC0 + rod_col[k_ptr->sval]);
472 return (0xD0 + scroll_col[k_ptr->sval]);
477 return (0xE0 + potion_col[k_ptr->sval]);
482 if (k_ptr->sval < SV_FOOD_MIN_FOOD)
484 return (0xF0 + food_col[k_ptr->sval]);
496 void get_table_name(char *out_string)
500 strcpy(out_string, "¡Ø");
501 get_rnd_line("aname_j.txt", 1, Syllable);
502 strcat(out_string, Syllable);
503 get_rnd_line("aname_j.txt", 2, Syllable);
504 strcat(out_string, Syllable);
505 strcat(out_string, "¡Ù");
507 int testcounter = randint1(3) + 1;
509 strcpy(out_string, "'");
511 if (randint1(3) == 2)
513 while (testcounter--)
514 strcat(out_string, syllables[randint0(MAX_SYLLABLES)]);
519 testcounter = randint1(2) + 1;
520 while (testcounter--)
522 (void)get_rnd_line("elvish.txt", 0, Syllable);
523 strcat(out_string, Syllable);
527 out_string[1] = toupper(out_string[1]);
529 strcat(out_string, "'");
533 out_string[18] = '\0';
540 * Prepare the "variable" part of the "k_info" array.
542 * The "color"/"metal"/"type" of an item is its "flavor".
543 * For the most part, flavors are assigned randomly each game.
545 * Initialize descriptions for the "colored" objects, including:
546 * Rings, Amulets, Staffs, Wands, Rods, Food, Potions, Scrolls.
548 * The first 4 entries for potions are fixed (Water, Apple Juice,
549 * Slime Mold Juice, Unused Potion).
551 * Scroll titles are always between 6 and 14 letters long. This is
552 * ensured because every title is composed of whole words, where every
553 * word is from 1 to 8 letters long (one or two syllables of 1 to 4
554 * letters each), and that no scroll is finished until it attempts to
555 * grow beyond 15 letters. The first time this can happen is when the
556 * current title has 6 letters and the new word has 8 letters, which
557 * would result in a 6 letter scroll title.
559 * Duplicate titles are avoided by requiring that no two scrolls share
560 * the same first four letters (not the most efficient method, and not
561 * the least efficient method, but it will always work).
563 * Hack -- make sure everything stays the same for each saved game
564 * This is accomplished by the use of a saved "random seed", as in
565 * "town_gen()". Since no other functions are called while the special
566 * seed is in effect, so this function is pretty "safe".
568 * Note that the "hacked seed" may provide an RNG with alternating parity!
570 void flavor_init(void)
579 /* Hack -- Use the "simple" RNG */
582 /* Hack -- Induce consistant flavors */
583 Rand_value = seed_flavor;
586 /* Efficiency -- Rods/Wands share initial array */
587 for (i = 0; i < MAX_METALS; i++)
589 rod_adj[i] = wand_adj[i];
590 rod_col[i] = wand_col[i];
594 /* Rings have "ring colors" */
595 for (i = 0; i < MAX_ROCKS; i++)
597 j = randint0(MAX_ROCKS);
598 temp_adj = ring_adj[i];
599 ring_adj[i] = ring_adj[j];
600 ring_adj[j] = temp_adj;
602 temp_col = ring_col[i];
603 ring_col[i] = ring_col[j];
604 ring_col[j] = temp_col;
607 /* Hack -- The One Ring */
609 ring_adj[SV_RING_POWER] = "¶â̵¹¤¤Î";
610 ring_adj[SV_RING_AHO] = "¶â͹¤¤Î";
612 ring_adj[SV_RING_POWER] = "Plain Gold";
613 ring_adj[SV_RING_AHO] = "Plain Goldarn";
618 ring_col[SV_RING_POWER] = TERM_YELLOW;
619 ring_col[SV_RING_AHO] = TERM_YELLOW;
622 /* Amulets have "amulet colors" */
623 for (i = 0; i < MAX_AMULETS; i++)
625 j = randint0(MAX_AMULETS);
626 temp_adj = amulet_adj[i];
627 amulet_adj[i] = amulet_adj[j];
628 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 = randint0(MAX_WOODS);
639 temp_adj = staff_adj[i];
640 staff_adj[i] = staff_adj[j];
641 staff_adj[j] = temp_adj;
643 temp_col = staff_col[i];
644 staff_col[i] = staff_col[j];
645 staff_col[j] = temp_col;
649 for (i = 0; i < MAX_METALS; i++)
651 j = randint0(MAX_METALS);
652 temp_adj = wand_adj[i];
653 wand_adj[i] = wand_adj[j];
654 wand_adj[j] = temp_adj;
656 temp_col = wand_col[i];
657 wand_col[i] = wand_col[j];
658 wand_col[j] = temp_col;
662 for (i = 0; i < MAX_METALS; i++)
664 j = randint0(MAX_METALS);
665 temp_adj = rod_adj[i];
666 rod_adj[i] = rod_adj[j];
667 rod_adj[j] = temp_adj;
669 temp_col = rod_col[i];
670 rod_col[i] = rod_col[j];
671 rod_col[j] = temp_col;
674 /* Foods (Mushrooms) */
675 for (i = 0; i < MAX_SHROOM; i++)
677 j = randint0(MAX_SHROOM);
678 temp_adj = food_adj[i];
679 food_adj[i] = food_adj[j];
680 food_adj[j] = temp_adj;
682 temp_col = food_col[i];
683 food_col[i] = food_col[j];
684 food_col[j] = temp_col;
688 for (i = 4; i < MAX_COLORS; i++)
690 j = randint0(MAX_COLORS - 4) + 4;
691 temp_adj = potion_adj[i];
692 potion_adj[i] = potion_adj[j];
693 potion_adj[j] = temp_adj;
695 temp_col = potion_col[i];
696 potion_col[i] = potion_col[j];
697 potion_col[j] = temp_col;
700 /* Scrolls (random titles, always white) */
701 for (i = 0; i < MAX_TITLES; i++)
703 /* Get a new title */
710 /* Start a new title */
713 /* Collect words until done */
720 /* Start a new word */
723 /* Choose one or two syllables */
724 s = ((randint0(100) < 30) ? 1 : 2);
726 /* Add a one or two syllable word */
727 for (q = 0; q < s; q++)
729 /* Add the syllable */
730 strcat(tmp, syllables[randint0(MAX_SYLLABLES)]);
733 /* Stop before getting too long */
734 if (strlen(buf) + 1 + strlen(tmp) > 15) break;
744 strcpy(scroll_adj[i], buf+1);
749 /* Check for "duplicate" scroll titles */
750 for (j = 0; j < i; j++)
752 cptr hack1 = scroll_adj[j];
753 cptr hack2 = scroll_adj[i];
755 /* Compare first four characters */
756 if (*hack1++ != *hack2++) continue;
757 if (*hack1++ != *hack2++) continue;
758 if (*hack1++ != *hack2++) continue;
759 if (*hack1++ != *hack2++) continue;
768 /* Break when done */
772 /* All scrolls are white */
773 scroll_col[i] = TERM_WHITE;
777 /* Hack -- Use the "complex" RNG */
780 /* Analyze every object */
781 for (i = 1; i < max_k_idx; i++)
783 object_kind *k_ptr = &k_info[i];
785 /* Skip "empty" objects */
786 if (!k_ptr->name) continue;
788 /* Extract "flavor" (if any) */
789 k_ptr->flavor = object_flavor(i);
791 /* No flavor yields aware */
792 if (!k_ptr->flavor) k_ptr->aware = TRUE;
794 /* Check for "easily known" */
795 k_ptr->easy_know = object_easy_know(i);
801 * Print a char "c" into a string "t", as if by sprintf(t, "%c", c),
802 * and return a pointer to the terminator (t + 1).
804 static char *object_desc_chr(char *t, char c)
818 * Print a string "s" into a string "t", as if by strcpy(t, s),
819 * and return a pointer to the terminator.
821 static char *object_desc_str(char *t, cptr s)
823 /* Copy the string */
824 while (*s) *t++ = *s++;
836 * Print an unsigned number "n" into a string "t", as if by
837 * sprintf(t, "%u", n), and return a pointer to the terminator.
839 static char *object_desc_num(char *t, uint n)
843 /* Find "size" of "n" */
844 for (p = 1; n >= p * 10; p = p * 10) /* loop */;
846 /* Dump each digit */
852 /* Remove the digit */
855 /* Process next digit */
871 * ÆüËܸì¤Î¸Ä¿ôɽ¼¨¥ë¡¼¥Á¥ó
872 *¡Êcmd1.c ¤ÇήÍѤ¹¤ë¤¿¤á¤Ë object_desc_japanese ¤«¤é°ÜÆ°¤·¤¿¡£¡Ë
875 extern char *object_desc_kosuu(char *t, object_type *o_ptr)
877 t = object_desc_num(t, o_ptr->number);
889 t = object_desc_str(t, "ËÜ");
894 t = object_desc_str(t, "´¬");
899 t = object_desc_str(t, "Éþ");
903 case TV_SORCERY_BOOK:
909 case TV_ENCHANT_BOOK:
912 case TV_HISSATSU_BOOK:
914 t = object_desc_str(t, "ºý");
922 t = object_desc_str(t, "Ãå");
929 t = object_desc_str(t, "¿¶");
934 t = object_desc_str(t, "");
939 t = object_desc_str(t, "Ëç");
942 /* ¿©¤Ù¤â¤Î by ita */
945 if(o_ptr->sval == SV_FOOD_JERKY)
947 t = object_desc_str(t, "ÀÚ¤ì");
953 if (o_ptr->number < 10)
955 t = object_desc_str(t, "¤Ä");
959 t = object_desc_str(t, "¸Ä");
969 * Print an signed number "v" into a string "t", as if by
970 * sprintf(t, "%+d", n), and return a pointer to the terminator.
971 * Note that we always print a sign, either "+" or "-".
973 static char *object_desc_int(char *t, sint v)
980 /* Take the absolute value */
983 /* Use a "minus" sign */
987 /* Positive (or zero) */
990 /* Use the actual number */
993 /* Use a "plus" sign */
997 /* Find "size" of "n" */
998 for (p = 1; n >= p * 10; p = p * 10) /* loop */;
1000 /* Dump each digit */
1003 /* Dump the digit */
1006 /* Remove the digit */
1009 /* Process next digit */
1022 * Creates a description of the item "o_ptr", and stores it in "out_val".
1024 * One can choose the "verbosity" of the description, including whether
1025 * or not the "number" of items should be described, and how much detail
1026 * should be used when describing the item.
1028 * The given "buf" must be MAX_NLEN chars long to hold the longest possible
1029 * description, which can get pretty long, including incriptions, such as:
1030 * "no more Maces of Disruption (Defender) (+10,+10) [+5] (+3 to stealth)".
1031 * Note that the inscription will be clipped to keep the total description
1032 * under MAX_NLEN-1 chars (plus a terminator).
1034 * Note the use of "object_desc_num()" and "object_desc_int()" as hyper-efficient,
1035 * portable, versions of some common "sprintf()" commands.
1037 * Note that all ego-items (when known) append an "Ego-Item Name", unless
1038 * the item is also an artifact, which should NEVER happen.
1040 * Note that all artifacts (when known) append an "Artifact Name", so we
1041 * have special processing for "Specials" (artifact Lites, Rings, Amulets).
1042 * The "Specials" never use "modifiers" if they are "known", since they
1043 * have special "descriptions", such as "The Necklace of the Dwarves".
1045 * Special Lite's use the "k_info" base-name (Phial, Star, or Arkenstone),
1046 * plus the artifact name, just like any other artifact, if known.
1048 * Special Ring's and Amulet's, if not "aware", use the same code as normal
1049 * rings and amulets, and if "aware", use the "k_info" base-name (Ring or
1050 * Amulet or Necklace). They will NEVER "append" the "k_info" name. But,
1051 * they will append the artifact name, just like any artifact, if known.
1053 * Hack -- Display "The One Ring" as "a Plain Gold Ring" until aware.
1055 * If "pref" then a "numeric" prefix will be pre-pended.
1058 * 0 -- The Cloak of Death
1059 * 1 -- The Cloak of Death [1,+3]
1060 * 2 -- The Cloak of Death [1,+3] (+2 to Stealth)
1061 * 3 -- The Cloak of Death [1,+3] (+2 to Stealth) {nifty}
1063 void object_desc(char *buf, object_type *o_ptr, int pref, int mode)
1065 cptr basenm, modstr;
1066 int power, indexx, i;
1071 bool append_name = FALSE;
1073 bool show_weapon = FALSE;
1074 bool show_armour = FALSE;
1079 char p1 = '(', p2 = ')';
1080 char b1 = '[', b2 = ']';
1081 char c1 = '{', c2 = '}';
1083 char tmp_val[MAX_NLEN+160];
1084 char tmp_val2[MAX_NLEN+10];
1088 object_type *bow_ptr;
1091 object_kind *k_ptr = &k_info[o_ptr->k_idx];
1093 monster_race *r_ptr = &r_info[o_ptr->pval];
1095 /* Extract some flags */
1096 object_flags(o_ptr, &f1, &f2, &f3);
1098 /* See if the object is "aware" */
1099 if (object_aware_p(o_ptr) || (o_ptr->ident & IDENT_MENTAL)) aware = TRUE;
1101 /* See if the object is "known" */
1102 if (object_known_p(o_ptr)) known = TRUE;
1104 /* Hack -- Extract the sub-type "indexx" */
1105 indexx = o_ptr->sval;
1107 /* Extract default "base" string */
1108 basenm = get_object_name(o_ptr);
1110 /* Assume no "modifier" string */
1114 /* Analyze the object */
1115 switch (o_ptr->tval)
1117 /* Some objects are easy to describe */
1138 modstr = " (empty)";
1144 sprintf(tmp_val2, "¡Ê%s¡Ë",r_name + r_ptr->name);
1147 cptr t = r_name + r_ptr->name;
1149 if (!(r_ptr->flags1 & RF1_UNIQUE))
1151 sprintf(tmp_val2, " (%s%s)", (is_a_vowel(*t) ? "an " : "a "), t);
1157 sprintf(tmp_val2, "(%s)", t);
1167 /* Figurines/Statues */
1172 modstr = r_name + r_ptr->name;
1174 cptr t = r_name + r_ptr->name;
1176 if (!(r_ptr->flags1 & RF1_UNIQUE))
1178 sprintf(tmp_val2, "%s%s", (is_a_vowel(*t) ? "an " : "a "), t);
1195 modstr = r_name + r_ptr->name;
1199 sprintf(tmp_val2, "& #%s", basenm + 2);
1201 if (r_ptr->flags1 & RF1_UNIQUE)
1203 sprintf(tmp_val2, "%s %s", basenm, "of #");
1207 sprintf(tmp_val2, "& # %s", basenm + 2);
1216 /* Missiles/ Bows/ Weapons */
1247 /* Lites (including a few "Specials") */
1253 /* Amulets (including a few "Specials") */
1256 /* Known artifacts */
1257 if (artifact_p(o_ptr) && aware) break;
1259 if ((k_ptr->gen_flags & TRG_INSTA_ART) && aware) break;
1261 /* Color the object */
1262 modstr = amulet_adj[indexx];
1264 if (aware) append_name = TRUE;
1266 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1268 basenm = aware ? "& %¤Î¥¢¥ß¥å¥ì¥Ã¥È" : "& ¥¢¥ß¥å¥ì¥Ã¥È";
1270 basenm = aware ? "& #%¤Î¥¢¥ß¥å¥ì¥Ã¥È" : "& #¥¢¥ß¥å¥ì¥Ã¥È";
1272 basenm = "& Amulet~";
1274 basenm = aware ? "& # Amulet~" : "& # Amulet~";
1280 /* Rings (including a few "Specials") */
1283 /* Known artifacts */
1284 if (artifact_p(o_ptr) && aware) break;
1286 if ((k_ptr->gen_flags & TRG_INSTA_ART) && aware) break;
1288 /* Color the object */
1289 modstr = ring_adj[indexx];
1291 if (aware) append_name = TRUE;
1293 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1295 basenm = aware ? "& %¤Î»ØÎØ" : "& »ØÎØ";
1297 basenm = aware ? "& #%¤Î»ØÎØ" : "& #»ØÎØ";
1301 basenm = aware ? "& # Ring~" : "& # Ring~";
1304 if (!k_ptr->to_h && !k_ptr->to_d && (o_ptr->to_h || o_ptr->to_d)) show_weapon = TRUE;
1316 /* Color the object */
1317 modstr = staff_adj[indexx];
1319 if (aware) append_name = TRUE;
1320 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1322 basenm = aware ? "& %¤Î¾ó" : "& ¾ó";
1324 basenm = aware ? "& #%¤Î¾ó" : "& #¾ó";
1326 basenm = "& Staff~";
1328 basenm = aware ? "& # Staff~" : "& # Staff~";
1336 /* Color the object */
1337 modstr = wand_adj[indexx];
1339 if (aware) append_name = TRUE;
1340 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1342 basenm = aware? "& %¤ÎËâË¡ËÀ":"& ËâË¡ËÀ";
1344 basenm = aware ? "& #%¤ÎËâË¡ËÀ" : "& #ËâË¡ËÀ";
1348 basenm = aware ? "& # Wand~" : "& # Wand~";
1356 /* Color the object */
1357 modstr = rod_adj[indexx];
1359 if (aware) append_name = TRUE;
1360 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1362 basenm = aware? "& %¤Î¥í¥Ã¥É":"& ¥í¥Ã¥É";
1364 basenm = aware ? "& #%¤Î¥í¥Ã¥É" : "& #¥í¥Ã¥É";
1368 basenm = aware ? "& # Rod~" : "& # Rod~";
1376 /* Color the object */
1377 modstr = scroll_adj[indexx];
1378 if (aware) append_name = TRUE;
1379 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1381 basenm = aware ? "& %¤Î´¬Êª" : "& ´¬Êª";
1383 basenm = aware ? "& ¡Ö#¡×¤È½ñ¤«¤ì¤¿%¤Î´¬Êª" : "& ¡Ö#¡×¤È½ñ¤«¤ì¤¿´¬Êª";
1385 basenm = "& Scroll~";
1387 basenm = aware ? "& Scroll~ titled \"#\"" : "& Scroll~ titled \"#\"";
1395 /* Color the object */
1396 modstr = potion_adj[indexx];
1398 if (aware) append_name = TRUE;
1399 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1401 basenm = aware ? "& %¤ÎÌô" : "& Ìô";
1403 basenm = aware ? "& #%¤ÎÌô" : "& #Ìô";
1405 basenm = "& Potion~";
1407 basenm = aware ? "& # Potion~" : "& # Potion~";
1415 /* Ordinary food is "boring" */
1416 if (o_ptr->sval >= SV_FOOD_MIN_FOOD) break;
1418 /* Color the object */
1419 modstr = food_adj[indexx];
1421 if (aware) append_name = TRUE;
1422 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1424 basenm = aware ? "& %¤Î¥¥Î¥³" : "& ¥¥Î¥³";
1426 basenm = aware ? "& #%¤Î¥¥Î¥³" : "& #¥¥Î¥³";
1428 basenm = "& Mushroom~";
1430 basenm = aware ? "& # Mushroom~" : "& # Mushroom~";
1440 basenm = "& ÍÓÈé»æ - #";
1442 basenm = "& Parchement~ - #";
1452 basenm = "& À¸Ì¿¤ÎËâË¡½ñ#";
1454 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1455 basenm = "& Book~ of Life Magic #";
1457 basenm = "& Life Spellbook~ #";
1463 case TV_SORCERY_BOOK:
1467 basenm = "& Àç½Ñ¤ÎËâË¡½ñ#";
1469 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1470 basenm = "& Book~ of Sorcery #";
1472 basenm = "& Sorcery Spellbook~ #";
1478 case TV_NATURE_BOOK:
1482 basenm = "& ¼«Á³¤ÎËâË¡½ñ#";
1484 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1485 basenm = "& Book~ of Nature Magic #";
1487 basenm = "& Nature Spellbook~ #";
1497 basenm = "& ¥«¥ª¥¹¤ÎËâË¡½ñ#";
1499 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1500 basenm = "& Book~ of Chaos Magic #";
1502 basenm = "& Chaos Spellbook~ #";
1512 basenm = "& °Å¹õ¤ÎËâË¡½ñ#";
1514 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1515 basenm = "& Book~ of Death Magic #";
1517 basenm = "& Death Spellbook~ #";
1527 basenm = "& ¥È¥é¥ó¥×¤ÎËâË¡½ñ#";
1529 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1530 basenm = "& Book~ of Trump Magic #";
1532 basenm = "& Trump Spellbook~ #";
1538 case TV_ARCANE_BOOK:
1542 basenm = "& Èë½Ñ¤ÎËâË¡½ñ#";
1544 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1545 basenm = "& Book~ of Arcane Magic #";
1547 basenm = "& Arcane Spellbook~ #";
1552 case TV_ENCHANT_BOOK:
1556 basenm = "& ¾¢¤ÎËâË¡½ñ#";
1558 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1559 basenm = "& Book~ of Craft Magic #";
1561 basenm = "& Craft Spellbook~ #";
1566 case TV_DAEMON_BOOK:
1570 basenm = "& °Ëâ¤ÎËâË¡½ñ#";
1572 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1573 basenm = "& Book~ of Daemon Magic #";
1575 basenm = "& Daemon Spellbook~ #";
1586 basenm = "& Song Book~ #";
1591 case TV_HISSATSU_BOOK:
1595 basenm = "& Éð·Ý¤Î½ñ#";
1597 basenm = "& Book~ of Kendo #";
1605 /* Hack -- Gold/Gems */
1608 strcpy(buf, basenm);
1612 /* Used in the "inventory" routine */
1616 strcpy(buf, "(¤Ê¤·)");
1618 strcpy(buf, "(nothing)");
1626 /* Start dumping the result */
1630 if (basenm[0] == '&')
1640 else if (o_ptr->number > 1)
1642 if ( old_way_of_kaz == FALSE ){
1643 t = object_desc_num(t, o_ptr->number);
1644 if (o_ptr->number > 9)
1645 t = object_desc_str(t, "¸Ä¤Î ");
1647 t = object_desc_str(t, "¤Ä¤Î ");
1651 t = object_desc_kosuu(t,o_ptr);
1652 t = object_desc_str(t, "¤Î ");
1656 /* ±Ñ¸ì¤Î¾ì¹ç¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ï The ¤¬ÉÕ¤¯¤Î¤Çʬ¤«¤ë¤¬
1657 * ÆüËܸì¤Ç¤Ïʬ¤«¤é¤Ê¤¤¤Î¤Ç¥Þ¡¼¥¯¤ò¤Ä¤±¤ë
1659 if (known && artifact_p(o_ptr)) t = object_desc_str(t, "¡ú");
1660 else if (known && o_ptr->art_name) t = object_desc_str(t, "¡ù");
1664 /* The object "expects" a "number" */
1665 if (basenm[0] == '&')
1667 /* Skip the ampersand (and space) */
1676 /* Hack -- None left */
1677 else if (o_ptr->number <= 0)
1679 t = object_desc_str(t, "no more ");
1682 /* Extract the number */
1683 else if (o_ptr->number > 1)
1685 t = object_desc_num(t, o_ptr->number);
1686 t = object_desc_chr(t, ' ');
1689 /* Hack -- The only one of its kind */
1690 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
1692 t = object_desc_str(t, "The ");
1695 /* Unique corpses are unique */
1696 else if ((o_ptr->tval == TV_CORPSE) && (r_ptr->flags1 & RF1_UNIQUE))
1698 t = object_desc_str(t, "The ");
1701 /* A single one, with a vowel in the modifier */
1702 else if ((*s == '#') && (is_a_vowel(modstr[0])))
1704 t = object_desc_str(t, "an ");
1707 /* A single one, with a vowel */
1708 else if (is_a_vowel(*s))
1710 t = object_desc_str(t, "an ");
1713 /* A single one, without a vowel */
1716 t = object_desc_str(t, "a ");
1720 /* Hack -- objects that "never" take an article */
1732 /* Hack -- all gone */
1733 else if (o_ptr->number <= 0)
1735 t = object_desc_str(t, "no more ");
1738 /* Prefix a number if required */
1739 else if (o_ptr->number > 1)
1741 t = object_desc_num(t, o_ptr->number);
1742 t = object_desc_chr(t, ' ');
1745 /* Hack -- The only one of its kind */
1746 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
1748 t = object_desc_str(t, "The ");
1751 /* Hack -- single items get no prefix */
1759 /* Paranoia -- skip illegal tildes */
1760 /* while (*s == '~') s++; */
1763 if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
1765 t = object_desc_str(t,format("ÃÃÌê»Õ%s¤Î",player_name));
1768 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¡¢Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à¤Î̾Á°¤òÉղ乤ë */
1770 /* ¥é¥ó¥À¥à¡¦¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È */
1771 if (o_ptr->art_name)
1773 strcpy(temp, quark_str(o_ptr->art_name));
1774 /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
1775 /* ±Ñ¸ìÈǤΥ»¡¼¥Ö¥Õ¥¡¥¤¥ë¤«¤éÍ褿 'of XXX' ¤Ï,¡ÖXXX¤Î¡×¤Èɽ¼¨¤¹¤ë */
1776 if ( strncmp( temp , "of ",3)==0 ) {t=object_desc_str(t,&temp[3]);t=object_desc_str(t,"¤Î");}
1778 if ( strncmp( temp , "¡Ø" , 2 ) != 0 && temp[0]!='\'')
1779 t=object_desc_str(t, temp);
1781 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à */
1782 else if (o_ptr->name1) {
1783 artifact_type *a_ptr = &a_info[o_ptr->name1];
1784 /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
1785 if ( strncmp( (a_name + a_ptr->name), "¡Ø" , 2) != 0){
1786 t=object_desc_str(t, (a_name + a_ptr->name));
1789 /* ̾¤Î¤¢¤ë¥¢¥¤¥Æ¥à */
1790 else if (o_ptr->name2) {
1791 ego_item_type *e_ptr = &e_info[o_ptr->name2];
1792 t=object_desc_str(t, (e_name + e_ptr->name));
1796 /* Copy the string */
1805 /* Add a plural if needed */
1806 if (pref && o_ptr->number != 1)
1810 /* XXX XXX XXX Mega-Hack */
1812 /* Hack -- "Cutlass-es" and "Torch-es" */
1813 if ((k == 's') || (k == 'h')) *t++ = 'e';
1825 /* Insert the modifier */
1826 for (u = modstr; *u; u++) *t++ = *u;
1831 /* saigo ¤ÎÂå¤ï¤ê¡£¸úǽ¤òÉÕ²½¤¹¤ë by ita*/
1833 modstr=get_object_name(o_ptr);
1834 for (u = modstr; *u; u++) *t++ = *u;
1849 /* Append the "kind name" to the "base name" */
1853 t = object_desc_str(t, " of ");
1854 t = object_desc_str(t, get_object_name(o_ptr));
1860 /* '¡Ø'¤«¤é»Ï¤Þ¤ëÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ¸å¤ËÉղ乤ë */
1862 /* ¥é¥ó¥À¥à¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Î̾Á°¤Ï¥»¡¼¥Ö¥Õ¥¡¥¤¥ë¤ËµÏ¿
1863 ¤µ¤ì¤ë¤Î¤Ç¡¢±Ñ¸ìÈǤÎ̾Á°¤â¤½¤ì¤é¤·¤¯ÊÑ´¹¤¹¤ë */
1864 if (o_ptr->art_name)
1865 { char temp[256];int itemp;
1866 strcpy(temp, quark_str(o_ptr->art_name));
1867 /* MEGA HACK by ita*/
1868 if ( strncmp( temp , "¡Ø" , 2 ) == 0 ) t=object_desc_str(t, temp);else
1869 if( temp[0]=='\'' ) { itemp=strlen(temp);temp[itemp-1]=0;
1870 t=object_desc_str(t,"¡Ø");
1871 t=object_desc_str(t,&temp[1]);
1872 t=object_desc_str(t,"¡Ù");}
1875 else if (o_ptr->name1) {
1876 artifact_type *a_ptr = &a_info[o_ptr->name1];
1877 if ( strncmp( (a_name + a_ptr->name) , "¡Ø" , 2 ) == 0 ){
1878 t=object_desc_str(t, (a_name + a_ptr->name));
1881 else if (o_ptr->inscription)
1883 cptr str = quark_str(o_ptr->inscription);
1892 if (*str == '#') break;
1898 cptr str = strchr(quark_str(o_ptr->inscription), '#');
1900 /* Add the false name */
1901 t=object_desc_str(t,"¡Ø");
1902 t = object_desc_str(t, &str[1]);
1903 t=object_desc_str(t,"¡Ù");
1908 if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
1910 t = object_desc_str(t,format(" of %s the smith",player_name));
1913 /* Hack -- Append "Artifact" or "Special" names */
1916 /* Is it a new random artifact ? */
1917 if (o_ptr->art_name)
1919 t = object_desc_chr(t, ' ');
1921 t = object_desc_str(t, quark_str(o_ptr->art_name));
1924 /* Grab any artifact name */
1925 else if (o_ptr->name1)
1927 artifact_type *a_ptr = &a_info[o_ptr->name1];
1929 t = object_desc_chr(t, ' ');
1930 t = object_desc_str(t, (a_name + a_ptr->name));
1933 /* Grab any ego-item name */
1938 ego_item_type *e_ptr = &e_info[o_ptr->name2];
1940 t = object_desc_chr(t, ' ');
1941 t = object_desc_str(t, (e_name + e_ptr->name));
1944 if (o_ptr->inscription && strchr(quark_str(o_ptr->inscription), '#'))
1947 cptr str = strchr(quark_str(o_ptr->inscription), '#');
1949 /* Add the false name */
1950 t = object_desc_chr(t, ' ');
1951 t = object_desc_str(t, &str[1]);
1959 /* No more details wanted */
1960 if (mode < 1) goto copyback;
1962 /* Hack -- Chests must be described in detail */
1963 if (o_ptr->tval == TV_CHEST)
1965 /* Not searched yet */
1971 /* May be "empty" */
1972 else if (!o_ptr->pval)
1975 t = object_desc_str(t, "(¶õ)");
1977 t = object_desc_str(t, " (empty)");
1982 /* May be "disarmed" */
1983 else if (o_ptr->pval < 0)
1985 if (chest_traps[0 - o_ptr->pval])
1988 t = object_desc_str(t, "(²ò½üºÑ)");
1990 t = object_desc_str(t, " (disarmed)");
1997 t = object_desc_str(t, "(Èó»Ü¾û)");
1999 t = object_desc_str(t, " (unlocked)");
2005 /* Describe the traps, if any */
2008 /* Describe the traps */
2009 switch (chest_traps[o_ptr->pval])
2014 t = object_desc_str(t, "(»Ü¾û)");
2016 t = object_desc_str(t, " (Locked)");
2021 case CHEST_LOSE_STR:
2024 t = object_desc_str(t, "(ÆÇ¿Ë)");
2026 t = object_desc_str(t, " (Poison Needle)");
2031 case CHEST_LOSE_CON:
2034 t = object_desc_str(t, "(ÆÇ¿Ë)");
2036 t = object_desc_str(t, " (Poison Needle)");
2044 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2046 t = object_desc_str(t, " (Gas Trap)");
2051 case CHEST_PARALYZE:
2054 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2056 t = object_desc_str(t, " (Gas Trap)");
2064 t = object_desc_str(t, "(ÇúȯÁõÃÖ)");
2066 t = object_desc_str(t, " (Explosion Device)");
2072 case CHEST_BIRD_STORM:
2073 case CHEST_E_SUMMON:
2074 case CHEST_H_SUMMON:
2077 t = object_desc_str(t, "(¾¤´¤Î¥ë¡¼¥ó)");
2079 t = object_desc_str(t, " (Summoning Runes)");
2084 case CHEST_RUNES_OF_EVIL:
2087 t = object_desc_str(t, "(¼Ù°¤Ê¥ë¡¼¥ó)");
2089 t = object_desc_str(t, " (Gleaming Black Runes)");
2097 t = object_desc_str(t, "(¥Þ¥ë¥Á¡¦¥È¥é¥Ã¥×)");
2099 t = object_desc_str(t, " (Multiple Traps)");
2109 /* Display the item like a weapon */
2110 if (f3 & (TR3_SHOW_MODS)) show_weapon = TRUE;
2112 /* Display the item like a weapon */
2113 if (o_ptr->to_h && o_ptr->to_d) show_weapon = TRUE;
2115 /* Display the item like armour */
2116 if (o_ptr->ac) show_armour = TRUE;
2119 /* Dump base weapon info */
2120 switch (o_ptr->tval)
2122 /* Missiles and Weapons */
2131 /* Append a "damage" string */
2132 t = object_desc_chr(t, ' ');
2133 t = object_desc_chr(t, p1);
2134 t = object_desc_num(t, o_ptr->dd);
2135 t = object_desc_chr(t, 'd');
2136 t = object_desc_num(t, o_ptr->ds);
2137 t = object_desc_chr(t, p2);
2143 /* Bows get a special "damage string" */
2146 /* Mega-Hack -- Extract the "base power" */
2147 power = (o_ptr->sval % 10);
2149 /* Apply the "Extra Might" flag */
2150 if (f3 & (TR3_XTRA_MIGHT)) power++;
2152 /* Append a special "damage" string */
2153 t = object_desc_chr(t, ' ');
2154 t = object_desc_chr(t, p1);
2155 t = object_desc_chr(t, 'x');
2156 t = object_desc_num(t, power);
2157 t = object_desc_chr(t, p2);
2164 /* Add the weapon bonuses */
2167 /* Show the tohit/todam on request */
2170 t = object_desc_chr(t, ' ');
2171 t = object_desc_chr(t, p1);
2172 t = object_desc_int(t, o_ptr->to_h);
2173 t = object_desc_chr(t, ',');
2174 t = object_desc_int(t, o_ptr->to_d);
2175 t = object_desc_chr(t, p2);
2178 /* Show the tohit if needed */
2179 else if (o_ptr->to_h)
2181 t = object_desc_chr(t, ' ');
2182 t = object_desc_chr(t, p1);
2183 t = object_desc_int(t, o_ptr->to_h);
2184 t = object_desc_chr(t, p2);
2187 /* Show the todam if needed */
2188 else if (o_ptr->to_d)
2190 t = object_desc_chr(t, ' ');
2191 t = object_desc_chr(t, p1);
2192 t = object_desc_int(t, o_ptr->to_d);
2193 t = object_desc_chr(t, p2);
2197 bow_ptr = &inventory[INVEN_BOW];
2199 /* if have a firing weapon + ammo matches bow*/
2200 if (bow_ptr->k_idx &&
2201 (((bow_ptr->sval == SV_SLING) && (o_ptr->tval == TV_SHOT)) ||
2202 (((bow_ptr->sval == SV_SHORT_BOW) ||
2203 (bow_ptr->sval == SV_LONG_BOW) ||
2204 (bow_ptr->sval == SV_NAMAKE_BOW)) && (o_ptr->tval == TV_ARROW)) ||
2205 (((bow_ptr->sval == SV_LIGHT_XBOW) ||
2206 (bow_ptr->sval == SV_HEAVY_XBOW)) && (o_ptr->tval == TV_BOLT))))
2212 avgdam = o_ptr->dd * (o_ptr->ds + 1) * 10 / 2;
2214 /* See if the bow is "known" - then set damage bonus*/
2215 if (object_known_p(bow_ptr))
2217 avgdam += (bow_ptr->to_d * 10);
2220 /* effect of ammo */
2221 if (known) avgdam += (o_ptr->to_d * 10);
2223 energy_fire = bow_energy(bow_ptr->sval);
2224 tmul = bow_tmul(bow_ptr->sval);
2226 /* Get extra "power" from "extra might" */
2227 if (p_ptr->xtra_might) tmul++;
2229 tmul = tmul * (100 + (int)(adj_str_td[p_ptr->stat_ind[A_STR]]) - 128);
2231 /* launcher multiplier */
2233 avgdam /= (100 * 10);
2234 if (avgdam < 0) avgdam = 0;
2236 /* display (shot damage/ avg damage) */
2237 t = object_desc_chr(t, ' ');
2238 t = object_desc_chr(t, p1);
2239 t = object_desc_num(t, avgdam);
2240 t = object_desc_chr(t, '/');
2242 if (p_ptr->num_fire == 0)
2244 t = object_desc_chr(t, '0');
2248 /* calc effects of energy */
2249 avgdam *= (p_ptr->num_fire * 100);
2251 avgdam /= energy_fire;
2253 t = object_desc_num(t, avgdam);
2256 t = object_desc_chr(t, p2);
2258 else if ((p_ptr->pclass == CLASS_NINJA) && (o_ptr->tval == TV_SPIKE))
2263 if (p_ptr->mighty_throw)
2267 avgdam += ((p_ptr->lev+30)*(p_ptr->lev+30)-900)/55;
2269 energy_fire = 100 - p_ptr->lev;
2271 /* display (shot damage/ avg damage) */
2272 t = object_desc_chr(t, ' ');
2273 t = object_desc_chr(t, p1);
2274 t = object_desc_num(t, avgdam);
2275 t = object_desc_chr(t, '/');
2277 /* calc effects of energy */
2278 avgdam = 100 * avgdam / energy_fire;
2280 t = object_desc_num(t, avgdam);
2282 t = object_desc_chr(t, p2);
2286 /* Add the armor bonuses */
2289 /* Show the armor class info */
2292 t = object_desc_chr(t, ' ');
2293 t = object_desc_chr(t, b1);
2294 t = object_desc_num(t, o_ptr->ac);
2295 t = object_desc_chr(t, ',');
2296 t = object_desc_int(t, o_ptr->to_a);
2297 t = object_desc_chr(t, b2);
2300 /* No base armor, but does increase armor */
2301 else if (o_ptr->to_a)
2303 t = object_desc_chr(t, ' ');
2304 t = object_desc_chr(t, b1);
2305 t = object_desc_int(t, o_ptr->to_a);
2306 t = object_desc_chr(t, b2);
2310 /* Hack -- always show base armor */
2311 else if (show_armour)
2313 t = object_desc_chr(t, ' ');
2314 t = object_desc_chr(t, b1);
2315 t = object_desc_num(t, o_ptr->ac);
2316 t = object_desc_chr(t, b2);
2320 /* No more details wanted */
2321 if (mode < 2) goto copyback;
2325 * Hack -- Wands and Staffs have charges. Make certain how many charges
2326 * a stack of staffs really has is clear. -LM-
2329 ((o_ptr->tval == TV_STAFF) ||
2330 (o_ptr->tval == TV_WAND)))
2332 /* Dump " (N charges)" */
2333 t = object_desc_chr(t, ' ');
2334 t = object_desc_chr(t, p1);
2336 /* Clear explaination for staffs. */
2337 if ((o_ptr->tval == TV_STAFF) && (o_ptr->number > 1))
2339 t = object_desc_num(t, o_ptr->number);
2340 t = object_desc_str(t, "x ");
2342 t = object_desc_num(t, o_ptr->pval);
2344 t = object_desc_str(t, "²óʬ");
2346 t = object_desc_str(t, " charge");
2348 if (o_ptr->pval != 1)
2350 t = object_desc_chr(t, 's');
2355 t = object_desc_chr(t, p2);
2357 /* Hack -- Rods have a "charging" indicator. Now that stacks of rods may
2358 * be in any state of charge or discharge, this now includes a number. -LM-
2360 else if (known && (o_ptr->tval == TV_ROD))
2362 /* Hack -- Dump " (# charging)" if relevant */
2365 /* Stacks of rods display an exact count of charging rods. */
2366 if (o_ptr->number > 1)
2369 if (k_ptr->pval == 0) k_ptr->pval = 1;
2371 /* Find out how many rods are charging, by dividing
2372 * current timeout by each rod's maximum timeout.
2373 * Ensure that any remainder is rounded up. Display
2374 * very discharged stacks as merely fully discharged.
2376 power = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval;
2377 if (power > o_ptr->number) power = o_ptr->number;
2379 /* Display prettily. */
2380 t = object_desc_str(t, " (");
2381 t = object_desc_num(t, power);
2383 t = object_desc_str(t, "ËÜ ½¼Å¶Ãæ)");
2385 t = object_desc_str(t, " charging)");
2390 /* "one Rod of Perception (1 charging)" would look tacky. */
2394 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2396 t = object_desc_str(t, " (charging)");
2403 /* Dump "pval" flags for wearable items */
2404 if (known && (f1 & (TR1_PVAL_MASK)))
2406 /* Start the display */
2407 t = object_desc_chr(t, ' ');
2408 t = object_desc_chr(t, p1);
2410 /* Dump the "pval" itself */
2411 t = object_desc_int(t, o_ptr->pval);
2413 /* Do not display the "pval" flags */
2414 if (f3 & (TR3_HIDE_TYPE))
2420 else if (f1 & (TR1_SPEED))
2422 /* Dump " to speed" */
2424 t = object_desc_str(t, "²Ã®");
2426 t = object_desc_str(t, " to speed");
2432 else if (f1 & (TR1_BLOWS))
2436 t = object_desc_str(t, "¹¶·â");
2438 t = object_desc_str(t, " attack");
2441 if (ABS(o_ptr->pval) != 1) t = object_desc_chr(t, 's');
2447 else if (f1 & (TR1_STEALTH))
2449 /* Dump " to stealth" */
2451 t = object_desc_str(t, "±£Ì©");
2453 t = object_desc_str(t, " to stealth");
2459 else if (f1 & (TR1_SEARCH))
2461 /* Dump " to searching" */
2463 t = object_desc_str(t, "õº÷");
2465 t = object_desc_str(t, " to searching");
2471 else if (f1 & (TR1_INFRA))
2473 /* Dump " to infravision" */
2475 t = object_desc_str(t, "ÀÖ³°Àþ»ëÎÏ");
2477 t = object_desc_str(t, " to infravision");
2483 else if (f1 & (TR1_TUNNEL))
2488 /* Finish the display */
2489 t = object_desc_chr(t, p2);
2492 /* Hack -- Process Lanterns/Torches */
2493 if (known && (o_ptr->tval == TV_LITE) && (!(artifact_p(o_ptr) || (o_ptr->sval == SV_LITE_FEANOR))))
2495 /* Hack -- Turns of light for normal lites */
2497 t = object_desc_str(t, "(");
2499 t = object_desc_str(t, " (with ");
2502 if (o_ptr->name2 == EGO_LITE_LONG) t = object_desc_num(t, o_ptr->xtra4*2);
2503 else t = object_desc_num(t, o_ptr->xtra4);
2505 t = object_desc_str(t, "¥¿¡¼¥ó¤Î¼÷Ì¿)");
2507 t = object_desc_str(t, " turns of light)");
2513 /* Indicate charging objects, but not rods. */
2514 if (known && o_ptr->timeout && o_ptr->tval != TV_ROD)
2516 /* Hack -- Dump " (charging)" if relevant */
2518 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2520 t = object_desc_str(t, " (charging)");
2526 /* No more details wanted */
2527 if (mode < 3) goto copyback;
2530 /* No inscription yet */
2533 /* Use the standard inscription if available */
2534 if (o_ptr->inscription)
2538 strcpy(tmp_val2, quark_str(o_ptr->inscription));
2540 for (; *u && (*u != '#'); u++);
2545 /* Use the game-generated "feeling" otherwise, if available */
2546 else if (o_ptr->feeling)
2548 strcpy(tmp_val2, game_inscriptions[o_ptr->feeling]);
2551 /* Note "cursed" if the item is known to be cursed */
2552 else if (cursed_p(o_ptr) && (known || (o_ptr->ident & (IDENT_SENSE))))
2555 strcpy(tmp_val2, "¼ö¤ï¤ì¤Æ¤¤¤ë");
2557 strcpy(tmp_val2, "cursed");
2562 /* Note "unidentified" if the item is unidentified */
2563 else if ((o_ptr->tval == TV_RING || o_ptr->tval == TV_AMULET
2564 || o_ptr->tval == TV_LITE || o_ptr->tval == TV_FIGURINE)
2565 && object_aware_p(o_ptr) && !object_known_p(o_ptr)
2566 && !((o_ptr->ident)&IDENT_SENSE))
2569 strcpy(tmp_val2, "̤´ÕÄê");
2571 strcpy(tmp_val2, "unidentified");
2575 /* Mega-Hack -- note empty wands/staffs */
2576 else if (!known && (o_ptr->ident & (IDENT_EMPTY)))
2579 strcpy(tmp_val2, "¶õ");
2581 strcpy(tmp_val2, "empty");
2586 /* Note "tried" if the object has been tested unsuccessfully */
2587 else if (!aware && object_tried_p(o_ptr))
2590 strcpy(tmp_val2, "̤ȽÌÀ");
2592 strcpy(tmp_val2, "tried");
2597 /* Note the discount, if any */
2598 else if (o_ptr->discount)
2600 (void)object_desc_num(tmp_val2, o_ptr->discount);
2602 strcat(tmp_val2, "%°ú¤");
2604 strcat(tmp_val2, "% off");
2609 /* Append the inscription, if any */
2612 /* Append the inscription */
2613 t = object_desc_chr(t, ' ');
2614 t = object_desc_chr(t, c1);
2615 t = object_desc_str(t, tmp_val2);
2616 t = object_desc_chr(t, c2);
2621 for (i = 0; i < MAX_NLEN-2; i++)
2624 if (iskanji(*(t+i)))
2632 if (i == MAX_NLEN-2)
2635 if (iskanji(*(t+i)))
2641 *(buf+MAX_NLEN-1) = '\0';