summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2016-09-17 09:58:14 +0200
committerBardur Arantsson <bardur@scientician.net>2016-09-17 09:58:14 +0200
commitdaf23851092099647a3830aa1c0cf12962f55b8e (patch)
tree15e236b093913f2f7e686af82d883f7419ee9e37
parentcc857c940cfe1bfe8d78674dbce53e5b71acaf41 (diff)
Move 'player_*' shared fields to new 'player_shared' struct
-rw-r--r--src/birth.cc8
-rw-r--r--src/cmd5.cc4
-rw-r--r--src/corrupt.cc31
-rw-r--r--src/init1.cc33
-rw-r--r--src/loadsave.cc23
-rw-r--r--src/player_class.hpp8
-rw-r--r--src/player_race.hpp10
-rw-r--r--src/player_race_mod.hpp9
-rw-r--r--src/player_shared.hpp16
-rw-r--r--src/xtra1.cc34
-rw-r--r--src/xtra2.cc4
11 files changed, 95 insertions, 85 deletions
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 <array>
#include <vector>
+
/**
* 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<player_race_ability_type> 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 <array>
+#include <vector>
+
+struct player_shared
+{
+ std::array<s16b, 6> adj { }; /* Stat modifiers */
+
+ s16b mhp = 0; /* Hit-dice adjustment */
+ s16b exp = 0; /* Experience factor */
+
+ std::vector<s16b> 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<s16b> 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();