summaryrefslogtreecommitdiff
path: root/src/cmd5.cc
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2016-03-10 18:41:54 +0100
committerBardur Arantsson <bardur@scientician.net>2016-03-10 19:02:23 +0100
commit018bfc6f736dd95dbf3315e5a2ba71204555ffdc (patch)
tree5f1bd57c37434ffbf69be3c8fafb416a0154bc1a /src/cmd5.cc
parent4632374161221b21423b2cf5c88f3bc4e7d7afe6 (diff)
Refactor use_symbiotic_power() to use std::vector
Diffstat (limited to 'src/cmd5.cc')
-rw-r--r--src/cmd5.cc76
1 files changed, 44 insertions, 32 deletions
diff --git a/src/cmd5.cc b/src/cmd5.cc
index 9870f116..9ca22adf 100644
--- a/src/cmd5.cc
+++ b/src/cmd5.cc
@@ -616,68 +616,80 @@ cptr symbiote_name(bool_ capitalize)
}
/*
- * Use a power of the monster in symbiosis
+ * Extract powers
*/
-int use_symbiotic_power(int r_idx, bool_ great, bool_ only_number, bool_ no_cost)
+std::vector<int> extract_monster_powers(monster_race const *r_ptr, bool great)
{
- int power = -1;
-
- int num = 0, dir = 0 , i;
-
- int powers[96];
-
- bool_ flag;
-
- int ask, plev = p_ptr->lev;
-
- char choice;
-
- char out_val[160];
-
- monster_race *r_ptr = &r_info[r_idx];
-
- int rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
-
- int x = p_ptr->px, y = p_ptr->py, k;
-
- int rad;
-
- int label;
-
+ std::vector<int> powers;
+ powers.reserve(MONSTER_POWERS_MAX);
/* List the monster powers -- RF4_* */
- for (i = 0; i < 32; i++)
+ for (std::size_t i = 0; i < 32; i++)
{
if (r_ptr->flags4 & BIT(i))
{
if (monster_powers[i].great && (!great)) continue;
if (!monster_powers[i].power) continue;
- powers[num++] = i;
+ powers.push_back(i);
}
}
/* List the monster powers -- RF5_* */
- for (i = 0; i < 32; i++)
+ for (std::size_t i = 0; i < 32; i++)
{
if (r_ptr->flags5 & BIT(i))
{
if (monster_powers[i + 32].great && (!great)) continue;
if (!monster_powers[i + 32].power) continue;
- powers[num++] = i + 32;
+ powers.push_back(i + 32);
}
}
/* List the monster powers -- RF6_* */
- for (i = 0; i < 32; i++)
+ for (std::size_t i = 0; i < 32; i++)
{
if (r_ptr->flags6 & BIT(i))
{
if (monster_powers[i + 64].great && (!great)) continue;
if (!monster_powers[i + 64].power) continue;
- powers[num++] = i + 64;
+ powers.push_back(i + 64);
}
}
+ return powers;
+}
+
+/*
+ * Use a power of the monster in symbiosis
+ */
+int use_symbiotic_power(int r_idx, bool_ great, bool_ only_number, bool_ no_cost)
+{
+ int power = -1;
+
+ int dir = 0 , i;
+
+ bool_ flag;
+
+ int ask, plev = p_ptr->lev;
+
+ char choice;
+
+ char out_val[160];
+
+ monster_race *r_ptr = &r_info[r_idx];
+
+ int const rlev = ((r_ptr->level >= 1) ? r_ptr->level : 1);
+
+ int x = p_ptr->px, y = p_ptr->py, k;
+
+ int rad;
+
+ int label;
+
+ /* Extract available monster powers */
+ std::vector<int> powers = extract_monster_powers(r_ptr, great);
+ int const num = powers.size(); // Avoid signed/unsigned warnings
+
if (!num)
{
msg_print("You have no powers you can use.");