From dd464292da71006598bd7c603e5038dbca5b4b33 Mon Sep 17 00:00:00 2001 From: habu Date: Wed, 16 Jan 2013 09:17:58 +0000 Subject: [PATCH] rewrote add_esp_weak function --- src/object2.c | 52 ++++++++++++++++++++-------------------------------- 1 file changed, 20 insertions(+), 32 deletions(-) diff --git a/src/object2.c b/src/object2.c index 936ae33bd..20c429618 100644 --- a/src/object2.c +++ b/src/object2.c @@ -2583,43 +2583,31 @@ static bool add_esp_strong(object_type *o_ptr) } -#define MAX_ESP_WEAK 10 static void add_esp_weak(object_type *o_ptr, bool extra) { - int i = 0; - int idx[MAX_ESP_WEAK]; - int flg[MAX_ESP_WEAK]; - int n = (extra) ? (3 + randint1(randint1(6))) : randint1(3); - int left = MAX_ESP_WEAK; - - for (i = 0; i < MAX_ESP_WEAK; i++) flg[i] = i + 1; + int i; + u32b weak_esp_list[] = { + TR_ESP_ANIMAL, + TR_ESP_UNDEAD, + TR_ESP_DEMON, + TR_ESP_ORC, + TR_ESP_TROLL, + TR_ESP_GIANT, + TR_ESP_DRAGON, + TR_ESP_HUMAN, + TR_ESP_GOOD, + TR_ESP_UNIQUE, + }; + const int MAX_ESP_WEAK = sizeof(weak_esp_list) / sizeof(weak_esp_list[0]); + const int add_count = MIN(MAX_ESP_WEAK, (extra) ? (3 + randint1(randint1(6))) : randint1(3)); - /* Shuffle esp flags */ - for (i = 0; i < n; i++) + /* Add unduplicated weak esp flags randomly */ + for (i = 0; i < add_count; ++ i) { - int k = randint0(left--); + int choice = rand_range(i, MAX_ESP_WEAK - 1); - idx[i] = flg[k]; - - while (k < left) - { - flg[k] = flg[k + 1]; - k++; - } - } - - while (n--) switch (idx[n]) - { - case 1: add_flag(o_ptr->art_flags, TR_ESP_ANIMAL); break; - case 2: add_flag(o_ptr->art_flags, TR_ESP_UNDEAD); break; - case 3: add_flag(o_ptr->art_flags, TR_ESP_DEMON); break; - case 4: add_flag(o_ptr->art_flags, TR_ESP_ORC); break; - case 5: add_flag(o_ptr->art_flags, TR_ESP_TROLL); break; - case 6: add_flag(o_ptr->art_flags, TR_ESP_GIANT); break; - case 7: add_flag(o_ptr->art_flags, TR_ESP_DRAGON); break; - case 8: add_flag(o_ptr->art_flags, TR_ESP_HUMAN); break; - case 9: add_flag(o_ptr->art_flags, TR_ESP_GOOD); break; - case 10: add_flag(o_ptr->art_flags, TR_ESP_UNIQUE); break; + add_flag(o_ptr->art_flags, weak_esp_list[choice]); + weak_esp_list[choice] = weak_esp_list[i]; } } -- 2.11.0