summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2009-02-05 17:49:27 +0000
committerdolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2009-02-05 17:49:27 +0000
commit783a80c3a2a1f14ee4e02d1abd9bf9aef50d0595 (patch)
treebd20c9f9b060be5a886c74a08547f318704d274e
parent7ca638385f00f42e37e81e85b6f9d6ff691dc968 (diff)
downloadcrawl-ref-783a80c3a2a1f14ee4e02d1abd9bf9aef50d0595.tar.gz
crawl-ref-783a80c3a2a1f14ee4e02d1abd9bf9aef50d0595.zip
After some thought, remove assumptions about armor subtype order again.
There are still some left, but they're mostly checks for armor greater than plate mail, and they still work with the current code. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8906 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/source/effects.cc7
-rw-r--r--crawl-ref/source/makeitem.cc42
2 files changed, 40 insertions, 9 deletions
diff --git a/crawl-ref/source/effects.cc b/crawl-ref/source/effects.cc
index d24cc79c5a..082511a093 100644
--- a/crawl-ref/source/effects.cc
+++ b/crawl-ref/source/effects.cc
@@ -958,7 +958,12 @@ static armour_type _acquirement_armour_subtype()
result = coinflip() ? ARM_ROBE : ARM_ANIMAL_SKIN;
else
{
- result = static_cast<armour_type>(ARM_ROBE + random2(8));
+ const armour_type armours[] = { ARM_ROBE, ARM_LEATHER_ARMOUR,
+ ARM_RING_MAIL, ARM_SCALE_MAIL,
+ ARM_CHAIN_MAIL, ARM_SPLINT_MAIL,
+ ARM_BANDED_MAIL, ARM_PLATE_MAIL };
+
+ result = static_cast<armour_type>(RANDOM_ELEMENT(armours));
if (one_chance_in(10) && you.skills[SK_ARMOUR] >= 10)
result = ARM_CRYSTAL_PLATE_MAIL;
diff --git a/crawl-ref/source/makeitem.cc b/crawl-ref/source/makeitem.cc
index da343e18cf..05135bf866 100644
--- a/crawl-ref/source/makeitem.cc
+++ b/crawl-ref/source/makeitem.cc
@@ -4147,9 +4147,16 @@ void give_armour(monsters *mon, int level)
case MONS_EDMUND:
case MONS_RUPERT:
case MONS_WAYNE:
+ {
item.base_type = OBJ_ARMOUR;
- item.sub_type = ARM_LEATHER_ARMOUR + random2(4); // up to chain mail
+
+ const int temp_rand = random2(4);
+ item.sub_type = ((temp_rand == 0) ? ARM_LEATHER_ARMOUR :
+ (temp_rand == 1) ? ARM_RING_MAIL :
+ (temp_rand == 2) ? ARM_SCALE_MAIL
+ : ARM_CHAIN_MAIL);
break;
+ }
case MONS_ORC_WARLORD:
case MONS_SAINT_ROKA:
@@ -4170,9 +4177,16 @@ void give_armour(monsters *mon, int level)
case MONS_MAUD:
case MONS_VAMPIRE_KNIGHT:
case MONS_VAULT_GUARD:
+ {
item.base_type = OBJ_ARMOUR;
- item.sub_type = ARM_CHAIN_MAIL + random2(4); // up to plate mail
+
+ const int temp_rand = random2(4);
+ item.sub_type = ((temp_rand == 0) ? ARM_CHAIN_MAIL :
+ (temp_rand == 1) ? ARM_SPLINT_MAIL :
+ (temp_rand == 2) ? ARM_BANDED_MAIL
+ : ARM_PLATE_MAIL);
break;
+ }
case MONS_ANGEL:
case MONS_SIGMUND:
@@ -4373,13 +4387,20 @@ armour_type get_random_body_armour_type(int item_level)
// FIXME: Need to clean up this mess.
armour_type get_random_armour_type(int item_level)
{
- // Default (lowest-level) armours, up to ring mail.
- int armtype = ARM_ROBE + random2(3);
+ // Default (lowest-level) armours.
+ const armour_type defarmours[] = { ARM_ROBE, ARM_LEATHER_ARMOUR,
+ ARM_RING_MAIL };
+
+ int armtype = RANDOM_ELEMENT(defarmours);
if (x_chance_in_y(11 + item_level, 35))
{
- // Low-level armours, up to chain mail.
- armtype = ARM_ROBE + random2(5);
+ // Low-level armours.
+ const armour_type lowarmours[] = { ARM_ROBE, ARM_LEATHER_ARMOUR,
+ ARM_RING_MAIL, ARM_SCALE_MAIL,
+ ARM_CHAIN_MAIL };
+
+ armtype = RANDOM_ELEMENT(lowarmours);
if (one_chance_in(4))
armtype = ARM_ANIMAL_SKIN;
@@ -4387,8 +4408,13 @@ armour_type get_random_armour_type(int item_level)
if (x_chance_in_y(11 + item_level, 60))
{
- // Medium-level armours, up to plate mail.
- armtype = ARM_ROBE + random2(8);
+ // Medium-level armours.
+ const armour_type medarmours[] = { ARM_ROBE, ARM_LEATHER_ARMOUR,
+ ARM_RING_MAIL, ARM_SCALE_MAIL,
+ ARM_CHAIN_MAIL, ARM_SPLINT_MAIL,
+ ARM_BANDED_MAIL, ARM_PLATE_MAIL };
+
+ armtype = RANDOM_ELEMENT(medarmours);
}
if (one_chance_in(20) && x_chance_in_y(11 + item_level, 400))