summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmd7.c101
-rw-r--r--src/externs.h1
-rw-r--r--src/lua_bind.c36
3 files changed, 37 insertions, 101 deletions
diff --git a/src/cmd7.c b/src/cmd7.c
index 73f79333..ee934b88 100644
--- a/src/cmd7.c
+++ b/src/cmd7.c
@@ -234,15 +234,8 @@ bool_ get_magic_power(int *sn, magic_power *powers, int max_powers,
/* Extract the minimum failure rate */
minfail = adj_mag_fail[p_ptr->stat_ind[cast_stat]];
- /* Minimum failure rate */
- if (chance < minfail) chance = minfail;
-
- /* Stunning makes spells harder */
- if (p_ptr->stun > 50) chance += 25;
- else if (p_ptr->stun) chance += 15;
-
- /* Always a 5 percent chance of working */
- if (chance > 95) chance = 95;
+ /* Failure rate */
+ chance = clamp_failure_chance(chance, minfail);
/* Get info */
power_info(comment, i);
@@ -404,15 +397,8 @@ void do_cmd_mindcraft(void)
/* Extract the minimum failure rate */
minfail = adj_mag_fail[p_ptr->stat_ind[A_WIS]];
- /* Minimum failure rate */
- if (chance < minfail) chance = minfail;
-
- /* Stunning makes spells harder */
- if (p_ptr->stun > 50) chance += 25;
- else if (p_ptr->stun) chance += 15;
-
- /* Always a 5 percent chance of working */
- if (chance > 95) chance = 95;
+ /* Failure rate */
+ chance = clamp_failure_chance(chance, minfail);
/* Failed spell */
if (rand_int(100) < chance)
@@ -755,17 +741,8 @@ static int get_mimic_chance(int mimic)
chance -= get_skill_scale(SKILL_MIMICRY, 150);
chance -= 3 * adj_mag_stat[p_ptr->stat_ind[A_DEX]];
- if (chance < 2) chance = 2;
-
- /* Stunning makes spells harder */
- if (p_ptr->stun > 50) chance += 25;
- else if (p_ptr->stun) chance += 15;
-
- /* Always a 5 percent chance of working */
- if (chance > 95) chance = 95;
-
/* Return the chance */
- return (chance);
+ return clamp_failure_chance(chance, 2);
}
@@ -4363,18 +4340,8 @@ int spell_chance_random(random_spell* rspell)
/* Extract the minimum failure rate */
minfail = adj_mag_fail[p_ptr->stat_ind[A_INT]];
- /* Minimum failure rate */
- if (chance < minfail) chance = minfail;
-
- /* Stunning makes spells harder */
- if (p_ptr->stun > 50) chance += 25;
- else if (p_ptr->stun) chance += 15;
-
- /* Always a 5 percent chance of working */
- if (chance > 95) chance = 95;
-
- /* Return the chance */
- return (chance);
+ /* Failure rate */
+ return clamp_failure_chance(chance, minfail);
}
@@ -5357,15 +5324,8 @@ void do_cmd_necromancer(void)
/* Extract the minimum failure rate */
minfail = adj_mag_fail[p_ptr->stat_ind[A_CON]];
- /* Minimum failure rate */
- if (chance < minfail) chance = minfail;
-
- /* Stunning makes spells harder */
- if (p_ptr->stun > 50) chance += 25;
- else if (p_ptr->stun) chance += 15;
-
- /* Always a 5 percent chance of working */
- if (chance > 95) chance = 95;
+ /* Failure rate */
+ chance = clamp_failure_chance(chance, minfail);
/* Failed spell */
if (rand_int(100) < chance)
@@ -5733,18 +5693,8 @@ int spell_chance_rune(rune_spell* spell)
/* Extract the minimum failure rate */
minfail = adj_mag_fail[p_ptr->stat_ind[A_DEX]];
- /* Minimum failure rate */
- if (chance < minfail) chance = minfail;
-
- /* Stunning makes spells harder */
- if (p_ptr->stun > 50) chance += 25;
- else if (p_ptr->stun) chance += 15;
-
- /* Always a 5 percent chance of working */
- if (chance > 95) chance = 95;
-
/* Return the chance */
- return (chance);
+ return clamp_failure_chance(chance, minfail);
}
@@ -7314,15 +7264,8 @@ void do_cmd_symbiotic(void)
/* Extract the minimum failure rate */
minfail = adj_mag_fail[p_ptr->stat_ind[A_INT]];
- /* Minimum failure rate */
- if (chance < minfail) chance = minfail;
-
- /* Stunning makes spells harder */
- if (p_ptr->stun > 50) chance += 25;
- else if (p_ptr->stun) chance += 15;
-
- /* Always a 5 percent chance of working */
- if (chance > 95) chance = 95;
+ /* Failure rate */
+ chance = clamp_failure_chance(chance, minfail);
/* Failed spell */
if (rand_int(100) < chance)
@@ -7687,3 +7630,23 @@ void do_cmd_create_boulder()
energy_use = 100;
}
}
+
+/*
+ * Clamp failure chance
+ */
+extern int clamp_failure_chance(int chance, int minfail)
+{
+ if (minfail < 0) minfail = 0;
+
+ /* Minimum failure rate */
+ if (chance < minfail) chance = minfail;
+
+ /* Stunning makes spells harder */
+ if (p_ptr->stun > 50) chance += 25;
+ else if (p_ptr->stun) chance += 15;
+
+ /* Always a 5 percent chance of working */
+ if (chance > 95) chance = 95;
+
+ return chance;
+}
diff --git a/src/externs.h b/src/externs.h
index 08ef2d38..dba293d1 100644
--- a/src/externs.h
+++ b/src/externs.h
@@ -871,6 +871,7 @@ extern void do_cmd_unbeliever(void);
extern void do_cmd_runecrafter(void);
extern void do_cmd_symbiotic(void);
extern s32b sroot(s32b n);
+extern int clamp_failure_chance(int chance, int minfail);
/* dungeon.c */
extern byte value_check_aux1(object_type *o_ptr);
diff --git a/src/lua_bind.c b/src/lua_bind.c
index 721ffe30..3a901a7c 100644
--- a/src/lua_bind.c
+++ b/src/lua_bind.c
@@ -44,15 +44,8 @@ bool_ lua_spell_success(magic_power *spell, int stat, char *oups_fct)
/* Extract the minimum failure rate */
minfail = adj_mag_fail[p_ptr->stat_ind[stat]];
- /* Minimum failure rate */
- if (chance < minfail) chance = minfail;
-
- /* Stunning makes spells harder */
- if (p_ptr->stun > 50) chance += 25;
- else if (p_ptr->stun) chance += 15;
-
- /* Always a 5 percent chance of working */
- if (chance > 95) chance = 95;
+ /* Failure rate */
+ chance = clamp_failure_chance(chance, minfail);
/* Failed spell */
if (rand_int(100) < chance)
@@ -300,18 +293,8 @@ s32b lua_spell_chance(s32b chance, int level, int skill_level, int mana, int cur
/* Hack -- Priest prayer penalty for "edged" weapons -DGK */
if ((forbid_non_blessed()) && (p_ptr->icky_wield)) chance += 25;
- /* Minimum failure rate */
- if (chance < minfail) chance = minfail;
-
- /* Stunning makes spells harder */
- if (p_ptr->stun > 50) chance += 25;
- else if (p_ptr->stun) chance += 15;
-
- /* Always a 5 percent chance of working */
- if (chance > 95) chance = 95;
-
/* Return the chance */
- return (chance);
+ return clamp_failure_chance(chance, minfail);
}
s32b lua_spell_device_chance(s32b chance, int level, int base_level)
@@ -323,20 +306,9 @@ s32b lua_spell_device_chance(s32b chance, int level, int base_level)
/* Extract the minimum failure rate */
minfail = 15 - get_skill_scale(SKILL_DEVICE, 25);
- if (minfail < 0) minfail = 0;
-
- /* Minimum failure rate */
- if (chance < minfail) chance = minfail;
-
- /* Stunning makes spells harder */
- if (p_ptr->stun > 50) chance += 25;
- else if (p_ptr->stun) chance += 15;
-
- /* Always a 5 percent chance of working */
- if (chance > 95) chance = 95;
/* Return the chance */
- return (chance);
+ return clamp_failure_chance(chance, minfail);
}
/* Cave */