From cd7be5b3001b8251545af526ee6a3ee15562c930 Mon Sep 17 00:00:00 2001 From: Bardur Arantsson Date: Mon, 23 Feb 2015 09:11:56 +0100 Subject: Rework MONSTER_EXP into a function --- src/defines.h | 1 - src/dungeon.cc | 2 +- src/externs.h | 1 + src/monster2.cc | 13 ++++++++++--- src/monster3.cc | 4 ++-- src/q_poison.cc | 2 +- src/q_rand.cc | 2 +- src/spells2.cc | 2 +- src/status.cc | 2 +- src/traps.cc | 2 +- src/wild.cc | 4 ++-- src/wizard2.cc | 2 +- 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 #include #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(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); } } -- cgit v1.2.3