summaryrefslogtreecommitdiff
path: root/src/mimic.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/mimic.cc')
-rw-r--r--src/mimic.cc163
1 files changed, 80 insertions, 83 deletions
diff --git a/src/mimic.cc b/src/mimic.cc
index edf79f4b..6ce7b180 100644
--- a/src/mimic.cc
+++ b/src/mimic.cc
@@ -1,5 +1,7 @@
#include "mimic.hpp"
+#include "game.hpp"
+#include "object_flag.hpp"
#include "player_type.hpp"
#include "skill_type.hpp"
#include "stats.hpp"
@@ -37,8 +39,8 @@ struct mimic_form_type
static s32b abomination_calc()
{
- apply_flags(TR1_SPEED + TR1_STR + TR1_INT + TR1_WIS + TR1_DEX + TR1_CON + TR1_CHR, 0, 0, 0, 0, 0, -10, 0, 0, 0, 0);
- p_ptr->xtra_f3 |= TR3_AGGRAVATE;
+ apply_flags(TR_SPEED | TR_STR | TR_INT | TR_WIS | TR_DEX | TR_CON | TR_CHR, -10, 0, 0, 0, 0);
+ p_ptr->xtra_flags |= TR_AGGRAVATE;
return 0;
}
@@ -89,23 +91,23 @@ static s32b eagle_calc()
if (p_ptr->mimic_level >= 20)
{
- p_ptr->xtra_f4 |= TR4_FLY;
- p_ptr->xtra_f3 |= TR3_SEE_INVIS;
+ p_ptr->xtra_flags |= TR_FLY;
+ p_ptr->xtra_flags |= TR_SEE_INVIS;
}
if (p_ptr->mimic_level >= 25)
{
- p_ptr->xtra_f2 |= TR2_FREE_ACT;
+ p_ptr->xtra_flags |= TR_FREE_ACT;
}
if (p_ptr->mimic_level >= 30)
{
- p_ptr->xtra_f2 |= TR2_RES_ELEC;
+ p_ptr->xtra_flags |= TR_RES_ELEC;
}
if (p_ptr->mimic_level >= 35)
{
- p_ptr->xtra_f3 |= TR3_SH_ELEC;
+ p_ptr->xtra_flags |= TR_SH_ELEC;
}
return 0;
@@ -120,27 +122,27 @@ static s32b wolf_calc()
p_ptr->pspeed = p_ptr->pspeed + 10 + (p_ptr->mimic_level / 5);
- p_ptr->xtra_f2 |= TR2_FREE_ACT;
- p_ptr->xtra_f2 |= TR2_RES_FEAR;
+ p_ptr->xtra_flags |= TR_FREE_ACT;
+ p_ptr->xtra_flags |= TR_RES_FEAR;
if (p_ptr->mimic_level >= 10)
{
- p_ptr->xtra_f2 |= TR2_RES_COLD;
+ p_ptr->xtra_flags |= TR_RES_COLD;
}
if (p_ptr->mimic_level >= 15)
{
- p_ptr->xtra_f3 |= TR3_SEE_INVIS;
+ p_ptr->xtra_flags |= TR_SEE_INVIS;
}
if (p_ptr->mimic_level >= 30)
{
- p_ptr->xtra_f2 |= TR2_RES_DARK;
+ p_ptr->xtra_flags |= TR_RES_DARK;
}
if (p_ptr->mimic_level >= 35)
{
- p_ptr->xtra_f2 |= TR2_RES_CONF;
+ p_ptr->xtra_flags |= TR_RES_CONF;
}
return 0;
@@ -157,13 +159,13 @@ static s32b spider_calc()
p_ptr->pspeed = p_ptr->pspeed + 5;
- p_ptr->xtra_f2 |= TR2_RES_POIS;
- p_ptr->xtra_f2 |= TR2_RES_FEAR;
- p_ptr->xtra_f2 |= TR2_RES_DARK;
+ p_ptr->xtra_flags |= TR_RES_POIS;
+ p_ptr->xtra_flags |= TR_RES_FEAR;
+ p_ptr->xtra_flags |= TR_RES_DARK;
if (p_ptr->mimic_level >= 40)
{
- p_ptr->xtra_f4 |= TR4_CLIMB;
+ p_ptr->xtra_flags |= TR_CLIMB;
}
return 0;
@@ -191,12 +193,12 @@ static s32b ent_calc()
p_ptr->stat_add[A_CON] += p_ptr->mimic_level / 5;
p_ptr->stat_add[A_CHR] += -7;
- p_ptr->xtra_f2 |= TR2_RES_POIS;
- p_ptr->xtra_f2 |= TR2_RES_COLD;
- p_ptr->xtra_f2 |= TR2_FREE_ACT;
- p_ptr->xtra_f3 |= TR3_REGEN;
- p_ptr->xtra_f3 |= TR3_SEE_INVIS;
- p_ptr->xtra_f2 |= TR2_SENS_FIRE;
+ p_ptr->xtra_flags |= TR_RES_POIS;
+ p_ptr->xtra_flags |= TR_RES_COLD;
+ p_ptr->xtra_flags |= TR_FREE_ACT;
+ p_ptr->xtra_flags |= TR_REGEN;
+ p_ptr->xtra_flags |= TR_SEE_INVIS;
+ p_ptr->xtra_flags |= TR_SENS_FIRE;
return 0;
}
@@ -226,14 +228,14 @@ static s32b vapour_calc()
/* But they are stealthy */
p_ptr->skill_stl = p_ptr->skill_stl + 10 + (p_ptr->mimic_level / 5);
- p_ptr->xtra_f2 |= TR2_RES_POIS;
- p_ptr->xtra_f2 |= TR2_RES_SHARDS;
- p_ptr->xtra_f2 |= TR2_IM_COLD;
- p_ptr->xtra_f2 |= TR2_FREE_ACT;
- p_ptr->xtra_f3 |= TR3_REGEN;
- p_ptr->xtra_f3 |= TR3_SEE_INVIS;
- p_ptr->xtra_f2 |= TR2_SENS_FIRE;
- p_ptr->xtra_f3 |= TR3_FEATHER;
+ p_ptr->xtra_flags |= TR_RES_POIS;
+ p_ptr->xtra_flags |= TR_RES_SHARDS;
+ p_ptr->xtra_flags |= TR_IM_COLD;
+ p_ptr->xtra_flags |= TR_FREE_ACT;
+ p_ptr->xtra_flags |= TR_REGEN;
+ p_ptr->xtra_flags |= TR_SEE_INVIS;
+ p_ptr->xtra_flags |= TR_SENS_FIRE;
+ p_ptr->xtra_flags |= TR_FEATHER;
return 0;
}
@@ -252,10 +254,10 @@ static s32b serpent_calc()
p_ptr->stat_add[A_CON] += p_ptr->mimic_level / 7;
p_ptr->stat_add[A_CHR] += -6;
- p_ptr->xtra_f2 |= TR2_RES_POIS;
+ p_ptr->xtra_flags |= TR_RES_POIS;
if (p_ptr->mimic_level >= 25)
{
- p_ptr->xtra_f2 |= TR2_FREE_ACT;
+ p_ptr->xtra_flags |= TR_FREE_ACT;
}
return 0;
@@ -279,22 +281,22 @@ static s32b mumak_calc()
if (p_ptr->mimic_level >= 10)
{
- p_ptr->xtra_f2 |= TR2_RES_FEAR;
+ p_ptr->xtra_flags |= TR_RES_FEAR;
}
if (p_ptr->mimic_level >= 25)
{
- p_ptr->xtra_f2 |= TR2_RES_CONF;
+ p_ptr->xtra_flags |= TR_RES_CONF;
}
if (p_ptr->mimic_level >= 30)
{
- p_ptr->xtra_f2 |= TR2_FREE_ACT;
+ p_ptr->xtra_flags |= TR_FREE_ACT;
}
if (p_ptr->mimic_level >= 35)
{
- p_ptr->xtra_f2 |= TR2_RES_NEXUS;
+ p_ptr->xtra_flags |= TR_RES_NEXUS;
}
return 0;
@@ -302,6 +304,8 @@ static s32b mumak_calc()
static s32b bear_calc()
{
+ auto &s_info = game->s_info;
+
p_ptr->pspeed = p_ptr->pspeed - 5 + (p_ptr->mimic_level / 5);
p_ptr->to_a = p_ptr->to_a + 5 + ((p_ptr->mimic_level * 2) / 3);
@@ -316,26 +320,26 @@ static s32b bear_calc()
if (p_ptr->mimic_level >= 10)
{
- p_ptr->xtra_f2 |= TR2_FREE_ACT;
+ p_ptr->xtra_flags |= TR_FREE_ACT;
}
if (p_ptr->mimic_level >= 20)
{
- p_ptr->xtra_f3 |= TR3_REGEN;
+ p_ptr->xtra_flags |= TR_REGEN;
}
if (p_ptr->mimic_level >= 30)
{
- p_ptr->xtra_f2 |= TR2_RES_CONF;
+ p_ptr->xtra_flags |= TR_RES_CONF;
}
if (p_ptr->mimic_level >= 35)
{
- p_ptr->xtra_f2 |= TR2_RES_NEXUS;
+ p_ptr->xtra_flags |= TR_RES_NEXUS;
}
/* activate the skill */
- s_info[SKILL_BEAR].hidden = FALSE;
+ s_info[SKILL_BEAR].hidden = false;
return 0;
}
@@ -349,17 +353,17 @@ static s32b balrog_calc()
p_ptr->stat_add[A_CON] += 5 + p_ptr->mimic_level / 5;
p_ptr->stat_add[A_CHR] += - ( 5 + p_ptr->mimic_level / 10);
- p_ptr->xtra_f2 |= TR2_IM_ACID;
- p_ptr->xtra_f2 |= TR2_IM_FIRE;
- p_ptr->xtra_f2 |= TR2_IM_ELEC;
- p_ptr->xtra_f2 |= TR2_RES_DARK;
- p_ptr->xtra_f2 |= TR2_RES_CHAOS;
- p_ptr->xtra_f2 |= TR2_RES_POIS;
- p_ptr->xtra_f2 |= TR2_HOLD_LIFE;
- p_ptr->xtra_f3 |= TR3_FEATHER;
- p_ptr->xtra_f3 |= TR3_REGEN;
- p_ptr->xtra_f3 |= TR3_SH_FIRE;
- p_ptr->xtra_f3 |= TR3_LITE1;
+ p_ptr->xtra_flags |= TR_IM_ACID;
+ p_ptr->xtra_flags |= TR_IM_FIRE;
+ p_ptr->xtra_flags |= TR_IM_ELEC;
+ p_ptr->xtra_flags |= TR_RES_DARK;
+ p_ptr->xtra_flags |= TR_RES_CHAOS;
+ p_ptr->xtra_flags |= TR_RES_POIS;
+ p_ptr->xtra_flags |= TR_HOLD_LIFE;
+ p_ptr->xtra_flags |= TR_FEATHER;
+ p_ptr->xtra_flags |= TR_REGEN;
+ p_ptr->xtra_flags |= TR_SH_FIRE;
+ p_ptr->xtra_flags |= TR_LITE1;
return 1; /* Adds a blow */
}
@@ -373,17 +377,17 @@ static s32b maia_calc()
p_ptr->stat_add[A_CON] += 5 + p_ptr->mimic_level / 5;
p_ptr->stat_add[A_CHR] += 5 + p_ptr->mimic_level / 5;
- p_ptr->xtra_f2 |= TR2_IM_FIRE;
- p_ptr->xtra_f2 |= TR2_IM_ELEC;
- p_ptr->xtra_f2 |= TR2_IM_ACID;
- p_ptr->xtra_f2 |= TR2_IM_COLD;
- p_ptr->xtra_f2 |= TR2_RES_POIS;
- p_ptr->xtra_f2 |= TR2_RES_LITE;
- p_ptr->xtra_f2 |= TR2_RES_DARK;
- p_ptr->xtra_f2 |= TR2_RES_CHAOS;
- p_ptr->xtra_f2 |= TR2_HOLD_LIFE;
- p_ptr->xtra_f3 |= TR3_FEATHER;
- p_ptr->xtra_f3 |= TR3_REGEN;
+ p_ptr->xtra_flags |= TR_IM_FIRE;
+ p_ptr->xtra_flags |= TR_IM_ELEC;
+ p_ptr->xtra_flags |= TR_IM_ACID;
+ p_ptr->xtra_flags |= TR_IM_COLD;
+ p_ptr->xtra_flags |= TR_RES_POIS;
+ p_ptr->xtra_flags |= TR_RES_LITE;
+ p_ptr->xtra_flags |= TR_RES_DARK;
+ p_ptr->xtra_flags |= TR_RES_CHAOS;
+ p_ptr->xtra_flags |= TR_HOLD_LIFE;
+ p_ptr->xtra_flags |= TR_FEATHER;
+ p_ptr->xtra_flags |= TR_REGEN;
return 2; /* Add two blows */
}
@@ -394,10 +398,10 @@ static s32b fire_elemental_calc()
p_ptr->stat_add[A_DEX] += 5 + (p_ptr->mimic_level / 5);
p_ptr->stat_add[A_WIS] += -5 - (p_ptr->mimic_level / 5);
- p_ptr->xtra_f2 |= TR2_IM_FIRE;
- p_ptr->xtra_f2 |= TR2_RES_POIS;
- p_ptr->xtra_f3 |= TR3_SH_FIRE;
- p_ptr->xtra_f3 |= TR3_LITE1;
+ p_ptr->xtra_flags |= TR_IM_FIRE;
+ p_ptr->xtra_flags |= TR_RES_POIS;
+ p_ptr->xtra_flags |= TR_SH_FIRE;
+ p_ptr->xtra_flags |= TR_LITE1;
return 0;
}
@@ -588,11 +592,9 @@ static mimic_form_type mimic_forms[MIMIC_FORMS_MAX] =
/*
* Is the mimicry form enabled for the current module?
*/
-static bool_ mimic_form_enabled(mimic_form_type *f)
+static bool mimic_form_enabled(mimic_form_type const *f)
{
- int i;
-
- for (i = 0; f->modules[i] >= 0; i++)
+ for (int i = 0; f->modules[i] >= 0; i++)
{
if (f->modules[i] == game_module_idx)
{
@@ -618,11 +620,9 @@ static mimic_form_type *get_mimic_form(int mf_idx)
*/
s16b resolve_mimic_name(cptr name)
{
- s16b i;
-
- for (i = 0; i < MIMIC_FORMS_MAX; i++)
+ for (s16b i = 0; i < MIMIC_FORMS_MAX; i++)
{
- mimic_form_type *mf_ptr = get_mimic_form(i);
+ auto const mf_ptr = get_mimic_form(i);
if (mimic_form_enabled(mf_ptr) && streq(mf_ptr->name, name))
{
return i;
@@ -641,13 +641,10 @@ s16b find_random_mimic_shape(byte level, bool_ limit)
while (tries > 0)
{
- int mf_idx = 0;
- mimic_form_type *mf_ptr = NULL;
-
tries = tries - 1;
- mf_idx = rand_int(MIMIC_FORMS_MAX);
- mf_ptr = get_mimic_form(mf_idx);
+ int mf_idx = rand_int(MIMIC_FORMS_MAX);
+ auto const mf_ptr = get_mimic_form(mf_idx);
if (mimic_form_enabled(mf_ptr))
{
@@ -695,7 +692,7 @@ byte get_mimic_level(s16b mf_idx)
*/
s32b get_mimic_random_duration(s16b mf_idx)
{
- mimic_form_type *mf_ptr = get_mimic_form(mf_idx);
+ auto const mf_ptr = get_mimic_form(mf_idx);
return rand_range(mf_ptr->duration.min, mf_ptr->duration.max);
}
@@ -704,7 +701,7 @@ s32b get_mimic_random_duration(s16b mf_idx)
*/
byte calc_mimic()
{
- mimic_form_type *mf_ptr = get_mimic_form(p_ptr->mimic_form);
+ auto const mf_ptr = get_mimic_form(p_ptr->mimic_form);
if (mf_ptr->calc != NULL)
{
return mf_ptr->calc();