summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2015-02-23 09:11:56 +0100
committerBardur Arantsson <bardur@scientician.net>2015-02-23 09:11:56 +0100
commitcd7be5b3001b8251545af526ee6a3ee15562c930 (patch)
tree88e23b156380c6f738e3e40cc49017c91ffdb1be
parenta07a80ac3cf4cd61a91f25092342142cc68894b1 (diff)
Rework MONSTER_EXP into a function
-rw-r--r--src/defines.h1
-rw-r--r--src/dungeon.cc2
-rw-r--r--src/externs.h1
-rw-r--r--src/monster2.cc13
-rw-r--r--src/monster3.cc4
-rw-r--r--src/q_poison.cc2
-rw-r--r--src/q_rand.cc2
-rw-r--r--src/spells2.cc2
-rw-r--r--src/status.cc2
-rw-r--r--src/traps.cc2
-rw-r--r--src/wild.cc4
-rw-r--r--src/wizard2.cc2
12 files changed, 22 insertions, 15 deletions
diff --git a/src/defines.h b/src/defines.h
index 81ae7833..c61d603d 100644
--- a/src/defines.h
+++ b/src/defines.h
@@ -3068,7 +3068,6 @@
/*** Monster flag values (hard-coded) ***/
#define MONSTER_LEVEL_MAX 150
-#define MONSTER_EXP(level) ((((level) > MONSTER_LEVEL_MAX)?MONSTER_LEVEL_MAX:(level)) * (((level) > MONSTER_LEVEL_MAX)?MONSTER_LEVEL_MAX:(level)) * (((level) > MONSTER_LEVEL_MAX)?MONSTER_LEVEL_MAX:(level)) * 6)
/*
* New monster race bit flags
diff --git a/src/dungeon.cc b/src/dungeon.cc
index 20b5684f..7fd5e7e9 100644
--- a/src/dungeon.cc
+++ b/src/dungeon.cc
@@ -1546,7 +1546,7 @@ static void process_world(void)
{
monster_type *m_ptr = &m_list[m_idx];
- m_ptr->exp = MONSTER_EXP(p_ptr->lev * 2);
+ m_ptr->exp = monster_exp(p_ptr->lev * 2);
monster_check_experience(m_idx, TRUE);
}
}
diff --git a/src/externs.h b/src/externs.h
index ee7bd9f8..b13323ce 100644
--- a/src/externs.h
+++ b/src/externs.h
@@ -934,6 +934,7 @@ extern void display_roff(int r_idx, int ego);
extern void monster_description_out(int r_idx, int ego);
/* monster2.c */
+extern s32b monster_exp(s16b level);
extern void monster_set_level(int m_idx, int level);
extern s32b modify_aux(s32b a, s32b b, char mod);
extern void monster_msg(cptr fmt, ...);
diff --git a/src/monster2.cc b/src/monster2.cc
index 6cb9a19a..21cb790a 100644
--- a/src/monster2.cc
+++ b/src/monster2.cc
@@ -13,12 +13,19 @@
#include "angband.h"
#include "hooks.h"
+#include <algorithm>
#include <string>
#define MAX_HORROR 20
#define MAX_FUNNY 22
#define MAX_COMMENT 5
+s32b monster_exp(s16b level)
+{
+ s32b capped_level = std::min(level, static_cast<s16b>(MONSTER_LEVEL_MAX));
+ return (capped_level * capped_level * capped_level * 6);
+}
+
/* Monster gain a few levels ? */
void monster_check_experience(int m_idx, bool_ silent)
{
@@ -31,7 +38,7 @@ void monster_check_experience(int m_idx, bool_ silent)
/* Gain levels while possible */
while ((m_ptr->level < MONSTER_LEVEL_MAX) &&
- (m_ptr->exp >= (u32b)(MONSTER_EXP(m_ptr->level + 1))))
+ (m_ptr->exp >= monster_exp(m_ptr->level + 1)))
{
/* Gain a level */
m_ptr->level++;
@@ -98,7 +105,7 @@ void monster_set_level(int m_idx, int level)
if (m_ptr->level < level)
{
- m_ptr->exp = MONSTER_EXP(level);
+ m_ptr->exp = monster_exp(level);
monster_check_experience(m_idx, TRUE);
}
}
@@ -2525,7 +2532,7 @@ s16b place_monster_one(int y, int x, int r_idx, int ego, bool_ slp, int status)
m_ptr->ac = r_ptr->ac;
m_ptr->level = r_ptr->level;
m_ptr->speed = r_ptr->speed;
- m_ptr->exp = MONSTER_EXP(m_ptr->level);
+ m_ptr->exp = monster_exp(m_ptr->level);
/* Extract the monster base speed */
m_ptr->mspeed = m_ptr->speed;
diff --git a/src/monster3.cc b/src/monster3.cc
index a2b5fb38..c4e45d39 100644
--- a/src/monster3.cc
+++ b/src/monster3.cc
@@ -189,7 +189,7 @@ bool_ ai_possessor(int m_idx, int o_idx)
m_ptr->ac = r_ptr->ac;
m_ptr->level = r_ptr->level;
m_ptr->speed = r_ptr->speed;
- m_ptr->exp = MONSTER_EXP(m_ptr->level);
+ m_ptr->exp = monster_exp(m_ptr->level);
/* Extract the monster base speed */
m_ptr->mspeed = m_ptr->speed;
@@ -264,7 +264,7 @@ void ai_deincarnate(int m_idx)
m_ptr->ac = r_ptr->ac;
m_ptr->level = r_ptr->level;
m_ptr->speed = r_ptr->speed;
- m_ptr->exp = MONSTER_EXP(m_ptr->level);
+ m_ptr->exp = monster_exp(m_ptr->level);
/* Extract the monster base speed */
m_ptr->mspeed = m_ptr->speed;
diff --git a/src/q_poison.cc b/src/q_poison.cc
index 0bbe6f8b..29993fff 100644
--- a/src/q_poison.cc
+++ b/src/q_poison.cc
@@ -87,7 +87,7 @@ static bool_ quest_poison_gen_hook(void *, void *, void *)
if (m_ptr->level < p_ptr->lev)
{
- m_ptr->exp = MONSTER_EXP(m_ptr->level + randint(p_ptr->lev - m_ptr->level));
+ m_ptr->exp = monster_exp(m_ptr->level + randint(p_ptr->lev - m_ptr->level));
monster_check_experience(m_idx, TRUE);
}
}
diff --git a/src/q_rand.cc b/src/q_rand.cc
index 0fa89f30..4dabeacc 100644
--- a/src/q_rand.cc
+++ b/src/q_rand.cc
@@ -355,7 +355,7 @@ static void hero_death(s32b m_idx, s32b r_idx)
m_allow_special[test_monster_name("Adventurer")] = FALSE;
if (m_idx)
{
- m_list[m_idx].exp = MONSTER_EXP(1 + (dun_level * 3 / 2));
+ m_list[m_idx].exp = monster_exp(1 + (dun_level * 3 / 2));
m_list[m_idx].status = MSTATUS_COMPANION;
monster_check_experience(m_idx, TRUE);
}
diff --git a/src/spells2.cc b/src/spells2.cc
index 0bb0a724..679b7b14 100644
--- a/src/spells2.cc
+++ b/src/spells2.cc
@@ -5331,7 +5331,7 @@ void do_probe(int m_idx)
sprintf(t_name, "nothing");
msg_format("%^s target is %s.", m_name, t_name);
- msg_format("%^s has %ld exp and needs %ld.", m_name, m_ptr->exp, MONSTER_EXP(m_ptr->level + 1));
+ msg_format("%^s has %ld exp and needs %d.", m_name, m_ptr->exp, (int) monster_exp(m_ptr->level + 1));
}
/* Learn all of the non-spell, non-treasure flags */
diff --git a/src/status.cc b/src/status.cc
index dc0a1cac..460a77ed 100644
--- a/src/status.cc
+++ b/src/status.cc
@@ -741,7 +741,7 @@ static void status_companion(void)
fprintf(fff, "#####BCompanion: %s\n", m_name);
fprintf(fff, " Lev/Exp : [[[[[G%d / %ld]\n", m_ptr->level, (long int) m_ptr->exp);
- if (m_ptr->level < MONSTER_LEVEL_MAX) fprintf(fff, " Next lvl: [[[[[G%ld]\n", (long int) MONSTER_EXP((s32b)m_ptr->level + 1));
+ if (m_ptr->level < MONSTER_LEVEL_MAX) fprintf(fff, " Next lvl: [[[[[G%ld]\n", (long int) monster_exp(m_ptr->level + 1));
else fprintf(fff, " Next lvl: [[[[[G****]\n");
fprintf(fff, " HP : [[[[[G%ld / %ld]\n", (long int) m_ptr->hp, (long int) m_ptr->maxhp);
diff --git a/src/traps.cc b/src/traps.cc
index 716e8bd6..5222fcd1 100644
--- a/src/traps.cc
+++ b/src/traps.cc
@@ -2622,7 +2622,7 @@ bool_ mon_hit_trap_aux_potion(int m_idx, object_type *o_ptr)
case SV_POTION_EXPERIENCE:
if (m_ptr->level < MONSTER_LEVEL_MAX)
{
- m_ptr->exp = MONSTER_EXP(m_ptr->level + 1);
+ m_ptr->exp = monster_exp(m_ptr->level + 1);
monster_check_experience(m_idx, FALSE);
}
return (FALSE);
diff --git a/src/wild.cc b/src/wild.cc
index a44fa4d5..35d526d9 100644
--- a/src/wild.cc
+++ b/src/wild.cc
@@ -1030,7 +1030,7 @@ static void town_gen_hack(int t_idx, int qy, int qx)
monster_type *m_ptr = &m_list[m_idx];
if (m_ptr->level < (dun_level / 2))
{
- m_ptr->exp = MONSTER_EXP(m_ptr->level + (dun_level / 2) + randint(dun_level / 2));
+ m_ptr->exp = monster_exp(m_ptr->level + (dun_level / 2) + randint(dun_level / 2));
monster_check_experience(m_idx, TRUE);
}
}
@@ -1158,7 +1158,7 @@ static void town_gen_circle(int t_idx, int qy, int qx)
monster_type *m_ptr = &m_list[m_idx];
if (m_ptr->level < (dun_level / 2))
{
- m_ptr->exp = MONSTER_EXP(m_ptr->level + (dun_level / 2) + randint(dun_level / 2));
+ m_ptr->exp = monster_exp(m_ptr->level + (dun_level / 2) + randint(dun_level / 2));
monster_check_experience(m_idx, TRUE);
}
}
diff --git a/src/wizard2.cc b/src/wizard2.cc
index 94594e3a..a052fb5d 100644
--- a/src/wizard2.cc
+++ b/src/wizard2.cc
@@ -27,7 +27,7 @@ void wiz_inc_monster_level(int level)
{
m_ptr = &m_list[cave[jj][ii].m_idx];
- m_ptr->exp = MONSTER_EXP(m_ptr->level + level);
+ m_ptr->exp = monster_exp(m_ptr->level + level);
monster_check_experience(cave[jj][ii].m_idx, FALSE);
}
}