summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/randart.cc
diff options
context:
space:
mode:
authorennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2007-11-08 03:46:17 +0000
committerennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2007-11-08 03:46:17 +0000
commit76bba18901cc2e3278bd683d93351d44e750f98e (patch)
tree9e119c314ff523828560c14f329515bad8973c7f /crawl-ref/source/randart.cc
parent2e3410988df79f513d184b7acd963288617db151 (diff)
downloadcrawl-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.cc83
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;
}