-/* Purpose: Object flavor code */
-
-/*
- * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
- *
- * This software may be copied and distributed for educational, research, and
- * not for profit purposes provided that this copyright and statement are
- * included in all such copies.
+/*!
+ * @file flavor.c
+ * @brief オブジェクトの記述処理 / Mbject flavor code
+ * @date 2014/01/03
+ * @author
+ * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke\n
+ *\n
+ * This software may be copied and distributed for educational, research,\n
+ * and not for profit purposes provided that this copyright and statement\n
+ * are included in all such copies. Other copyrights may also apply.\n
*/
#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 26 /* 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"
-};
-#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
-};
-
-
-/*
- * 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
+/*!
+ * @brief 最初から簡易な名称が明らかになるベースアイテムの判定。 / Certain items, if aware, are known instantly
+ * @param i ベースアイテムID
+ * @return 簡易名称を明らかにするならTRUEを返す。
+ * @details
* This function is used only by "flavor_init()"
*/
static bool object_easy_know(int i)
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);
}
}
}
- /* Nope */
return (FALSE);
}
-
-/*
- * Certain items have a flavor
- * This function is used only by "flavor_init()"
+/*!
+ * @brief 各種語彙からランダムな名前を作成する / Create a name from random parts.
+ * @param out_string 作成した名を保管する参照ポインタ
+ * @return なし
+ * @details 日本語の場合 aname_j.txt 英語の場合確率に応じて
+ * syllables 配列と elvish.txt を組み合わせる。\n
*/
-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);
-}
-
-
-void get_table_name(char *out_string)
+void get_table_name_aux(char *out_string)
{
#ifdef JP
- char Syllable[80];
- strcpy(out_string, "¡Ø");
+ char Syllable[80];
get_rnd_line("aname_j.txt", 1, Syllable);
- strcat(out_string, Syllable);
+ strcpy(out_string, Syllable);
get_rnd_line("aname_j.txt", 2, Syllable);
strcat(out_string, Syllable);
- strcat(out_string, "¡Ù");
#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, "'");
+ strcpy(out_string, "");
if (randint1(3) == 2)
{
}
}
- out_string[1] = toupper(out_string[1]);
+ out_string[0] = toupper(out_string[1]);
- strcat(out_string, "'");
+ out_string[16] = '\0';
#endif
-
-
- out_string[18] = '\0';
-
- return;
}
-
-/*
- * Prepare the "variable" part of the "k_info" array.
- *
- * The "color"/"metal"/"type" of an item is its "flavor".
- * For the most part, flavors are assigned randomly each game.
- *
- * Initialize descriptions for the "colored" objects, including:
- * Rings, Amulets, Staffs, Wands, Rods, Food, Potions, Scrolls.
- *
- * The first 4 entries for potions are fixed (Water, Apple Juice,
- * Slime Mold Juice, Unused Potion).
- *
- * Scroll titles are always between 6 and 14 letters long. This is
- * ensured because every title is composed of whole words, where every
- * word is from 1 to 8 letters long (one or two syllables of 1 to 4
- * letters each), and that no scroll is finished until it attempts to
- * grow beyond 15 letters. The first time this can happen is when the
- * current title has 6 letters and the new word has 8 letters, which
- * would result in a 6 letter scroll title.
- *
- * Duplicate titles are avoided by requiring that no two scrolls share
- * the same first four letters (not the most efficient method, and not
- * the least efficient method, but it will always work).
- *
- * Hack -- make sure everything stays the same for each saved game
- * This is accomplished by the use of a saved "random seed", as in
- * "town_gen()". Since no other functions are called while the special
- * seed is in effect, so this function is pretty "safe".
- *
- * Note that the "hacked seed" may provide an RNG with alternating parity!
+/*!
+ * @brief ランダムな名前をアーティファクト銘として整形する。 / Create a name from random parts with quotes.
+ * @param out_string 作成した名を保管する参照ポインタ
+ * @return なし
+ * @details get_table_name_aux()ほぼ完全に実装を依存している。
*/
-void flavor_init(void)
+void get_table_name(char *out_string)
{
- int i, j;
-
- byte temp_col;
+ char buff[80];
+ get_table_name_aux(buff);
+ sprintf(out_string, _("『%s』", "'%s'"), buff);
+}
- cptr temp_adj;
+/*!
+ * @brief ランダムなシンダリン銘を作成する / Make random Sindarin name
+ * @param out_string 作成した名を保管する参照ポインタ
+ * @return なし
+ * @details sname.txtが語幹の辞書となっている。
+ */
+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
- /* Hack -- Use the "simple" RNG */
- Rand_quick = TRUE;
+ get_rnd_line("sname.txt", 2, Syllable);
+#ifdef JP
+ strcat(tmp, Syllable);
+ sindarin_to_kana(out_string, tmp);
+#else
+ strcat(out_string, Syllable);
+#endif
+}
- /* Hack -- Induce consistant flavors */
- Rand_value = seed_flavor;
+/*!
+ * @brief シンダリン銘をアーティファクト用に整形する。 / Make random Sindarin name with quotes
+ * @param out_string 作成した名を保管する参照ポインタ
+ * @return なし
+ * @details get_table_sindarin_aux()ほぼ完全に実装を依存している。
+ */
+void get_table_sindarin(char *out_string)
+{
+ char buff[80];
+ get_table_sindarin_aux(buff);
+ sprintf(out_string, _("『%s』", "'%s'"), buff);
+}
- /* 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];
- }
+/*!
+ * @brief ベースアイテムの未確定名を共通tval間でシャッフルする / Shuffle flavor indices of a group of objects with given tval
+ * @param tval シャッフルしたいtval
+ * @return なし
+ * @details 巻物、各種魔道具などに利用される。
+ */
+static void shuffle_flavors(OBJECT_TYPE_VALUE tval)
+{
+ IDX *k_idx_list;
+ IDX k_idx_list_num = 0;
+ IDX i;
+ /* Allocate an array for a list of k_idx */
+ C_MAKE(k_idx_list, max_k_idx, s16b);
- /* Rings have "ring colors" */
- for (i = 0; i < MAX_ROCKS; i++)
+ /* Search objects with given tval for shuffle */
+ for (i = 0; i < max_k_idx; 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
+ object_kind *k_ptr = &k_info[i];
- if (!use_graphics)
- {
- ring_col[SV_RING_POWER] = TERM_YELLOW;
- ring_col[SV_RING_AHO] = TERM_YELLOW;
- }
+ /* Skip non-Rings */
+ if (k_ptr->tval != tval) continue;
- /* 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;
- }
+ /* Paranoia -- Skip objects without flavor */
+ if (!k_ptr->flavor) continue;
- /* Staffs */
- for (i = 0; i < MAX_WOODS; 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;
- }
+ /* Skip objects with a fixed flavor name */
+ if (have_flag(k_ptr->flags, TR_FIXED_FLAVOR)) continue;
- /* 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;
- }
+ /* Remember k_idx */
+ k_idx_list[k_idx_list_num] = i;
- /* 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;
+ /* Increase number of remembered indices */
+ k_idx_list_num++;
}
- /* Foods (Mushrooms) */
- for (i = 0; i < MAX_SHROOM; i++)
+ /* Shuffle flavors */
+ for (i = 0; i < k_idx_list_num; 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;
- }
+ object_kind *k1_ptr = &k_info[k_idx_list[i]];
+ object_kind *k2_ptr = &k_info[k_idx_list[randint0(k_idx_list_num)]];
- /* 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;
+ /* Swap flavors of this pair */
+ s16b tmp = k1_ptr->flavor;
+ k1_ptr->flavor = k2_ptr->flavor;
+ k2_ptr->flavor = tmp;
}
- /* Scrolls (random titles, always white) */
- for (i = 0; i < MAX_TITLES; i++)
- {
- /* Get a new title */
- while (TRUE)
- {
- char buf[80];
-
- bool okay;
-
- /* Start a new title */
- buf[0] = '\0';
-
- /* Collect words until done */
- while (1)
- {
- int q, s;
+ /* Free an array for a list of k_idx */
+ C_KILL(k_idx_list, max_k_idx, s16b);
+}
- char tmp[80];
+/*!
+ * @brief ゲーム開始時に行われるベースアイテムの初期化ルーチン / Prepare the "variable" part of the "k_info" array.
+ * @return なし
+ * @details
+ * Prepare the "variable" part of the "k_info" array.\n
+ *\n
+ * The "color"/"metal"/"type" of an item is its "flavor".\n
+ * For the most part, flavors are assigned randomly each game.\n
+ *\n
+ * Initialize descriptions for the "colored" objects, including:\n
+ * Rings, Amulets, Staffs, Wands, Rods, Food, Potions, Scrolls.\n
+ *\n
+ * The first 4 entries for potions are fixed (Water, Apple Juice,\n
+ * Slime Mold Juice, Unused Potion).\n
+ *\n
+ * Scroll titles are always between 6 and 14 letters long. This is\n
+ * ensured because every title is composed of whole words, where every\n
+ * word is from 1 to 8 letters long (one or two syllables of 1 to 4\n
+ * letters each), and that no scroll is finished until it attempts to\n
+ * grow beyond 15 letters. The first time this can happen is when the\n
+ * current title has 6 letters and the new word has 8 letters, which\n
+ * would result in a 6 letter scroll title.\n
+ *\n
+ * Duplicate titles are avoided by requiring that no two scrolls share\n
+ * the same first four letters (not the most efficient method, and not\n
+ * the least efficient method, but it will always work).\n
+ *\n
+ * Hack -- make sure everything stays the same for each saved game\n
+ * This is accomplished by the use of a saved "random seed", as in\n
+ * "town_gen()". Since no other functions are called while the special\n
+ * seed is in effect, so this function is pretty "safe".\n
+ *\n
+ * Note that the "hacked seed" may provide an RNG with alternating parity!\n
+ */
+void flavor_init(void)
+{
+ KIND_OBJECT_IDX i;
+ u32b state_backup[4];
- /* Start a new word */
- tmp[0] = '\0';
+ /* Hack -- Backup the RNG state */
+ Rand_state_backup(state_backup);
- /* Choose one or two syllables */
- s = ((randint0(100) < 30) ? 1 : 2);
+ /* Hack -- Induce consistant flavors */
+ Rand_state_set(seed_flavor);
- /* 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;
+ /* Initialize flavor index of each object by itself */
+ for (i = 0; i < max_k_idx; i++)
+ {
+ object_kind *k_ptr = &k_info[i];
- /* Add a space */
- strcat(buf, " ");
+ /* Skip objects without flavor name */
+ if (!k_ptr->flavor_name) continue;
- /* Add the word */
- strcat(buf, tmp);
- }
+ /*
+ * Initialize flavor index to itself
+ * -> Shuffle it later
+ */
+ k_ptr->flavor = i;
+ }
- /* Save the title */
- strcpy(scroll_adj[i], buf+1);
+ /* Shuffle Rings */
+ shuffle_flavors(TV_RING);
- /* Assume okay */
- okay = TRUE;
+ /* Shuffle Amulets */
+ shuffle_flavors(TV_AMULET);
- /* Check for "duplicate" scroll titles */
- for (j = 0; j < i; j++)
- {
- cptr hack1 = scroll_adj[j];
- cptr hack2 = scroll_adj[i];
+ /* Shuffle Staves */
+ shuffle_flavors(TV_STAFF);
- /* Compare first four characters */
- if (*hack1++ != *hack2++) continue;
- if (*hack1++ != *hack2++) continue;
- if (*hack1++ != *hack2++) continue;
- if (*hack1++ != *hack2++) continue;
+ /* Shuffle Wands */
+ shuffle_flavors(TV_WAND);
- /* Not okay */
- okay = FALSE;
+ /* Shuffle Rods */
+ shuffle_flavors(TV_ROD);
- /* Stop looking */
- break;
- }
+ /* Shuffle Mushrooms */
+ shuffle_flavors(TV_FOOD);
- /* Break when done */
- if (okay) break;
- }
+ /* Shuffle Potions */
+ shuffle_flavors(TV_POTION);
- /* All scrolls are white */
- scroll_col[i] = TERM_WHITE;
- }
+ /* Shuffle Scrolls */
+ shuffle_flavors(TV_SCROLL);
- /* 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;
}
-/*
- * Print a char "c" into a string "t", as if by sprintf(t, "%c", c),
- * and return a pointer to the terminator (t + 1).
+/*!
+ * @brief 対象文字配列に一文字だけをコピーする。
+ * @param t 保管先文字列ポインタ
+ * @param c 保管したい1文字
+ * @return なし
+ * @details
+ * Print a char "c" into a string "t", as if by sprintf(t, "%c", c),\n
+ * and return a pointer to the terminator (t + 1).\n
*/
static char *object_desc_chr(char *t, char c)
{
return (t);
}
-
-/*
+/*!
+ * @brief 対象文字配列に文字列をコピーする。
+ * @param t 保管先文字列ポインタ
+ * @param s コピーしたい文字列ポインタ
+ * @return 保管先の末尾アドレス
+ * @details
* Print a string "s" into a string "t", as if by strcpy(t, s),
* and return a pointer to the terminator.
*/
return (t);
}
-
-
-/*
+/*!
+ * @brief 対象文字配列に符号なし整数値をコピーする。
+ * @param t 保管先文字列ポインタ
+ * @param n コピーしたい数値
+ * @return なし
+ * @details
* Print an unsigned number "n" into a string "t", as if by
* sprintf(t, "%u", n), and return a pointer to the terminator.
*/
#ifdef JP
-/*
- * ÆüËܸì¤Î¸Ä¿ôɽ¼¨¥ë¡¼¥Á¥ó
- *¡Êcmd1.c ¤ÇήÍѤ¹¤ë¤¿¤á¤Ë object_desc_japanese ¤«¤é°ÜÆ°¤·¤¿¡£¡Ë
+/*!
+ * @brief 日本語の個数表示ルーチン
+ * @param t 保管先文字列ポインタ
+ * @param o_ptr 記述したいオブジェクトの構造体参照ポインタ
+ * @return なし
+ * @details
+ * cmd1.c で流用するために object_desc_japanese から移動した。
*/
-
char *object_desc_kosuu(char *t, object_type *o_ptr)
{
t = object_desc_num(t, o_ptr->number);
case TV_ROD:
case TV_DIGGING:
{
- t = object_desc_str(t, "ËÜ");
+ t = object_desc_str(t, "本");
break;
}
case TV_SCROLL:
{
- t = object_desc_str(t, "´¬");
+ t = object_desc_str(t, "巻");
break;
}
case TV_POTION:
{
- t = object_desc_str(t, "Éþ");
+ t = object_desc_str(t, "服");
break;
}
case TV_LIFE_BOOK:
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, "ºý");
+ t = object_desc_str(t, "冊");
break;
}
case TV_SOFT_ARMOR:
case TV_DRAG_ARMOR:
case TV_CLOAK:
{
- t = object_desc_str(t, "Ãå");
+ t = object_desc_str(t, "着");
break;
}
case TV_SWORD:
case TV_HAFTED:
case TV_BOW:
{
- t = object_desc_str(t, "¿¶");
+ t = object_desc_str(t, "振");
break;
}
case TV_BOOTS:
{
- t = object_desc_str(t, "");
+ t = object_desc_str(t, "足");
break;
}
case TV_CARD:
{
- t = object_desc_str(t, "Ëç");
+ t = object_desc_str(t, "枚");
break;
}
- /* ¿©¤Ù¤â¤Î by ita */
+ /* 食べもの by ita */
case TV_FOOD:
{
if(o_ptr->sval == SV_FOOD_JERKY)
- {
- t = object_desc_str(t, "ÀÚ¤ì");
+ {
+ t = object_desc_str(t, "切れ");
break;
}
}
{
if (o_ptr->number < 10)
{
- t = object_desc_str(t, "¤Ä");
+ t = object_desc_str(t, "つ");
}
else
{
- t = object_desc_str(t, "¸Ä");
+ t = object_desc_str(t, "個");
}
break;
}
}
#endif
-/*
+/*!
+ * @brief 対象文字配列に符号あり整数値をコピーする。
+ * @param t 保管先文字列ポインタ
+ * @param v コピーしたい数値
+ * @return なし
+ * @details
* Print an signed number "v" into a string "t", as if by
* sprintf(t, "%+d", n), and return a pointer to the terminator.
* Note that we always print a sign, either "+" or "-".
}
-/*
- * Structs and tables for Auto Inscription for flags
+/*!
+ * オブジェクトの特性表示記号テーブルの構造体 / Structs and tables for Auto Inscription for flags
*/
-
typedef struct flag_insc_table
{
#ifdef JP
#endif
cptr english;
int flag;
- u32b except_flag;
+ int except_flag;
} flag_insc_table;
#ifdef JP
+/*! オブジェクトの特性表示記号テーブルの定義(pval要素) */
static flag_insc_table flag_insc_plus[] =
{
- { "¹¶", "At", TR_BLOWS, -1 },
- { "®", "Sp", TR_SPEED, -1 },
- { "ÏÓ", "St", TR_STR, -1 },
- { "ÃÎ", "In", TR_INT, -1 },
- { "¸", "Wi", TR_WIS, -1 },
- { "´ï", "Dx", TR_DEX, -1 },
- { "ÂÑ", "Cn", TR_CON, -1 },
- { "̥", "Ch", TR_CHR, -1 },
- { "±£", "Sl", TR_STEALTH, -1 },
- { "õ", "Sr", TR_SEARCH, -1 },
- { "ÀÖ", "If", TR_INFRA, -1 },
- { "·¡", "Dg", TR_TUNNEL, -1 },
+ { "攻", "At", TR_BLOWS, -1 },
+ { "速", "Sp", TR_SPEED, -1 },
+ { "腕", "St", TR_STR, -1 },
+ { "知", "In", TR_INT, -1 },
+ { "賢", "Wi", TR_WIS, -1 },
+ { "器", "Dx", TR_DEX, -1 },
+ { "耐", "Cn", TR_CON, -1 },
+ { "魅", "Ch", TR_CHR, -1 },
+ { "道", "Md", TR_MAGIC_MASTERY, -1 },
+ { "隠", "Sl", TR_STEALTH, -1 },
+ { "探", "Sr", TR_SEARCH, -1 },
+ { "赤", "If", TR_INFRA, -1 },
+ { "掘", "Dg", TR_TUNNEL, -1 },
{ NULL, NULL, 0, -1 }
};
+/*! オブジェクトの特性表示記号テーブルの定義(免疫) */
static flag_insc_table flag_insc_immune[] =
{
- { "»À", "Ac", TR_IM_ACID, -1 },
- { "ÅÅ", "El", TR_IM_ELEC, -1 },
- { "²Ð", "Fi", TR_IM_FIRE, -1 },
- { "Îä", "Co", TR_IM_COLD, -1 },
+ { "酸", "Ac", TR_IM_ACID, -1 },
+ { "電", "El", TR_IM_ELEC, -1 },
+ { "火", "Fi", TR_IM_FIRE, -1 },
+ { "冷", "Co", TR_IM_COLD, -1 },
{ NULL, NULL, 0, -1 }
};
+/*! オブジェクトの特性表示記号テーブルの定義(耐性) */
static flag_insc_table flag_insc_resistance[] =
{
- { "»À", "Ac", TR_RES_ACID, TR_IM_ACID },
- { "ÅÅ", "El", TR_RES_ELEC, TR_IM_ELEC },
- { "²Ð", "Fi", TR_RES_FIRE, TR_IM_FIRE },
- { "Îä", "Co", TR_RES_COLD, TR_IM_COLD },
- { "ÆÇ", "Po", TR_RES_POIS, -1 },
- { "Á®", "Li", TR_RES_LITE, -1 },
- { "°Å", "Dk", TR_RES_DARK, -1 },
- { "ÇË", "Sh", TR_RES_SHARDS, -1 },
- { "ÌÕ", "Bl", TR_RES_BLIND, -1 },
- { "Íð", "Cf", TR_RES_CONF, -1 },
- { "¹ì", "So", TR_RES_SOUND, -1 },
- { "¹ö", "Nt", TR_RES_NETHER, -1 },
- { "°ø", "Nx", TR_RES_NEXUS, -1 },
- { "ÆÙ", "Ca", TR_RES_CHAOS, -1 },
- { "Îô", "Di", TR_RES_DISEN, -1 },
- { "¶²", "Fe", TR_RES_FEAR, -1 },
+ { "酸", "Ac", TR_RES_ACID, TR_IM_ACID },
+ { "電", "El", TR_RES_ELEC, TR_IM_ELEC },
+ { "火", "Fi", TR_RES_FIRE, TR_IM_FIRE },
+ { "冷", "Co", TR_RES_COLD, TR_IM_COLD },
+ { "毒", "Po", TR_RES_POIS, -1 },
+ { "閃", "Li", TR_RES_LITE, -1 },
+ { "暗", "Dk", TR_RES_DARK, -1 },
+ { "破", "Sh", TR_RES_SHARDS, -1 },
+ { "盲", "Bl", TR_RES_BLIND, -1 },
+ { "乱", "Cf", TR_RES_CONF, -1 },
+ { "轟", "So", TR_RES_SOUND, -1 },
+ { "獄", "Nt", TR_RES_NETHER, -1 },
+ { "因", "Nx", TR_RES_NEXUS, -1 },
+ { "沌", "Ca", TR_RES_CHAOS, -1 },
+ { "劣", "Di", TR_RES_DISEN, -1 },
+ { "恐", "Fe", TR_RES_FEAR, -1 },
{ NULL, NULL, 0, -1 }
};
+/*! オブジェクトの特性表示記号テーブルの定義(その他特性) */
static flag_insc_table flag_insc_misc[] =
{
- { "ËâÎÏ", "Ma", TR_DEC_MANA, -1 },
- { "Åê", "Th", TR_THROW, -1 },
- { "ȿ", "Rf", TR_REFLECT, -1 },
- { "Ëã", "Fa", TR_FREE_ACT, -1 },
- { "ȑ", "Si", TR_SEE_INVIS, -1 },
- { "·Ð", "Hl", TR_HOLD_LIFE, -1 },
- { "ÃÙ", "Sd", TR_SLOW_DIGEST, -1 },
- { "³è", "Rg", TR_REGEN, -1 },
- { "Éâ", "Lv", TR_FEATHER, -1 },
- { "ÌÀ", "Lu", TR_LITE, -1 },
- { "·Ù", "Wr", TR_WARNING, -1 },
- { "ÇÜ", "Xm", TR_XTRA_MIGHT, -1 },
- { "¼Í", "Xs", TR_XTRA_SHOTS, -1 },
- { "ÅÜ", "Ag", TR_AGGRAVATE, -1 },
- { "½Ë", "Bs", TR_BLESSED, -1 },
- { "´÷", "Ty", TR_TY_CURSE, -1 },
+ { "易", "Es", TR_EASY_SPELL, -1 },
+ { "減", "Dm", TR_DEC_MANA, -1 },
+ { "投", "Th", TR_THROW, -1 },
+ { "反", "Rf", TR_REFLECT, -1 },
+ { "麻", "Fa", TR_FREE_ACT, -1 },
+ { "視", "Si", TR_SEE_INVIS, -1 },
+ { "経", "Hl", TR_HOLD_EXP, -1 },
+ { "遅", "Sd", TR_SLOW_DIGEST, -1 },
+ { "活", "Rg", TR_REGEN, -1 },
+ { "浮", "Lv", TR_LEVITATION, -1 },
+ { "明", "Lu", TR_LITE_1, -1 },
+ { "明", "Lu", TR_LITE_2, -1 },
+ { "明", "Lu", TR_LITE_3, -1 },
+ { "闇", "Dl", TR_LITE_M1, -1 },
+ { "闇", "Dl", TR_LITE_M2, -1 },
+ { "闇", "Dl", TR_LITE_M3, -1 },
+ { "警", "Wr", TR_WARNING, -1 },
+ { "倍", "Xm", TR_XTRA_MIGHT, -1 },
+ { "射", "Xs", TR_XTRA_SHOTS, -1 },
+ { "瞬", "Te", TR_TELEPORT, -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_aura[] =
{
- { "±ê", "F", TR_SH_FIRE, -1 },
- { "ÅÅ", "E", TR_SH_ELEC, -1 },
- { "Îä", "C", TR_SH_COLD, -1 },
- { "Ëâ", "M", TR_NO_MAGIC, -1 },
- { "½Ö", "T", TR_NO_TELE, -1 },
+ { "炎", "F", TR_SH_FIRE, -1 },
+ { "電", "E", TR_SH_ELEC, -1 },
+ { "冷", "C", TR_SH_COLD, -1 },
+ { "魔", "M", TR_NO_MAGIC, -1 },
+ { "瞬", "T", TR_NO_TELE, -1 },
{ NULL, NULL, 0, -1 }
};
+/*! オブジェクトの特性表示記号テーブルの定義(属性スレイ) */
static flag_insc_table flag_insc_brand[] =
{
- { "»À", "A", TR_BRAND_ACID, -1 },
- { "ÅÅ", "E", TR_BRAND_ELEC, -1 },
- { "¾Æ", "F", TR_BRAND_FIRE, -1 },
- { "Åà", "Co", TR_BRAND_COLD, -1 },
- { "ÆÇ", "P", TR_BRAND_POIS, -1 },
- { "ÆÙ", "Ca", TR_CHAOTIC, -1 },
- { "µÛ", "V", TR_VAMPIRIC, -1 },
- { "¿Ì", "Q", TR_IMPACT, -1 },
- { "ÀÚ", "S", TR_VORPAL, -1 },
- { "Íý", "M", TR_FORCE_WEAPON, -1 },
+ { "酸", "A", TR_BRAND_ACID, -1 },
+ { "電", "E", TR_BRAND_ELEC, -1 },
+ { "焼", "F", TR_BRAND_FIRE, -1 },
+ { "凍", "Co", TR_BRAND_COLD, -1 },
+ { "毒", "P", TR_BRAND_POIS, -1 },
+ { "沌", "Ca", TR_CHAOTIC, -1 },
+ { "吸", "V", TR_VAMPIRIC, -1 },
+ { "震", "Q", TR_IMPACT, -1 },
+ { "切", "S", TR_VORPAL, -1 },
+ { "理", "M", TR_FORCE_WEAPON, -1 },
{ NULL, NULL, 0, -1 }
};
+/*! オブジェクトの特性表示記号テーブルの定義(種族スレイ) */
static flag_insc_table flag_insc_kill[] =
{
- { "¼Ù", "*", TR_KILL_EVIL, -1 },
- { "¿Í", "p", TR_KILL_HUMAN, -1 },
- { "ζ", "D", TR_KILL_DRAGON, -1 },
- { "¥ª", "o", TR_KILL_ORC, -1 },
- { "¥È", "T", TR_KILL_TROLL, -1 },
- { "µð", "P", TR_KILL_GIANT, -1 },
- { "¥Ç", "U", TR_KILL_DEMON, -1 },
- { "Ȉ", "L", TR_KILL_UNDEAD, -1 },
- { "ư", "Z", TR_KILL_ANIMAL, -1 },
+ { "邪", "*", TR_KILL_EVIL, -1 },
+ { "人", "p", TR_KILL_HUMAN, -1 },
+ { "龍", "D", TR_KILL_DRAGON, -1 },
+ { "ã\82ª", "o", TR_KILL_ORC, -1 },
+ { "ト", "T", TR_KILL_TROLL, -1 },
+ { "巨", "P", TR_KILL_GIANT, -1 },
+ { "デ", "U", TR_KILL_DEMON, -1 },
+ { "死", "L", TR_KILL_UNDEAD, -1 },
+ { "動", "Z", TR_KILL_ANIMAL, -1 },
{ NULL, NULL, 0, -1 }
};
+/*! オブジェクトの特性表示記号テーブルの定義(種族*スレイ*) */
static flag_insc_table flag_insc_slay[] =
{
- { "¼Ù", "*", TR_SLAY_EVIL, TR_KILL_EVIL },
- { "¿Í", "p", TR_SLAY_HUMAN, TR_KILL_HUMAN },
- { "ε", "D", TR_SLAY_DRAGON, TR_KILL_DRAGON },
- { "¥ª", "o", TR_SLAY_ORC, TR_KILL_ORC },
- { "¥È", "T", TR_SLAY_TROLL, TR_KILL_TROLL },
- { "µð", "P", TR_SLAY_GIANT, TR_KILL_GIANT },
- { "¥Ç", "U", TR_SLAY_DEMON, TR_KILL_DEMON },
- { "Ȉ", "L", TR_SLAY_UNDEAD, TR_KILL_UNDEAD },
- { "ư", "Z", TR_SLAY_ANIMAL, TR_KILL_ANIMAL },
+ { "邪", "*", TR_SLAY_EVIL, TR_KILL_EVIL },
+ { "人", "p", TR_SLAY_HUMAN, TR_KILL_HUMAN },
+ { "竜", "D", TR_SLAY_DRAGON, TR_KILL_DRAGON },
+ { "ã\82ª", "o", TR_SLAY_ORC, TR_KILL_ORC },
+ { "ト", "T", TR_SLAY_TROLL, TR_KILL_TROLL },
+ { "巨", "P", TR_SLAY_GIANT, TR_KILL_GIANT },
+ { "デ", "U", TR_SLAY_DEMON, TR_KILL_DEMON },
+ { "死", "L", TR_SLAY_UNDEAD, TR_KILL_UNDEAD },
+ { "動", "Z", TR_SLAY_ANIMAL, TR_KILL_ANIMAL },
{ NULL, NULL, 0, -1 }
};
+/*! オブジェクトの特性表示記号テーブルの定義(ESP1) */
static flag_insc_table flag_insc_esp1[] =
{
- { "´¶", "Tele", TR_TELEPATHY, -1 },
- { "¼Ù", "Evil", TR_ESP_EVIL, -1 },
- { "Á±", "Good", TR_ESP_GOOD, -1 },
- { "̵", "Nolv", TR_ESP_NONLIVING, -1 },
- { "¸Ä", "Uniq", TR_ESP_UNIQUE, -1 },
+ { "感", "Tele", TR_TELEPATHY, -1 },
+ { "邪", "Evil", TR_ESP_EVIL, -1 },
+ { "善", "Good", TR_ESP_GOOD, -1 },
+ { "無", "Nolv", TR_ESP_NONLIVING, -1 },
+ { "個", "Uniq", TR_ESP_UNIQUE, -1 },
{ NULL, NULL, 0, -1 }
};
+/*! オブジェクトの特性表示記号テーブルの定義(ESP2) */
static flag_insc_table flag_insc_esp2[] =
{
- { "¿Í", "p", TR_ESP_HUMAN, -1 },
- { "ε", "D", TR_ESP_DRAGON, -1 },
- { "¥ª", "o", TR_ESP_ORC, -1 },
- { "¥È", "T", TR_ESP_TROLL, -1 },
- { "µð", "P", TR_ESP_GIANT, -1 },
- { "¥Ç", "U", TR_ESP_DEMON, -1 },
- { "Ȉ", "L", TR_ESP_UNDEAD, -1 },
- { "ư", "Z", TR_ESP_ANIMAL, -1 },
+ { "人", "p", TR_ESP_HUMAN, -1 },
+ { "竜", "D", TR_ESP_DRAGON, -1 },
+ { "ã\82ª", "o", TR_ESP_ORC, -1 },
+ { "ト", "T", TR_ESP_TROLL, -1 },
+ { "巨", "P", TR_ESP_GIANT, -1 },
+ { "デ", "U", TR_ESP_DEMON, -1 },
+ { "死", "L", TR_ESP_UNDEAD, -1 },
+ { "動", "Z", TR_ESP_ANIMAL, -1 },
{ NULL, NULL, 0, -1 }
};
+/*! オブジェクトの特性表示記号テーブルの定義(能力維持) */
static flag_insc_table flag_insc_sust[] =
{
- { "ÏÓ", "St", TR_SUST_STR, -1 },
- { "ÃÎ", "In", TR_SUST_INT, -1 },
- { "¸", "Wi", TR_SUST_WIS, -1 },
- { "´ï", "Dx", TR_SUST_DEX, -1 },
- { "ÂÑ", "Cn", TR_SUST_CON, -1 },
- { "̥", "Ch", TR_SUST_CHR, -1 },
+ { "腕", "St", TR_SUST_STR, -1 },
+ { "知", "In", TR_SUST_INT, -1 },
+ { "賢", "Wi", TR_SUST_WIS, -1 },
+ { "器", "Dx", TR_SUST_DEX, -1 },
+ { "耐", "Cn", TR_SUST_CON, -1 },
+ { "魅", "Ch", TR_SUST_CHR, -1 },
{ NULL, NULL, 0, -1 }
};
#else
static flag_insc_table flag_insc_plus[] =
{
- { "At", TR_BLOWS, -1 },
- { "Sp", TR_SPEED, -1 },
- { "St", TR_STR, -1 },
- { "In", TR_INT, -1 },
- { "Wi", TR_WIS, -1 },
- { "Dx", TR_DEX, -1 },
- { "Cn", TR_CON, -1 },
- { "Ch", TR_CHR, -1 },
- { "Sl", TR_STEALTH, -1 },
- { "Sr", TR_SEARCH, -1 },
- { "If", TR_INFRA, -1 },
- { "Dg", TR_TUNNEL, -1 },
- { NULL, 0, -1 }
+ { "At", TR_BLOWS, -1 },
+ { "Sp", TR_SPEED, -1 },
+ { "St", TR_STR, -1 },
+ { "In", TR_INT, -1 },
+ { "Wi", TR_WIS, -1 },
+ { "Dx", TR_DEX, -1 },
+ { "Cn", TR_CON, -1 },
+ { "Ch", TR_CHR, -1 },
+ { "Md", TR_MAGIC_MASTERY, -1 },
+ { "Sl", TR_STEALTH, -1 },
+ { "Sr", TR_SEARCH, -1 },
+ { "If", TR_INFRA, -1 },
+ { "Dg", TR_TUNNEL, -1 },
+ { NULL, 0, -1 }
};
static flag_insc_table flag_insc_immune[] =
{
- { "Ac", TR_IM_ACID, -1 },
- { "El", TR_IM_ELEC, -1 },
- { "Fi", TR_IM_FIRE, -1 },
- { "Co", TR_IM_COLD, -1 },
- { NULL, 0, -1 }
+ { "Ac", TR_IM_ACID, -1 },
+ { "El", TR_IM_ELEC, -1 },
+ { "Fi", TR_IM_FIRE, -1 },
+ { "Co", TR_IM_COLD, -1 },
+ { NULL, 0, -1 }
};
static flag_insc_table flag_insc_resistance[] =
{
- { "Ac", TR_RES_ACID, TR_IM_ACID },
- { "El", TR_RES_ELEC, TR_IM_ELEC },
- { "Fi", TR_RES_FIRE, TR_IM_FIRE },
- { "Co", TR_RES_COLD, TR_IM_COLD },
- { "Po", TR_RES_POIS, -1 },
- { "Li", TR_RES_LITE, -1 },
- { "Dk", TR_RES_DARK, -1 },
- { "Sh", TR_RES_SHARDS, -1 },
- { "Bl", TR_RES_BLIND, -1 },
- { "Cf", TR_RES_CONF, -1 },
- { "So", TR_RES_SOUND, -1 },
- { "Nt", TR_RES_NETHER, -1 },
- { "Nx", TR_RES_NEXUS, -1 },
- { "Ca", TR_RES_CHAOS, -1 },
- { "Di", TR_RES_DISEN, -1 },
- { "Fe", TR_RES_FEAR, -1 },
- { NULL, 0, -1 }
+ { "Ac", TR_RES_ACID, TR_IM_ACID },
+ { "El", TR_RES_ELEC, TR_IM_ELEC },
+ { "Fi", TR_RES_FIRE, TR_IM_FIRE },
+ { "Co", TR_RES_COLD, TR_IM_COLD },
+ { "Po", TR_RES_POIS, -1 },
+ { "Li", TR_RES_LITE, -1 },
+ { "Dk", TR_RES_DARK, -1 },
+ { "Sh", TR_RES_SHARDS, -1 },
+ { "Bl", TR_RES_BLIND, -1 },
+ { "Cf", TR_RES_CONF, -1 },
+ { "So", TR_RES_SOUND, -1 },
+ { "Nt", TR_RES_NETHER, -1 },
+ { "Nx", TR_RES_NEXUS, -1 },
+ { "Ca", TR_RES_CHAOS, -1 },
+ { "Di", TR_RES_DISEN, -1 },
+ { "Fe", TR_RES_FEAR, -1 },
+ { NULL, 0, -1 }
};
static flag_insc_table flag_insc_misc[] =
{
- { "Ma", TR_DEC_MANA, -1 },
- { "Th", TR_THROW, -1 },
- { "Rf", TR_REFLECT, -1 },
- { "Fa", TR_FREE_ACT, -1 },
- { "Si", TR_SEE_INVIS, -1 },
- { "Hl", TR_HOLD_LIFE, -1 },
- { "Sd", TR_SLOW_DIGEST, -1 },
- { "Rg", TR_REGEN, -1 },
- { "Lv", TR_FEATHER, -1 },
- { "Lu", TR_LITE, -1 },
+ { "Es", TR_EASY_SPELL, -1 },
+ { "Dm", TR_DEC_MANA, -1 },
+ { "Th", TR_THROW, -1 },
+ { "Rf", TR_REFLECT, -1 },
+ { "Fa", TR_FREE_ACT, -1 },
+ { "Si", TR_SEE_INVIS, -1 },
+ { "Hl", TR_HOLD_EXP, -1 },
+ { "Sd", TR_SLOW_DIGEST, -1 },
+ { "Rg", TR_REGEN, -1 },
+ { "Lv", TR_LEVITATION, -1 },
+ { "Lu", TR_LITE_1, -1 },
+ { "Lu", TR_LITE_2, -1 },
+ { "Lu", TR_LITE_3, -1 },
+ { "Dl", TR_LITE_M1, -1 },
+ { "Dl", TR_LITE_M2, -1 },
+ { "Dl", TR_LITE_M3, -1 },
{ "Wr", TR_WARNING, -1 },
{ "Xm", TR_XTRA_MIGHT, -1 },
- { "Xs", TR_XTRA_SHOTS, -1 },
- { "Ag", TR_AGGRAVATE, -1 },
- { "Bs", TR_BLESSED, -1 },
- { "Ty", TR_TY_CURSE, -1 },
- { NULL, 0, -1 }
+ { "Xs", TR_XTRA_SHOTS, -1 },
+ { "Te", TR_TELEPORT, -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 }
};
static flag_insc_table flag_insc_aura[] =
{
- { "F", TR_SH_FIRE, -1 },
- { "E", TR_SH_ELEC, -1 },
- { "C", TR_SH_COLD, -1 },
- { "M", TR_NO_MAGIC, -1 },
- { "T", TR_NO_TELE, -1 },
- { NULL, 0, -1 }
+ { "F", TR_SH_FIRE, -1 },
+ { "E", TR_SH_ELEC, -1 },
+ { "C", TR_SH_COLD, -1 },
+ { "M", TR_NO_MAGIC, -1 },
+ { "T", TR_NO_TELE, -1 },
+ { NULL, 0, -1 }
};
static flag_insc_table flag_insc_brand[] =
{
- { "A", TR_BRAND_ACID, -1 },
- { "E", TR_BRAND_ELEC, -1 },
- { "F", TR_BRAND_FIRE, -1 },
- { "Co", TR_BRAND_COLD, -1 },
- { "P", TR_BRAND_POIS, -1 },
- { "Ca", TR_CHAOTIC, -1 },
- { "V", TR_VAMPIRIC, -1 },
- { "Q", TR_IMPACT, -1 },
- { "S", TR_VORPAL, -1 },
- { "M", TR_FORCE_WEAPON, -1 },
- { NULL, 0, -1 }
+ { "A", TR_BRAND_ACID, -1 },
+ { "E", TR_BRAND_ELEC, -1 },
+ { "F", TR_BRAND_FIRE, -1 },
+ { "Co", TR_BRAND_COLD, -1 },
+ { "P", TR_BRAND_POIS, -1 },
+ { "Ca", TR_CHAOTIC, -1 },
+ { "V", TR_VAMPIRIC, -1 },
+ { "Q", TR_IMPACT, -1 },
+ { "S", TR_VORPAL, -1 },
+ { "M", TR_FORCE_WEAPON, -1 },
+ { NULL, 0, -1 }
};
static flag_insc_table flag_insc_kill[] =
static flag_insc_table flag_insc_sust[] =
{
- { "St", TR_SUST_STR, -1 },
- { "In", TR_SUST_INT, -1 },
- { "Wi", TR_SUST_WIS, -1 },
- { "Dx", TR_SUST_DEX, -1 },
- { "Cn", TR_SUST_CON, -1 },
- { "Ch", TR_SUST_CHR, -1 },
- { NULL, 0, -1 }
+ { "St", TR_SUST_STR, -1 },
+ { "In", TR_SUST_INT, -1 },
+ { "Wi", TR_SUST_WIS, -1 },
+ { "Dx", TR_SUST_DEX, -1 },
+ { "Cn", TR_SUST_CON, -1 },
+ { "Ch", TR_SUST_CHR, -1 },
+ { NULL, 0, -1 }
};
#endif
-/* Simple macro for get_inscription() */
+/* オブジェクトフラグを追加するための簡易なマクロ / Simple macro for get_inscription() */
#define ADD_INSC(STR) (void)(ptr = object_desc_str(ptr, (STR)))
-/*
- * Helper function for get_inscription()
+/*!
+ * @brief get_inscriptionのサブセットとしてオブジェクトの特性フラグを返す / Helper function for get_inscription()
+ * @param fi_ptr 参照する特性表示記号テーブル
+ * @param flgs 対応するオブジェクトのフラグ文字列
+ * @param kanji TRUEならば漢字記述/FALSEならば英語記述
+ * @param ptr フラグ群を保管する文字列参照ポインタ
+ * @return フラグ群を保管する文字列参照ポインタ(ptrと同じ)
+ * @details
+ * Print an signed number "v" into a string "t", as if by
+ * sprintf(t, "%+d", n), and return a pointer to the terminator.
+ * Note that we always print a sign, either "+" or "-".
*/
-static char *inscribe_flags_aux(flag_insc_table *fi_ptr, u32b flgs[TR_FLAG_SIZE], bool kanji, char *ptr)
+static char *inscribe_flags_aux(flag_insc_table *fi_ptr, BIT_FLAGS flgs[TR_FLAG_SIZE], bool kanji, char *ptr)
{
+#ifndef JP
+ (void)kanji;
+#endif
+
while (fi_ptr->english)
{
if (have_flag(flgs, fi_ptr->flag) &&
}
-/*
- * Special variation of have_flag for auto-inscription
+/*!
+ * @brief オブジェクトの特性表示記号テーブル1つに従いオブジェクトの特性フラグ配列に1つでも該当の特性があるかを返す / Special variation of have_flag for auto-inscription
+ * @param fi_ptr 参照する特性表示記号テーブル
+ * @param flgs 対応するオブジェクトのフラグ文字列
+ * @return 1つでも該当の特性があったらTRUEを返す。
*/
-static bool have_flag_of(flag_insc_table *fi_ptr, u32b flgs[TR_FLAG_SIZE])
+static bool have_flag_of(flag_insc_table *fi_ptr, BIT_FLAGS flgs[TR_FLAG_SIZE])
{
while (fi_ptr->english)
{
return (FALSE);
}
-
-/*
- * Get object inscription with auto inscription of object flags.
+/*!
+ * @brief オブジェクト名の特性短縮表記をまとめて提示する。
+ * @param ptr 特性短縮表記を格納する文字列ポインタ
+ * @param o_ptr 特性短縮表記を得たいオブジェクト構造体の参照ポインタ
+ * @param kanji TRUEならば漢字表記 / FALSEなら英語表記
+ * @param all TRUEならばベースアイテム上で明らかなフラグは省略する
+ * @return ptrと同じアドレス
*/
-static void get_inscription(char *buff, object_type *o_ptr)
+static char *get_ability_abbreviation(char *ptr, object_type *o_ptr, bool kanji, bool all)
{
- cptr insc = quark_str(o_ptr->inscription);
- char *ptr = buff;
- char *prev_ptr = buff;
-
- u32b flgs[TR_FLAG_SIZE];
-
- /* Not fully identified */
- if (!(o_ptr->ident & IDENT_MENTAL))
- {
- /* Copy until end of line or '#' */
- while (*insc)
- {
- if (*insc == '#') break;
- if (iskanji(*insc)) *buff++ = *insc++;
- *buff++ = *insc++;
- }
-
- *buff = '\0';
- return;
- }
+ char *prev_ptr = ptr;
+ BIT_FLAGS flgs[TR_FLAG_SIZE];
/* Extract the flags */
object_flags(o_ptr, flgs);
-
- *buff = '\0';
- for (; *insc; insc++)
+ /* Remove obvious flags */
+ if (!all)
{
- bool kanji;
- bool all;
+ object_kind *k_ptr = &k_info[o_ptr->k_idx];
+ int j;
+
+ /* Base object */
+ for (j = 0; j < TR_FLAG_SIZE; j++)
+ flgs[j] &= ~k_ptr->flags[j];
- /* Ignore fake artifact inscription */
- if (*insc == '#') break;
+ if (object_is_fixed_artifact(o_ptr))
+ {
+ artifact_type *a_ptr = &a_info[o_ptr->name1];
+
+ for (j = 0; j < TR_FLAG_SIZE; j++)
+ flgs[j] &= ~a_ptr->flags[j];
+ }
- /* {%} will be automatically converted */
- else if ('%' == *insc)
+ if (object_is_ego(o_ptr))
{
- cptr start_percent = ptr;
-#ifdef JP
- if ('%' == insc[1])
- {
- insc++;
- kanji = FALSE;
- }
- else
- {
- kanji = TRUE;
- }
-#endif
- if ('a' == insc[1] && 'l' == insc[2] && 'l' == insc[3])
- {
- all = TRUE;
- insc += 3;
- }
- else
- {
- all = FALSE;
- }
+ ego_item_type *e_ptr = &e_info[o_ptr->name2];
+
+ for (j = 0; j < TR_FLAG_SIZE; j++)
+ flgs[j] &= ~e_ptr->flags[j];
+ }
+ }
- /* check for too long inscription */
- if (ptr >= buff + MAX_NLEN) continue;
+ /* Remove lite flags when this is a dark lite object */
+ if (have_dark_flag(flgs))
+ {
+ if (have_flag(flgs, TR_LITE_1)) remove_flag(flgs, TR_LITE_1);
+ if (have_flag(flgs, TR_LITE_2)) remove_flag(flgs, TR_LITE_2);
+ if (have_flag(flgs, TR_LITE_3)) remove_flag(flgs, TR_LITE_3);
+ }
+ else if (have_lite_flag(flgs))
+ {
+ add_flag(flgs, TR_LITE_1);
+ if (have_flag(flgs, TR_LITE_2)) remove_flag(flgs, TR_LITE_2);
+ if (have_flag(flgs, TR_LITE_3)) remove_flag(flgs, TR_LITE_3);
+ }
- /* Remove obvious flags */
- if (!all)
- {
- object_kind *k_ptr = &k_info[o_ptr->k_idx];
- int j;
-
- /* Base object */
- for (j = 0; j < TR_FLAG_SIZE; j++)
- flgs[j] &= ~k_ptr->flags[j];
+ /* Plusses */
+ if (have_flag_of(flag_insc_plus, flgs))
+ {
+ if (kanji)
+ ADD_INSC("+");
+ }
+ ptr = inscribe_flags_aux(flag_insc_plus, flgs, kanji, ptr);
- if (o_ptr->name1)
- {
- artifact_type *a_ptr = &a_info[o_ptr->name1];
-
- for (j = 0; j < TR_FLAG_SIZE; j++)
- flgs[j] &= ~a_ptr->flags[j];
- }
+ /* Immunity */
+ if (have_flag_of(flag_insc_immune, flgs))
+ {
+ if (!kanji && ptr != prev_ptr)
+ {
+ ADD_INSC(";");
+ prev_ptr = ptr;
+ }
+ ADD_INSC("*");
+ }
+ ptr = inscribe_flags_aux(flag_insc_immune, flgs, kanji, ptr);
- if (o_ptr->name2)
- {
- bool teleport = have_flag(flgs, TR_TELEPORT);
- ego_item_type *e_ptr = &e_info[o_ptr->name2];
-
- for (j = 0; j < TR_FLAG_SIZE; j++)
- flgs[j] &= ~e_ptr->flags[j];
+ /* Resistance */
+ if (have_flag_of(flag_insc_resistance, flgs))
+ {
+ if (kanji)
+ ADD_INSC("r");
+ else if (ptr != prev_ptr)
+ {
+ ADD_INSC(";");
+ prev_ptr = ptr;
+ }
+ }
+ ptr = inscribe_flags_aux(flag_insc_resistance, flgs, kanji, ptr);
- /* Always inscribe {.} for random teleport */
- if (teleport) add_flag(flgs, TR_TELEPORT);
- }
- }
+ /* Misc Ability */
+ if (have_flag_of(flag_insc_misc, flgs))
+ {
+ if (ptr != prev_ptr)
+ {
+ ADD_INSC(";");
+ prev_ptr = ptr;
+ }
+ }
+ ptr = inscribe_flags_aux(flag_insc_misc, flgs, kanji, ptr);
+
+ /* Aura */
+ if (have_flag_of(flag_insc_aura, flgs))
+ {
+ ADD_INSC("[");
+ }
+ ptr = inscribe_flags_aux(flag_insc_aura, flgs, kanji, ptr);
+ /* Brand Weapon */
+ if (have_flag_of(flag_insc_brand, flgs))
+ ADD_INSC("|");
+ ptr = inscribe_flags_aux(flag_insc_brand, flgs, kanji, ptr);
- /* Plusses */
- if (have_flag_of(flag_insc_plus, flgs))
- {
- if (kanji)
- ADD_INSC("+");
- }
- ptr = inscribe_flags_aux(flag_insc_plus, flgs, kanji, ptr);
+ /* Kill Weapon */
+ if (have_flag_of(flag_insc_kill, flgs))
+ ADD_INSC("/X");
+ ptr = inscribe_flags_aux(flag_insc_kill, flgs, kanji, ptr);
- /* Immunity */
- if (have_flag_of(flag_insc_immune, flgs))
- {
- if (!kanji && ptr != prev_ptr)
- {
- ADD_INSC(";");
- prev_ptr = ptr;
- }
- ADD_INSC("*");
- }
- ptr = inscribe_flags_aux(flag_insc_immune, flgs, kanji, ptr);
+ /* Slay Weapon */
+ if (have_flag_of(flag_insc_slay, flgs))
+ ADD_INSC("/");
+ ptr = inscribe_flags_aux(flag_insc_slay, flgs, kanji, ptr);
- /* Resistance */
- if (have_flag_of(flag_insc_resistance, flgs))
- {
- if (kanji)
- ADD_INSC("r");
- else if (ptr != prev_ptr)
- {
- ADD_INSC(";");
- prev_ptr = ptr;
- }
- }
- ptr = inscribe_flags_aux(flag_insc_resistance, flgs, kanji, ptr);
+ /* Esp */
+ if (kanji)
+ {
+ if (have_flag_of(flag_insc_esp1, flgs) ||
+ have_flag_of(flag_insc_esp2, flgs))
+ ADD_INSC("~");
+ ptr = inscribe_flags_aux(flag_insc_esp1, flgs, kanji, ptr);
+ ptr = inscribe_flags_aux(flag_insc_esp2, flgs, kanji, ptr);
+ }
+ else
+ {
+ if (have_flag_of(flag_insc_esp1, flgs))
+ ADD_INSC("~");
+ ptr = inscribe_flags_aux(flag_insc_esp1, flgs, kanji, ptr);
+ if (have_flag_of(flag_insc_esp2, flgs))
+ ADD_INSC("~");
+ ptr = inscribe_flags_aux(flag_insc_esp2, flgs, kanji, ptr);
+ }
+
+ /* sustain */
+ if (have_flag_of(flag_insc_sust, flgs))
+ {
+ ADD_INSC("(");
+ }
+ ptr = inscribe_flags_aux(flag_insc_sust, flgs, kanji, ptr);
+
+ *ptr = '\0';
+
+ return ptr;
+}
+
+
+/*!
+ * @brief オブジェクト名の特性短縮表記+刻み内容を提示する。 / Get object inscription with auto inscription of object flags.
+ * @param buff 特性短縮表記を格納する文字列ポインタ
+ * @param o_ptr 特性短縮表記を得たいオブジェクト構造体の参照ポインタ
+ * @return なし
+ */
+static void get_inscription(char *buff, object_type *o_ptr)
+{
+ cptr insc = quark_str(o_ptr->inscription);
+ char *ptr = buff;
+
+ /* Not fully identified */
+ if (!(o_ptr->ident & IDENT_MENTAL))
+ {
+ /* Copy until end of line or '#' */
+ while (*insc)
+ {
+ if (*insc == '#') break;
+#ifdef JP
+ if (iskanji(*insc)) *buff++ = *insc++;
+#endif
+ *buff++ = *insc++;
+ }
+
+ *buff = '\0';
+ return;
+ }
+
+ *buff = '\0';
+ for (; *insc; insc++)
+ {
+ /* Ignore fake artifact inscription */
+ if (*insc == '#') break;
+
+ /* {%} will be automatically converted */
+ else if ('%' == *insc)
+ {
+ bool kanji = FALSE;
+ bool all;
+ cptr start = ptr;
+
+ /* check for too long inscription */
+ if (ptr >= buff + MAX_NLEN) continue;
- /* Misc Ability */
- if (have_flag_of(flag_insc_misc, flgs))
+#ifdef JP
+ if ('%' == insc[1])
{
- if (ptr != prev_ptr)
- {
- ADD_INSC(";");
- prev_ptr = ptr;
- }
+ insc++;
+ kanji = FALSE;
}
- ptr = inscribe_flags_aux(flag_insc_misc, flgs, kanji, ptr);
-
- /* Aura */
- if (have_flag_of(flag_insc_aura, flgs))
+ else
{
- ADD_INSC("[");
+ kanji = TRUE;
}
- ptr = inscribe_flags_aux(flag_insc_aura, flgs, kanji, ptr);
-
- /* Brand Weapon */
- if (have_flag_of(flag_insc_brand, flgs))
- ADD_INSC("|");
- ptr = inscribe_flags_aux(flag_insc_brand, flgs, kanji, ptr);
-
- /* Kill Weapon */
- if (have_flag_of(flag_insc_kill, flgs))
- ADD_INSC("/X");
- ptr = inscribe_flags_aux(flag_insc_kill, flgs, kanji, ptr);
-
- /* Slay Weapon */
- if (have_flag_of(flag_insc_slay, flgs))
- ADD_INSC("/");
- ptr = inscribe_flags_aux(flag_insc_slay, flgs, kanji, ptr);
-
- /* Esp */
- if (kanji)
- {
- if (have_flag_of(flag_insc_esp1, flgs) ||
- have_flag_of(flag_insc_esp2, flgs))
- ADD_INSC("~");
- ptr = inscribe_flags_aux(flag_insc_esp1, flgs, kanji, ptr);
- ptr = inscribe_flags_aux(flag_insc_esp2, flgs, kanji, ptr);
- }
- else
- {
- if (have_flag_of(flag_insc_esp1, flgs))
- ADD_INSC("~");
- ptr = inscribe_flags_aux(flag_insc_esp1, flgs, kanji, ptr);
- if (have_flag_of(flag_insc_esp2, flgs))
- ADD_INSC("~");
- ptr = inscribe_flags_aux(flag_insc_esp2, flgs, kanji, ptr);
- }
-
- /* Random Teleport */
- if (have_flag(flgs, TR_TELEPORT))
+#endif
+ if ('a' == insc[1] && 'l' == insc[2] && 'l' == insc[3])
{
- ADD_INSC(".");
+ all = TRUE;
+ insc += 3;
}
-
- /* sustain */
- if (have_flag_of(flag_insc_sust, flgs))
+ else
{
- ADD_INSC("(");
+ all = FALSE;
}
- ptr = inscribe_flags_aux(flag_insc_sust, flgs, kanji, ptr);
- if (ptr == start_percent)
+ ptr = get_ability_abbreviation(ptr, o_ptr, kanji, all);
+
+ if (ptr == start)
ADD_INSC(" ");
}
else
*ptr++ = *insc;
}
}
- *ptr = '\0';
+ *ptr = '\0';
}
+/*!
+ * @brief オブジェクトがクエストの達成目的か否かを返す。
+ * @param o_ptr 特性短縮表記を得たいオブジェクト構造体の参照ポインタ
+ * @return 現在クエスト達成目的のアイテムならばTRUEを返す。
+ */
+bool object_is_quest_target(object_type *o_ptr)
+{
+ if (p_ptr->inside_quest)
+ {
+ ARTIFACT_IDX 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".
- *
- * One can choose the "verbosity" of the description, including whether
- * or not the "number" of items should be described, and how much detail
- * should be used when describing the item.
- *
- * The given "buf" must be MAX_NLEN chars long to hold the longest possible
- * description, which can get pretty long, including incriptions, such as:
- * "no more Maces of Disruption (Defender) (+10,+10) [+5] (+3 to stealth)".
- * Note that the inscription will be clipped to keep the total description
- * under MAX_NLEN-1 chars (plus a terminator).
- *
- * Note the use of "object_desc_num()" and "object_desc_int()" as hyper-efficient,
- * portable, versions of some common "sprintf()" commands.
- *
- * Note that all ego-items (when known) append an "Ego-Item Name", unless
- * the item is also an artifact, which should NEVER happen.
- *
- * Note that all artifacts (when known) append an "Artifact Name", so we
- * have special processing for "Specials" (artifact Lites, Rings, Amulets).
- * The "Specials" never use "modifiers" if they are "known", since they
- * have special "descriptions", such as "The Necklace of the Dwarves".
- *
- * Special Lite's use the "k_info" base-name (Phial, Star, or Arkenstone),
- * plus the artifact name, just like any other artifact, if known.
- *
- * Special Ring's and Amulet's, if not "aware", use the same code as normal
- * rings and amulets, and if "aware", use the "k_info" base-name (Ring or
- * Amulet or Necklace). They will NEVER "append" the "k_info" name. But,
- * they will append the artifact name, just like any artifact, if known.
- *
- * Hack -- Display "The One Ring" as "a Plain Gold Ring" until aware.
- *
- * If "pref" then a "numeric" prefix will be pre-pended.
- *
- * Mode:
- * 0 -- The Cloak of Death
- * 1 -- The Cloak of Death [1,+3]
- * 2 -- The Cloak of Death [1,+3] (+2 to Stealth)
- * 3 -- The Cloak of Death [1,+3] (+2 to Stealth) {nifty}
+/*!
+ * @brief オブジェクトの各表記を返すメイン関数 / Creates a description of the item "o_ptr", and stores it in "out_val".
+ * @param buf 表記を返すための文字列参照ポインタ
+ * @param o_ptr 特性短縮表記を得たいオブジェクト構造体の参照ポインタ
+ * @param mode 表記に関するオプション指定
+ * @return 現在クエスト達成目的のアイテムならばTRUEを返す。
+ * @details
+ * One can choose the "verbosity" of the description, including whether\n
+ * or not the "number" of items should be described, and how much detail\n
+ * should be used when describing the item.\n
+ *\n
+ * The given "buf" must be MAX_NLEN chars long to hold the longest possible\n
+ * description, which can get pretty long, including incriptions, such as:\n
+ * "no more Maces of Disruption (Defender) (+10,+10) [+5] (+3 to stealth)".\n
+ * Note that the inscription will be clipped to keep the total description\n
+ * under MAX_NLEN-1 chars (plus a terminator).\n
+ *\n
+ * Note the use of "object_desc_num()" and "object_desc_int()" as hyper-efficient,\n
+ * portable, versions of some common "sprintf()" commands.\n
+ *\n
+ * Note that all ego-items (when known) append an "Ego-Item Name", unless\n
+ * the item is also an artifact, which should NEVER happen.\n
+ *\n
+ * Note that all artifacts (when known) append an "Artifact Name", so we\n
+ * have special processing for "Specials" (artifact Lites, Rings, Amulets).\n
+ * The "Specials" never use "modifiers" if they are "known", since they\n
+ * have special "descriptions", such as "The Necklace of the Dwarves".\n
+ *\n
+ * Special Lite's use the "k_info" base-name (Phial, Star, or Arkenstone),\n
+ * plus the artifact name, just like any other artifact, if known.\n
+ *\n
+ * Special Ring's and Amulet's, if not "aware", use the same code as normal\n
+ * rings and amulets, and if "aware", use the "k_info" base-name (Ring or\n
+ * Amulet or Necklace). They will NEVER "append" the "k_info" name. But,\n
+ * they will append the artifact name, just like any artifact, if known.\n
+ *\n
+ * Hack -- Display "The One Ring" as "a Plain Gold Ring" until aware.\n
+ *\n
+ * Mode:\n
+ * OD_NAME_ONLY : The Cloak of Death\n
+ * OD_NAME_AND_ENCHANT : The Cloak of Death [1,+3]\n
+ * OD_OMIT_INSCRIPTION : The Cloak of Death [1,+3] (+2 to Stealth)\n
+ * 0 : The Cloak of Death [1,+3] (+2 to Stealth) {nifty}\n
+ *\n
+ * OD_OMIT_PREFIX : Forbidden numeric prefix\n
+ * OD_NO_PLURAL : Forbidden use of plural \n
+ * OD_STORE : Assume to be aware and known\n
+ * OD_NO_FLAVOR : Allow to hidden flavor\n
+ * OD_FORCE_FLAVOR : Get un-shuffled flavor name\n
*/
-void object_desc(char *buf, object_type *o_ptr, int pref, int mode)
+void object_desc(char *buf, object_type *o_ptr, BIT_FLAGS mode)
{
- cptr basenm, modstr;
- int power, indexx, i;
+ /* Extract object kind name */
+ cptr kindname = k_name + k_info[o_ptr->k_idx].name;
+
+ /* Extract default "base" string */
+ cptr basenm = kindname;
+
+ /* Assume no "modifier" string */
+ cptr modstr = "";
+
+ int power;
+ int fire_rate;
bool aware = FALSE;
bool known = FALSE;
-
- bool append_name = FALSE;
+ bool flavor = TRUE;
bool show_weapon = FALSE;
bool show_armour = FALSE;
- cptr s, u;
+ cptr s, s0;
char *t;
char p1 = '(', p2 = ')';
char tmp_val[MAX_NLEN+160];
char tmp_val2[MAX_NLEN+10];
+ char fake_insc_buf[30];
- u32b flgs[TR_FLAG_SIZE];
-
- object_type *bow_ptr;
+ BIT_FLAGS flgs[TR_FLAG_SIZE];
+ 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);
/* See if the object is "aware" */
- if (object_aware_p(o_ptr) || (o_ptr->ident & IDENT_MENTAL)) aware = TRUE;
+ if (object_is_aware(o_ptr)) aware = TRUE;
/* See if the object is "known" */
- if (object_known_p(o_ptr)) known = TRUE;
+ if (object_is_known(o_ptr)) known = TRUE;
- /* Hack -- Extract the sub-type "indexx" */
- indexx = o_ptr->sval;
+ /* Allow flavors to be hidden when aware */
+ if (aware && ((mode & OD_NO_FLAVOR) || plain_descriptions)) flavor = FALSE;
- /* Extract default "base" string */
- basenm = get_object_name(o_ptr);
+ /* Object is in the inventory of a store or spoiler */
+ if ((mode & OD_STORE) || (o_ptr->ident & IDENT_STORE))
+ {
+ /* Don't show flavors */
+ flavor = FALSE;
- /* Assume no "modifier" string */
- modstr = "";
+ /* Pretend known and aware */
+ aware = TRUE;
+ 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)
{
if (!o_ptr->pval)
{
-#ifdef JP
- modstr = "¡Ê¶õ¡Ë";
-#else
- modstr = " (empty)";
-#endif
+ modstr = _(" (空)", " (empty)");
}
else
{
#ifdef JP
- sprintf(tmp_val2, "¡Ê%s¡Ë",r_name + r_ptr->name);
+ sprintf(tmp_val2, " (%s)",r_name + r_ptr->name);
modstr = tmp_val2;
#else
cptr t = r_name + r_ptr->name;
modstr = r_name + r_ptr->name;
-
#ifdef JP
- sprintf(tmp_val2, "& #%s", basenm + 2);
+ basenm = "#%";
#else
if (r_ptr->flags1 & RF1_UNIQUE)
- {
- sprintf(tmp_val2, "%s %s", basenm, "of #");
- }
+ basenm = "& % of #";
else
- {
- sprintf(tmp_val2, "& # %s", basenm + 2);
- }
+ basenm = "& # %";
#endif
-
- basenm = tmp_val2;
break;
}
break;
}
-
/* Armour */
case TV_BOOTS:
case TV_GLOVES:
break;
}
-
/* Lites (including a few "Specials") */
case TV_LITE:
{
case TV_AMULET:
{
/* Known artifacts */
- if (artifact_p(o_ptr) && aware) break;
-
- if ((k_ptr->gen_flags & TRG_INSTA_ART) && aware) break;
+ if (aware)
+ {
+ if (object_is_fixed_artifact(o_ptr)) break;
+ if (k_ptr->gen_flags & TRG_INSTA_ART) break;
+ }
/* Color the object */
- modstr = amulet_adj[indexx];
+ modstr = k_name + flavor_k_ptr->flavor_name;
- if (aware) append_name = TRUE;
-
- if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
#ifdef JP
- basenm = aware ? "& %¤Î¥¢¥ß¥å¥ì¥Ã¥È" : "& ¥¢¥ß¥å¥ì¥Ã¥È";
- else
- basenm = aware ? "& #%¤Î¥¢¥ß¥å¥ì¥Ã¥È" : "& #¥¢¥ß¥å¥ì¥Ã¥È";
+ if (!flavor) basenm = "%のアミュレット";
+ else if (aware) basenm = "%の#アミュレット";
+ else basenm = "#アミュレット";
#else
- basenm = "& Amulet~";
- else
- basenm = aware ? "& # Amulet~" : "& # Amulet~";
+ if (!flavor) basenm = "& Amulet~ of %";
+ else if (aware) basenm = "& # Amulet~ of %";
+ else basenm = "& # Amulet~";
#endif
break;
case TV_RING:
{
/* Known artifacts */
- if (artifact_p(o_ptr) && aware) break;
-
- if ((k_ptr->gen_flags & TRG_INSTA_ART) && aware) break;
+ if (aware)
+ {
+ if (object_is_fixed_artifact(o_ptr)) break;
+ if (k_ptr->gen_flags & TRG_INSTA_ART) break;
+ }
/* Color the object */
- modstr = ring_adj[indexx];
+ modstr = k_name + flavor_k_ptr->flavor_name;
- if (aware) append_name = TRUE;
-
- if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
#ifdef JP
- basenm = aware ? "& %¤Î»ØÎØ" : "& »ØÎØ";
- else
- basenm = aware ? "& #%¤Î»ØÎØ" : "& #»ØÎØ";
+ if (!flavor) basenm = "%の指輪";
+ else if (aware) basenm = "%の#指輪";
+ else basenm = "#指輪";
#else
- basenm = "& Ring~";
- else
- basenm = aware ? "& # Ring~" : "& # 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;
- if (aware) append_name = TRUE;
- if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
#ifdef JP
- basenm = aware ? "& %¤Î¾ó" : "& ¾ó";
- else
- basenm = aware ? "& #%¤Î¾ó" : "& #¾ó";
+ if (!flavor) basenm = "%の杖";
+ else if (aware) basenm = "%の#杖";
+ else basenm = "#杖";
#else
- basenm = "& Staff~";
- else
- basenm = aware ? "& # Staff~" : "& # 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;
- if (aware) append_name = TRUE;
- if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
#ifdef JP
- basenm = aware? "& %¤ÎËâË¡ËÀ":"& ËâË¡ËÀ";
- else
- basenm = aware ? "& #%¤ÎËâË¡ËÀ" : "& #ËâË¡ËÀ";
+ if (!flavor) basenm = "%の魔法棒";
+ else if (aware) basenm = "%の#魔法棒";
+ else basenm = "#魔法棒";
#else
- basenm = "& Wand~";
- else
- basenm = aware ? "& # Wand~" : "& # Wand~";
+ if (!flavor) basenm = "& Wand~ of %";
+ else if (aware) basenm = "& # Wand~ of %";
+ else basenm = "& # Wand~";
#endif
break;
case TV_ROD:
{
/* Color the object */
- modstr = rod_adj[indexx];
+ modstr = k_name + flavor_k_ptr->flavor_name;
- if (aware) append_name = TRUE;
- if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
#ifdef JP
- basenm = aware? "& %¤Î¥í¥Ã¥É":"& ¥í¥Ã¥É";
- else
- basenm = aware ? "& #%¤Î¥í¥Ã¥É" : "& #¥í¥Ã¥É";
+ if (!flavor) basenm = "%のロッド";
+ else if (aware) basenm = "%の#ロッド";
+ else basenm = "#ロッド";
#else
- basenm = "& Rod~";
- else
- basenm = aware ? "& # Rod~" : "& # 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];
- if (aware) append_name = TRUE;
- if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
+ modstr = k_name + flavor_k_ptr->flavor_name;
+
#ifdef JP
- basenm = aware ? "& %¤Î´¬Êª" : "& ´¬Êª";
- else
- basenm = aware ? "& ¡Ö#¡×¤È½ñ¤«¤ì¤¿%¤Î´¬Êª" : "& ¡Ö#¡×¤È½ñ¤«¤ì¤¿´¬Êª";
+ if (!flavor) basenm = "%の巻物";
+ else if (aware) basenm = "「#」と書かれた%の巻物";
+ else basenm = "「#」と書かれた巻物";
#else
- basenm = "& Scroll~";
- else
- basenm = aware ? "& Scroll~ titled \"#\"" : "& 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;
- if (aware) append_name = TRUE;
- if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
#ifdef JP
- basenm = aware ? "& %¤ÎÌô" : "& Ìô";
- else
- basenm = aware ? "& #%¤ÎÌô" : "& #Ìô";
+ if (!flavor) basenm = "%の薬";
+ else if (aware) basenm = "%の#薬";
+ else basenm = "#薬";
#else
- basenm = "& Potion~";
- else
- basenm = aware ? "& # Potion~" : "& # 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;
- if (aware) append_name = TRUE;
- if (((plain_descriptions) && (aware)) || o_ptr->ident & IDENT_STOREB)
#ifdef JP
- basenm = aware ? "& %¤Î¥¥Î¥³" : "& ¥¥Î¥³";
- else
- basenm = aware ? "& #%¤Î¥¥Î¥³" : "& #¥¥Î¥³";
+ if (!flavor) basenm = "%ã\81®ã\82ã\83\8eã\82³";
+ else if (aware) basenm = "%の#キノコ";
+ else basenm = "#ã\82ã\83\8eã\82³";
#else
- basenm = "& Mushroom~";
- else
- basenm = aware ? "& # Mushroom~" : "& # Mushroom~";
+ if (!flavor) basenm = "& Mushroom~ of %";
+ else if (aware) basenm = "& # Mushroom~ of %";
+ else basenm = "& # Mushroom~";
#endif
break;
}
- case TV_PARCHEMENT:
+ case TV_PARCHMENT:
{
- modstr = basenm;
-#ifdef JP
- basenm = "& ÍÓÈé»æ - #";
-#else
- basenm = "& Parchement~ - #";
-#endif
+ basenm = _("羊皮紙 - %", "& Parchment~ - %");
break;
}
/* Magic Books */
case TV_LIFE_BOOK:
{
- modstr = basenm;
#ifdef JP
- basenm = "& À¸Ì¿¤ÎËâË¡½ñ#";
+ basenm = "生命の魔法書%";
#else
if (mp_ptr->spell_book == TV_LIFE_BOOK)
- basenm = "& Book~ of Life Magic #";
+ basenm = "& Book~ of Life Magic %";
else
- basenm = "& Life Spellbook~ #";
+ basenm = "& Life Spellbook~ %";
#endif
break;
case TV_SORCERY_BOOK:
{
- modstr = basenm;
#ifdef JP
- basenm = "& Àç½Ñ¤ÎËâË¡½ñ#";
+ basenm = "仙術の魔法書%";
#else
if (mp_ptr->spell_book == TV_LIFE_BOOK)
- basenm = "& Book~ of Sorcery #";
+ basenm = "& Book~ of Sorcery %";
else
- basenm = "& Sorcery Spellbook~ #";
+ basenm = "& Sorcery Spellbook~ %";
#endif
break;
case TV_NATURE_BOOK:
{
- modstr = basenm;
#ifdef JP
- basenm = "& ¼«Á³¤ÎËâË¡½ñ#";
+ basenm = "自然の魔法書%";
#else
if (mp_ptr->spell_book == TV_LIFE_BOOK)
- basenm = "& Book~ of Nature Magic #";
+ basenm = "& Book~ of Nature Magic %";
else
- basenm = "& Nature Spellbook~ #";
+ basenm = "& Nature Spellbook~ %";
#endif
break;
case TV_CHAOS_BOOK:
{
- modstr = basenm;
#ifdef JP
- basenm = "& ¥«¥ª¥¹¤ÎËâË¡½ñ#";
+ basenm = "カオスの魔法書%";
#else
if (mp_ptr->spell_book == TV_LIFE_BOOK)
- basenm = "& Book~ of Chaos Magic #";
+ basenm = "& Book~ of Chaos Magic %";
else
- basenm = "& Chaos Spellbook~ #";
+ basenm = "& Chaos Spellbook~ %";
#endif
break;
case TV_DEATH_BOOK:
{
- modstr = basenm;
#ifdef JP
- basenm = "& °Å¹õ¤ÎËâË¡½ñ#";
+ basenm = "暗黒の魔法書%";
#else
if (mp_ptr->spell_book == TV_LIFE_BOOK)
- basenm = "& Book~ of Death Magic #";
+ basenm = "& Book~ of Death Magic %";
else
- basenm = "& Death Spellbook~ #";
+ basenm = "& Death Spellbook~ %";
#endif
break;
case TV_TRUMP_BOOK:
{
- modstr = basenm;
#ifdef JP
- basenm = "& ¥È¥é¥ó¥×¤ÎËâË¡½ñ#";
+ basenm = "トランプの魔法書%";
#else
if (mp_ptr->spell_book == TV_LIFE_BOOK)
- basenm = "& Book~ of Trump Magic #";
+ basenm = "& Book~ of Trump Magic %";
else
- basenm = "& Trump Spellbook~ #";
+ basenm = "& Trump Spellbook~ %";
#endif
break;
case TV_ARCANE_BOOK:
{
- modstr = basenm;
#ifdef JP
- basenm = "& Èë½Ñ¤ÎËâË¡½ñ#";
+ basenm = "秘術の魔法書%";
#else
if (mp_ptr->spell_book == TV_LIFE_BOOK)
- basenm = "& Book~ of Arcane Magic #";
+ basenm = "& Book~ of Arcane Magic %";
else
- basenm = "& Arcane Spellbook~ #";
+ basenm = "& Arcane Spellbook~ %";
#endif
break;
}
- case TV_ENCHANT_BOOK:
+
+ case TV_CRAFT_BOOK:
{
- modstr = basenm;
#ifdef JP
- basenm = "& ¾¢¤ÎËâË¡½ñ#";
+ basenm = "匠の魔法書%";
#else
if (mp_ptr->spell_book == TV_LIFE_BOOK)
- basenm = "& Book~ of Craft Magic #";
+ basenm = "& Book~ of Craft Magic %";
else
- basenm = "& Craft Spellbook~ #";
+ basenm = "& Craft Spellbook~ %";
#endif
break;
}
+
case TV_DAEMON_BOOK:
{
- modstr = basenm;
#ifdef JP
- basenm = "& °Ëâ¤ÎËâË¡½ñ#";
+ basenm = "悪魔の魔法書%";
#else
if (mp_ptr->spell_book == TV_LIFE_BOOK)
- basenm = "& Book~ of Daemon Magic #";
+ basenm = "& Book~ of Daemon Magic %";
else
- basenm = "& Daemon Spellbook~ #";
+ basenm = "& Daemon Spellbook~ %";
#endif
break;
}
+
case TV_CRUSADE_BOOK:
{
- modstr = basenm;
#ifdef JP
- basenm = "& Ç˼٤ÎËâË¡½ñ#";
+ basenm = "破邪の魔法書%";
#else
if (mp_ptr->spell_book == TV_LIFE_BOOK)
- basenm = "& Book~ of Crusade Magic #";
+ basenm = "& Book~ of Crusade Magic %";
else
- basenm = "& Crusade Spellbook~ #";
+ basenm = "& Crusade Spellbook~ %";
#endif
break;
}
+
case TV_MUSIC_BOOK:
{
- modstr = basenm;
-#ifdef JP
- basenm = "& ²Î½¸#";
-#else
- basenm = "& Song Book~ #";
-#endif
-
+ basenm = _("歌集%", "& Song Book~ %");
break;
}
+
case TV_HISSATSU_BOOK:
{
- modstr = basenm;
+ basenm = _("& 武芸の書%", "Book~ of Kendo %");
+ break;
+ }
+
+ case TV_HEX_BOOK:
+ {
#ifdef JP
- basenm = "& Éð·Ý¤Î½ñ#";
+ basenm = "呪術の魔法書%";
#else
- basenm = "& Book~ of Kendo #";
+ if (mp_ptr->spell_book == TV_LIFE_BOOK)
+ basenm = "& Book~ of Hex Magic %";
+ else
+ basenm = "& Hex Spellbook~ %";
#endif
break;
}
-
-
/* Hack -- Gold/Gems */
case TV_GOLD:
{
/* Used in the "inventory" routine */
default:
{
-#ifdef JP
- strcpy(buf, "(¤Ê¤·)");
-#else
- strcpy(buf, "(nothing)");
-#endif
-
+ strcpy(buf, _("(なし)", "(nothing)"));
return;
}
}
if (aware && have_flag(flgs, TR_FULL_NAME))
{
if (known && o_ptr->name1) basenm = a_name + a_info[o_ptr->name1].name;
- else basenm = get_object_name(o_ptr);
+ else basenm = kindname;
}
/* Start dumping the result */
s = basenm;
/* No prefix */
- if (!pref)
+ if (mode & OD_OMIT_PREFIX)
{
/* Nothing */
}
else if (o_ptr->number > 1)
{
- if ( change_numeral == FALSE ){
- t = object_desc_num(t, o_ptr->number);
- if (o_ptr->number > 9)
- t = object_desc_str(t, "¸Ä¤Î ");
- else
- t = object_desc_str(t, "¤Ä¤Î ");
- }
- else
- {
- t = object_desc_kosuu(t,o_ptr);
- t = object_desc_str(t, "¤Î ");
- }
+ t = object_desc_kosuu(t, o_ptr);
+ t = object_desc_str(t, "の ");
}
- /* ±Ñ¸ì¤Î¾ì¹ç¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Ï The ¤¬ÉÕ¤¯¤Î¤Çʬ¤«¤ë¤¬
- * ÆüËܸì¤Ç¤Ïʬ¤«¤é¤Ê¤¤¤Î¤Ç¥Þ¡¼¥¯¤ò¤Ä¤±¤ë
+ /* 英語の場合アーティファクトは The が付くので分かるが
+ * 日本語では分からないのでマークをつける
*/
- if (known && artifact_p(o_ptr)) t = object_desc_str(t, "¡ú");
- else if (known && o_ptr->art_name) t = object_desc_str(t, "¡ù");
+ if (known)
+ {
+ if (object_is_fixed_artifact(o_ptr)) t = object_desc_str(t, "★");
+ else if (o_ptr->art_name) t = object_desc_str(t, "☆");
+ }
#else
s = basenm + 2;
/* No prefix */
- if (!pref)
+ if (mode & OD_OMIT_PREFIX)
{
/* Nothing */
}
}
/* Hack -- The only one of its kind */
- else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
+ 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)
+ /* A single one */
+ else
{
- monster_race *r_ptr = &r_info[o_ptr->pval];
+ bool vowel;
- if (r_ptr->flags1 & RF1_UNIQUE)
+ switch (*s)
{
- t = object_desc_str(t, "The ");
+ case '#': vowel = is_a_vowel(modstr[0]); break;
+ case '%': vowel = is_a_vowel(*kindname); break;
+ default: vowel = is_a_vowel(*s); break;
}
- }
-
- /* A single one, with a vowel in the modifier */
- else if ((*s == '#') && (is_a_vowel(modstr[0])))
- {
- t = object_desc_str(t, "an ");
- }
- /* A single one, with a vowel */
- else if (is_a_vowel(*s))
- {
- t = object_desc_str(t, "an ");
- }
-
- /* A single one, without a vowel */
- else
- {
- t = object_desc_str(t, "a ");
+ if (vowel)
+ {
+ /* A single one, with a vowel */
+ t = object_desc_str(t, "an ");
+ }
+ else
+ {
+ /* A single one, without a vowel */
+ t = object_desc_str(t, "a ");
+ }
}
}
s = basenm;
/* No pref */
- if (!pref)
+ if (mode & OD_OMIT_PREFIX)
{
/* Nothing */
}
}
/* Hack -- The only one of its kind */
- else if (known && (artifact_p(o_ptr) || o_ptr->art_name))
+ else if (known && object_is_artifact(o_ptr))
{
t = object_desc_str(t, "The ");
}
/* while (*s == '~') s++; */
#ifdef JP
- if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
+ if (object_is_smith(o_ptr))
{
- t = object_desc_str(t,format("ÃÃÌê»Õ%s¤Î",player_name));
+ t = object_desc_str(t, format("鍛冶師%sの", p_ptr->name));
}
- /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¡¢Ì¾¤Î¤¢¤ë¥¢¥¤¥Æ¥à¤Î̾Á°¤òÉղ乤ë */
- if (known) {
- /* ¥é¥ó¥À¥à¡¦¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È */
- if (o_ptr->art_name)
- { char temp[256];
- strcpy(temp, quark_str(o_ptr->art_name));
- /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
- /* ±Ñ¸ìÈǤΥ»¡¼¥Ö¥Õ¥¡¥¤¥ë¤«¤éÍ褿 'of XXX' ¤Ï,¡ÖXXX¤Î¡×¤Èɽ¼¨¤¹¤ë */
- if ( strncmp( temp , "of ",3)==0 ) {t=object_desc_str(t,&temp[3]);t=object_desc_str(t,"¤Î");}
- else
- if ( strncmp( temp , "¡Ø" , 2 ) != 0 && temp[0]!='\'')
- t=object_desc_str(t, temp);
- }
- /* ÅÁÀâ¤Î¥¢¥¤¥Æ¥à */
- else if (o_ptr->name1 && !have_flag(flgs, TR_FULL_NAME)) {
- artifact_type *a_ptr = &a_info[o_ptr->name1];
- /* '¡Ø' ¤«¤é»Ï¤Þ¤é¤Ê¤¤ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ½é¤ËÉղ乤ë */
- if ( strncmp( (a_name + a_ptr->name), "¡Ø" , 2) != 0){
- t=object_desc_str(t, (a_name + a_ptr->name));
- }
- }
- /* ̾¤Î¤¢¤ë¥¢¥¤¥Æ¥à */
- else if (o_ptr->name2) {
- ego_item_type *e_ptr = &e_info[o_ptr->name2];
- t=object_desc_str(t, (e_name + e_ptr->name));
- }
- }
-#endif
- /* Copy the string */
- for (; *s; s++)
+ /* 伝説のアイテム、名のあるアイテムの名前を付加する */
+ if (known)
{
- /* Pluralizer */
-#ifdef JP
- if (*s == '#')
-#else
- if (*s == '~')
+ /* ランダム・アーティファクト */
+ if (o_ptr->art_name)
{
- /* Add a plural if needed */
- if (pref && o_ptr->number != 1)
- {
- char k = t[-1];
-
- /* XXX XXX XXX Mega-Hack */
+ cptr temp = quark_str(o_ptr->art_name);
- /* Hack -- "Cutlass-es" and "Torch-es" */
- if ((k == 's') || (k == 'h')) *t++ = 'e';
-
- /* Add an 's' */
- *t++ = 's';
+ /* '『' から始まらない伝説のアイテムの名前は最初に付加する */
+ /* 英語版のセーブファイルから来た 'of XXX' は,「XXXの」と表示する */
+ if (strncmp(temp, "of ", 3) == 0)
+ {
+ t = object_desc_str(t, &temp[3]);
+ t = object_desc_str(t, "の");
}
+ else if ((strncmp(temp, "『", 2) != 0) &&
+ (strncmp(temp, "《", 2) != 0) &&
+ (temp[0] != '\''))
+ t = object_desc_str(t, temp);
}
-
- /* Modifier */
- else if (*s == '#')
-#endif
-
+ /* 伝説のアイテム */
+ else if (o_ptr->name1 && !have_flag(flgs, TR_FULL_NAME))
{
- /* Insert the modifier */
- for (u = modstr; *u; u++) *t++ = *u;
+ artifact_type *a_ptr = &a_info[o_ptr->name1];
+ /* '『' から始まらない伝説のアイテムの名前は最初に付加する */
+ if (strncmp(a_name + a_ptr->name, "『", 2) != 0)
+ {
+ t = object_desc_str(t, a_name + a_ptr->name);
+ }
}
-
-#ifdef JP
- else if (*s == '%')
- /* saigo ¤ÎÂå¤ï¤ê¡£¸úǽ¤òÉÕ²½¤¹¤ë by ita*/
+ /* 名のあるアイテム */
+ else if (object_is_ego(o_ptr))
{
- modstr=get_object_name(o_ptr);
- for (u = modstr; *u; u++) *t++ = *u;
+ ego_item_type *e_ptr = &e_info[o_ptr->name2];
+ t = object_desc_str(t, e_name + e_ptr->name);
}
+ }
#endif
- /* Normal */
+
+ /* Copy the string */
+ for (s0 = NULL; *s || s0; )
+ {
+ /* The end of the flavour/kind string. */
+ if (!*s)
+ {
+ s = s0 + 1;
+ s0 = NULL;
+ }
+
+ /* Begin to append the modifier (flavor) */
+ else if ((*s == '#') && !s0)
+ {
+ s0 = s;
+ s = modstr;
+
+ /* Paranoia -- Never append multiple modstrs */
+ modstr = "";
+ }
+
+ /* Begin to append the kind name */
+ else if ((*s == '%') && !s0)
+ {
+ s0 = s;
+ s = kindname;
+
+ /* Paranoia -- Never append multiple kindnames */
+ kindname = "";
+ }
+
+#ifndef JP
+ /* Pluralizer */
+ else if (*s == '~')
+ {
+ /* Add a plural if needed */
+ if (!(mode & OD_NO_PLURAL) && (o_ptr->number != 1))
+ {
+ char k = t[-1];
+
+ /* Mega-Hack */
+
+ /* Hack -- "Cutlass-es" and "Torch-es" */
+ if ((k == 's') || (k == 'h')) *t++ = 'e';
+
+ /* Add an 's' */
+ *t++ = 's';
+ }
+ s++;
+ }
+#endif
+
+ /* Normal */
else
{
/* Copy */
- *t++ = *s;
+ *t++ = *s++;
}
}
*t = '\0';
- /* Append the "kind name" to the "base name" */
-#ifndef JP
- if (append_name)
- {
- t = object_desc_str(t, " of ");
- t = object_desc_str(t, get_object_name(o_ptr));
- }
-#endif
-
-
#ifdef JP
- /* '¡Ø'¤«¤é»Ï¤Þ¤ëÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤Î̾Á°¤ÏºÇ¸å¤ËÉղ乤ë */
- if (known) {
- /* ¥é¥ó¥À¥à¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤Î̾Á°¤Ï¥»¡¼¥Ö¥Õ¥¡¥¤¥ë¤ËµÏ¿
- ¤µ¤ì¤ë¤Î¤Ç¡¢±Ñ¸ìÈǤÎ̾Á°¤â¤½¤ì¤é¤·¤¯ÊÑ´¹¤¹¤ë */
+ /* '『'から始まる伝説のアイテムの名前は最後に付加する */
+ if (known)
+ {
+ /* ランダムアーティファクトの名前はセーブファイルに記録
+ されるので、英語版の名前もそれらしく変換する */
if (o_ptr->art_name)
- { char temp[256];int itemp;
- strcpy(temp, quark_str(o_ptr->art_name));
- /* MEGA HACK by ita*/
- if ( strncmp( temp , "¡Ø" , 2 ) == 0 ) t=object_desc_str(t, temp);else
- if( temp[0]=='\'' ) { itemp=strlen(temp);temp[itemp-1]=0;
- t=object_desc_str(t,"¡Ø");
- t=object_desc_str(t,&temp[1]);
- t=object_desc_str(t,"¡Ù");}
-
- }
- else if (o_ptr->name1) {
- artifact_type *a_ptr = &a_info[o_ptr->name1];
- if ( strncmp( (a_name + a_ptr->name) , "¡Ø" , 2 ) == 0 ){
- t=object_desc_str(t, (a_name + a_ptr->name));
- }
- }
+ {
+ char temp[256];
+ int itemp;
+ strcpy(temp, quark_str(o_ptr->art_name));
+ /* MEGA HACK by ita */
+ if (strncmp(temp, "『", 2) == 0 ||
+ strncmp(temp, "《", 2) == 0)
+ t = object_desc_str(t, temp);
+ else if (temp[0] == '\'')
+ {
+ itemp = strlen(temp);
+ temp[itemp - 1] = 0;
+ t = object_desc_str(t, "『");
+ t = object_desc_str(t, &temp[1]);
+ t = object_desc_str(t, "』");
+ }
+ }
+ else if (object_is_fixed_artifact(o_ptr))
+ {
+ artifact_type *a_ptr = &a_info[o_ptr->name1];
+ if (strncmp(a_name + a_ptr->name, "『", 2) == 0)
+ {
+ t = object_desc_str(t, a_name + a_ptr->name);
+ }
+ }
else if (o_ptr->inscription)
{
cptr str = quark_str(o_ptr->inscription);
if (*str)
{
/* Find the '#' */
- cptr str = strchr(quark_str(o_ptr->inscription), '#');
+ cptr str_aux = my_strchr(quark_str(o_ptr->inscription), '#');
/* Add the false name */
- t=object_desc_str(t,"¡Ø");
- t = object_desc_str(t, &str[1]);
- t=object_desc_str(t,"¡Ù");
+ t = object_desc_str(t,"『");
+ t = object_desc_str(t, &str_aux[1]);
+ t = object_desc_str(t,"』");
}
}
- }
+ }
#else
- if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
+ if (object_is_smith(o_ptr))
{
- t = object_desc_str(t,format(" of %s the Smith",player_name));
+ t = object_desc_str(t,format(" of %s the Smith",p_ptr->name));
}
/* Hack -- Append "Artifact" or "Special" names */
if (o_ptr->art_name)
{
t = object_desc_chr(t, ' ');
-
t = object_desc_str(t, quark_str(o_ptr->art_name));
}
/* Grab any artifact name */
- else if (o_ptr->name1)
+ else if (object_is_fixed_artifact(o_ptr))
{
artifact_type *a_ptr = &a_info[o_ptr->name1];
t = object_desc_chr(t, ' ');
- t = object_desc_str(t, (a_name + a_ptr->name));
+ t = object_desc_str(t, a_name + a_ptr->name);
}
/* Grab any ego-item name */
else
{
- if (o_ptr->name2)
+ if (object_is_ego(o_ptr))
{
ego_item_type *e_ptr = &e_info[o_ptr->name2];
t = object_desc_chr(t, ' ');
- t = object_desc_str(t, (e_name + e_ptr->name));
+ t = object_desc_str(t, e_name + e_ptr->name);
}
- if (o_ptr->inscription && strchr(quark_str(o_ptr->inscription), '#'))
+ if (o_ptr->inscription && my_strchr(quark_str(o_ptr->inscription), '#'))
{
/* Find the '#' */
- cptr str = strchr(quark_str(o_ptr->inscription), '#');
+ cptr str = my_strchr(quark_str(o_ptr->inscription), '#');
/* Add the false name */
t = object_desc_chr(t, ' ');
#endif
-
/* No more details wanted */
- if (mode < 1) goto copyback;
+ if (mode & OD_NAME_ONLY) goto object_desc_done;
/* Hack -- Chests must be described in detail */
if (o_ptr->tval == TV_CHEST)
/* May be "empty" */
else if (!o_ptr->pval)
{
-#ifdef JP
-t = object_desc_str(t, "(¶õ)");
-#else
- t = object_desc_str(t, " (empty)");
-#endif
-
+ t = object_desc_str(t, _("(空)", " (empty)"));
}
/* May be "disarmed" */
{
if (chest_traps[0 - o_ptr->pval])
{
-#ifdef JP
-t = object_desc_str(t, "(²ò½üºÑ)");
-#else
- t = object_desc_str(t, " (disarmed)");
-#endif
-
+ t = object_desc_str(t, _("(解除済)", " (disarmed)"));
}
else
{
-#ifdef JP
-t = object_desc_str(t, "(Èó»Ü¾û)");
-#else
- t = object_desc_str(t, " (unlocked)");
-#endif
-
+ t = object_desc_str(t, _("(非施錠)", " (unlocked)"));
}
}
{
case 0:
{
-#ifdef JP
-t = object_desc_str(t, "(»Ü¾û)");
-#else
- t = object_desc_str(t, " (Locked)");
-#endif
-
+ t = object_desc_str(t, _("(施錠)", " (Locked)"));
break;
}
case CHEST_LOSE_STR:
{
-#ifdef JP
-t = object_desc_str(t, "(ÆÇ¿Ë)");
-#else
- t = object_desc_str(t, " (Poison Needle)");
-#endif
-
+ t = object_desc_str(t, _("(毒針)", " (Poison Needle)"));
break;
}
case CHEST_LOSE_CON:
{
-#ifdef JP
-t = object_desc_str(t, "(ÆÇ¿Ë)");
-#else
- t = object_desc_str(t, " (Poison Needle)");
-#endif
-
+ t = object_desc_str(t, _("(毒針)", " (Poison Needle)"));
break;
}
case CHEST_POISON:
{
-#ifdef JP
-t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
-#else
- t = object_desc_str(t, " (Gas Trap)");
-#endif
-
+ t = object_desc_str(t, _("(ガス・トラップ)", " (Gas Trap)"));
break;
}
case CHEST_PARALYZE:
{
-#ifdef JP
-t = object_desc_str(t, "(¥¬¥¹¡¦¥È¥é¥Ã¥×)");
-#else
- t = object_desc_str(t, " (Gas Trap)");
-#endif
-
+ t = object_desc_str(t, _("(ガス・トラップ)", " (Gas Trap)"));
break;
}
case CHEST_EXPLODE:
{
-#ifdef JP
-t = object_desc_str(t, "(ÇúȯÁõÃÖ)");
-#else
- t = object_desc_str(t, " (Explosion Device)");
-#endif
-
+ t = object_desc_str(t, _("(爆発装置)", " (Explosion Device)"));
break;
}
case CHEST_SUMMON:
case CHEST_E_SUMMON:
case CHEST_H_SUMMON:
{
-#ifdef JP
-t = object_desc_str(t, "(¾¤´¤Î¥ë¡¼¥ó)");
-#else
- t = object_desc_str(t, " (Summoning Runes)");
-#endif
-
+ t = object_desc_str(t, _("(召喚のルーン)", " (Summoning Runes)"));
break;
}
case CHEST_RUNES_OF_EVIL:
{
-#ifdef JP
-t = object_desc_str(t, "(¼Ù°¤Ê¥ë¡¼¥ó)");
-#else
- t = object_desc_str(t, " (Gleaming Black Runes)");
-#endif
-
+ t = object_desc_str(t, _("(邪悪なルーン)", " (Gleaming Black Runes)"));
break;
}
case CHEST_ALARM:
{
-#ifdef JP
-t = object_desc_str(t, "(·ÙÊóÁõÃÖ)");
-#else
- t = object_desc_str(t, " (Alarm)");
-#endif
-
+ t = object_desc_str(t, _("(警報装置)", " (Alarm)"));
break;
}
default:
{
-#ifdef JP
-t = object_desc_str(t, "(¥Þ¥ë¥Á¡¦¥È¥é¥Ã¥×)");
-#else
- t = object_desc_str(t, " (Multiple Traps)");
-#endif
-
+ t = object_desc_str(t, _("(マルチ・トラップ)", " (Multiple Traps)"));
break;
}
}
if (have_flag(flgs, TR_SHOW_MODS)) show_weapon = TRUE;
/* Display the item like a weapon */
+ if (object_is_smith(o_ptr) && (o_ptr->xtra3 == 1 + ESSENCE_SLAY_GLOVE))
+ show_weapon = TRUE;
+
+ /* Display the item like a weapon */
if (o_ptr->to_h && o_ptr->to_d) show_weapon = TRUE;
/* Display the item like armour */
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, ' ');
case TV_BOW:
/* Mega-Hack -- Extract the "base power" */
- power = (o_ptr->sval % 10);
+ power = bow_tmul(o_ptr->sval);
/* Apply the "Extra Might" flag */
if (have_flag(flgs, TR_XTRA_MIGHT)) power++;
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;
}
bow_ptr = &inventory[INVEN_BOW];
- /* if have a firing weapon + ammo matches bow*/
- if (bow_ptr->k_idx &&
- (((bow_ptr->sval == SV_SLING) && (o_ptr->tval == TV_SHOT)) ||
- (((bow_ptr->sval == SV_SHORT_BOW) ||
- (bow_ptr->sval == SV_LONG_BOW) ||
- (bow_ptr->sval == SV_NAMAKE_BOW)) && (o_ptr->tval == TV_ARROW)) ||
- (((bow_ptr->sval == SV_LIGHT_XBOW) ||
- (bow_ptr->sval == SV_HEAVY_XBOW)) && (o_ptr->tval == TV_BOLT))))
+ /* If have a firing weapon + ammo matches bow */
+ if (bow_ptr->k_idx && (o_ptr->tval == p_ptr->tval_ammo))
{
- int avgdam = 10;
- int tmul;
- s16b energy_fire;
-
- avgdam = o_ptr->dd * (o_ptr->ds + 1) * 10 / 2;
+ int avgdam = o_ptr->dd * (o_ptr->ds + 1) * 10 / 2;
+ int tmul = bow_tmul(bow_ptr->sval);
+ ENERGY energy_fire = bow_energy(bow_ptr->sval);
- /* See if the bow is "known" - then set damage bonus*/
- if (object_known_p(bow_ptr))
- {
- avgdam += (bow_ptr->to_d * 10);
- }
+ /* See if the bow is "known" - then set damage bonus */
+ if (object_is_known(bow_ptr)) avgdam += (bow_ptr->to_d * 10);
- /* effect of ammo */
+ /* Effect of ammo */
if (known) avgdam += (o_ptr->to_d * 10);
- energy_fire = bow_energy(bow_ptr->sval);
- tmul = bow_tmul(bow_ptr->sval);
-
/* Get extra "power" from "extra might" */
if (p_ptr->xtra_might) tmul++;
tmul = tmul * (100 + (int)(adj_str_td[p_ptr->stat_ind[A_STR]]) - 128);
- /* launcher multiplier */
+ /* 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');
}
else
{
- /* calc effects of energy */
+ /* Calc effects of energy */
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(known ? o_ptr->to_h : 0, known ? bow_ptr->to_h : 0);
+
+ t = object_desc_chr(t, '/');
+ t = object_desc_num(t, percent / 100);
+ t = object_desc_chr(t, '.');
+ if(percent % 100 < 10)
+ {
+ t = object_desc_chr(t, '0');
+ }
+ t = object_desc_num(t, percent % 100);
+ t = object_desc_str(t, show_ammo_detail ? "% crit" : "%");
+ }
}
t = object_desc_chr(t, p2);
}
else if ((p_ptr->pclass == CLASS_NINJA) && (o_ptr->tval == TV_SPIKE))
{
- int avgdam;
- s16b energy_fire;
-
- if (p_ptr->mighty_throw)
- avgdam = 1 + 3;
- else
- avgdam = 1;
- avgdam += ((p_ptr->lev+30)*(p_ptr->lev+30)-900)/55;
+ int avgdam = p_ptr->mighty_throw ? (1 + 3) : 1;
+ s16b energy_fire = 100 - p_ptr->lev;
- energy_fire = 100 - p_ptr->lev;
+ avgdam += ((p_ptr->lev + 30) * (p_ptr->lev + 30) - 900) / 55;
- /* display (shot damage/ avg damage) */
+ /* Display (shot damage/ avg damage) */
t = object_desc_chr(t, ' ');
t = object_desc_chr(t, p1);
t = object_desc_num(t, avgdam);
t = object_desc_chr(t, '/');
- /* calc effects of energy */
+ /* Calc effects of energy */
avgdam = 100 * avgdam / energy_fire;
t = object_desc_num(t, avgdam);
-
t = object_desc_chr(t, p2);
}
-
/* Add the armor bonuses */
if (known)
/* No more details wanted */
- if (mode < 2) goto copyback;
+ if (mode & OD_NAME_AND_ENCHANT) goto object_desc_done;
- /*
- * Hack -- Wands and Staffs have charges. Make certain how many charges
- * a stack of staffs really has is clear. -LM-
- */
- if (known &&
- ((o_ptr->tval == TV_STAFF) ||
- (o_ptr->tval == TV_WAND)))
+ if (known) /* Known item only */
{
- /* Dump " (N charges)" */
- t = object_desc_chr(t, ' ');
- t = object_desc_chr(t, p1);
-
- /* Clear explaination for staffs. */
- if ((o_ptr->tval == TV_STAFF) && (o_ptr->number > 1))
- {
- t = object_desc_num(t, o_ptr->number);
- t = object_desc_str(t, "x ");
- }
- t = object_desc_num(t, o_ptr->pval);
-#ifdef JP
- t = object_desc_str(t, "²óʬ");
-#else
- t = object_desc_str(t, " charge");
-
- if (o_ptr->pval != 1)
+ /*
+ * Hack -- Wands and Staffs have charges. Make certain how many charges
+ * a stack of staffs really has is clear. -LM-
+ */
+ if (((o_ptr->tval == TV_STAFF) || (o_ptr->tval == TV_WAND)))
{
- t = object_desc_chr(t, 's');
- }
-#endif
-
+ /* Dump " (N charges)" */
+ t = object_desc_chr(t, ' ');
+ t = object_desc_chr(t, p1);
- t = object_desc_chr(t, p2);
- }
- /* Hack -- Rods have a "charging" indicator. Now that stacks of rods may
- * be in any state of charge or discharge, this now includes a number. -LM-
- */
- else if (known && (o_ptr->tval == TV_ROD))
- {
- /* Hack -- Dump " (# charging)" if relevant */
- if (o_ptr->timeout)
- {
- /* Stacks of rods display an exact count of charging rods. */
- if (o_ptr->number > 1)
+ /* Clear explaination for staffs. */
+ if ((o_ptr->tval == TV_STAFF) && (o_ptr->number > 1))
{
- /* Paranoia. */
- if (k_ptr->pval == 0) k_ptr->pval = 1;
-
- /* Find out how many rods are charging, by dividing
- * current timeout by each rod's maximum timeout.
- * Ensure that any remainder is rounded up. Display
- * very discharged stacks as merely fully discharged.
- */
- power = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval;
- if (power > o_ptr->number) power = o_ptr->number;
-
- /* Display prettily. */
- t = object_desc_str(t, " (");
- t = object_desc_num(t, power);
+ t = object_desc_num(t, o_ptr->number);
+ t = object_desc_str(t, "x ");
+ }
+ t = object_desc_num(t, o_ptr->pval);
#ifdef JP
- t = object_desc_str(t, "ËÜ ½¼Å¶Ãæ)");
+ t = object_desc_str(t, "回分");
#else
- t = object_desc_str(t, " charging)");
+ t = object_desc_str(t, " charge");
+ if (o_ptr->pval != 1) t = object_desc_chr(t, 's');
#endif
- }
-
- /* "one Rod of Perception (1 charging)" would look tacky. */
- else
+ t = object_desc_chr(t, p2);
+ }
+ /* Hack -- Rods have a "charging" indicator. Now that stacks of rods may
+ * be in any state of charge or discharge, this now includes a number. -LM-
+ */
+ else if (o_ptr->tval == TV_ROD)
+ {
+ /* Hack -- Dump " (# charging)" if relevant */
+ if (o_ptr->timeout)
{
-#ifdef JP
-t = object_desc_str(t, "(½¼Å¶Ãæ)");
-#else
- t = object_desc_str(t, " (charging)");
-#endif
+ /* Stacks of rods display an exact count of charging rods. */
+ if (o_ptr->number > 1)
+ {
+ /* Paranoia. */
+ if (k_ptr->pval == 0) k_ptr->pval = 1;
+
+ /* Find out how many rods are charging, by dividing
+ * current timeout by each rod's maximum timeout.
+ * Ensure that any remainder is rounded up. Display
+ * very discharged stacks as merely fully discharged.
+ */
+ power = (o_ptr->timeout + (k_ptr->pval - 1)) / k_ptr->pval;
+ if (power > o_ptr->number) power = o_ptr->number;
+
+ /* Display prettily. */
+ t = object_desc_str(t, " (");
+ t = object_desc_num(t, power);
+ t = object_desc_str(t, _("本 充填中)", " charging)"));
+ }
+ /* "one Rod of Perception (1 charging)" would look tacky. */
+ else
+ {
+ t = object_desc_str(t, _("(充填中)", " (charging)"));
+ }
}
}
- }
- /* Dump "pval" flags for wearable items */
- if (known && (have_pval_flags(flgs)))
- {
- /* Start the display */
- t = object_desc_chr(t, ' ');
- t = object_desc_chr(t, p1);
+ /* Dump "pval" flags for wearable items */
+ if (have_pval_flags(flgs))
+ {
+ /* Start the display */
+ t = object_desc_chr(t, ' ');
+ t = object_desc_chr(t, p1);
- /* Dump the "pval" itself */
- t = object_desc_int(t, o_ptr->pval);
+ /* Dump the "pval" itself */
+ t = object_desc_int(t, o_ptr->pval);
- /* Do not display the "pval" flags */
- if (have_flag(flgs, TR_HIDE_TYPE))
- {
- /* Nothing */
- }
+ /* Do not display the "pval" flags */
+ if (have_flag(flgs, TR_HIDE_TYPE))
+ {
+ /* Nothing */
+ }
- /* Speed */
- else if (have_flag(flgs, TR_SPEED))
- {
- /* Dump " to speed" */
+ /* Speed */
+ else if (have_flag(flgs, TR_SPEED))
+ {
+ /* Dump " to speed" */
+ t = object_desc_str(t, _("加速", " to speed"));
+ }
+
+ /* Attack speed */
+ else if (have_flag(flgs, TR_BLOWS))
+ {
+ /* Add " attack" */
#ifdef JP
-t = object_desc_str(t, "²Ã®");
+ t = object_desc_str(t, "攻撃");
#else
- t = object_desc_str(t, " to speed");
+ t = object_desc_str(t, " attack");
+
+ /* Add "attacks" */
+ if (ABS(o_ptr->pval) != 1) t = object_desc_chr(t, 's');
#endif
+ }
- }
+ /* Stealth */
+ else if (have_flag(flgs, TR_STEALTH))
+ {
+ /* Dump " to stealth" */
+ t = object_desc_str(t, _("隠密", " to stealth"));
+ }
- /* Attack speed */
- else if (have_flag(flgs, TR_BLOWS))
- {
- /* Add " attack" */
-#ifdef JP
-t = object_desc_str(t, "¹¶·â");
-#else
- t = object_desc_str(t, " attack");
+ /* Search */
+ else if (have_flag(flgs, TR_SEARCH))
+ {
+ /* Dump " to searching" */
+ t = object_desc_str(t, _("探索", " to searching"));
+ }
- /* Add "attacks" */
- if (ABS(o_ptr->pval) != 1) t = object_desc_chr(t, 's');
-#endif
+ /* Infravision */
+ else if (have_flag(flgs, TR_INFRA))
+ {
+ /* Dump " to infravision" */
+ t = object_desc_str(t, _("赤外線視力", " to infravision"));
+ }
+ /* Finish the display */
+ t = object_desc_chr(t, p2);
}
- /* Stealth */
- else if (have_flag(flgs, TR_STEALTH))
+ /* Hack -- Process Lanterns/Torches */
+ if ((o_ptr->tval == TV_LITE) && (!(object_is_fixed_artifact(o_ptr) || (o_ptr->sval == SV_LITE_FEANOR))))
{
- /* Dump " to stealth" */
+ /* Hack -- Turns of light for normal lites */
#ifdef JP
-t = object_desc_str(t, "±£Ì©");
+ t = object_desc_chr(t, '(');
#else
- t = object_desc_str(t, " to stealth");
+ t = object_desc_str(t, " (with ");
#endif
+ if (o_ptr->name2 == EGO_LITE_LONG) t = object_desc_num(t, o_ptr->xtra4 * 2);
+ else t = object_desc_num(t, o_ptr->xtra4);
+ t = object_desc_str(t, _("ターンの寿命)", " turns of light)"));
}
- /* Search */
- else if (have_flag(flgs, TR_SEARCH))
+ /* Indicate charging objects, but not rods. */
+ if (o_ptr->timeout && (o_ptr->tval != TV_ROD))
{
- /* Dump " to searching" */
-#ifdef JP
-t = object_desc_str(t, "õº÷");
-#else
- t = object_desc_str(t, " to searching");
-#endif
-
+ /* Hack -- Dump " (charging)" if relevant */
+ t = object_desc_str(t, _("(充填中)", " (charging)"));
}
+ }
- /* Infravision */
- else if (have_flag(flgs, TR_INFRA))
- {
- /* Dump " to infravision" */
-#ifdef JP
-t = object_desc_str(t, "ÀÖ³°Àþ»ëÎÏ");
-#else
- t = object_desc_str(t, " to infravision");
-#endif
- }
+ /* No more details wanted */
+ if (mode & OD_OMIT_INSCRIPTION) goto object_desc_done;
- /* Tunneling */
- else if (have_flag(flgs, TR_TUNNEL))
- {
- /* Nothing */
- }
- /* Finish the display */
- t = object_desc_chr(t, p2);
- }
+ /* Prepare real inscriptions in a buffer */
+ tmp_val2[0] = '\0';
- /* Hack -- Process Lanterns/Torches */
- if (known && (o_ptr->tval == TV_LITE) && (!(artifact_p(o_ptr) || (o_ptr->sval == SV_LITE_FEANOR))))
+ /* Auto abbreviation inscribe */
+ if ((abbrev_extra || abbrev_all) && (o_ptr->ident & IDENT_MENTAL))
{
- /* Hack -- Turns of light for normal lites */
-#ifdef JP
-t = object_desc_str(t, "(");
-#else
- t = object_desc_str(t, " (with ");
-#endif
+ if (!o_ptr->inscription || !my_strchr(quark_str(o_ptr->inscription), '%'))
+ {
+ bool kanji, all;
- if (o_ptr->name2 == EGO_LITE_LONG) t = object_desc_num(t, o_ptr->xtra4*2);
- else t = object_desc_num(t, o_ptr->xtra4);
#ifdef JP
-t = object_desc_str(t, "¥¿¡¼¥ó¤Î¼÷Ì¿)");
+ kanji = TRUE;
#else
- t = object_desc_str(t, " turns of light)");
+ kanji = FALSE;
#endif
+ all = abbrev_all;
+ get_ability_abbreviation(tmp_val2, o_ptr, kanji, all);
+ }
}
-
- /* Indicate charging objects, but not rods. */
- if (known && o_ptr->timeout && o_ptr->tval != TV_ROD)
+ /* Use the standard inscription if available */
+ if (o_ptr->inscription)
{
- /* Hack -- Dump " (charging)" if relevant */
-#ifdef JP
-t = object_desc_str(t, "(½¼Å¶Ãæ)");
-#else
- t = object_desc_str(t, " (charging)");
-#endif
+ char buff[1024];
- }
+ if (tmp_val2[0]) strcat(tmp_val2, ", ");
+ /* Get inscription and convert {%} */
+ get_inscription(buff, o_ptr);
- /* No more details wanted */
- if (mode < 3) goto copyback;
+ /* strcat with correct treating of kanji */
+ my_strcat(tmp_val2, buff, sizeof(tmp_val2));
+ }
- /* No inscription yet */
- tmp_val2[0] = '\0';
+ /* No fake inscription yet */
+ fake_insc_buf[0] = '\0';
/* Use the game-generated "feeling" otherwise, if available */
if (o_ptr->feeling)
{
- strcpy(tmp_val2, game_inscriptions[o_ptr->feeling]);
+ strcpy(fake_insc_buf, game_inscriptions[o_ptr->feeling]);
}
/* Note "cursed" if the item is known to be cursed */
- else if (cursed_p(o_ptr) && (known || (o_ptr->ident & (IDENT_SENSE))))
+ else if (object_is_cursed(o_ptr) && (known || (o_ptr->ident & IDENT_SENSE)))
{
-#ifdef JP
-strcpy(tmp_val2, "¼ö¤ï¤ì¤Æ¤¤¤ë");
-#else
- strcpy(tmp_val2, "cursed");
-#endif
-
+ strcpy(fake_insc_buf, _("呪われている", "cursed"));
}
-
+
/* Note "unidentified" if the item is unidentified */
- else if ((o_ptr->tval == TV_RING || o_ptr->tval == TV_AMULET
- || o_ptr->tval == TV_LITE || o_ptr->tval == TV_FIGURINE)
- && object_aware_p(o_ptr) && !object_known_p(o_ptr)
- && !((o_ptr->ident)&IDENT_SENSE))
+ else if (((o_ptr->tval == TV_RING) || (o_ptr->tval == TV_AMULET)
+ || (o_ptr->tval == TV_LITE) || (o_ptr->tval == TV_FIGURINE))
+ && aware && !known
+ && !(o_ptr->ident & IDENT_SENSE))
{
-#ifdef JP
-strcpy(tmp_val2, "̤´ÕÄê");
-#else
- strcpy(tmp_val2, "unidentified");
-#endif
+ strcpy(fake_insc_buf, _("未鑑定", "unidentified"));
}
/* Mega-Hack -- note empty wands/staffs */
- else if (!known && (o_ptr->ident & (IDENT_EMPTY)))
+ else if (!known && (o_ptr->ident & IDENT_EMPTY))
{
-#ifdef JP
-strcpy(tmp_val2, "¶õ");
-#else
- strcpy(tmp_val2, "empty");
-#endif
-
+ strcpy(fake_insc_buf, _("空", "empty"));
}
/* Note "tried" if the object has been tested unsuccessfully */
- else if (!aware && object_tried_p(o_ptr))
+ else if (!aware && object_is_tried(o_ptr))
{
-#ifdef JP
-strcpy(tmp_val2, "̤ȽÌÀ");
-#else
- strcpy(tmp_val2, "tried");
-#endif
-
+ strcpy(fake_insc_buf, _("未判明", "tried"));
}
- /* Use the standard inscription if available */
- if (o_ptr->inscription)
+ /* Note the discount, if any */
+ if (o_ptr->discount)
{
- char buff[1024];
-
- if (tmp_val2[0]) strcat(tmp_val2, ", ");
+ /* Hidden by real inscription unless in a store */
+ if (!tmp_val2[0] || (o_ptr->ident & IDENT_STORE))
+ {
+ char discount_num_buf[4];
- /* Get inscription and convert {%} */
- get_inscription(buff, o_ptr);
+ /* Append to other fake inscriptions if any */
+ if (fake_insc_buf[0]) strcat(fake_insc_buf, ", ");
- /* strcat with correct treating of kanji */
- my_strcat(tmp_val2, buff, sizeof(tmp_val2));
+ (void)object_desc_num(discount_num_buf, o_ptr->discount);
+ strcat(fake_insc_buf, discount_num_buf);
+ strcat(fake_insc_buf, _("%引き", "% off"));
+ }
}
- /* Note the discount, if any */
- else if (o_ptr->discount && !(tmp_val2[0]))
- {
- (void)object_desc_num(tmp_val2, o_ptr->discount);
-#ifdef JP
- strcat(tmp_val2, "%°ú¤");
-#else
- strcat(tmp_val2, "% off");
-#endif
-
- }
/* Append the inscription, if any */
- if (tmp_val2[0])
+ if (fake_insc_buf[0] || tmp_val2[0])
{
/* Append the inscription */
t = object_desc_chr(t, ' ');
t = object_desc_chr(t, c1);
- t = object_desc_str(t, tmp_val2);
- t = object_desc_chr(t, c2);
- }
-copyback:
- t = tmp_val;
- for (i = 0; i < MAX_NLEN-2; i++)
- {
-#ifdef JP
- if (iskanji(*(t+i)))
+ /* Append fake inscriptions */
+ if (fake_insc_buf[0])
{
- *(buf+i) = *(t+i);
- i++;
+ t = object_desc_str(t, fake_insc_buf);
}
-#endif
- *(buf+i) = *(t+i);
- }
- if (i == MAX_NLEN-2)
- {
-#ifdef JP
- if (iskanji(*(t+i)))
- *(buf+i) = '\0';
- else
-#endif
- *(buf+i) = *(t+i);
+
+ /* Append a separater */
+ if (fake_insc_buf[0] && tmp_val2[0])
+ {
+ t = object_desc_chr(t, ',');
+ t = object_desc_chr(t, ' ');
+ }
+
+ /* Append real inscriptions */
+ if (tmp_val2[0])
+ {
+ t = object_desc_str(t, tmp_val2);
+ }
+
+ t = object_desc_chr(t, c2);
}
- *(buf+MAX_NLEN-1) = '\0';
+
+object_desc_done:
+ my_strcpy(buf, tmp_val, MAX_NLEN);
}
+