diff options
author | Bardur Arantsson <bardur@scientician.net> | 2016-06-22 11:26:23 +0200 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2016-06-22 11:36:10 +0200 |
commit | 85143506abfb231a6ffc717a0ebc1a8339cd8a50 (patch) | |
tree | 26284a0695295d01164fff1d0f698c9934a8d8cb | |
parent | 2f7774c60767d5579af0596caadbb0f9ca822963 (diff) |
Rework SKF1_* flags to flag_set<>
-rw-r--r-- | src/defines.h | 5 | ||||
-rw-r--r-- | src/init1.cc | 54 | ||||
-rw-r--r-- | src/skill_flag.hpp | 12 | ||||
-rw-r--r-- | src/skill_flag_list.hpp | 9 | ||||
-rw-r--r-- | src/skill_flag_set.hpp | 7 | ||||
-rw-r--r-- | src/skill_type.hpp | 3 | ||||
-rw-r--r-- | src/skills.cc | 12 | ||||
-rw-r--r-- | src/xtra1.cc | 3 |
8 files changed, 49 insertions, 56 deletions
diff --git a/src/defines.h b/src/defines.h index 6337e6b7..8c451ccb 100644 --- a/src/defines.h +++ b/src/defines.h @@ -2801,11 +2801,6 @@ /* Number of skill choices for Lost Sword quests. */ #define LOST_SWORD_NSKILLS 4 -/* SKill flags */ -#define SKF1_HIDDEN 0x00000001 /* Starts hidden */ -#define SKF1_AUTO_HIDE 0x00000002 /* Tries to rehide at calc_bonus */ -#define SKF1_RANDOM_GAIN 0x00000004 /* Can be randomly gained by certain quests & such */ - #define MAX_MELEE 3 diff --git a/src/init1.cc b/src/init1.cc index ba13cfae..13a376d3 100644 --- a/src/init1.cc +++ b/src/init1.cc @@ -35,6 +35,7 @@ #include "randart_gen_type.hpp" #include "randart_part_type.hpp" #include "set_type.hpp" +#include "skill_flag.hpp" #include "skill_type.hpp" #include "skills.hpp" #include "spells5.hpp" @@ -198,43 +199,6 @@ static cptr t_info_flags[] = "XXX32" }; -/* Skill flags */ -static cptr s_info_flags1[] = -{ - "HIDDEN", - "AUTO_HIDE", - "RANDOM_GAIN", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1", - "XXX1" -}; - /* * Helpers for looking up flags in the above arrays @@ -754,12 +718,16 @@ static errr grab_one_race_allow_flag(u32b *choice, cptr what) /* * Grab one flag from a textual string */ -static errr grab_one_skill_flag(u32b *f1, cptr what) +static errr grab_one_skill_flag(skill_flag_set *flags, cptr what) { - if (lookup_flags(what, flag_tie(f1, s_info_flags1))) - { - return 0; - } +#define SKF(tier, index, name) \ + if (streq(what, #name)) \ + { \ + *flags |= BOOST_PP_CAT(SKF_,name); \ + return 0; \ + }; +#include "skill_flag_list.hpp" +#undef SKF /* Oops */ msg_format("(2)Unknown skill flag '%s'.", what); @@ -3590,7 +3558,7 @@ errr init_s_info_txt(FILE *fp) /* Process 'F' for flags */ if (buf[0] == 'F') { - if (0 != grab_one_skill_flag(&s_ptr->flags1, buf + 2)) + if (0 != grab_one_skill_flag(&s_ptr->flags, buf + 2)) { return (5); } diff --git a/src/skill_flag.hpp b/src/skill_flag.hpp new file mode 100644 index 00000000..15c6de9c --- /dev/null +++ b/src/skill_flag.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include "skill_flag_set.hpp" +#include <boost/preprocessor/cat.hpp> + +// +// Define flag set for each flag. +// +#define SKF(tier, index, name) \ + DECLARE_FLAG(skill_flag_set, BOOST_PP_CAT(SKF_,name), tier, index) +#include "skill_flag_list.hpp" +#undef SKF diff --git a/src/skill_flag_list.hpp b/src/skill_flag_list.hpp new file mode 100644 index 00000000..49cdc045 --- /dev/null +++ b/src/skill_flag_list.hpp @@ -0,0 +1,9 @@ +/** + * X-macro list of all the skill flags + */ + +/* SKF(<tier>, <index>, <name>) */ + +SKF(1, 0, HIDDEN ) /* Starts hidden */ +SKF(1, 1, AUTO_HIDE ) /* Tries to rehide at calc_bonus */ +SKF(1, 2, RANDOM_GAIN) /* Can be gained through Lost Sword quest */ diff --git a/src/skill_flag_set.hpp b/src/skill_flag_set.hpp new file mode 100644 index 00000000..a2768b70 --- /dev/null +++ b/src/skill_flag_set.hpp @@ -0,0 +1,7 @@ +#pragma once + +#include "flag_set.hpp" + +constexpr std::size_t SKF_MAX_TIERS = 1; + +typedef flag_set<SKF_MAX_TIERS> skill_flag_set; diff --git a/src/skill_type.hpp b/src/skill_type.hpp index 4be4459a..95ce3516 100644 --- a/src/skill_type.hpp +++ b/src/skill_type.hpp @@ -1,6 +1,7 @@ #pragma once #include "h-basic.h" +#include "skill_flag_set.hpp" #include "skills_defs.hpp" /** @@ -30,5 +31,5 @@ struct skill_type byte random_gain_chance = 0; /* Chance to gain from Lost Sword quest; if applicable */ - u32b flags1 = 0; /* Skill flags */ + skill_flag_set flags; /* Skill flags */ }; diff --git a/src/skills.cc b/src/skills.cc index 4a56de05..8949e9ad 100644 --- a/src/skills.cc +++ b/src/skills.cc @@ -27,6 +27,7 @@ #include "player_race_mod.hpp" #include "player_spec.hpp" #include "player_type.hpp" +#include "skill_flag.hpp" #include "skill_type.hpp" #include "spells1.hpp" #include "spells4.hpp" @@ -1241,11 +1242,10 @@ void init_skill(s32b value, s32b mod, int i) { s_info[i].value = value; s_info[i].mod = mod; - - if (s_info[i].flags1 & SKF1_HIDDEN) - s_info[i].hidden = TRUE; - else - s_info[i].hidden = FALSE; + s_info[i].hidden = (s_info[i].flags & SKF_HIDDEN) + ? TRUE + : FALSE + ; } /* @@ -1320,7 +1320,7 @@ void do_get_new_skill() max_a = 0; for (i = 0; i < max_s_idx; i++) { - if (s_info[i].flags1 & SKF1_RANDOM_GAIN) { + if (s_info[i].flags & SKF_RANDOM_GAIN) { available_skills[max_a] = i; max_a++; } diff --git a/src/xtra1.cc b/src/xtra1.cc index 6fbbfdf0..a816efb1 100644 --- a/src/xtra1.cc +++ b/src/xtra1.cc @@ -39,6 +39,7 @@ #include "player_race_flag.hpp" #include "player_race_mod.hpp" #include "player_type.hpp" +#include "skill_flag.hpp" #include "skill_type.hpp" #include "skills.hpp" #include "spells3.hpp" @@ -2951,7 +2952,7 @@ void calc_bonuses(bool_ silent) /* Hide the skills that should auto hide */ for (i = 0; i < max_s_idx; i++) { - if (s_info[i].flags1 & SKF1_AUTO_HIDE) + if (s_info[i].flags & SKF_AUTO_HIDE) s_info[i].hidden = TRUE; } |