diff options
Diffstat (limited to 'src/object1.cc')
-rw-r--r-- | src/object1.cc | 1328 |
1 files changed, 495 insertions, 833 deletions
diff --git a/src/object1.cc b/src/object1.cc index 3fb2ef26..157637a9 100644 --- a/src/object1.cc +++ b/src/object1.cc @@ -13,7 +13,6 @@ #include "cave_type.hpp" #include "cmd2.hpp" #include "cmd6.hpp" -#include "dungeon.hpp" #include "dungeon_info_type.hpp" #include "ego_item_type.hpp" #include "feature_type.hpp" @@ -48,11 +47,10 @@ #include "store_info_type.hpp" #include "tables.hpp" #include "util.hpp" -#include "util.h" -#include "variable.h" #include "variable.hpp" #include "wilderness_type_info.hpp" #include "xtra1.hpp" +#include "z-form.hpp" #include "z-rand.hpp" #include <boost/algorithm/string/join.hpp> @@ -81,301 +79,149 @@ static void apply_flags_set(s16b a_idx, s16b set_idx, object_flag_set *f); */ static bool item_tester_full; - /* - * Max sizes of the following arrays + * Color arrays */ -#define MAX_ROCKS 62 /* Used with rings (min 58) */ -#define MAX_AMULETS 34 /* Used with amulets (min 30) */ -#define MAX_WOODS 35 /* Used with staffs (min 32) */ -#define MAX_METALS 39 /* Used with wands/rods (min 32/30) */ -#define MAX_COLORS 66 /* Used with potions (min 62) */ -#define MAX_SHROOM 20 /* Used with mushrooms (min 20) */ -#define MAX_TITLES 55 /* Used with scrolls (min 55) */ -#define MAX_SYLLABLES 164 /* Used with scrolls (see below) */ +namespace { // anonymous + +struct object_colors_t { + + std::vector<byte> rings { + 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_UMBER, TERM_L_DARK, TERM_L_WHITE, + TERM_WHITE, TERM_BLUE, TERM_L_WHITE + }; + + std::vector<byte> amulets { + TERM_YELLOW, TERM_L_UMBER, TERM_WHITE, TERM_L_WHITE, TERM_WHITE, + TERM_L_DARK, TERM_WHITE, TERM_ORANGE, TERM_L_UMBER, TERM_SLATE, + TERM_GREEN, TERM_YELLOW, TERM_L_BLUE, TERM_L_BLUE, TERM_L_WHITE, + TERM_L_UMBER, TERM_VIOLET, TERM_L_BLUE, TERM_BLUE, TERM_L_WHITE, + TERM_UMBER, TERM_L_BLUE, TERM_SLATE, TERM_RED, TERM_L_GREEN, + TERM_WHITE, TERM_L_DARK, TERM_L_WHITE, TERM_WHITE, TERM_L_GREEN, + TERM_GREEN, TERM_VIOLET, TERM_L_WHITE, TERM_UMBER + }; + + std::vector<byte> staves { + 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_UMBER, TERM_L_WHITE, TERM_L_UMBER + }; + + std::vector<byte> wands { + TERM_L_BLUE, TERM_L_DARK, TERM_WHITE, TERM_UMBER, TERM_YELLOW, + TERM_SLATE, TERM_L_WHITE, TERM_L_WHITE, TERM_L_WHITE, 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 + }; + + std::vector<byte> rods = wands; + + std::vector<byte> food { + 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 + }; + + std::vector<byte> potions { + TERM_WHITE, TERM_L_UMBER, TERM_GREEN, TERM_MULTI, + 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 + }; + + std::vector<byte> scrolls = + std::vector<byte>(55, TERM_WHITE); // All scrolls are white. -/* - * Rings (adjectives and colors) - */ - -static cptr ring_adj[MAX_ROCKS] = -{ - "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", "Copper", "Black Opal", "Nickel", - "Glass", "Fluorspar", "Agate", }; -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_UMBER, TERM_L_DARK, TERM_L_WHITE, - TERM_WHITE, TERM_BLUE, TERM_L_WHITE -}; - - -/* - * Amulets (adjectives and colors) - */ - -static cptr amulet_adj[MAX_AMULETS] = -{ - "Amber", "Driftwood", "Coral", "Agate", "Ivory", - "Obsidian", "Bone", "Brass", "Bronze", "Pewter", - "Tortoise Shell", "Golden", "Azure", "Crystal", "Silver", - "Copper", "Amethyst", "Mithril", "Sapphire", "Dragon Tooth", - "Carved Oak", "Sea Shell", "Flint Stone", "Ruby", "Scarab", - "Origami Paper", "Meteoric Iron", "Platinum", "Glass", "Beryl", - "Malachite", "Adamantite", "Mother-of-pearl", "Runed" -}; - -static byte amulet_col[MAX_AMULETS] = -{ - TERM_YELLOW, TERM_L_UMBER, TERM_WHITE, TERM_L_WHITE, TERM_WHITE, - TERM_L_DARK, TERM_WHITE, TERM_ORANGE, TERM_L_UMBER, TERM_SLATE, - TERM_GREEN, TERM_YELLOW, TERM_L_BLUE, TERM_L_BLUE, TERM_L_WHITE, - TERM_L_UMBER, TERM_VIOLET, TERM_L_BLUE, TERM_BLUE, TERM_L_WHITE, - TERM_UMBER, TERM_L_BLUE, TERM_SLATE, TERM_RED, TERM_L_GREEN, - TERM_WHITE, TERM_L_DARK, TERM_L_WHITE, TERM_WHITE, TERM_L_GREEN, - TERM_GREEN, TERM_VIOLET, TERM_L_WHITE, TERM_UMBER -}; - - -/* - * Staffs (adjectives and colors) - */ - -static cptr staff_adj[MAX_WOODS] = -{ - "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", "Gnarled", "Ivory", "Willow" -}; - -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_UMBER, TERM_L_WHITE, TERM_L_UMBER -}; - - -/* - * Wands (adjectives and colors) - */ - -static cptr wand_adj[MAX_METALS] = -{ - "Aluminium", "Cast Iron", "Chromium", "Copper", "Gold", - "Iron", "Magnesium", "Molybdenum", "Nickel", "Rusty", - "Silver", "Steel", "Tin", "Titanium", "Tungsten", - "Zirconium", "Zinc", "Aluminium-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" -}; - -static byte wand_col[MAX_METALS] = -{ - TERM_L_BLUE, TERM_L_DARK, TERM_WHITE, TERM_UMBER, TERM_YELLOW, - TERM_SLATE, TERM_L_WHITE, TERM_L_WHITE, TERM_L_WHITE, 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 -}; - - -/* - * 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] = -{ - "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", -}; - -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] = -{ - "Clear", "Light Brown", "Icky Green", "Strangely Phosphorescent", - "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", -}; - -static byte potion_col[MAX_COLORS] = -{ - TERM_WHITE, TERM_L_UMBER, TERM_GREEN, TERM_MULTI, - 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 -}; - - -/* - * Syllables for scrolls (must be 1-4 letters each) - */ - -static cptr syllables[MAX_SYLLABLES] = +object_colors_t const &object_colors_0() { - "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" -}; - -/* - * 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]; + object_colors_t const *instance = new object_colors_t(); + return *instance; +} -static byte scroll_col[MAX_TITLES]; +} // namespace anonymous -static byte object_flavor(object_kind const *k_ptr) +static byte object_flavor( + object_colors_t const &object_colors, + std::shared_ptr<object_kind> k_ptr) { /* Analyze the item */ switch (k_ptr->tval) { case TV_AMULET: { - return (0x80 + amulet_col[k_ptr->sval]); + return 0x80 + object_colors.amulets.at(k_ptr->sval); } case TV_RING: { - return (0x90 + ring_col[k_ptr->sval]); + return 0x90 + object_colors.rings.at(k_ptr->sval); } case TV_STAFF: { - return (0xA0 + staff_col[k_ptr->sval]); + return 0xA0 + object_colors.staves.at(k_ptr->sval); } case TV_WAND: { - return (0xB0 + wand_col[k_ptr->sval]); + return 0xB0 + object_colors.wands.at(k_ptr->sval); } case TV_ROD: { - return (0xC0 + rod_col[k_ptr->sval]); + return 0xC0 + object_colors.rods.at(k_ptr->sval); } case TV_SCROLL: { - return (0xD0 + scroll_col[k_ptr->sval]); + return 0xD0 + object_colors.scrolls.at(k_ptr->sval); } case TV_POTION: case TV_POTION2: { - return (0xE0 + potion_col[k_ptr->sval]); + return 0xE0 + object_colors.potions.at(k_ptr->sval); } case TV_FOOD: { if (k_ptr->sval < SV_FOOD_MIN_FOOD) { - return (0xF0 + food_col[k_ptr->sval]); + return 0xF0 + object_colors.food.at(k_ptr->sval); } break; @@ -393,7 +239,7 @@ static byte object_flavor(object_kind const *k_ptr) * * XXX XXX XXX Add "EASY_KNOW" flag to "k_info.txt" file */ -static bool_ object_easy_know(object_kind const *k_ptr) +static bool object_easy_know(std::shared_ptr<object_kind> k_ptr) { /* Analyze the "tval" */ switch (k_ptr->tval) @@ -403,7 +249,7 @@ static bool_ object_easy_know(object_kind const *k_ptr) case TV_MUSIC_BOOK: case TV_SYMBIOTIC_BOOK: { - return (TRUE); + return true; } /* Simple items */ @@ -416,7 +262,7 @@ static bool_ object_easy_know(object_kind const *k_ptr) case TV_SPIKE: case TV_JUNK: { - return (TRUE); + return true; } /* All Food, Potions, Scrolls, Rods */ @@ -428,8 +274,8 @@ static bool_ object_easy_know(object_kind const *k_ptr) case TV_ROD_MAIN: { if (k_ptr->flags & TR_NORM_ART) - return ( FALSE ); - return (TRUE); + return ( false ); + return true; } /* Some Rings, Amulets, Lites */ @@ -437,34 +283,16 @@ static bool_ object_easy_know(object_kind const *k_ptr) case TV_AMULET: case TV_LITE: { - if (k_ptr->flags & TR_EASY_KNOW) return (TRUE); - return (FALSE); + if (k_ptr->flags & TR_EASY_KNOW) return true; + return false; } } /* Nope */ - return (FALSE); + return false; } - -/** - * Shuffle flavor arrays into a random permutation - */ -template <std::size_t N> -static void shuffle_flavors(cptr adj[], byte col[]) -{ - // The classic Fisher-Yates shuffle - for (std::size_t i = N - 1; i > 0; i--) - { - int j = rand_int(i + 1); - std::swap(adj[i], adj[j]); - std::swap(col[i], col[j]); - } -} - - - /* * Prepare the "variable" part of the "k_info" array. * @@ -503,109 +331,34 @@ void flavor_init() /* Hack -- Induce consistant flavors */ set_quick_rng(seed_flavor()); - /* Efficiency -- Rods/Wands share initial array */ - for (std::size_t i = 0; i < MAX_METALS; i++) - { - rod_adj[i] = wand_adj[i]; - rod_col[i] = wand_col[i]; - } - + /* Get a copy of the initial colors */ + auto object_colors = object_colors_0(); /* Object flavors */ - shuffle_flavors<MAX_ROCKS>(ring_adj, ring_col); - shuffle_flavors<MAX_AMULETS>(amulet_adj, amulet_col); - shuffle_flavors<MAX_WOODS>(staff_adj, staff_col); - shuffle_flavors<MAX_METALS>(wand_adj, wand_col); - shuffle_flavors<MAX_METALS>(rod_adj, rod_col); - shuffle_flavors<MAX_SHROOM>(food_adj, food_col); - shuffle_flavors<MAX_COLORS - 4>(potion_adj + 4, potion_col + 4); - - /* Scrolls (random titles, always white) */ - for (std::size_t i = 0; i < MAX_TITLES; i++) - { - /* Get a new title */ - while (TRUE) - { - std::string buf; - - /* Collect words until done */ - while (1) - { - /* Choose one or two syllables */ - int s = ((rand_int(100) < 30) ? 1 : 2); - - /* Add a one or two syllable word */ - std::string tmp; - for (int q = 0; q < s; q++) - { - tmp += syllables[rand_int(MAX_SYLLABLES)]; - } - - /* Stop before getting too long */ - if (buf.size() + tmp.size() + 1 > 15) - { - break; - } - - /* Add the word with separator */ - if (buf.size() > 0) - { - buf += " "; - } - buf += tmp; - } - - /* Save the title */ - strcpy(scroll_adj[i], buf.c_str()); - - /* Assume okay */ - bool_ okay = TRUE; - - /* Check for "duplicate" scroll titles */ - for (std::size_t j = 0; j < i; j++) - { - cptr hack1 = scroll_adj[j]; - cptr hack2 = scroll_adj[i]; - - /* Compare first four characters */ - if (*hack1++ != *hack2++) continue; - if (*hack1++ != *hack2++) continue; - if (*hack1++ != *hack2++) continue; - if (*hack1++ != *hack2++) continue; - - /* Not okay */ - okay = FALSE; - - /* Stop looking */ - break; - } - - /* Break when done */ - if (okay) break; - } - - /* All scrolls are white */ - scroll_col[i] = TERM_WHITE; - } + shuffle(object_colors.rings); + shuffle(object_colors.amulets); + shuffle(object_colors.staves); + shuffle(object_colors.wands); + shuffle(object_colors.rods); + shuffle(object_colors.food); + shuffle(object_colors.scrolls); + shuffle(object_colors.potions); /* Hack -- Use the "complex" RNG */ set_complex_rng(); /* Analyze every object */ - for (auto &k_ref: k_info) + for (auto &k_entry: k_info) { - auto k_ptr = &k_ref; - - /* Skip "empty" objects */ - if (!k_ptr->name) continue; + auto const &k_ptr = k_entry.second; /* Extract "flavor" (if any) */ - k_ptr->flavor = object_flavor(k_ptr); + k_ptr->flavor = object_flavor(object_colors, k_ptr); /* No flavor yields aware */ if ((!k_ptr->flavor) && (k_ptr->tval != TV_ROD_MAIN)) { - k_ptr->aware = TRUE; + k_ptr->aware = true; } /* Check for "easily known" */ @@ -618,7 +371,7 @@ void flavor_init() * * This involves resetting various things to their "default" state. * - * If the "prefs" flag is TRUE, then we will also load the appropriate + * If the "prefs" flag is true, then we will also load the appropriate * "user pref file" based on the current setting of the "use_graphics" * flag. This is useful for switching "graphics" on/off. * @@ -652,11 +405,13 @@ void reset_visuals() } /* Extract default attr/char code for objects */ - for (auto &k_ref: k_info) + for (auto &k_entry: k_info) { + auto k_ptr = k_entry.second; + /* Default attr/char */ - k_ref.x_attr = k_ref.d_attr; - k_ref.x_char = k_ref.d_char; + k_ptr->x_attr = k_ptr->d_attr; + k_ptr->x_char = k_ptr->d_char; } /* Extract default attr/char code for monsters */ @@ -684,7 +439,7 @@ void reset_visuals() } /* Normal symbols */ - process_pref_file("font.prf"); + process_pref_file(name_file_pref("font")); } @@ -779,20 +534,22 @@ static void object_flags_xtra(object_type const *o_ptr, object_flag_set *f) /* * Disregard sets when calculating flags? */ -bool_ object_flags_no_set = FALSE; +bool object_flags_no_set = false; /* * Obtain the "flags" for an item */ object_flag_set object_flags(object_type const *o_ptr) { - auto const &k_info = game->edit_data.k_info; auto const &a_info = game->edit_data.a_info; - auto k_ptr = &k_info[o_ptr->k_idx]; + if (!o_ptr->k_ptr) + { + return object_flag_set(); + } /* Base object */ - auto f = k_ptr->flags; + auto f = o_ptr->k_ptr->flags; /* Artifact */ if (o_ptr->name1) @@ -817,24 +574,20 @@ object_flag_set object_flags(object_type const *o_ptr) } /* Return object granted power */ -int object_power(object_type *o_ptr) +boost::optional<int> object_power(object_type *o_ptr) { - auto const &k_info = game->edit_data.k_info; auto const &a_info = game->edit_data.a_info; auto const &e_info = game->edit_data.e_info; - auto k_ptr = &k_info[o_ptr->k_idx]; - int power = -1; - /* Base object */ - power = k_ptr->power; + auto power = o_ptr->k_ptr->power; /* Ego-item */ if (o_ptr->name2) { auto e_ptr = &e_info[o_ptr->name2]; - if (power == -1) + if (!power) { power = e_ptr->power; } @@ -843,7 +596,7 @@ int object_power(object_type *o_ptr) { auto e_ptr = &e_info[o_ptr->name2b]; - if (power == -1) + if (!power) { power = e_ptr->power; } @@ -855,13 +608,13 @@ int object_power(object_type *o_ptr) { auto a_ptr = &a_info[o_ptr->name1]; - if (power == -1) + if (!power) { power = a_ptr->power; } } - return (power); + return power; } @@ -871,17 +624,16 @@ int object_power(object_type *o_ptr) */ object_flag_set object_flags_known(object_type const *o_ptr) { - auto const &k_info = game->edit_data.k_info; auto const &a_info = game->edit_data.a_info; - auto k_ptr = &k_info[o_ptr->k_idx]; - /* Must be identified */ if (!object_known_p(o_ptr)) { return object_flag_set(); } + auto k_ptr = o_ptr->k_ptr; + /* Base object */ auto flags = k_ptr->flags; @@ -893,19 +645,11 @@ object_flag_set object_flags_known(object_type const *o_ptr) { auto a_ptr = &a_info[o_ptr->name1]; - /* Need full knowledge or spoilers */ - if ((o_ptr->ident & IDENT_MENTAL)) - { - flags = a_ptr->flags; + flags = a_ptr->flags; - if ((!object_flags_no_set) && (a_ptr->set != -1)) - { - apply_flags_set(o_ptr->name1, a_ptr->set, &flags); - } - } - else + if ((!object_flags_no_set) && (a_ptr->set != -1)) { - flags = object_flag_set(); + apply_flags_set(o_ptr->name1, a_ptr->set, &flags); } flags |= a_ptr->oflags; @@ -914,21 +658,10 @@ object_flag_set object_flags_known(object_type const *o_ptr) /* Random artifact or ego item! */ if (o_ptr->art_flags) { - /* Need full knowledge or spoilers */ - if ((o_ptr->ident & IDENT_MENTAL)) - { - flags |= o_ptr->art_flags; - } - + flags |= o_ptr->art_flags; flags |= o_ptr->art_oflags; } - /* Full knowledge for *identified* objects */ - if (!(o_ptr->ident & IDENT_MENTAL)) - { - return flags; - } - /* Extra powers */ object_flags_xtra(o_ptr, &flags); @@ -1025,29 +758,35 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) auto const &random_artifacts = game->random_artifacts; static auto const TR_PVAL_MASK = compute_pval_mask(); - bool_ hack_name = FALSE; + bool hack_name = false; - bool_ append_name = FALSE; + bool append_name = false; - bool_ show_weapon = FALSE; - bool_ show_armour = FALSE; + bool show_weapon = false; + bool show_armour = false; - auto k_ptr = &k_info[o_ptr->k_idx]; + auto k_ptr = o_ptr->k_ptr; /* Extract some flags */ auto const flags = object_flags(o_ptr); /* See if the object is "aware" */ - bool_ aware = object_aware_p(o_ptr); + bool aware = object_aware_p(o_ptr); /* See if the object is "known" */ - bool_ known = object_known_p(o_ptr); + bool known = object_known_p(o_ptr); /* Hack -- Extract the sub-type "indexx" */ auto const indexx = o_ptr->sval; /* Extract default "base" string */ - std::string basenm(k_ptr->name); + std::string k_name; + if (k_ptr) + { + k_name = k_ptr->name; + } + + std::string basenm(k_name); /* Assume no "modifier" string */ std::string modstr; @@ -1061,7 +800,6 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) case TV_JUNK: case TV_SPIKE: case TV_FLASK: - case TV_CHEST: case TV_INSTRUMENT: case TV_TOOL: case TV_DIGGING: @@ -1082,7 +820,7 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) case TV_SWORD: case TV_AXE: { - show_weapon = TRUE; + show_weapon = true; break; } @@ -1096,7 +834,7 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) case TV_HARD_ARMOR: case TV_DRAG_ARMOR: { - show_armour = TRUE; + show_armour = true; break; } @@ -1110,18 +848,13 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) /* Amulets (including a few "Specials") */ case TV_AMULET: { - /* Color the object */ - modstr = amulet_adj[indexx]; - if (aware) append_name = TRUE; + if (aware) append_name = true; - if (aware || o_ptr->ident & IDENT_STOREB) - basenm = "& Amulet~"; - else - basenm = aware ? "& # Amulet~" : "& # Amulet~"; + basenm = "& Amulet~"; if (known && o_ptr->artifact_name.empty() && artifact_p(o_ptr)) { - basenm = k_ptr->name; + basenm = k_name; } break; @@ -1130,21 +863,19 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) /* Rings (including a few "Specials") */ case TV_RING: { - /* Color the object */ - modstr = ring_adj[indexx]; - if (aware) append_name = TRUE; + if (aware) append_name = true; - if (aware || o_ptr->ident & IDENT_STOREB) - basenm = "& Ring~"; - else - basenm = aware ? "& # Ring~" : "& # Ring~"; + basenm = "& Ring~"; /* Hack -- The One Ring */ - if (!aware && (o_ptr->sval == SV_RING_POWER)) modstr = "Plain Gold"; + if (!aware && (o_ptr->sval == SV_RING_POWER)) + { + modstr = "Plain Gold"; + } if (known && o_ptr->artifact_name.empty() && artifact_p(o_ptr)) { - basenm = k_ptr->name; + basenm = k_name; } break; @@ -1152,80 +883,62 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) case TV_STAFF: { - /* Color the object */ - modstr = staff_adj[o_ptr->pval2 % MAX_WOODS]; - if (aware) append_name = TRUE; - if (aware || o_ptr->ident & IDENT_STOREB) - basenm = "& Staff~"; - else - basenm = "& # Staff~"; + if (aware) append_name = true; + + basenm = "& Staff~"; break; } case TV_WAND: { - /* Color the object */ - modstr = wand_adj[o_ptr->pval2 % MAX_METALS]; - if (aware) append_name = TRUE; - if (aware || o_ptr->ident & IDENT_STOREB) - basenm = "& Wand~"; - else - basenm = "& # Wand~"; + if (aware) append_name = true; + + basenm = "& Wand~"; break; } case TV_ROD: { - /* Color the object */ - modstr = rod_adj[indexx]; - if (aware) append_name = TRUE; - if (aware || o_ptr->ident & IDENT_STOREB) - basenm = "& Rod Tip~"; - else - basenm = aware ? "& # Rod Tip~" : "& # Rod Tip~"; + if (aware) append_name = true; + + basenm = "& Rod Tip~"; + if (o_ptr->sval == SV_ROD_HOME) { basenm = "& Great Rod Tip~ of Home Summoning"; - hack_name = TRUE; + hack_name = true; } + break; } case TV_ROD_MAIN: { - modstr = k_info[lookup_kind(TV_ROD, o_ptr->pval)].name; + modstr = k_info.at(lookup_kind(TV_ROD, o_ptr->pval))->name; break; } case TV_SCROLL: { - /* Color the object */ - modstr = scroll_adj[indexx]; - if (aware) append_name = TRUE; - if (aware || o_ptr->ident & IDENT_STOREB) - basenm = "& Scroll~"; - else - basenm = aware ? "& Scroll~ titled \"#\"" : "& Scroll~ titled \"#\""; + if (aware) append_name = true; + + basenm = "& Scroll~"; break; } case TV_POTION: case TV_POTION2: { - /* Color the object */ if ((o_ptr->tval != TV_POTION2) || (o_ptr->sval != SV_POTION2_MIMIC) || (!aware)) { - modstr = potion_adj[indexx]; - if (aware) append_name = TRUE; + if (aware) append_name = true; } else { modstr = get_mimic_name(o_ptr->pval2); } - if (aware || o_ptr->ident & IDENT_STOREB) - basenm = "& Potion~"; - else - basenm = aware ? "& # Potion~" : "& # Potion~"; + + basenm = "& Potion~"; break; } @@ -1234,13 +947,9 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) /* Ordinary food is "boring" */ if (o_ptr->sval >= SV_FOOD_MIN_FOOD) break; - /* Color the object */ - modstr = food_adj[indexx]; - if (aware) append_name = TRUE; - if (aware || o_ptr->ident & IDENT_STOREB) - basenm = "& Mushroom~"; - else - basenm = aware ? "& # Mushroom~" : "& # Mushroom~"; + if (aware) append_name = true; + + basenm = "& Mushroom~"; break; } @@ -1248,7 +957,7 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) /* Cloak of Mimicry */ case TV_CLOAK: { - show_armour = TRUE; + show_armour = true; if (o_ptr->sval == SV_MIMIC_CLOAK) { modstr = get_mimic_object_name(o_ptr->pval2); @@ -1333,7 +1042,7 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) monster_type monster; monster.r_idx = o_ptr->pval; monster.ego = o_ptr->pval2; - monster.ml = TRUE; + monster.ml = true; monster.status = MSTATUS_ENEMY; char name[80]; @@ -1362,7 +1071,7 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) case TV_DAEMON_BOOK: case TV_BOOK: { - basenm = k_ptr->name; + basenm = k_name; if (o_ptr->sval == 255) { modstr = spell_type_name(spell_at(o_ptr->pval)); @@ -1378,7 +1087,7 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) /* Mega Hack */ if ((!hack_name) && known && (k_ptr->flags & TR_FULL_NAME)) { - basenm = k_ptr->name; + basenm = k_name; } /* Copy of the base string _without_ a prefix */ @@ -1390,7 +1099,7 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) /* The object "expects" a "number" */ if (starts_with(basenm, "&")) { - cptr ego = NULL; + std::string ego; /* Grab any ego-item name */ if (known && (o_ptr->name2 || o_ptr->name2b) && (o_ptr->tval != TV_ROD_MAIN)) @@ -1446,7 +1155,7 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) t += "The "; } - else if (ego != NULL) + else if (!ego.empty()) { if (is_a_vowel(ego[0])) { @@ -1635,7 +1344,7 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) } else { - t += k_ptr->name; + t += k_name; } } @@ -1719,31 +1428,15 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) t += fmt::format(" (E:{}, L:{})", need_exp, o_ptr->elevel); } - /* Hack -- Chests must be described in detail */ - if (o_ptr->tval == TV_CHEST) - { - /* Not searched yet */ - if (!known) - { - /* Nothing */ - } - - /* May be "empty" */ - else if (!o_ptr->pval) - { - t += " (empty)"; - } - } - /* Display the item like a weapon */ - if (flags & TR_SHOW_MODS) show_weapon = TRUE; + if (flags & TR_SHOW_MODS) show_weapon = true; /* Display the item like a weapon */ - if (o_ptr->to_h && o_ptr->to_d) show_weapon = TRUE; + if (o_ptr->to_h && o_ptr->to_d) show_weapon = true; /* Display the item like armour */ - if (o_ptr->ac) show_armour = TRUE; + if (o_ptr->ac) show_armour = true; /* Dump base weapon info */ switch (o_ptr->tval) @@ -1976,12 +1669,6 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) { std::vector<std::string> inscrip; - /* Sensed stuff */ - if ((o_ptr->ident & (IDENT_SENSE)) && sense_desc[o_ptr->sense] && sense_desc[o_ptr->sense][0] != '\0') - { - inscrip.push_back(sense_desc[o_ptr->sense]); - } - /* Hack - Note "cursed" if the item is 'known' and cursed */ if (cursed_p(o_ptr) && known && inscrip.empty()) { @@ -1997,18 +1684,6 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode) inscrip.push_back(o_ptr->inscription.substr(0, pos)); } - /* Mega-Hack -- note empty wands/staffs */ - if (!known && (o_ptr->ident & (IDENT_EMPTY))) - { - inscrip.push_back("empty"); - } - - /* Note "tried" if the object has been tested unsuccessfully */ - if (!aware && object_tried_p(o_ptr)) - { - inscrip.push_back("tried"); - } - /* Note the discount, if any */ if ((o_ptr->discount) && o_ptr->inscription.empty()) { @@ -2051,31 +1726,20 @@ void object_desc(char *buf, object_type const *o_ptr, int pref, int mode) */ void object_desc_store(char *buf, object_type *o_ptr, int pref, int mode) { - auto &k_info = game->edit_data.k_info; - - /* Save the "aware" flag */ - bool_ hack_aware = k_info[o_ptr->k_idx].aware; - - /* Save the "known" flag */ - bool_ hack_known = (o_ptr->ident & (IDENT_KNOWN)) ? TRUE : FALSE; - - - /* Set the "known" flag */ - o_ptr->ident |= (IDENT_KNOWN); - - /* Force "aware" for description */ - k_info[o_ptr->k_idx].aware = TRUE; + /* Save the identification status */ + bool saved_aware = o_ptr->k_ptr->aware; + auto saved_identified = o_ptr->identified; + /* Force full identification for description */ + o_ptr->identified = true; + o_ptr->k_ptr->aware = true; /* Describe the object */ object_desc(buf, o_ptr, pref, mode); - - /* Restore "aware" flag */ - k_info[o_ptr->k_idx].aware = hack_aware; - - /* Clear the known flag */ - if (!hack_known) o_ptr->ident &= ~(IDENT_KNOWN); + /* Restore identification status */ + o_ptr->k_ptr->aware = saved_aware; + o_ptr->identified = saved_identified; } @@ -2085,7 +1749,7 @@ void object_desc_store(char *buf, object_type *o_ptr, int pref, int mode) * Determine the "Activation" (if any) for an artifact * Return a string, or NULL for "no activation" */ -cptr item_activation(object_type *o_ptr) +const char *item_activation(object_type *o_ptr) { auto const &a_info = game->edit_data.a_info; auto const &e_info = game->edit_data.e_info; @@ -2122,11 +1786,11 @@ cptr item_activation(object_type *o_ptr) } } - return activation_aux(o_ptr, FALSE, 0); + return activation_aux(o_ptr, false, 0); } /* Grab the tval desc */ -static bool_ grab_tval_desc(int tval) +static bool grab_tval_desc(int tval) { int tv = 0; @@ -2135,18 +1799,18 @@ static bool_ grab_tval_desc(int tval) tv++; } - if (!tval_descs[tv].tval) return FALSE; + if (!tval_descs[tv].tval) return false; text_out_c(TERM_L_BLUE, tval_descs[tv].desc); text_out("\n"); - return TRUE; + return true; } -static void check_first(bool_ *first) +static void check_first(bool *first) { if (*first) { - *first = FALSE; + *first = false; } else { @@ -2157,7 +1821,7 @@ static void check_first(bool_ *first) /* * Display the damage done with a multiplier */ -void output_dam(object_type *o_ptr, int mult, int mult2, cptr against, cptr against2, bool_ *first) +void output_dam(object_type *o_ptr, int mult, int mult2, const char *against, const char *against2, bool *first) { int dam; @@ -2201,8 +1865,7 @@ void output_dam(object_type *o_ptr, int mult, int mult2, cptr against, cptr agai void display_weapon_damage(object_type *o_ptr) { object_type forge, *old_ptr = &forge; - bool_ first = TRUE; - bool_ full = o_ptr->ident & (IDENT_MENTAL); + bool first = true; /* Extract the flags */ auto const flags = object_flags(o_ptr); @@ -2210,29 +1873,32 @@ void display_weapon_damage(object_type *o_ptr) /* Ok now the hackish stuff, we replace the current weapon with this one */ object_copy(old_ptr, &p_ptr->inventory[INVEN_WIELD]); object_copy(&p_ptr->inventory[INVEN_WIELD], o_ptr); - calc_bonuses(TRUE); + calc_bonuses(true); text_out("\nUsing it you would have "); text_out_c(TERM_L_GREEN, format("%d ", p_ptr->num_blow)); text_out(format("blow%s and do an average damage per turn of ", (p_ptr->num_blow) ? "s" : "")); - if (full && (flags & TR_SLAY_ANIMAL)) output_dam(o_ptr, 2, 0, "animals", NULL, &first); - if (full && (flags & TR_SLAY_EVIL)) output_dam(o_ptr, 2, 0, "evil creatures", NULL, &first); - if (full && (flags & TR_SLAY_ORC)) output_dam(o_ptr, 3, 0, "orcs", NULL, &first); - if (full && (flags & TR_SLAY_TROLL)) output_dam(o_ptr, 3, 0, "trolls", NULL, &first); - if (full && (flags & TR_SLAY_GIANT)) output_dam(o_ptr, 3, 0, "giants", NULL, &first); - if (full && (flags & TR_KILL_DRAGON)) output_dam(o_ptr, 5, 0, "dragons", NULL, &first); - else if (full && (flags & TR_SLAY_DRAGON)) output_dam(o_ptr, 3, 0, "dragons", NULL, &first); - if (full && (flags & TR_KILL_UNDEAD)) output_dam(o_ptr, 5, 0, "undead", NULL, &first); - else if (full && (flags & TR_SLAY_UNDEAD)) output_dam(o_ptr, 3, 0, "undead", NULL, &first); - if (full && (flags & TR_KILL_DEMON)) output_dam(o_ptr, 5, 0, "demons", NULL, &first); - else if (full && (flags & TR_SLAY_DEMON)) output_dam(o_ptr, 3, 0, "demons", NULL, &first); - - if (full && (flags & TR_BRAND_FIRE)) output_dam(o_ptr, 3, 6, "non fire resistant creatures", "fire susceptible creatures", &first); - if (full && (flags & TR_BRAND_COLD)) output_dam(o_ptr, 3, 6, "non cold resistant creatures", "cold susceptible creatures", &first); - if (full && (flags & TR_BRAND_ELEC)) output_dam(o_ptr, 3, 6, "non lightning resistant creatures", "lightning susceptible creatures", &first); - if (full && (flags & TR_BRAND_ACID)) output_dam(o_ptr, 3, 6, "non acid resistant creatures", "acid susceptible creatures", &first); - if (full && (flags & TR_BRAND_POIS)) output_dam(o_ptr, 3, 6, "non poison resistant creatures", "poison susceptible creatures", &first); + if (flags & TR_SLAY_ANIMAL) output_dam(o_ptr, 2, 0, "animals", NULL, &first); + if (flags & TR_SLAY_EVIL) output_dam(o_ptr, 2, 0, "evil creatures", NULL, &first); + if (flags & TR_SLAY_ORC) output_dam(o_ptr, 3, 0, "orcs", NULL, &first); + if (flags & TR_SLAY_TROLL) output_dam(o_ptr, 3, 0, "trolls", NULL, &first); + if (flags & TR_SLAY_GIANT) output_dam(o_ptr, 3, 0, "giants", NULL, &first); + + if (flags & TR_KILL_DRAGON) output_dam(o_ptr, 5, 0, "dragons", NULL, &first); + else if (flags & TR_SLAY_DRAGON) output_dam(o_ptr, 3, 0, "dragons", NULL, &first); + + if (flags & TR_KILL_UNDEAD) output_dam(o_ptr, 5, 0, "undead", NULL, &first); + else if (flags & TR_SLAY_UNDEAD) output_dam(o_ptr, 3, 0, "undead", NULL, &first); + + if (flags & TR_KILL_DEMON) output_dam(o_ptr, 5, 0, "demons", NULL, &first); + else if (flags & TR_SLAY_DEMON) output_dam(o_ptr, 3, 0, "demons", NULL, &first); + + if (flags & TR_BRAND_FIRE) output_dam(o_ptr, 3, 6, "non fire resistant creatures", "fire susceptible creatures", &first); + if (flags & TR_BRAND_COLD) output_dam(o_ptr, 3, 6, "non cold resistant creatures", "cold susceptible creatures", &first); + if (flags & TR_BRAND_ELEC) output_dam(o_ptr, 3, 6, "non lightning resistant creatures", "lightning susceptible creatures", &first); + if (flags & TR_BRAND_ACID) output_dam(o_ptr, 3, 6, "non acid resistant creatures", "acid susceptible creatures", &first); + if (flags & TR_BRAND_POIS) output_dam(o_ptr, 3, 6, "non poison resistant creatures", "poison susceptible creatures", &first); output_dam(o_ptr, 1, 0, (first) ? "all monsters" : "other monsters", NULL, &first); @@ -2240,13 +1906,13 @@ void display_weapon_damage(object_type *o_ptr) /* get our weapon back */ object_copy(&p_ptr->inventory[INVEN_WIELD], old_ptr); - calc_bonuses(TRUE); + calc_bonuses(true); } /* * Display the ammo damage done with a multiplier */ -void output_ammo_dam(object_type *o_ptr, int mult, int mult2, cptr against, cptr against2, bool_ *first) +void output_ammo_dam(object_type *o_ptr, int mult, int mult2, const char *against, const char *against2, bool *first) { int dam; object_type *b_ptr = &p_ptr->inventory[INVEN_BOW]; @@ -2299,9 +1965,8 @@ void output_ammo_dam(object_type *o_ptr, int mult, int mult2, cptr against, cptr */ void display_ammo_damage(object_type *o_ptr) { - bool_ first = TRUE; + bool first = true; int i; - bool_ full = o_ptr->ident & (IDENT_MENTAL); /* Extract the flags */ auto const flags = object_flags(o_ptr); @@ -2310,23 +1975,27 @@ void display_ammo_damage(object_type *o_ptr) text_out("\nUsing it you would do an average damage per throw of "); else text_out("\nUsing it with your current shooter you would do an average damage per shot of "); - if (full && (flags & TR_SLAY_ANIMAL)) output_ammo_dam(o_ptr, 2, 0, "animals", NULL, &first); - if (full && (flags & TR_SLAY_EVIL)) output_ammo_dam(o_ptr, 2, 0, "evil creatures", NULL, &first); - if (full && (flags & TR_SLAY_ORC)) output_ammo_dam(o_ptr, 3, 0, "orcs", NULL, &first); - if (full && (flags & TR_SLAY_TROLL)) output_ammo_dam(o_ptr, 3, 0, "trolls", NULL, &first); - if (full && (flags & TR_SLAY_GIANT)) output_ammo_dam(o_ptr, 3, 0, "giants", NULL, &first); - if (full && (flags & TR_KILL_DRAGON)) output_ammo_dam(o_ptr, 5, 0, "dragons", NULL, &first); - else if (full && (flags & TR_SLAY_DRAGON)) output_ammo_dam(o_ptr, 3, 0, "dragons", NULL, &first); - if (full && (flags & TR_KILL_UNDEAD)) output_ammo_dam(o_ptr, 5, 0, "undeads", NULL, &first); - else if (full && (flags & TR_SLAY_UNDEAD)) output_ammo_dam(o_ptr, 3, 0, "undeads", NULL, &first); - if (full && (flags & TR_KILL_DEMON)) output_ammo_dam(o_ptr, 5, 0, "demons", NULL, &first); - else if (full && (flags & TR_SLAY_DEMON)) output_ammo_dam(o_ptr, 3, 0, "demons", NULL, &first); - - if (full && (flags & TR_BRAND_FIRE)) output_ammo_dam(o_ptr, 3, 6, "non fire resistant creatures", "fire susceptible creatures", &first); - if (full && (flags & TR_BRAND_COLD)) output_ammo_dam(o_ptr, 3, 6, "non cold resistant creatures", "cold susceptible creatures", &first); - if (full && (flags & TR_BRAND_ELEC)) output_ammo_dam(o_ptr, 3, 6, "non lightning resistant creatures", "lightning susceptible creatures", &first); - if (full && (flags & TR_BRAND_ACID)) output_ammo_dam(o_ptr, 3, 6, "non acid resistant creatures", "acid susceptible creatures", &first); - if (full && (flags & TR_BRAND_POIS)) output_ammo_dam(o_ptr, 3, 6, "non poison resistant creatures", "poison susceptible creatures", &first); + + if (flags & TR_SLAY_ANIMAL) output_ammo_dam(o_ptr, 2, 0, "animals", NULL, &first); + if (flags & TR_SLAY_EVIL) output_ammo_dam(o_ptr, 2, 0, "evil creatures", NULL, &first); + if (flags & TR_SLAY_ORC) output_ammo_dam(o_ptr, 3, 0, "orcs", NULL, &first); + if (flags & TR_SLAY_TROLL) output_ammo_dam(o_ptr, 3, 0, "trolls", NULL, &first); + if (flags & TR_SLAY_GIANT) output_ammo_dam(o_ptr, 3, 0, "giants", NULL, &first); + + if (flags & TR_KILL_DRAGON) output_ammo_dam(o_ptr, 5, 0, "dragons", NULL, &first); + else if (flags & TR_SLAY_DRAGON) output_ammo_dam(o_ptr, 3, 0, "dragons", NULL, &first); + + if (flags & TR_KILL_UNDEAD) output_ammo_dam(o_ptr, 5, 0, "undeads", NULL, &first); + else if (flags & TR_SLAY_UNDEAD) output_ammo_dam(o_ptr, 3, 0, "undeads", NULL, &first); + + if (flags & TR_KILL_DEMON) output_ammo_dam(o_ptr, 5, 0, "demons", NULL, &first); + else if (flags & TR_SLAY_DEMON) output_ammo_dam(o_ptr, 3, 0, "demons", NULL, &first); + + if (flags & TR_BRAND_FIRE) output_ammo_dam(o_ptr, 3, 6, "non fire resistant creatures", "fire susceptible creatures", &first); + if (flags & TR_BRAND_COLD) output_ammo_dam(o_ptr, 3, 6, "non cold resistant creatures", "cold susceptible creatures", &first); + if (flags & TR_BRAND_ELEC) output_ammo_dam(o_ptr, 3, 6, "non lightning resistant creatures", "lightning susceptible creatures", &first); + if (flags & TR_BRAND_ACID) output_ammo_dam(o_ptr, 3, 6, "non acid resistant creatures", "acid susceptible creatures", &first); + if (flags & TR_BRAND_POIS) output_ammo_dam(o_ptr, 3, 6, "non poison resistant creatures", "poison susceptible creatures", &first); output_ammo_dam(o_ptr, 1, 0, (first) ? "all monsters" : "other monsters", NULL, &first); text_out(". "); @@ -2351,8 +2020,6 @@ void display_ammo_damage(object_type *o_ptr) */ static void describe_device(object_type *o_ptr) { - char buf[128]; - /* Wands/... of shcool spell */ if (((o_ptr->tval == TV_WAND) || (o_ptr->tval == TV_STAFF)) && object_known_p(o_ptr)) { @@ -2370,15 +2037,14 @@ static void describe_device(object_type *o_ptr) }); text_out("\nSpell level: "); - sprintf(buf, FMTs32b, get_level(o_ptr->pval2, 50)); - text_out_c(TERM_L_BLUE, buf); + + text_out_c(TERM_L_BLUE, fmt::format("{}", get_level(o_ptr->pval2, 50))); text_out("\nMinimum Magic Device level to increase spell level: "); - text_out_c(TERM_L_BLUE, format("%d", spell_type_skill_level(spell))); + text_out_c(TERM_L_BLUE, fmt::format("{}", spell_type_skill_level(spell))); text_out("\nSpell fail: "); - sprintf(buf, FMTs32b, spell_chance_device(spell)); - text_out_c(TERM_GREEN, buf); + text_out_c(TERM_GREEN, fmt::format("{}", spell_chance_device(spell))); text_out("\nSpell info: "); text_out_c(TERM_YELLOW, spell_type_info(spell)); @@ -2397,7 +2063,7 @@ static void describe_device(object_type *o_ptr) * Print the level something was found on * */ -static cptr object_out_desc_where_found(s16b level, s16b dungeon) +static const char *object_out_desc_where_found(s16b level, s16b dungeon) { auto const &d_info = game->edit_data.d_info; auto const &wf_info = game->edit_data.wf_info; @@ -2431,28 +2097,20 @@ static cptr object_out_desc_where_found(s16b level, s16b dungeon) /* * Describe an item */ -bool_ object_out_desc(object_type *o_ptr, FILE *fff, bool_ trim_down, bool_ wait_for_it) +bool object_out_desc(object_type *o_ptr, FILE *fff, bool trim_down, bool wait_for_it) { auto const &set_info = game->edit_data.set_info; auto const &st_info = game->edit_data.st_info; - auto const &k_info = game->edit_data.k_info; auto const &a_info = game->edit_data.a_info; - cptr vp[64]; + const char *vp[64]; byte vc[64]; int vn; object_flag_set flags; /* Extract the flags */ - if ((!(o_ptr->ident & (IDENT_MENTAL))) && (!fff)) - { - flags = o_ptr->art_oflags; - } - else - { - flags = object_flags(o_ptr); - } + flags = object_flags(o_ptr); if (fff) { @@ -2463,8 +2121,7 @@ bool_ object_out_desc(object_type *o_ptr, FILE *fff, bool_ trim_down, bool_ wait else { /* Save the screen */ - character_icky = TRUE; - Term_save(); + screen_save_no_flush(); /* Set up stuff for text_out */ text_out_hook = text_out_to_screen; @@ -2479,11 +2136,9 @@ bool_ object_out_desc(object_type *o_ptr, FILE *fff, bool_ trim_down, bool_ wait if (object_known_p(o_ptr)) { - if (o_ptr->k_idx && (!trim_down)) + if (o_ptr->k_ptr && (!trim_down)) { - auto k_ptr = &k_info[o_ptr->k_idx]; - - text_out_c(TERM_ORANGE, k_ptr->text); + text_out_c(TERM_ORANGE, o_ptr->k_ptr->text); text_out("\n"); } @@ -2507,7 +2162,7 @@ bool_ object_out_desc(object_type *o_ptr, FILE *fff, bool_ trim_down, bool_ wait else if (count_bits(o_ptr->pval3) > 1) text_out("It is sentient and can have access to the realms of "); else text_out("It is sentient and can have access to the realm of "); - bool_ first = TRUE; + bool first = true; for (std::size_t j = 0; j < flags_groups().size(); j++) { if (BIT(j) & o_ptr->pval3) @@ -2545,10 +2200,10 @@ bool_ object_out_desc(object_type *o_ptr, FILE *fff, bool_ trim_down, bool_ wait text_out(" if it is being worn. "); } /* Granted power */ - if (object_power(o_ptr) != -1) + if (auto power_idx = object_power(o_ptr)) { text_out("It grants you the power of "); - text_out(powers_type[object_power(o_ptr)].name); + text_out(game->powers.at(*power_idx)->name); text_out(" if it is being worn. "); } @@ -3162,11 +2817,6 @@ bool_ object_out_desc(object_type *o_ptr, FILE *fff, bool_ trim_down, bool_ wait { text_out("It has been blessed by the gods. "); } - if (flags & TR_AUTO_ID) - { - text_out("It identifies all items for you. "); - } - if (flags & TR_TELEPORT) { text_out("It induces random teleportation. "); @@ -3315,10 +2965,9 @@ bool_ object_out_desc(object_type *o_ptr, FILE *fff, bool_ trim_down, bool_ wait } } - if (!object_known_p(o_ptr)) + if (!object_known_p(o_ptr)) { text_out("\nYou might need to identify the item to know some more about it..."); - else if (!(o_ptr->ident & (IDENT_MENTAL))) - text_out("\nYou might need to *identify* the item to know more about it..."); + } } /* Copying how others seem to do it. -- neil */ @@ -3393,7 +3042,7 @@ bool_ object_out_desc(object_type *o_ptr, FILE *fff, bool_ trim_down, bool_ wait /* Restore the screen */ Term_load(); } - character_icky = FALSE; + character_icky = false; } @@ -3401,7 +3050,7 @@ bool_ object_out_desc(object_type *o_ptr, FILE *fff, bool_ trim_down, bool_ wait text_out_hook = text_out_to_screen; /* Gave knowledge */ - return (TRUE); + return true; } @@ -3435,7 +3084,7 @@ static s16b label_to_inven(int c) if ((i < 0) || (i > INVEN_PACK)) return ( -1); /* Empty slots can never be chosen */ - if (!p_ptr->inventory[i].k_idx) return ( -1); + if (!p_ptr->inventory[i].k_ptr) return ( -1); /* Return the index */ return (i); @@ -3457,7 +3106,7 @@ static s16b label_to_equip(int c) if ((i < INVEN_WIELD) || (i >= INVEN_TOTAL)) return ( -1); /* Empty slots can never be chosen */ - if (!p_ptr->inventory[i].k_idx) return ( -1); + if (!p_ptr->inventory[i].k_ptr) return ( -1); /* Return the index */ return (i); @@ -3480,7 +3129,10 @@ static int get_slot(int slot) if (p_ptr->body_parts[slot + i - INVEN_WIELD]) { /* Free ? return the slot */ - if (!p_ptr->inventory[slot + i].k_idx) return (slot + i); + if (!p_ptr->inventory[slot + i].k_ptr) + { + return (slot + i); + } } else break; @@ -3495,9 +3147,9 @@ static int get_slot(int slot) /* * Determine which equipment slot (if any) an item likes, ignoring the player's - * current body and stuff if ideal == TRUE + * current body and stuff if ideal == true */ -s16b wield_slot_ideal(object_type const *o_ptr, bool_ ideal) +s16b wield_slot_ideal(object_type const *o_ptr, bool ideal) { /* Slot for equipment */ switch (o_ptr->tval) @@ -3579,60 +3231,73 @@ s16b wield_slot_ideal(object_type const *o_ptr, bool_ ideal) case TV_SHOT: { + auto quiver_ptr = &p_ptr->inventory[INVEN_AMMO]; + auto launcher_ptr = &p_ptr->inventory[INVEN_BOW]; + if (ideal) { return INVEN_AMMO; } - else if (p_ptr->inventory[INVEN_AMMO].k_idx && - object_similar(o_ptr, &p_ptr->inventory[INVEN_AMMO]) && - p_ptr->inventory[INVEN_AMMO].number + o_ptr->number < MAX_STACK_SIZE) + else if (quiver_ptr->k_ptr && + object_similar(o_ptr, quiver_ptr) && + quiver_ptr->number + o_ptr->number < MAX_STACK_SIZE) { return get_slot(INVEN_AMMO); } - else if ((p_ptr->inventory[INVEN_BOW].k_idx) && (p_ptr->inventory[INVEN_BOW].tval == TV_BOW)) + else if (launcher_ptr->k_ptr && + (launcher_ptr->tval == TV_BOW) && + (launcher_ptr->sval < 10)) { - if (p_ptr->inventory[INVEN_BOW].sval < 10) - return get_slot(INVEN_AMMO); + return get_slot(INVEN_AMMO); } return -1; } case TV_ARROW: { + auto quiver_ptr = &p_ptr->inventory[INVEN_AMMO]; + auto launcher_ptr = &p_ptr->inventory[INVEN_BOW]; + if (ideal) { return INVEN_AMMO; } - else if (p_ptr->inventory[INVEN_AMMO].k_idx && - object_similar(o_ptr, &p_ptr->inventory[INVEN_AMMO]) && - p_ptr->inventory[INVEN_AMMO].number + o_ptr->number < MAX_STACK_SIZE) + else if (quiver_ptr->k_ptr && + object_similar(o_ptr, quiver_ptr) && + quiver_ptr->number + o_ptr->number < MAX_STACK_SIZE) { return get_slot(INVEN_AMMO); } - else if ((p_ptr->inventory[INVEN_BOW].k_idx) && (p_ptr->inventory[INVEN_BOW].tval == TV_BOW)) + else if (launcher_ptr->k_ptr && + (launcher_ptr->tval == TV_BOW) && + (launcher_ptr->sval >= 10) && + (launcher_ptr->sval < 20)) { - if ((p_ptr->inventory[INVEN_BOW].sval >= 10) && (p_ptr->inventory[INVEN_BOW].sval < 20)) - return get_slot(INVEN_AMMO); + return get_slot(INVEN_AMMO); } return -1; } case TV_BOLT: { + auto quiver_ptr = &p_ptr->inventory[INVEN_AMMO]; + auto launcher_ptr = &p_ptr->inventory[INVEN_BOW]; + if (ideal) { return INVEN_AMMO; } - else if (p_ptr->inventory[INVEN_AMMO].k_idx && - object_similar(o_ptr, &p_ptr->inventory[INVEN_AMMO]) && - p_ptr->inventory[INVEN_AMMO].number + o_ptr->number < MAX_STACK_SIZE) + else if (quiver_ptr->k_ptr && + object_similar(o_ptr, quiver_ptr) && + quiver_ptr->number + o_ptr->number < MAX_STACK_SIZE) { return get_slot(INVEN_AMMO); } - else if ((p_ptr->inventory[INVEN_BOW].k_idx) && (p_ptr->inventory[INVEN_BOW].tval == TV_BOW)) + else if ((launcher_ptr->k_ptr) && + (launcher_ptr->tval == TV_BOW) && + (launcher_ptr->sval >= 20)) { - if (p_ptr->inventory[INVEN_BOW].sval >= 20) - return get_slot(INVEN_AMMO); + return get_slot(INVEN_AMMO); } return -1; } @@ -3667,15 +3332,15 @@ s16b wield_slot_ideal(object_type const *o_ptr, bool_ ideal) */ s16b wield_slot(object_type const *o_ptr) { - return wield_slot_ideal(o_ptr, FALSE); + return wield_slot_ideal(o_ptr, false); } /* * Return a string mentioning how a given item is carried */ -static cptr mention_use(int i) +static const char *mention_use(int i) { - cptr p; + const char *p; /* Examine the location */ switch (i) @@ -3776,9 +3441,9 @@ static cptr mention_use(int i) * Return a string describing how a given item is being worn. * Currently, only used for items in the equipment, not inventory. */ -cptr describe_use(int i) +const char *describe_use(int i) { - cptr p = nullptr; + const char *p = nullptr; switch (i) { @@ -3885,7 +3550,7 @@ static bool item_tester_okay(object_type const *o_ptr, object_filter_t const &fi } /* Require an item */ - if (!o_ptr->k_idx) + if (!o_ptr->k_ptr) { return false; } @@ -3903,15 +3568,15 @@ static bool item_tester_okay(object_type const *o_ptr, object_filter_t const &fi -static void show_equip_aux(bool_ mirror, object_filter_t const &filter); -static void show_inven_aux(bool_ mirror, object_filter_t const &filter); +static void show_equip_aux(bool mirror, object_filter_t const &filter); +static void show_inven_aux(bool mirror, object_filter_t const &filter); /* * Choice window "shadow" of the "show_inven()" function */ void display_inven() { - show_inven_aux(TRUE, object_filter::True()); + show_inven_aux(true, object_filter::True()); } @@ -3921,7 +3586,7 @@ void display_inven() */ void display_equip() { - show_equip_aux(TRUE, object_filter::True()); + show_equip_aux(true, object_filter::True()); } @@ -3939,7 +3604,7 @@ byte get_item_letter_color(object_type const *o_ptr) if (ego_item_p(o_ptr)) color = TERM_L_BLUE; if (artifact_p(o_ptr)) color = TERM_YELLOW; if (o_ptr->name1 && ( -1 != a_info[o_ptr->name1].set)) color = TERM_GREEN; - if (o_ptr->name1 && (a_info[o_ptr->name1].flags & TR_ULTIMATE) && (o_ptr->ident & (IDENT_MENTAL))) color = TERM_VIOLET; + if (o_ptr->name1 && (a_info[o_ptr->name1].flags & TR_ULTIMATE)) color = TERM_VIOLET; return (color); } @@ -3950,7 +3615,7 @@ byte get_item_letter_color(object_type const *o_ptr) * * Hack -- do not display "trailing" empty slots */ -void show_inven_aux(bool_ mirror, const object_filter_t &filter) +void show_inven_aux(bool mirror, const object_filter_t &filter) { int i, j, k, l, z = 0; int row, col, len, lim; @@ -3990,7 +3655,10 @@ void show_inven_aux(bool_ mirror, const object_filter_t &filter) o_ptr = &p_ptr->inventory[i]; /* Skip non-objects */ - if (!o_ptr->k_idx) continue; + if (!o_ptr->k_ptr) + { + continue; + } /* Track */ z = i + 1; @@ -4012,7 +3680,7 @@ void show_inven_aux(bool_ mirror, const object_filter_t &filter) out_index[k] = i + 1; /* Describe the object */ - object_desc(o_name, o_ptr, TRUE, 3); + object_desc(o_name, o_ptr, true, 3); /* Hack -- enforce max length */ o_name[lim] = '\0'; @@ -4068,7 +3736,10 @@ void show_inven_aux(bool_ mirror, const object_filter_t &filter) byte a = object_attr(o_ptr); char c = object_char(o_ptr); - if (!o_ptr->k_idx) c = ' '; + if (!o_ptr->k_ptr) + { + c = ' '; + } Term_draw(col + 3, row + j, a, c); } @@ -4109,7 +3780,7 @@ void show_inven_aux(bool_ mirror, const object_filter_t &filter) static void show_inven(object_filter_t const &filter) { - show_inven_aux(FALSE, filter); + show_inven_aux(false, filter); } void show_inven_full() @@ -4121,7 +3792,7 @@ void show_inven_full() static void show_equip(object_filter_t const &filter) { - show_equip_aux(FALSE, filter); + show_equip_aux(false, filter); } void show_equip_full() @@ -4134,7 +3805,7 @@ void show_equip_full() /* * Display the equipment. */ -void show_equip_aux(bool_ mirror, object_filter_t const &filter) +void show_equip_aux(bool mirror, object_filter_t const &filter) { int i, j, k, l; int row, col, len, lim, idx; @@ -4186,14 +3857,14 @@ void show_equip_aux(bool_ mirror, object_filter_t const &filter) /* Inform the player that he/she can't use a shield */ if ((p_ptr->body_parts[i - INVEN_WIELD] == INVEN_ARM) && - !o_ptr->k_idx && - p_ptr->inventory[i - INVEN_ARM + INVEN_WIELD].k_idx) + !o_ptr->k_ptr && + p_ptr->inventory[i - INVEN_ARM + INVEN_WIELD].k_ptr) { object_type *q_ptr = &p_ptr->inventory[i - INVEN_ARM + INVEN_WIELD]; char q_name[80]; /* Description */ - object_desc(q_name, q_ptr, TRUE, 3); + object_desc(q_name, q_ptr, true, 3); /* Get weapon flags */ auto const flags = object_flags(q_ptr); @@ -4218,7 +3889,7 @@ void show_equip_aux(bool_ mirror, object_filter_t const &filter) } if ((p_ptr->body_parts[i - INVEN_WIELD] == INVEN_WIELD) && - !o_ptr->k_idx) + !o_ptr->k_ptr) { sprintf(o_name, "(%s)", get_melee_name()); @@ -4239,7 +3910,7 @@ void show_equip_aux(bool_ mirror, object_filter_t const &filter) idx++; /* Description */ - object_desc(o_name, o_ptr, TRUE, 3); + object_desc(o_name, o_ptr, true, 3); /* Truncate the description */ o_name[lim] = 0; @@ -4311,7 +3982,10 @@ void show_equip_aux(bool_ mirror, object_filter_t const &filter) byte a = object_attr(o_ptr); char c = object_char(o_ptr); - if (!o_ptr->k_idx) c = ' '; + if (!o_ptr->k_ptr) + { + c = ' '; + } Term_draw(col + 3, row + j, a, c); } @@ -4403,7 +4077,7 @@ void toggle_inven_equip() * * The item can be negative to mean "item on floor". */ -bool_ verify(cptr prompt, int item) +bool verify(const char *prompt, int item) { char o_name[80]; @@ -4415,7 +4089,7 @@ bool_ verify(cptr prompt, int item) o_ptr = get_object(item); /* Describe */ - object_desc(o_name, o_ptr, TRUE, 3); + object_desc(o_name, o_ptr, true, 3); /* Prompt */ sprintf(out_val, "%s %s? ", prompt, o_name); @@ -4430,7 +4104,7 @@ bool_ verify(cptr prompt, int item) * * The item can be negative to mean "item on floor". */ -static bool_ get_item_allow(int item) +static bool get_item_allow(int item) { /* Get object */ auto o_ptr = get_object(item); @@ -4438,7 +4112,7 @@ static bool_ get_item_allow(int item) /* No inscription */ if (o_ptr->inscription.empty()) { - return TRUE; + return true; } /* Find a '!' */ @@ -4451,7 +4125,7 @@ static bool_ get_item_allow(int item) if ((s[1] == command_cmd) || (s[1] == '*')) { /* Verify the choice */ - if (!verify("Really try", item)) return (FALSE); + if (!verify("Really try", item)) return false; } /* Find another '!' */ @@ -4459,7 +4133,7 @@ static bool_ get_item_allow(int item) } /* Allow it */ - return (TRUE); + return true; } @@ -4472,7 +4146,7 @@ static bool get_item_okay(int i, object_filter_t const &filter) /* Illegal items */ if ((i < 0) || (i >= INVEN_TOTAL)) { - return (FALSE); + return false; } /* Verify the item */ @@ -4498,7 +4172,7 @@ static int get_tag(int *cp, char tag) object_type *o_ptr = &p_ptr->inventory[i]; /* Skip non-objects */ - if (!o_ptr->k_idx) + if (!o_ptr->k_ptr) { continue; } @@ -4522,7 +4196,7 @@ static int get_tag(int *cp, char tag) *cp = i; /* Success */ - return (TRUE); + return true; } /* Check the special tags */ @@ -4532,7 +4206,7 @@ static int get_tag(int *cp, char tag) *cp = i; /* Success */ - return (TRUE); + return true; } /* Find another '@' */ @@ -4541,7 +4215,7 @@ static int get_tag(int *cp, char tag) } /* No such tag */ - return (FALSE); + return false; } /* @@ -4621,7 +4295,7 @@ static void show_floor(int y, int x, object_filter_t const &filter) o_ptr = &o_list[floor_list[i]]; /* Describe the object */ - object_desc(o_name, o_ptr, TRUE, 3); + object_desc(o_name, o_ptr, true, 3); /* Hack -- enforce max length */ o_name[lim] = '\0'; @@ -4688,26 +4362,26 @@ static void show_floor(int y, int x, object_filter_t const &filter) * This version of get_item() is called by get_item() when * the easy_floor is on. */ -static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter_t const &filter, select_by_name_t const &select_by_name) +static bool get_item_floor(int *cp, const char *pmt, const char *str, int mode, object_filter_t const &filter, select_by_name_t const &select_by_name) { char n1 = 0, n2 = 0, which = ' '; int j, k, i1, i2, e1, e2; - bool_ done, item; + bool done, item; - bool_ oops = FALSE; + bool oops = false; - bool_ equip = FALSE; - bool_ inven = FALSE; - bool_ floor = FALSE; - bool_ automat = FALSE; + bool equip = false; + bool inven = false; + bool floor = false; + bool automat = false; - bool_ allow_equip = FALSE; - bool_ allow_inven = FALSE; - bool_ allow_floor = FALSE; + bool allow_equip = false; + bool allow_inven = false; + bool allow_floor = false; - bool_ toggle = FALSE; + bool toggle = false; char tmp_val[160]; char out_val[160]; @@ -4734,7 +4408,7 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter if (item_tester_okay(o_ptr, filter)) { /* Success */ - return (TRUE); + return true; } } @@ -4742,16 +4416,16 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter else if (get_item_okay(*cp, filter)) { /* Success */ - return (TRUE); + return true; } } /* Extract args */ - if (mode & (USE_EQUIP)) equip = TRUE; - if (mode & (USE_INVEN)) inven = TRUE; - if (mode & (USE_FLOOR)) floor = TRUE; - if (mode & (USE_AUTO)) automat = TRUE; + if (mode & (USE_EQUIP)) equip = true; + if (mode & (USE_INVEN)) inven = true; + if (mode & (USE_FLOOR)) floor = true; + if (mode & (USE_AUTO)) automat = true; /* Paranoia XXX XXX XXX */ @@ -4759,10 +4433,10 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter /* Not done */ - done = FALSE; + done = false; /* No item selected */ - item = FALSE; + item = false; /* Full inventory */ @@ -4797,22 +4471,22 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter int const floor_num = floor_list.size(); // "int" for warning avoidance /* Accept inventory */ - if (i1 <= i2) allow_inven = TRUE; + if (i1 <= i2) allow_inven = true; /* Accept equipment */ - if (e1 <= e2) allow_equip = TRUE; + if (e1 <= e2) allow_equip = true; /* Accept floor */ - if (!floor_list.empty()) allow_floor = TRUE; + if (!floor_list.empty()) allow_floor = true; /* Require at least one legal choice */ if (!allow_inven && !allow_equip && !allow_floor) { /* Oops */ - oops = TRUE; + oops = true; /* Done */ - done = TRUE; + done = true; } /* Analyze choices */ @@ -4911,7 +4585,7 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter else if (command_wrk == (USE_FLOOR)) { j = floor_top; - k = MIN(floor_top + 23, floor_num) - 1; + k = std::min(floor_top + 23, floor_num) - 1; /* Extract the legal requests */ n1 = I2A(j - floor_top); @@ -5016,7 +4690,7 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter { case ESCAPE: { - done = TRUE; + done = true; break; } @@ -5078,7 +4752,7 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter * is only one item, we will always select it. * If we aren't examining the floor and there is only * one item, we will select it if floor_query_flag - * is FALSE. + * is false. */ if (floor_num == 1) { @@ -5090,14 +4764,14 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter /* Allow player to "refuse" certain actions */ if (!get_item_allow(k)) { - done = TRUE; + done = true; break; } /* Accept that choice */ (*cp) = k; - item = TRUE; - done = TRUE; + item = true; + done = true; break; } @@ -5147,14 +4821,14 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter /* Allow player to "refuse" certain actions */ if (!get_item_allow(k)) { - done = TRUE; + done = true; break; } /* Accept that choice */ (*cp) = k; - item = TRUE; - done = TRUE; + item = true; + done = true; break; } @@ -5184,14 +4858,14 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter /* Allow player to "refuse" certain actions */ if (!get_item_allow(k)) { - done = TRUE; + done = true; break; } /* Accept that choice */ (*cp) = k; - item = TRUE; - done = TRUE; + item = true; + done = true; } break; } @@ -5206,14 +4880,14 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter /* Allow player to "refuse" certain actions */ if (!get_item_allow(k)) { - done = TRUE; + done = true; break; } /* Accept that choice */ (*cp) = k; - item = TRUE; - done = TRUE; + item = true; + done = true; break; } @@ -5228,8 +4902,8 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter if (auto i = select_by_name(filter)) { (*cp) = *i; - item = TRUE; - done = TRUE; + item = true; + done = true; } break; } @@ -5293,21 +4967,21 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter /* Verify the item */ if (ver && !verify("Try", k)) { - done = TRUE; + done = true; break; } /* Allow player to "refuse" certain actions */ if (!get_item_allow(k)) { - done = TRUE; + done = true; break; } /* Accept that choice */ (*cp) = k; - item = TRUE; - done = TRUE; + item = true; + done = true; break; } } @@ -5359,7 +5033,7 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter /* * Let the user select an item, save its "index" * - * Return TRUE only if an acceptable item was chosen by the user. + * Return true only if an acceptable item was chosen by the user. * * The selected item must satisfy the "item_tester_hook()" function, * if that hook is set, and the "item_tester_tval", if that value is set. @@ -5383,29 +5057,29 @@ static bool_ get_item_floor(int *cp, cptr pmt, cptr str, int mode, object_filter * and prompt for its use. * * If a legal item is selected from the inventory, we save it in "cp" - * directly (0 to 35), and return TRUE. + * directly (0 to 35), and return true. * * If a legal item is selected from the floor, we save it in "cp" as - * a negative (-1 to -511), and return TRUE. + * a negative (-1 to -511), and return true. * * If no item is available, we do nothing to "cp", and we display a - * warning message, using "str" if available, and return FALSE. + * warning message, using "str" if available, and return false. * - * If no item is selected, we do nothing to "cp", and return FALSE. + * If no item is selected, we do nothing to "cp", and return false. * * Global "p_ptr->command_new" is used when viewing the inventory or equipment * to allow the user to enter a command while viewing those screens, and * also to induce "auto-enter" of stores, and other such stuff. * * Global "p_ptr->command_wrk" is used to choose between equip/inven listings. - * If it is TRUE then we are viewing inventory, else equipment. + * If it is true then we are viewing inventory, else equipment. * * We always erase the prompt when we are done, leaving a blank line, * or a warning message, if appropriate, if no items are available. */ -bool_ get_item(int *cp, cptr pmt, cptr str, int mode, object_filter_t const &filter, select_by_name_t const &select_by_name) +bool get_item(int *cp, const char *pmt, const char *str, int mode, object_filter_t const &filter, select_by_name_t const &select_by_name) { - automatizer_create = FALSE; + automatizer_create = false; return get_item_floor(cp, pmt, str, mode, filter, select_by_name); } @@ -5414,12 +5088,12 @@ bool_ get_item(int *cp, cptr pmt, cptr str, int mode, object_filter_t const &fil */ static bool item_tester_hook_getable(object_type const *o_ptr) { - if (!inven_carry_okay(o_ptr)) return (FALSE); + if (!inven_carry_okay(o_ptr)) return false; - if ((o_ptr->tval == TV_HYPNOS) && (!get_skill(SKILL_SYMBIOTIC))) return FALSE; + if ((o_ptr->tval == TV_HYPNOS) && (!get_skill(SKILL_SYMBIOTIC))) return false; /* Assume yes */ - return (TRUE); + return true; } /* @@ -5465,10 +5139,6 @@ int wear_ammo(object_type *o_ptr) { /* Warn the player */ msg_print("Oops! It feels deathly cold!"); - - /* Note the curse */ - o_ptr->ident |= (IDENT_SENSE); - o_ptr->sense = SENSE_CURSED; } /* Recalculate bonuses */ @@ -5519,7 +5189,7 @@ void pickup_ammo() /* Describe the object */ char o_name[80]; - object_desc(o_name, o_ptr, TRUE, 3); + object_desc(o_name, o_ptr, true, 3); /* Message */ msg_format("You have %s (%c).", o_name, index_to_label(slot)); @@ -5569,14 +5239,12 @@ void object_pickup(int this_o_idx) /* Access the item */ o_ptr = &o_list[this_o_idx]; - if (p_ptr->auto_id) - { - object_aware(o_ptr); - object_known(o_ptr); - } + /* Auto-identify */ + object_aware(o_ptr); + object_known(o_ptr); /* Describe the object */ - object_desc(o_name, o_ptr, TRUE, 3); + object_desc(o_name, o_ptr, true, 3); /* Note that the pack is too full */ if (!inven_carry_okay(o_ptr) && !object_similar(o_ptr, &p_ptr->inventory[INVEN_AMMO])) @@ -5606,7 +5274,7 @@ void object_pickup(int this_o_idx) } else { - slot = inven_carry(o_ptr, FALSE); + slot = inven_carry(o_ptr, false); } /* Sanity check */ @@ -5618,16 +5286,13 @@ void object_pickup(int this_o_idx) object_track(o_ptr); /* Describe the object */ - object_desc(o_name, o_ptr, TRUE, 3); + object_desc(o_name, o_ptr, true, 3); /* Message */ msg_format("You have %s (%c).", o_name, index_to_label(slot)); /* Delete the object */ delete_object_idx(this_o_idx); - - /* Sense object. */ - sense_inventory(); } } } @@ -5651,7 +5316,7 @@ static void absorb_gold(cave_type const *c_ptr) if (o_ptr->tval == TV_GOLD) { char goldname[80]; - object_desc(goldname, o_ptr, TRUE, 3); + object_desc(goldname, o_ptr, true, 3); /* Message */ msg_format("You have found %ld gold pieces worth of %s.", (long)o_ptr->pval, goldname); @@ -5687,21 +5352,14 @@ static void sense_floor(cave_type const *c_ptr) } } - /* Mega Hack -- If we have auto-Id, do an ID sweep *before* squleching, - * so that we don't have to walk over things twice to get them - * squelched. --dsb */ - if (p_ptr->auto_id) + // Do an ID sweep *before* squleching so that we don't + // have to walk over things twice to get them squelched. + for (auto const o_idx: floor_object_idxs) { - for (auto const o_idx: floor_object_idxs) - { - object_type *o_ptr = get_object(o_idx); - object_aware(o_ptr); - object_known(o_ptr); - } + object_type *o_ptr = get_object(o_idx); + object_aware(o_ptr); + object_known(o_ptr); } - - /* Sense floor tile */ - sense_objects(floor_object_idxs); } void py_pickup_floor(int pickup) @@ -5737,7 +5395,7 @@ void py_pickup_floor(int pickup) { /* Describe */ char o_name[80] = ""; - object_desc(o_name, o_ptr, TRUE, 3); + object_desc(o_name, o_ptr, true, 3); /* Message */ msg_format("You see %s.", o_name); @@ -5745,13 +5403,13 @@ void py_pickup_floor(int pickup) else { /* Are we actually going to pick up? */ - bool_ do_pickup = TRUE; + bool do_pickup = true; /* Hack -- query every item */ if (options->carry_query_flag || !can_carry_heavy(&o_list[floor_o_idx])) { char o_name[80] = ""; - object_desc(o_name, o_ptr, TRUE, 3); + object_desc(o_name, o_ptr, true, 3); if (!inven_carry_okay(o_ptr) && !object_similar(o_ptr, &p_ptr->inventory[INVEN_AMMO])) { @@ -5784,19 +5442,19 @@ void py_pickup_floor(int pickup) else { /* Prompt for the item to pick up */ - cptr q = "Get which item? "; - cptr s = "You have no room in your pack for any of the items here."; + const char *q = "Get which item? "; + const char *s = "You have no room in your pack for any of the items here."; int item; if (get_item(&item, q, s, (USE_FLOOR), item_tester_hook_getable)) { s16b this_o_idx = 0 - item; - bool_ do_pickup = TRUE; + bool do_pickup = true; if (!can_carry_heavy(&o_list[this_o_idx])) { /* Describe the object */ char o_name[80] = ""; - object_desc(o_name, &o_list[this_o_idx], TRUE, 3); + object_desc(o_name, &o_list[this_o_idx], true, 3); /* Prompt */ char out_val[160]; @@ -5844,7 +5502,7 @@ static void gain_flag_group(object_type *o_ptr) { char o_name[80]; - object_desc(o_name, o_ptr, FALSE, 0); + object_desc(o_name, o_ptr, false, 0); msg_format("%s gains access to the %s realm.", o_name, flags_groups()[grp].name); } } @@ -5917,7 +5575,7 @@ static void gain_flag_group_flag(object_type *o_ptr) // Describe what happened char o_name[80]; - object_desc(o_name, o_ptr, FALSE, 0); + object_desc(o_name, o_ptr, false, 0); msg_format("%s gains a new power from the %s realm.", o_name, flags_groups()[grp].name); // We're done. @@ -5986,12 +5644,12 @@ void object_gain_level(object_type *o_ptr) /* * Item sets fcts */ -bool_ wield_set(s16b a_idx, s16b set_idx, bool_ silent) +bool wield_set(s16b a_idx, s16b set_idx, bool silent) { auto &set_info = game->edit_data.set_info; auto const &a_info = game->edit_data.a_info; - if ( -1 == a_info[a_idx].set) return (FALSE); + if ( -1 == a_info[a_idx].set) return false; auto s_ptr = &set_info[set_idx]; @@ -6007,7 +5665,7 @@ bool_ wield_set(s16b a_idx, s16b set_idx, bool_ silent) if (!s_ptr->arts[i].present) { s_ptr->num_use++; - s_ptr->arts[i].present = TRUE; + s_ptr->arts[i].present = true; if (s_ptr->num_use > s_ptr->num) { msg_print("ERROR!! s_ptr->num_use > s_ptr->use"); @@ -6016,18 +5674,18 @@ bool_ wield_set(s16b a_idx, s16b set_idx, bool_ silent) { cmsg_format(TERM_GREEN, "%s item set completed.", s_ptr->name.c_str()); } - return (TRUE); + return true; } - return (FALSE); + return false; } -bool_ takeoff_set(s16b a_idx, s16b set_idx) +bool takeoff_set(s16b a_idx, s16b set_idx) { auto &set_info = game->edit_data.set_info; auto const &a_info = game->edit_data.a_info; - if ( -1 == a_info[a_idx].set) return (FALSE); + if ( -1 == a_info[a_idx].set) return false; auto s_ptr = &set_info[set_idx]; @@ -6042,7 +5700,7 @@ bool_ takeoff_set(s16b a_idx, s16b set_idx) if (s_ptr->arts[i].present) { - s_ptr->arts[i].present = FALSE; + s_ptr->arts[i].present = false; assert(s_ptr->num_use > 0); s_ptr->num_use--; @@ -6052,10 +5710,10 @@ bool_ takeoff_set(s16b a_idx, s16b set_idx) cmsg_format(TERM_GREEN, "%s item set not complete anymore.", s_ptr->name.c_str()); } - return (TRUE); + return true; } - return (FALSE); + return false; } void apply_set(s16b a_idx, s16b set_idx) @@ -6117,81 +5775,87 @@ static void apply_flags_set(s16b a_idx, s16b set_idx, object_flag_set *f) } } -/* - * Return the "attr" for a given item. - * Use "flavor" if available. - * Default to user definitions. - */ - byte object_attr(object_type const *o_ptr) { - auto const &k_info = game->edit_data.k_info; auto const &random_artifacts = game->random_artifacts; + auto k_ptr = o_ptr->k_ptr; + if (o_ptr->tval == TV_RANDART) { return random_artifacts[o_ptr->sval].attr; } - else if (k_info[o_ptr->k_idx].flavor) + else if (!k_ptr) + { + return 0; + } + else if (k_ptr->flavor) { - return misc_to_attr[k_info[o_ptr->k_idx].flavor]; + return misc_to_attr[k_ptr->flavor]; } else { - return k_info[o_ptr->k_idx].x_attr; + return k_ptr->x_attr; } } -byte object_attr_default(object_type *o_ptr) +byte object_attr_default(object_type const *o_ptr) { - auto const &k_info = game->edit_data.k_info; auto const &random_artifacts = game->random_artifacts; + auto k_ptr = o_ptr->k_ptr; + if (o_ptr->tval == TV_RANDART) { return random_artifacts[o_ptr->sval].attr; } - else if (k_info[o_ptr->k_idx].flavor) + else if (!k_ptr) + { + return 0; + } + else if (k_ptr->flavor) { - return misc_to_attr[k_info[o_ptr->k_idx].flavor]; + return misc_to_attr[k_ptr->flavor]; } else { - return k_info[o_ptr->k_idx].d_attr; + return k_ptr->d_attr; } } -/* - * Return the "char" for a given item. - * Use "flavor" if available. - * Default to user definitions. - */ - char object_char(object_type const *o_ptr) { - auto const &k_info = game->edit_data.k_info; + auto k_ptr = o_ptr->k_ptr; - if (k_info[o_ptr->k_idx].flavor) + if (!k_ptr) + { + return '\0'; + } + else if (k_ptr->flavor) { - return misc_to_char[k_info[o_ptr->k_idx].flavor]; + return misc_to_char[k_ptr->flavor]; } else { - return k_info[o_ptr->k_idx].x_char; + return k_ptr->x_char; } } char object_char_default(object_type const *o_ptr) { - auto const &k_info = game->edit_data.k_info; + auto k_ptr = o_ptr->k_ptr; - if (k_info[o_ptr->k_idx].flavor) + if (!k_ptr) { - return misc_to_char[k_info[o_ptr->k_idx].flavor]; + return '\0'; + } + else if (k_ptr->flavor) + { + return misc_to_char[k_ptr->flavor]; } else { - return k_info[o_ptr->k_idx].d_char; + return k_ptr->d_char; } } @@ -6200,13 +5864,11 @@ char object_char_default(object_type const *o_ptr) */ bool artifact_p(object_type const *o_ptr) { - auto const &k_info = game->edit_data.k_info; - return (o_ptr->tval == TV_RANDART) || (o_ptr->name1 ? true : false) || (!o_ptr->artifact_name.empty()) || - ((k_info[o_ptr->k_idx].flags & TR_NORM_ART) ? true : false); + ((o_ptr->k_ptr && (o_ptr->k_ptr->flags & TR_NORM_ART)) ? true : false); } /** @@ -6214,7 +5876,7 @@ bool artifact_p(object_type const *o_ptr) */ bool ego_item_p(object_type const *o_ptr) { - return o_ptr->name2 || (o_ptr->name2b ? TRUE : FALSE); + return o_ptr->name2 || (o_ptr->name2b ? true : false); } /* @@ -6226,9 +5888,9 @@ bool is_ego_p(object_type const *o_ptr, s16b ego) } /** - * Is the given object identified as cursed? + * Is the given object cursed? */ bool cursed_p(object_type const *o_ptr) { - return o_ptr->ident & (IDENT_CURSED); + return bool(o_ptr->art_flags & TR_CURSED); } |