summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2016-09-17 09:58:13 +0200
committerBardur Arantsson <bardur@scientician.net>2016-09-17 09:58:13 +0200
commit4d07dca15f547f6233b714c8c82b43bcd5beaebc (patch)
treea6b353f214e8e69197d71ed9d78da209c306efea /src
parent804ff8c184e8ce892ed7629ba6feec9bef5aa7ff (diff)
Unify obj_* fields into object_proto struct
Diffstat (limited to 'src')
-rw-r--r--src/birth.cc31
-rw-r--r--src/init1.cc109
-rw-r--r--src/object_proto.hpp12
-rw-r--r--src/player_class.hpp7
-rw-r--r--src/player_race.hpp7
-rw-r--r--src/player_race_mod.hpp7
-rw-r--r--src/player_spec.hpp7
7 files changed, 77 insertions, 103 deletions
diff --git a/src/birth.cc b/src/birth.cc
index 3f09c191..03e651a2 100644
--- a/src/birth.cc
+++ b/src/birth.cc
@@ -909,25 +909,26 @@ static void player_wipe(void)
/* Create an object */
-void outfit_obj(int tv, int sv, int pval, int dd, int ds)
+static void outfit_obj(object_proto const *proto)
{
object_type forge;
- object_type *q_ptr;
/* Get local object */
- q_ptr = &forge;
+ auto q_ptr = &forge;
q_ptr->pval = 0;
q_ptr->pval2 = 0;
/* Hack -- Give the player an object */
- object_prep(q_ptr, lookup_kind(tv, sv));
+ object_prep(q_ptr, lookup_kind(proto->tval, proto->sval));
- if (pval)
- q_ptr->pval = pval;
+ if (proto->pval)
+ {
+ q_ptr->pval = proto->pval;
+ }
/* These objects are "storebought" */
q_ptr->ident |= IDENT_MENTAL;
- q_ptr->number = damroll(dd, ds);
+ q_ptr->number = damroll(proto->dd, proto->ds);
object_aware(q_ptr);
object_known(q_ptr);
@@ -1161,13 +1162,21 @@ static void player_outfit(void)
/* Hack -- Give the player some useful objects */
for (i = 0; i < rp_ptr->obj_num; i++)
- outfit_obj(rp_ptr->obj_tval[i], rp_ptr->obj_sval[i], rp_ptr->obj_pval[i], rp_ptr->obj_dd[i], rp_ptr->obj_ds[i]);
+ {
+ outfit_obj(&rp_ptr->obj[i]);
+ }
for (i = 0; i < rmp_ptr->obj_num; i++)
- outfit_obj(rmp_ptr->obj_tval[i], rmp_ptr->obj_sval[i], rmp_ptr->obj_pval[i], rmp_ptr->obj_dd[i], rmp_ptr->obj_ds[i]);
+ {
+ outfit_obj(&rmp_ptr->obj[i]);
+ }
for (i = 0; i < cp_ptr->obj_num; i++)
- outfit_obj(cp_ptr->obj_tval[i], cp_ptr->obj_sval[i], cp_ptr->obj_pval[i], cp_ptr->obj_dd[i], cp_ptr->obj_ds[i]);
+ {
+ outfit_obj(&cp_ptr->obj[i]);
+ }
for (i = 0; i < cp_ptr->spec[p_ptr->pspec].obj_num; i++)
- outfit_obj(cp_ptr->spec[p_ptr->pspec].obj_tval[i], cp_ptr->spec[p_ptr->pspec].obj_sval[i], cp_ptr->spec[p_ptr->pspec].obj_pval[i], cp_ptr->spec[p_ptr->pspec].obj_dd[i], cp_ptr->spec[p_ptr->pspec].obj_ds[i]);
+ {
+ outfit_obj(&cp_ptr->spec[p_ptr->pspec].obj[i]);
+ }
}
diff --git a/src/init1.cc b/src/init1.cc
index e504f5ed..5b1e5709 100644
--- a/src/init1.cc
+++ b/src/init1.cc
@@ -838,6 +838,35 @@ static int read_skill_modifiers(skill_modifiers *skill_modifiers, cptr buf)
/*
+ * Read prototype objects
+ */
+static int read_proto_object(object_proto *proto, s16b *num, cptr buf)
+{
+ int s0, s1, s2, s3, s4;
+
+ if (5 != sscanf(buf, "%d:%d:%d:%dd%d", &s0, &s1, &s4, &s2, &s3))
+ {
+ s4 = 0;
+
+ if (4 != sscanf(buf, "%d:%d:%dd%d", &s0, &s1, &s2, &s3))
+ {
+ return 1;
+ }
+ }
+
+ proto->pval = s4;
+ proto->tval = s0;
+ proto->sval = s1;
+ proto->dd = s2;
+ proto->ds = s3;
+
+ (*num)++;
+
+ return 0;
+}
+
+
+/*
* Initialize the "player" arrays, by parsing an ascii "template" file
*/
errr init_player_info_txt(FILE *fp)
@@ -1136,27 +1165,11 @@ errr init_player_info_txt(FILE *fp)
/* Process 'O' for "Object birth" */
if ((buf[0] == 'R') && (buf[2] == 'O'))
{
- int s[5];
-
- /* Scan for the values */
- if (5 != sscanf(buf + 4, "%d:%d:%d:%dd%d",
- &s[0], &s[1], &s[4], &s[2], &s[3]))
+ if (read_proto_object(&rp_ptr->obj[rp_ptr->obj_num], &rp_ptr->obj_num, buf + 4))
{
- s[4] = 0;
-
- if (4 != sscanf(buf + 4, "%d:%d:%dd%d",
- &s[0], &s[1], &s[2], &s[3]))
- {
- return (1);
- }
+ return 1;
}
- rp_ptr->obj_pval[rp_ptr->obj_num] = s[4];
- rp_ptr->obj_tval[rp_ptr->obj_num] = s[0];
- rp_ptr->obj_sval[rp_ptr->obj_num] = s[1];
- rp_ptr->obj_dd[rp_ptr->obj_num] = s[2];
- rp_ptr->obj_ds[rp_ptr->obj_num++] = s[3];
-
/* Next... */
continue;
}
@@ -1402,27 +1415,11 @@ errr init_player_info_txt(FILE *fp)
/* Process 'O' for "Object birth" */
if ((buf[0] == 'S') && (buf[2] == 'O'))
{
- int s[5];
-
- /* Scan for the values */
- if (5 != sscanf(buf + 4, "%d:%d:%d:%dd%d",
- &s[0], &s[1], &s[4], &s[2], &s[3]))
+ if (read_proto_object(&rmp_ptr->obj[rmp_ptr->obj_num], &rmp_ptr->obj_num, buf + 4))
{
- s[4] = 0;
-
- if (4 != sscanf(buf + 4, "%d:%d:%dd%d",
- &s[0], &s[1], &s[2], &s[3]))
- {
- return (1);
- }
+ return 1;
}
- rmp_ptr->obj_pval[rmp_ptr->obj_num] = s[4];
- rmp_ptr->obj_tval[rmp_ptr->obj_num] = s[0];
- rmp_ptr->obj_sval[rmp_ptr->obj_num] = s[1];
- rmp_ptr->obj_dd[rmp_ptr->obj_num] = s[2];
- rmp_ptr->obj_ds[rmp_ptr->obj_num++] = s[3];
-
/* Next... */
continue;
}
@@ -1560,27 +1557,11 @@ errr init_player_info_txt(FILE *fp)
/* Process 'O' for "Object birth" */
if ((buf[0] == 'C') && (buf[2] == 'O'))
{
- int s[5];
-
- /* Scan for the values */
- if (5 != sscanf(buf + 4, "%d:%d:%d:%dd%d",
- &s[0], &s[1], &s[4], &s[2], &s[3]))
+ if (read_proto_object(&c_ptr->obj[c_ptr->obj_num], &c_ptr->obj_num, buf + 4))
{
- s[4] = 0;
-
- if (4 != sscanf(buf + 4, "%d:%d:%dd%d",
- &s[0], &s[1], &s[2], &s[3]))
- {
- return (1);
- }
+ return 1;
}
- c_ptr->obj_pval[c_ptr->obj_num] = s[4];
- c_ptr->obj_tval[c_ptr->obj_num] = s[0];
- c_ptr->obj_sval[c_ptr->obj_num] = s[1];
- c_ptr->obj_dd[c_ptr->obj_num] = s[2];
- c_ptr->obj_ds[c_ptr->obj_num++] = s[3];
-
/* Next... */
continue;
}
@@ -1861,27 +1842,11 @@ errr init_player_info_txt(FILE *fp)
/* Process 'O' for "Object birth" */
if (buf[4] == 'O')
{
- int s[5];
-
- /* Scan for the values */
- if (5 != sscanf(buf + 6, "%d:%d:%d:%dd%d",
- &s[0], &s[1], &s[4], &s[2], &s[3]))
+ if (read_proto_object(&s_ptr->obj[s_ptr->obj_num], &s_ptr->obj_num, buf + 6))
{
- s[4] = 0;
-
- if (4 != sscanf(buf + 6, "%d:%d:%dd%d",
- &s[0], &s[1], &s[2], &s[3]))
- {
- return (1);
- }
+ return 1;
}
- s_ptr->obj_pval[s_ptr->obj_num] = s[4];
- s_ptr->obj_tval[s_ptr->obj_num] = s[0];
- s_ptr->obj_sval[s_ptr->obj_num] = s[1];
- s_ptr->obj_dd[s_ptr->obj_num] = s[2];
- s_ptr->obj_ds[s_ptr->obj_num++] = s[3];
-
/* Next... */
continue;
}
diff --git a/src/object_proto.hpp b/src/object_proto.hpp
new file mode 100644
index 00000000..faa0b2e8
--- /dev/null
+++ b/src/object_proto.hpp
@@ -0,0 +1,12 @@
+#pragma once
+
+#include "h-basic.h"
+
+struct object_proto
+{
+ s16b tval = 0;
+ s16b sval = 0;
+ s16b pval = 0;
+ s16b dd = 0;
+ s16b ds = 0;
+};
diff --git a/src/player_class.hpp b/src/player_class.hpp
index e3a124e6..32f6e711 100644
--- a/src/player_class.hpp
+++ b/src/player_class.hpp
@@ -3,6 +3,7 @@
#include "body.hpp"
#include "h-basic.h"
#include "object_flag_set.hpp"
+#include "object_proto.hpp"
#include "player_defs.hpp"
#include "player_race_flag_set.hpp"
#include "player_spec.hpp"
@@ -43,11 +44,7 @@ struct player_class
byte sense_heavy = 0;
byte sense_heavy_magic = 0;
- s16b obj_tval[5] { };
- s16b obj_sval[5] { };
- s16b obj_pval[5] { };
- s16b obj_dd[5] { };
- s16b obj_ds[5] { };
+ std::array<object_proto, 5> obj;
s16b obj_num = 0;
char body_parts[BODY_MAX] { }; /* To help to decide what to use when body changing */
diff --git a/src/player_race.hpp b/src/player_race.hpp
index 6e2b861d..740c6a5a 100644
--- a/src/player_race.hpp
+++ b/src/player_race.hpp
@@ -3,6 +3,7 @@
#include "h-basic.h"
#include "body.hpp"
#include "object_flag_set.hpp"
+#include "object_proto.hpp"
#include "player_defs.hpp"
#include "player_race_ability_type.hpp"
#include "player_race_flag_set.hpp"
@@ -43,11 +44,7 @@ struct player_race
struct skill_modifiers skill_modifiers;
- s16b obj_tval[5] { };
- s16b obj_sval[5] { };
- s16b obj_pval[5] { };
- s16b obj_dd[5] { };
- s16b obj_ds[5] { };
+ std::array<object_proto, 5> obj;
s16b obj_num = 0;
std::array<player_race_ability_type, 10> abilities; /* Abilitiers to be gained by level(doesnt take prereqs in account) */
diff --git a/src/player_race_mod.hpp b/src/player_race_mod.hpp
index 0472c4ee..9f8c4917 100644
--- a/src/player_race_mod.hpp
+++ b/src/player_race_mod.hpp
@@ -3,6 +3,7 @@
#include "body.hpp"
#include "h-basic.h"
#include "object_flag_set.hpp"
+#include "object_proto.hpp"
#include "player_defs.hpp"
#include "player_race_ability_type.hpp"
#include "player_race_flag_set.hpp"
@@ -47,11 +48,7 @@ struct player_race_mod
struct skill_modifiers skill_modifiers;
- s16b obj_tval[5] { };
- s16b obj_sval[5] { };
- s16b obj_pval[5] { };
- s16b obj_dd[5] { };
- s16b obj_ds[5] { };
+ std::array<object_proto, 5> obj;
s16b obj_num = 0;
std::array<player_race_ability_type, 10> abilities; /* Abilities to be gained by level; doesnt take prereqs in account */
diff --git a/src/player_spec.hpp b/src/player_spec.hpp
index 328789b6..a02103d5 100644
--- a/src/player_spec.hpp
+++ b/src/player_spec.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "h-basic.h"
+#include "object_proto.hpp"
#include "player_race_ability_type.hpp"
#include "player_race_flag_set.hpp"
#include "skill_modifiers.hpp"
@@ -17,11 +18,7 @@ struct player_spec
struct skill_modifiers skill_modifiers;
- s16b obj_tval[5] { };
- s16b obj_sval[5] { };
- s16b obj_pval[5] { };
- s16b obj_dd[5] { };
- s16b obj_ds[5] { };
+ std::array<object_proto, 5> obj;
s16b obj_num = 0;
u32b gods = 0;