diff options
author | Enne Walker <enne.walker@gmail.com> | 2010-06-09 21:38:00 -0400 |
---|---|---|
committer | Enne Walker <enne.walker@gmail.com> | 2010-06-09 21:49:51 -0400 |
commit | 8e9347d3720a9113faf96ccb6b16eab7c609f547 (patch) | |
tree | c43b5cd5322e25b4b001fcb96b301b24daf591be /crawl-ref/source/tiledoll.cc | |
parent | 1583ebae1559aeb681d22c783f89fddaa47cb8ad (diff) | |
download | crawl-ref-8e9347d3720a9113faf96ccb6b16eab7c609f547.tar.gz crawl-ref-8e9347d3720a9113faf96ccb6b16eab7c609f547.zip |
Assign tile dolls random trousers for SHOW_EQUIP.
This way they don't have to be hardcoded in dolls.txt.
Diffstat (limited to 'crawl-ref/source/tiledoll.cc')
-rw-r--r-- | crawl-ref/source/tiledoll.cc | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/crawl-ref/source/tiledoll.cc b/crawl-ref/source/tiledoll.cc index 188a881c11..d661805acc 100644 --- a/crawl-ref/source/tiledoll.cc +++ b/crawl-ref/source/tiledoll.cc @@ -254,6 +254,20 @@ void create_random_doll(dolls_data &rdoll) _fill_doll_part(rdoll, TILEP_PART_BEARD); } +// Deterministically pick a pair of trousers for this character to use +// for SHOW_EQUIP, as there's no corresponding item slot for this. +static tileidx_t _random_trousers() +{ + int offset = static_cast<int>(you.species) * 9887 + + static_cast<int>(you.char_class) * 8719; + const char *name = you.your_name.c_str(); + for (int i = 0; i < 8 && *name; ++i, ++name) + offset += name[i] * 4643; + + const int range = TILEP_LEG_LAST_NORM - TILEP_LEG_FIRST_NORM + 1; + return (TILEP_LEG_FIRST_NORM + offset % range); +} + void fill_doll_equipment(dolls_data &result) { // Base tile. @@ -333,6 +347,11 @@ void fill_doll_equipment(dolls_data &result) result.parts[TILEP_PART_HELM] = 0; } } + // Leg. + if (result.parts[TILEP_PART_LEG] == TILEP_SHOW_EQUIP) + { + result.parts[TILEP_PART_LEG] = _random_trousers(); + } // Boots. if (result.parts[TILEP_PART_BOOTS] == TILEP_SHOW_EQUIP) { |