summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/defines.h5
-rw-r--r--src/init1.cc54
-rw-r--r--src/skill_flag.hpp12
-rw-r--r--src/skill_flag_list.hpp9
-rw-r--r--src/skill_flag_set.hpp7
-rw-r--r--src/skill_type.hpp3
-rw-r--r--src/skills.cc12
-rw-r--r--src/xtra1.cc3
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;
}