1 /* Purpose: Object flavor code */
4 * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
6 * This software may be copied and distributed for educational, research,
7 * and not for profit purposes provided that this copyright and statement
8 * are included in all such copies. Other copyrights may also apply.
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 30 /* 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",
109 "Ruby", "Emerald", "Sapphire", "Garnet", "Diamond"
113 "àèàá¤Î","ήÌÚ¤Î","¥µ¥ó¥´¤Î","¤á¤Î¤¦¤Î","¾Ý²ç¤Î",
114 "¹õÍËÀФÎ","¹ü¤Î","¿¿ï«¤Î","ÀÄƼ¤Î","¤·¤í¤á¤Î",
115 "¤Ù¤Ã¹Ã¤Î","¶â¤Î","ÎÜÍþ¤Î","¿å¾½¤Î","¶ä¤Î",
116 "Ƽ¤Î","ÒĤÎ", "¥×¥é¥Á¥Ê¤Î", "¥ë¡¼¥ó¤¬¹ï¤Þ¤ì¤¿","»¬¤Ó¤¿",
117 "¶Ê¤¬¤Ã¤¿", "¥É¥é¥´¥ó¤ÎÄÞ¤Î", "¿ô¼î¤Î", "¤Ò¤¹¤¤¤Î", "¥ß¥¹¥ê¥ë¤Î",
118 "¥ë¥Ó¡¼¤Î", "¥¨¥á¥é¥ë¥É¤Î", "¥µ¥Õ¥¡¥¤¥¢¤Î", "¥¬¡¼¥Í¥Ã¥È¤Î", "¥À¥¤¥¢¥â¥ó¥É¤Î"
122 static byte amulet_col[MAX_AMULETS] =
124 TERM_YELLOW, TERM_L_UMBER, TERM_WHITE, TERM_L_WHITE, TERM_WHITE,
125 TERM_L_DARK, TERM_WHITE, TERM_L_UMBER, TERM_L_UMBER, TERM_SLATE,
126 TERM_GREEN, TERM_YELLOW, TERM_L_BLUE, TERM_L_BLUE, TERM_L_WHITE,
127 TERM_L_UMBER, TERM_VIOLET, TERM_WHITE, TERM_UMBER, TERM_RED,
128 TERM_GREEN, TERM_L_GREEN, TERM_L_GREEN, TERM_GREEN, TERM_L_BLUE,
129 TERM_RED, TERM_GREEN, TERM_BLUE, TERM_RED, TERM_WHITE
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:
402 case TV_CRUSADE_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 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:
912 case TV_CRUSADE_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 * Structs and tables for Auto Inscription for flags
1027 typedef struct flag_insc_table
1038 static flag_insc_table flag_insc_plus[] =
1040 { "¹¶", "At", TR_BLOWS, -1 },
1041 { "®", "Sp", TR_SPEED, -1 },
1042 { "ÏÓ", "St", TR_STR, -1 },
1043 { "ÃÎ", "In", TR_INT, -1 },
1044 { "¸", "Wi", TR_WIS, -1 },
1045 { "´ï", "Dx", TR_DEX, -1 },
1046 { "ÂÑ", "Cn", TR_CON, -1 },
1047 { "̥", "Ch", TR_CHR, -1 },
1048 { "ƻ", "Md", TR_MAGIC_MASTERY, -1 },
1049 { "±£", "Sl", TR_STEALTH, -1 },
1050 { "õ", "Sr", TR_SEARCH, -1 },
1051 { "ÀÖ", "If", TR_INFRA, -1 },
1052 { "·¡", "Dg", TR_TUNNEL, -1 },
1053 { NULL, NULL, 0, -1 }
1056 static flag_insc_table flag_insc_immune[] =
1058 { "»À", "Ac", TR_IM_ACID, -1 },
1059 { "ÅÅ", "El", TR_IM_ELEC, -1 },
1060 { "²Ð", "Fi", TR_IM_FIRE, -1 },
1061 { "Îä", "Co", TR_IM_COLD, -1 },
1062 { NULL, NULL, 0, -1 }
1065 static flag_insc_table flag_insc_resistance[] =
1067 { "»À", "Ac", TR_RES_ACID, TR_IM_ACID },
1068 { "ÅÅ", "El", TR_RES_ELEC, TR_IM_ELEC },
1069 { "²Ð", "Fi", TR_RES_FIRE, TR_IM_FIRE },
1070 { "Îä", "Co", TR_RES_COLD, TR_IM_COLD },
1071 { "ÆÇ", "Po", TR_RES_POIS, -1 },
1072 { "Á®", "Li", TR_RES_LITE, -1 },
1073 { "°Å", "Dk", TR_RES_DARK, -1 },
1074 { "ÇË", "Sh", TR_RES_SHARDS, -1 },
1075 { "ÌÕ", "Bl", TR_RES_BLIND, -1 },
1076 { "Íð", "Cf", TR_RES_CONF, -1 },
1077 { "¹ì", "So", TR_RES_SOUND, -1 },
1078 { "¹ö", "Nt", TR_RES_NETHER, -1 },
1079 { "°ø", "Nx", TR_RES_NEXUS, -1 },
1080 { "ÆÙ", "Ca", TR_RES_CHAOS, -1 },
1081 { "Îô", "Di", TR_RES_DISEN, -1 },
1082 { "¶²", "Fe", TR_RES_FEAR, -1 },
1083 { NULL, NULL, 0, -1 }
1086 static flag_insc_table flag_insc_misc[] =
1088 { "ËâÎÏ", "Ma", TR_DEC_MANA, -1 },
1089 { "Åê", "Th", TR_THROW, -1 },
1090 { "ȿ", "Rf", TR_REFLECT, -1 },
1091 { "Ëã", "Fa", TR_FREE_ACT, -1 },
1092 { "ȑ", "Si", TR_SEE_INVIS, -1 },
1093 { "·Ð", "Hl", TR_HOLD_LIFE, -1 },
1094 { "ÃÙ", "Sd", TR_SLOW_DIGEST, -1 },
1095 { "³è", "Rg", TR_REGEN, -1 },
1096 { "Éâ", "Lv", TR_FEATHER, -1 },
1097 { "ÌÀ", "Lu", TR_LITE, -1 },
1098 { "·Ù", "Wr", TR_WARNING, -1 },
1099 { "ÇÜ", "Xm", TR_XTRA_MIGHT, -1 },
1100 { "¼Í", "Xs", TR_XTRA_SHOTS, -1 },
1101 { "½Ö", "Te", TR_TELEPORT, -1 },
1102 { "ÅÜ", "Ag", TR_AGGRAVATE, -1 },
1103 { "½Ë", "Bs", TR_BLESSED, -1 },
1104 { "´÷", "Ty", TR_TY_CURSE, -1 },
1105 { NULL, NULL, 0, -1 }
1108 static flag_insc_table flag_insc_aura[] =
1110 { "±ê", "F", TR_SH_FIRE, -1 },
1111 { "ÅÅ", "E", TR_SH_ELEC, -1 },
1112 { "Îä", "C", TR_SH_COLD, -1 },
1113 { "Ëâ", "M", TR_NO_MAGIC, -1 },
1114 { "½Ö", "T", TR_NO_TELE, -1 },
1115 { NULL, NULL, 0, -1 }
1118 static flag_insc_table flag_insc_brand[] =
1120 { "»À", "A", TR_BRAND_ACID, -1 },
1121 { "ÅÅ", "E", TR_BRAND_ELEC, -1 },
1122 { "¾Æ", "F", TR_BRAND_FIRE, -1 },
1123 { "Åà", "Co", TR_BRAND_COLD, -1 },
1124 { "ÆÇ", "P", TR_BRAND_POIS, -1 },
1125 { "ÆÙ", "Ca", TR_CHAOTIC, -1 },
1126 { "µÛ", "V", TR_VAMPIRIC, -1 },
1127 { "¿Ì", "Q", TR_IMPACT, -1 },
1128 { "ÀÚ", "S", TR_VORPAL, -1 },
1129 { "Íý", "M", TR_FORCE_WEAPON, -1 },
1130 { NULL, NULL, 0, -1 }
1133 static flag_insc_table flag_insc_kill[] =
1135 { "¼Ù", "*", TR_KILL_EVIL, -1 },
1136 { "¿Í", "p", TR_KILL_HUMAN, -1 },
1137 { "ζ", "D", TR_KILL_DRAGON, -1 },
1138 { "¥ª", "o", TR_KILL_ORC, -1 },
1139 { "¥È", "T", TR_KILL_TROLL, -1 },
1140 { "µð", "P", TR_KILL_GIANT, -1 },
1141 { "¥Ç", "U", TR_KILL_DEMON, -1 },
1142 { "Ȉ", "L", TR_KILL_UNDEAD, -1 },
1143 { "ư", "Z", TR_KILL_ANIMAL, -1 },
1144 { NULL, NULL, 0, -1 }
1147 static flag_insc_table flag_insc_slay[] =
1149 { "¼Ù", "*", TR_SLAY_EVIL, TR_KILL_EVIL },
1150 { "¿Í", "p", TR_SLAY_HUMAN, TR_KILL_HUMAN },
1151 { "ε", "D", TR_SLAY_DRAGON, TR_KILL_DRAGON },
1152 { "¥ª", "o", TR_SLAY_ORC, TR_KILL_ORC },
1153 { "¥È", "T", TR_SLAY_TROLL, TR_KILL_TROLL },
1154 { "µð", "P", TR_SLAY_GIANT, TR_KILL_GIANT },
1155 { "¥Ç", "U", TR_SLAY_DEMON, TR_KILL_DEMON },
1156 { "Ȉ", "L", TR_SLAY_UNDEAD, TR_KILL_UNDEAD },
1157 { "ư", "Z", TR_SLAY_ANIMAL, TR_KILL_ANIMAL },
1158 { NULL, NULL, 0, -1 }
1161 static flag_insc_table flag_insc_esp1[] =
1163 { "´¶", "Tele", TR_TELEPATHY, -1 },
1164 { "¼Ù", "Evil", TR_ESP_EVIL, -1 },
1165 { "Á±", "Good", TR_ESP_GOOD, -1 },
1166 { "̵", "Nolv", TR_ESP_NONLIVING, -1 },
1167 { "¸Ä", "Uniq", TR_ESP_UNIQUE, -1 },
1168 { NULL, NULL, 0, -1 }
1171 static flag_insc_table flag_insc_esp2[] =
1173 { "¿Í", "p", TR_ESP_HUMAN, -1 },
1174 { "ε", "D", TR_ESP_DRAGON, -1 },
1175 { "¥ª", "o", TR_ESP_ORC, -1 },
1176 { "¥È", "T", TR_ESP_TROLL, -1 },
1177 { "µð", "P", TR_ESP_GIANT, -1 },
1178 { "¥Ç", "U", TR_ESP_DEMON, -1 },
1179 { "Ȉ", "L", TR_ESP_UNDEAD, -1 },
1180 { "ư", "Z", TR_ESP_ANIMAL, -1 },
1181 { NULL, NULL, 0, -1 }
1184 static flag_insc_table flag_insc_sust[] =
1186 { "ÏÓ", "St", TR_SUST_STR, -1 },
1187 { "ÃÎ", "In", TR_SUST_INT, -1 },
1188 { "¸", "Wi", TR_SUST_WIS, -1 },
1189 { "´ï", "Dx", TR_SUST_DEX, -1 },
1190 { "ÂÑ", "Cn", TR_SUST_CON, -1 },
1191 { "̥", "Ch", TR_SUST_CHR, -1 },
1192 { NULL, NULL, 0, -1 }
1196 static flag_insc_table flag_insc_plus[] =
1198 { "At", TR_BLOWS, -1 },
1199 { "Sp", TR_SPEED, -1 },
1200 { "St", TR_STR, -1 },
1201 { "In", TR_INT, -1 },
1202 { "Wi", TR_WIS, -1 },
1203 { "Dx", TR_DEX, -1 },
1204 { "Cn", TR_CON, -1 },
1205 { "Ch", TR_CHR, -1 },
1206 { "Md", TR_MAGIC_MASTERY, -1 },
1207 { "Sl", TR_STEALTH, -1 },
1208 { "Sr", TR_SEARCH, -1 },
1209 { "If", TR_INFRA, -1 },
1210 { "Dg", TR_TUNNEL, -1 },
1214 static flag_insc_table flag_insc_immune[] =
1216 { "Ac", TR_IM_ACID, -1 },
1217 { "El", TR_IM_ELEC, -1 },
1218 { "Fi", TR_IM_FIRE, -1 },
1219 { "Co", TR_IM_COLD, -1 },
1223 static flag_insc_table flag_insc_resistance[] =
1225 { "Ac", TR_RES_ACID, TR_IM_ACID },
1226 { "El", TR_RES_ELEC, TR_IM_ELEC },
1227 { "Fi", TR_RES_FIRE, TR_IM_FIRE },
1228 { "Co", TR_RES_COLD, TR_IM_COLD },
1229 { "Po", TR_RES_POIS, -1 },
1230 { "Li", TR_RES_LITE, -1 },
1231 { "Dk", TR_RES_DARK, -1 },
1232 { "Sh", TR_RES_SHARDS, -1 },
1233 { "Bl", TR_RES_BLIND, -1 },
1234 { "Cf", TR_RES_CONF, -1 },
1235 { "So", TR_RES_SOUND, -1 },
1236 { "Nt", TR_RES_NETHER, -1 },
1237 { "Nx", TR_RES_NEXUS, -1 },
1238 { "Ca", TR_RES_CHAOS, -1 },
1239 { "Di", TR_RES_DISEN, -1 },
1240 { "Fe", TR_RES_FEAR, -1 },
1244 static flag_insc_table flag_insc_misc[] =
1246 { "Ma", TR_DEC_MANA, -1 },
1247 { "Th", TR_THROW, -1 },
1248 { "Rf", TR_REFLECT, -1 },
1249 { "Fa", TR_FREE_ACT, -1 },
1250 { "Si", TR_SEE_INVIS, -1 },
1251 { "Hl", TR_HOLD_LIFE, -1 },
1252 { "Sd", TR_SLOW_DIGEST, -1 },
1253 { "Rg", TR_REGEN, -1 },
1254 { "Lv", TR_FEATHER, -1 },
1255 { "Lu", TR_LITE, -1 },
1256 { "Wr", TR_WARNING, -1 },
1257 { "Xm", TR_XTRA_MIGHT, -1 },
1258 { "Xs", TR_XTRA_SHOTS, -1 },
1259 { "Te", TR_TELEPORT, -1 },
1260 { "Ag", TR_AGGRAVATE, -1 },
1261 { "Bs", TR_BLESSED, -1 },
1262 { "Ty", TR_TY_CURSE, -1 },
1266 static flag_insc_table flag_insc_aura[] =
1268 { "F", TR_SH_FIRE, -1 },
1269 { "E", TR_SH_ELEC, -1 },
1270 { "C", TR_SH_COLD, -1 },
1271 { "M", TR_NO_MAGIC, -1 },
1272 { "T", TR_NO_TELE, -1 },
1276 static flag_insc_table flag_insc_brand[] =
1278 { "A", TR_BRAND_ACID, -1 },
1279 { "E", TR_BRAND_ELEC, -1 },
1280 { "F", TR_BRAND_FIRE, -1 },
1281 { "Co", TR_BRAND_COLD, -1 },
1282 { "P", TR_BRAND_POIS, -1 },
1283 { "Ca", TR_CHAOTIC, -1 },
1284 { "V", TR_VAMPIRIC, -1 },
1285 { "Q", TR_IMPACT, -1 },
1286 { "S", TR_VORPAL, -1 },
1287 { "M", TR_FORCE_WEAPON, -1 },
1291 static flag_insc_table flag_insc_kill[] =
1293 { "*", TR_KILL_EVIL, -1 },
1294 { "p", TR_KILL_HUMAN, -1 },
1295 { "D", TR_KILL_DRAGON, -1 },
1296 { "o", TR_KILL_ORC, -1 },
1297 { "T", TR_KILL_TROLL, -1 },
1298 { "P", TR_KILL_GIANT, -1 },
1299 { "U", TR_KILL_DEMON, -1 },
1300 { "L", TR_KILL_UNDEAD, -1 },
1301 { "Z", TR_KILL_ANIMAL, -1 },
1305 static flag_insc_table flag_insc_slay[] =
1307 { "*", TR_SLAY_EVIL, TR_KILL_EVIL },
1308 { "p", TR_SLAY_HUMAN, TR_KILL_HUMAN },
1309 { "D", TR_SLAY_DRAGON, TR_KILL_DRAGON },
1310 { "o", TR_SLAY_ORC, TR_KILL_ORC },
1311 { "T", TR_SLAY_TROLL, TR_KILL_TROLL },
1312 { "P", TR_SLAY_GIANT, TR_KILL_GIANT },
1313 { "U", TR_SLAY_DEMON, TR_KILL_DEMON },
1314 { "L", TR_SLAY_UNDEAD, TR_KILL_UNDEAD },
1315 { "Z", TR_SLAY_ANIMAL, TR_KILL_ANIMAL },
1319 static flag_insc_table flag_insc_esp1[] =
1321 { "Tele", TR_TELEPATHY, -1 },
1322 { "Evil", TR_ESP_EVIL, -1 },
1323 { "Good", TR_ESP_GOOD, -1 },
1324 { "Nolv", TR_ESP_NONLIVING, -1 },
1325 { "Uniq", TR_ESP_UNIQUE, -1 },
1329 static flag_insc_table flag_insc_esp2[] =
1331 { "p", TR_ESP_HUMAN, -1 },
1332 { "D", TR_ESP_DRAGON, -1 },
1333 { "o", TR_ESP_ORC, -1 },
1334 { "T", TR_ESP_TROLL, -1 },
1335 { "P", TR_ESP_GIANT, -1 },
1336 { "U", TR_ESP_DEMON, -1 },
1337 { "L", TR_ESP_UNDEAD, -1 },
1338 { "Z", TR_ESP_ANIMAL, -1 },
1342 static flag_insc_table flag_insc_sust[] =
1344 { "St", TR_SUST_STR, -1 },
1345 { "In", TR_SUST_INT, -1 },
1346 { "Wi", TR_SUST_WIS, -1 },
1347 { "Dx", TR_SUST_DEX, -1 },
1348 { "Cn", TR_SUST_CON, -1 },
1349 { "Ch", TR_SUST_CHR, -1 },
1354 /* Simple macro for get_inscription() */
1355 #define ADD_INSC(STR) (void)(ptr = object_desc_str(ptr, (STR)))
1358 * Helper function for get_inscription()
1360 static char *inscribe_flags_aux(flag_insc_table *fi_ptr, u32b flgs[TR_FLAG_SIZE], bool kanji, char *ptr)
1366 while (fi_ptr->english)
1368 if (have_flag(flgs, fi_ptr->flag) &&
1369 (fi_ptr->except_flag == -1 || !have_flag(flgs, fi_ptr->except_flag)))
1371 ADD_INSC(kanji ? fi_ptr->japanese : fi_ptr->english);
1373 ADD_INSC(fi_ptr->english);
1383 * Special variation of have_flag for auto-inscription
1385 static bool have_flag_of(flag_insc_table *fi_ptr, u32b flgs[TR_FLAG_SIZE])
1387 while (fi_ptr->english)
1389 if (have_flag(flgs, fi_ptr->flag) &&
1390 (fi_ptr->except_flag == -1 || !have_flag(flgs, fi_ptr->except_flag)))
1398 static char *get_ability_abbreviation(char *ptr, object_type *o_ptr, bool kanji, bool all)
1400 char *prev_ptr = ptr;
1401 u32b flgs[TR_FLAG_SIZE];
1403 /* Extract the flags */
1404 object_flags(o_ptr, flgs);
1407 /* Remove obvious flags */
1410 object_kind *k_ptr = &k_info[o_ptr->k_idx];
1414 for (j = 0; j < TR_FLAG_SIZE; j++)
1415 flgs[j] &= ~k_ptr->flags[j];
1419 artifact_type *a_ptr = &a_info[o_ptr->name1];
1421 for (j = 0; j < TR_FLAG_SIZE; j++)
1422 flgs[j] &= ~a_ptr->flags[j];
1427 ego_item_type *e_ptr = &e_info[o_ptr->name2];
1429 for (j = 0; j < TR_FLAG_SIZE; j++)
1430 flgs[j] &= ~e_ptr->flags[j];
1436 if (have_flag_of(flag_insc_plus, flgs))
1441 ptr = inscribe_flags_aux(flag_insc_plus, flgs, kanji, ptr);
1444 if (have_flag_of(flag_insc_immune, flgs))
1446 if (!kanji && ptr != prev_ptr)
1453 ptr = inscribe_flags_aux(flag_insc_immune, flgs, kanji, ptr);
1456 if (have_flag_of(flag_insc_resistance, flgs))
1460 else if (ptr != prev_ptr)
1466 ptr = inscribe_flags_aux(flag_insc_resistance, flgs, kanji, ptr);
1469 if (have_flag_of(flag_insc_misc, flgs))
1471 if (ptr != prev_ptr)
1477 ptr = inscribe_flags_aux(flag_insc_misc, flgs, kanji, ptr);
1480 if (have_flag_of(flag_insc_aura, flgs))
1484 ptr = inscribe_flags_aux(flag_insc_aura, flgs, kanji, ptr);
1487 if (have_flag_of(flag_insc_brand, flgs))
1489 ptr = inscribe_flags_aux(flag_insc_brand, flgs, kanji, ptr);
1492 if (have_flag_of(flag_insc_kill, flgs))
1494 ptr = inscribe_flags_aux(flag_insc_kill, flgs, kanji, ptr);
1497 if (have_flag_of(flag_insc_slay, flgs))
1499 ptr = inscribe_flags_aux(flag_insc_slay, flgs, kanji, ptr);
1504 if (have_flag_of(flag_insc_esp1, flgs) ||
1505 have_flag_of(flag_insc_esp2, flgs))
1507 ptr = inscribe_flags_aux(flag_insc_esp1, flgs, kanji, ptr);
1508 ptr = inscribe_flags_aux(flag_insc_esp2, flgs, kanji, ptr);
1512 if (have_flag_of(flag_insc_esp1, flgs))
1514 ptr = inscribe_flags_aux(flag_insc_esp1, flgs, kanji, ptr);
1515 if (have_flag_of(flag_insc_esp2, flgs))
1517 ptr = inscribe_flags_aux(flag_insc_esp2, flgs, kanji, ptr);
1521 if (have_flag_of(flag_insc_sust, flgs))
1525 ptr = inscribe_flags_aux(flag_insc_sust, flgs, kanji, ptr);
1534 * Get object inscription with auto inscription of object flags.
1536 static void get_inscription(char *buff, object_type *o_ptr)
1538 cptr insc = quark_str(o_ptr->inscription);
1541 /* Not fully identified */
1542 if (!(o_ptr->ident & IDENT_MENTAL))
1544 /* Copy until end of line or '#' */
1547 if (*insc == '#') break;
1549 if (iskanji(*insc)) *buff++ = *insc++;
1559 for (; *insc; insc++)
1561 /* Ignore fake artifact inscription */
1562 if (*insc == '#') break;
1564 /* {%} will be automatically converted */
1565 else if ('%' == *insc)
1571 /* check for too long inscription */
1572 if (ptr >= buff + MAX_NLEN) continue;
1585 if ('a' == insc[1] && 'l' == insc[2] && 'l' == insc[3])
1595 ptr = get_ability_abbreviation(ptr, o_ptr, kanji, all);
1610 * Creates a description of the item "o_ptr", and stores it in "out_val".
1612 * One can choose the "verbosity" of the description, including whether
1613 * or not the "number" of items should be described, and how much detail
1614 * should be used when describing the item.
1616 * The given "buf" must be MAX_NLEN chars long to hold the longest possible
1617 * description, which can get pretty long, including incriptions, such as:
1618 * "no more Maces of Disruption (Defender) (+10,+10) [+5] (+3 to stealth)".
1619 * Note that the inscription will be clipped to keep the total description
1620 * under MAX_NLEN-1 chars (plus a terminator).
1622 * Note the use of "object_desc_num()" and "object_desc_int()" as hyper-efficient,
1623 * portable, versions of some common "sprintf()" commands.
1625 * Note that all ego-items (when known) append an "Ego-Item Name", unless
1626 * the item is also an artifact, which should NEVER happen.
1628 * Note that all artifacts (when known) append an "Artifact Name", so we
1629 * have special processing for "Specials" (artifact Lites, Rings, Amulets).
1630 * The "Specials" never use "modifiers" if they are "known", since they
1631 * have special "descriptions", such as "The Necklace of the Dwarves".
1633 * Special Lite's use the "k_info" base-name (Phial, Star, or Arkenstone),
1634 * plus the artifact name, just like any other artifact, if known.
1636 * Special Ring's and Amulet's, if not "aware", use the same code as normal
1637 * rings and amulets, and if "aware", use the "k_info" base-name (Ring or
1638 * Amulet or Necklace). They will NEVER "append" the "k_info" name. But,
1639 * they will append the artifact name, just like any artifact, if known.
1641 * Hack -- Display "The One Ring" as "a Plain Gold Ring" until aware.
1644 * OD_NAME_ONLY : The Cloak of Death
1645 * OD_NAME_AND_ENCHANT : The Cloak of Death [1,+3]
1646 * OD_OMIT_INSCRIPTION : The Cloak of Death [1,+3] (+2 to Stealth)
1647 * 0 : The Cloak of Death [1,+3] (+2 to Stealth) {nifty}
1649 * OD_OMIT_PREFIX : Forbidden numeric prefix
1650 * OD_NO_PLURAL : Forbidden use of plural
1651 * OD_STORE : Assume to be aware and known
1652 * OD_NO_FLAVOR : Allow to hidden flavor
1654 void object_desc(char *buf, object_type *o_ptr, u32b mode)
1656 /* Extract object kind name */
1657 cptr kindname = get_object_name(o_ptr);
1659 /* Extract default "base" string */
1660 cptr basenm = kindname;
1662 /* Assume no "modifier" string */
1665 /* Hack -- Extract the sub-type "indexx" */
1666 int indexx = o_ptr->sval;
1674 bool show_weapon = FALSE;
1675 bool show_armour = FALSE;
1680 char p1 = '(', p2 = ')';
1681 char b1 = '[', b2 = ']';
1682 char c1 = '{', c2 = '}';
1684 char tmp_val[MAX_NLEN+160];
1685 char tmp_val2[MAX_NLEN+10];
1686 char fake_insc_buf[30];
1688 u32b flgs[TR_FLAG_SIZE];
1690 object_type *bow_ptr;
1692 object_kind *k_ptr = &k_info[o_ptr->k_idx];
1694 /* Extract some flags */
1695 object_flags(o_ptr, flgs);
1697 /* See if the object is "aware" */
1698 if (object_aware_p(o_ptr)) aware = TRUE;
1700 /* See if the object is "known" */
1701 if (object_known_p(o_ptr)) known = TRUE;
1703 /* Allow flavors to be hidden when aware */
1704 if (aware && ((mode & OD_NO_FLAVOR) || plain_descriptions)) flavor = FALSE;
1706 /* Object is in the inventory of a store or spoiler */
1707 if ((mode & OD_STORE) || (o_ptr->ident & IDENT_STORE))
1709 /* Don't show flavors */
1712 /* Pretend known and aware */
1717 /* Analyze the object */
1718 switch (o_ptr->tval)
1720 /* Some objects are easy to describe */
1734 monster_race *r_ptr = &r_info[o_ptr->pval];
1743 modstr = " (empty)";
1749 sprintf(tmp_val2, " (%s)",r_name + r_ptr->name);
1752 cptr t = r_name + r_ptr->name;
1754 if (!(r_ptr->flags1 & RF1_UNIQUE))
1756 sprintf(tmp_val2, " (%s%s)", (is_a_vowel(*t) ? "an " : "a "), t);
1762 sprintf(tmp_val2, "(%s)", t);
1772 /* Figurines/Statues */
1776 monster_race *r_ptr = &r_info[o_ptr->pval];
1779 modstr = r_name + r_ptr->name;
1781 cptr t = r_name + r_ptr->name;
1783 if (!(r_ptr->flags1 & RF1_UNIQUE))
1785 sprintf(tmp_val2, "%s%s", (is_a_vowel(*t) ? "an " : "a "), t);
1802 monster_race *r_ptr = &r_info[o_ptr->pval];
1804 modstr = r_name + r_ptr->name;
1809 if (r_ptr->flags1 & RF1_UNIQUE)
1810 basenm = "& % of #";
1818 /* Missiles/ Bows/ Weapons */
1849 /* Lites (including a few "Specials") */
1855 /* Amulets (including a few "Specials") */
1858 /* Known artifacts */
1861 if (artifact_p(o_ptr)) break;
1862 if (k_ptr->gen_flags & TRG_INSTA_ART) break;
1865 /* Color the object */
1866 modstr = amulet_adj[indexx];
1869 if (!flavor) basenm = "%¤Î¥¢¥ß¥å¥ì¥Ã¥È";
1870 else if (aware) basenm = "%¤Î#¥¢¥ß¥å¥ì¥Ã¥È";
1871 else basenm = "#¥¢¥ß¥å¥ì¥Ã¥È";
1873 if (!flavor) basenm = "& Amulet~ of %";
1874 else if (aware) basenm = "& # Amulet~ of %";
1875 else basenm = "& # Amulet~";
1881 /* Rings (including a few "Specials") */
1884 /* Known artifacts */
1887 if (artifact_p(o_ptr)) break;
1888 if (k_ptr->gen_flags & TRG_INSTA_ART) break;
1891 /* Color the object */
1892 modstr = ring_adj[indexx];
1895 if (!flavor) basenm = "%¤Î»ØÎØ";
1896 else if (aware) basenm = "%¤Î#»ØÎØ";
1897 else basenm = "#»ØÎØ";
1899 if (!flavor) basenm = "& Ring~ of %";
1900 else if (aware) basenm = "& # Ring~ of %";
1901 else basenm = "& # Ring~";
1904 if (!k_ptr->to_h && !k_ptr->to_d && (o_ptr->to_h || o_ptr->to_d)) show_weapon = TRUE;
1916 /* Color the object */
1917 modstr = staff_adj[indexx];
1920 if (!flavor) basenm = "%¤Î¾ó";
1921 else if (aware) basenm = "%¤Î#¾ó";
1922 else basenm = "#¾ó";
1924 if (!flavor) basenm = "& Staff~ of %";
1925 else if (aware) basenm = "& # Staff~ of %";
1926 else basenm = "& # Staff~";
1934 /* Color the object */
1935 modstr = wand_adj[indexx];
1938 if (!flavor) basenm = "%¤ÎËâË¡ËÀ";
1939 else if (aware) basenm = "%¤Î#ËâË¡ËÀ";
1940 else basenm = "#ËâË¡ËÀ";
1942 if (!flavor) basenm = "& Wand~ of %";
1943 else if (aware) basenm = "& # Wand~ of %";
1944 else basenm = "& # Wand~";
1952 /* Color the object */
1953 modstr = rod_adj[indexx];
1956 if (!flavor) basenm = "%¤Î¥í¥Ã¥É";
1957 else if (aware) basenm = "%¤Î#¥í¥Ã¥É";
1958 else basenm = "#¥í¥Ã¥É";
1960 if (!flavor) basenm = "& Rod~ of %";
1961 else if (aware) basenm = "& # Rod~ of %";
1962 else basenm = "& # Rod~";
1970 /* Color the object */
1971 modstr = scroll_adj[indexx];
1974 if (!flavor) basenm = "%¤Î´¬Êª";
1975 else if (aware) basenm = "¡Ö#¡×¤È½ñ¤«¤ì¤¿%¤Î´¬Êª";
1976 else basenm = "¡Ö#¡×¤È½ñ¤«¤ì¤¿´¬Êª";
1978 if (!flavor) basenm = "& Scroll~ of %";
1979 else if (aware) basenm = "& Scroll~ titled \"#\" of %";
1980 else basenm = "& Scroll~ titled \"#\"";
1988 /* Color the object */
1989 modstr = potion_adj[indexx];
1992 if (!flavor) basenm = "%¤ÎÌô";
1993 else if (aware) basenm = "%¤Î#Ìô";
1994 else basenm = "#Ìô";
1996 if (!flavor) basenm = "& Potion~ of %";
1997 else if (aware) basenm = "& # Potion~ of %";
1998 else basenm = "& # Potion~";
2006 /* Ordinary food is "boring" */
2007 if (o_ptr->sval >= SV_FOOD_MIN_FOOD) break;
2009 /* Color the object */
2010 modstr = food_adj[indexx];
2013 if (!flavor) basenm = "%¤Î¥¥Î¥³";
2014 else if (aware) basenm = "%¤Î#¥¥Î¥³";
2015 else basenm = "#¥¥Î¥³";
2017 if (!flavor) basenm = "& Mushroom~ of %";
2018 else if (aware) basenm = "& # Mushroom~ of %";
2019 else basenm = "& # Mushroom~";
2028 basenm = "ÍÓÈé»æ - %";
2030 basenm = "& Parchment~ - %";
2039 basenm = "À¸Ì¿¤ÎËâË¡½ñ%";
2041 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2042 basenm = "& Book~ of Life Magic %";
2044 basenm = "& Life Spellbook~ %";
2050 case TV_SORCERY_BOOK:
2053 basenm = "Àç½Ñ¤ÎËâË¡½ñ%";
2055 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2056 basenm = "& Book~ of Sorcery %";
2058 basenm = "& Sorcery Spellbook~ %";
2064 case TV_NATURE_BOOK:
2067 basenm = "¼«Á³¤ÎËâË¡½ñ%";
2069 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2070 basenm = "& Book~ of Nature Magic %";
2072 basenm = "& Nature Spellbook~ %";
2081 basenm = "¥«¥ª¥¹¤ÎËâË¡½ñ%";
2083 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2084 basenm = "& Book~ of Chaos Magic %";
2086 basenm = "& Chaos Spellbook~ %";
2095 basenm = "°Å¹õ¤ÎËâË¡½ñ%";
2097 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2098 basenm = "& Book~ of Death Magic %";
2100 basenm = "& Death Spellbook~ %";
2109 basenm = "¥È¥é¥ó¥×¤ÎËâË¡½ñ%";
2111 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2112 basenm = "& Book~ of Trump Magic %";
2114 basenm = "& Trump Spellbook~ %";
2120 case TV_ARCANE_BOOK:
2123 basenm = "Èë½Ñ¤ÎËâË¡½ñ%";
2125 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2126 basenm = "& Book~ of Arcane Magic %";
2128 basenm = "& Arcane Spellbook~ %";
2134 case TV_ENCHANT_BOOK:
2137 basenm = "¾¢¤ÎËâË¡½ñ%";
2139 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2140 basenm = "& Book~ of Craft Magic %";
2142 basenm = "& Craft Spellbook~ %";
2148 case TV_DAEMON_BOOK:
2151 basenm = "°Ëâ¤ÎËâË¡½ñ%";
2153 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2154 basenm = "& Book~ of Daemon Magic %";
2156 basenm = "& Daemon Spellbook~ %";
2162 case TV_CRUSADE_BOOK:
2165 basenm = "Ç˼٤ÎËâË¡½ñ%";
2167 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2168 basenm = "& Book~ of Crusade Magic %";
2170 basenm = "& Crusade Spellbook~ %";
2181 basenm = "& Song Book~ %";
2187 case TV_HISSATSU_BOOK:
2190 basenm = "& Éð·Ý¤Î½ñ%";
2192 basenm = "Book~ of Kendo %";
2198 /* Hack -- Gold/Gems */
2201 strcpy(buf, basenm);
2205 /* Used in the "inventory" routine */
2209 strcpy(buf, "(¤Ê¤·)");
2211 strcpy(buf, "(nothing)");
2218 /* Use full name from k_info or a_info */
2219 if (aware && have_flag(flgs, TR_FULL_NAME))
2221 if (known && o_ptr->name1) basenm = a_name + a_info[o_ptr->name1].name;
2222 else basenm = kindname;
2225 /* Start dumping the result */
2229 if (basenm[0] == '&')
2235 if (mode & OD_OMIT_PREFIX)
2239 else if (o_ptr->number > 1)
2241 t = object_desc_kosuu(t, o_ptr);
2242 t = object_desc_str(t, "¤Î ");
2245 /* ±Ñ¸ì¤Î¾ì¹ç¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ï The ¤¬ÉÕ¤¯¤Î¤Çʬ¤«¤ë¤¬
2246 * ÆüËܸì¤Ç¤Ïʬ¤«¤é¤Ê¤¤¤Î¤Ç¥Þ¡¼¥¯¤ò¤Ä¤±¤ë
2250 if (artifact_p(o_ptr)) t = object_desc_str(t, "¡ú");
2251 else if (o_ptr->art_name) t = object_desc_str(t, "¡ù");
2256 /* The object "expects" a "number" */
2257 if (basenm[0] == '&')
2259 /* Skip the ampersand (and space) */
2263 if (mode & OD_OMIT_PREFIX)
2268 /* Hack -- None left */
2269 else if (o_ptr->number <= 0)
2271 t = object_desc_str(t, "no more ");
2274 /* Extract the number */
2275 else if (o_ptr->number > 1)
2277 t = object_desc_num(t, o_ptr->number);
2278 t = object_desc_chr(t, ' ');
2281 /* Hack -- The only one of its kind */
2282 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
2284 t = object_desc_str(t, "The ");
2287 /* Unique corpses are unique */
2288 else if (o_ptr->tval == TV_CORPSE)
2290 monster_race *r_ptr = &r_info[o_ptr->pval];
2292 if (r_ptr->flags1 & RF1_UNIQUE)
2294 t = object_desc_str(t, "The ");
2305 case '#': vowel = is_a_vowel(modstr[0]); break;
2306 case '%': vowel = is_a_vowel(*kindname); break;
2307 default: vowel = is_a_vowel(*s); break;
2312 /* A single one, with a vowel */
2313 t = object_desc_str(t, "an ");
2317 /* A single one, without a vowel */
2318 t = object_desc_str(t, "a ");
2323 /* Hack -- objects that "never" take an article */
2330 if (mode & OD_OMIT_PREFIX)
2335 /* Hack -- all gone */
2336 else if (o_ptr->number <= 0)
2338 t = object_desc_str(t, "no more ");
2341 /* Prefix a number if required */
2342 else if (o_ptr->number > 1)
2344 t = object_desc_num(t, o_ptr->number);
2345 t = object_desc_chr(t, ' ');
2348 /* Hack -- The only one of its kind */
2349 else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
2351 t = object_desc_str(t, "The ");
2354 /* Hack -- single items get no prefix */
2362 /* Paranoia -- skip illegal tildes */
2363 /* while (*s == '~') s++; */
2366 if (item_tester_hook_smith(o_ptr))
2368 t = object_desc_str(t, format("ÃÃÌê»Õ%s¤Î", player_name));
2371 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¡¢Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à¤Î̾Á°¤òÉղ乤ë */
2374 /* ¥é¥ó¥À¥à¡¦¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È */
2375 if (o_ptr->art_name)
2377 cptr temp = quark_str(o_ptr->art_name);
2379 /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
2380 /* ±Ñ¸ìÈǤΥ»¡¼¥Ö¥Õ¥¡¥¤¥ë¤«¤éÍ褿 'of XXX' ¤Ï,¡ÖXXX¤Î¡×¤Èɽ¼¨¤¹¤ë */
2381 if (strncmp(temp, "of ", 3) == 0)
2383 t = object_desc_str(t, &temp[3]);
2384 t = object_desc_str(t, "¤Î");
2386 else if ((strncmp(temp, "¡Ø", 2) != 0) && (temp[0] != '\''))
2387 t = object_desc_str(t, temp);
2389 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à */
2390 else if (o_ptr->name1 && !have_flag(flgs, TR_FULL_NAME))
2392 artifact_type *a_ptr = &a_info[o_ptr->name1];
2393 /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
2394 if (strncmp(a_name + a_ptr->name, "¡Ø", 2) != 0)
2396 t = object_desc_str(t, a_name + a_ptr->name);
2399 /* ̾¤Î¤¢¤ë¥¢¥¤¥Æ¥à */
2400 else if (o_ptr->name2)
2402 ego_item_type *e_ptr = &e_info[o_ptr->name2];
2403 t = object_desc_str(t, e_name + e_ptr->name);
2408 /* Copy the string */
2411 /* Insert the modifier (flavor) */
2414 t = object_desc_str(t, modstr);
2416 /* Paranoia -- Never append multiple modstr's */
2420 /* Append kind name */
2423 t = object_desc_str(t, kindname);
2425 /* Paranoia -- Never append multiple kindname's */
2433 /* Add a plural if needed */
2434 if (!(mode & OD_NO_PLURAL) && (o_ptr->number != 1))
2438 /* XXX XXX XXX Mega-Hack */
2440 /* Hack -- "Cutlass-es" and "Torch-es" */
2441 if ((k == 's') || (k == 'h')) *t++ = 'e';
2462 /* '¡Ø'¤«¤é»Ï¤Þ¤ëÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ¸å¤ËÉղ乤ë */
2465 /* ¥é¥ó¥À¥à¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Î̾Á°¤Ï¥»¡¼¥Ö¥Õ¥¡¥¤¥ë¤ËµÏ¿
2466 ¤µ¤ì¤ë¤Î¤Ç¡¢±Ñ¸ìÈǤÎ̾Á°¤â¤½¤ì¤é¤·¤¯ÊÑ´¹¤¹¤ë */
2467 if (o_ptr->art_name)
2471 strcpy(temp, quark_str(o_ptr->art_name));
2472 /* MEGA HACK by ita */
2473 if (strncmp(temp, "¡Ø", 2) == 0) t = object_desc_str(t, temp);
2474 else if (temp[0] == '\'')
2476 itemp = strlen(temp);
2477 temp[itemp - 1] = 0;
2478 t = object_desc_str(t, "¡Ø");
2479 t = object_desc_str(t, &temp[1]);
2480 t = object_desc_str(t, "¡Ù");
2483 else if (o_ptr->name1)
2485 artifact_type *a_ptr = &a_info[o_ptr->name1];
2486 if (strncmp(a_name + a_ptr->name, "¡Ø", 2) == 0)
2488 t = object_desc_str(t, a_name + a_ptr->name);
2491 else if (o_ptr->inscription)
2493 cptr str = quark_str(o_ptr->inscription);
2502 if (*str == '#') break;
2508 cptr str = my_strchr(quark_str(o_ptr->inscription), '#');
2510 /* Add the false name */
2511 t = object_desc_str(t,"¡Ø");
2512 t = object_desc_str(t, &str[1]);
2513 t = object_desc_str(t,"¡Ù");
2518 if (item_tester_hook_smith(o_ptr))
2520 t = object_desc_str(t,format(" of %s the Smith",player_name));
2523 /* Hack -- Append "Artifact" or "Special" names */
2524 if (known && !have_flag(flgs, TR_FULL_NAME))
2526 /* Is it a new random artifact ? */
2527 if (o_ptr->art_name)
2529 t = object_desc_chr(t, ' ');
2530 t = object_desc_str(t, quark_str(o_ptr->art_name));
2533 /* Grab any artifact name */
2534 else if (o_ptr->name1)
2536 artifact_type *a_ptr = &a_info[o_ptr->name1];
2538 t = object_desc_chr(t, ' ');
2539 t = object_desc_str(t, a_name + a_ptr->name);
2542 /* Grab any ego-item name */
2547 ego_item_type *e_ptr = &e_info[o_ptr->name2];
2549 t = object_desc_chr(t, ' ');
2550 t = object_desc_str(t, e_name + e_ptr->name);
2553 if (o_ptr->inscription && my_strchr(quark_str(o_ptr->inscription), '#'))
2556 cptr str = my_strchr(quark_str(o_ptr->inscription), '#');
2558 /* Add the false name */
2559 t = object_desc_chr(t, ' ');
2560 t = object_desc_str(t, &str[1]);
2567 /* No more details wanted */
2568 if (mode & OD_NAME_ONLY) goto object_desc_done;
2570 /* Hack -- Chests must be described in detail */
2571 if (o_ptr->tval == TV_CHEST)
2573 /* Not searched yet */
2579 /* May be "empty" */
2580 else if (!o_ptr->pval)
2583 t = object_desc_str(t, "(¶õ)");
2585 t = object_desc_str(t, " (empty)");
2589 /* May be "disarmed" */
2590 else if (o_ptr->pval < 0)
2592 if (chest_traps[0 - o_ptr->pval])
2595 t = object_desc_str(t, "(²ò½üºÑ)");
2597 t = object_desc_str(t, " (disarmed)");
2603 t = object_desc_str(t, "(Èó»Ü¾û)");
2605 t = object_desc_str(t, " (unlocked)");
2610 /* Describe the traps, if any */
2613 /* Describe the traps */
2614 switch (chest_traps[o_ptr->pval])
2619 t = object_desc_str(t, "(»Ü¾û)");
2621 t = object_desc_str(t, " (Locked)");
2625 case CHEST_LOSE_STR:
2628 t = object_desc_str(t, "(ÆÇ¿Ë)");
2630 t = object_desc_str(t, " (Poison Needle)");
2634 case CHEST_LOSE_CON:
2637 t = object_desc_str(t, "(ÆÇ¿Ë)");
2639 t = object_desc_str(t, " (Poison Needle)");
2646 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2648 t = object_desc_str(t, " (Gas Trap)");
2652 case CHEST_PARALYZE:
2655 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2657 t = object_desc_str(t, " (Gas Trap)");
2664 t = object_desc_str(t, "(ÇúȯÁõÃÖ)");
2666 t = object_desc_str(t, " (Explosion Device)");
2671 case CHEST_BIRD_STORM:
2672 case CHEST_E_SUMMON:
2673 case CHEST_H_SUMMON:
2676 t = object_desc_str(t, "(¾¤´¤Î¥ë¡¼¥ó)");
2678 t = object_desc_str(t, " (Summoning Runes)");
2682 case CHEST_RUNES_OF_EVIL:
2685 t = object_desc_str(t, "(¼Ù°¤Ê¥ë¡¼¥ó)");
2687 t = object_desc_str(t, " (Gleaming Black Runes)");
2694 t = object_desc_str(t, "(·ÙÊóÁõÃÖ)");
2696 t = object_desc_str(t, " (Alarm)");
2703 t = object_desc_str(t, "(¥Þ¥ë¥Á¡¦¥È¥é¥Ã¥×)");
2705 t = object_desc_str(t, " (Multiple Traps)");
2714 /* Display the item like a weapon */
2715 if (have_flag(flgs, TR_SHOW_MODS)) show_weapon = TRUE;
2717 /* Display the item like a weapon */
2718 if (item_tester_hook_smith(o_ptr) && (o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE))
2721 /* Display the item like a weapon */
2722 if (o_ptr->to_h && o_ptr->to_d) show_weapon = TRUE;
2724 /* Display the item like armour */
2725 if (o_ptr->ac) show_armour = TRUE;
2728 /* Dump base weapon info */
2729 switch (o_ptr->tval)
2731 /* Missiles and Weapons */
2740 /* Append a "damage" string */
2741 t = object_desc_chr(t, ' ');
2742 t = object_desc_chr(t, p1);
2743 t = object_desc_num(t, o_ptr->dd);
2744 t = object_desc_chr(t, 'd');
2745 t = object_desc_num(t, o_ptr->ds);
2746 t = object_desc_chr(t, p2);
2752 /* Bows get a special "damage string" */
2755 /* Mega-Hack -- Extract the "base power" */
2756 power = bow_tmul(o_ptr->sval);
2758 /* Apply the "Extra Might" flag */
2759 if (have_flag(flgs, TR_XTRA_MIGHT)) power++;
2761 /* Append a special "damage" string */
2762 t = object_desc_chr(t, ' ');
2763 t = object_desc_chr(t, p1);
2764 t = object_desc_chr(t, 'x');
2765 t = object_desc_num(t, power);
2766 t = object_desc_chr(t, p2);
2773 /* Add the weapon bonuses */
2776 /* Show the tohit/todam on request */
2779 t = object_desc_chr(t, ' ');
2780 t = object_desc_chr(t, p1);
2781 t = object_desc_int(t, o_ptr->to_h);
2782 t = object_desc_chr(t, ',');
2783 t = object_desc_int(t, o_ptr->to_d);
2784 t = object_desc_chr(t, p2);
2787 /* Show the tohit if needed */
2788 else if (o_ptr->to_h)
2790 t = object_desc_chr(t, ' ');
2791 t = object_desc_chr(t, p1);
2792 t = object_desc_int(t, o_ptr->to_h);
2793 t = object_desc_chr(t, p2);
2796 /* Show the todam if needed */
2797 else if (o_ptr->to_d)
2799 t = object_desc_chr(t, ' ');
2800 t = object_desc_chr(t, p1);
2801 t = object_desc_int(t, o_ptr->to_d);
2802 t = object_desc_chr(t, p2);
2806 bow_ptr = &inventory[INVEN_BOW];
2808 /* If have a firing weapon + ammo matches bow */
2809 if (bow_ptr->k_idx && (o_ptr->tval == p_ptr->tval_ammo))
2811 int avgdam = o_ptr->dd * (o_ptr->ds + 1) * 10 / 2;
2812 int tmul = bow_tmul(bow_ptr->sval);
2813 s16b energy_fire = bow_energy(bow_ptr->sval);
2815 /* See if the bow is "known" - then set damage bonus */
2816 if (object_known_p(bow_ptr)) avgdam += (bow_ptr->to_d * 10);
2818 /* Effect of ammo */
2819 if (known) avgdam += (o_ptr->to_d * 10);
2821 /* Get extra "power" from "extra might" */
2822 if (p_ptr->xtra_might) tmul++;
2824 tmul = tmul * (100 + (int)(adj_str_td[p_ptr->stat_ind[A_STR]]) - 128);
2826 /* Launcher multiplier */
2828 avgdam /= (100 * 10);
2829 if (avgdam < 0) avgdam = 0;
2831 /* Display (shot damage/ avg damage) */
2832 t = object_desc_chr(t, ' ');
2833 t = object_desc_chr(t, p1);
2834 t = object_desc_num(t, avgdam);
2835 t = object_desc_chr(t, '/');
2837 if (p_ptr->num_fire == 0)
2839 t = object_desc_chr(t, '0');
2843 /* Calc effects of energy */
2844 avgdam *= (p_ptr->num_fire * 100);
2845 avgdam /= energy_fire;
2846 t = object_desc_num(t, avgdam);
2849 t = object_desc_chr(t, p2);
2851 else if ((p_ptr->pclass == CLASS_NINJA) && (o_ptr->tval == TV_SPIKE))
2853 int avgdam = p_ptr->mighty_throw ? (1 + 3) : 1;
2854 s16b energy_fire = 100 - p_ptr->lev;
2856 avgdam += ((p_ptr->lev + 30) * (p_ptr->lev + 30) - 900) / 55;
2858 /* Display (shot damage/ avg damage) */
2859 t = object_desc_chr(t, ' ');
2860 t = object_desc_chr(t, p1);
2861 t = object_desc_num(t, avgdam);
2862 t = object_desc_chr(t, '/');
2864 /* Calc effects of energy */
2865 avgdam = 100 * avgdam / energy_fire;
2867 t = object_desc_num(t, avgdam);
2868 t = object_desc_chr(t, p2);
2871 /* Add the armor bonuses */
2874 /* Show the armor class info */
2877 t = object_desc_chr(t, ' ');
2878 t = object_desc_chr(t, b1);
2879 t = object_desc_num(t, o_ptr->ac);
2880 t = object_desc_chr(t, ',');
2881 t = object_desc_int(t, o_ptr->to_a);
2882 t = object_desc_chr(t, b2);
2885 /* No base armor, but does increase armor */
2886 else if (o_ptr->to_a)
2888 t = object_desc_chr(t, ' ');
2889 t = object_desc_chr(t, b1);
2890 t = object_desc_int(t, o_ptr->to_a);
2891 t = object_desc_chr(t, b2);
2895 /* Hack -- always show base armor */
2896 else if (show_armour)
2898 t = object_desc_chr(t, ' ');
2899 t = object_desc_chr(t, b1);
2900 t = object_desc_num(t, o_ptr->ac);
2901 t = object_desc_chr(t, b2);
2905 /* No more details wanted */
2906 if (mode & OD_NAME_AND_ENCHANT) goto object_desc_done;
2909 if (known) /* Known item only */
2912 * Hack -- Wands and Staffs have charges. Make certain how many charges
2913 * a stack of staffs really has is clear. -LM-
2915 if (((o_ptr->tval == TV_STAFF) || (o_ptr->tval == TV_WAND)))
2917 /* Dump " (N charges)" */
2918 t = object_desc_chr(t, ' ');
2919 t = object_desc_chr(t, p1);
2921 /* Clear explaination for staffs. */
2922 if ((o_ptr->tval == TV_STAFF) && (o_ptr->number > 1))
2924 t = object_desc_num(t, o_ptr->number);
2925 t = object_desc_str(t, "x ");
2927 t = object_desc_num(t, o_ptr->pval);
2929 t = object_desc_str(t, "²óʬ");
2931 t = object_desc_str(t, " charge");
2932 if (o_ptr->pval != 1) t = object_desc_chr(t, 's');
2935 t = object_desc_chr(t, p2);
2937 /* Hack -- Rods have a "charging" indicator. Now that stacks of rods may
2938 * be in any state of charge or discharge, this now includes a number. -LM-
2940 else if (o_ptr->tval == TV_ROD)
2942 /* Hack -- Dump " (# charging)" if relevant */
2945 /* Stacks of rods display an exact count of charging rods. */
2946 if (o_ptr->number > 1)
2949 if (k_ptr->pval == 0) k_ptr->pval = 1;
2951 /* Find out how many rods are charging, by dividing
2952 * current timeout by each rod's maximum timeout.
2953 * Ensure that any remainder is rounded up. Display
2954 * very discharged stacks as merely fully discharged.
2956 power = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval;
2957 if (power > o_ptr->number) power = o_ptr->number;
2959 /* Display prettily. */
2960 t = object_desc_str(t, " (");
2961 t = object_desc_num(t, power);
2963 t = object_desc_str(t, "ËÜ ½¼Å¶Ãæ)");
2965 t = object_desc_str(t, " charging)");
2969 /* "one Rod of Perception (1 charging)" would look tacky. */
2973 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2975 t = object_desc_str(t, " (charging)");
2981 /* Dump "pval" flags for wearable items */
2982 if (have_pval_flags(flgs))
2984 /* Start the display */
2985 t = object_desc_chr(t, ' ');
2986 t = object_desc_chr(t, p1);
2988 /* Dump the "pval" itself */
2989 t = object_desc_int(t, o_ptr->pval);
2991 /* Do not display the "pval" flags */
2992 if (have_flag(flgs, TR_HIDE_TYPE))
2998 else if (have_flag(flgs, TR_SPEED))
3000 /* Dump " to speed" */
3002 t = object_desc_str(t, "²Ã®");
3004 t = object_desc_str(t, " to speed");
3009 else if (have_flag(flgs, TR_BLOWS))
3013 t = object_desc_str(t, "¹¶·â");
3015 t = object_desc_str(t, " attack");
3018 if (ABS(o_ptr->pval) != 1) t = object_desc_chr(t, 's');
3023 else if (have_flag(flgs, TR_STEALTH))
3025 /* Dump " to stealth" */
3027 t = object_desc_str(t, "±£Ì©");
3029 t = object_desc_str(t, " to stealth");
3034 else if (have_flag(flgs, TR_SEARCH))
3036 /* Dump " to searching" */
3038 t = object_desc_str(t, "õº÷");
3040 t = object_desc_str(t, " to searching");
3045 else if (have_flag(flgs, TR_INFRA))
3047 /* Dump " to infravision" */
3049 t = object_desc_str(t, "ÀÖ³°Àþ»ëÎÏ");
3051 t = object_desc_str(t, " to infravision");
3055 /* Finish the display */
3056 t = object_desc_chr(t, p2);
3059 /* Hack -- Process Lanterns/Torches */
3060 if ((o_ptr->tval == TV_LITE) && (!(artifact_p(o_ptr) || (o_ptr->sval == SV_LITE_FEANOR))))
3062 /* Hack -- Turns of light for normal lites */
3064 t = object_desc_chr(t, '(');
3066 t = object_desc_str(t, " (with ");
3069 if (o_ptr->name2 == EGO_LITE_LONG) t = object_desc_num(t, o_ptr->xtra4 * 2);
3070 else t = object_desc_num(t, o_ptr->xtra4);
3072 t = object_desc_str(t, "¥¿¡¼¥ó¤Î¼÷Ì¿)");
3074 t = object_desc_str(t, " turns of light)");
3078 /* Indicate charging objects, but not rods. */
3079 if (o_ptr->timeout && (o_ptr->tval != TV_ROD))
3081 /* Hack -- Dump " (charging)" if relevant */
3083 t = object_desc_str(t, "(½¼Å¶Ãæ)");
3085 t = object_desc_str(t, " (charging)");
3091 /* No more details wanted */
3092 if (mode & OD_OMIT_INSCRIPTION) goto object_desc_done;
3095 /* Prepare real inscriptions in a buffer */
3098 /* Auto abbreviation inscribe */
3099 if ((abbrev_extra || abbrev_all) && (o_ptr->ident & IDENT_MENTAL))
3101 if (!o_ptr->inscription || !my_strchr(quark_str(o_ptr->inscription), '%'))
3112 get_ability_abbreviation(tmp_val2, o_ptr, kanji, all);
3116 /* Use the standard inscription if available */
3117 if (o_ptr->inscription)
3121 if (tmp_val2[0]) strcat(tmp_val2, ", ");
3123 /* Get inscription and convert {%} */
3124 get_inscription(buff, o_ptr);
3126 /* strcat with correct treating of kanji */
3127 my_strcat(tmp_val2, buff, sizeof(tmp_val2));
3131 /* No fake inscription yet */
3132 fake_insc_buf[0] = '\0';
3134 /* Use the game-generated "feeling" otherwise, if available */
3137 strcpy(fake_insc_buf, game_inscriptions[o_ptr->feeling]);
3140 /* Note "cursed" if the item is known to be cursed */
3141 else if (cursed_p(o_ptr) && (known || (o_ptr->ident & IDENT_SENSE)))
3144 strcpy(fake_insc_buf, "¼ö¤ï¤ì¤Æ¤¤¤ë");
3146 strcpy(fake_insc_buf, "cursed");
3150 /* Note "unidentified" if the item is unidentified */
3151 else if (((o_ptr->tval == TV_RING) || (o_ptr->tval == TV_AMULET)
3152 || (o_ptr->tval == TV_LITE) || (o_ptr->tval == TV_FIGURINE))
3154 && !(o_ptr->ident & IDENT_SENSE))
3157 strcpy(fake_insc_buf, "̤´ÕÄê");
3159 strcpy(fake_insc_buf, "unidentified");
3163 /* Mega-Hack -- note empty wands/staffs */
3164 else if (!known && (o_ptr->ident & IDENT_EMPTY))
3167 strcpy(fake_insc_buf, "¶õ");
3169 strcpy(fake_insc_buf, "empty");
3173 /* Note "tried" if the object has been tested unsuccessfully */
3174 else if (!aware && object_tried_p(o_ptr))
3177 strcpy(fake_insc_buf, "̤ȽÌÀ");
3179 strcpy(fake_insc_buf, "tried");
3183 /* Note the discount, if any */
3184 if (o_ptr->discount)
3186 /* Hidden by real inscription unless in a store */
3187 if (!tmp_val2[0] || (o_ptr->ident & IDENT_STORE))
3189 /* Append to other fake inscriptions if any */
3190 if (fake_insc_buf[0]) strcat(fake_insc_buf, ", ");
3192 (void)object_desc_num(fake_insc_buf, o_ptr->discount);
3194 strcat(fake_insc_buf, "%°ú¤");
3196 strcat(fake_insc_buf, "% off");
3202 /* Append the inscription, if any */
3203 if (fake_insc_buf[0] || tmp_val2[0])
3205 /* Append the inscription */
3206 t = object_desc_chr(t, ' ');
3207 t = object_desc_chr(t, c1);
3209 /* Append fake inscriptions */
3210 if (fake_insc_buf[0])
3212 t = object_desc_str(t, fake_insc_buf);
3215 /* Append a separater */
3216 if (fake_insc_buf[0] && tmp_val2[0])
3218 t = object_desc_chr(t, ',');
3219 t = object_desc_chr(t, ' ');
3222 /* Append real inscriptions */
3225 t = object_desc_str(t, tmp_val2);
3228 t = object_desc_chr(t, c2);
3232 my_strcpy(buf, tmp_val, MAX_NLEN);