diff options
author | Bardur Arantsson <bardur@scientician.net> | 2016-09-17 09:58:13 +0200 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2016-09-17 09:58:13 +0200 |
commit | 0a16384475488d682e33c8d55691e5d9417412ac (patch) | |
tree | 25b73201916e8b63cf012dbf0d8392af42e1d16f /src | |
parent | f507d6fb86fe7cfaf4dec69afa36875a1a4aaae4 (diff) |
Unify opval/oflags in player_* structs into player_level_flag
Diffstat (limited to 'src')
-rw-r--r-- | src/corrupt.cc | 18 | ||||
-rw-r--r-- | src/files.cc | 23 | ||||
-rw-r--r-- | src/init1.cc | 12 | ||||
-rw-r--r-- | src/loadsave.cc | 10 | ||||
-rw-r--r-- | src/player_class.hpp | 4 | ||||
-rw-r--r-- | src/player_level_flag.hpp | 13 | ||||
-rw-r--r-- | src/player_race.hpp | 4 | ||||
-rw-r--r-- | src/player_race_mod.hpp | 4 | ||||
-rw-r--r-- | src/xtra1.cc | 29 |
9 files changed, 73 insertions, 44 deletions
diff --git a/src/corrupt.cc b/src/corrupt.cc index 64569264..8ad22ea9 100644 --- a/src/corrupt.cc +++ b/src/corrupt.cc @@ -106,15 +106,15 @@ static void player_gain_vampire() } /* Bonus/and .. not bonus :) */ - rmp_ptr->flags = rmp_ptr->flags | PR_HURT_LITE; - rmp_ptr->oflags[2] = rmp_ptr->oflags[2] - | TR_RES_POIS - | TR_RES_NETHER - | TR_RES_COLD - | TR_RES_DARK - | TR_HOLD_LIFE; - rmp_ptr->oflags[2] = rmp_ptr->oflags[2] - | TR_LITE1; + rmp_ptr->flags |= PR_HURT_LITE; + rmp_ptr->lflags[1].oflags |= + ( TR_RES_POIS + | TR_RES_NETHER + | TR_RES_COLD + | TR_RES_DARK + | TR_HOLD_LIFE + | TR_LITE1 + ); } /** diff --git a/src/files.cc b/src/files.cc index 4cd95447..ec569e73 100644 --- a/src/files.cc +++ b/src/files.cc @@ -1575,6 +1575,16 @@ static object_flag_set wield_monster_flags() } +template<class LF> +static void apply_lflags(LF const &lflags, object_flag_set *f) +{ + for (int i = 1; i <= p_ptr->lev; i++) + { + (*f) |= lflags[i].oflags; + } +} + + /* * Obtain the "flags" for the player as if he was an item */ @@ -1680,20 +1690,13 @@ object_flag_set player_flags() } /* Classes */ - for (int i = 1; i <= p_ptr->lev; i++) - { - f |= cp_ptr->oflags[i]; - } + apply_lflags(cp_ptr->lflags, &f); /* Races */ if ((!p_ptr->mimic_form) && (!p_ptr->body_monster)) { - for (int i = 1; i <= p_ptr->lev; i++) - { - f |= rp_ptr->oflags[i]; - - f |= rmp_ptr->oflags[i]; - } + apply_lflags(rp_ptr->lflags, &f); + apply_lflags(rmp_ptr->lflags, &f); } else { diff --git a/src/init1.cc b/src/init1.cc index de19105d..412dde11 100644 --- a/src/init1.cc +++ b/src/init1.cc @@ -1040,7 +1040,7 @@ errr init_player_info_txt(FILE *fp) &s[0], &s[1])) return (1); lev = s[0]; - rp_ptr->opval[lev] = s[1]; + rp_ptr->lflags[lev].pval = s[1]; /* Next... */ continue; @@ -1154,7 +1154,7 @@ errr init_player_info_txt(FILE *fp) /* Process 'F' for "level Flags" (multiple lines) */ if ((buf[0] == 'R') && (buf[2] == 'F')) { - if (grab_object_flag(&rp_ptr->oflags[lev], buf + 4)) + if (grab_object_flag(&rp_ptr->lflags[lev].oflags, buf + 4)) { return (5); } @@ -1290,7 +1290,7 @@ errr init_player_info_txt(FILE *fp) &s[0], &s[1])) return (1); lev = s[0]; - rmp_ptr->opval[lev] = s[1]; + rmp_ptr->lflags[lev].pval = s[1]; /* Next... */ continue; @@ -1404,7 +1404,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_object_flag(&rmp_ptr->oflags[lev], buf + 4)) + if (0 != grab_object_flag(&rmp_ptr->lflags[lev].oflags, buf + 4)) { return (5); } @@ -1592,7 +1592,7 @@ errr init_player_info_txt(FILE *fp) &s[0], &s[1])) return (1); lev = s[0]; - c_ptr->opval[lev] = s[1]; + c_ptr->lflags[lev].pval = s[1]; /* Next... */ continue; @@ -1753,7 +1753,7 @@ errr init_player_info_txt(FILE *fp) } /* Parse this entry */ - if (0 != grab_object_flag(&c_ptr->oflags[lev], s)) + if (0 != grab_object_flag(&c_ptr->lflags[lev].oflags, s)) { return (5); } diff --git a/src/loadsave.cc b/src/loadsave.cc index 1d3e8144..07e2c4fc 100644 --- a/src/loadsave.cc +++ b/src/loadsave.cc @@ -19,6 +19,7 @@ #include "object2.hpp" #include "object_kind.hpp" #include "player_class.hpp" +#include "player_level_flag.hpp" #include "player_race.hpp" #include "player_race_mod.hpp" #include "player_type.hpp" @@ -277,6 +278,12 @@ static void do_skill_modifiers(skill_modifiers *skill_modifiers, ls_flag_t flag) } } +static void do_player_level_flag(player_level_flag *lflag, ls_flag_t flag) +{ + do_flag_set(&lflag->oflags, flag); + do_s16b(&lflag->pval, flag); +} + /* * The special saved subrace */ @@ -335,8 +342,7 @@ static void do_subrace(ls_flag_t flag) for (i = 0; i < PY_MAX_LEVEL + 1; i++) { - do_flag_set(&sr_ptr->oflags[i], flag); - do_s16b(&sr_ptr->opval[i], flag); + do_player_level_flag(&sr_ptr->lflags[i], flag); } do_byte(&sr_ptr->g_attr, flag); diff --git a/src/player_class.hpp b/src/player_class.hpp index 53e712f9..e0f88008 100644 --- a/src/player_class.hpp +++ b/src/player_class.hpp @@ -5,6 +5,7 @@ #include "object_flag_set.hpp" #include "object_proto.hpp" #include "player_defs.hpp" +#include "player_level_flag.hpp" #include "player_race_flag_set.hpp" #include "player_spec.hpp" #include "skill_modifiers.hpp" @@ -42,8 +43,7 @@ struct player_class char body_parts[BODY_MAX] { }; /* To help to decide what to use when body changing */ - std::array<object_flag_set, PY_MAX_LEVEL + 1> oflags; - s16b opval[PY_MAX_LEVEL + 1] { }; + std::array<player_level_flag, PY_MAX_LEVEL+1> lflags; struct skill_modifiers skill_modifiers; diff --git a/src/player_level_flag.hpp b/src/player_level_flag.hpp new file mode 100644 index 00000000..fe4c862c --- /dev/null +++ b/src/player_level_flag.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include "h-basic.h" +#include "object_flag_set.hpp" +#include "player_defs.hpp" + +struct player_level_flag { + + object_flag_set oflags; + + s16b pval = 0; + +}; diff --git a/src/player_race.hpp b/src/player_race.hpp index 203999ad..844eeb75 100644 --- a/src/player_race.hpp +++ b/src/player_race.hpp @@ -5,6 +5,7 @@ #include "object_flag_set.hpp" #include "object_proto.hpp" #include "player_defs.hpp" +#include "player_level_flag.hpp" #include "player_race_ability_type.hpp" #include "player_race_flag_set.hpp" #include "skills_defs.hpp" @@ -40,8 +41,7 @@ struct player_race player_race_flag_set flags; - std::array<object_flag_set, PY_MAX_LEVEL + 1> oflags; - s16b opval[PY_MAX_LEVEL + 1] { }; + std::array<player_level_flag, PY_MAX_LEVEL+1> lflags; struct skill_modifiers skill_modifiers; diff --git a/src/player_race_mod.hpp b/src/player_race_mod.hpp index bf203cc6..40264ba3 100644 --- a/src/player_race_mod.hpp +++ b/src/player_race_mod.hpp @@ -5,6 +5,7 @@ #include "object_flag_set.hpp" #include "object_proto.hpp" #include "player_defs.hpp" +#include "player_level_flag.hpp" #include "player_race_ability_type.hpp" #include "player_race_flag_set.hpp" #include "skill_modifiers.hpp" @@ -41,8 +42,7 @@ struct player_race_mod player_race_flag_set flags; - std::array<object_flag_set, PY_MAX_LEVEL + 1> oflags; - s16b opval[PY_MAX_LEVEL + 1] { }; + std::array<player_level_flag, PY_MAX_LEVEL+1> lflags; byte g_attr = 0; /* Overlay graphic attribute */ char g_char = '\0'; /* Overlay graphic character */ diff --git a/src/xtra1.cc b/src/xtra1.cc index a816efb1..066bd0fb 100644 --- a/src/xtra1.cc +++ b/src/xtra1.cc @@ -2727,6 +2727,18 @@ void apply_flags(object_flag_set const &f, s16b pval, s16b tval, s16b to_h, s16b } +/** + * Apply player level flags + */ +template <class LF> +static void apply_lflags(LF const &lflags) +{ + for (int i = 1; i <= p_ptr->lev; i++) + { + apply_flags(lflags[i].oflags, lflags[i].pval, 0, 0, 0, 0); + } +} + /** * Are barehand fighter's hands empty? @@ -2978,10 +2990,8 @@ void calc_bonuses(bool_ silent) /* The powers gived by the wielded monster */ calc_wield_monster(); - for (i = 1; i <= p_ptr->lev; i++) - { - apply_flags(cp_ptr->oflags[i], cp_ptr->opval[i], 0, 0, 0, 0); - } + /* Apply all the level-dependent class flags */ + apply_lflags(cp_ptr->lflags); if (p_ptr->melee_style == SKILL_HAND) { @@ -3022,14 +3032,11 @@ void calc_bonuses(bool_ silent) /***** Races ****/ if ((!p_ptr->mimic_form) && (!p_ptr->body_monster)) { - int i; - - for (i = 1; i <= p_ptr->lev; i++) - { - apply_flags(rp_ptr->oflags[i], rp_ptr->opval[i], 0, 0, 0, 0); - apply_flags(rmp_ptr->oflags[i], rmp_ptr->opval[i], 0, 0, 0, 0); - } + /* Apply level-dependent flags from race/sub-race */ + apply_lflags(rp_ptr->lflags); + apply_lflags(rmp_ptr->lflags); + /* Is the player's race hurt by light? */ if (race_flags_p(PR_HURT_LITE)) p_ptr->sensible_lite = TRUE; } |