summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2012-03-06 07:36:20 +0100
committerBardur Arantsson <bardur@scientician.net>2012-03-29 20:41:39 +0200
commit11188a21abde2b67cefc38e4579267b9bf72e00e (patch)
tree5f8be47e89d05151771532c093944cfc73a98463
parent424acaf997cad85aed8a9526d19d8554c80798d3 (diff)
Refactor: Remove duplicate code for calculaing attack "power"
-rw-r--r--src/cmd1.c219
-rw-r--r--src/externs.h1
-rw-r--r--src/melee1.c187
-rw-r--r--src/melee2.c106
4 files changed, 86 insertions, 427 deletions
diff --git a/src/cmd1.c b/src/cmd1.c
index 78dac79a..cdd4bffc 100644
--- a/src/cmd1.c
+++ b/src/cmd1.c
@@ -805,120 +805,7 @@ static void carried_monster_attack(s16b m_idx, bool_ *fear, bool_ *mdeath,
visible = TRUE;
/* Extract the attack "power" */
- switch (effect)
- {
- case RBE_HURT:
- {
- power = 60;
- break;
- }
- case RBE_POISON:
- {
- power = 5;
- break;
- }
- case RBE_UN_BONUS:
- {
- power = 20;
- break;
- }
- case RBE_UN_POWER:
- {
- power = 15;
- break;
- }
- case RBE_EAT_GOLD:
- power = 5;
- break;
- case RBE_EAT_ITEM:
- power = 5;
- break;
- case RBE_EAT_FOOD:
- power = 5;
- break;
- case RBE_EAT_LITE:
- power = 5;
- break;
- case RBE_ACID:
- power = 0;
- break;
- case RBE_ELEC:
- power = 10;
- break;
- case RBE_FIRE:
- power = 10;
- break;
- case RBE_COLD:
- power = 10;
- break;
- case RBE_BLIND:
- power = 2;
- break;
- case RBE_CONFUSE:
- power = 10;
- break;
- case RBE_TERRIFY:
- power = 10;
- break;
- case RBE_PARALYZE:
- power = 2;
- break;
- case RBE_LOSE_STR:
- power = 0;
- break;
- case RBE_LOSE_DEX:
- power = 0;
- break;
- case RBE_LOSE_CON:
- power = 0;
- break;
- case RBE_LOSE_INT:
- power = 0;
- break;
- case RBE_LOSE_WIS:
- power = 0;
- break;
- case RBE_LOSE_CHR:
- power = 0;
- break;
- case RBE_LOSE_ALL:
- power = 2;
- break;
- case RBE_SHATTER:
- power = 60;
- break;
- case RBE_EXP_10:
- power = 5;
- break;
- case RBE_EXP_20:
- power = 5;
- break;
- case RBE_EXP_40:
- power = 5;
- break;
- case RBE_EXP_80:
- power = 5;
- break;
- case RBE_DISEASE:
- power = 5;
- break;
- case RBE_TIME:
- power = 5;
- break;
- case RBE_SANITY:
- power = 60;
- break;
- case RBE_HALLU:
- power = 10;
- break;
- case RBE_PARASITE:
- power = 5;
- break;
- case RBE_ABOMINATION:
- power = 20;
- break;
- }
-
+ power = get_attack_power(effect);
/* Monster hits */
if (!effect || check_hit2(power, rlev, ac))
@@ -1437,109 +1324,7 @@ static void incarnate_monster_attack(s16b m_idx, bool_ *fear, bool_ *mdeath,
visible = TRUE;
/* Extract the attack "power" */
- switch (effect)
- {
- case RBE_HURT:
- power = 60;
- break;
- case RBE_POISON:
- power = 5;
- break;
- case RBE_UN_BONUS:
- power = 20;
- break;
- case RBE_UN_POWER:
- power = 15;
- break;
- case RBE_EAT_GOLD:
- power = 5;
- break;
- case RBE_EAT_ITEM:
- power = 5;
- break;
- case RBE_EAT_FOOD:
- power = 5;
- break;
- case RBE_EAT_LITE:
- power = 5;
- break;
- case RBE_ACID:
- power = 0;
- break;
- case RBE_ELEC:
- power = 10;
- break;
- case RBE_FIRE:
- power = 10;
- break;
- case RBE_COLD:
- power = 10;
- break;
- case RBE_BLIND:
- power = 2;
- break;
- case RBE_CONFUSE:
- power = 10;
- break;
- case RBE_TERRIFY:
- power = 10;
- break;
- case RBE_PARALYZE:
- power = 2;
- break;
- case RBE_LOSE_STR:
- power = 0;
- break;
- case RBE_LOSE_DEX:
- power = 0;
- break;
- case RBE_LOSE_CON:
- power = 0;
- break;
- case RBE_LOSE_INT:
- power = 0;
- break;
- case RBE_LOSE_WIS:
- power = 0;
- break;
- case RBE_LOSE_CHR:
- power = 0;
- break;
- case RBE_LOSE_ALL:
- power = 2;
- break;
- case RBE_SHATTER:
- power = 60;
- break;
- case RBE_EXP_10:
- power = 5;
- break;
- case RBE_EXP_20:
- power = 5;
- break;
- case RBE_EXP_40:
- power = 5;
- break;
- case RBE_EXP_80:
- power = 5;
- break;
- case RBE_DISEASE:
- power = 5;
- break;
- case RBE_TIME:
- power = 5;
- break;
- case RBE_SANITY:
- power = 60;
- break;
- case RBE_HALLU:
- power = 10;
- break;
- case RBE_PARASITE:
- power = 5;
- break;
- }
-
+ effect = get_attack_power(effect);
/* Monster hits */
if (!effect || check_hit2(power, rlev, ac))
diff --git a/src/externs.h b/src/externs.h
index 6b22dc81..1c0c63e2 100644
--- a/src/externs.h
+++ b/src/externs.h
@@ -998,6 +998,7 @@ extern void save_number_key(char *key, u32b val);
extern int monst_spell_monst_spell;
extern bool_ mon_take_hit_mon(int s_idx, int m_idx, int dam, bool_ *fear, cptr note);
extern int check_hit2(int power, int level, int ac);
+extern int get_attack_power(int effect);
extern bool_ carried_make_attack_normal(int r_idx);
extern bool_ make_attack_normal(int m_idx, byte divis);
extern bool_ make_attack_spell(int m_idx);
diff --git a/src/melee1.c b/src/melee1.c
index 0160c43a..1a3fa526 100644
--- a/src/melee1.c
+++ b/src/melee1.c
@@ -115,6 +115,87 @@ static cptr desc_moan[] =
"says she is always happy."
};
+
+/*
+ * Get the "power" of an attack of given effect type.
+ */
+int get_attack_power(int effect)
+{
+ switch (effect)
+ {
+ case RBE_HURT:
+ return 60;
+ case RBE_POISON:
+ return 5;
+ case RBE_UN_BONUS:
+ return 20;
+ case RBE_UN_POWER:
+ return 15;
+ case RBE_EAT_GOLD:
+ return 5;
+ case RBE_EAT_ITEM:
+ return 5;
+ case RBE_EAT_FOOD:
+ return 5;
+ case RBE_EAT_LITE:
+ return 5;
+ case RBE_ACID:
+ return 0;
+ case RBE_ELEC:
+ return 10;
+ case RBE_FIRE:
+ return 10;
+ case RBE_COLD:
+ return 10;
+ case RBE_BLIND:
+ return 2;
+ case RBE_CONFUSE:
+ return 10;
+ case RBE_TERRIFY:
+ return 10;
+ case RBE_PARALYZE:
+ return 2;
+ case RBE_LOSE_STR:
+ return 0;
+ case RBE_LOSE_DEX:
+ return 0;
+ case RBE_LOSE_CON:
+ return 0;
+ case RBE_LOSE_INT:
+ return 0;
+ case RBE_LOSE_WIS:
+ return 0;
+ case RBE_LOSE_CHR:
+ return 0;
+ case RBE_LOSE_ALL:
+ return 2;
+ case RBE_SHATTER:
+ return 60;
+ case RBE_EXP_10:
+ return 5;
+ case RBE_EXP_20:
+ return 5;
+ case RBE_EXP_40:
+ return 5;
+ case RBE_EXP_80:
+ return 5;
+ case RBE_DISEASE:
+ return 5;
+ case RBE_TIME:
+ return 5;
+ case RBE_SANITY:
+ return 60;
+ case RBE_HALLU:
+ return 10;
+ case RBE_PARASITE:
+ return 5;
+ case RBE_ABOMINATION:
+ return 30;
+ }
+ /* Unknown effects have no power */
+ return 0;
+}
+
/*
* Attack the player via physical attacks.
*/
@@ -173,111 +254,7 @@ bool_ carried_make_attack_normal(int r_idx)
visible = TRUE;
/* Extract the attack "power" */
- switch (effect)
- {
- case RBE_HURT:
- power = 60;
- break;
- case RBE_POISON:
- power = 5;
- break;
- case RBE_UN_BONUS:
- power = 20;
- break;
- case RBE_UN_POWER:
- power = 15;
- break;
- case RBE_EAT_GOLD:
- power = 5;
- break;
- case RBE_EAT_ITEM:
- power = 5;
- break;
- case RBE_EAT_FOOD:
- power = 5;
- break;
- case RBE_EAT_LITE:
- power = 5;
- break;
- case RBE_ACID:
- power = 0;
- break;
- case RBE_ELEC:
- power = 10;
- break;
- case RBE_FIRE:
- power = 10;
- break;
- case RBE_COLD:
- power = 10;
- break;
- case RBE_BLIND:
- power = 2;
- break;
- case RBE_CONFUSE:
- power = 10;
- break;
- case RBE_TERRIFY:
- power = 10;
- break;
- case RBE_PARALYZE:
- power = 2;
- break;
- case RBE_LOSE_STR:
- power = 0;
- break;
- case RBE_LOSE_DEX:
- power = 0;
- break;
- case RBE_LOSE_CON:
- power = 0;
- break;
- case RBE_LOSE_INT:
- power = 0;
- break;
- case RBE_LOSE_WIS:
- power = 0;
- break;
- case RBE_LOSE_CHR:
- power = 0;
- break;
- case RBE_LOSE_ALL:
- power = 2;
- break;
- case RBE_SHATTER:
- power = 60;
- break;
- case RBE_EXP_10:
- power = 5;
- break;
- case RBE_EXP_20:
- power = 5;
- break;
- case RBE_EXP_40:
- power = 5;
- break;
- case RBE_EXP_80:
- power = 5;
- break;
- case RBE_DISEASE:
- power = 5;
- break;
- case RBE_TIME:
- power = 5;
- break;
- case RBE_SANITY:
- power = 60;
- break;
- case RBE_HALLU:
- power = 10;
- break;
- case RBE_PARASITE:
- power = 5;
- break;
- case RBE_ABOMINATION:
- power = 30;
- break;
- }
+ power = get_attack_power(effect);
/* Monster hits player */
diff --git a/src/melee2.c b/src/melee2.c
index 9cb5e2da..6ada6bd0 100644
--- a/src/melee2.c
+++ b/src/melee2.c
@@ -5557,111 +5557,7 @@ static bool_ monst_attack_monst(int m_idx, int t_idx)
if (m_ptr->ml) visible = TRUE;
/* Extract the attack "power" */
- switch (effect)
- {
- case RBE_HURT:
- power = 60;
- break;
- case RBE_POISON:
- power = 5;
- break;
- case RBE_UN_BONUS:
- power = 20;
- break;
- case RBE_UN_POWER:
- power = 15;
- break;
- case RBE_EAT_GOLD:
- power = 5;
- break;
- case RBE_EAT_ITEM:
- power = 5;
- break;
- case RBE_EAT_FOOD:
- power = 5;
- break;
- case RBE_EAT_LITE:
- power = 5;
- break;
- case RBE_ACID:
- power = 0;
- break;
- case RBE_ELEC:
- power = 10;
- break;
- case RBE_FIRE:
- power = 10;
- break;
- case RBE_COLD:
- power = 10;
- break;
- case RBE_BLIND:
- power = 2;
- break;
- case RBE_CONFUSE:
- power = 10;
- break;
- case RBE_TERRIFY:
- power = 10;
- break;
- case RBE_PARALYZE:
- power = 2;
- break;
- case RBE_LOSE_STR:
- power = 0;
- break;
- case RBE_LOSE_DEX:
- power = 0;
- break;
- case RBE_LOSE_CON:
- power = 0;
- break;
- case RBE_LOSE_INT:
- power = 0;
- break;
- case RBE_LOSE_WIS:
- power = 0;
- break;
- case RBE_LOSE_CHR:
- power = 0;
- break;
- case RBE_LOSE_ALL:
- power = 2;
- break;
- case RBE_SHATTER:
- power = 60;
- break;
- case RBE_EXP_10:
- power = 5;
- break;
- case RBE_EXP_20:
- power = 5;
- break;
- case RBE_EXP_40:
- power = 5;
- break;
- case RBE_EXP_80:
- power = 5;
- break;
- case RBE_DISEASE:
- power = 5;
- break;
- case RBE_TIME:
- power = 5;
- break;
- case RBE_SANITY:
- power = 60;
- break;
- case RBE_HALLU:
- power = 10;
- break;
- case RBE_PARASITE:
- power = 5;
- break;
- case RBE_ABOMINATION:
- power = 20;
- break;
- }
+ power = get_attack_power(effect);
/* Monster hits*/