summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2017-05-02 19:20:57 +0200
committerBardur Arantsson <bardur@scientician.net>2017-05-02 19:20:57 +0200
commit2c8b8579faf729b9cf21b8b2d827f0e482570bd3 (patch)
tree7c258a9008d00ff1ec54de578d092e370b90cd95
parentfdb532aec5234db77a9111d219f8a870d660c4fc (diff)
Move random_artifacts to Game struct
-rw-r--r--src/birth.cc40
-rw-r--r--src/cmd6.cc2
-rw-r--r--src/game.hpp6
-rw-r--r--src/loadsave.cc35
-rw-r--r--src/monster2.cc6
-rw-r--r--src/object1.cc3
-rw-r--r--src/object2.cc25
-rw-r--r--src/q_rand.cc2
-rw-r--r--src/random_artifact.hpp6
-rw-r--r--src/variable.cc2
-rw-r--r--src/variable.hpp2
-rw-r--r--src/wizard2.cc1
12 files changed, 62 insertions, 68 deletions
diff --git a/src/birth.cc b/src/birth.cc
index 36f319d6..2f56ec28 100644
--- a/src/birth.cc
+++ b/src/birth.cc
@@ -56,6 +56,7 @@
#include "xtra2.hpp"
#include "z-rand.hpp"
+#include <algorithm>
#include <fmt/format.h>
#include <numeric>
#include <string>
@@ -465,33 +466,28 @@ static void get_extra()
*/
static errr init_randart()
{
- int i;
-
- long cost;
-
- random_artifact* ra_ptr;
-
char buf[80];
-
- for (i = 0; i < MAX_RANDARTS; i++)
+ for (int i = 0; i < MAX_RANDARTS; i++)
{
- ra_ptr = &random_artifacts[i];
-
- strcpy(ra_ptr->name_short,
- get_line("rart_s.txt", ANGBAND_DIR_FILE, buf, i));
- strcpy(ra_ptr->name_full,
- get_line("rart_f.txt", ANGBAND_DIR_FILE, buf, i));
-
- ra_ptr->attr = randint(15);
- ra_ptr->activation = rand_int(MAX_T_ACT);
- ra_ptr->generated = FALSE;
-
- cost = randnor(0, 250);
+ // Generate a 'cost'
+ auto cost = randnor(0, 250);
+ if (cost < 0)
+ {
+ cost = 0;
+ }
- if (cost < 0) cost = 0;
+ // Generate the random artifact
+ random_artifact ra;
+ ra.name_short = get_line("rart_s.txt", ANGBAND_DIR_FILE, buf, i);
+ ra.name_full = get_line("rart_f.txt", ANGBAND_DIR_FILE, buf, i);
+ ra.attr = randint(15);
+ ra.activation = rand_int(MAX_T_ACT);
+ ra.generated = FALSE;
+ ra.cost = cost;
- ra_ptr->cost = cost;
+ // Push
+ game->random_artifacts.push_back(ra);
}
return 0;
diff --git a/src/cmd6.cc b/src/cmd6.cc
index d609298d..e36f0cb6 100644
--- a/src/cmd6.cc
+++ b/src/cmd6.cc
@@ -4839,7 +4839,7 @@ void do_cmd_activate()
{
if (o_ptr->tval == TV_RANDART)
{
- lev = random_artifacts[o_ptr->sval].level;
+ lev = game->random_artifacts[o_ptr->sval].level;
}
else
{
diff --git a/src/game.hpp b/src/game.hpp
index 20ca0f86..631e16b1 100644
--- a/src/game.hpp
+++ b/src/game.hpp
@@ -7,6 +7,7 @@
#include "grid.hpp"
#include "h-basic.h"
#include "player_defs.hpp"
+#include "random_artifact.hpp"
#include "skill_type.hpp"
#include "wilderness_map.hpp"
@@ -41,6 +42,11 @@ struct Game {
grid<wilderness_map> wilderness;
/**
+ * Random artifacts
+ */
+ std::vector<random_artifact> random_artifacts;
+
+ /**
* Player's un-adjusted HP at every level.
* Stored to avoid shenanigans with draininging levels
* and restoring them back, &c.
diff --git a/src/loadsave.cc b/src/loadsave.cc
index 86c67956..ef554f19 100644
--- a/src/loadsave.cc
+++ b/src/loadsave.cc
@@ -2266,31 +2266,20 @@ static bool do_wilderness(ls_flag_t flag)
return true;
}
+static void do_randart(random_artifact *ra_ptr, ls_flag_t flag)
+{
+ do_std_string(ra_ptr->name_full, flag);
+ do_std_string(ra_ptr->name_short, flag);
+ do_byte(&ra_ptr->level, flag);
+ do_byte(&ra_ptr->attr, flag);
+ do_u32b(&ra_ptr->cost, flag);
+ do_byte(&ra_ptr->activation, flag);
+ do_byte(&ra_ptr->generated, flag);
+}
+
static bool do_randarts(ls_flag_t flag)
{
- u16b n_randarts = MAX_RANDARTS;
-
- do_u16b(&n_randarts, flag);
-
- if ((flag == ls_flag_t::LOAD) && (n_randarts > MAX_RANDARTS))
- {
- note("Too many random artifacts!");
- return false;
- }
-
- for (std::size_t i = 0; i < n_randarts; i++)
- {
- random_artifact *ra_ptr = &random_artifacts[i];
-
- do_string(ra_ptr->name_full, 80, flag);
- do_string(ra_ptr->name_short, 80, flag);
- do_byte(&ra_ptr->level, flag);
- do_byte(&ra_ptr->attr, flag);
- do_u32b(&ra_ptr->cost, flag);
- do_byte(&ra_ptr->activation, flag);
- do_byte(&ra_ptr->generated, flag);
- }
-
+ do_vector(flag, game->random_artifacts, do_randart);
return true;
}
diff --git a/src/monster2.cc b/src/monster2.cc
index ab60a9e3..8e866796 100644
--- a/src/monster2.cc
+++ b/src/monster2.cc
@@ -432,6 +432,7 @@ void delete_monster_idx(int i)
{
auto &k_info = game->edit_data.k_info;
auto &a_info = game->edit_data.a_info;
+ auto &random_artifacts = game->random_artifacts;
/* Get location */
monster_type *m_ptr = &m_list[i];
@@ -1892,8 +1893,7 @@ void monster_carry(monster_type *m_ptr, int m_idx, object_type *q_ptr)
{
auto &k_info = game->edit_data.k_info;
auto &a_info = game->edit_data.a_info;
-
- object_type *o_ptr;
+ auto &random_artifacts = game->random_artifacts;
/* Get new object */
int o_idx = o_pop();
@@ -1901,7 +1901,7 @@ void monster_carry(monster_type *m_ptr, int m_idx, object_type *q_ptr)
if (o_idx)
{
/* Get the item */
- o_ptr = &o_list[o_idx];
+ object_type *o_ptr = &o_list[o_idx];
/* Structure copy */
object_copy(o_ptr, q_ptr);
diff --git a/src/object1.cc b/src/object1.cc
index d10f3042..34c22a4a 100644
--- a/src/object1.cc
+++ b/src/object1.cc
@@ -1022,6 +1022,7 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode)
auto const &k_info = game->edit_data.k_info;
auto const &a_info = game->edit_data.a_info;
auto const &e_info = game->edit_data.e_info;
+ auto const &random_artifacts = game->random_artifacts;
static auto const TR_PVAL_MASK = compute_pval_mask();
bool_ hack_name = FALSE;
@@ -6125,6 +6126,7 @@ static void apply_flags_set(s16b a_idx, s16b set_idx, object_flag_set *f)
byte object_attr(object_type const *o_ptr)
{
auto const &k_info = game->edit_data.k_info;
+ auto const &random_artifacts = game->random_artifacts;
if (o_ptr->tval == TV_RANDART)
{
@@ -6143,6 +6145,7 @@ byte object_attr(object_type const *o_ptr)
byte object_attr_default(object_type *o_ptr)
{
auto const &k_info = game->edit_data.k_info;
+ auto const &random_artifacts = game->random_artifacts;
if (o_ptr->tval == TV_RANDART)
{
diff --git a/src/object2.cc b/src/object2.cc
index a9f0f7ce..32ab6de1 100644
--- a/src/object2.cc
+++ b/src/object2.cc
@@ -400,7 +400,7 @@ void wipe_o_list()
/* Mega-Hack -- Preserve the artifact */
if (o_ptr->tval == TV_RANDART)
{
- random_artifacts[o_ptr->sval].generated = FALSE;
+ game->random_artifacts[o_ptr->sval].generated = FALSE;
}
else if (k_info[o_ptr->k_idx].flags & TR_NORM_ART)
{
@@ -1098,7 +1098,7 @@ s32b object_value_real(object_type const *o_ptr)
if (o_ptr->tval == TV_RANDART)
{
- return random_artifacts[o_ptr->sval].cost;
+ return game->random_artifacts[o_ptr->sval].cost;
}
/* Hack -- "worthless" items */
@@ -1998,20 +1998,21 @@ s16b m_bonus(int max, int level)
*/
static void finalize_randart(object_type* o_ptr, int lev)
{
- int r;
- int i = 0;
- bool_ flag = TRUE;
+ auto &random_artifacts = game->random_artifacts;
/* Paranoia */
- if (o_ptr->tval != TV_RANDART) return;
+ if (o_ptr->tval != TV_RANDART)
+ {
+ return;
+ }
- while (flag)
+ for (int i = 0; ; i++)
{
- r = rand_int(MAX_RANDARTS);
+ auto const r = rand_int(MAX_RANDARTS);
if (!(random_artifacts[r].generated) || i > 2000)
{
- random_artifact* ra_ptr = &random_artifacts[r];
+ auto ra_ptr = &random_artifacts[r];
o_ptr->sval = r;
o_ptr->pval2 = ra_ptr->activation;
@@ -2019,10 +2020,8 @@ static void finalize_randart(object_type* o_ptr, int lev)
ra_ptr->level = lev;
ra_ptr->generated = TRUE;
- flag = FALSE;
+ return;
}
-
- i++;
}
}
@@ -4751,6 +4750,7 @@ void place_object(int y, int x, bool_ good, bool_ great, int where)
auto const &d_info = game->edit_data.d_info;
auto &k_info = game->edit_data.k_info;
auto &a_info = game->edit_data.a_info;
+ auto &random_artifacts = game->random_artifacts;
s16b o_idx;
@@ -4987,6 +4987,7 @@ s16b drop_near(object_type *j_ptr, int chance, int y, int x)
auto const &f_info = game->edit_data.f_info;
auto &k_info = game->edit_data.k_info;
auto &a_info = game->edit_data.a_info;
+ auto &random_artifacts = game->random_artifacts;
int i, k, d, s;
diff --git a/src/q_rand.cc b/src/q_rand.cc
index 177ba7a9..e3860dd2 100644
--- a/src/q_rand.cc
+++ b/src/q_rand.cc
@@ -270,7 +270,7 @@ static void do_get_new_obj(int y, int x)
/* Mega-Hack -- Preserve the artifact */
if (o_ptr->tval == TV_RANDART)
{
- random_artifacts[o_ptr->sval].generated = FALSE;
+ game->random_artifacts[o_ptr->sval].generated = FALSE;
}
else if (k_info[o_ptr->k_idx].flags & TR_NORM_ART)
{
diff --git a/src/random_artifact.hpp b/src/random_artifact.hpp
index a3fc1c66..618f1102 100644
--- a/src/random_artifact.hpp
+++ b/src/random_artifact.hpp
@@ -2,13 +2,15 @@
#include "h-basic.h"
+#include <string>
+
/**
* Random artifact descriptor.
*/
struct random_artifact
{
- char name_full[80]; /* Full name for the artifact */
- char name_short[80]; /* Un-Id'd name */
+ std::string name_full; /* Full name for the artifact */
+ std::string name_short; /* Un-Id'd name */
byte level; /* Level of the artifact */
byte attr; /* Color that is used on the screen */
u32b cost; /* Object's value */
diff --git a/src/variable.cc b/src/variable.cc
index 3b81a51a..7aae4187 100644
--- a/src/variable.cc
+++ b/src/variable.cc
@@ -558,8 +558,6 @@ bool_ carried_monster_hit = FALSE;
/*
* Random artifacts.
*/
-random_artifact random_artifacts[MAX_RANDARTS];
-/* These three used to be constants but now are set by modules */
s32b RANDART_WEAPON;
s32b RANDART_ARMOR;
s32b RANDART_JEWEL;
diff --git a/src/variable.hpp b/src/variable.hpp
index 38db36b4..3cb54d3a 100644
--- a/src/variable.hpp
+++ b/src/variable.hpp
@@ -17,7 +17,6 @@
#include "player_race_mod_fwd.hpp"
#include "player_spec_fwd.hpp"
#include "player_type_fwd.hpp"
-#include "random_artifact.hpp"
#include "random_quest.hpp"
#include "school_type.hpp"
#include "skill_modifiers_fwd.hpp"
@@ -161,7 +160,6 @@ extern bool_ ambush_flag;
extern bool_ fate_flag;
extern s16b no_breeds;
extern bool_ carried_monster_hit;
-extern random_artifact random_artifacts[MAX_RANDARTS];
extern s32b RANDART_WEAPON;
extern s32b RANDART_ARMOR;
extern s32b RANDART_JEWEL;
diff --git a/src/wizard2.cc b/src/wizard2.cc
index cf7c699d..890c6fbe 100644
--- a/src/wizard2.cc
+++ b/src/wizard2.cc
@@ -825,6 +825,7 @@ static void wiz_reroll_item(object_type *o_ptr)
static void wiz_statistics(object_type *o_ptr)
{
auto &a_info = game->edit_data.a_info;
+ auto &random_artifacts = game->random_artifacts;
long i, matches, better, worse, other;