summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2015-09-14 17:30:27 +0200
committerBardur Arantsson <bardur@scientician.net>2015-09-14 17:30:27 +0200
commit87544c0599ec69df0af560dbfe7f58482d2a0bf5 (patch)
tree501ace7c8a913a23e74debda1c6026bad20d6364
parentb7ceceb10db03a8d59de5de39a7cd6465409c35c (diff)
Replace hack_apply_magic_power with optional parameter
-rw-r--r--src/cmd7.cc9
-rw-r--r--src/object2.cc13
-rw-r--r--src/object2.hpp5
-rw-r--r--src/traps.cc6
-rw-r--r--src/wizard1.cc3
-rw-r--r--src/wizard2.cc3
6 files changed, 14 insertions, 25 deletions
diff --git a/src/cmd7.cc b/src/cmd7.cc
index 1bf6d48d..acf7e73b 100644
--- a/src/cmd7.cc
+++ b/src/cmd7.cc
@@ -2778,8 +2778,7 @@ static void alchemist_display_recipe(int tval, int sval, int ego)
o_ptr = &forge;
object_prep(o_ptr, lookup_kind(tval, sval));
o_ptr->name2 = ego;
- hack_apply_magic_power = -99;
- apply_magic(o_ptr, get_skill(SKILL_ALCHEMY) * 2, FALSE, FALSE, FALSE);
+ apply_magic(o_ptr, get_skill(SKILL_ALCHEMY) * 2, FALSE, FALSE, FALSE, boost::make_optional(0));
object_aware(o_ptr);
object_known(o_ptr);
/* the 0 mode means only the text, leaving off any numbers */
@@ -3843,8 +3842,7 @@ void do_cmd_alchemist(void)
o_ptr = &forge;
object_wipe(o_ptr);
object_prep(o_ptr, lookup_kind(tval, sval));
- hack_apply_magic_power = -99;
- apply_magic(o_ptr, askill * 2, FALSE, FALSE, FALSE);
+ apply_magic(o_ptr, askill * 2, FALSE, FALSE, FALSE, boost::make_optional(0));
if ( o_ptr->tval == TV_WAND || o_ptr->tval == TV_STAFF)
o_ptr->pval = 0;
value = object_value_real(o_ptr);
@@ -4147,8 +4145,7 @@ void do_cmd_alchemist(void)
s_ptr->number = 1;
/* Force creation of non ego non cursed */
- hack_apply_magic_power = -99;
- apply_magic(s_ptr, 0, FALSE, FALSE, FALSE);
+ apply_magic(s_ptr, 0, FALSE, FALSE, FALSE, boost::make_optional(0));
/* Hack -- remove possible curse */
if (cursed_p(s_ptr))
diff --git a/src/object2.cc b/src/object2.cc
index d437d24d..b0e33365 100644
--- a/src/object2.cc
+++ b/src/object2.cc
@@ -3884,8 +3884,7 @@ void add_random_ego_flag(object_type *o_ptr, int fego, bool_ *limit_blows)
* "good" and "great" arguments are false. As a total hack, if "great" is
* true, then the item gets 3 extra "attempts" to become an artifact.
*/
-int hack_apply_magic_power = 0;
-void apply_magic(object_type *o_ptr, int lev, bool_ okay, bool_ good, bool_ great)
+void apply_magic(object_type *o_ptr, int lev, bool_ okay, bool_ good, bool_ great, boost::optional<int> force_power)
{
int i, rolls, f1, f2, power;
object_kind *k_ptr = &k_info[o_ptr->k_idx];
@@ -3986,15 +3985,11 @@ void apply_magic(object_type *o_ptr, int lev, bool_ okay, bool_ good, bool_ grea
if (magik(f2)) power = -2;
}
- /* Mega hack */
- if (hack_apply_magic_power)
+ /* Override power with parameter? */
+ if (auto power_override = force_power)
{
- if (hack_apply_magic_power == -99)
- power = 0;
- else
- power = hack_apply_magic_power;
+ power = *power_override;
}
- hack_apply_magic_power = 0;
/* Assume no rolls */
rolls = 0;
diff --git a/src/object2.hpp b/src/object2.hpp
index 6d5d7160..26d07b25 100644
--- a/src/object2.hpp
+++ b/src/object2.hpp
@@ -4,6 +4,8 @@
#include "object_type_fwd.hpp"
#include "obj_theme_fwd.hpp"
+#include <boost/optional.hpp>
+
typedef enum { OPTIMIZE, NO_OPTIMIZE } optimize_flag;
typedef enum { DESCRIBE, NO_DESCRIBE } describe_flag;
@@ -49,8 +51,7 @@ extern s16b lookup_kind(int tval, int sval);
extern void object_wipe(object_type *o_ptr);
extern void object_prep(object_type *o_ptr, int k_idx);
extern void object_copy(object_type *o_ptr, object_type *j_ptr);
-extern int hack_apply_magic_power;
-extern void apply_magic(object_type *o_ptr, int lev, bool_ okay, bool_ good, bool_ great);
+extern void apply_magic(object_type *o_ptr, int lev, bool_ okay, bool_ good, bool_ great, boost::optional<int> force_power = boost::none);
extern bool_ make_object(object_type *j_ptr, bool_ good, bool_ great, obj_theme const &theme);
extern void place_object(int y, int x, bool_ good, bool_ great, int where);
extern bool_ make_gold(object_type *j_ptr);
diff --git a/src/traps.cc b/src/traps.cc
index b336a770..bc4ef99f 100644
--- a/src/traps.cc
+++ b/src/traps.cc
@@ -1382,8 +1382,7 @@ bool_ player_activate_trap_type(s16b y, s16b x, object_type *i_ptr, s16b item)
/* Create a Wand of Nothing */
object_prep(j_ptr, lookup_kind(TV_WAND, SV_WAND_NOTHING));
- hack_apply_magic_power = -99;
- apply_magic(j_ptr, 0, FALSE, FALSE, FALSE);
+ apply_magic(j_ptr, 0, FALSE, FALSE, FALSE, boost::make_optional(0));
j_ptr->ident &= ~IDENT_KNOWN;
p_ptr->notice |= (PN_COMBINE | PN_REORDER);
}
@@ -1393,8 +1392,7 @@ bool_ player_activate_trap_type(s16b y, s16b x, object_type *i_ptr, s16b item)
/* Create a Staff of Nothing */
object_prep(j_ptr, lookup_kind(TV_STAFF, SV_STAFF_NOTHING));
- hack_apply_magic_power = -99;
- apply_magic(j_ptr, 0, FALSE, FALSE, FALSE);
+ apply_magic(j_ptr, 0, FALSE, FALSE, FALSE, boost::make_optional(0));
j_ptr->ident &= ~IDENT_KNOWN;
p_ptr->notice |= (PN_COMBINE | PN_REORDER);
}
diff --git a/src/wizard1.cc b/src/wizard1.cc
index 7e139808..476def67 100644
--- a/src/wizard1.cc
+++ b/src/wizard1.cc
@@ -295,8 +295,7 @@ static void kind_info(char *buf, char *dam, char *wgt, int *lev, s32b *val, int
if ((k_ptr->tval == TV_WAND) || (k_ptr->tval == TV_STAFF))
{
- hack_apply_magic_power = -99;
- apply_magic(q_ptr, 0, FALSE, FALSE, FALSE);
+ apply_magic(q_ptr, 0, FALSE, FALSE, FALSE, boost::make_optional(0));
}
/* Level */
diff --git a/src/wizard2.cc b/src/wizard2.cc
index c4f5436e..7bce50c7 100644
--- a/src/wizard2.cc
+++ b/src/wizard2.cc
@@ -786,8 +786,7 @@ static void wiz_reroll_item(object_type *o_ptr)
else if (ch == 'b' || ch == 'B')
{
object_prep(q_ptr, o_ptr->k_idx);
- hack_apply_magic_power = -2;
- apply_magic(q_ptr, dun_level, FALSE, FALSE, FALSE);
+ apply_magic(q_ptr, dun_level, FALSE, FALSE, FALSE, boost::make_optional(-2));
}
/* Apply normal magic, but first clear object */