summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2016-10-05 18:45:08 +0200
committerBardur Arantsson <bardur@scientician.net>2016-10-05 18:49:38 +0200
commit89e75b855662b1dcc86a6dc3789fa496aafbb0a2 (patch)
treea64ae5297bd9d6362b9872a1832cbcad251063ab
parent57bb453a15034c67d04496360b306a5f3bfd0bf2 (diff)
Move e_info into GameEditData
-rw-r--r--lib/edit/misc.txt3
-rw-r--r--lib/mods/theme/edit/misc.txt3
-rw-r--r--src/cmd6.cc1
-rw-r--r--src/ego_item_type_fwd.hpp3
-rw-r--r--src/game_edit_data.hpp6
-rw-r--r--src/init1.cc13
-rw-r--r--src/init2.cc2
-rw-r--r--src/loadsave.cc1
-rw-r--r--src/object1.cc35
-rw-r--r--src/object2.cc18
-rw-r--r--src/variable.cc10
-rw-r--r--src/variable.hpp3
-rw-r--r--src/xtra2.cc13
13 files changed, 51 insertions, 60 deletions
diff --git a/lib/edit/misc.txt b/lib/edit/misc.txt
index 75500706..8d4b16e1 100644
--- a/lib/edit/misc.txt
+++ b/lib/edit/misc.txt
@@ -12,9 +12,6 @@ M:X:101
# Maximum y size of the wilderness
M:Y:66
-# Maximum number of ego-items in e_info.txt
-M:E:200
-
# Maximum number of trap types in tr_info.txt
M:U:176
diff --git a/lib/mods/theme/edit/misc.txt b/lib/mods/theme/edit/misc.txt
index 51ed2fba..c90546ef 100644
--- a/lib/mods/theme/edit/misc.txt
+++ b/lib/mods/theme/edit/misc.txt
@@ -12,9 +12,6 @@ M:X:101
# Maximum y size of the wilderness
M:Y:66
-# Maximum number of ego-items in e_info.txt
-M:E:238
-
# Maximum number of trap types in tr_info.txt
M:U:176
diff --git a/src/cmd6.cc b/src/cmd6.cc
index 93df49ad..d6df7570 100644
--- a/src/cmd6.cc
+++ b/src/cmd6.cc
@@ -5077,6 +5077,7 @@ const char *activation_aux(object_type * o_ptr, bool_ doit, int item)
{
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;
int plev = get_skill(SKILL_DEVICE);
diff --git a/src/ego_item_type_fwd.hpp b/src/ego_item_type_fwd.hpp
deleted file mode 100644
index 795f4403..00000000
--- a/src/ego_item_type_fwd.hpp
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-struct ego_item_type;
diff --git a/src/game_edit_data.hpp b/src/game_edit_data.hpp
index 6a6fea9c..cc3af2dc 100644
--- a/src/game_edit_data.hpp
+++ b/src/game_edit_data.hpp
@@ -3,6 +3,7 @@
#include "ability_type.hpp"
#include "artifact_type.hpp"
#include "dungeon_info_type.hpp"
+#include "ego_item_type.hpp"
#include "feature_type.hpp"
#include "hist_type.hpp"
#include "monster_ego.hpp"
@@ -56,6 +57,11 @@ struct GameEditData {
std::vector<artifact_type> a_info;
/**
+ * Ego items
+ */
+ std::vector<ego_item_type> e_info;
+
+ /**
* Artifact sets
*/
std::vector<set_type> set_info;
diff --git a/src/init1.cc b/src/init1.cc
index 3912db12..185548ea 100644
--- a/src/init1.cc
+++ b/src/init1.cc
@@ -3499,6 +3499,8 @@ static bool_ grab_one_ego_item_flag(object_flag_set *flags, ego_flag_set *ego, c
*/
errr init_e_info_txt(FILE *fp)
{
+ auto &e_info = game->edit_data.e_info;
+
int i, cur_r = -1, cur_t = 0;
char buf[1024];
char *s, *t;
@@ -3547,9 +3549,6 @@ errr init_e_info_txt(FILE *fp)
/* Verify information */
if (i < error_idx) return (4);
- /* Verify information */
- if (i >= max_e_idx) return (2);
-
/* Save the index */
error_idx = i;
@@ -3558,7 +3557,7 @@ errr init_e_info_txt(FILE *fp)
cur_t = 0;
/* Point at the "info" */
- e_ptr = &e_info[i];
+ e_ptr = &expand_to_fit_index(e_info, i);
/* Copy name */
assert(!e_ptr->name);
@@ -6775,12 +6774,6 @@ static errr process_dungeon_file_aux(char *buf, int *yval, int *xval, int xvalst
max_real_towns = atoi(zz[1]);
}
- /* Maximum e_idx */
- else if (zz[0][0] == 'E')
- {
- max_e_idx = atoi(zz[1]);
- }
-
/* Maximum o_idx */
else if (zz[0][0] == 'O')
{
diff --git a/src/init2.cc b/src/init2.cc
index 8181f2d1..ad2bed62 100644
--- a/src/init2.cc
+++ b/src/init2.cc
@@ -373,7 +373,7 @@ namespace {
static void allocate()
{
- e_info = new ego_item_type[max_e_idx];
+ // Nothing to do
}
static errr parse(FILE *fp)
diff --git a/src/loadsave.cc b/src/loadsave.cc
index c58279a2..d9dfe452 100644
--- a/src/loadsave.cc
+++ b/src/loadsave.cc
@@ -1058,6 +1058,7 @@ static void do_item(object_type *o_ptr, ls_flag_t flag)
{
auto &k_info = game->edit_data.k_info;
auto &a_info = game->edit_data.a_info;
+ auto &e_info = game->edit_data.e_info;
byte old_dd;
byte old_ds;
diff --git a/src/object1.cc b/src/object1.cc
index 8795bdbd..3c7da36e 100644
--- a/src/object1.cc
+++ b/src/object1.cc
@@ -835,6 +835,7 @@ int object_power(object_type *o_ptr)
{
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 k_ptr = &k_info[o_ptr->k_idx];
int power = -1;
@@ -845,15 +846,21 @@ int object_power(object_type *o_ptr)
/* Ego-item */
if (o_ptr->name2)
{
- ego_item_type *e_ptr = &e_info[o_ptr->name2];
+ auto e_ptr = &e_info[o_ptr->name2];
- if (power == -1) power = e_ptr->power;
+ if (power == -1)
+ {
+ power = e_ptr->power;
+ }
if (o_ptr->name2b)
{
- ego_item_type *e_ptr = &e_info[o_ptr->name2b];
+ auto e_ptr = &e_info[o_ptr->name2b];
- if (power == -1) power = e_ptr->power;
+ if (power == -1)
+ {
+ power = e_ptr->power;
+ }
}
}
@@ -1028,6 +1035,7 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode)
auto const &r_info = game->edit_data.r_info;
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;
static auto const TR_PVAL_MASK = compute_pval_mask();
bool_ hack_name = FALSE;
@@ -1425,8 +1433,8 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode)
/* Grab any ego-item name */
if (known && (o_ptr->name2 || o_ptr->name2b) && (o_ptr->tval != TV_ROD_MAIN))
{
- ego_item_type *e_ptr = &e_info[o_ptr->name2];
- ego_item_type *e2_ptr = &e_info[o_ptr->name2b];
+ auto e_ptr = &e_info[o_ptr->name2];
+ auto e2_ptr = &e_info[o_ptr->name2b];
if (e_ptr->before)
{
@@ -1509,8 +1517,8 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode)
/* Grab any ego-item name */
if (known && (o_ptr->name2 || o_ptr->name2b) && (o_ptr->tval != TV_ROD_MAIN))
{
- ego_item_type *e_ptr = &e_info[o_ptr->name2];
- ego_item_type *e2_ptr = &e_info[o_ptr->name2b];
+ auto e_ptr = &e_info[o_ptr->name2];
+ auto e2_ptr = &e_info[o_ptr->name2b];
if (e_ptr->before)
{
@@ -1581,8 +1589,8 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode)
/* Grab any ego-item name */
if (known && (o_ptr->name2 || o_ptr->name2b) && (o_ptr->tval != TV_ROD_MAIN))
{
- ego_item_type *e_ptr = &e_info[o_ptr->name2];
- ego_item_type *e2_ptr = &e_info[o_ptr->name2b];
+ auto e_ptr = &e_info[o_ptr->name2];
+ auto e2_ptr = &e_info[o_ptr->name2b];
if (e_ptr->before)
{
@@ -1631,7 +1639,7 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode)
if (known && o_ptr->name2)
{
- ego_item_type *e_ptr = &e_info[o_ptr->name2];
+ auto e_ptr = &e_info[o_ptr->name2];
t += e_ptr->name;
}
}
@@ -1706,8 +1714,8 @@ static std::string object_desc_aux(object_type const *o_ptr, int pref, int mode)
/* Grab any ego-item name */
else if ((o_ptr->name2 || o_ptr->name2b) && (o_ptr->tval != TV_ROD_MAIN))
{
- ego_item_type *e_ptr = &e_info[o_ptr->name2];
- ego_item_type *e2_ptr = &e_info[o_ptr->name2b];
+ auto e_ptr = &e_info[o_ptr->name2];
+ auto e2_ptr = &e_info[o_ptr->name2b];
if (o_ptr->name2 && !e_ptr->before)
{
@@ -2152,6 +2160,7 @@ cptr item_activation(object_type *o_ptr, byte num)
{
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;
/* Needed hacks */
static char rspell[2][80];
diff --git a/src/object2.cc b/src/object2.cc
index 7134308f..7c2bd7db 100644
--- a/src/object2.cc
+++ b/src/object2.cc
@@ -1092,6 +1092,7 @@ s32b object_value_real(object_type const *o_ptr)
auto const &r_info = game->edit_data.r_info;
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;
s32b value;
@@ -1132,7 +1133,7 @@ s32b object_value_real(object_type const *o_ptr)
/* Ego-Item */
else if (o_ptr->name2)
{
- ego_item_type *e_ptr = &e_info[o_ptr->name2];
+ auto e_ptr = &e_info[o_ptr->name2];
/* Hack -- "worthless" ego-items */
if (!e_ptr->cost) return (0L);
@@ -1142,7 +1143,7 @@ s32b object_value_real(object_type const *o_ptr)
if (o_ptr->name2b)
{
- ego_item_type *e_ptr = &e_info[o_ptr->name2b];
+ auto e_ptr = &e_info[o_ptr->name2b];
/* Hack -- "worthless" ego-items */
if (!e_ptr->cost) return (0L);
@@ -2352,6 +2353,7 @@ static bool_ make_artifact(object_type *o_ptr)
static bool_ make_ego_item(object_type *o_ptr, bool_ good)
{
auto const &k_info = game->edit_data.k_info;
+ auto const &e_info = game->edit_data.e_info;
bool_ ret = FALSE;
auto k_ptr = &k_info[o_ptr->k_idx];
@@ -2361,9 +2363,9 @@ static bool_ make_ego_item(object_type *o_ptr, bool_ good)
std::vector<size_t> ok_ego;
/* Grab the ok ego */
- for (size_t i = 0; i < max_e_idx; i++)
+ for (size_t i = 0; i < e_info.size(); i++)
{
- ego_item_type *e_ptr = &e_info[i];
+ auto e_ptr = &e_info[i];
bool_ ok = FALSE;
/* Skip "empty" items */
@@ -2403,7 +2405,7 @@ static bool_ make_ego_item(object_type *o_ptr, bool_ good)
for (size_t i = 0; i < ok_ego.size() * 10; i++)
{
size_t j = ok_ego[rand_int(ok_ego.size())];
- ego_item_type *e_ptr = &e_info[j];
+ auto e_ptr = &e_info[j];
/* XXX XXX Enforce minimum "depth" (loosely) */
if (e_ptr->level > dun_level)
@@ -2442,7 +2444,7 @@ static bool_ make_ego_item(object_type *o_ptr, bool_ good)
for (size_t i = 0; i < ok_ego.size() * 10; i++)
{
int j = ok_ego[rand_int(ok_ego.size())]; // Explicit int conversion to avoid warning
- ego_item_type *e_ptr = &e_info[j];
+ auto e_ptr = &e_info[j];
/* Cannot be a double ego of the same ego type */
if (j == o_ptr->name2) continue;
@@ -3971,6 +3973,7 @@ void apply_magic(object_type *o_ptr, int lev, bool_ okay, bool_ good, bool_ grea
{
auto &k_info = game->edit_data.k_info;
auto &a_info = game->edit_data.a_info;
+ auto const &e_info = game->edit_data.e_info;
int i, rolls;
auto k_ptr = &k_info[o_ptr->k_idx];
@@ -4233,7 +4236,6 @@ void apply_magic(object_type *o_ptr, int lev, bool_ okay, bool_ good, bool_ grea
/* Hack -- analyze ego-items */
else if (o_ptr->name2)
{
- ego_item_type *e_ptr;
int j;
bool_ limit_blows = FALSE;
s16b e_idx;
@@ -4242,7 +4244,7 @@ void apply_magic(object_type *o_ptr, int lev, bool_ okay, bool_ good, bool_ grea
/* Ok now, THAT is truly ugly */
try_an_other_ego:
- e_ptr = &e_info[e_idx];
+ auto e_ptr = &e_info[e_idx];
/* Hack -- extra powers */
for (j = 0; j < FLAG_RARITY_MAX; j++)
diff --git a/src/variable.cc b/src/variable.cc
index 542ba16d..cfb1f7bf 100644
--- a/src/variable.cc
+++ b/src/variable.cc
@@ -428,11 +428,6 @@ player_class const *cp_ptr;
player_spec const *spp_ptr;
-/*
- * The ego-item arrays
- */
-ego_item_type *e_info;
-
/* jk */
/* the trap-arrays */
trap_type *t_info;
@@ -559,11 +554,6 @@ s32b get_level_max_stick = -1;
s32b get_level_use_stick = -1;
/*
- * Maximum number of ego-items in e_info.txt
- */
-u16b max_e_idx;
-
-/*
* Maximum number of objects in the level
*/
u16b max_o_idx;
diff --git a/src/variable.hpp b/src/variable.hpp
index 829f0f2b..5b40a693 100644
--- a/src/variable.hpp
+++ b/src/variable.hpp
@@ -7,7 +7,6 @@
#include "deity_type.hpp"
#include "dungeon_flag_set.hpp"
#include "effect_type.hpp"
-#include "ego_item_type_fwd.hpp"
#include "fate.hpp"
#include "monster_type_fwd.hpp"
#include "object_type_fwd.hpp"
@@ -149,7 +148,6 @@ extern player_class const *cp_ptr;
extern player_spec const *spp_ptr;
extern char player_name[32];
extern char player_base[32];
-extern ego_item_type *e_info;
extern trap_type *t_info;
extern int wildc2i[256];
extern cptr DEFAULT_FEAT_TEXT;
@@ -162,7 +160,6 @@ extern char *ANGBAND_DIR_DNGN;
extern bool_ (*get_mon_num_hook)(int r_idx);
extern bool_ (*get_mon_num2_hook)(int r_idx);
extern bool_ (*get_obj_num_hook)(int k_idx);
-extern u16b max_e_idx;
extern u16b max_o_idx;
extern u16b max_m_idx;
extern u16b max_t_idx;
diff --git a/src/xtra2.cc b/src/xtra2.cc
index 25333356..bf39e8ce 100644
--- a/src/xtra2.cc
+++ b/src/xtra2.cc
@@ -5007,12 +5007,13 @@ void set_grace(s32b v)
static bool_ test_object_wish(char *name, object_type *o_ptr, object_type *forge, const char *what)
{
auto &k_info = game->edit_data.k_info;
+ auto const &e_info = game->edit_data.e_info;
- int i, j, jb, save_aware;
+ int save_aware;
char buf[200];
/* try all objects, this *IS* a very ugly and slow method :( */
- for (i = 0; i < k_info.size(); i++)
+ for (std::size_t i = 0; i < k_info.size(); i++)
{
auto k_ptr = &k_info[i];
@@ -5040,9 +5041,9 @@ static bool_ test_object_wish(char *name, object_type *o_ptr, object_type *forge
(o_ptr->tval == TV_ROD_MAIN && strstr(name, "rod of")))
{
/* try all ego */
- for (j = max_e_idx - 1; j >= 0; j--)
+ for (std::size_t j = 0; j < e_info.size(); j++)
{
- ego_item_type *e_ptr = &e_info[j];
+ auto e_ptr = &e_info[j];
bool_ ok = FALSE;
if (j && !e_ptr->name) continue;
@@ -5068,9 +5069,9 @@ static bool_ test_object_wish(char *name, object_type *o_ptr, object_type *forge
}
/* try all ego */
- for (jb = max_e_idx - 1; jb >= 0; jb--)
+ for (std::size_t jb = 0; jb < e_info.size(); jb++)
{
- ego_item_type *eb_ptr = &e_info[jb];
+ auto eb_ptr = &e_info[jb];
bool_ ok = FALSE;
if (jb && !eb_ptr->name) continue;