From 073ad3584fbf781ce10bef61ad4ff38850282f47 Mon Sep 17 00:00:00 2001 From: Bardur Arantsson Date: Tue, 21 Jun 2016 13:37:02 +0200 Subject: Rework TR{1,2,3,4,5}_* flags to flag_set<> --- src/init1.cc | 634 ++++++++++------------------------------------------------- 1 file changed, 100 insertions(+), 534 deletions(-) (limited to 'src/init1.cc') diff --git a/src/init1.cc b/src/init1.cc index 38736f0e..0a6ecff0 100644 --- a/src/init1.cc +++ b/src/init1.cc @@ -21,6 +21,8 @@ #include "monster_type.hpp" #include "object1.hpp" #include "object2.hpp" +#include "object_flag.hpp" +#include "object_flag_meta.hpp" #include "object_kind.hpp" #include "owner_type.hpp" #include "player_class.hpp" @@ -153,280 +155,6 @@ static cptr r_info_blow_effect[] = }; -/* - * Object flags - */ -static cptr k_info_flags1[] = -{ - "STR", - "INT", - "WIS", - "DEX", - "CON", - "CHR", - "MANA", - "SPELL", - "STEALTH", - "SEARCH", - "INFRA", - "TUNNEL", - "SPEED", - "BLOWS", - "CHAOTIC", - "VAMPIRIC", - "SLAY_ANIMAL", - "SLAY_EVIL", - "SLAY_UNDEAD", - "SLAY_DEMON", - "SLAY_ORC", - "SLAY_TROLL", - "SLAY_GIANT", - "SLAY_DRAGON", - "KILL_DRAGON", - "VORPAL", - "IMPACT", - "BRAND_POIS", - "BRAND_ACID", - "BRAND_ELEC", - "BRAND_FIRE", - "BRAND_COLD" -}; - -/* - * Object flags - */ -static cptr k_info_flags2[] = -{ - "SUST_STR", - "SUST_INT", - "SUST_WIS", - "SUST_DEX", - "SUST_CON", - "SUST_CHR", - "INVIS", - "LIFE", - "IM_ACID", - "IM_ELEC", - "IM_FIRE", - "IM_COLD", - "SENS_FIRE", - "REFLECT", - "FREE_ACT", - "HOLD_LIFE", - "RES_ACID", - "RES_ELEC", - "RES_FIRE", - "RES_COLD", - "RES_POIS", - "RES_FEAR", - "RES_LITE", - "RES_DARK", - "RES_BLIND", - "RES_CONF", - "RES_SOUND", - "RES_SHARDS", - "RES_NETHER", - "RES_NEXUS", - "RES_CHAOS", - "RES_DISEN" -}; - -/* - * Trap flags - */ -static cptr k_info_flags2_trap[] = -{ - "AUTOMATIC_5", - "AUTOMATIC_99", - "KILL_GHOST", - "TELEPORT_TO", - "ONLY_DRAGON", - "ONLY_DEMON", - "XXX3", - "XXX3", - "ONLY_ANIMAL", - "ONLY_UNDEAD", - "ONLY_EVIL", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", - "XXX3", -}; - - -/* - * Object flags - */ -static cptr k_info_flags3[] = -{ - "SH_FIRE", - "SH_ELEC", - "AUTO_CURSE", - "DECAY", - "NO_TELE", - "NO_MAGIC", - "WRAITH", - "TY_CURSE", - "EASY_KNOW", - "HIDE_TYPE", - "SHOW_MODS", - "INSTA_ART", - "FEATHER", - "LITE1", - "SEE_INVIS", - "NORM_ART", - "SLOW_DIGEST", - "REGEN", - "XTRA_MIGHT", - "XTRA_SHOTS", - "IGNORE_ACID", - "IGNORE_ELEC", - "IGNORE_FIRE", - "IGNORE_COLD", - "ACTIVATE", - "DRAIN_EXP", - "TELEPORT", - "AGGRAVATE", - "BLESSED", - "CURSED", - "HEAVY_CURSE", - "PERMA_CURSE" -}; - -/* - * Object flags - */ -static cptr k_info_flags4[] = -{ - "NEVER_BLOW", - "PRECOGNITION", - "BLACK_BREATH", - "RECHARGE", - "FLY", - "DG_CURSE", - "COULD2H", - "MUST2H", - "LEVELS", - "CLONE", - "SPECIAL_GENE", - "CLIMB", - "FAST_CAST", - "CAPACITY", - "CHARGING", - "CHEAPNESS", - "FOUNTAIN", - "ANTIMAGIC_50", - "XXX5", - "XXX5", - "XXX5", - "EASY_USE", - "IM_NETHER", - "RECHARGED", - "ULTIMATE", - "AUTO_ID", - "LITE2", - "LITE3", - "FUEL_LITE", - "XXX5", - "CURSE_NO_DROP", - "NO_RECHARGE" -}; - -/* - * Object flags - */ -static cptr k_info_flags5[] = -{ - "TEMPORARY", - "DRAIN_MANA", - "DRAIN_HP", - "KILL_DEMON", - "KILL_UNDEAD", - "CRIT", - "ATTR_MULTI", - "WOUNDING", - "FULL_NAME", - "LUCK", - "IMMOVABLE", - "SPELL_CONTAIN", - "RES_MORGUL", - "ACTIVATE_NO_WIELD", - "MAGIC_BREATH", - "WATER_BREATH", - "WIELD_CAST", - "RANDOM_RESIST", - "RANDOM_POWER", - "RANDOM_RES_OR_POWER", - "XXX8X20", - "XXX8X21", - "XXX8X22", - "XXX8X23", - "XXX8X24", - "XXX8X25", - "XXX8X26", - "XXX8X27", - "XXX8X28", - "XXX8X29", - "XXX8X02", - "XXX8X22", -}; - -/* - * ESP flags - */ -static cptr esp_flags[] = -{ - "ESP_ORC", - "ESP_TROLL", - "ESP_DRAGON", - "ESP_GIANT", - "ESP_DEMON", - "ESP_UNDEAD", - "ESP_EVIL", - "ESP_ANIMAL", - "ESP_THUNDERLORD", - "ESP_GOOD", - "ESP_NONLIVING", - "ESP_UNIQUE", - "ESP_SPIDER", - "XXX8X02", - "XXX8X02", - "XXX8X02", - "XXX8X02", - "XXX8X17", - "XXX8X18", - "XXX8X19", - "XXX8X20", - "XXX8X21", - "XXX8X22", - "XXX8X23", - "XXX8X24", - "XXX8X25", - "XXX8X26", - "XXX8X27", - "XXX8X28", - "XXX8X29", - "XXX8X02", - "ESP_ALL", -}; - /* Specially handled properties for ego-items */ static cptr ego_flags[] = @@ -1190,6 +918,7 @@ static errr grab_one_class_flag(u32b *choice, cptr what) /* Failure */ return (1); } + static errr grab_one_race_allow_flag(u32b *choice, cptr what) { int i; @@ -1263,19 +992,30 @@ static int get_activation(char *activation) return -1; } +/* + * Convert string to object_flag_set value + */ +static object_flag_set object_flag_set_from_string(cptr what) +{ + for (auto const flag_meta: object_flags_meta()) + { + if (streq(what, flag_meta->e_name)) + { + return flag_meta->flag_set; + }; + } + + return object_flag_set(); +} + /* * Grab one flag in an object_kind from a textual string */ -static errr grab_one_race_kind_flag(u32b *f1, u32b *f2, u32b *f3, u32b *f4, u32b *f5, u32b *esp, cptr what) +static errr grab_object_flag(object_flag_set *flags, cptr what) { - if (lookup_flags(what, - flag_tie(f1, k_info_flags1), - flag_tie(f2, k_info_flags2), - flag_tie(f3, k_info_flags3), - flag_tie(f4, k_info_flags4), - flag_tie(f5, k_info_flags5), - flag_tie(esp, esp_flags))) + if (object_flag_set f = object_flag_set_from_string(what)) { + *flags |= f; return 0; } @@ -1620,7 +1360,7 @@ errr init_player_info_txt(FILE *fp) /* Process 'F' for "level Flags" (multiple lines) */ if ((buf[0] == 'R') && (buf[2] == 'F')) { - if (0 != grab_one_race_kind_flag(&rp_ptr->oflags1[lev], &rp_ptr->oflags2[lev], &rp_ptr->oflags3[lev], &rp_ptr->oflags4[lev], &rp_ptr->oflags5[lev], &rp_ptr->oesp[lev], buf + 4)) + if (grab_object_flag(&rp_ptr->oflags[lev], buf + 4)) { return (5); } @@ -1916,7 +1656,7 @@ errr init_player_info_txt(FILE *fp) /* Process 'F' for "level Flags" (multiple lines) */ if ((buf[0] == 'S') && (buf[2] == 'F')) { - if (0 != grab_one_race_kind_flag(&rmp_ptr->oflags1[lev], &rmp_ptr->oflags2[lev], &rmp_ptr->oflags3[lev], &rmp_ptr->oflags4[lev], &rmp_ptr->oflags5[lev], &rmp_ptr->oesp[lev], buf + 4)) + if (0 != grab_object_flag(&rmp_ptr->oflags[lev], buf + 4)) { return (5); } @@ -2370,7 +2110,10 @@ errr init_player_info_txt(FILE *fp) } /* Parse this entry */ - if (0 != grab_one_race_kind_flag(&c_ptr->oflags1[lev], &c_ptr->oflags2[lev], &c_ptr->oflags3[lev], &c_ptr->oflags4[lev], &c_ptr->oflags5[lev], &c_ptr->oesp[lev], s)) return (5); + if (0 != grab_object_flag(&c_ptr->oflags[lev], s)) + { + return (5); + } /* Start the next entry */ s = t; @@ -3058,39 +2801,6 @@ errr init_f_info_txt(FILE *fp) } -/* - * Grab one flag in an object_kind from a textual string - */ -static errr grab_one_kind_flag(object_kind *k_ptr, cptr what, bool_ obvious) -{ - /* Dispatch to correct set of flags */ - u32b *f1 = obvious ? &k_ptr->oflags1 : &k_ptr->flags1; - u32b *f2 = obvious ? &k_ptr->oflags2 : &k_ptr->flags2; - u32b *f3 = obvious ? &k_ptr->oflags3 : &k_ptr->flags3; - u32b *f4 = obvious ? &k_ptr->oflags4 : &k_ptr->flags4; - u32b *f5 = obvious ? &k_ptr->oflags5 : &k_ptr->flags5; - u32b *esp = obvious ? &k_ptr->oesp : &k_ptr->esp; - - /* Lookup */ - if (lookup_flags(what, - flag_tie(f1, k_info_flags1), - flag_tie(f2, k_info_flags2), - flag_tie(f2, k_info_flags2_trap), - flag_tie(f3, k_info_flags3), - flag_tie(f4, k_info_flags4), - flag_tie(f5, k_info_flags5), - flag_tie(esp, esp_flags))) - { - return 0; - } - - /* Oops */ - msg_format("Unknown object flag '%s'.", what); - - /* Error */ - return (1); -} - /* * Initialize the "k_info" array, by parsing an ascii "template" file */ @@ -3162,7 +2872,6 @@ errr init_k_info_txt(FILE *fp) k_ptr->text = my_strdup(""); /* Needed hack */ - k_ptr->esp = 0; k_ptr->power = -1; /* Next... */ @@ -3388,7 +3097,7 @@ errr init_k_info_txt(FILE *fp) /* Hack -- Process 'F' for flags */ if (buf[0] == 'F') { - if (0 != grab_one_kind_flag(k_ptr, buf + 2, FALSE)) + if (0 != grab_object_flag(&k_ptr->flags, buf + 2)) { return (5); } @@ -3400,7 +3109,7 @@ errr init_k_info_txt(FILE *fp) /* Hack -- Process 'f' for obvious flags */ if (buf[0] == 'f') { - if (0 != grab_one_kind_flag(k_ptr, buf + 2, TRUE)) + if (0 != grab_object_flag(&k_ptr->oflags, buf + 2)) { return (5); } @@ -3418,40 +3127,6 @@ errr init_k_info_txt(FILE *fp) return (0); } -/* - * Grab one flag in an artifact_type from a textual string - */ -static errr grab_one_artifact_flag(artifact_type *a_ptr, cptr what, bool_ obvious) -{ - /* Dispatch to correct set of flags */ - u32b *f1 = obvious ? &a_ptr->oflags1 : &a_ptr->flags1; - u32b *f2 = obvious ? &a_ptr->oflags2 : &a_ptr->flags2; - u32b *f3 = obvious ? &a_ptr->oflags3 : &a_ptr->flags3; - u32b *f4 = obvious ? &a_ptr->oflags4 : &a_ptr->flags4; - u32b *f5 = obvious ? &a_ptr->oflags5 : &a_ptr->flags5; - u32b *esp = obvious ? &a_ptr->oesp : &a_ptr->esp; - - /* Lookup */ - if (lookup_flags(what, - flag_tie(f1, k_info_flags1), - flag_tie(f2, k_info_flags2), - flag_tie(f2, k_info_flags2_trap), - flag_tie(f3, k_info_flags3), - flag_tie(f4, k_info_flags4), - flag_tie(f5, k_info_flags5), - flag_tie(esp, esp_flags))) - { - return 0; - } - - /* Oops */ - msg_format("Unknown artifact flag '%s'.", what); - - /* Error */ - return (1); -} - - /* @@ -3524,17 +3199,16 @@ errr init_a_info_txt(FILE *fp) a_ptr->text = my_strdup(""); /* Ignore everything */ - a_ptr->flags3 |= (TR3_IGNORE_ACID); - a_ptr->flags3 |= (TR3_IGNORE_ELEC); - a_ptr->flags3 |= (TR3_IGNORE_FIRE); - a_ptr->flags3 |= (TR3_IGNORE_COLD); + a_ptr->flags |= TR_IGNORE_ACID | + TR_IGNORE_ELEC | + TR_IGNORE_FIRE | + TR_IGNORE_COLD; /* Needed hack */ - a_ptr->esp = 0; a_ptr->power = -1; /*Require activating artifacts to have a activation type */ - if (a_ptr && a_ptr->flags3 & TR3_ACTIVATE && !a_ptr->activate) + if (a_ptr && (a_ptr->flags & TR_ACTIVATE) && !a_ptr->activate) { msg_print("Activate flag without activate type"); return 1; @@ -3654,7 +3328,10 @@ errr init_a_info_txt(FILE *fp) /* Hack -- Process 'F' for flags */ if (buf[0] == 'F') { - if (0 != grab_one_artifact_flag(a_ptr, buf+2, FALSE)) return (5); + if (grab_object_flag(&a_ptr->flags, buf+2)) + { + return (5); + } /* Next... */ continue; @@ -3663,7 +3340,10 @@ errr init_a_info_txt(FILE *fp) /* Hack -- Process 'f' for obvious flags */ if (buf[0] == 'f') { - if (0 != grab_one_artifact_flag(a_ptr, buf+2, TRUE)) return (5); + if (grab_object_flag(&a_ptr->oflags, buf+2)) + { + return (5); + } /* Next... */ continue; @@ -3759,26 +3439,6 @@ errr init_set_info_txt(FILE *fp) assert(!set_ptr->name); set_ptr->name = my_strdup(s); - /* Initialize */ - set_ptr->num = 0; - set_ptr->num_use = 0; - - for (std::size_t z = 0; z < SET_MAX_SIZE; z++) - { - set_ptr->arts[z].a_idx = 0; - set_ptr->arts[z].present = FALSE; - for (std::size_t y = 0; y < SET_MAX_SIZE; y++) - { - set_ptr->arts[z].flags1[y] = 0; - set_ptr->arts[z].flags2[y] = 0; - set_ptr->arts[z].flags3[y] = 0; - set_ptr->arts[z].flags4[y] = 0; - set_ptr->arts[z].flags5[y] = 0; - set_ptr->arts[z].esp[y] = 0; - set_ptr->arts[z].pval[y] = 0; - } - } - /* Next... */ continue; } @@ -3832,14 +3492,7 @@ errr init_set_info_txt(FILE *fp) /* Process 'F' for flags */ if (buf[0] == 'F') { - /* Parse this entry */ - if (0 != grab_one_race_kind_flag(&set_ptr->arts[cur_art].flags1[cur_num], - &set_ptr->arts[cur_art].flags2[cur_num], - &set_ptr->arts[cur_art].flags3[cur_num], - &set_ptr->arts[cur_art].flags4[cur_num], - &set_ptr->arts[cur_art].flags5[cur_num], - &set_ptr->arts[cur_art].esp[cur_num], - buf + 2)) + if (grab_object_flag(&set_ptr->arts[cur_art].flags[cur_num], buf + 2)) { return (5); } @@ -4429,67 +4082,30 @@ errr init_ab_info_txt(FILE *fp) /* - * Grab one flag in a ego-item_type from a textual string + * Grab one flag in a ego-item_type from a textual string. + * + * We explicitly allow nullptr for the "ego" parameter. */ -static bool_ grab_one_ego_item_flag(ego_item_type *e_ptr, cptr what, int n, bool_ obvious) +static bool_ grab_one_ego_item_flag(object_flag_set *flags, u32b *ego, cptr what) { - assert(n < FLAG_RARITY_MAX); - - /* Dispatch to correct set of flags */ - u32b *f1 = obvious ? &e_ptr->oflags1[n] : &e_ptr->flags1[n]; - u32b *f2 = obvious ? &e_ptr->oflags2[n] : &e_ptr->flags2[n]; - u32b *f3 = obvious ? &e_ptr->oflags3[n] : &e_ptr->flags3[n]; - u32b *f4 = obvious ? &e_ptr->oflags4[n] : &e_ptr->flags4[n]; - u32b *f5 = obvious ? &e_ptr->oflags5[n] : &e_ptr->flags5[n]; - u32b *esp = obvious ? &e_ptr->oesp[n] : &e_ptr->esp[n]; - u32b *ego = obvious ? &e_ptr->fego[n] : &e_ptr->fego[n]; - - /* Lookup */ - if (lookup_flags(what, - flag_tie(f1, k_info_flags1), - flag_tie(f2, k_info_flags2), - flag_tie(f2, k_info_flags2_trap), - flag_tie(f3, k_info_flags3), - flag_tie(f4, k_info_flags4), - flag_tie(f5, k_info_flags5), - flag_tie(esp, esp_flags), - flag_tie(ego, ego_flags))) + /* Lookup as an object_flag */ + if (auto f = object_flag_set_from_string(what)) { - return (0); + *flags |= f; + return 0; } - /* Oops */ - msg_format("Unknown ego-item flag '%s'.", what); - - /* Error */ - return (1); -} - -static bool_ grab_one_ego_item_flag_restrict(ego_item_type *e_ptr, cptr what, bool_ need) -{ - /* Dispatch to correct set of flags */ - u32b *f1 = need ? &e_ptr->need_flags1 : &e_ptr->forbid_flags1; - u32b *f2 = need ? &e_ptr->need_flags2 : &e_ptr->forbid_flags2; - u32b *f3 = need ? &e_ptr->need_flags3 : &e_ptr->forbid_flags3; - u32b *f4 = need ? &e_ptr->need_flags4 : &e_ptr->forbid_flags4; - u32b *f5 = need ? &e_ptr->need_flags5 : &e_ptr->forbid_flags5; - u32b *esp = need ? &e_ptr->need_esp : &e_ptr->forbid_esp; - - /* Lookup */ - if (lookup_flags(what, - flag_tie(f1, k_info_flags1), - flag_tie(f2, k_info_flags2), - flag_tie(f2, k_info_flags2_trap), - flag_tie(f3, k_info_flags3), - flag_tie(f4, k_info_flags4), - flag_tie(f5, k_info_flags5), - flag_tie(esp, esp_flags))) + /* Lookup as ego flag */ + if (ego) { - return 0; + if (lookup_flags(what, flag_tie(ego, ego_flags))) + { + return (0); + } } /* Oops */ - msg_format("Unknown ego-item restrict flag '%s'.", what); + msg_format("Unknown ego-item flag '%s'.", what); /* Error */ return (1); @@ -4497,13 +4113,12 @@ static bool_ grab_one_ego_item_flag_restrict(ego_item_type *e_ptr, cptr what, bo - /* * Initialize the "e_info" array, by parsing an ascii "template" file */ errr init_e_info_txt(FILE *fp) { - int i, cur_r = -1, cur_t = 0, j; + int i, cur_r = -1, cur_t = 0; char buf[1024]; char *s, *t; @@ -4557,6 +4172,10 @@ errr init_e_info_txt(FILE *fp) /* Save the index */ error_idx = i; + /* Reset cur_* variables */ + cur_r = -1; + cur_t = 0; + /* Point at the "info" */ e_ptr = &e_info[i]; @@ -4564,33 +4183,6 @@ errr init_e_info_txt(FILE *fp) assert(!e_ptr->name); e_ptr->name = my_strdup(s); - /* Needed hack */ - e_ptr->power = -1; - cur_r = -1; - cur_t = 0; - - for (j = 0; j < 10; j++) - { - e_ptr->tval[j] = 255; - } - for (j = 0; j < FLAG_RARITY_MAX; j++) - { - e_ptr->rar[j] = 0; - e_ptr->flags1[j] = 0; - e_ptr->flags2[j] = 0; - e_ptr->flags3[j] = 0; - e_ptr->flags4[j] = 0; - e_ptr->flags5[j] = 0; - e_ptr->esp[j] = 0; - e_ptr->oflags1[j] = 0; - e_ptr->oflags2[j] = 0; - e_ptr->oflags3[j] = 0; - e_ptr->oflags4[j] = 0; - e_ptr->oflags5[j] = 0; - e_ptr->oesp[j] = 0; - e_ptr->fego[j] = 0; - } - /* Next... */ continue; } @@ -4751,7 +4343,10 @@ errr init_e_info_txt(FILE *fp) } /* Parse this entry */ - if (0 != grab_one_ego_item_flag_restrict(e_ptr, s, TRUE)) return (5); + if (grab_object_flag(&e_ptr->need_flags, s)) + { + return (5); + } /* Start the next entry */ s = t; @@ -4764,7 +4359,7 @@ errr init_e_info_txt(FILE *fp) /* Hack -- Process 'r:F' for forbidden flags */ if ((buf[0] == 'r') && (buf[2] == 'F')) { - if (0 != grab_one_ego_item_flag_restrict(e_ptr, buf + 4, FALSE)) + if (grab_object_flag(&e_ptr->forbid_flags, buf + 4)) { return (5); } @@ -4792,7 +4387,14 @@ errr init_e_info_txt(FILE *fp) } /* Parse this entry */ - if (0 != grab_one_ego_item_flag(e_ptr, s, cur_r, FALSE)) return (5); + assert(cur_r < FLAG_RARITY_MAX); + if (0 != grab_one_ego_item_flag( + &e_ptr->flags[cur_r], + &e_ptr->fego[cur_r], + s)) + { + return (5); + } /* Start the next entry */ s = t; @@ -4821,7 +4423,14 @@ errr init_e_info_txt(FILE *fp) } /* Parse this entry */ - if (0 != grab_one_ego_item_flag(e_ptr, s, cur_r, TRUE)) return (5); + assert(cur_r < FLAG_RARITY_MAX); + if (0 != grab_one_ego_item_flag( + &e_ptr->oflags[cur_r], + nullptr, + s)) + { + return (5); + } /* Start the next entry */ s = t; @@ -4839,51 +4448,6 @@ errr init_e_info_txt(FILE *fp) return (0); } -/* - * Grab one flag in a randart_part_type from a textual string - */ -static bool_ grab_one_randart_item_flag(randart_part_type *ra_ptr, cptr what, char c) -{ - bool regular = (c == 'F'); - - /* Dispatch to correct set of flags */ - u32b *f1 = regular ? &ra_ptr->flags1 : &ra_ptr->aflags1; - u32b *f2 = regular ? &ra_ptr->flags2 : &ra_ptr->aflags2; - u32b *f3 = regular ? &ra_ptr->flags3 : &ra_ptr->aflags3; - u32b *f4 = regular ? &ra_ptr->flags4 : &ra_ptr->aflags4; - u32b *f5 = regular ? &ra_ptr->flags5 : &ra_ptr->aflags5; - u32b *esp = regular ? &ra_ptr->esp : &ra_ptr->aesp; - - /* Check flags */ - if (lookup_flags(what, - flag_tie(f1, k_info_flags1), - flag_tie(f2, k_info_flags2), - flag_tie(f2, k_info_flags2_trap), - flag_tie(f3, k_info_flags3), - flag_tie(f4, k_info_flags4), - flag_tie(f5, k_info_flags5), - flag_tie(esp, esp_flags))) - { - return 0; - } - - /* Check ego_flags */ - if (regular) - { - if (lookup_flags(what, flag_tie(&ra_ptr->fego, ego_flags))) - { - return 0; - } - } - - /* Oops */ - msg_format("Unknown ego-item flag '%s'.", what); - - /* Error */ - return (1); -} - - /* @@ -4964,12 +4528,7 @@ errr init_ra_info_txt(FILE *fp) { ra_ptr->tval[j] = 255; } - ra_ptr->flags1 = 0; - ra_ptr->flags2 = 0; - ra_ptr->flags3 = 0; - ra_ptr->flags4 = 0; - ra_ptr->flags5 = 0; - ra_ptr->esp = 0; + ra_ptr->flags = object_flag_set(); ra_ptr->fego = 0; /* Next... */ @@ -5076,10 +4635,13 @@ errr init_ra_info_txt(FILE *fp) continue; } - /* Hack -- Process 'F' for flags */ + /* Process 'F' for flags */ if (buf[0] == 'F') { - if (0 != grab_one_randart_item_flag(ra_ptr, buf + 2, 'F')) + if (0 != grab_one_ego_item_flag( + &ra_ptr->flags, + &ra_ptr->fego, + buf + 2)) { return (5); } @@ -5088,10 +4650,13 @@ errr init_ra_info_txt(FILE *fp) continue; } - /* Hack -- Process 'A' for antagonic flags */ + /* Process 'A' for antagonic flags */ if (buf[0] == 'A') { - if (0 != grab_one_randart_item_flag(ra_ptr, buf + 2, 'A')) + if (0 != grab_one_ego_item_flag( + &ra_ptr->aflags, + nullptr, + buf + 2)) { return (5); } @@ -7659,10 +7224,11 @@ static errr process_dungeon_file_aux(char *buf, int *yval, int *xval, int xvalst Let's just HACK around one observed bug: Shadow Cloak of Luthien [Globe of Light] */ { - u32b f1, f2, f3, f4, f5, esp; - object_flags(q_ptr, &f1, &f2, &f3, &f4, &f5, &esp); - if (f5 & TR5_SPELL_CONTAIN) + auto const flags = object_flags(q_ptr); + if (flags & TR_SPELL_CONTAIN) + { q_ptr->pval2 = -1; + } } /* Drop the artifact */ -- cgit v1.2.3