diff options
author | ennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-11-08 03:46:17 +0000 |
---|---|---|
committer | ennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-11-08 03:46:17 +0000 |
commit | 76bba18901cc2e3278bd683d93351d44e750f98e (patch) | |
tree | 9e119c314ff523828560c14f329515bad8973c7f /crawl-ref/source/randart.cc | |
parent | 2e3410988df79f513d184b7acd963288617db151 (diff) | |
download | crawl-ref-76bba18901cc2e3278bd683d93351d44e750f98e.tar.gz crawl-ref-76bba18901cc2e3278bd683d93351d44e750f98e.zip |
Randarts with no mods get one of (ac, ev, str, int, dex.) [1826417]
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2802 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/randart.cc')
-rw-r--r-- | crawl-ref/source/randart.cc | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/crawl-ref/source/randart.cc b/crawl-ref/source/randart.cc index 8caccf25d9..9559069127 100644 --- a/crawl-ref/source/randart.cc +++ b/crawl-ref/source/randart.cc @@ -924,6 +924,86 @@ void randart_desc_properties( const item_def &item, proprt[fake_rap] += fake_plus; } +static int randart_add_one_property( const item_def &item, + randart_properties_t &proprt ) +{ + // This function assumes that no properties have been added to this + // randart yet. + + const object_class_type cl = item.base_type; + const int ty = item.sub_type; + + // 0 - ac, 1 - ev, 2 - str, 3 - int, 4 - dex + int prop; + int skip = -1; + + // Determine if we need to skip any of the above. + if (cl == OBJ_ARMOUR || cl == OBJ_JEWELLERY && ty == RING_PROTECTION) + skip = 0; + else if (cl == OBJ_JEWELLERY && ty == RING_EVASION) + skip = 1; + else if (cl == OBJ_JEWELLERY && ty == RING_STRENGTH) + skip = 2; + else if (cl == OBJ_JEWELLERY && ty == RING_INTELLIGENCE) + skip = 3; + else if (cl == OBJ_JEWELLERY && ty == RING_DEXTERITY) + skip = 4; + + // Pick a random enchantment, taking into account the skipped index. + if (skip >= 0) + { + prop = random2(4); + if (prop >= skip) + prop++; + } + else + { + prop = random2(5); + } + + bool negench = one_chance_in(4); + + switch(prop) + { + default: + case 0: + if (negench) + proprt[RAP_AC] -= 1 + random2(3) + random2(3) + random2(3); + else + proprt[RAP_AC] = 1 + random2(3) + random2(3) + random2(3); + break; + case 1: + if (negench) + proprt[RAP_EVASION] -= 1 + random2(3) + random2(3) + random2(3); + else + proprt[RAP_EVASION] = 1 + random2(3) + random2(3) + random2(3); + break; + case 2: + if (negench) + proprt[RAP_STRENGTH] -= 1 + random2(3) + random2(3) + + random2(3); + else + proprt[RAP_STRENGTH] = 1 + random2(3) + random2(2); + break; + case 3: + if (negench) + proprt[RAP_INTELLIGENCE] -= 1 + random2(3) + random2(3) + + random2(3); + else + proprt[RAP_INTELLIGENCE] = 1 + random2(3) + random2(2); + break; + case 4: + if (negench) + proprt[RAP_DEXTERITY] -= 1 + random2(3) + random2(3) + + random2(3); + else + proprt[RAP_DEXTERITY] = 1 + random2(3) + random2(2); + break; + } + + return negench ? 0 : 1; +} + void randart_wpn_properties( const item_def &item, randart_properties_t &proprt, randart_known_props_t &known) @@ -1408,6 +1488,9 @@ void randart_wpn_properties( const item_def &item, } } + if (randart_wpn_num_props(proprt) == 0) + power_level += randart_add_one_property(item, proprt); + if ((power_level < 2 && one_chance_in(5)) || one_chance_in(30)) proprt[RAP_CURSED] = 1; } |