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:
404 case TV_HISSATSU_BOOK:
420 /* All Food, Potions, Scrolls, Rods */
436 * Certain items have a flavor
437 * This function is used only by "flavor_init()"
439 static bool object_flavor(int k_idx)
441 object_kind *k_ptr = &k_info[k_idx];
443 /* Analyze the item */
448 return (0x80 + amulet_col[k_ptr->sval]);
453 return (0x90 + ring_col[k_ptr->sval]);
458 return (0xA0 + staff_col[k_ptr->sval]);
463 return (0xB0 + wand_col[k_ptr->sval]);
468 return (0xC0 + rod_col[k_ptr->sval]);
473 return (0xD0 + scroll_col[k_ptr->sval]);
478 return (0xE0 + potion_col[k_ptr->sval]);
483 if (k_ptr->sval < SV_FOOD_MIN_FOOD)
485 return (0xF0 + food_col[k_ptr->sval]);
497 void get_table_name(char *out_string)
501 strcpy(out_string, "¡Ø");
502 get_rnd_line("aname_j.txt", 1, Syllable);
503 strcat(out_string, Syllable);
504 get_rnd_line("aname_j.txt", 2, Syllable);
505 strcat(out_string, Syllable);
506 strcat(out_string, "¡Ù");
508 int testcounter = randint1(3) + 1;
510 strcpy(out_string, "'");
512 if (randint1(3) == 2)
514 while (testcounter--)
515 strcat(out_string, syllables[randint0(MAX_SYLLABLES)]);
520 testcounter = randint1(2) + 1;
521 while (testcounter--)
523 (void)get_rnd_line("elvish.txt", 0, Syllable);
524 strcat(out_string, Syllable);
528 out_string[1] = toupper(out_string[1]);
530 strcat(out_string, "'");
534 out_string[18] = '\0';
541 * Prepare the "variable" part of the "k_info" array.
543 * The "color"/"metal"/"type" of an item is its "flavor".
544 * For the most part, flavors are assigned randomly each game.
546 * Initialize descriptions for the "colored" objects, including:
547 * Rings, Amulets, Staffs, Wands, Rods, Food, Potions, Scrolls.
549 * The first 4 entries for potions are fixed (Water, Apple Juice,
550 * Slime Mold Juice, Unused Potion).
552 * Scroll titles are always between 6 and 14 letters long. This is
553 * ensured because every title is composed of whole words, where every
554 * word is from 1 to 8 letters long (one or two syllables of 1 to 4
555 * letters each), and that no scroll is finished until it attempts to
556 * grow beyond 15 letters. The first time this can happen is when the
557 * current title has 6 letters and the new word has 8 letters, which
558 * would result in a 6 letter scroll title.
560 * Duplicate titles are avoided by requiring that no two scrolls share
561 * the same first four letters (not the most efficient method, and not
562 * the least efficient method, but it will always work).
564 * Hack -- make sure everything stays the same for each saved game
565 * This is accomplished by the use of a saved "random seed", as in
566 * "town_gen()". Since no other functions are called while the special
567 * seed is in effect, so this function is pretty "safe".
569 * Note that the "hacked seed" may provide an RNG with alternating parity!
571 void flavor_init(void)
580 /* Hack -- Use the "simple" RNG */
583 /* Hack -- Induce consistant flavors */
584 Rand_value = seed_flavor;
587 /* Efficiency -- Rods/Wands share initial array */
588 for (i = 0; i < MAX_METALS; i++)
590 rod_adj[i] = wand_adj[i];
591 rod_col[i] = wand_col[i];
595 /* Rings have "ring colors" */
596 for (i = 0; i < MAX_ROCKS; i++)
598 j = randint0(MAX_ROCKS);
599 temp_adj = ring_adj[i];
600 ring_adj[i] = ring_adj[j];
601 ring_adj[j] = temp_adj;
603 temp_col = ring_col[i];
604 ring_col[i] = ring_col[j];
605 ring_col[j] = temp_col;
608 /* Hack -- The One Ring */
610 ring_adj[SV_RING_POWER] = "¶â̵¹¤¤Î";
611 ring_adj[SV_RING_AHO] = "¶â͹¤¤Î";
613 ring_adj[SV_RING_POWER] = "Plain Gold";
614 ring_adj[SV_RING_AHO] = "Plain Goldarn";
619 ring_col[SV_RING_POWER] = TERM_YELLOW;
620 ring_col[SV_RING_AHO] = TERM_YELLOW;
623 /* Amulets have "amulet colors" */
624 for (i = 0; i < MAX_AMULETS; i++)
626 j = randint0(MAX_AMULETS);
627 temp_adj = amulet_adj[i];
628 amulet_adj[i] = amulet_adj[j];
629 amulet_adj[j] = temp_adj;
631 temp_col = amulet_col[i];
632 amulet_col[i] = amulet_col[j];
633 amulet_col[j] = temp_col;
637 for (i = 0; i < MAX_WOODS; i++)
639 j = randint0(MAX_WOODS);
640 temp_adj = staff_adj[i];
641 staff_adj[i] = staff_adj[j];
642 staff_adj[j] = temp_adj;
644 temp_col = staff_col[i];
645 staff_col[i] = staff_col[j];
646 staff_col[j] = temp_col;
650 for (i = 0; i < MAX_METALS; i++)
652 j = randint0(MAX_METALS);
653 temp_adj = wand_adj[i];
654 wand_adj[i] = wand_adj[j];
655 wand_adj[j] = temp_adj;
657 temp_col = wand_col[i];
658 wand_col[i] = wand_col[j];
659 wand_col[j] = temp_col;
663 for (i = 0; i < MAX_METALS; i++)
665 j = randint0(MAX_METALS);
666 temp_adj = rod_adj[i];
667 rod_adj[i] = rod_adj[j];
668 rod_adj[j] = temp_adj;
670 temp_col = rod_col[i];
671 rod_col[i] = rod_col[j];
672 rod_col[j] = temp_col;
675 /* Foods (Mushrooms) */
676 for (i = 0; i < MAX_SHROOM; i++)
678 j = randint0(MAX_SHROOM);
679 temp_adj = food_adj[i];
680 food_adj[i] = food_adj[j];
681 food_adj[j] = temp_adj;
683 temp_col = food_col[i];
684 food_col[i] = food_col[j];
685 food_col[j] = temp_col;
689 for (i = 4; i < MAX_COLORS; i++)
691 j = randint0(MAX_COLORS - 4) + 4;
692 temp_adj = potion_adj[i];
693 potion_adj[i] = potion_adj[j];
694 potion_adj[j] = temp_adj;
696 temp_col = potion_col[i];
697 potion_col[i] = potion_col[j];
698 potion_col[j] = temp_col;
701 /* Scrolls (random titles, always white) */
702 for (i = 0; i < MAX_TITLES; i++)
704 /* Get a new title */
711 /* Start a new title */
714 /* Collect words until done */
721 /* Start a new word */
724 /* Choose one or two syllables */
725 s = ((randint0(100) < 30) ? 1 : 2);
727 /* Add a one or two syllable word */
728 for (q = 0; q < s; q++)
730 /* Add the syllable */
731 strcat(tmp, syllables[randint0(MAX_SYLLABLES)]);
734 /* Stop before getting too long */
735 if (strlen(buf) + 1 + strlen(tmp) > 15) break;
745 strcpy(scroll_adj[i], buf+1);
750 /* Check for "duplicate" scroll titles */
751 for (j = 0; j < i; j++)
753 cptr hack1 = scroll_adj[j];
754 cptr hack2 = scroll_adj[i];
756 /* Compare first four characters */
757 if (*hack1++ != *hack2++) continue;
758 if (*hack1++ != *hack2++) continue;
759 if (*hack1++ != *hack2++) continue;
760 if (*hack1++ != *hack2++) continue;
769 /* Break when done */
773 /* All scrolls are white */
774 scroll_col[i] = TERM_WHITE;
778 /* Hack -- Use the "complex" RNG */
781 /* Analyze every object */
782 for (i = 1; i < max_k_idx; i++)
784 object_kind *k_ptr = &k_info[i];
786 /* Skip "empty" objects */
787 if (!k_ptr->name) continue;
789 /* Extract "flavor" (if any) */
790 k_ptr->flavor = object_flavor(i);
792 /* No flavor yields aware */
793 if (!k_ptr->flavor) k_ptr->aware = TRUE;
795 /* Check for "easily known" */
796 k_ptr->easy_know = object_easy_know(i);
802 * Print a char "c" into a string "t", as if by sprintf(t, "%c", c),
803 * and return a pointer to the terminator (t + 1).
805 static char *object_desc_chr(char *t, char c)
819 * Print a string "s" into a string "t", as if by strcpy(t, s),
820 * and return a pointer to the terminator.
822 static char *object_desc_str(char *t, cptr s)
824 /* Copy the string */
825 while (*s) *t++ = *s++;
837 * Print an unsigned number "n" into a string "t", as if by
838 * sprintf(t, "%u", n), and return a pointer to the terminator.
840 static char *object_desc_num(char *t, uint n)
844 /* Find "size" of "n" */
845 for (p = 1; n >= p * 10; p = p * 10) /* loop */;
847 /* Dump each digit */
853 /* Remove the digit */
856 /* Process next digit */
872 * ÆüËܸì¤Î¸Ä¿ôɽ¼¨¥ë¡¼¥Á¥ó
873 *¡Êcmd1.c ¤ÇήÍѤ¹¤ë¤¿¤á¤Ë object_desc_japanese ¤«¤é°ÜÆ°¤·¤¿¡£¡Ë
876 extern char *object_desc_kosuu(char *t, object_type *o_ptr)
878 t = object_desc_num(t, o_ptr->number);
890 t = object_desc_str(t, "ËÜ");
895 t = object_desc_str(t, "´¬");
900 t = object_desc_str(t, "Éþ");
904 case TV_SORCERY_BOOK:
910 case TV_ENCHANT_BOOK:
914 case TV_HISSATSU_BOOK:
916 t = object_desc_str(t, "ºý");
924 t = object_desc_str(t, "Ãå");
931 t = object_desc_str(t, "¿¶");
936 t = object_desc_str(t, "");
941 t = object_desc_str(t, "Ëç");
944 /* ¿©¤Ù¤â¤Î by ita */
947 if(o_ptr->sval == SV_FOOD_JERKY)
949 t = object_desc_str(t, "ÀÚ¤ì");
955 if (o_ptr->number < 10)
957 t = object_desc_str(t, "¤Ä");
961 t = object_desc_str(t, "¸Ä");
971 * Print an signed number "v" into a string "t", as if by
972 * sprintf(t, "%+d", n), and return a pointer to the terminator.
973 * Note that we always print a sign, either "+" or "-".
975 static char *object_desc_int(char *t, sint v)
982 /* Take the absolute value */
985 /* Use a "minus" sign */
989 /* Positive (or zero) */
992 /* Use the actual number */
995 /* Use a "plus" sign */
999 /* Find "size" of "n" */
1000 for (p = 1; n >= p * 10; p = p * 10) /* loop */;
1002 /* Dump each digit */
1005 /* Dump the digit */
1008 /* Remove the digit */
1011 /* Process next digit */
1024 * Creates a description of the item "o_ptr", and stores it in "out_val".
1026 * One can choose the "verbosity" of the description, including whether
1027 * or not the "number" of items should be described, and how much detail
1028 * should be used when describing the item.
1030 * The given "buf" must be MAX_NLEN chars long to hold the longest possible
1031 * description, which can get pretty long, including incriptions, such as:
1032 * "no more Maces of Disruption (Defender) (+10,+10) [+5] (+3 to stealth)".
1033 * Note that the inscription will be clipped to keep the total description
1034 * under MAX_NLEN-1 chars (plus a terminator).
1036 * Note the use of "object_desc_num()" and "object_desc_int()" as hyper-efficient,
1037 * portable, versions of some common "sprintf()" commands.
1039 * Note that all ego-items (when known) append an "Ego-Item Name", unless
1040 * the item is also an artifact, which should NEVER happen.
1042 * Note that all artifacts (when known) append an "Artifact Name", so we
1043 * have special processing for "Specials" (artifact Lites, Rings, Amulets).
1044 * The "Specials" never use "modifiers" if they are "known", since they
1045 * have special "descriptions", such as "The Necklace of the Dwarves".
1047 * Special Lite's use the "k_info" base-name (Phial, Star, or Arkenstone),
1048 * plus the artifact name, just like any other artifact, if known.
1050 * Special Ring's and Amulet's, if not "aware", use the same code as normal
1051 * rings and amulets, and if "aware", use the "k_info" base-name (Ring or
1052 * Amulet or Necklace). They will NEVER "append" the "k_info" name. But,
1053 * they will append the artifact name, just like any artifact, if known.
1055 * Hack -- Display "The One Ring" as "a Plain Gold Ring" until aware.
1057 * If "pref" then a "numeric" prefix will be pre-pended.
1060 * 0 -- The Cloak of Death
1061 * 1 -- The Cloak of Death [1,+3]
1062 * 2 -- The Cloak of Death [1,+3] (+2 to Stealth)
1063 * 3 -- The Cloak of Death [1,+3] (+2 to Stealth) {nifty}
1065 void object_desc(char *buf, object_type *o_ptr, int pref, int mode)
1067 cptr basenm, modstr;
1068 int power, indexx, i;
1073 bool append_name = FALSE;
1075 bool show_weapon = FALSE;
1076 bool show_armour = FALSE;
1081 char p1 = '(', p2 = ')';
1082 char b1 = '[', b2 = ']';
1083 char c1 = '{', c2 = '}';
1085 char tmp_val[MAX_NLEN+160];
1086 char tmp_val2[MAX_NLEN+10];
1090 object_type *bow_ptr;
1093 object_kind *k_ptr = &k_info[o_ptr->k_idx];
1095 monster_race *r_ptr = &r_info[o_ptr->pval];
1097 /* Extract some flags */
1098 object_flags(o_ptr, &f1, &f2, &f3);
1100 /* See if the object is "aware" */
1101 if (object_aware_p(o_ptr) || (o_ptr->ident & IDENT_MENTAL)) aware = TRUE;
1103 /* See if the object is "known" */
1104 if (object_known_p(o_ptr)) known = TRUE;
1106 /* Hack -- Extract the sub-type "indexx" */
1107 indexx = o_ptr->sval;
1109 /* Extract default "base" string */
1110 basenm = get_object_name(o_ptr);
1112 /* Assume no "modifier" string */
1116 /* Analyze the object */
1117 switch (o_ptr->tval)
1119 /* Some objects are easy to describe */
1140 modstr = " (empty)";
1146 sprintf(tmp_val2, "¡Ê%s¡Ë",r_name + r_ptr->name);
1149 cptr t = r_name + r_ptr->name;
1151 if (!(r_ptr->flags1 & RF1_UNIQUE))
1153 sprintf(tmp_val2, " (%s%s)", (is_a_vowel(*t) ? "an " : "a "), t);
1159 sprintf(tmp_val2, "(%s)", t);
1169 /* Figurines/Statues */
1174 modstr = r_name + r_ptr->name;
1176 cptr t = r_name + r_ptr->name;
1178 if (!(r_ptr->flags1 & RF1_UNIQUE))
1180 sprintf(tmp_val2, "%s%s", (is_a_vowel(*t) ? "an " : "a "), t);
1197 modstr = r_name + r_ptr->name;
1201 sprintf(tmp_val2, "& #%s", basenm + 2);
1203 if (r_ptr->flags1 & RF1_UNIQUE)
1205 sprintf(tmp_val2, "%s %s", basenm, "of #");
1209 sprintf(tmp_val2, "& # %s", basenm + 2);
1218 /* Missiles/ Bows/ Weapons */
1249 /* Lites (including a few "Specials") */
1255 /* Amulets (including a few "Specials") */
1258 /* Known artifacts */
1259 if (artifact_p(o_ptr) && aware) break;
1261 if ((k_ptr->gen_flags & TRG_INSTA_ART) && aware) break;
1263 /* Color the object */
1264 modstr = amulet_adj[indexx];
1266 if (aware) append_name = TRUE;
1268 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1270 basenm = aware ? "& %¤Î¥¢¥ß¥å¥ì¥Ã¥È" : "& ¥¢¥ß¥å¥ì¥Ã¥È";
1272 basenm = aware ? "& #%¤Î¥¢¥ß¥å¥ì¥Ã¥È" : "& #¥¢¥ß¥å¥ì¥Ã¥È";
1274 basenm = "& Amulet~";
1276 basenm = aware ? "& # Amulet~" : "& # Amulet~";
1282 /* Rings (including a few "Specials") */
1285 /* Known artifacts */
1286 if (artifact_p(o_ptr) && aware) break;
1288 if ((k_ptr->gen_flags & TRG_INSTA_ART) && aware) break;
1290 /* Color the object */
1291 modstr = ring_adj[indexx];
1293 if (aware) append_name = TRUE;
1295 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1297 basenm = aware ? "& %¤Î»ØÎØ" : "& »ØÎØ";
1299 basenm = aware ? "& #%¤Î»ØÎØ" : "& #»ØÎØ";
1303 basenm = aware ? "& # Ring~" : "& # Ring~";
1306 if (!k_ptr->to_h && !k_ptr->to_d && (o_ptr->to_h || o_ptr->to_d)) show_weapon = TRUE;
1318 /* Color the object */
1319 modstr = staff_adj[indexx];
1321 if (aware) append_name = TRUE;
1322 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1324 basenm = aware ? "& %¤Î¾ó" : "& ¾ó";
1326 basenm = aware ? "& #%¤Î¾ó" : "& #¾ó";
1328 basenm = "& Staff~";
1330 basenm = aware ? "& # Staff~" : "& # Staff~";
1338 /* Color the object */
1339 modstr = wand_adj[indexx];
1341 if (aware) append_name = TRUE;
1342 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1344 basenm = aware? "& %¤ÎËâË¡ËÀ":"& ËâË¡ËÀ";
1346 basenm = aware ? "& #%¤ÎËâË¡ËÀ" : "& #ËâË¡ËÀ";
1350 basenm = aware ? "& # Wand~" : "& # Wand~";
1358 /* Color the object */
1359 modstr = rod_adj[indexx];
1361 if (aware) append_name = TRUE;
1362 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1364 basenm = aware? "& %¤Î¥í¥Ã¥É":"& ¥í¥Ã¥É";
1366 basenm = aware ? "& #%¤Î¥í¥Ã¥É" : "& #¥í¥Ã¥É";
1370 basenm = aware ? "& # Rod~" : "& # Rod~";
1378 /* Color the object */
1379 modstr = scroll_adj[indexx];
1380 if (aware) append_name = TRUE;
1381 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1383 basenm = aware ? "& %¤Î´¬Êª" : "& ´¬Êª";
1385 basenm = aware ? "& ¡Ö#¡×¤È½ñ¤«¤ì¤¿%¤Î´¬Êª" : "& ¡Ö#¡×¤È½ñ¤«¤ì¤¿´¬Êª";
1387 basenm = "& Scroll~";
1389 basenm = aware ? "& Scroll~ titled \"#\"" : "& Scroll~ titled \"#\"";
1397 /* Color the object */
1398 modstr = potion_adj[indexx];
1400 if (aware) append_name = TRUE;
1401 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1403 basenm = aware ? "& %¤ÎÌô" : "& Ìô";
1405 basenm = aware ? "& #%¤ÎÌô" : "& #Ìô";
1407 basenm = "& Potion~";
1409 basenm = aware ? "& # Potion~" : "& # Potion~";
1417 /* Ordinary food is "boring" */
1418 if (o_ptr->sval >= SV_FOOD_MIN_FOOD) break;
1420 /* Color the object */
1421 modstr = food_adj[indexx];
1423 if (aware) append_name = TRUE;
1424 if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
1426 basenm = aware ? "& %¤Î¥¥Î¥³" : "& ¥¥Î¥³";
1428 basenm = aware ? "& #%¤Î¥¥Î¥³" : "& #¥¥Î¥³";
1430 basenm = "& Mushroom~";
1432 basenm = aware ? "& # Mushroom~" : "& # Mushroom~";
1442 basenm = "& ÍÓÈé»æ - #";
1444 basenm = "& Parchement~ - #";
1454 basenm = "& À¸Ì¿¤ÎËâË¡½ñ#";
1456 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1457 basenm = "& Book~ of Life Magic #";
1459 basenm = "& Life Spellbook~ #";
1465 case TV_SORCERY_BOOK:
1469 basenm = "& Àç½Ñ¤ÎËâË¡½ñ#";
1471 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1472 basenm = "& Book~ of Sorcery #";
1474 basenm = "& Sorcery Spellbook~ #";
1480 case TV_NATURE_BOOK:
1484 basenm = "& ¼«Á³¤ÎËâË¡½ñ#";
1486 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1487 basenm = "& Book~ of Nature Magic #";
1489 basenm = "& Nature Spellbook~ #";
1499 basenm = "& ¥«¥ª¥¹¤ÎËâË¡½ñ#";
1501 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1502 basenm = "& Book~ of Chaos Magic #";
1504 basenm = "& Chaos Spellbook~ #";
1514 basenm = "& °Å¹õ¤ÎËâË¡½ñ#";
1516 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1517 basenm = "& Book~ of Death Magic #";
1519 basenm = "& Death Spellbook~ #";
1529 basenm = "& ¥È¥é¥ó¥×¤ÎËâË¡½ñ#";
1531 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1532 basenm = "& Book~ of Trump Magic #";
1534 basenm = "& Trump Spellbook~ #";
1540 case TV_ARCANE_BOOK:
1544 basenm = "& Èë½Ñ¤ÎËâË¡½ñ#";
1546 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1547 basenm = "& Book~ of Arcane Magic #";
1549 basenm = "& Arcane Spellbook~ #";
1554 case TV_ENCHANT_BOOK:
1558 basenm = "& ¾¢¤ÎËâË¡½ñ#";
1560 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1561 basenm = "& Book~ of Craft Magic #";
1563 basenm = "& Craft Spellbook~ #";
1568 case TV_DAEMON_BOOK:
1572 basenm = "& °Ëâ¤ÎËâË¡½ñ#";
1574 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1575 basenm = "& Book~ of Daemon Magic #";
1577 basenm = "& Daemon Spellbook~ #";
1586 basenm = "& Ç˼٤ÎËâË¡½ñ#";
1588 if (mp_ptr->spell_book == TV_LIFE_BOOK)
1589 basenm = "& Book~ of Crusade Magic #";
1591 basenm = "& Crusade Spellbook~ #";
1602 basenm = "& Song Book~ #";
1607 case TV_HISSATSU_BOOK:
1611 basenm = "& Éð·Ý¤Î½ñ#";
1613 basenm = "& Book~ of Kendo #";
1621 /* Hack -- Gold/Gems */
1624 strcpy(buf, basenm);
1628 /* Used in the "inventory" routine */
1632 strcpy(buf, "(¤Ê¤·)");
1634 strcpy(buf, "(nothing)");
1642 /* Start dumping the result */
1646 if (basenm[0] == '&')
1656 else if (o_ptr->number > 1)
1658 if ( change_numeral == FALSE ){
1659 t = object_desc_num(t, o_ptr->number);
1660 if (o_ptr->number > 9)
1661 t = object_desc_str(t, "¸Ä¤Î ");
1663 t = object_desc_str(t, "¤Ä¤Î ");
1667 t = object_desc_kosuu(t,o_ptr);
1668 t = object_desc_str(t, "¤Î ");
1672 /* ±Ñ¸ì¤Î¾ì¹ç¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ï The ¤¬ÉÕ¤¯¤Î¤Çʬ¤«¤ë¤¬
1673 * ÆüËܸì¤Ç¤Ïʬ¤«¤é¤Ê¤¤¤Î¤Ç¥Þ¡¼¥¯¤ò¤Ä¤±¤ë
1675 if (known && artifact_p(o_ptr)) t = object_desc_str(t, "¡ú");
1676 else if (known && o_ptr->art_name) t = object_desc_str(t, "¡ù");
1680 /* The object "expects" a "number" */
1681 if (basenm[0] == '&')
1683 /* Skip the ampersand (and space) */
1692 /* Hack -- None left */
1693 else if (o_ptr->number <= 0)
1695 t = object_desc_str(t, "no more ");
1698 /* Extract the number */
1699 else if (o_ptr->number > 1)
1701 t = object_desc_num(t, o_ptr->number);
1702 t = object_desc_chr(t, ' ');
1705 /* Hack -- The only one of its kind */
1706 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
1708 t = object_desc_str(t, "The ");
1711 /* Unique corpses are unique */
1712 else if ((o_ptr->tval == TV_CORPSE) && (r_ptr->flags1 & RF1_UNIQUE))
1714 t = object_desc_str(t, "The ");
1717 /* A single one, with a vowel in the modifier */
1718 else if ((*s == '#') && (is_a_vowel(modstr[0])))
1720 t = object_desc_str(t, "an ");
1723 /* A single one, with a vowel */
1724 else if (is_a_vowel(*s))
1726 t = object_desc_str(t, "an ");
1729 /* A single one, without a vowel */
1732 t = object_desc_str(t, "a ");
1736 /* Hack -- objects that "never" take an article */
1748 /* Hack -- all gone */
1749 else if (o_ptr->number <= 0)
1751 t = object_desc_str(t, "no more ");
1754 /* Prefix a number if required */
1755 else if (o_ptr->number > 1)
1757 t = object_desc_num(t, o_ptr->number);
1758 t = object_desc_chr(t, ' ');
1761 /* Hack -- The only one of its kind */
1762 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
1764 t = object_desc_str(t, "The ");
1767 /* Hack -- single items get no prefix */
1775 /* Paranoia -- skip illegal tildes */
1776 /* while (*s == '~') s++; */
1779 if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
1781 t = object_desc_str(t,format("ÃÃÌê»Õ%s¤Î",player_name));
1784 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¡¢Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à¤Î̾Á°¤òÉղ乤ë */
1786 /* ¥é¥ó¥À¥à¡¦¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È */
1787 if (o_ptr->art_name)
1789 strcpy(temp, quark_str(o_ptr->art_name));
1790 /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
1791 /* ±Ñ¸ìÈǤΥ»¡¼¥Ö¥Õ¥¡¥¤¥ë¤«¤éÍ褿 'of XXX' ¤Ï,¡ÖXXX¤Î¡×¤Èɽ¼¨¤¹¤ë */
1792 if ( strncmp( temp , "of ",3)==0 ) {t=object_desc_str(t,&temp[3]);t=object_desc_str(t,"¤Î");}
1794 if ( strncmp( temp , "¡Ø" , 2 ) != 0 && temp[0]!='\'')
1795 t=object_desc_str(t, temp);
1797 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à */
1798 else if (o_ptr->name1) {
1799 artifact_type *a_ptr = &a_info[o_ptr->name1];
1800 /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
1801 if ( strncmp( (a_name + a_ptr->name), "¡Ø" , 2) != 0){
1802 t=object_desc_str(t, (a_name + a_ptr->name));
1805 /* ̾¤Î¤¢¤ë¥¢¥¤¥Æ¥à */
1806 else if (o_ptr->name2) {
1807 ego_item_type *e_ptr = &e_info[o_ptr->name2];
1808 t=object_desc_str(t, (e_name + e_ptr->name));
1812 /* Copy the string */
1821 /* Add a plural if needed */
1822 if (pref && o_ptr->number != 1)
1826 /* XXX XXX XXX Mega-Hack */
1828 /* Hack -- "Cutlass-es" and "Torch-es" */
1829 if ((k == 's') || (k == 'h')) *t++ = 'e';
1841 /* Insert the modifier */
1842 for (u = modstr; *u; u++) *t++ = *u;
1847 /* saigo ¤ÎÂå¤ï¤ê¡£¸úǽ¤òÉÕ²½¤¹¤ë by ita*/
1849 modstr=get_object_name(o_ptr);
1850 for (u = modstr; *u; u++) *t++ = *u;
1865 /* Append the "kind name" to the "base name" */
1869 t = object_desc_str(t, " of ");
1870 t = object_desc_str(t, get_object_name(o_ptr));
1876 /* '¡Ø'¤«¤é»Ï¤Þ¤ëÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ¸å¤ËÉղ乤ë */
1878 /* ¥é¥ó¥À¥à¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Î̾Á°¤Ï¥»¡¼¥Ö¥Õ¥¡¥¤¥ë¤ËµÏ¿
1879 ¤µ¤ì¤ë¤Î¤Ç¡¢±Ñ¸ìÈǤÎ̾Á°¤â¤½¤ì¤é¤·¤¯ÊÑ´¹¤¹¤ë */
1880 if (o_ptr->art_name)
1881 { char temp[256];int itemp;
1882 strcpy(temp, quark_str(o_ptr->art_name));
1883 /* MEGA HACK by ita*/
1884 if ( strncmp( temp , "¡Ø" , 2 ) == 0 ) t=object_desc_str(t, temp);else
1885 if( temp[0]=='\'' ) { itemp=strlen(temp);temp[itemp-1]=0;
1886 t=object_desc_str(t,"¡Ø");
1887 t=object_desc_str(t,&temp[1]);
1888 t=object_desc_str(t,"¡Ù");}
1891 else if (o_ptr->name1) {
1892 artifact_type *a_ptr = &a_info[o_ptr->name1];
1893 if ( strncmp( (a_name + a_ptr->name) , "¡Ø" , 2 ) == 0 ){
1894 t=object_desc_str(t, (a_name + a_ptr->name));
1897 else if (o_ptr->inscription)
1899 cptr str = quark_str(o_ptr->inscription);
1908 if (*str == '#') break;
1914 cptr str = strchr(quark_str(o_ptr->inscription), '#');
1916 /* Add the false name */
1917 t=object_desc_str(t,"¡Ø");
1918 t = object_desc_str(t, &str[1]);
1919 t=object_desc_str(t,"¡Ù");
1924 if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
1926 t = object_desc_str(t,format(" of %s the smith",player_name));
1929 /* Hack -- Append "Artifact" or "Special" names */
1932 /* Is it a new random artifact ? */
1933 if (o_ptr->art_name)
1935 t = object_desc_chr(t, ' ');
1937 t = object_desc_str(t, quark_str(o_ptr->art_name));
1940 /* Grab any artifact name */
1941 else if (o_ptr->name1)
1943 artifact_type *a_ptr = &a_info[o_ptr->name1];
1945 t = object_desc_chr(t, ' ');
1946 t = object_desc_str(t, (a_name + a_ptr->name));
1949 /* Grab any ego-item name */
1954 ego_item_type *e_ptr = &e_info[o_ptr->name2];
1956 t = object_desc_chr(t, ' ');
1957 t = object_desc_str(t, (e_name + e_ptr->name));
1960 if (o_ptr->inscription && strchr(quark_str(o_ptr->inscription), '#'))
1963 cptr str = strchr(quark_str(o_ptr->inscription), '#');
1965 /* Add the false name */
1966 t = object_desc_chr(t, ' ');
1967 t = object_desc_str(t, &str[1]);
1975 /* No more details wanted */
1976 if (mode < 1) goto copyback;
1978 /* Hack -- Chests must be described in detail */
1979 if (o_ptr->tval == TV_CHEST)
1981 /* Not searched yet */
1987 /* May be "empty" */
1988 else if (!o_ptr->pval)
1991 t = object_desc_str(t, "(¶õ)");
1993 t = object_desc_str(t, " (empty)");
1998 /* May be "disarmed" */
1999 else if (o_ptr->pval < 0)
2001 if (chest_traps[0 - o_ptr->pval])
2004 t = object_desc_str(t, "(²ò½üºÑ)");
2006 t = object_desc_str(t, " (disarmed)");
2013 t = object_desc_str(t, "(Èó»Ü¾û)");
2015 t = object_desc_str(t, " (unlocked)");
2021 /* Describe the traps, if any */
2024 /* Describe the traps */
2025 switch (chest_traps[o_ptr->pval])
2030 t = object_desc_str(t, "(»Ü¾û)");
2032 t = object_desc_str(t, " (Locked)");
2037 case CHEST_LOSE_STR:
2040 t = object_desc_str(t, "(ÆÇ¿Ë)");
2042 t = object_desc_str(t, " (Poison Needle)");
2047 case CHEST_LOSE_CON:
2050 t = object_desc_str(t, "(ÆÇ¿Ë)");
2052 t = object_desc_str(t, " (Poison Needle)");
2060 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2062 t = object_desc_str(t, " (Gas Trap)");
2067 case CHEST_PARALYZE:
2070 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2072 t = object_desc_str(t, " (Gas Trap)");
2080 t = object_desc_str(t, "(ÇúȯÁõÃÖ)");
2082 t = object_desc_str(t, " (Explosion Device)");
2088 case CHEST_BIRD_STORM:
2089 case CHEST_E_SUMMON:
2090 case CHEST_H_SUMMON:
2093 t = object_desc_str(t, "(¾¤´¤Î¥ë¡¼¥ó)");
2095 t = object_desc_str(t, " (Summoning Runes)");
2100 case CHEST_RUNES_OF_EVIL:
2103 t = object_desc_str(t, "(¼Ù°¤Ê¥ë¡¼¥ó)");
2105 t = object_desc_str(t, " (Gleaming Black Runes)");
2113 t = object_desc_str(t, "(·ÙÊóÁõÃÖ)");
2115 t = object_desc_str(t, " (Alarm)");
2123 t = object_desc_str(t, "(¥Þ¥ë¥Á¡¦¥È¥é¥Ã¥×)");
2125 t = object_desc_str(t, " (Multiple Traps)");
2135 /* Display the item like a weapon */
2136 if (f3 & (TR3_SHOW_MODS)) show_weapon = TRUE;
2138 /* Display the item like a weapon */
2139 if (o_ptr->to_h && o_ptr->to_d) show_weapon = TRUE;
2141 /* Display the item like armour */
2142 if (o_ptr->ac) show_armour = TRUE;
2145 /* Dump base weapon info */
2146 switch (o_ptr->tval)
2148 /* Missiles and Weapons */
2157 /* Append a "damage" string */
2158 t = object_desc_chr(t, ' ');
2159 t = object_desc_chr(t, p1);
2160 t = object_desc_num(t, o_ptr->dd);
2161 t = object_desc_chr(t, 'd');
2162 t = object_desc_num(t, o_ptr->ds);
2163 t = object_desc_chr(t, p2);
2169 /* Bows get a special "damage string" */
2172 /* Mega-Hack -- Extract the "base power" */
2173 power = (o_ptr->sval % 10);
2175 /* Apply the "Extra Might" flag */
2176 if (f3 & (TR3_XTRA_MIGHT)) power++;
2178 /* Append a special "damage" string */
2179 t = object_desc_chr(t, ' ');
2180 t = object_desc_chr(t, p1);
2181 t = object_desc_chr(t, 'x');
2182 t = object_desc_num(t, power);
2183 t = object_desc_chr(t, p2);
2190 /* Add the weapon bonuses */
2193 /* Show the tohit/todam on request */
2196 t = object_desc_chr(t, ' ');
2197 t = object_desc_chr(t, p1);
2198 t = object_desc_int(t, o_ptr->to_h);
2199 t = object_desc_chr(t, ',');
2200 t = object_desc_int(t, o_ptr->to_d);
2201 t = object_desc_chr(t, p2);
2204 /* Show the tohit if needed */
2205 else if (o_ptr->to_h)
2207 t = object_desc_chr(t, ' ');
2208 t = object_desc_chr(t, p1);
2209 t = object_desc_int(t, o_ptr->to_h);
2210 t = object_desc_chr(t, p2);
2213 /* Show the todam if needed */
2214 else if (o_ptr->to_d)
2216 t = object_desc_chr(t, ' ');
2217 t = object_desc_chr(t, p1);
2218 t = object_desc_int(t, o_ptr->to_d);
2219 t = object_desc_chr(t, p2);
2223 bow_ptr = &inventory[INVEN_BOW];
2225 /* if have a firing weapon + ammo matches bow*/
2226 if (bow_ptr->k_idx &&
2227 (((bow_ptr->sval == SV_SLING) && (o_ptr->tval == TV_SHOT)) ||
2228 (((bow_ptr->sval == SV_SHORT_BOW) ||
2229 (bow_ptr->sval == SV_LONG_BOW) ||
2230 (bow_ptr->sval == SV_NAMAKE_BOW)) && (o_ptr->tval == TV_ARROW)) ||
2231 (((bow_ptr->sval == SV_LIGHT_XBOW) ||
2232 (bow_ptr->sval == SV_HEAVY_XBOW)) && (o_ptr->tval == TV_BOLT))))
2238 avgdam = o_ptr->dd * (o_ptr->ds + 1) * 10 / 2;
2240 /* See if the bow is "known" - then set damage bonus*/
2241 if (object_known_p(bow_ptr))
2243 avgdam += (bow_ptr->to_d * 10);
2246 /* effect of ammo */
2247 if (known) avgdam += (o_ptr->to_d * 10);
2249 energy_fire = bow_energy(bow_ptr->sval);
2250 tmul = bow_tmul(bow_ptr->sval);
2252 /* Get extra "power" from "extra might" */
2253 if (p_ptr->xtra_might) tmul++;
2255 tmul = tmul * (100 + (int)(adj_str_td[p_ptr->stat_ind[A_STR]]) - 128);
2257 /* launcher multiplier */
2259 avgdam /= (100 * 10);
2260 if (avgdam < 0) avgdam = 0;
2262 /* display (shot damage/ avg damage) */
2263 t = object_desc_chr(t, ' ');
2264 t = object_desc_chr(t, p1);
2265 t = object_desc_num(t, avgdam);
2266 t = object_desc_chr(t, '/');
2268 if (p_ptr->num_fire == 0)
2270 t = object_desc_chr(t, '0');
2274 /* calc effects of energy */
2275 avgdam *= (p_ptr->num_fire * 100);
2277 avgdam /= energy_fire;
2279 t = object_desc_num(t, avgdam);
2282 t = object_desc_chr(t, p2);
2284 else if ((p_ptr->pclass == CLASS_NINJA) && (o_ptr->tval == TV_SPIKE))
2289 if (p_ptr->mighty_throw)
2293 avgdam += ((p_ptr->lev+30)*(p_ptr->lev+30)-900)/55;
2295 energy_fire = 100 - p_ptr->lev;
2297 /* display (shot damage/ avg damage) */
2298 t = object_desc_chr(t, ' ');
2299 t = object_desc_chr(t, p1);
2300 t = object_desc_num(t, avgdam);
2301 t = object_desc_chr(t, '/');
2303 /* calc effects of energy */
2304 avgdam = 100 * avgdam / energy_fire;
2306 t = object_desc_num(t, avgdam);
2308 t = object_desc_chr(t, p2);
2312 /* Add the armor bonuses */
2315 /* Show the armor class info */
2318 t = object_desc_chr(t, ' ');
2319 t = object_desc_chr(t, b1);
2320 t = object_desc_num(t, o_ptr->ac);
2321 t = object_desc_chr(t, ',');
2322 t = object_desc_int(t, o_ptr->to_a);
2323 t = object_desc_chr(t, b2);
2326 /* No base armor, but does increase armor */
2327 else if (o_ptr->to_a)
2329 t = object_desc_chr(t, ' ');
2330 t = object_desc_chr(t, b1);
2331 t = object_desc_int(t, o_ptr->to_a);
2332 t = object_desc_chr(t, b2);
2336 /* Hack -- always show base armor */
2337 else if (show_armour)
2339 t = object_desc_chr(t, ' ');
2340 t = object_desc_chr(t, b1);
2341 t = object_desc_num(t, o_ptr->ac);
2342 t = object_desc_chr(t, b2);
2346 /* No more details wanted */
2347 if (mode < 2) goto copyback;
2351 * Hack -- Wands and Staffs have charges. Make certain how many charges
2352 * a stack of staffs really has is clear. -LM-
2355 ((o_ptr->tval == TV_STAFF) ||
2356 (o_ptr->tval == TV_WAND)))
2358 /* Dump " (N charges)" */
2359 t = object_desc_chr(t, ' ');
2360 t = object_desc_chr(t, p1);
2362 /* Clear explaination for staffs. */
2363 if ((o_ptr->tval == TV_STAFF) && (o_ptr->number > 1))
2365 t = object_desc_num(t, o_ptr->number);
2366 t = object_desc_str(t, "x ");
2368 t = object_desc_num(t, o_ptr->pval);
2370 t = object_desc_str(t, "²óʬ");
2372 t = object_desc_str(t, " charge");
2374 if (o_ptr->pval != 1)
2376 t = object_desc_chr(t, 's');
2381 t = object_desc_chr(t, p2);
2383 /* Hack -- Rods have a "charging" indicator. Now that stacks of rods may
2384 * be in any state of charge or discharge, this now includes a number. -LM-
2386 else if (known && (o_ptr->tval == TV_ROD))
2388 /* Hack -- Dump " (# charging)" if relevant */
2391 /* Stacks of rods display an exact count of charging rods. */
2392 if (o_ptr->number > 1)
2395 if (k_ptr->pval == 0) k_ptr->pval = 1;
2397 /* Find out how many rods are charging, by dividing
2398 * current timeout by each rod's maximum timeout.
2399 * Ensure that any remainder is rounded up. Display
2400 * very discharged stacks as merely fully discharged.
2402 power = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval;
2403 if (power > o_ptr->number) power = o_ptr->number;
2405 /* Display prettily. */
2406 t = object_desc_str(t, " (");
2407 t = object_desc_num(t, power);
2409 t = object_desc_str(t, "ËÜ ½¼Å¶Ãæ)");
2411 t = object_desc_str(t, " charging)");
2416 /* "one Rod of Perception (1 charging)" would look tacky. */
2420 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2422 t = object_desc_str(t, " (charging)");
2429 /* Dump "pval" flags for wearable items */
2430 if (known && (f1 & (TR1_PVAL_MASK)))
2432 /* Start the display */
2433 t = object_desc_chr(t, ' ');
2434 t = object_desc_chr(t, p1);
2436 /* Dump the "pval" itself */
2437 t = object_desc_int(t, o_ptr->pval);
2439 /* Do not display the "pval" flags */
2440 if (f3 & (TR3_HIDE_TYPE))
2446 else if (f1 & (TR1_SPEED))
2448 /* Dump " to speed" */
2450 t = object_desc_str(t, "²Ã®");
2452 t = object_desc_str(t, " to speed");
2458 else if (f1 & (TR1_BLOWS))
2462 t = object_desc_str(t, "¹¶·â");
2464 t = object_desc_str(t, " attack");
2467 if (ABS(o_ptr->pval) != 1) t = object_desc_chr(t, 's');
2473 else if (f1 & (TR1_STEALTH))
2475 /* Dump " to stealth" */
2477 t = object_desc_str(t, "±£Ì©");
2479 t = object_desc_str(t, " to stealth");
2485 else if (f1 & (TR1_SEARCH))
2487 /* Dump " to searching" */
2489 t = object_desc_str(t, "õº÷");
2491 t = object_desc_str(t, " to searching");
2497 else if (f1 & (TR1_INFRA))
2499 /* Dump " to infravision" */
2501 t = object_desc_str(t, "ÀÖ³°Àþ»ëÎÏ");
2503 t = object_desc_str(t, " to infravision");
2509 else if (f1 & (TR1_TUNNEL))
2514 /* Finish the display */
2515 t = object_desc_chr(t, p2);
2518 /* Hack -- Process Lanterns/Torches */
2519 if (known && (o_ptr->tval == TV_LITE) && (!(artifact_p(o_ptr) || (o_ptr->sval == SV_LITE_FEANOR))))
2521 /* Hack -- Turns of light for normal lites */
2523 t = object_desc_str(t, "(");
2525 t = object_desc_str(t, " (with ");
2528 if (o_ptr->name2 == EGO_LITE_LONG) t = object_desc_num(t, o_ptr->xtra4*2);
2529 else t = object_desc_num(t, o_ptr->xtra4);
2531 t = object_desc_str(t, "¥¿¡¼¥ó¤Î¼÷Ì¿)");
2533 t = object_desc_str(t, " turns of light)");
2539 /* Indicate charging objects, but not rods. */
2540 if (known && o_ptr->timeout && o_ptr->tval != TV_ROD)
2542 /* Hack -- Dump " (charging)" if relevant */
2544 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2546 t = object_desc_str(t, " (charging)");
2552 /* No more details wanted */
2553 if (mode < 3) goto copyback;
2556 /* No inscription yet */
2559 /* Use the game-generated "feeling" otherwise, if available */
2562 strcpy(tmp_val2, game_inscriptions[o_ptr->feeling]);
2565 /* Note "cursed" if the item is known to be cursed */
2566 else if (cursed_p(o_ptr) && (known || (o_ptr->ident & (IDENT_SENSE))))
2569 strcpy(tmp_val2, "¼ö¤ï¤ì¤Æ¤¤¤ë");
2571 strcpy(tmp_val2, "cursed");
2576 /* Note "unidentified" if the item is unidentified */
2577 else if ((o_ptr->tval == TV_RING || o_ptr->tval == TV_AMULET
2578 || o_ptr->tval == TV_LITE || o_ptr->tval == TV_FIGURINE)
2579 && object_aware_p(o_ptr) && !object_known_p(o_ptr)
2580 && !((o_ptr->ident)&IDENT_SENSE))
2583 strcpy(tmp_val2, "̤´ÕÄê");
2585 strcpy(tmp_val2, "unidentified");
2589 /* Mega-Hack -- note empty wands/staffs */
2590 else if (!known && (o_ptr->ident & (IDENT_EMPTY)))
2593 strcpy(tmp_val2, "¶õ");
2595 strcpy(tmp_val2, "empty");
2600 /* Note "tried" if the object has been tested unsuccessfully */
2601 else if (!aware && object_tried_p(o_ptr))
2604 strcpy(tmp_val2, "̤ȽÌÀ");
2606 strcpy(tmp_val2, "tried");
2611 /* Use the standard inscription if available */
2612 if (o_ptr->inscription)
2616 if (tmp_val2[0]) strcat(tmp_val2, ", ");
2618 strcat(tmp_val2, quark_str(o_ptr->inscription));
2620 for (; *u && (*u != '#'); u++);
2625 /* Note the discount, if any */
2626 else if (o_ptr->discount && !(tmp_val2[0]))
2628 (void)object_desc_num(tmp_val2, o_ptr->discount);
2630 strcat(tmp_val2, "%°ú¤");
2632 strcat(tmp_val2, "% off");
2637 /* Append the inscription, if any */
2640 /* Append the inscription */
2641 t = object_desc_chr(t, ' ');
2642 t = object_desc_chr(t, c1);
2643 t = object_desc_str(t, tmp_val2);
2644 t = object_desc_chr(t, c2);
2649 for (i = 0; i < MAX_NLEN-2; i++)
2652 if (iskanji(*(t+i)))
2660 if (i == MAX_NLEN-2)
2663 if (iskanji(*(t+i)))
2669 *(buf+MAX_NLEN-1) = '\0';