From daf23851092099647a3830aa1c0cf12962f55b8e Mon Sep 17 00:00:00 2001 From: Bardur Arantsson Date: Sat, 17 Sep 2016 09:58:14 +0200 Subject: Move 'player_*' shared fields to new 'player_shared' struct --- src/birth.cc | 8 ++++---- src/cmd5.cc | 4 ++-- src/corrupt.cc | 31 +++++++++++-------------------- src/init1.cc | 33 ++++++++++++++++++--------------- src/loadsave.cc | 23 ++++++++++++++++++----- src/player_class.hpp | 8 ++------ src/player_race.hpp | 10 +++------- src/player_race_mod.hpp | 9 ++------- src/player_shared.hpp | 16 ++++++++++++++++ src/xtra1.cc | 34 +++++++++++++++++----------------- src/xtra2.cc | 4 ++-- 11 files changed, 95 insertions(+), 85 deletions(-) create mode 100644 src/player_shared.hpp (limited to 'src') diff --git a/src/birth.cc b/src/birth.cc index f426fca9..f358bd58 100644 --- a/src/birth.cc +++ b/src/birth.cc @@ -421,7 +421,7 @@ static void get_stats(void) p_ptr->stat_max[i] = j; /* Obtain a "bonus" for "race" and "class" */ - bonus = rp_ptr->r_adj[i] + rmp_ptr->r_adj[i] + cp_ptr->c_adj[i]; + bonus = rp_ptr->ps.adj[i] + rmp_ptr->ps.adj[i] + cp_ptr->ps.adj[i]; /* Start fully healed */ p_ptr->stat_cur[i] = p_ptr->stat_max[i]; @@ -452,13 +452,13 @@ static void get_extra(void) p_ptr->max_plv = p_ptr->lev = 1; /* Experience factor */ - p_ptr->expfact = rp_ptr->r_exp + rmp_ptr->r_exp + cp_ptr->c_exp; + p_ptr->expfact = rp_ptr->ps.exp + rmp_ptr->ps.exp + cp_ptr->ps.exp; /* Initialize quest */ p_ptr->inside_quest = 0; /* Hitdice */ - p_ptr->hitdie = rp_ptr->r_mhp + rmp_ptr->r_mhp + cp_ptr->c_mhp; + p_ptr->hitdie = rp_ptr->ps.mhp + rmp_ptr->ps.mhp + cp_ptr->ps.mhp; /* Initial hitpoints */ p_ptr->mhp = p_ptr->hitdie; @@ -2487,7 +2487,7 @@ static bool_ player_birth_aux_auto() stat_match[i] = 0; /* Race/Class bonus */ - j = rp_ptr->r_adj[i] + rmp_ptr->r_adj[i] + cp_ptr->c_adj[i]; + j = rp_ptr->ps.adj[i] + rmp_ptr->ps.adj[i] + cp_ptr->ps.adj[i]; /* Obtain the "maximal" stat */ m = adjust_stat(17, j, TRUE); diff --git a/src/cmd5.cc b/src/cmd5.cc index d3d072b8..f4885609 100644 --- a/src/cmd5.cc +++ b/src/cmd5.cc @@ -359,7 +359,7 @@ void do_poly_self(void) while (1) { new_race = rand_int(max_rp_idx); - expfact = race_info[new_race].r_exp; + expfact = race_info[new_race].ps.exp; if ((new_race != p_ptr->prace) && (expfact <= goalexpfact)) break; } @@ -380,7 +380,7 @@ void do_poly_self(void) rp_ptr = &race_info[p_ptr->prace]; /* Experience factor */ - p_ptr->expfact = rp_ptr->r_exp + rmp_ptr->r_exp + cp_ptr->c_exp; + p_ptr->expfact = rp_ptr->ps.exp + rmp_ptr->ps.exp + cp_ptr->ps.exp; /* Level up if necessary */ check_experience(); diff --git a/src/corrupt.cc b/src/corrupt.cc index 5f50802d..18b23ad4 100644 --- a/src/corrupt.cc +++ b/src/corrupt.cc @@ -41,16 +41,7 @@ struct corruption_type static void subrace_add_power(player_race_mod *rmp_ptr, int power) { - int i; - - for (i=0; i<4; i++) - { - if (rmp_ptr->powers[i] == -1) - { - rmp_ptr->powers[i] = power; - return; - } - } + rmp_ptr->ps.powers.push_back(power); } static void player_gain_vampire_teeth() @@ -70,16 +61,16 @@ static void player_gain_vampire_teeth() static void player_gain_vampire_strength() { player_race_mod *rmp_ptr = &race_mod_info[SUBRACE_SAVE]; - /* Apply the bonuses/penalities */ - rmp_ptr->r_mhp = rmp_ptr->r_mhp + 1; - rmp_ptr->r_exp = rmp_ptr->r_exp + 100; - - rmp_ptr->r_adj[A_STR] = rmp_ptr->r_adj[A_STR] + 3; - rmp_ptr->r_adj[A_INT] = rmp_ptr->r_adj[A_INT] + 2; - rmp_ptr->r_adj[A_WIS] = rmp_ptr->r_adj[A_WIS] - 3; - rmp_ptr->r_adj[A_DEX] = rmp_ptr->r_adj[A_DEX] - 2; - rmp_ptr->r_adj[A_CON] = rmp_ptr->r_adj[A_CON] + 1; - rmp_ptr->r_adj[A_CHR] = rmp_ptr->r_adj[A_CHR] - 4; + + rmp_ptr->ps.mhp += +1; + rmp_ptr->ps.exp += +100; + + rmp_ptr->ps.adj[A_STR] += +3; + rmp_ptr->ps.adj[A_INT] += +2; + rmp_ptr->ps.adj[A_WIS] += -3; + rmp_ptr->ps.adj[A_DEX] += -2; + rmp_ptr->ps.adj[A_CON] += +1; + rmp_ptr->ps.adj[A_CHR] += -4; /* be reborn! */ do_rebirth(); diff --git a/src/init1.cc b/src/init1.cc index 3f803fbe..028e6b14 100644 --- a/src/init1.cc +++ b/src/init1.cc @@ -1022,7 +1022,6 @@ errr init_player_info_txt(FILE *fp) rp_ptr->title = my_strdup(s); /* Initialize */ - rp_ptr->powers[0] = rp_ptr->powers[1] = rp_ptr->powers[2] = rp_ptr->powers[3] = -1; powers = 0; lev = 1; @@ -1092,7 +1091,9 @@ errr init_player_info_txt(FILE *fp) rp_ptr->luck = s[6]; for (z = 0; z < 6; z++) - rp_ptr->r_adj[z] = s[z]; + { + rp_ptr->ps.adj[z] = s[z]; + } /* Next... */ continue; @@ -1114,7 +1115,7 @@ errr init_player_info_txt(FILE *fp) if (i == POWER_MAX) return (6); - rp_ptr->powers[powers++] = i; + rp_ptr->ps.powers.push_back(i); /* Next... */ continue; @@ -1153,8 +1154,8 @@ errr init_player_info_txt(FILE *fp) if (4 != sscanf(buf + 4, "%d:%d:%d:%d", &s[0], &s[1], &s[2], &s[3])) return (1); - rp_ptr->r_mhp = s[0]; - rp_ptr->r_exp = s[1]; + rp_ptr->ps.mhp = s[0]; + rp_ptr->ps.exp = s[1]; rp_ptr->infra = s[2]; rp_ptr->chart = s[3]; @@ -1244,7 +1245,6 @@ errr init_player_info_txt(FILE *fp) rmp_ptr->title = s; /* Initialize */ - rmp_ptr->powers[0] = rmp_ptr->powers[1] = rmp_ptr->powers[2] = rmp_ptr->powers[3] = -1; powers = 0; lev = 1; @@ -1323,7 +1323,9 @@ errr init_player_info_txt(FILE *fp) rmp_ptr->mana = s[7]; rmp_ptr->luck = s[6]; for (z = 0; z < 6; z++) - rmp_ptr->r_adj[z] = s[z]; + { + rmp_ptr->ps.adj[z] = s[z]; + } /* Next... */ continue; @@ -1345,7 +1347,7 @@ errr init_player_info_txt(FILE *fp) if (i == POWER_MAX) return (6); - rmp_ptr->powers[powers++] = i; + rmp_ptr->ps.powers.push_back(i); /* Next... */ continue; @@ -1384,8 +1386,8 @@ errr init_player_info_txt(FILE *fp) if (3 != sscanf(buf + 4, "%d:%d:%d", &s[0], &s[1], &s[2])) return (1); - rmp_ptr->r_mhp = s[0]; - rmp_ptr->r_exp = s[1]; + rmp_ptr->ps.mhp = s[0]; + rmp_ptr->ps.exp = s[1]; rmp_ptr->infra = s[2]; /* Next... */ @@ -1501,7 +1503,6 @@ errr init_player_info_txt(FILE *fp) c_ptr->title = my_strdup(s); /* Initialize */ - c_ptr->powers[0] = c_ptr->powers[1] = c_ptr->powers[2] = c_ptr->powers[3] = -1; powers = 0; lev = 1; tit_idx = 0; @@ -1605,7 +1606,9 @@ errr init_player_info_txt(FILE *fp) c_ptr->mana = s[6]; c_ptr->extra_blows = s[7]; for (z = 0; z < 6; z++) - c_ptr->c_adj[z] = s[z]; + { + c_ptr->ps.adj[z] = s[z]; + } /* Next... */ continue; @@ -1668,7 +1671,7 @@ errr init_player_info_txt(FILE *fp) if (i == POWER_MAX) return (6); - c_ptr->powers[powers++] = i; + c_ptr->ps.powers.push_back(i); /* Next... */ continue; @@ -1683,8 +1686,8 @@ errr init_player_info_txt(FILE *fp) if (2 != sscanf(buf + 4, "%d:%d", &s[0], &s[1])) return (1); - c_ptr->c_mhp = s[0]; - c_ptr->c_exp = s[1]; + c_ptr->ps.mhp = s[0]; + c_ptr->ps.exp = s[1]; /* Next... */ continue; diff --git a/src/loadsave.cc b/src/loadsave.cc index e6f4cefa..350fad65 100644 --- a/src/loadsave.cc +++ b/src/loadsave.cc @@ -424,19 +424,32 @@ static void do_subrace(ls_flag_t flag) do_bool(&sr_ptr->place, flag); for (i = 0; i < 6; i++) - do_s16b(&sr_ptr->r_adj[i], flag); + { + do_s16b(&sr_ptr->ps.adj[i], flag); + } do_byte((byte*)&sr_ptr->luck, flag); do_s16b(&sr_ptr->mana, flag); - do_byte((byte*)&sr_ptr->r_mhp, flag); - do_s16b(&sr_ptr->r_exp, flag); + do_byte((byte*)&sr_ptr->ps.mhp, flag); + do_s16b(&sr_ptr->ps.exp, flag); do_byte((byte*)&sr_ptr->infra, flag); - for (i = 0; i < 4; i++) { - do_s16b(&sr_ptr->powers[i], flag); + u16b n = sr_ptr->ps.powers.size(); + + do_u16b(&n, flag); + + for (std::size_t i = 0; i < n; i++) + { + if (flag == ls_flag_t::LOAD) + { + sr_ptr->ps.powers.push_back(0); + } + + do_s16b(&sr_ptr->ps.powers[i], flag); + } } for (i = 0; i < BODY_MAX; i++) diff --git a/src/player_class.hpp b/src/player_class.hpp index 9d9991e3..61d35b5b 100644 --- a/src/player_class.hpp +++ b/src/player_class.hpp @@ -7,6 +7,7 @@ #include "player_defs.hpp" #include "player_level_flag.hpp" #include "player_race_flag_set.hpp" +#include "player_shared.hpp" #include "player_spec.hpp" #include "skill_modifiers.hpp" @@ -19,12 +20,7 @@ struct player_class char *desc = nullptr; /* Small desc of the class */ const char *titles[PY_MAX_LEVEL / 5] { }; /* Titles */ - s16b c_adj[6] { }; /* Class stat modifier */ - - s16b c_mhp = 0; /* Class hit-dice adjustment */ - s16b c_exp = 0; /* Class experience factor */ - - s16b powers[4] { }; /* Powers of the class */ + player_shared ps; player_race_flag_set flags; diff --git a/src/player_race.hpp b/src/player_race.hpp index 36c9109e..560ba34f 100644 --- a/src/player_race.hpp +++ b/src/player_race.hpp @@ -8,12 +8,13 @@ #include "player_level_flag.hpp" #include "player_race_ability_type.hpp" #include "player_race_flag_set.hpp" -#include "skills_defs.hpp" +#include "player_shared.hpp" #include "skill_modifiers.hpp" #include #include + /** * Player racial descriptior. */ @@ -22,19 +23,14 @@ struct player_race const char *title = nullptr; /* Type of race */ char *desc = nullptr; - s16b r_adj[6] { }; /* Racial stat bonuses */ - char luck = '\0'; /* Luck */ - byte r_mhp = 0; /* Race hit-dice modifier */ - u16b r_exp = 0; /* Race experience factor */ + player_shared ps; byte infra = 0; /* Infra-vision range */ u32b choice[2] { }; /* Legal class choices */ - s16b powers[4] { }; /* Powers of the race */ - byte body_parts[BODY_MAX] { }; /* To help to decide what to use when body changing */ s16b chart = 0; /* Chart history */ diff --git a/src/player_race_mod.hpp b/src/player_race_mod.hpp index 60558d24..8eb984b7 100644 --- a/src/player_race_mod.hpp +++ b/src/player_race_mod.hpp @@ -8,6 +8,7 @@ #include "player_level_flag.hpp" #include "player_race_ability_type.hpp" #include "player_race_flag_set.hpp" +#include "player_shared.hpp" #include "skill_modifiers.hpp" #include "skills_defs.hpp" @@ -22,13 +23,10 @@ struct player_race_mod bool_ place = FALSE; /* TRUE = race race modifier, FALSE = Race modifier race */ - s16b r_adj[6] { }; /* (+) Racial stat bonuses */ - char luck = '\0'; /* Luck */ s16b mana = 0; /* Mana % */ - char r_mhp = 0; /* (+) Race mod hit-dice modifier */ - s16b r_exp = 0; /* (+) Race mod experience factor */ + player_shared ps; char infra = '\0'; /* (+) Infra-vision range */ @@ -37,8 +35,6 @@ struct player_race_mod u32b pclass[2] { }; /* Classes allowed */ u32b mclass[2] { }; /* Classes restricted */ - s16b powers[4] { }; /* Powers of the subrace */ - char body_parts[BODY_MAX] { }; /* To help to decide what to use when body changing */ player_race_flag_set flags; @@ -54,4 +50,3 @@ struct player_race_mod std::vector abilities; /* Abilities to be gained by level; ignores prereqs */ }; - diff --git a/src/player_shared.hpp b/src/player_shared.hpp new file mode 100644 index 00000000..1ae7b9a7 --- /dev/null +++ b/src/player_shared.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "h-basic.h" +#include "skills_defs.hpp" +#include +#include + +struct player_shared +{ + std::array adj { }; /* Stat modifiers */ + + s16b mhp = 0; /* Hit-dice adjustment */ + s16b exp = 0; /* Experience factor */ + + std::vector powers; /* Powers */ +}; diff --git a/src/xtra1.cc b/src/xtra1.cc index 280cc61a..fbbd7922 100644 --- a/src/xtra1.cc +++ b/src/xtra1.cc @@ -1533,6 +1533,15 @@ static void calc_powers_corruption() /* Ugly hack */ bool_ calc_powers_silent = FALSE; +/* Add in powers */ +static void add_powers(std::vector const &powers) +{ + for (auto const &p: powers) + { + p_ptr->powers[p] = TRUE; + } +} + /* Calc the player powers */ static void calc_powers(void) { @@ -1563,32 +1572,23 @@ static void calc_powers(void) if (!o_ptr->k_idx) continue; p = object_power(o_ptr); - if (p != -1) p_ptr->powers[p] = TRUE; + if (p != -1) + { + p_ptr->powers[p] = TRUE; + } } if ((!p_ptr->tim_mimic) && (!p_ptr->body_monster)) { - /* Add in racial and subracial powers */ - for (i = 0; i < 4; i++) - { - p = rp_ptr->powers[i]; - if (p != -1) p_ptr->powers[p] = TRUE; - - p = rmp_ptr->powers[i]; - if (p != -1) p_ptr->powers[p] = TRUE; - } + add_powers(rp_ptr->ps.powers); + add_powers(rmp_ptr->ps.powers); } else if (p_ptr->mimic_form) { calc_mimic_power(); } - /* Add in class powers */ - for (i = 0; i < 4; i++) - { - p = cp_ptr->powers[i]; - if (p != -1) p_ptr->powers[p] = TRUE; - } + add_powers(cp_ptr->ps.powers); if (p_ptr->disembodied) { @@ -3056,7 +3056,7 @@ void calc_bonuses(bool_ silent) for (i = 0; i < 6; i++) { /* Modify the stats for "race" */ - p_ptr->stat_add[i] += (rp_ptr->r_adj[i] + rmp_ptr->r_adj[i] + cp_ptr->c_adj[i]); + p_ptr->stat_add[i] += (rp_ptr->ps.adj[i] + rmp_ptr->ps.adj[i] + cp_ptr->ps.adj[i]); } diff --git a/src/xtra2.cc b/src/xtra2.cc index ce4c7de0..fe214950 100644 --- a/src/xtra2.cc +++ b/src/xtra2.cc @@ -5310,10 +5310,10 @@ void switch_subrace(int racem, bool_ copy_old) void do_rebirth() { /* Experience factor */ - p_ptr->expfact = rp_ptr->r_exp + rmp_ptr->r_exp + cp_ptr->c_exp; + p_ptr->expfact = rp_ptr->ps.exp + rmp_ptr->ps.exp + cp_ptr->ps.exp; /* Hitdice */ - p_ptr->hitdie = rp_ptr->r_mhp + rmp_ptr->r_mhp + cp_ptr->c_mhp; + p_ptr->hitdie = rp_ptr->ps.mhp + rmp_ptr->ps.mhp + cp_ptr->ps.mhp; /* Recalc HP */ do_cmd_rerate(); -- cgit v1.2.3