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]);
498 * Create a name from random parts.
500 void get_table_name_aux(char *out_string)
504 get_rnd_line("aname_j.txt", 1, Syllable);
505 strcpy(out_string, Syllable);
506 get_rnd_line("aname_j.txt", 2, Syllable);
507 strcat(out_string, Syllable);
509 int testcounter = randint1(3) + 1;
511 strcpy(out_string, "");
513 if (randint1(3) == 2)
515 while (testcounter--)
516 strcat(out_string, syllables[randint0(MAX_SYLLABLES)]);
521 testcounter = randint1(2) + 1;
522 while (testcounter--)
524 (void)get_rnd_line("elvish.txt", 0, Syllable);
525 strcat(out_string, Syllable);
529 out_string[0] = toupper(out_string[1]);
531 out_string[16] = '\0';
537 * Create a name from random parts without quotes.
539 void get_table_name(char *out_string)
542 get_table_name_aux(buff);
545 sprintf(out_string, "¡Ø%s¡Ù", buff);
547 sprintf(out_string, "'%s'", buff);
553 * Prepare the "variable" part of the "k_info" array.
555 * The "color"/"metal"/"type" of an item is its "flavor".
556 * For the most part, flavors are assigned randomly each game.
558 * Initialize descriptions for the "colored" objects, including:
559 * Rings, Amulets, Staffs, Wands, Rods, Food, Potions, Scrolls.
561 * The first 4 entries for potions are fixed (Water, Apple Juice,
562 * Slime Mold Juice, Unused Potion).
564 * Scroll titles are always between 6 and 14 letters long. This is
565 * ensured because every title is composed of whole words, where every
566 * word is from 1 to 8 letters long (one or two syllables of 1 to 4
567 * letters each), and that no scroll is finished until it attempts to
568 * grow beyond 15 letters. The first time this can happen is when the
569 * current title has 6 letters and the new word has 8 letters, which
570 * would result in a 6 letter scroll title.
572 * Duplicate titles are avoided by requiring that no two scrolls share
573 * the same first four letters (not the most efficient method, and not
574 * the least efficient method, but it will always work).
576 * Hack -- make sure everything stays the same for each saved game
577 * This is accomplished by the use of a saved "random seed", as in
578 * "town_gen()". Since no other functions are called while the special
579 * seed is in effect, so this function is pretty "safe".
581 * Note that the "hacked seed" may provide an RNG with alternating parity!
583 void flavor_init(void)
592 /* Hack -- Use the "simple" RNG */
595 /* Hack -- Induce consistant flavors */
596 Rand_value = seed_flavor;
599 /* Efficiency -- Rods/Wands share initial array */
600 for (i = 0; i < MAX_METALS; i++)
602 rod_adj[i] = wand_adj[i];
603 rod_col[i] = wand_col[i];
607 /* Rings have "ring colors" */
608 for (i = 0; i < MAX_ROCKS; i++)
610 j = randint0(MAX_ROCKS);
611 temp_adj = ring_adj[i];
612 ring_adj[i] = ring_adj[j];
613 ring_adj[j] = temp_adj;
615 temp_col = ring_col[i];
616 ring_col[i] = ring_col[j];
617 ring_col[j] = temp_col;
620 /* Hack -- The One Ring */
622 ring_adj[SV_RING_POWER] = "¶â̵¹¤¤Î";
623 ring_adj[SV_RING_AHO] = "¶â͹¤¤Î";
625 ring_adj[SV_RING_POWER] = "Plain Gold";
626 ring_adj[SV_RING_AHO] = "Plain Goldarn";
631 ring_col[SV_RING_POWER] = TERM_YELLOW;
632 ring_col[SV_RING_AHO] = TERM_YELLOW;
635 /* Amulets have "amulet colors" */
636 for (i = 0; i < MAX_AMULETS; i++)
638 j = randint0(MAX_AMULETS);
639 temp_adj = amulet_adj[i];
640 amulet_adj[i] = amulet_adj[j];
641 amulet_adj[j] = temp_adj;
643 temp_col = amulet_col[i];
644 amulet_col[i] = amulet_col[j];
645 amulet_col[j] = temp_col;
649 for (i = 0; i < MAX_WOODS; i++)
651 j = randint0(MAX_WOODS);
652 temp_adj = staff_adj[i];
653 staff_adj[i] = staff_adj[j];
654 staff_adj[j] = temp_adj;
656 temp_col = staff_col[i];
657 staff_col[i] = staff_col[j];
658 staff_col[j] = temp_col;
662 for (i = 0; i < MAX_METALS; i++)
664 j = randint0(MAX_METALS);
665 temp_adj = wand_adj[i];
666 wand_adj[i] = wand_adj[j];
667 wand_adj[j] = temp_adj;
669 temp_col = wand_col[i];
670 wand_col[i] = wand_col[j];
671 wand_col[j] = temp_col;
675 for (i = 0; i < MAX_METALS; i++)
677 j = randint0(MAX_METALS);
678 temp_adj = rod_adj[i];
679 rod_adj[i] = rod_adj[j];
680 rod_adj[j] = temp_adj;
682 temp_col = rod_col[i];
683 rod_col[i] = rod_col[j];
684 rod_col[j] = temp_col;
687 /* Foods (Mushrooms) */
688 for (i = 0; i < MAX_SHROOM; i++)
690 j = randint0(MAX_SHROOM);
691 temp_adj = food_adj[i];
692 food_adj[i] = food_adj[j];
693 food_adj[j] = temp_adj;
695 temp_col = food_col[i];
696 food_col[i] = food_col[j];
697 food_col[j] = temp_col;
701 for (i = 4; i < MAX_COLORS; i++)
703 j = randint0(MAX_COLORS - 4) + 4;
704 temp_adj = potion_adj[i];
705 potion_adj[i] = potion_adj[j];
706 potion_adj[j] = temp_adj;
708 temp_col = potion_col[i];
709 potion_col[i] = potion_col[j];
710 potion_col[j] = temp_col;
713 /* Scrolls (random titles, always white) */
714 for (i = 0; i < MAX_TITLES; i++)
716 /* Get a new title */
723 /* Start a new title */
726 /* Collect words until done */
733 /* Start a new word */
736 /* Choose one or two syllables */
737 s = ((randint0(100) < 30) ? 1 : 2);
739 /* Add a one or two syllable word */
740 for (q = 0; q < s; q++)
742 /* Add the syllable */
743 strcat(tmp, syllables[randint0(MAX_SYLLABLES)]);
746 /* Stop before getting too long */
747 if (strlen(buf) + 1 + strlen(tmp) > 15) break;
757 strcpy(scroll_adj[i], buf+1);
762 /* Check for "duplicate" scroll titles */
763 for (j = 0; j < i; j++)
765 cptr hack1 = scroll_adj[j];
766 cptr hack2 = scroll_adj[i];
768 /* Compare first four characters */
769 if (*hack1++ != *hack2++) continue;
770 if (*hack1++ != *hack2++) continue;
771 if (*hack1++ != *hack2++) continue;
772 if (*hack1++ != *hack2++) continue;
781 /* Break when done */
785 /* All scrolls are white */
786 scroll_col[i] = TERM_WHITE;
790 /* Hack -- Use the "complex" RNG */
793 /* Analyze every object */
794 for (i = 1; i < max_k_idx; i++)
796 object_kind *k_ptr = &k_info[i];
798 /* Skip "empty" objects */
799 if (!k_ptr->name) continue;
801 /* Extract "flavor" (if any) */
802 k_ptr->flavor = object_flavor(i);
804 /* No flavor yields aware */
805 if (!k_ptr->flavor) k_ptr->aware = TRUE;
807 /* Check for "easily known" */
808 k_ptr->easy_know = object_easy_know(i);
814 * Print a char "c" into a string "t", as if by sprintf(t, "%c", c),
815 * and return a pointer to the terminator (t + 1).
817 static char *object_desc_chr(char *t, char c)
831 * Print a string "s" into a string "t", as if by strcpy(t, s),
832 * and return a pointer to the terminator.
834 static char *object_desc_str(char *t, cptr s)
836 /* Copy the string */
837 while (*s) *t++ = *s++;
849 * Print an unsigned number "n" into a string "t", as if by
850 * sprintf(t, "%u", n), and return a pointer to the terminator.
852 static char *object_desc_num(char *t, uint n)
856 /* Find "size" of "n" */
857 for (p = 1; n >= p * 10; p = p * 10) /* loop */;
859 /* Dump each digit */
865 /* Remove the digit */
868 /* Process next digit */
884 * ÆüËܸì¤Î¸Ä¿ôɽ¼¨¥ë¡¼¥Á¥ó
885 *¡Êcmd1.c ¤ÇήÍѤ¹¤ë¤¿¤á¤Ë object_desc_japanese ¤«¤é°ÜÆ°¤·¤¿¡£¡Ë
888 char *object_desc_kosuu(char *t, object_type *o_ptr)
890 t = object_desc_num(t, o_ptr->number);
902 t = object_desc_str(t, "ËÜ");
907 t = object_desc_str(t, "´¬");
912 t = object_desc_str(t, "Éþ");
916 case TV_SORCERY_BOOK:
922 case TV_ENCHANT_BOOK:
924 case TV_CRUSADE_BOOK:
926 case TV_HISSATSU_BOOK:
928 t = object_desc_str(t, "ºý");
936 t = object_desc_str(t, "Ãå");
943 t = object_desc_str(t, "¿¶");
948 t = object_desc_str(t, "");
953 t = object_desc_str(t, "Ëç");
956 /* ¿©¤Ù¤â¤Î by ita */
959 if(o_ptr->sval == SV_FOOD_JERKY)
961 t = object_desc_str(t, "ÀÚ¤ì");
967 if (o_ptr->number < 10)
969 t = object_desc_str(t, "¤Ä");
973 t = object_desc_str(t, "¸Ä");
983 * Print an signed number "v" into a string "t", as if by
984 * sprintf(t, "%+d", n), and return a pointer to the terminator.
985 * Note that we always print a sign, either "+" or "-".
987 static char *object_desc_int(char *t, sint v)
994 /* Take the absolute value */
997 /* Use a "minus" sign */
1001 /* Positive (or zero) */
1004 /* Use the actual number */
1007 /* Use a "plus" sign */
1011 /* Find "size" of "n" */
1012 for (p = 1; n >= p * 10; p = p * 10) /* loop */;
1014 /* Dump each digit */
1017 /* Dump the digit */
1020 /* Remove the digit */
1023 /* Process next digit */
1036 * Structs and tables for Auto Inscription for flags
1039 typedef struct flag_insc_table
1050 static flag_insc_table flag_insc_plus[] =
1052 { "¹¶", "At", TR_BLOWS, -1 },
1053 { "®", "Sp", TR_SPEED, -1 },
1054 { "ÏÓ", "St", TR_STR, -1 },
1055 { "ÃÎ", "In", TR_INT, -1 },
1056 { "¸", "Wi", TR_WIS, -1 },
1057 { "´ï", "Dx", TR_DEX, -1 },
1058 { "ÂÑ", "Cn", TR_CON, -1 },
1059 { "̥", "Ch", TR_CHR, -1 },
1060 { "ƻ", "Md", TR_MAGIC_MASTERY, -1 },
1061 { "±£", "Sl", TR_STEALTH, -1 },
1062 { "õ", "Sr", TR_SEARCH, -1 },
1063 { "ÀÖ", "If", TR_INFRA, -1 },
1064 { "·¡", "Dg", TR_TUNNEL, -1 },
1065 { NULL, NULL, 0, -1 }
1068 static flag_insc_table flag_insc_immune[] =
1070 { "»À", "Ac", TR_IM_ACID, -1 },
1071 { "ÅÅ", "El", TR_IM_ELEC, -1 },
1072 { "²Ð", "Fi", TR_IM_FIRE, -1 },
1073 { "Îä", "Co", TR_IM_COLD, -1 },
1074 { NULL, NULL, 0, -1 }
1077 static flag_insc_table flag_insc_resistance[] =
1079 { "»À", "Ac", TR_RES_ACID, TR_IM_ACID },
1080 { "ÅÅ", "El", TR_RES_ELEC, TR_IM_ELEC },
1081 { "²Ð", "Fi", TR_RES_FIRE, TR_IM_FIRE },
1082 { "Îä", "Co", TR_RES_COLD, TR_IM_COLD },
1083 { "ÆÇ", "Po", TR_RES_POIS, -1 },
1084 { "Á®", "Li", TR_RES_LITE, -1 },
1085 { "°Å", "Dk", TR_RES_DARK, -1 },
1086 { "ÇË", "Sh", TR_RES_SHARDS, -1 },
1087 { "ÌÕ", "Bl", TR_RES_BLIND, -1 },
1088 { "Íð", "Cf", TR_RES_CONF, -1 },
1089 { "¹ì", "So", TR_RES_SOUND, -1 },
1090 { "¹ö", "Nt", TR_RES_NETHER, -1 },
1091 { "°ø", "Nx", TR_RES_NEXUS, -1 },
1092 { "ÆÙ", "Ca", TR_RES_CHAOS, -1 },
1093 { "Îô", "Di", TR_RES_DISEN, -1 },
1094 { "¶²", "Fe", TR_RES_FEAR, -1 },
1095 { NULL, NULL, 0, -1 }
1098 static flag_insc_table flag_insc_misc[] =
1100 { "ËâÎÏ", "Ma", TR_DEC_MANA, -1 },
1101 { "Åê", "Th", TR_THROW, -1 },
1102 { "ȿ", "Rf", TR_REFLECT, -1 },
1103 { "Ëã", "Fa", TR_FREE_ACT, -1 },
1104 { "ȑ", "Si", TR_SEE_INVIS, -1 },
1105 { "·Ð", "Hl", TR_HOLD_LIFE, -1 },
1106 { "ÃÙ", "Sd", TR_SLOW_DIGEST, -1 },
1107 { "³è", "Rg", TR_REGEN, -1 },
1108 { "Éâ", "Lv", TR_LEVITATION, -1 },
1109 { "ÌÀ", "Lu", TR_LITE, -1 },
1110 { "·Ù", "Wr", TR_WARNING, -1 },
1111 { "ÇÜ", "Xm", TR_XTRA_MIGHT, -1 },
1112 { "¼Í", "Xs", TR_XTRA_SHOTS, -1 },
1113 { "½Ö", "Te", TR_TELEPORT, -1 },
1114 { "ÅÜ", "Ag", TR_AGGRAVATE, -1 },
1115 { "½Ë", "Bs", TR_BLESSED, -1 },
1116 { "´÷", "Ty", TR_TY_CURSE, -1 },
1117 { NULL, NULL, 0, -1 }
1120 static flag_insc_table flag_insc_aura[] =
1122 { "±ê", "F", TR_SH_FIRE, -1 },
1123 { "ÅÅ", "E", TR_SH_ELEC, -1 },
1124 { "Îä", "C", TR_SH_COLD, -1 },
1125 { "Ëâ", "M", TR_NO_MAGIC, -1 },
1126 { "½Ö", "T", TR_NO_TELE, -1 },
1127 { NULL, NULL, 0, -1 }
1130 static flag_insc_table flag_insc_brand[] =
1132 { "»À", "A", TR_BRAND_ACID, -1 },
1133 { "ÅÅ", "E", TR_BRAND_ELEC, -1 },
1134 { "¾Æ", "F", TR_BRAND_FIRE, -1 },
1135 { "Åà", "Co", TR_BRAND_COLD, -1 },
1136 { "ÆÇ", "P", TR_BRAND_POIS, -1 },
1137 { "ÆÙ", "Ca", TR_CHAOTIC, -1 },
1138 { "µÛ", "V", TR_VAMPIRIC, -1 },
1139 { "¿Ì", "Q", TR_IMPACT, -1 },
1140 { "ÀÚ", "S", TR_VORPAL, -1 },
1141 { "Íý", "M", TR_FORCE_WEAPON, -1 },
1142 { NULL, NULL, 0, -1 }
1145 static flag_insc_table flag_insc_kill[] =
1147 { "¼Ù", "*", TR_KILL_EVIL, -1 },
1148 { "¿Í", "p", TR_KILL_HUMAN, -1 },
1149 { "ζ", "D", TR_KILL_DRAGON, -1 },
1150 { "¥ª", "o", TR_KILL_ORC, -1 },
1151 { "¥È", "T", TR_KILL_TROLL, -1 },
1152 { "µð", "P", TR_KILL_GIANT, -1 },
1153 { "¥Ç", "U", TR_KILL_DEMON, -1 },
1154 { "Ȉ", "L", TR_KILL_UNDEAD, -1 },
1155 { "ư", "Z", TR_KILL_ANIMAL, -1 },
1156 { NULL, NULL, 0, -1 }
1159 static flag_insc_table flag_insc_slay[] =
1161 { "¼Ù", "*", TR_SLAY_EVIL, TR_KILL_EVIL },
1162 { "¿Í", "p", TR_SLAY_HUMAN, TR_KILL_HUMAN },
1163 { "ε", "D", TR_SLAY_DRAGON, TR_KILL_DRAGON },
1164 { "¥ª", "o", TR_SLAY_ORC, TR_KILL_ORC },
1165 { "¥È", "T", TR_SLAY_TROLL, TR_KILL_TROLL },
1166 { "µð", "P", TR_SLAY_GIANT, TR_KILL_GIANT },
1167 { "¥Ç", "U", TR_SLAY_DEMON, TR_KILL_DEMON },
1168 { "Ȉ", "L", TR_SLAY_UNDEAD, TR_KILL_UNDEAD },
1169 { "ư", "Z", TR_SLAY_ANIMAL, TR_KILL_ANIMAL },
1170 { NULL, NULL, 0, -1 }
1173 static flag_insc_table flag_insc_esp1[] =
1175 { "´¶", "Tele", TR_TELEPATHY, -1 },
1176 { "¼Ù", "Evil", TR_ESP_EVIL, -1 },
1177 { "Á±", "Good", TR_ESP_GOOD, -1 },
1178 { "̵", "Nolv", TR_ESP_NONLIVING, -1 },
1179 { "¸Ä", "Uniq", TR_ESP_UNIQUE, -1 },
1180 { NULL, NULL, 0, -1 }
1183 static flag_insc_table flag_insc_esp2[] =
1185 { "¿Í", "p", TR_ESP_HUMAN, -1 },
1186 { "ε", "D", TR_ESP_DRAGON, -1 },
1187 { "¥ª", "o", TR_ESP_ORC, -1 },
1188 { "¥È", "T", TR_ESP_TROLL, -1 },
1189 { "µð", "P", TR_ESP_GIANT, -1 },
1190 { "¥Ç", "U", TR_ESP_DEMON, -1 },
1191 { "Ȉ", "L", TR_ESP_UNDEAD, -1 },
1192 { "ư", "Z", TR_ESP_ANIMAL, -1 },
1193 { NULL, NULL, 0, -1 }
1196 static flag_insc_table flag_insc_sust[] =
1198 { "ÏÓ", "St", TR_SUST_STR, -1 },
1199 { "ÃÎ", "In", TR_SUST_INT, -1 },
1200 { "¸", "Wi", TR_SUST_WIS, -1 },
1201 { "´ï", "Dx", TR_SUST_DEX, -1 },
1202 { "ÂÑ", "Cn", TR_SUST_CON, -1 },
1203 { "̥", "Ch", TR_SUST_CHR, -1 },
1204 { NULL, NULL, 0, -1 }
1208 static flag_insc_table flag_insc_plus[] =
1210 { "At", TR_BLOWS, -1 },
1211 { "Sp", TR_SPEED, -1 },
1212 { "St", TR_STR, -1 },
1213 { "In", TR_INT, -1 },
1214 { "Wi", TR_WIS, -1 },
1215 { "Dx", TR_DEX, -1 },
1216 { "Cn", TR_CON, -1 },
1217 { "Ch", TR_CHR, -1 },
1218 { "Md", TR_MAGIC_MASTERY, -1 },
1219 { "Sl", TR_STEALTH, -1 },
1220 { "Sr", TR_SEARCH, -1 },
1221 { "If", TR_INFRA, -1 },
1222 { "Dg", TR_TUNNEL, -1 },
1226 static flag_insc_table flag_insc_immune[] =
1228 { "Ac", TR_IM_ACID, -1 },
1229 { "El", TR_IM_ELEC, -1 },
1230 { "Fi", TR_IM_FIRE, -1 },
1231 { "Co", TR_IM_COLD, -1 },
1235 static flag_insc_table flag_insc_resistance[] =
1237 { "Ac", TR_RES_ACID, TR_IM_ACID },
1238 { "El", TR_RES_ELEC, TR_IM_ELEC },
1239 { "Fi", TR_RES_FIRE, TR_IM_FIRE },
1240 { "Co", TR_RES_COLD, TR_IM_COLD },
1241 { "Po", TR_RES_POIS, -1 },
1242 { "Li", TR_RES_LITE, -1 },
1243 { "Dk", TR_RES_DARK, -1 },
1244 { "Sh", TR_RES_SHARDS, -1 },
1245 { "Bl", TR_RES_BLIND, -1 },
1246 { "Cf", TR_RES_CONF, -1 },
1247 { "So", TR_RES_SOUND, -1 },
1248 { "Nt", TR_RES_NETHER, -1 },
1249 { "Nx", TR_RES_NEXUS, -1 },
1250 { "Ca", TR_RES_CHAOS, -1 },
1251 { "Di", TR_RES_DISEN, -1 },
1252 { "Fe", TR_RES_FEAR, -1 },
1256 static flag_insc_table flag_insc_misc[] =
1258 { "Ma", TR_DEC_MANA, -1 },
1259 { "Th", TR_THROW, -1 },
1260 { "Rf", TR_REFLECT, -1 },
1261 { "Fa", TR_FREE_ACT, -1 },
1262 { "Si", TR_SEE_INVIS, -1 },
1263 { "Hl", TR_HOLD_LIFE, -1 },
1264 { "Sd", TR_SLOW_DIGEST, -1 },
1265 { "Rg", TR_REGEN, -1 },
1266 { "Lv", TR_LEVITATION, -1 },
1267 { "Lu", TR_LITE, -1 },
1268 { "Wr", TR_WARNING, -1 },
1269 { "Xm", TR_XTRA_MIGHT, -1 },
1270 { "Xs", TR_XTRA_SHOTS, -1 },
1271 { "Te", TR_TELEPORT, -1 },
1272 { "Ag", TR_AGGRAVATE, -1 },
1273 { "Bs", TR_BLESSED, -1 },
1274 { "Ty", TR_TY_CURSE, -1 },
1278 static flag_insc_table flag_insc_aura[] =
1280 { "F", TR_SH_FIRE, -1 },
1281 { "E", TR_SH_ELEC, -1 },
1282 { "C", TR_SH_COLD, -1 },
1283 { "M", TR_NO_MAGIC, -1 },
1284 { "T", TR_NO_TELE, -1 },
1288 static flag_insc_table flag_insc_brand[] =
1290 { "A", TR_BRAND_ACID, -1 },
1291 { "E", TR_BRAND_ELEC, -1 },
1292 { "F", TR_BRAND_FIRE, -1 },
1293 { "Co", TR_BRAND_COLD, -1 },
1294 { "P", TR_BRAND_POIS, -1 },
1295 { "Ca", TR_CHAOTIC, -1 },
1296 { "V", TR_VAMPIRIC, -1 },
1297 { "Q", TR_IMPACT, -1 },
1298 { "S", TR_VORPAL, -1 },
1299 { "M", TR_FORCE_WEAPON, -1 },
1303 static flag_insc_table flag_insc_kill[] =
1305 { "*", TR_KILL_EVIL, -1 },
1306 { "p", TR_KILL_HUMAN, -1 },
1307 { "D", TR_KILL_DRAGON, -1 },
1308 { "o", TR_KILL_ORC, -1 },
1309 { "T", TR_KILL_TROLL, -1 },
1310 { "P", TR_KILL_GIANT, -1 },
1311 { "U", TR_KILL_DEMON, -1 },
1312 { "L", TR_KILL_UNDEAD, -1 },
1313 { "Z", TR_KILL_ANIMAL, -1 },
1317 static flag_insc_table flag_insc_slay[] =
1319 { "*", TR_SLAY_EVIL, TR_KILL_EVIL },
1320 { "p", TR_SLAY_HUMAN, TR_KILL_HUMAN },
1321 { "D", TR_SLAY_DRAGON, TR_KILL_DRAGON },
1322 { "o", TR_SLAY_ORC, TR_KILL_ORC },
1323 { "T", TR_SLAY_TROLL, TR_KILL_TROLL },
1324 { "P", TR_SLAY_GIANT, TR_KILL_GIANT },
1325 { "U", TR_SLAY_DEMON, TR_KILL_DEMON },
1326 { "L", TR_SLAY_UNDEAD, TR_KILL_UNDEAD },
1327 { "Z", TR_SLAY_ANIMAL, TR_KILL_ANIMAL },
1331 static flag_insc_table flag_insc_esp1[] =
1333 { "Tele", TR_TELEPATHY, -1 },
1334 { "Evil", TR_ESP_EVIL, -1 },
1335 { "Good", TR_ESP_GOOD, -1 },
1336 { "Nolv", TR_ESP_NONLIVING, -1 },
1337 { "Uniq", TR_ESP_UNIQUE, -1 },
1341 static flag_insc_table flag_insc_esp2[] =
1343 { "p", TR_ESP_HUMAN, -1 },
1344 { "D", TR_ESP_DRAGON, -1 },
1345 { "o", TR_ESP_ORC, -1 },
1346 { "T", TR_ESP_TROLL, -1 },
1347 { "P", TR_ESP_GIANT, -1 },
1348 { "U", TR_ESP_DEMON, -1 },
1349 { "L", TR_ESP_UNDEAD, -1 },
1350 { "Z", TR_ESP_ANIMAL, -1 },
1354 static flag_insc_table flag_insc_sust[] =
1356 { "St", TR_SUST_STR, -1 },
1357 { "In", TR_SUST_INT, -1 },
1358 { "Wi", TR_SUST_WIS, -1 },
1359 { "Dx", TR_SUST_DEX, -1 },
1360 { "Cn", TR_SUST_CON, -1 },
1361 { "Ch", TR_SUST_CHR, -1 },
1366 /* Simple macro for get_inscription() */
1367 #define ADD_INSC(STR) (void)(ptr = object_desc_str(ptr, (STR)))
1370 * Helper function for get_inscription()
1372 static char *inscribe_flags_aux(flag_insc_table *fi_ptr, u32b flgs[TR_FLAG_SIZE], bool kanji, char *ptr)
1378 while (fi_ptr->english)
1380 if (have_flag(flgs, fi_ptr->flag) &&
1381 (fi_ptr->except_flag == -1 || !have_flag(flgs, fi_ptr->except_flag)))
1383 ADD_INSC(kanji ? fi_ptr->japanese : fi_ptr->english);
1385 ADD_INSC(fi_ptr->english);
1395 * Special variation of have_flag for auto-inscription
1397 static bool have_flag_of(flag_insc_table *fi_ptr, u32b flgs[TR_FLAG_SIZE])
1399 while (fi_ptr->english)
1401 if (have_flag(flgs, fi_ptr->flag) &&
1402 (fi_ptr->except_flag == -1 || !have_flag(flgs, fi_ptr->except_flag)))
1410 static char *get_ability_abbreviation(char *ptr, object_type *o_ptr, bool kanji, bool all)
1412 char *prev_ptr = ptr;
1413 u32b flgs[TR_FLAG_SIZE];
1415 /* Extract the flags */
1416 object_flags(o_ptr, flgs);
1419 /* Remove obvious flags */
1422 object_kind *k_ptr = &k_info[o_ptr->k_idx];
1426 for (j = 0; j < TR_FLAG_SIZE; j++)
1427 flgs[j] &= ~k_ptr->flags[j];
1429 if (object_is_fixed_artifact(o_ptr))
1431 artifact_type *a_ptr = &a_info[o_ptr->name1];
1433 for (j = 0; j < TR_FLAG_SIZE; j++)
1434 flgs[j] &= ~a_ptr->flags[j];
1437 if (object_is_ego(o_ptr))
1439 ego_item_type *e_ptr = &e_info[o_ptr->name2];
1441 for (j = 0; j < TR_FLAG_SIZE; j++)
1442 flgs[j] &= ~e_ptr->flags[j];
1448 if (have_flag_of(flag_insc_plus, flgs))
1453 ptr = inscribe_flags_aux(flag_insc_plus, flgs, kanji, ptr);
1456 if (have_flag_of(flag_insc_immune, flgs))
1458 if (!kanji && ptr != prev_ptr)
1465 ptr = inscribe_flags_aux(flag_insc_immune, flgs, kanji, ptr);
1468 if (have_flag_of(flag_insc_resistance, flgs))
1472 else if (ptr != prev_ptr)
1478 ptr = inscribe_flags_aux(flag_insc_resistance, flgs, kanji, ptr);
1481 if (have_flag_of(flag_insc_misc, flgs))
1483 if (ptr != prev_ptr)
1489 ptr = inscribe_flags_aux(flag_insc_misc, flgs, kanji, ptr);
1492 if (have_flag_of(flag_insc_aura, flgs))
1496 ptr = inscribe_flags_aux(flag_insc_aura, flgs, kanji, ptr);
1499 if (have_flag_of(flag_insc_brand, flgs))
1501 ptr = inscribe_flags_aux(flag_insc_brand, flgs, kanji, ptr);
1504 if (have_flag_of(flag_insc_kill, flgs))
1506 ptr = inscribe_flags_aux(flag_insc_kill, flgs, kanji, ptr);
1509 if (have_flag_of(flag_insc_slay, flgs))
1511 ptr = inscribe_flags_aux(flag_insc_slay, flgs, kanji, ptr);
1516 if (have_flag_of(flag_insc_esp1, flgs) ||
1517 have_flag_of(flag_insc_esp2, flgs))
1519 ptr = inscribe_flags_aux(flag_insc_esp1, flgs, kanji, ptr);
1520 ptr = inscribe_flags_aux(flag_insc_esp2, flgs, kanji, ptr);
1524 if (have_flag_of(flag_insc_esp1, flgs))
1526 ptr = inscribe_flags_aux(flag_insc_esp1, flgs, kanji, ptr);
1527 if (have_flag_of(flag_insc_esp2, flgs))
1529 ptr = inscribe_flags_aux(flag_insc_esp2, flgs, kanji, ptr);
1533 if (have_flag_of(flag_insc_sust, flgs))
1537 ptr = inscribe_flags_aux(flag_insc_sust, flgs, kanji, ptr);
1546 * Get object inscription with auto inscription of object flags.
1548 static void get_inscription(char *buff, object_type *o_ptr)
1550 cptr insc = quark_str(o_ptr->inscription);
1553 /* Not fully identified */
1554 if (!(o_ptr->ident & IDENT_MENTAL))
1556 /* Copy until end of line or '#' */
1559 if (*insc == '#') break;
1561 if (iskanji(*insc)) *buff++ = *insc++;
1571 for (; *insc; insc++)
1573 /* Ignore fake artifact inscription */
1574 if (*insc == '#') break;
1576 /* {%} will be automatically converted */
1577 else if ('%' == *insc)
1583 /* check for too long inscription */
1584 if (ptr >= buff + MAX_NLEN) continue;
1597 if ('a' == insc[1] && 'l' == insc[2] && 'l' == insc[3])
1607 ptr = get_ability_abbreviation(ptr, o_ptr, kanji, all);
1622 * Creates a description of the item "o_ptr", and stores it in "out_val".
1624 * One can choose the "verbosity" of the description, including whether
1625 * or not the "number" of items should be described, and how much detail
1626 * should be used when describing the item.
1628 * The given "buf" must be MAX_NLEN chars long to hold the longest possible
1629 * description, which can get pretty long, including incriptions, such as:
1630 * "no more Maces of Disruption (Defender) (+10,+10) [+5] (+3 to stealth)".
1631 * Note that the inscription will be clipped to keep the total description
1632 * under MAX_NLEN-1 chars (plus a terminator).
1634 * Note the use of "object_desc_num()" and "object_desc_int()" as hyper-efficient,
1635 * portable, versions of some common "sprintf()" commands.
1637 * Note that all ego-items (when known) append an "Ego-Item Name", unless
1638 * the item is also an artifact, which should NEVER happen.
1640 * Note that all artifacts (when known) append an "Artifact Name", so we
1641 * have special processing for "Specials" (artifact Lites, Rings, Amulets).
1642 * The "Specials" never use "modifiers" if they are "known", since they
1643 * have special "descriptions", such as "The Necklace of the Dwarves".
1645 * Special Lite's use the "k_info" base-name (Phial, Star, or Arkenstone),
1646 * plus the artifact name, just like any other artifact, if known.
1648 * Special Ring's and Amulet's, if not "aware", use the same code as normal
1649 * rings and amulets, and if "aware", use the "k_info" base-name (Ring or
1650 * Amulet or Necklace). They will NEVER "append" the "k_info" name. But,
1651 * they will append the artifact name, just like any artifact, if known.
1653 * Hack -- Display "The One Ring" as "a Plain Gold Ring" until aware.
1656 * OD_NAME_ONLY : The Cloak of Death
1657 * OD_NAME_AND_ENCHANT : The Cloak of Death [1,+3]
1658 * OD_OMIT_INSCRIPTION : The Cloak of Death [1,+3] (+2 to Stealth)
1659 * 0 : The Cloak of Death [1,+3] (+2 to Stealth) {nifty}
1661 * OD_OMIT_PREFIX : Forbidden numeric prefix
1662 * OD_NO_PLURAL : Forbidden use of plural
1663 * OD_STORE : Assume to be aware and known
1664 * OD_NO_FLAVOR : Allow to hidden flavor
1666 void object_desc(char *buf, object_type *o_ptr, u32b mode)
1668 /* Extract object kind name */
1669 cptr kindname = k_name + k_info[o_ptr->k_idx].name;
1671 /* Extract default "base" string */
1672 cptr basenm = kindname;
1674 /* Assume no "modifier" string */
1677 /* Hack -- Extract the sub-type "indexx" */
1678 int indexx = o_ptr->sval;
1686 bool show_weapon = FALSE;
1687 bool show_armour = FALSE;
1692 char p1 = '(', p2 = ')';
1693 char b1 = '[', b2 = ']';
1694 char c1 = '{', c2 = '}';
1696 char tmp_val[MAX_NLEN+160];
1697 char tmp_val2[MAX_NLEN+10];
1698 char fake_insc_buf[30];
1700 u32b flgs[TR_FLAG_SIZE];
1702 object_type *bow_ptr;
1704 object_kind *k_ptr = &k_info[o_ptr->k_idx];
1706 /* Extract some flags */
1707 object_flags(o_ptr, flgs);
1709 /* See if the object is "aware" */
1710 if (object_is_aware(o_ptr)) aware = TRUE;
1712 /* See if the object is "known" */
1713 if (object_is_known(o_ptr)) known = TRUE;
1715 /* Allow flavors to be hidden when aware */
1716 if (aware && ((mode & OD_NO_FLAVOR) || plain_descriptions)) flavor = FALSE;
1718 /* Object is in the inventory of a store or spoiler */
1719 if ((mode & OD_STORE) || (o_ptr->ident & IDENT_STORE))
1721 /* Don't show flavors */
1724 /* Pretend known and aware */
1729 /* Analyze the object */
1730 switch (o_ptr->tval)
1732 /* Some objects are easy to describe */
1746 monster_race *r_ptr = &r_info[o_ptr->pval];
1755 modstr = " (empty)";
1761 sprintf(tmp_val2, " (%s)",r_name + r_ptr->name);
1764 cptr t = r_name + r_ptr->name;
1766 if (!(r_ptr->flags1 & RF1_UNIQUE))
1768 sprintf(tmp_val2, " (%s%s)", (is_a_vowel(*t) ? "an " : "a "), t);
1774 sprintf(tmp_val2, "(%s)", t);
1784 /* Figurines/Statues */
1788 monster_race *r_ptr = &r_info[o_ptr->pval];
1791 modstr = r_name + r_ptr->name;
1793 cptr t = r_name + r_ptr->name;
1795 if (!(r_ptr->flags1 & RF1_UNIQUE))
1797 sprintf(tmp_val2, "%s%s", (is_a_vowel(*t) ? "an " : "a "), t);
1814 monster_race *r_ptr = &r_info[o_ptr->pval];
1816 modstr = r_name + r_ptr->name;
1821 if (r_ptr->flags1 & RF1_UNIQUE)
1822 basenm = "& % of #";
1830 /* Missiles/ Bows/ Weapons */
1861 /* Lites (including a few "Specials") */
1867 /* Amulets (including a few "Specials") */
1870 /* Known artifacts */
1873 if (object_is_fixed_artifact(o_ptr)) break;
1874 if (k_ptr->gen_flags & TRG_INSTA_ART) break;
1877 /* Color the object */
1878 modstr = amulet_adj[indexx];
1881 if (!flavor) basenm = "%¤Î¥¢¥ß¥å¥ì¥Ã¥È";
1882 else if (aware) basenm = "%¤Î#¥¢¥ß¥å¥ì¥Ã¥È";
1883 else basenm = "#¥¢¥ß¥å¥ì¥Ã¥È";
1885 if (!flavor) basenm = "& Amulet~ of %";
1886 else if (aware) basenm = "& # Amulet~ of %";
1887 else basenm = "& # Amulet~";
1893 /* Rings (including a few "Specials") */
1896 /* Known artifacts */
1899 if (object_is_fixed_artifact(o_ptr)) break;
1900 if (k_ptr->gen_flags & TRG_INSTA_ART) break;
1903 /* Color the object */
1904 modstr = ring_adj[indexx];
1907 if (!flavor) basenm = "%¤Î»ØÎØ";
1908 else if (aware) basenm = "%¤Î#»ØÎØ";
1909 else basenm = "#»ØÎØ";
1911 if (!flavor) basenm = "& Ring~ of %";
1912 else if (aware) basenm = "& # Ring~ of %";
1913 else basenm = "& # Ring~";
1916 if (!k_ptr->to_h && !k_ptr->to_d && (o_ptr->to_h || o_ptr->to_d)) show_weapon = TRUE;
1928 /* Color the object */
1929 modstr = staff_adj[indexx];
1932 if (!flavor) basenm = "%¤Î¾ó";
1933 else if (aware) basenm = "%¤Î#¾ó";
1934 else basenm = "#¾ó";
1936 if (!flavor) basenm = "& Staff~ of %";
1937 else if (aware) basenm = "& # Staff~ of %";
1938 else basenm = "& # Staff~";
1946 /* Color the object */
1947 modstr = wand_adj[indexx];
1950 if (!flavor) basenm = "%¤ÎËâË¡ËÀ";
1951 else if (aware) basenm = "%¤Î#ËâË¡ËÀ";
1952 else basenm = "#ËâË¡ËÀ";
1954 if (!flavor) basenm = "& Wand~ of %";
1955 else if (aware) basenm = "& # Wand~ of %";
1956 else basenm = "& # Wand~";
1964 /* Color the object */
1965 modstr = rod_adj[indexx];
1968 if (!flavor) basenm = "%¤Î¥í¥Ã¥É";
1969 else if (aware) basenm = "%¤Î#¥í¥Ã¥É";
1970 else basenm = "#¥í¥Ã¥É";
1972 if (!flavor) basenm = "& Rod~ of %";
1973 else if (aware) basenm = "& # Rod~ of %";
1974 else basenm = "& # Rod~";
1982 /* Color the object */
1983 modstr = scroll_adj[indexx];
1986 if (!flavor) basenm = "%¤Î´¬Êª";
1987 else if (aware) basenm = "¡Ö#¡×¤È½ñ¤«¤ì¤¿%¤Î´¬Êª";
1988 else basenm = "¡Ö#¡×¤È½ñ¤«¤ì¤¿´¬Êª";
1990 if (!flavor) basenm = "& Scroll~ of %";
1991 else if (aware) basenm = "& Scroll~ titled \"#\" of %";
1992 else basenm = "& Scroll~ titled \"#\"";
2000 /* Color the object */
2001 modstr = potion_adj[indexx];
2004 if (!flavor) basenm = "%¤ÎÌô";
2005 else if (aware) basenm = "%¤Î#Ìô";
2006 else basenm = "#Ìô";
2008 if (!flavor) basenm = "& Potion~ of %";
2009 else if (aware) basenm = "& # Potion~ of %";
2010 else basenm = "& # Potion~";
2018 /* Ordinary food is "boring" */
2019 if (o_ptr->sval >= SV_FOOD_MIN_FOOD) break;
2021 /* Color the object */
2022 modstr = food_adj[indexx];
2025 if (!flavor) basenm = "%¤Î¥¥Î¥³";
2026 else if (aware) basenm = "%¤Î#¥¥Î¥³";
2027 else basenm = "#¥¥Î¥³";
2029 if (!flavor) basenm = "& Mushroom~ of %";
2030 else if (aware) basenm = "& # Mushroom~ of %";
2031 else basenm = "& # Mushroom~";
2040 basenm = "ÍÓÈé»æ - %";
2042 basenm = "& Parchment~ - %";
2051 basenm = "À¸Ì¿¤ÎËâË¡½ñ%";
2053 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2054 basenm = "& Book~ of Life Magic %";
2056 basenm = "& Life Spellbook~ %";
2062 case TV_SORCERY_BOOK:
2065 basenm = "Àç½Ñ¤ÎËâË¡½ñ%";
2067 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2068 basenm = "& Book~ of Sorcery %";
2070 basenm = "& Sorcery Spellbook~ %";
2076 case TV_NATURE_BOOK:
2079 basenm = "¼«Á³¤ÎËâË¡½ñ%";
2081 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2082 basenm = "& Book~ of Nature Magic %";
2084 basenm = "& Nature Spellbook~ %";
2093 basenm = "¥«¥ª¥¹¤ÎËâË¡½ñ%";
2095 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2096 basenm = "& Book~ of Chaos Magic %";
2098 basenm = "& Chaos Spellbook~ %";
2107 basenm = "°Å¹õ¤ÎËâË¡½ñ%";
2109 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2110 basenm = "& Book~ of Death Magic %";
2112 basenm = "& Death Spellbook~ %";
2121 basenm = "¥È¥é¥ó¥×¤ÎËâË¡½ñ%";
2123 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2124 basenm = "& Book~ of Trump Magic %";
2126 basenm = "& Trump Spellbook~ %";
2132 case TV_ARCANE_BOOK:
2135 basenm = "Èë½Ñ¤ÎËâË¡½ñ%";
2137 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2138 basenm = "& Book~ of Arcane Magic %";
2140 basenm = "& Arcane Spellbook~ %";
2146 case TV_ENCHANT_BOOK:
2149 basenm = "¾¢¤ÎËâË¡½ñ%";
2151 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2152 basenm = "& Book~ of Craft Magic %";
2154 basenm = "& Craft Spellbook~ %";
2160 case TV_DAEMON_BOOK:
2163 basenm = "°Ëâ¤ÎËâË¡½ñ%";
2165 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2166 basenm = "& Book~ of Daemon Magic %";
2168 basenm = "& Daemon Spellbook~ %";
2174 case TV_CRUSADE_BOOK:
2177 basenm = "Ç˼٤ÎËâË¡½ñ%";
2179 if (mp_ptr->spell_book == TV_LIFE_BOOK)
2180 basenm = "& Book~ of Crusade Magic %";
2182 basenm = "& Crusade Spellbook~ %";
2193 basenm = "& Song Book~ %";
2199 case TV_HISSATSU_BOOK:
2202 basenm = "& Éð·Ý¤Î½ñ%";
2204 basenm = "Book~ of Kendo %";
2210 /* Hack -- Gold/Gems */
2213 strcpy(buf, basenm);
2217 /* Used in the "inventory" routine */
2221 strcpy(buf, "(¤Ê¤·)");
2223 strcpy(buf, "(nothing)");
2230 /* Use full name from k_info or a_info */
2231 if (aware && have_flag(flgs, TR_FULL_NAME))
2233 if (known && o_ptr->name1) basenm = a_name + a_info[o_ptr->name1].name;
2234 else basenm = kindname;
2237 /* Start dumping the result */
2241 if (basenm[0] == '&')
2247 if (mode & OD_OMIT_PREFIX)
2251 else if (o_ptr->number > 1)
2253 t = object_desc_kosuu(t, o_ptr);
2254 t = object_desc_str(t, "¤Î ");
2257 /* ±Ñ¸ì¤Î¾ì¹ç¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ï The ¤¬ÉÕ¤¯¤Î¤Çʬ¤«¤ë¤¬
2258 * ÆüËܸì¤Ç¤Ïʬ¤«¤é¤Ê¤¤¤Î¤Ç¥Þ¡¼¥¯¤ò¤Ä¤±¤ë
2262 if (object_is_fixed_artifact(o_ptr)) t = object_desc_str(t, "¡ú");
2263 else if (o_ptr->art_name) t = object_desc_str(t, "¡ù");
2268 /* The object "expects" a "number" */
2269 if (basenm[0] == '&')
2271 /* Skip the ampersand (and space) */
2275 if (mode & OD_OMIT_PREFIX)
2280 /* Hack -- None left */
2281 else if (o_ptr->number <= 0)
2283 t = object_desc_str(t, "no more ");
2286 /* Extract the number */
2287 else if (o_ptr->number > 1)
2289 t = object_desc_num(t, o_ptr->number);
2290 t = object_desc_chr(t, ' ');
2293 /* Hack -- The only one of its kind */
2294 else if (known && object_is_artifact(o_ptr))
2296 t = object_desc_str(t, "The ");
2299 /* Unique corpses are unique */
2300 else if (o_ptr->tval == TV_CORPSE)
2302 monster_race *r_ptr = &r_info[o_ptr->pval];
2304 if (r_ptr->flags1 & RF1_UNIQUE)
2306 t = object_desc_str(t, "The ");
2317 case '#': vowel = is_a_vowel(modstr[0]); break;
2318 case '%': vowel = is_a_vowel(*kindname); break;
2319 default: vowel = is_a_vowel(*s); break;
2324 /* A single one, with a vowel */
2325 t = object_desc_str(t, "an ");
2329 /* A single one, without a vowel */
2330 t = object_desc_str(t, "a ");
2335 /* Hack -- objects that "never" take an article */
2342 if (mode & OD_OMIT_PREFIX)
2347 /* Hack -- all gone */
2348 else if (o_ptr->number <= 0)
2350 t = object_desc_str(t, "no more ");
2353 /* Prefix a number if required */
2354 else if (o_ptr->number > 1)
2356 t = object_desc_num(t, o_ptr->number);
2357 t = object_desc_chr(t, ' ');
2360 /* Hack -- The only one of its kind */
2361 else if (known && object_is_artifact(o_ptr))
2363 t = object_desc_str(t, "The ");
2366 /* Hack -- single items get no prefix */
2374 /* Paranoia -- skip illegal tildes */
2375 /* while (*s == '~') s++; */
2378 if (object_is_smith(o_ptr))
2380 t = object_desc_str(t, format("ÃÃÌê»Õ%s¤Î", player_name));
2383 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¡¢Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à¤Î̾Á°¤òÉղ乤ë */
2386 /* ¥é¥ó¥À¥à¡¦¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È */
2387 if (o_ptr->art_name)
2389 cptr temp = quark_str(o_ptr->art_name);
2391 /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
2392 /* ±Ñ¸ìÈǤΥ»¡¼¥Ö¥Õ¥¡¥¤¥ë¤«¤éÍ褿 'of XXX' ¤Ï,¡ÖXXX¤Î¡×¤Èɽ¼¨¤¹¤ë */
2393 if (strncmp(temp, "of ", 3) == 0)
2395 t = object_desc_str(t, &temp[3]);
2396 t = object_desc_str(t, "¤Î");
2398 else if ((strncmp(temp, "¡Ø", 2) != 0) &&
2399 (strncmp(temp, "¡Ô", 2) != 0) &&
2401 t = object_desc_str(t, temp);
2403 /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à */
2404 else if (o_ptr->name1 && !have_flag(flgs, TR_FULL_NAME))
2406 artifact_type *a_ptr = &a_info[o_ptr->name1];
2407 /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
2408 if (strncmp(a_name + a_ptr->name, "¡Ø", 2) != 0)
2410 t = object_desc_str(t, a_name + a_ptr->name);
2413 /* ̾¤Î¤¢¤ë¥¢¥¤¥Æ¥à */
2414 else if (object_is_ego(o_ptr))
2416 ego_item_type *e_ptr = &e_info[o_ptr->name2];
2417 t = object_desc_str(t, e_name + e_ptr->name);
2422 /* Copy the string */
2425 /* Insert the modifier (flavor) */
2428 t = object_desc_str(t, modstr);
2430 /* Paranoia -- Never append multiple modstr's */
2434 /* Append kind name */
2437 t = object_desc_str(t, kindname);
2439 /* Paranoia -- Never append multiple kindname's */
2447 /* Add a plural if needed */
2448 if (!(mode & OD_NO_PLURAL) && (o_ptr->number != 1))
2452 /* XXX XXX XXX Mega-Hack */
2454 /* Hack -- "Cutlass-es" and "Torch-es" */
2455 if ((k == 's') || (k == 'h')) *t++ = 'e';
2476 /* '¡Ø'¤«¤é»Ï¤Þ¤ëÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ¸å¤ËÉղ乤ë */
2479 /* ¥é¥ó¥À¥à¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Î̾Á°¤Ï¥»¡¼¥Ö¥Õ¥¡¥¤¥ë¤ËµÏ¿
2480 ¤µ¤ì¤ë¤Î¤Ç¡¢±Ñ¸ìÈǤÎ̾Á°¤â¤½¤ì¤é¤·¤¯ÊÑ´¹¤¹¤ë */
2481 if (o_ptr->art_name)
2485 strcpy(temp, quark_str(o_ptr->art_name));
2486 /* MEGA HACK by ita */
2487 if (strncmp(temp, "¡Ø", 2) == 0 ||
2488 strncmp(temp, "¡Ô", 2) == 0)
2489 t = object_desc_str(t, temp);
2490 else if (temp[0] == '\'')
2492 itemp = strlen(temp);
2493 temp[itemp - 1] = 0;
2494 t = object_desc_str(t, "¡Ø");
2495 t = object_desc_str(t, &temp[1]);
2496 t = object_desc_str(t, "¡Ù");
2499 else if (object_is_fixed_artifact(o_ptr))
2501 artifact_type *a_ptr = &a_info[o_ptr->name1];
2502 if (strncmp(a_name + a_ptr->name, "¡Ø", 2) == 0)
2504 t = object_desc_str(t, a_name + a_ptr->name);
2507 else if (o_ptr->inscription)
2509 cptr str = quark_str(o_ptr->inscription);
2518 if (*str == '#') break;
2524 cptr str = my_strchr(quark_str(o_ptr->inscription), '#');
2526 /* Add the false name */
2527 t = object_desc_str(t,"¡Ø");
2528 t = object_desc_str(t, &str[1]);
2529 t = object_desc_str(t,"¡Ù");
2534 if (object_is_smith(o_ptr))
2536 t = object_desc_str(t,format(" of %s the Smith",player_name));
2539 /* Hack -- Append "Artifact" or "Special" names */
2540 if (known && !have_flag(flgs, TR_FULL_NAME))
2542 /* Is it a new random artifact ? */
2543 if (o_ptr->art_name)
2545 t = object_desc_chr(t, ' ');
2546 t = object_desc_str(t, quark_str(o_ptr->art_name));
2549 /* Grab any artifact name */
2550 else if (object_is_fixed_artifact(o_ptr))
2552 artifact_type *a_ptr = &a_info[o_ptr->name1];
2554 t = object_desc_chr(t, ' ');
2555 t = object_desc_str(t, a_name + a_ptr->name);
2558 /* Grab any ego-item name */
2561 if (object_is_ego(o_ptr))
2563 ego_item_type *e_ptr = &e_info[o_ptr->name2];
2565 t = object_desc_chr(t, ' ');
2566 t = object_desc_str(t, e_name + e_ptr->name);
2569 if (o_ptr->inscription && my_strchr(quark_str(o_ptr->inscription), '#'))
2572 cptr str = my_strchr(quark_str(o_ptr->inscription), '#');
2574 /* Add the false name */
2575 t = object_desc_chr(t, ' ');
2576 t = object_desc_str(t, &str[1]);
2583 /* No more details wanted */
2584 if (mode & OD_NAME_ONLY) goto object_desc_done;
2586 /* Hack -- Chests must be described in detail */
2587 if (o_ptr->tval == TV_CHEST)
2589 /* Not searched yet */
2595 /* May be "empty" */
2596 else if (!o_ptr->pval)
2599 t = object_desc_str(t, "(¶õ)");
2601 t = object_desc_str(t, " (empty)");
2605 /* May be "disarmed" */
2606 else if (o_ptr->pval < 0)
2608 if (chest_traps[0 - o_ptr->pval])
2611 t = object_desc_str(t, "(²ò½üºÑ)");
2613 t = object_desc_str(t, " (disarmed)");
2619 t = object_desc_str(t, "(Èó»Ü¾û)");
2621 t = object_desc_str(t, " (unlocked)");
2626 /* Describe the traps, if any */
2629 /* Describe the traps */
2630 switch (chest_traps[o_ptr->pval])
2635 t = object_desc_str(t, "(»Ü¾û)");
2637 t = object_desc_str(t, " (Locked)");
2641 case CHEST_LOSE_STR:
2644 t = object_desc_str(t, "(ÆÇ¿Ë)");
2646 t = object_desc_str(t, " (Poison Needle)");
2650 case CHEST_LOSE_CON:
2653 t = object_desc_str(t, "(ÆÇ¿Ë)");
2655 t = object_desc_str(t, " (Poison Needle)");
2662 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2664 t = object_desc_str(t, " (Gas Trap)");
2668 case CHEST_PARALYZE:
2671 t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
2673 t = object_desc_str(t, " (Gas Trap)");
2680 t = object_desc_str(t, "(ÇúȯÁõÃÖ)");
2682 t = object_desc_str(t, " (Explosion Device)");
2687 case CHEST_BIRD_STORM:
2688 case CHEST_E_SUMMON:
2689 case CHEST_H_SUMMON:
2692 t = object_desc_str(t, "(¾¤´¤Î¥ë¡¼¥ó)");
2694 t = object_desc_str(t, " (Summoning Runes)");
2698 case CHEST_RUNES_OF_EVIL:
2701 t = object_desc_str(t, "(¼Ù°¤Ê¥ë¡¼¥ó)");
2703 t = object_desc_str(t, " (Gleaming Black Runes)");
2710 t = object_desc_str(t, "(·ÙÊóÁõÃÖ)");
2712 t = object_desc_str(t, " (Alarm)");
2719 t = object_desc_str(t, "(¥Þ¥ë¥Á¡¦¥È¥é¥Ã¥×)");
2721 t = object_desc_str(t, " (Multiple Traps)");
2730 /* Display the item like a weapon */
2731 if (have_flag(flgs, TR_SHOW_MODS)) show_weapon = TRUE;
2733 /* Display the item like a weapon */
2734 if (object_is_smith(o_ptr) && (o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE))
2737 /* Display the item like a weapon */
2738 if (o_ptr->to_h && o_ptr->to_d) show_weapon = TRUE;
2740 /* Display the item like armour */
2741 if (o_ptr->ac) show_armour = TRUE;
2744 /* Dump base weapon info */
2745 switch (o_ptr->tval)
2747 /* Missiles and Weapons */
2756 /* Append a "damage" string */
2757 t = object_desc_chr(t, ' ');
2758 t = object_desc_chr(t, p1);
2759 t = object_desc_num(t, o_ptr->dd);
2760 t = object_desc_chr(t, 'd');
2761 t = object_desc_num(t, o_ptr->ds);
2762 t = object_desc_chr(t, p2);
2768 /* Bows get a special "damage string" */
2771 /* Mega-Hack -- Extract the "base power" */
2772 power = bow_tmul(o_ptr->sval);
2774 /* Apply the "Extra Might" flag */
2775 if (have_flag(flgs, TR_XTRA_MIGHT)) power++;
2777 /* Append a special "damage" string */
2778 t = object_desc_chr(t, ' ');
2779 t = object_desc_chr(t, p1);
2780 t = object_desc_chr(t, 'x');
2781 t = object_desc_num(t, power);
2782 t = object_desc_chr(t, p2);
2789 /* Add the weapon bonuses */
2792 /* Show the tohit/todam on request */
2795 t = object_desc_chr(t, ' ');
2796 t = object_desc_chr(t, p1);
2797 t = object_desc_int(t, o_ptr->to_h);
2798 t = object_desc_chr(t, ',');
2799 t = object_desc_int(t, o_ptr->to_d);
2800 t = object_desc_chr(t, p2);
2803 /* Show the tohit if needed */
2804 else if (o_ptr->to_h)
2806 t = object_desc_chr(t, ' ');
2807 t = object_desc_chr(t, p1);
2808 t = object_desc_int(t, o_ptr->to_h);
2809 t = object_desc_chr(t, p2);
2812 /* Show the todam if needed */
2813 else if (o_ptr->to_d)
2815 t = object_desc_chr(t, ' ');
2816 t = object_desc_chr(t, p1);
2817 t = object_desc_int(t, o_ptr->to_d);
2818 t = object_desc_chr(t, p2);
2822 bow_ptr = &inventory[INVEN_BOW];
2824 /* If have a firing weapon + ammo matches bow */
2825 if (bow_ptr->k_idx && (o_ptr->tval == p_ptr->tval_ammo))
2827 int avgdam = o_ptr->dd * (o_ptr->ds + 1) * 10 / 2;
2828 int tmul = bow_tmul(bow_ptr->sval);
2829 s16b energy_fire = bow_energy(bow_ptr->sval);
2831 /* See if the bow is "known" - then set damage bonus */
2832 if (object_is_known(bow_ptr)) avgdam += (bow_ptr->to_d * 10);
2834 /* Effect of ammo */
2835 if (known) avgdam += (o_ptr->to_d * 10);
2837 /* Get extra "power" from "extra might" */
2838 if (p_ptr->xtra_might) tmul++;
2840 tmul = tmul * (100 + (int)(adj_str_td[p_ptr->stat_ind[A_STR]]) - 128);
2842 /* Launcher multiplier */
2844 avgdam /= (100 * 10);
2845 if (avgdam < 0) avgdam = 0;
2847 /* Display (shot damage/ avg damage) */
2848 t = object_desc_chr(t, ' ');
2849 t = object_desc_chr(t, p1);
2850 t = object_desc_num(t, avgdam);
2851 t = object_desc_chr(t, '/');
2853 if (p_ptr->num_fire == 0)
2855 t = object_desc_chr(t, '0');
2859 /* Calc effects of energy */
2860 avgdam *= (p_ptr->num_fire * 100);
2861 avgdam /= energy_fire;
2862 t = object_desc_num(t, avgdam);
2865 t = object_desc_chr(t, p2);
2867 else if ((p_ptr->pclass == CLASS_NINJA) && (o_ptr->tval == TV_SPIKE))
2869 int avgdam = p_ptr->mighty_throw ? (1 + 3) : 1;
2870 s16b energy_fire = 100 - p_ptr->lev;
2872 avgdam += ((p_ptr->lev + 30) * (p_ptr->lev + 30) - 900) / 55;
2874 /* Display (shot damage/ avg damage) */
2875 t = object_desc_chr(t, ' ');
2876 t = object_desc_chr(t, p1);
2877 t = object_desc_num(t, avgdam);
2878 t = object_desc_chr(t, '/');
2880 /* Calc effects of energy */
2881 avgdam = 100 * avgdam / energy_fire;
2883 t = object_desc_num(t, avgdam);
2884 t = object_desc_chr(t, p2);
2887 /* Add the armor bonuses */
2890 /* Show the armor class info */
2893 t = object_desc_chr(t, ' ');
2894 t = object_desc_chr(t, b1);
2895 t = object_desc_num(t, o_ptr->ac);
2896 t = object_desc_chr(t, ',');
2897 t = object_desc_int(t, o_ptr->to_a);
2898 t = object_desc_chr(t, b2);
2901 /* No base armor, but does increase armor */
2902 else if (o_ptr->to_a)
2904 t = object_desc_chr(t, ' ');
2905 t = object_desc_chr(t, b1);
2906 t = object_desc_int(t, o_ptr->to_a);
2907 t = object_desc_chr(t, b2);
2911 /* Hack -- always show base armor */
2912 else if (show_armour)
2914 t = object_desc_chr(t, ' ');
2915 t = object_desc_chr(t, b1);
2916 t = object_desc_num(t, o_ptr->ac);
2917 t = object_desc_chr(t, b2);
2921 /* No more details wanted */
2922 if (mode & OD_NAME_AND_ENCHANT) goto object_desc_done;
2925 if (known) /* Known item only */
2928 * Hack -- Wands and Staffs have charges. Make certain how many charges
2929 * a stack of staffs really has is clear. -LM-
2931 if (((o_ptr->tval == TV_STAFF) || (o_ptr->tval == TV_WAND)))
2933 /* Dump " (N charges)" */
2934 t = object_desc_chr(t, ' ');
2935 t = object_desc_chr(t, p1);
2937 /* Clear explaination for staffs. */
2938 if ((o_ptr->tval == TV_STAFF) && (o_ptr->number > 1))
2940 t = object_desc_num(t, o_ptr->number);
2941 t = object_desc_str(t, "x ");
2943 t = object_desc_num(t, o_ptr->pval);
2945 t = object_desc_str(t, "²óʬ");
2947 t = object_desc_str(t, " charge");
2948 if (o_ptr->pval != 1) t = object_desc_chr(t, 's');
2951 t = object_desc_chr(t, p2);
2953 /* Hack -- Rods have a "charging" indicator. Now that stacks of rods may
2954 * be in any state of charge or discharge, this now includes a number. -LM-
2956 else if (o_ptr->tval == TV_ROD)
2958 /* Hack -- Dump " (# charging)" if relevant */
2961 /* Stacks of rods display an exact count of charging rods. */
2962 if (o_ptr->number > 1)
2965 if (k_ptr->pval == 0) k_ptr->pval = 1;
2967 /* Find out how many rods are charging, by dividing
2968 * current timeout by each rod's maximum timeout.
2969 * Ensure that any remainder is rounded up. Display
2970 * very discharged stacks as merely fully discharged.
2972 power = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval;
2973 if (power > o_ptr->number) power = o_ptr->number;
2975 /* Display prettily. */
2976 t = object_desc_str(t, " (");
2977 t = object_desc_num(t, power);
2979 t = object_desc_str(t, "ËÜ ½¼Å¶Ãæ)");
2981 t = object_desc_str(t, " charging)");
2985 /* "one Rod of Perception (1 charging)" would look tacky. */
2989 t = object_desc_str(t, "(½¼Å¶Ãæ)");
2991 t = object_desc_str(t, " (charging)");
2997 /* Dump "pval" flags for wearable items */
2998 if (have_pval_flags(flgs))
3000 /* Start the display */
3001 t = object_desc_chr(t, ' ');
3002 t = object_desc_chr(t, p1);
3004 /* Dump the "pval" itself */
3005 t = object_desc_int(t, o_ptr->pval);
3007 /* Do not display the "pval" flags */
3008 if (have_flag(flgs, TR_HIDE_TYPE))
3014 else if (have_flag(flgs, TR_SPEED))
3016 /* Dump " to speed" */
3018 t = object_desc_str(t, "²Ã®");
3020 t = object_desc_str(t, " to speed");
3025 else if (have_flag(flgs, TR_BLOWS))
3029 t = object_desc_str(t, "¹¶·â");
3031 t = object_desc_str(t, " attack");
3034 if (ABS(o_ptr->pval) != 1) t = object_desc_chr(t, 's');
3039 else if (have_flag(flgs, TR_STEALTH))
3041 /* Dump " to stealth" */
3043 t = object_desc_str(t, "±£Ì©");
3045 t = object_desc_str(t, " to stealth");
3050 else if (have_flag(flgs, TR_SEARCH))
3052 /* Dump " to searching" */
3054 t = object_desc_str(t, "õº÷");
3056 t = object_desc_str(t, " to searching");
3061 else if (have_flag(flgs, TR_INFRA))
3063 /* Dump " to infravision" */
3065 t = object_desc_str(t, "ÀÖ³°Àþ»ëÎÏ");
3067 t = object_desc_str(t, " to infravision");
3071 /* Finish the display */
3072 t = object_desc_chr(t, p2);
3075 /* Hack -- Process Lanterns/Torches */
3076 if ((o_ptr->tval == TV_LITE) && (!(object_is_fixed_artifact(o_ptr) || (o_ptr->sval == SV_LITE_FEANOR))))
3078 /* Hack -- Turns of light for normal lites */
3080 t = object_desc_chr(t, '(');
3082 t = object_desc_str(t, " (with ");
3085 if (o_ptr->name2 == EGO_LITE_LONG) t = object_desc_num(t, o_ptr->xtra4 * 2);
3086 else t = object_desc_num(t, o_ptr->xtra4);
3088 t = object_desc_str(t, "¥¿¡¼¥ó¤Î¼÷Ì¿)");
3090 t = object_desc_str(t, " turns of light)");
3094 /* Indicate charging objects, but not rods. */
3095 if (o_ptr->timeout && (o_ptr->tval != TV_ROD))
3097 /* Hack -- Dump " (charging)" if relevant */
3099 t = object_desc_str(t, "(½¼Å¶Ãæ)");
3101 t = object_desc_str(t, " (charging)");
3107 /* No more details wanted */
3108 if (mode & OD_OMIT_INSCRIPTION) goto object_desc_done;
3111 /* Prepare real inscriptions in a buffer */
3114 /* Auto abbreviation inscribe */
3115 if ((abbrev_extra || abbrev_all) && (o_ptr->ident & IDENT_MENTAL))
3117 if (!o_ptr->inscription || !my_strchr(quark_str(o_ptr->inscription), '%'))
3128 get_ability_abbreviation(tmp_val2, o_ptr, kanji, all);
3132 /* Use the standard inscription if available */
3133 if (o_ptr->inscription)
3137 if (tmp_val2[0]) strcat(tmp_val2, ", ");
3139 /* Get inscription and convert {%} */
3140 get_inscription(buff, o_ptr);
3142 /* strcat with correct treating of kanji */
3143 my_strcat(tmp_val2, buff, sizeof(tmp_val2));
3147 /* No fake inscription yet */
3148 fake_insc_buf[0] = '\0';
3150 /* Use the game-generated "feeling" otherwise, if available */
3153 strcpy(fake_insc_buf, game_inscriptions[o_ptr->feeling]);
3156 /* Note "cursed" if the item is known to be cursed */
3157 else if (object_is_cursed(o_ptr) && (known || (o_ptr->ident & IDENT_SENSE)))
3160 strcpy(fake_insc_buf, "¼ö¤ï¤ì¤Æ¤¤¤ë");
3162 strcpy(fake_insc_buf, "cursed");
3166 /* Note "unidentified" if the item is unidentified */
3167 else if (((o_ptr->tval == TV_RING) || (o_ptr->tval == TV_AMULET)
3168 || (o_ptr->tval == TV_LITE) || (o_ptr->tval == TV_FIGURINE))
3170 && !(o_ptr->ident & IDENT_SENSE))
3173 strcpy(fake_insc_buf, "̤´ÕÄê");
3175 strcpy(fake_insc_buf, "unidentified");
3179 /* Mega-Hack -- note empty wands/staffs */
3180 else if (!known && (o_ptr->ident & IDENT_EMPTY))
3183 strcpy(fake_insc_buf, "¶õ");
3185 strcpy(fake_insc_buf, "empty");
3189 /* Note "tried" if the object has been tested unsuccessfully */
3190 else if (!aware && object_is_tried(o_ptr))
3193 strcpy(fake_insc_buf, "̤ȽÌÀ");
3195 strcpy(fake_insc_buf, "tried");
3199 /* Note the discount, if any */
3200 if (o_ptr->discount)
3202 /* Hidden by real inscription unless in a store */
3203 if (!tmp_val2[0] || (o_ptr->ident & IDENT_STORE))
3205 /* Append to other fake inscriptions if any */
3206 if (fake_insc_buf[0]) strcat(fake_insc_buf, ", ");
3208 (void)object_desc_num(fake_insc_buf, o_ptr->discount);
3210 strcat(fake_insc_buf, "%°ú¤");
3212 strcat(fake_insc_buf, "% off");
3218 /* Append the inscription, if any */
3219 if (fake_insc_buf[0] || tmp_val2[0])
3221 /* Append the inscription */
3222 t = object_desc_chr(t, ' ');
3223 t = object_desc_chr(t, c1);
3225 /* Append fake inscriptions */
3226 if (fake_insc_buf[0])
3228 t = object_desc_str(t, fake_insc_buf);
3231 /* Append a separater */
3232 if (fake_insc_buf[0] && tmp_val2[0])
3234 t = object_desc_chr(t, ',');
3235 t = object_desc_chr(t, ' ');
3238 /* Append real inscriptions */
3241 t = object_desc_str(t, tmp_val2);
3244 t = object_desc_chr(t, c2);
3248 my_strcpy(buf, tmp_val, MAX_NLEN);