#include "angband.h"
-
-/*
- * Hack -- note that "TERM_MULTI" is now just "TERM_VIOLET".
- * We will have to find a cleaner method for "MULTI_HUED" later.
- * There were only two multi-hued "flavors" (one potion, one food).
- * Plus five multi-hued "base-objects" (3 dragon scales, one blade
- * of chaos, and one something else). See the SHIMMER_OBJECTS code
- * in "dungeon.c" and the object color extractor in "cave.c".
- */
-#define TERM_MULTI TERM_VIOLET
-
-
-/*
- * Max sizes of the following arrays
- */
-#define MAX_ROCKS 59 /* Used with rings (min 38) */
-#define MAX_AMULETS 30 /* Used with amulets (min 14) */
-#define MAX_WOODS 34 /* Used with staffs (min 30) */
-#define MAX_METALS 40 /* Used with wands/rods (min 29/29) */
-#define MAX_COLORS 70 /* Used with potions (min 60) */
-#define MAX_SHROOM 20 /* Used with mushrooms (min 20) */
-#define MAX_TITLES 55 /* Used with scrolls (min 48) */
-#define MAX_SYLLABLES 164 /* Used with scrolls (see below) */
-
-
-/*
- * Rings (adjectives and colors)
- */
-
-static cptr ring_adj[MAX_ROCKS]
-#ifndef JP
-= {
- "Alexandrite", "Amethyst", "Aquamarine", "Azurite", "Beryl",
- "Bloodstone", "Calcite", "Carnelian", "Corundum", "Diamond",
- "Emerald", "Fluorite", "Garnet", "Granite", "Jade",
- "Jasper", "Lapis Lazuli", "Malachite", "Marble", "Moonstone",
- "Onyx", "Opal", "Pearl", "Quartz", "Quartzite",
- "Rhodonite", "Ruby", "Sapphire", "Tiger Eye", "Topaz",
- "Turquoise", "Zircon", "Platinum", "Bronze", "Gold",
- "Obsidian", "Silver", "Tortoise Shell", "Mithril", "Jet",
- "Engagement", "Adamantite",
- "Wire", "Dilithium", "Bone", "Wooden",
- "Spikard", "Serpent", "Wedding", "Double",
- "Plain", "Brass", "Scarab","Shining",
- "Rusty","Transparent", "Steel", "Tanzanite",
- "Nephrite",
-};
-#else
-= {
- "¶âÎÐÀФÎ","¥¢¥á¥¸¥¹¥È¤Î","¥¢¥¯¥¢¥Þ¥ê¥ó¤Î","¤á¤Î¤¦¤Î","ÎÐÃìÀФÎ",
- "·ì¶Ì¿ï¤Î","Êý²òÀФÎ","ÀÖ¤á¤Î¤¦¤Î","¹Ë¶Ì¤Î","¥À¥¤¥¢¥â¥ó¥É¤Î",
- "¥¨¥á¥é¥ë¥É¤Î","¥Û¥¿¥ëÀФÎ","¥¬¡¼¥Í¥Ã¥È¤Î","¸æ±ÆÀФÎ","¤Ò¤¹¤¤¤Î",
- "¥¸¥ã¥¹¥Ñ¡¼¤Î","ÀÄÎÜÍþ¤Î","¥¯¥¸¥ã¥¯ÀФÎ","ÂçÍýÀФÎ","¥à¡¼¥ó¥¹¥È¡¼¥ó¤Î",
- "¼Ê¤á¤Î¤¦¤Î","¥ª¥Ñ¡¼¥ë¤Î","¿¿¼î¤Î","¿å¾½¤Î","ÀбѴä¤Î",
- "¥¶¥¯¥íÀФÎ","¥ë¥Ó¡¼¤Î","¥µ¥Õ¥¡¥¤¥¢¤Î","¥¿¥¤¥¬¡¼¥¢¥¤¤Î","¥È¥Ñ¡¼¥º¤Î",
- "¥È¥ë¥³ÀФÎ","¥¸¥ë¥³¥ó¤Î","¥×¥é¥Á¥Ê¤Î","¥Ö¥í¥ó¥º¤Î","¶â¤Î",
- "¹õÍËÀФÎ","¶ä¤Î","¤Ù¤Ã¹Ã¤Î","¥ß¥¹¥ê¥ë¤Î","¹õ¶Ì¤Î",
- "º§Ìó","¥¢¥À¥Þ¥ó¥¿¥¤¥È¤Î",
- "¿Ë¶â¤Î","¥Ç¥£¥ê¥·¥¦¥à¤Î","¹ü¤Î","ÌÚ¤Î",
- "¥¹¥Ô¥«¤Î" /*nuke me*/ ,"¼Ø¤Î","·ëº§","Æó½Å¤Î",
- "¾þ¤ê¤Î¤Ê¤¤","ÀÄƼ¤Î","¥¹¥«¥é¥Ù¤Î" ,"µ±¤¯",
- "»¬¤Ó¤¿","Æ©ÌÀ¤Ê","¹ÝÅ´¤Î","¥¿¥ó¥¶¥Ê¥¤¥È¤Î",
- "Æð¶Ì¤Î",
-};
-#endif
-
-static byte ring_col[MAX_ROCKS] =
-{
- TERM_GREEN, TERM_VIOLET, TERM_L_BLUE, TERM_L_BLUE, TERM_L_GREEN,
- TERM_RED, TERM_WHITE, TERM_RED, TERM_SLATE, TERM_WHITE,
- TERM_GREEN, TERM_L_GREEN, TERM_RED, TERM_L_DARK, TERM_L_GREEN,
- TERM_UMBER, TERM_BLUE, TERM_GREEN, TERM_WHITE, TERM_L_WHITE,
- TERM_L_RED, TERM_L_WHITE, TERM_WHITE, TERM_L_WHITE, TERM_L_WHITE,
- TERM_L_RED, TERM_RED, TERM_BLUE, TERM_YELLOW, TERM_YELLOW,
- TERM_L_BLUE, TERM_L_UMBER, TERM_WHITE, TERM_L_UMBER, TERM_YELLOW,
- TERM_L_DARK, TERM_L_WHITE, TERM_GREEN, TERM_L_BLUE, TERM_L_DARK,
- TERM_YELLOW, TERM_VIOLET,
- TERM_UMBER, TERM_L_WHITE, TERM_WHITE, TERM_UMBER,
- TERM_BLUE, TERM_GREEN, TERM_YELLOW, TERM_ORANGE,
- TERM_YELLOW, TERM_ORANGE, TERM_L_GREEN, TERM_YELLOW,
- TERM_RED, TERM_WHITE, TERM_WHITE, TERM_YELLOW,
- TERM_GREEN,
-};
-
-
-/*
- * Amulets (adjectives and colors)
- */
-static cptr amulet_adj[MAX_AMULETS]
-#ifndef JP
-= {
- "Amber", "Driftwood", "Coral", "Agate", "Ivory",
- "Obsidian", "Bone", "Brass", "Bronze", "Pewter",
- "Tortoise Shell", "Golden", "Azure", "Crystal", "Silver",
- "Copper", "Swastika", "Platinum","Runed", "Rusty",
- "Curved", "Dragon's claw", "Rosary", "Jade", "Mithril",
- "Ruby", "Emerald", "Sapphire", "Garnet", "Diamond"
-};
-#else
-= {
- "àèàá¤Î","ήÌÚ¤Î","¥µ¥ó¥´¤Î","¤á¤Î¤¦¤Î","¾Ý²ç¤Î",
- "¹õÍËÀФÎ","¹ü¤Î","¿¿ï«¤Î","ÀÄƼ¤Î","¤·¤í¤á¤Î",
- "¤Ù¤Ã¹Ã¤Î","¶â¤Î","ÎÜÍþ¤Î","¿å¾½¤Î","¶ä¤Î",
- "Ƽ¤Î","ÒĤÎ", "¥×¥é¥Á¥Ê¤Î", "¥ë¡¼¥ó¤¬¹ï¤Þ¤ì¤¿","»¬¤Ó¤¿",
- "¶Ê¤¬¤Ã¤¿", "¥É¥é¥´¥ó¤ÎÄÞ¤Î", "¿ô¼î¤Î", "¤Ò¤¹¤¤¤Î", "¥ß¥¹¥ê¥ë¤Î",
- "¥ë¥Ó¡¼¤Î", "¥¨¥á¥é¥ë¥É¤Î", "¥µ¥Õ¥¡¥¤¥¢¤Î", "¥¬¡¼¥Í¥Ã¥È¤Î", "¥À¥¤¥¢¥â¥ó¥É¤Î"
-};
-#endif
-
-static byte amulet_col[MAX_AMULETS] =
-{
- TERM_YELLOW, TERM_L_UMBER, TERM_WHITE, TERM_L_WHITE, TERM_WHITE,
- TERM_L_DARK, TERM_WHITE, TERM_L_UMBER, TERM_L_UMBER, TERM_SLATE,
- TERM_GREEN, TERM_YELLOW, TERM_L_BLUE, TERM_L_BLUE, TERM_L_WHITE,
- TERM_L_UMBER, TERM_VIOLET, TERM_WHITE, TERM_UMBER, TERM_RED,
- TERM_GREEN, TERM_L_GREEN, TERM_L_GREEN, TERM_GREEN, TERM_L_BLUE,
- TERM_RED, TERM_GREEN, TERM_BLUE, TERM_RED, TERM_WHITE
-};
-
-
-/*
- * Staffs (adjectives and colors)
- */
-static cptr staff_adj[MAX_WOODS]
-#ifndef JP
-= {
- "Aspen", "Balsa", "Banyan", "Birch", "Cedar",
- "Cottonwood", "Cypress", "Dogwood", "Elm", "Eucalyptus",
- "Hemlock", "Hickory", "Ironwood", "Locust", "Mahogany",
- "Maple", "Mulberry", "Oak", "Pine", "Redwood",
- "Rosewood", "Spruce", "Sycamore", "Teak", "Walnut",
- "Mistletoe", "Hawthorn", "Bamboo", "Silver", "Runed",
- "Golden", "Ashen", "Ivory","Gnarled"/*,"Willow"*/
-};
-#else
-= {
- "¥Ý¥×¥é¤Î","¥Ð¥ë¥µ¤Î","¥Ð¥ó¥ä¥ó¤Î","¥«¥Ð¤Î","À¾ÍÎ¥¹¥®¤Î",
- "ÛؤÎ","¥¤¥È¥¹¥®¤Î","¥ß¥º¥¤Î","¥Ë¥ì¤Î","¥æ¡¼¥«¥ê¤Î",
- "¥Ä¥¬¤Î","¥Ö¥Ê¤Î","¹õÃɤÎ","¥¢¥«¥·¥¢¤Î","¥Þ¥Û¥¬¥Ë¡¼¤Î",
- "¥«¥¨¥Ç¤Î","¥¯¥ï¤Î","¥«¥·¤Î","¾¾¤Î","¿ù¤Î",
- "»çÃɤÎ","¥¨¥¾¥Þ¥Ä¤Î","¥¤¥Á¥¸¥¯¤Î","¥Á¡¼¥¯¤Î","¥¯¥ë¥ß¤Î",
- "¥ä¥É¥ê¥®¤Î","¥µ¥ó¥¶¥·¤Î","ÃݤÎ","¶ä¤Î","¥ë¡¼¥ó¤Î",
- "¶â¤Î","¥È¥Í¥ê¥³¤Î", "¾Ý²ç¤Î", "·î·Ë¼ù¤Î"
-};
-#endif
-
-static byte staff_col[MAX_WOODS] =
-{
- TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER,
- TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER,
- TERM_L_UMBER, TERM_L_UMBER, TERM_UMBER, TERM_L_UMBER, TERM_UMBER,
- TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_RED,
- TERM_RED, TERM_L_UMBER, TERM_L_UMBER, TERM_L_UMBER, TERM_UMBER,
- TERM_GREEN, TERM_L_UMBER, TERM_L_UMBER, TERM_L_WHITE, TERM_UMBER,
- TERM_YELLOW, TERM_SLATE, TERM_WHITE, TERM_SLATE
-};
-
-
-/*
- * Wands (adjectives and colors)
- */
-static cptr wand_adj[MAX_METALS]
-#ifndef JP
-= {
- "Aluminum", "Cast Iron", "Chromium", "Copper", "Gold",
- "Iron", "Magnesium", "Molybdenum", "Nickel", "Rusty",
- "Silver", "Steel", "Tin", "Titanium", "Tungsten",
- "Zirconium", "Zinc", "Aluminum-Plated", "Copper-Plated", "Gold-Plated",
- "Nickel-Plated", "Silver-Plated", "Steel-Plated", "Tin-Plated", "Zinc-Plated",
- "Mithril-Plated", "Mithril", "Runed", "Bronze", "Brass",
- "Platinum", "Lead","Lead-Plated", "Ivory" , "Adamantite",
- "Uridium", "Long", "Short", "Hexagonal", "Carbonized"
-};
-#else
-= {
- "¥¢¥ë¥ß¤Î","ÃòÅ´¤Î","¥¯¥í¥à¤Î","Ƽ¤Î","¶â¤Î",
- "Å´¤Î","¥Þ¥°¥Í¥·¥¦¥à¤Î","¥â¥ê¥Ö¥Ç¥ó¤Î","¥Ë¥Ã¥±¥ë¤Î","»¬¤Ó¤¿",
- "¶ä¤Î","¹ÝÅ´¤Î","¥Ö¥ê¥¤Î","¥Á¥¿¥ó¤Î","¥¿¥ó¥°¥¹¥Æ¥ó¤Î",
- "¥¸¥ë¥³¥ó¤Î","°¡±ô¤Î","¥¢¥ë¥ß¥á¥Ã¥¤Î","Ƽ¥á¥Ã¥¤Î","¶â¥á¥Ã¥¤Î",
- "ÇòƼ¥á¥Ã¥¤Î","¶ä¥á¥Ã¥¤Î","Å´¥á¥Ã¥¤Î","¥¹¥º¥á¥Ã¥¤Î","°¡±ô¥á¥Ã¥¤Î",
- "¥ß¥¹¥ê¥ë¥á¥Ã¥¤Î","¥ß¥¹¥ê¥ë¤Î","¥ë¡¼¥ó¤¬¹ï¤Þ¤ì¤¿","ÀÄƼ¤Î","¿¿ï«¤Î",
- "¥×¥é¥Á¥Ê¤Î","±ô¤Î","±ô¥á¥Ã¥¤Î","¾Ý²ç¤Î","¥¢¥À¥Þ¥ó¥¿¥¤¥È¤Î",
- "¥¤¥ê¥Â¥¦¥à¤Î","Ť¤","û¤¤","Ï»³Ñ·Á¤Î", "úÁǤÎ"
-};
-#endif
-
-static byte wand_col[MAX_METALS] =
-{
- TERM_L_BLUE, TERM_L_DARK, TERM_WHITE, TERM_L_UMBER, TERM_YELLOW,
- TERM_SLATE, TERM_L_WHITE, TERM_L_WHITE, TERM_L_UMBER, TERM_RED,
- TERM_L_WHITE, TERM_L_WHITE, TERM_L_WHITE, TERM_WHITE, TERM_WHITE,
- TERM_L_WHITE, TERM_L_WHITE, TERM_L_BLUE, TERM_L_UMBER, TERM_YELLOW,
- TERM_L_UMBER, TERM_L_WHITE, TERM_L_WHITE, TERM_L_WHITE, TERM_L_WHITE,
- TERM_L_BLUE, TERM_L_BLUE, TERM_UMBER, TERM_L_UMBER, TERM_L_UMBER,
- TERM_WHITE, TERM_SLATE, TERM_SLATE, TERM_WHITE, TERM_VIOLET,
- TERM_L_RED, TERM_L_BLUE, TERM_BLUE, TERM_RED, TERM_L_DARK
-};
-
-
-/*
- * Rods (adjectives and colors).
- * Efficiency -- copied from wand arrays
- */
-
-static cptr rod_adj[MAX_METALS];
-
-static byte rod_col[MAX_METALS];
-
-
-/*
- * Mushrooms (adjectives and colors)
- */
-
-static cptr food_adj[MAX_SHROOM]
-#ifndef JP
-= {
- "Blue", "Black", "Black Spotted", "Brown", "Dark Blue",
- "Dark Green", "Dark Red", "Yellow", "Furry", "Green",
- "Grey", "Light Blue", "Light Green", "Violet", "Red",
- "Slimy", "Tan", "White", "White Spotted", "Wrinkled",
-};
-#else
-= {
- "ÀĤ¤","¹õ¤¤","¹õÈäÎ","Ã㿧¤Î","·²ÀĤÎ",
- "¿¼ÎФÎ","¹È¿§¤Î","²«¿§¤¤","Âݤष¤¿","ÎФÎ",
- "¥°¥ì¡¼¤Î","¶õ¿§¤Î","²«ÎФÎ","¥¹¥ß¥ì¿§¤Î","ÀÖ¤¤",
- "¤Í¤Ð¤Í¤Ð¤·¤¿","²«³ì¿§¤Î","Çò¤¤","ÇòÈäÎ","¤·¤ï¤·¤ï¤Î",
-};
-#endif
-
-static byte food_col[MAX_SHROOM] =
-{
- TERM_BLUE, TERM_L_DARK, TERM_L_DARK, TERM_UMBER, TERM_BLUE,
- TERM_GREEN, TERM_RED, TERM_YELLOW, TERM_L_WHITE, TERM_GREEN,
- TERM_SLATE, TERM_L_BLUE, TERM_L_GREEN, TERM_VIOLET, TERM_RED,
- TERM_SLATE, TERM_L_UMBER, TERM_WHITE, TERM_WHITE, TERM_UMBER
-};
-
-
-/*
- * Color adjectives and colors, for potions.
- * Hack -- The first four entries are hard-coded.
- * (water, apple juice, slime mold juice, something)
- */
-
-static cptr potion_adj[MAX_COLORS]
-#ifndef JP
-= {
- "Clear", "Light Brown", "Icky Green", "xxx",
- "Azure", "Blue", "Blue Speckled", "Black", "Brown", "Brown Speckled",
- "Bubbling", "Chartreuse", "Cloudy", "Copper Speckled", "Crimson", "Cyan",
- "Dark Blue", "Dark Green", "Dark Red", "Gold Speckled", "Green",
- "Green Speckled", "Grey", "Grey Speckled", "Hazy", "Indigo",
- "Light Blue", "Light Green", "Magenta", "Metallic Blue", "Metallic Red",
- "Metallic Green", "Metallic Purple", "Misty", "Orange", "Orange Speckled",
- "Pink", "Pink Speckled", "Puce", "Purple", "Purple Speckled",
- "Red", "Red Speckled", "Silver Speckled", "Smoky", "Tangerine",
- "Violet", "Vermilion", "White", "Yellow", "Violet Speckled",
- "Pungent", "Clotted Red", "Viscous Pink", "Oily Yellow", "Gloopy Green",
- "Shimmering", "Coagulated Crimson", "Yellow Speckled", "Gold",
- "Manly", "Stinking", "Oily Black", "Ichor", "Ivory White", "Sky Blue",
- "Gray", "Silver", "Bronze", "Flashing",
-};
-#else
-= {
- "Æ©ÌÀ¤Ê","ÇöÃ㿧¤Î","¤è¤É¤ó¤ÀÎФÎ","¼¿¹õ¤Î",
- "º°ÊˤÎ","ÀĤ¤","ÀÄÈäÎ","¹õ¤¤","Ã㿧¤Î","ÃãÈäÎ",
- "Ë¢¤À¤Ã¤¿","Çö²«Î理Î","Âù¤Ã¤¿","ƼÈäÎ","¹È¿§¤Î","¥·¥¢¥ó¿§¤Î",
- "·²ÀÄ¿§¤Î","¿¼¤¤ÎФÎ","¿¼¤¤ÀÖ¿§¤Î","¶âÈäÎ","Î理Î",
- "ÎÐÈäÎ","³¥¿§¤Î","³¥ÈäÎ","¤Ü¤ä¤±¤¿¿§¤Î","Íõ¿§¤Î",
- "Çö¤¤ÀÄ¿§¤Î","Çö¤¤Î理Î","¥Þ¥¼¥ó¥¿¿§¤Î","ÀĤ¯µ±¤¯","ÀÖ¤¯µ±¤¯",
- "ÎФ˵±¤¯","»ç¤Ëµ±¤¯","̸¾õ¤Î","¥ª¥ì¥ó¥¸¿§¤Î","¥ª¥ì¥ó¥¸ÈäÎ",
- "¥Ô¥ó¥¯¿§¤Î","¥Ô¥ó¥¯ÈäÎ","¹õ³ì¿§¤Î","»ç¿§¤Î","¤¦¤¹¤¤»çÈäÎ",
- "ÀÖ¤¤","ÀÖÈäÎ","¶äÈäÎ","±ì¤Ã¤¿","Üô¿§¤Î",
- "¥¹¥ß¥ì¿§¤Î","¼ë¿§¤Î","Çò¤¤","²«¿§¤¤", "»çÈäÎ",
- "»É·ã½¤Î¤¹¤ë","¤è¤É¤ó¤ÀÀÖ¤Î","¥É¥í¥É¥í¤Î","¤Í¤Ð¤Ã¤¿²«¿§¤Î","°ÅÎ理Î",
- "µ±¤¯","¤Í¤Ð¤Ã¤¿¿¼¹È¤Î","²«ÈäÎ","¶â¿§¤Î",
- "Ã˽¤¤" /*nuke me*/,"°½¤Î¤¹¤ë","¹õÌý¿§¤Î","ǾÞù¤Î",
- "¾Ý²ç¿§¤Î","¶õ¿§¤Î", "¤Í¤º¤ß¿§¤Î", "¶ä¿§¤Î", "ÀÖƼ¿§¤Î",
- "¥¥é¥¥é¸÷¤ë"
-};
-#endif
-
-static byte potion_col[MAX_COLORS] =
-{
- TERM_WHITE, TERM_L_UMBER, TERM_GREEN, 0,
- TERM_L_BLUE, TERM_BLUE, TERM_BLUE, TERM_L_DARK, TERM_UMBER, TERM_UMBER,
- TERM_L_WHITE, TERM_L_GREEN, TERM_WHITE, TERM_L_UMBER, TERM_RED, TERM_L_BLUE,
- TERM_BLUE, TERM_GREEN, TERM_RED, TERM_YELLOW, TERM_GREEN,
- TERM_GREEN, TERM_SLATE, TERM_SLATE, TERM_L_WHITE, TERM_VIOLET,
- TERM_L_BLUE, TERM_L_GREEN, TERM_RED, TERM_BLUE, TERM_RED,
- TERM_GREEN, TERM_VIOLET, TERM_L_WHITE, TERM_ORANGE, TERM_ORANGE,
- TERM_L_RED, TERM_L_RED, TERM_VIOLET, TERM_VIOLET, TERM_VIOLET,
- TERM_RED, TERM_RED, TERM_L_WHITE, TERM_L_DARK, TERM_ORANGE,
- TERM_VIOLET, TERM_RED, TERM_WHITE, TERM_YELLOW, TERM_VIOLET,
- TERM_L_RED, TERM_RED, TERM_L_RED, TERM_YELLOW, TERM_GREEN,
- TERM_MULTI, TERM_RED, TERM_YELLOW, TERM_YELLOW,
- TERM_L_UMBER, TERM_UMBER, TERM_L_DARK, TERM_RED,
- TERM_WHITE, TERM_L_BLUE, TERM_L_WHITE, TERM_WHITE, TERM_RED,
- TERM_YELLOW
-};
-
-
-/*
- * Syllables for scrolls (must be 1-4 letters each)
- */
-
-static cptr syllables[MAX_SYLLABLES]
-#ifdef JP
-= {
- "Å·", "ÃÏ", "̵", "ÍÑ", "°ì", "Åá", "ξ", "ÃÇ",
- "°á", "Ë¥", "Æü", "Àé", "½©", "Ëþ", "¿È", "ÁÏ",
- "áØ", "¼·", "ž", "Ȭ", "ÅÝ", "²é", "¿Å",
- "¾¨", "ÃÀ", "µ¯", "»à", "²ó", "À¸", "ʸ",
- "Éð", "Æ»", "ε", "Ƭ", "¼Ø", "Èø", "ñ", "Åá", "ľ", "Æþ",
- "¿Ê", "Âà", "¸Þ", "¡", "Ï»", "ç¥", "Âç", "»³", "ÌÄ",
- "Æ°", "É÷", "ÎÓ", "²Ð", "Àä", "ÂÎ", "Ì¿", "»Í",
- "ÌÌ", "Á¿", "²Î", "´°", "Á´", "·ç", "Ä·", "ÎÂ",
- "ìí", "î½", "òµ", "Ì¥", "ò³", "ò´", "½Ä",
- "²£", "¿Ô", "¿À", "½Ð", "µ´", "Ë×", "²¹", "¸Î", "ÃÎ",
- "¿·", "½Õ", "²Æ", "Åß", "½ã", "¿¿", "¹¤", "¶½",
- "Ì£", "ÄÅ", "³Î", "Èæ", "¶ì", "¿´", "»´", "߸",
- "Ç°", "ȯ", "Á°", "Âå", "̤", "ʹ", "¶õ", "¸å",
- "Ú¼", "¶â", "¿¹", "Íå", "Ëü", "¾Ý", "ÊÑ", "²½",
- "½½", "Ãæ", "Ȭ", "¶å", "¿Í", "¿§", "»î", "¹Ô",
- "ºø", "¸í", "»ö", "¼Â", "º¬", "µÛ", "¼ý", "¹ç",
- "Ê»", "Á´", "¹ñ", "À©", "ÇÆ", "¾Æ", "Æù", "Äê",
- "¿©", "¹ü", "²ç", "Ìø", "Èô", "æÆ", "Éõ", "°õ",
- "¼À", "Íð", "Éð", "¾", "·Ú", "Ǧ", "·õ", "ǽ",
- "À»", "¼Ù", "¼ö", "¼±", "¸¸", "´¶", "ÆÇ", "°Ç",
- "Íî", "±¢", "ÍÛ"
-};
-#else
-= {
- "a", "ab", "ag", "aks", "ala", "an", "ankh", "app",
- "arg", "arze", "ash", "aus", "ban", "bar", "bat", "bek",
- "bie", "bin", "bit", "bjor", "blu", "bot", "bu",
- "byt", "comp", "con", "cos", "cre", "dalf", "dan",
- "den", "der", "doe", "dok", "eep", "el", "eng", "er", "ere", "erk",
- "esh", "evs", "fa", "fid", "flit", "for", "fri", "fu", "gan",
- "gar", "glen", "gop", "gre", "ha", "he", "hyd", "i",
- "ing", "ion", "ip", "ish", "it", "ite", "iv", "jo",
- "kho", "kli", "klis", "la", "lech", "man", "mar",
- "me", "mi", "mic", "mik", "mon", "mung", "mur", "nag", "nej",
- "nelg", "nep", "ner", "nes", "nis", "nih", "nin", "o",
- "od", "ood", "org", "orn", "ox", "oxy", "pay", "pet",
- "ple", "plu", "po", "pot", "prok", "re", "rea", "rhov",
- "ri", "ro", "rog", "rok", "rol", "sa", "san", "sat",
- "see", "sef", "seh", "shu", "ski", "sna", "sne", "snik",
- "sno", "so", "sol", "sri", "sta", "sun", "ta", "tab",
- "tem", "ther", "ti", "tox", "trol", "tue", "turs", "u",
- "ulk", "um", "un", "uni", "ur", "val", "viv", "vly",
- "vom", "wah", "wed", "werg", "wex", "whon", "wun", "x",
- "yerg", "yp", "zun", "tri", "blaa", "jah", "bul", "on",
- "foo", "ju", "xuxu"
-};
-#endif
-
-
-/*
- * Hold the titles of scrolls, 6 to 14 characters each
- * Also keep an array of scroll colors (always WHITE for now)
- */
-static char scroll_adj[MAX_TITLES][16];
-
-static byte scroll_col[MAX_TITLES];
-
-
/*
* Certain items, if aware, are known instantly
* This function is used only by "flavor_init()"
case TV_DEATH_BOOK:
case TV_TRUMP_BOOK:
case TV_ARCANE_BOOK:
- case TV_ENCHANT_BOOK:
+ case TV_CRAFT_BOOK:
case TV_DAEMON_BOOK:
case TV_CRUSADE_BOOK:
case TV_MUSIC_BOOK:
case TV_HISSATSU_BOOK:
+ case TV_HEX_BOOK:
{
return (TRUE);
}
/*
- * Certain items have a flavor
- * This function is used only by "flavor_init()"
- */
-static bool object_flavor(int k_idx)
-{
- object_kind *k_ptr = &k_info[k_idx];
-
- /* Analyze the item */
- switch (k_ptr->tval)
- {
- case TV_AMULET:
- {
- return (0x80 + amulet_col[k_ptr->sval]);
- }
-
- case TV_RING:
- {
- return (0x90 + ring_col[k_ptr->sval]);
- }
-
- case TV_STAFF:
- {
- return (0xA0 + staff_col[k_ptr->sval]);
- }
-
- case TV_WAND:
- {
- return (0xB0 + wand_col[k_ptr->sval]);
- }
-
- case TV_ROD:
- {
- return (0xC0 + rod_col[k_ptr->sval]);
- }
-
- case TV_SCROLL:
- {
- return (0xD0 + scroll_col[k_ptr->sval]);
- }
-
- case TV_POTION:
- {
- return (0xE0 + potion_col[k_ptr->sval]);
- }
-
- case TV_FOOD:
- {
- if (k_ptr->sval < SV_FOOD_MIN_FOOD)
- {
- return (0xF0 + food_col[k_ptr->sval]);
- }
-
- break;
- }
- }
-
- /* No flavor */
- return (0);
-}
-
-
-/*
* Create a name from random parts.
*/
void get_table_name_aux(char *out_string)
get_rnd_line("aname_j.txt", 2, Syllable);
strcat(out_string, Syllable);
#else
+#define MAX_SYLLABLES 164 /* Used with scrolls (see below) */
+
+ static cptr syllables[MAX_SYLLABLES] = {
+ "a", "ab", "ag", "aks", "ala", "an", "ankh", "app",
+ "arg", "arze", "ash", "aus", "ban", "bar", "bat", "bek",
+ "bie", "bin", "bit", "bjor", "blu", "bot", "bu",
+ "byt", "comp", "con", "cos", "cre", "dalf", "dan",
+ "den", "der", "doe", "dok", "eep", "el", "eng", "er", "ere", "erk",
+ "esh", "evs", "fa", "fid", "flit", "for", "fri", "fu", "gan",
+ "gar", "glen", "gop", "gre", "ha", "he", "hyd", "i",
+ "ing", "ion", "ip", "ish", "it", "ite", "iv", "jo",
+ "kho", "kli", "klis", "la", "lech", "man", "mar",
+ "me", "mi", "mic", "mik", "mon", "mung", "mur", "nag", "nej",
+ "nelg", "nep", "ner", "nes", "nis", "nih", "nin", "o",
+ "od", "ood", "org", "orn", "ox", "oxy", "pay", "pet",
+ "ple", "plu", "po", "pot", "prok", "re", "rea", "rhov",
+ "ri", "ro", "rog", "rok", "rol", "sa", "san", "sat",
+ "see", "sef", "seh", "shu", "ski", "sna", "sne", "snik",
+ "sno", "so", "sol", "sri", "sta", "sun", "ta", "tab",
+ "tem", "ther", "ti", "tox", "trol", "tue", "turs", "u",
+ "ulk", "um", "un", "uni", "ur", "val", "viv", "vly",
+ "vom", "wah", "wed", "werg", "wex", "whon", "wun", "x",
+ "yerg", "yp", "zun", "tri", "blaa", "jah", "bul", "on",
+ "foo", "ju", "xuxu"
+ };
+
int testcounter = randint1(3) + 1;
strcpy(out_string, "");
/*
- * Create a name from random parts without quotes.
+ * Create a name from random parts with quotes.
*/
void get_table_name(char *out_string)
{
/*
+ * Make random Sindarin name
+ */
+void get_table_sindarin_aux(char *out_string)
+{
+ char Syllable[80];
+#ifdef JP
+ char tmp[80];
+#endif
+
+ get_rnd_line("sname.txt", 1, Syllable);
+#ifdef JP
+ strcpy(tmp, Syllable);
+#else
+ strcpy(out_string, Syllable);
+#endif
+
+ get_rnd_line("sname.txt", 2, Syllable);
+#ifdef JP
+ strcat(tmp, Syllable);
+ sindarin_to_kana(out_string, tmp);
+#else
+ strcat(out_string, Syllable);
+#endif
+}
+
+
+/*
+ * Make random Sindarin name with quotes
+ */
+void get_table_sindarin(char *out_string)
+{
+ char buff[80];
+ get_table_sindarin_aux(buff);
+
+#ifdef JP
+ sprintf(out_string, "¡Ø%s¡Ù", buff);
+#else
+ sprintf(out_string, "'%s'", buff);
+#endif
+}
+
+
+/*
+ * Shuffle flavor indices of a group of objects with given tval
+ */
+static void shuffle_flavors(byte tval)
+{
+ s16b *k_idx_list;
+ int k_idx_list_num = 0;
+ int i;
+
+ /* Allocate an array for a list of k_idx */
+ C_MAKE(k_idx_list, max_k_idx, s16b);
+
+ /* Search objects with given tval for shuffle */
+ for (i = 0; i < max_k_idx; i++)
+ {
+ object_kind *k_ptr = &k_info[i];
+
+ /* Skip non-Rings */
+ if (k_ptr->tval != tval) continue;
+
+ /* Paranoia -- Skip objects without flavor */
+ if (!k_ptr->flavor) continue;
+
+ /* Skip objects with a fixed flavor name */
+ if (have_flag(k_ptr->flags, TR_FIXED_FLAVOR)) continue;
+
+ /* Remember k_idx */
+ k_idx_list[k_idx_list_num] = i;
+
+ /* Increase number of remembered indices */
+ k_idx_list_num++;
+ }
+
+ /* Shuffle flavors */
+ for (i = 0; i < k_idx_list_num; i++)
+ {
+ object_kind *k1_ptr = &k_info[k_idx_list[i]];
+ object_kind *k2_ptr = &k_info[k_idx_list[randint0(k_idx_list_num)]];
+
+ /* Swap flavors of this pair */
+ s16b tmp = k1_ptr->flavor;
+ k1_ptr->flavor = k2_ptr->flavor;
+ k2_ptr->flavor = tmp;
+ }
+
+ /* Free an array for a list of k_idx */
+ C_KILL(k_idx_list, max_k_idx, s16b);
+}
+
+/*
* Prepare the "variable" part of the "k_info" array.
*
* The "color"/"metal"/"type" of an item is its "flavor".
*/
void flavor_init(void)
{
- int i, j;
-
- byte temp_col;
+ int i;
+ u32b state_backup[4];
- cptr temp_adj;
-
-
- /* Hack -- Use the "simple" RNG */
- Rand_quick = TRUE;
+ /* Hack -- Backup the RNG state */
+ Rand_state_backup(state_backup);
/* Hack -- Induce consistant flavors */
- Rand_value = seed_flavor;
-
-
- /* Efficiency -- Rods/Wands share initial array */
- for (i = 0; i < MAX_METALS; i++)
- {
- rod_adj[i] = wand_adj[i];
- rod_col[i] = wand_col[i];
- }
-
-
- /* Rings have "ring colors" */
- for (i = 0; i < MAX_ROCKS; i++)
- {
- j = randint0(MAX_ROCKS);
- temp_adj = ring_adj[i];
- ring_adj[i] = ring_adj[j];
- ring_adj[j] = temp_adj;
-
- temp_col = ring_col[i];
- ring_col[i] = ring_col[j];
- ring_col[j] = temp_col;
- }
-
- /* Hack -- The One Ring */
-#ifdef JP
- ring_adj[SV_RING_POWER] = "¶â̵¹¤¤Î";
- ring_adj[SV_RING_AHO] = "¶â͹¤¤Î";
-#else
- ring_adj[SV_RING_POWER] = "Plain Gold";
- ring_adj[SV_RING_AHO] = "Plain Goldarn";
-#endif
-
- if (!use_graphics)
- {
- ring_col[SV_RING_POWER] = TERM_YELLOW;
- ring_col[SV_RING_AHO] = TERM_YELLOW;
- }
+ Rand_state_init(seed_flavor);
- /* Amulets have "amulet colors" */
- for (i = 0; i < MAX_AMULETS; i++)
- {
- j = randint0(MAX_AMULETS);
- temp_adj = amulet_adj[i];
- amulet_adj[i] = amulet_adj[j];
- amulet_adj[j] = temp_adj;
-
- temp_col = amulet_col[i];
- amulet_col[i] = amulet_col[j];
- amulet_col[j] = temp_col;
- }
- /* Staffs */
- for (i = 0; i < MAX_WOODS; i++)
+ /* Initialize flavor index of each object by itself */
+ for (i = 0; i < max_k_idx; i++)
{
- j = randint0(MAX_WOODS);
- temp_adj = staff_adj[i];
- staff_adj[i] = staff_adj[j];
- staff_adj[j] = temp_adj;
-
- temp_col = staff_col[i];
- staff_col[i] = staff_col[j];
- staff_col[j] = temp_col;
- }
+ object_kind *k_ptr = &k_info[i];
- /* Wands */
- for (i = 0; i < MAX_METALS; i++)
- {
- j = randint0(MAX_METALS);
- temp_adj = wand_adj[i];
- wand_adj[i] = wand_adj[j];
- wand_adj[j] = temp_adj;
-
- temp_col = wand_col[i];
- wand_col[i] = wand_col[j];
- wand_col[j] = temp_col;
- }
+ /* Skip objects without flavor name */
+ if (!k_ptr->flavor_name) continue;
- /* Rods */
- for (i = 0; i < MAX_METALS; i++)
- {
- j = randint0(MAX_METALS);
- temp_adj = rod_adj[i];
- rod_adj[i] = rod_adj[j];
- rod_adj[j] = temp_adj;
-
- temp_col = rod_col[i];
- rod_col[i] = rod_col[j];
- rod_col[j] = temp_col;
+ /*
+ * Initialize flavor index to itself
+ * -> Shuffle it later
+ */
+ k_ptr->flavor = i;
}
- /* Foods (Mushrooms) */
- for (i = 0; i < MAX_SHROOM; i++)
- {
- j = randint0(MAX_SHROOM);
- temp_adj = food_adj[i];
- food_adj[i] = food_adj[j];
- food_adj[j] = temp_adj;
-
- temp_col = food_col[i];
- food_col[i] = food_col[j];
- food_col[j] = temp_col;
- }
+ /* Shuffle Rings */
+ shuffle_flavors(TV_RING);
- /* Potions */
- for (i = 4; i < MAX_COLORS; i++)
- {
- j = randint0(MAX_COLORS - 4) + 4;
- temp_adj = potion_adj[i];
- potion_adj[i] = potion_adj[j];
- potion_adj[j] = temp_adj;
-
- temp_col = potion_col[i];
- potion_col[i] = potion_col[j];
- potion_col[j] = temp_col;
- }
+ /* Shuffle Amulets */
+ shuffle_flavors(TV_AMULET);
- /* Scrolls (random titles, always white) */
- for (i = 0; i < MAX_TITLES; i++)
- {
- /* Get a new title */
- while (TRUE)
- {
- char buf[80];
+ /* Shuffle Staves */
+ shuffle_flavors(TV_STAFF);
- bool okay;
+ /* Shuffle Wands */
+ shuffle_flavors(TV_WAND);
- /* Start a new title */
- buf[0] = '\0';
+ /* Shuffle Rods */
+ shuffle_flavors(TV_ROD);
- /* Collect words until done */
- while (1)
- {
- int q, s;
+ /* Shuffle Mushrooms */
+ shuffle_flavors(TV_FOOD);
- char tmp[80];
+ /* Shuffle Potions */
+ shuffle_flavors(TV_POTION);
- /* Start a new word */
- tmp[0] = '\0';
+ /* Shuffle Scrolls */
+ shuffle_flavors(TV_SCROLL);
- /* Choose one or two syllables */
- s = ((randint0(100) < 30) ? 1 : 2);
- /* Add a one or two syllable word */
- for (q = 0; q < s; q++)
- {
- /* Add the syllable */
- strcat(tmp, syllables[randint0(MAX_SYLLABLES)]);
- }
-
- /* Stop before getting too long */
- if (strlen(buf) + 1 + strlen(tmp) > 15) break;
-
- /* Add a space */
- strcat(buf, " ");
-
- /* Add the word */
- strcat(buf, tmp);
- }
-
- /* Save the title */
- strcpy(scroll_adj[i], buf+1);
-
- /* Assume okay */
- okay = TRUE;
-
- /* Check for "duplicate" scroll titles */
- for (j = 0; j < i; j++)
- {
- cptr hack1 = scroll_adj[j];
- cptr hack2 = scroll_adj[i];
-
- /* Compare first four characters */
- if (*hack1++ != *hack2++) continue;
- if (*hack1++ != *hack2++) continue;
- if (*hack1++ != *hack2++) continue;
- if (*hack1++ != *hack2++) continue;
-
- /* Not okay */
- okay = FALSE;
-
- /* Stop looking */
- break;
- }
-
- /* Break when done */
- if (okay) break;
- }
-
- /* All scrolls are white */
- scroll_col[i] = TERM_WHITE;
- }
-
-
- /* Hack -- Use the "complex" RNG */
- Rand_quick = FALSE;
+ /* Hack -- Restore the RNG state */
+ Rand_state_restore(state_backup);
/* Analyze every object */
for (i = 1; i < max_k_idx; i++)
/* Skip "empty" objects */
if (!k_ptr->name) continue;
- /* Extract "flavor" (if any) */
- k_ptr->flavor = object_flavor(i);
-
/* No flavor yields aware */
if (!k_ptr->flavor) k_ptr->aware = TRUE;
case TV_DEATH_BOOK:
case TV_TRUMP_BOOK:
case TV_ARCANE_BOOK:
- case TV_ENCHANT_BOOK:
+ case TV_CRAFT_BOOK:
case TV_DAEMON_BOOK:
case TV_CRUSADE_BOOK:
case TV_MUSIC_BOOK:
case TV_HISSATSU_BOOK:
+ case TV_HEX_BOOK:
{
t = object_desc_str(t, "ºý");
break;
static flag_insc_table flag_insc_misc[] =
{
- { "ËâÎÏ", "Ma", TR_DEC_MANA, -1 },
+ { "°×", "Es", TR_EASY_SPELL, -1 },
+ { "¸º", "Dm", TR_DEC_MANA, -1 },
{ "Åê", "Th", TR_THROW, -1 },
{ "ȿ", "Rf", TR_REFLECT, -1 },
{ "Ëã", "Fa", TR_FREE_ACT, -1 },
{ "ÅÜ", "Ag", TR_AGGRAVATE, -1 },
{ "½Ë", "Bs", TR_BLESSED, -1 },
{ "´÷", "Ty", TR_TY_CURSE, -1 },
+ { "¼ö", "C-", TR_ADD_L_CURSE, -1 },
+ { "ëÇ", "C+", TR_ADD_H_CURSE, -1 },
{ NULL, NULL, 0, -1 }
};
static flag_insc_table flag_insc_misc[] =
{
- { "Ma", TR_DEC_MANA, -1 },
+ { "Es", TR_EASY_SPELL, -1 },
+ { "Dm", TR_DEC_MANA, -1 },
{ "Th", TR_THROW, -1 },
{ "Rf", TR_REFLECT, -1 },
{ "Fa", TR_FREE_ACT, -1 },
{ "Ag", TR_AGGRAVATE, -1 },
{ "Bs", TR_BLESSED, -1 },
{ "Ty", TR_TY_CURSE, -1 },
+ { "C-", TR_ADD_L_CURSE, -1 },
+ { "C+", TR_ADD_H_CURSE, -1 },
{ NULL, 0, -1 }
};
*ptr = '\0';
}
+bool object_is_quest_target(object_type *o_ptr)
+{
+ if (p_ptr->inside_quest)
+ {
+ int a_idx = quest[p_ptr->inside_quest].k_idx;
+ if (a_idx)
+ {
+ artifact_type *a_ptr = &a_info[a_idx];
+ if (!(a_ptr->gen_flags & TRG_INSTA_ART))
+ {
+ if((o_ptr->tval == a_ptr->tval) && (o_ptr->sval == a_ptr->sval))
+ {
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE;
+}
+
/*
* Creates a description of the item "o_ptr", and stores it in "out_val".
* OD_NO_PLURAL : Forbidden use of plural
* OD_STORE : Assume to be aware and known
* OD_NO_FLAVOR : Allow to hidden flavor
+ * OD_FORCE_FLAVOR : Get un-shuffled flavor name
*/
void object_desc(char *buf, object_type *o_ptr, u32b mode)
{
/* Assume no "modifier" string */
cptr modstr = "";
- /* Hack -- Extract the sub-type "indexx" */
- int indexx = o_ptr->sval;
-
int power;
+ int fire_rate;
bool aware = FALSE;
bool known = FALSE;
bool show_weapon = FALSE;
bool show_armour = FALSE;
- cptr s;
+ cptr s, s0;
char *t;
char p1 = '(', p2 = ')';
object_type *bow_ptr;
object_kind *k_ptr = &k_info[o_ptr->k_idx];
+ object_kind *flavor_k_ptr = &k_info[k_ptr->flavor];
/* Extract some flags */
object_flags(o_ptr, flgs);
known = TRUE;
}
+ /* Force to be flavor name only */
+ if (mode & OD_FORCE_FLAVOR)
+ {
+ aware = FALSE;
+ flavor = TRUE;
+ known = FALSE;
+
+ /* Cancel shuffling */
+ flavor_k_ptr = k_ptr;
+ }
+
/* Analyze the object */
switch (o_ptr->tval)
{
break;
}
-
/* Armour */
case TV_BOOTS:
case TV_GLOVES:
break;
}
-
/* Lites (including a few "Specials") */
case TV_LITE:
{
}
/* Color the object */
- modstr = amulet_adj[indexx];
+ modstr = k_name + flavor_k_ptr->flavor_name;
#ifdef JP
- if (!flavor) basenm = "%¤Î¥¢¥ß¥å¥ì¥Ã¥È";
- else if (aware) basenm = "%¤Î#¥¢¥ß¥å¥ì¥Ã¥È";
- else basenm = "#¥¢¥ß¥å¥ì¥Ã¥È";
+ if (!flavor) basenm = "%¤Î¥¢¥ß¥å¥ì¥Ã¥È";
+ else if (aware) basenm = "%¤Î#¥¢¥ß¥å¥ì¥Ã¥È";
+ else basenm = "#¥¢¥ß¥å¥ì¥Ã¥È";
#else
- if (!flavor) basenm = "& Amulet~ of %";
- else if (aware) basenm = "& # Amulet~ of %";
- else basenm = "& # Amulet~";
+ if (!flavor) basenm = "& Amulet~ of %";
+ else if (aware) basenm = "& # Amulet~ of %";
+ else basenm = "& # Amulet~";
#endif
break;
}
/* Color the object */
- modstr = ring_adj[indexx];
+ modstr = k_name + flavor_k_ptr->flavor_name;
#ifdef JP
- if (!flavor) basenm = "%¤Î»ØÎØ";
- else if (aware) basenm = "%¤Î#»ØÎØ";
- else basenm = "#»ØÎØ";
+ if (!flavor) basenm = "%¤Î»ØÎØ";
+ else if (aware) basenm = "%¤Î#»ØÎØ";
+ else basenm = "#»ØÎØ";
#else
- if (!flavor) basenm = "& Ring~ of %";
- else if (aware) basenm = "& # Ring~ of %";
- else basenm = "& # Ring~";
+ if (!flavor) basenm = "& Ring~ of %";
+ else if (aware) basenm = "& # Ring~ of %";
+ else basenm = "& # Ring~";
#endif
if (!k_ptr->to_h && !k_ptr->to_d && (o_ptr->to_h || o_ptr->to_d)) show_weapon = TRUE;
case TV_STAFF:
{
/* Color the object */
- modstr = staff_adj[indexx];
+ modstr = k_name + flavor_k_ptr->flavor_name;
#ifdef JP
- if (!flavor) basenm = "%¤Î¾ó";
- else if (aware) basenm = "%¤Î#¾ó";
- else basenm = "#¾ó";
+ if (!flavor) basenm = "%¤Î¾ó";
+ else if (aware) basenm = "%¤Î#¾ó";
+ else basenm = "#¾ó";
#else
- if (!flavor) basenm = "& Staff~ of %";
- else if (aware) basenm = "& # Staff~ of %";
- else basenm = "& # Staff~";
+ if (!flavor) basenm = "& Staff~ of %";
+ else if (aware) basenm = "& # Staff~ of %";
+ else basenm = "& # Staff~";
#endif
break;
case TV_WAND:
{
/* Color the object */
- modstr = wand_adj[indexx];
+ modstr = k_name + flavor_k_ptr->flavor_name;
#ifdef JP
- if (!flavor) basenm = "%¤ÎËâË¡ËÀ";
- else if (aware) basenm = "%¤Î#ËâË¡ËÀ";
- else basenm = "#ËâË¡ËÀ";
+ if (!flavor) basenm = "%¤ÎËâË¡ËÀ";
+ else if (aware) basenm = "%¤Î#ËâË¡ËÀ";
+ else basenm = "#ËâË¡ËÀ";
#else
if (!flavor) basenm = "& Wand~ of %";
else if (aware) basenm = "& # Wand~ of %";
case TV_ROD:
{
/* Color the object */
- modstr = rod_adj[indexx];
+ modstr = k_name + flavor_k_ptr->flavor_name;
#ifdef JP
if (!flavor) basenm = "%¤Î¥í¥Ã¥É";
else if (aware) basenm = "%¤Î#¥í¥Ã¥É";
- else basenm = "#¥í¥Ã¥É";
+ else basenm = "#¥í¥Ã¥É";
#else
- if (!flavor) basenm = "& Rod~ of %";
- else if (aware) basenm = "& # Rod~ of %";
- else basenm = "& # Rod~";
+ if (!flavor) basenm = "& Rod~ of %";
+ else if (aware) basenm = "& # Rod~ of %";
+ else basenm = "& # Rod~";
#endif
break;
case TV_SCROLL:
{
/* Color the object */
- modstr = scroll_adj[indexx];
+ modstr = k_name + flavor_k_ptr->flavor_name;
#ifdef JP
- if (!flavor) basenm = "%¤Î´¬Êª";
- else if (aware) basenm = "¡Ö#¡×¤È½ñ¤«¤ì¤¿%¤Î´¬Êª";
- else basenm = "¡Ö#¡×¤È½ñ¤«¤ì¤¿´¬Êª";
+ if (!flavor) basenm = "%¤Î´¬Êª";
+ else if (aware) basenm = "¡Ö#¡×¤È½ñ¤«¤ì¤¿%¤Î´¬Êª";
+ else basenm = "¡Ö#¡×¤È½ñ¤«¤ì¤¿´¬Êª";
#else
- if (!flavor) basenm = "& Scroll~ of %";
- else if (aware) basenm = "& Scroll~ titled \"#\" of %";
- else basenm = "& Scroll~ titled \"#\"";
+ if (!flavor) basenm = "& Scroll~ of %";
+ else if (aware) basenm = "& Scroll~ titled \"#\" of %";
+ else basenm = "& Scroll~ titled \"#\"";
#endif
break;
case TV_POTION:
{
/* Color the object */
- modstr = potion_adj[indexx];
+ modstr = k_name + flavor_k_ptr->flavor_name;
#ifdef JP
- if (!flavor) basenm = "%¤ÎÌô";
- else if (aware) basenm = "%¤Î#Ìô";
- else basenm = "#Ìô";
+ if (!flavor) basenm = "%¤ÎÌô";
+ else if (aware) basenm = "%¤Î#Ìô";
+ else basenm = "#Ìô";
#else
- if (!flavor) basenm = "& Potion~ of %";
- else if (aware) basenm = "& # Potion~ of %";
- else basenm = "& # Potion~";
+ if (!flavor) basenm = "& Potion~ of %";
+ else if (aware) basenm = "& # Potion~ of %";
+ else basenm = "& # Potion~";
#endif
break;
case TV_FOOD:
{
/* Ordinary food is "boring" */
- if (o_ptr->sval >= SV_FOOD_MIN_FOOD) break;
+ if (!k_ptr->flavor_name) break;
/* Color the object */
- modstr = food_adj[indexx];
+ modstr = k_name + flavor_k_ptr->flavor_name;
#ifdef JP
- if (!flavor) basenm = "%¤Î¥¥Î¥³";
- else if (aware) basenm = "%¤Î#¥¥Î¥³";
- else basenm = "#¥¥Î¥³";
+ if (!flavor) basenm = "%¤Î¥¥Î¥³";
+ else if (aware) basenm = "%¤Î#¥¥Î¥³";
+ else basenm = "#¥¥Î¥³";
#else
- if (!flavor) basenm = "& Mushroom~ of %";
- else if (aware) basenm = "& # Mushroom~ of %";
- else basenm = "& # Mushroom~";
+ if (!flavor) basenm = "& Mushroom~ of %";
+ else if (aware) basenm = "& # Mushroom~ of %";
+ else basenm = "& # Mushroom~";
#endif
break;
break;
}
- case TV_ENCHANT_BOOK:
+ case TV_CRAFT_BOOK:
{
#ifdef JP
basenm = "¾¢¤ÎËâË¡½ñ%";
break;
}
+ case TV_HEX_BOOK:
+ {
+#ifdef JP
+ basenm = "¼ö½Ñ¤ÎËâË¡½ñ%";
+#else
+ if (mp_ptr->spell_book == TV_LIFE_BOOK)
+ basenm = "& Book~ of Crusade Magic %";
+ else
+ basenm = "& Crusade Spellbook~ %";
+#endif
+
+ break;
+ }
+
/* Hack -- Gold/Gems */
case TV_GOLD:
{
}
/* Hack -- The only one of its kind */
- else if (known && object_is_artifact(o_ptr))
+ else if ((known && object_is_artifact(o_ptr)) ||
+ ((o_ptr->tval == TV_CORPSE) &&
+ (r_info[o_ptr->pval].flags1 & RF1_UNIQUE)))
{
t = object_desc_str(t, "The ");
}
- /* Unique corpses are unique */
- else if (o_ptr->tval == TV_CORPSE)
- {
- monster_race *r_ptr = &r_info[o_ptr->pval];
-
- if (r_ptr->flags1 & RF1_UNIQUE)
- {
- t = object_desc_str(t, "The ");
- }
- }
-
/* A single one */
else
{
#endif
/* Copy the string */
- for (; *s; s++)
+ for (s0 = NULL; *s || s0; )
{
- /* Insert the modifier (flavor) */
- if (*s == '#')
+ /* The end of the flavour/kind string. */
+ if (!*s)
+ {
+ s = s0 + 1;
+ s0 = NULL;
+ }
+
+ /* Begin to append the modifier (flavor) */
+ else if ((*s == '#') && !s0)
{
- t = object_desc_str(t, modstr);
+ s0 = s;
+ s = modstr;
- /* Paranoia -- Never append multiple modstr's */
+ /* Paranoia -- Never append multiple modstrs */
modstr = "";
}
- /* Append kind name */
- else if (*s == '%')
+ /* Begin to append the kind name */
+ else if ((*s == '%') && !s0)
{
- t = object_desc_str(t, kindname);
+ s0 = s;
+ s = kindname;
- /* Paranoia -- Never append multiple kindname's */
+ /* Paranoia -- Never append multiple kindnames */
kindname = "";
}
/* Add an 's' */
*t++ = 's';
}
+ s++;
}
#endif
else
{
/* Copy */
- *t++ = *s;
+ *t++ = *s++;
}
}
case TV_HAFTED:
case TV_POLEARM:
case TV_SWORD:
- case TV_DIGGING:
+ case TV_DIGGING:
+
+ /* In Vault Quest, hide the dice of target weapon. */
+ if(object_is_quest_target(o_ptr) && !known)
+ {
+ break;
+ }
/* Append a "damage" string */
t = object_desc_chr(t, ' ');
t = object_desc_chr(t, 'x');
t = object_desc_num(t, power);
t = object_desc_chr(t, p2);
-
+
+ fire_rate = calc_num_fire(o_ptr);
+ /* Show Fire rate */
+ if (fire_rate != 0 && power > 0 && known)
+ {
+ fire_rate = bow_energy(o_ptr->sval) / fire_rate;
+
+ t = object_desc_chr(t, ' ');
+ t = object_desc_chr(t, p1);
+ t = object_desc_num(t, fire_rate/100);
+ t = object_desc_chr(t, '.');
+ t = object_desc_num(t, fire_rate%100);
+ t = object_desc_str(t, "turn");
+ t = object_desc_chr(t, p2);
+ }
+
/* All done */
break;
}
/* Launcher multiplier */
avgdam *= tmul;
avgdam /= (100 * 10);
+
+ /* Get extra damage from concentration */
+ if (p_ptr->concent) avgdam = boost_concentration_damage(avgdam);
+
if (avgdam < 0) avgdam = 0;
- /* Display (shot damage/ avg damage) */
+ /* Display (shot damage/ shot damage with critical/ avg damage with critical) */
t = object_desc_chr(t, ' ');
t = object_desc_chr(t, p1);
+
+ if(show_ammo_no_crit)
+ {
+ /* Damage with no-crit */
+ t = object_desc_num(t, avgdam);
+ t = object_desc_str(t, show_ammo_detail ? "/shot " : "/");
+ }
+
+ /* Apply Expect damage of Critical */
+ avgdam = calc_expect_crit_shot(o_ptr->weight, o_ptr->to_h, bow_ptr->to_h, avgdam);
t = object_desc_num(t, avgdam);
- t = object_desc_chr(t, '/');
-
+
+ t = show_ammo_no_crit ? object_desc_str(t, show_ammo_detail ? "/crit " : "/")
+ : object_desc_str(t, show_ammo_detail ? "/shot " : "/");
+
if (p_ptr->num_fire == 0)
{
t = object_desc_chr(t, '0');
avgdam *= (p_ptr->num_fire * 100);
avgdam /= energy_fire;
t = object_desc_num(t, avgdam);
+ t = object_desc_str(t, show_ammo_detail ? "/turn" : "");
+
+ if(show_ammo_crit_ratio)
+ {
+ int percent = calc_crit_ratio_shot(o_ptr->weight,
+ known ? o_ptr->to_h : 0,
+ object_is_known(bow_ptr) ? bow_ptr->to_h : 0, avgdam);
+
+ t = object_desc_chr(t, '/');
+ t = object_desc_num(t, percent / 100);
+ t = object_desc_chr(t, '.');
+ t = object_desc_num(t, percent % 100);
+ t = object_desc_str(t, show_ammo_detail ? "% crit" : "%");
+ }
}
t = object_desc_chr(t, p2);
}
/* Note the discount, if any */
- if (o_ptr->discount)
+ if (o_ptr->discount)
{
/* Hidden by real inscription unless in a store */
if (!tmp_val2[0] || (o_ptr->ident & IDENT_STORE))
{
+ char discount_num_buf[4];
+
/* Append to other fake inscriptions if any */
if (fake_insc_buf[0]) strcat(fake_insc_buf, ", ");
- (void)object_desc_num(fake_insc_buf, o_ptr->discount);
+ (void)object_desc_num(discount_num_buf, o_ptr->discount);
+ strcat(fake_insc_buf, discount_num_buf);
#ifdef JP
strcat(fake_insc_buf, "%°ú¤");
#else