diff options
author | Bardur Arantsson <bardur@scientician.net> | 2016-06-20 22:49:05 +0200 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2016-06-20 22:49:05 +0200 |
commit | 2fcc9f1712b630055ae9ce5c3ecf017b8a93fbbb (patch) | |
tree | 49f48e7f03ebeb6fda174e730b0d7455d86618c8 /src | |
parent | 9c26f78ce556d3a0717e4bc5668a1ed59217f414 (diff) |
Change flags_group to non-POD type
Diffstat (limited to 'src')
-rw-r--r-- | src/defines.h | 2 | ||||
-rw-r--r-- | src/flags_group.hpp | 16 | ||||
-rw-r--r-- | src/object1.cc | 30 | ||||
-rw-r--r-- | src/tables.cc | 246 | ||||
-rw-r--r-- | src/tables.hpp | 4 |
5 files changed, 150 insertions, 148 deletions
diff --git a/src/defines.h b/src/defines.h index 7c33e15a..c99bcb39 100644 --- a/src/defines.h +++ b/src/defines.h @@ -2476,8 +2476,6 @@ #define ESP_SPIDER 0x00001000L #define ESP_ALL 0x80000000L -/* Number of group of flags to choose from */ -#define MAX_FLAG_GROUP 12 #define NEW_GROUP_CHANCE 40 /* Chance to get a new group */ /* diff --git a/src/flags_group.hpp b/src/flags_group.hpp index bdf5216b..8bd4bacb 100644 --- a/src/flags_group.hpp +++ b/src/flags_group.hpp @@ -7,14 +7,14 @@ */ struct flags_group { - char name[30]; /* Name */ - byte color; /* Color */ + char name[30] { }; /* Name */ + byte color = 0; /* Color */ - byte price; /* Price to "buy" it */ + byte price = 0; /* Price to "buy" it */ - u32b flags1; /* Flags set 1 */ - u32b flags2; /* Flags set 2 */ - u32b flags3; /* Flags set 3 */ - u32b flags4; /* Flags set 4 */ - u32b esp; /* ESP flags set */ + u32b flags1 = 0; /* Flags set 1 */ + u32b flags2 = 0; /* Flags set 2 */ + u32b flags3 = 0; /* Flags set 3 */ + u32b flags4 = 0; /* Flags set 4 */ + u32b esp = 0; /* ESP flags set */ }; diff --git a/src/object1.cc b/src/object1.cc index fd3ab769..ae803db9 100644 --- a/src/object1.cc +++ b/src/object1.cc @@ -2667,19 +2667,17 @@ bool_ object_out_desc(object_type *o_ptr, FILE *fff, bool_ trim_down, bool_ wait if ((f4 & TR4_LEVELS) && (!trim_down)) { - int j = 0; - if (count_bits(o_ptr->pval3) == 0) text_out("It is sentient"); 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; - for (j = 0; j < MAX_FLAG_GROUP; j++) + for (std::size_t j = 0; j < flags_groups().size(); j++) { if (BIT(j) & o_ptr->pval3) { check_first(&first); - text_out_c(flags_groups[j].color, flags_groups[j].name); + text_out_c(flags_groups()[j].color, flags_groups()[j].name); } } @@ -6057,13 +6055,13 @@ static void gain_flag_group(object_type *o_ptr) while (tries--) { - grp = rand_int(MAX_FLAG_GROUP); + grp = rand_int(flags_groups().size()); /* If we already got this group continue */ if (o_ptr->pval3 & BIT(grp)) continue; /* Not enough points ? */ - if (flags_groups[grp].price > o_ptr->pval2) continue; + if (flags_groups()[grp].price > o_ptr->pval2) continue; /* Ok, enough points and not already got it */ break; @@ -6072,7 +6070,7 @@ static void gain_flag_group(object_type *o_ptr) /* Ack, nothing found */ if (tries <= 1) return; - o_ptr->pval2 -= flags_groups[grp].price; + o_ptr->pval2 -= flags_groups()[grp].price; o_ptr->pval3 |= BIT(grp); /* Message */ @@ -6080,7 +6078,7 @@ static void gain_flag_group(object_type *o_ptr) char o_name[80]; object_desc(o_name, o_ptr, FALSE, 0); - msg_format("%s gains access to the %s realm.", o_name, flags_groups[grp].name); + msg_format("%s gains access to the %s realm.", o_name, flags_groups()[grp].name); } } @@ -6097,27 +6095,27 @@ static u32b get_flag(object_type *o_ptr, int grp, int k) switch (k) { case 0: - flag_set = flags_groups[grp].flags1; + flag_set = flags_groups()[grp].flags1; flag_test = f1; break; case 1: - flag_set = flags_groups[grp].flags2; + flag_set = flags_groups()[grp].flags2; flag_test = f2; break; case 2: - flag_set = flags_groups[grp].flags3; + flag_set = flags_groups()[grp].flags3; flag_test = f3; break; case 3: - flag_set = flags_groups[grp].flags4; + flag_set = flags_groups()[grp].flags4; flag_test = f4; break; case 4: - flag_set = flags_groups[grp].esp; + flag_set = flags_groups()[grp].esp; flag_test = esp; break; default: - flag_set = flags_groups[grp].flags1; + flag_set = flags_groups()[grp].flags1; flag_test = f1; break; } @@ -6159,7 +6157,7 @@ static void gain_flag_group_flag(object_type *o_ptr) k = rand_int(5); /* get a flag group */ - grp = rand_int(MAX_FLAG_GROUP); + grp = rand_int(flags_groups().size()); if (!(BIT(grp) & o_ptr->pval3)) continue; @@ -6197,7 +6195,7 @@ static void gain_flag_group_flag(object_type *o_ptr) char o_name[80]; 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); + msg_format("%s gains a new power from the %s realm.", o_name, flags_groups()[grp].name); } } diff --git a/src/tables.cc b/src/tables.cc index 5f873630..debee270 100644 --- a/src/tables.cc +++ b/src/tables.cc @@ -2655,128 +2655,132 @@ cptr sense_desc[] = * Flags 4, * ESP, */ -flags_group flags_groups[MAX_FLAG_GROUP] = +extern std::vector<flags_group> const &flags_groups() { - { - "Fire", - TERM_L_RED, - 1, - TR1_SLAY_UNDEAD | TR1_BRAND_FIRE, - TR2_RES_FIRE, - TR3_SH_FIRE | TR3_LITE1 | TR3_IGNORE_FIRE, - 0, - 0, - }, - { - "Cold", - TERM_WHITE, - 1, - TR1_SLAY_DRAGON | TR1_SLAY_DEMON | TR1_BRAND_COLD, - TR2_RES_COLD | TR2_INVIS, - TR3_SLOW_DIGEST | TR3_IGNORE_COLD, - 0, - 0, - }, - { - "Acid", - TERM_GREEN, - 3, - TR1_SLAY_ANIMAL | TR1_IMPACT | TR1_TUNNEL | TR1_BRAND_ACID, - TR2_RES_ACID, - TR3_IGNORE_ACID, - 0, - 0, - }, - { - "Lightning", - TERM_L_BLUE, - 1, - TR1_SLAY_EVIL | TR1_BRAND_ELEC, - TR2_RES_ELEC, - TR3_IGNORE_ELEC | TR3_SH_ELEC | TR3_TELEPORT, - 0, - 0, - }, - { - "Poison", - TERM_L_GREEN, - 2, - TR1_CHR | TR1_VAMPIRIC | TR1_SLAY_ANIMAL | TR1_BRAND_POIS, - TR2_SUST_CHR | TR2_RES_POIS, - TR3_DRAIN_EXP, - 0, - ESP_TROLL | ESP_GIANT, - }, - { - "Air", - TERM_BLUE, - 5, - TR1_WIS | TR1_STEALTH | TR1_INFRA | TR1_SPEED, - TR2_RES_LITE | TR2_RES_DARK | TR2_RES_BLIND | TR2_SUST_WIS, - TR3_FEATHER | TR3_SEE_INVIS | TR3_BLESSED, - 0, - ESP_GOOD, - }, - { - "Earth", - TERM_L_UMBER, - 5, - TR1_STR | TR1_CON | TR1_TUNNEL | TR1_BLOWS | TR1_SLAY_TROLL | TR1_SLAY_GIANT | TR1_IMPACT, - TR2_SUST_STR | TR2_SUST_CON | TR2_FREE_ACT | TR2_RES_FEAR | TR2_RES_SHARDS, - TR3_REGEN, - 0, - ESP_TROLL | ESP_GIANT, - }, - { - "Mind", - TERM_YELLOW, - 7, - TR1_INT | TR1_SEARCH, - TR2_SUST_INT | TR2_RES_CONF | TR2_RES_FEAR, - 0, - 0, - ESP_ORC | ESP_TROLL | ESP_GIANT | ESP_ANIMAL | ESP_UNIQUE | ESP_SPIDER | ESP_DEMON, - }, - { - "Shield", - TERM_RED, - 7, - TR1_DEX, - TR2_SUST_DEX | TR2_INVIS | TR2_REFLECT | TR2_HOLD_LIFE | TR2_RES_SOUND | TR2_RES_NEXUS, - TR3_REGEN, - 0, - 0, - }, - { - "Chaos", - TERM_VIOLET, - 7, - TR1_CHAOTIC | TR1_IMPACT, - TR2_RES_CHAOS | TR2_RES_DISEN, - TR3_REGEN, - 0, - ESP_ALL, - }, - { - "Magic", - TERM_L_BLUE, - 10, - TR1_MANA | TR1_SPELL, - TR2_RES_CHAOS | TR2_RES_DISEN, - TR3_WRAITH, - TR4_PRECOGNITION | TR4_FLY | TR4_CLONE, - 0, - }, - { - "Antimagic", - TERM_L_DARK, - 10, - TR1_VAMPIRIC | TR1_CHAOTIC | TR1_BLOWS | TR1_SPEED, - TR2_LIFE | TR2_REFLECT | TR2_FREE_ACT | TR2_HOLD_LIFE, - TR3_NO_MAGIC | TR3_NO_TELE | TR3_SEE_INVIS, - TR4_ANTIMAGIC_50, - 0, - }, + static auto *instance = new std::vector<flags_group> { + flags_group { + "Fire", + TERM_L_RED, + 1, + TR1_SLAY_UNDEAD | TR1_BRAND_FIRE, + TR2_RES_FIRE, + TR3_SH_FIRE | TR3_LITE1 | TR3_IGNORE_FIRE, + 0, + 0, + }, + flags_group { + "Cold", + TERM_WHITE, + 1, + TR1_SLAY_DRAGON | TR1_SLAY_DEMON | TR1_BRAND_COLD, + TR2_RES_COLD | TR2_INVIS, + TR3_SLOW_DIGEST | TR3_IGNORE_COLD, + 0, + 0, + }, + flags_group { + "Acid", + TERM_GREEN, + 3, + TR1_SLAY_ANIMAL | TR1_IMPACT | TR1_TUNNEL | TR1_BRAND_ACID, + TR2_RES_ACID, + TR3_IGNORE_ACID, + 0, + 0, + }, + flags_group { + "Lightning", + TERM_L_BLUE, + 1, + TR1_SLAY_EVIL | TR1_BRAND_ELEC, + TR2_RES_ELEC, + TR3_IGNORE_ELEC | TR3_SH_ELEC | TR3_TELEPORT, + 0, + 0, + }, + flags_group { + "Poison", + TERM_L_GREEN, + 2, + TR1_CHR | TR1_VAMPIRIC | TR1_SLAY_ANIMAL | TR1_BRAND_POIS, + TR2_SUST_CHR | TR2_RES_POIS, + TR3_DRAIN_EXP, + 0, + ESP_TROLL | ESP_GIANT, + }, + flags_group { + "Air", + TERM_BLUE, + 5, + TR1_WIS | TR1_STEALTH | TR1_INFRA | TR1_SPEED, + TR2_RES_LITE | TR2_RES_DARK | TR2_RES_BLIND | TR2_SUST_WIS, + TR3_FEATHER | TR3_SEE_INVIS | TR3_BLESSED, + 0, + ESP_GOOD, + }, + flags_group { + "Earth", + TERM_L_UMBER, + 5, + TR1_STR | TR1_CON | TR1_TUNNEL | TR1_BLOWS | TR1_SLAY_TROLL | TR1_SLAY_GIANT | TR1_IMPACT, + TR2_SUST_STR | TR2_SUST_CON | TR2_FREE_ACT | TR2_RES_FEAR | TR2_RES_SHARDS, + TR3_REGEN, + 0, + ESP_TROLL | ESP_GIANT, + }, + flags_group { + "Mind", + TERM_YELLOW, + 7, + TR1_INT | TR1_SEARCH, + TR2_SUST_INT | TR2_RES_CONF | TR2_RES_FEAR, + 0, + 0, + ESP_ORC | ESP_TROLL | ESP_GIANT | ESP_ANIMAL | ESP_UNIQUE | ESP_SPIDER | ESP_DEMON, + }, + flags_group { + "Shield", + TERM_RED, + 7, + TR1_DEX, + TR2_SUST_DEX | TR2_INVIS | TR2_REFLECT | TR2_HOLD_LIFE | TR2_RES_SOUND | TR2_RES_NEXUS, + TR3_REGEN, + 0, + 0, + }, + flags_group { + "Chaos", + TERM_VIOLET, + 7, + TR1_CHAOTIC | TR1_IMPACT, + TR2_RES_CHAOS | TR2_RES_DISEN, + TR3_REGEN, + 0, + ESP_ALL, + }, + flags_group { + "Magic", + TERM_L_BLUE, + 10, + TR1_MANA | TR1_SPELL, + TR2_RES_CHAOS | TR2_RES_DISEN, + TR3_WRAITH, + TR4_PRECOGNITION | TR4_FLY | TR4_CLONE, + 0, + }, + flags_group { + "Antimagic", + TERM_L_DARK, + 10, + TR1_VAMPIRIC | TR1_CHAOTIC | TR1_BLOWS | TR1_SPEED, + TR2_LIFE | TR2_REFLECT | TR2_FREE_ACT | TR2_HOLD_LIFE, + TR3_NO_MAGIC | TR3_NO_TELE | TR3_SEE_INVIS, + TR4_ANTIMAGIC_50, + 0, + } + }; + + return *instance; }; /* Powers */ diff --git a/src/tables.hpp b/src/tables.hpp index c643d97e..aafbb763 100644 --- a/src/tables.hpp +++ b/src/tables.hpp @@ -21,6 +21,8 @@ #include "tactic_info_type.hpp" #include "tval_desc.hpp" +#include <vector> + extern s16b ddd[9]; extern s16b ddx[10]; extern s16b ddy[10]; @@ -64,7 +66,7 @@ extern tactic_info_type tactic_info[9]; extern activation activation_info[MAX_T_ACT]; extern inscription_info_type inscription_info[MAX_INSCRIPTIONS]; extern cptr sense_desc[]; -extern flags_group flags_groups[MAX_FLAG_GROUP]; +extern std::vector<flags_group> const &flags_groups(); extern power_type powers_type[POWER_MAX]; extern cptr artifact_names_list; extern monster_power monster_powers[MONSTER_POWERS_MAX]; |