Scroll of acquirement drops... a magical hard leather cap
Collapse
X
-
Scroll of acquirement drops... a magical hard leather cap
PWMAngband variant maintainer - check https://github.com/draconisPW/PWMAngband (or http://www.mangband.org/forum/viewforum.php?f=9) to learn more about this new variant!Tags: None -
That's just mean. I think it should generate at least an excellent object?Last edited by Mondkalb; September 24, 2014, 14:04. -
Dig dig dig
OK, aquirement(...)
calls make_object(level,good=TRUE,great=TRUE...)
which calls apply_magic(level,allow_artifacts=TRUE,good=TRUE,g reat=TRUE...)
which calls make_ego_item(level...)
which calls ego_find_random(level...) to find the type of ego
ego_find_random may fail, if there isn't any appropriate ego available, but that normally only applies to depths with no generatable ego. Some form of helm should be available anywhere... (or L1 to 127 at least)
...
Hmm. I think not giving the Helm of Beauty an A line may be winding up with garbage allocation numbers instead of uncreatable... Nope nothing to see here move along
...
I went into tweak object mode on a leather cap rerolling it at excellent, and every so often the initial loop on ego_find_random seems to skip entirely
...
Ah. Occasionally the GREAT_EGO level boost in make_ego_item sets it to generate items on eg level 257 which is way out of the generation range of any of egos.
While min depth should be checked against the boosted depth, max depth should really be vs actual depth. You would need to store the original level in make_ego_item and pass that as a new argument to ego_find_random
Code:static struct ego_item *ego_find_random(object_type *o_ptr, [COLOR="Red"][B]int eff_level,[/B][/COLOR] int level) { ... /* Reset any previous probability of this type being picked */ table[i].prob3 = 0; if ([COLOR="Red"][B]eff_level[/B][/COLOR] < table[i].level) continue; /* Access the ego item */ ego = &e_info[table[i].index]; /* enforce maximum */ if (level > ego->alloc_max) continue; /* roll for Out of Depth (ood) */ if ([COLOR="Red"][B]eff_level[/B][/COLOR] < ego->alloc_min){ ood_chance = MAX(2, (ego->alloc_min - level) / 3); if (!one_in_(ood_chance)) continue; } ... } ... static void make_ego_item(object_type *o_ptr, int level) { [COLOR="Red"][B]int orig_level = level;[/B][/COLOR] ... /* Try to get a legal ego type for this item */ o_ptr->ego = ego_find_random(o_ptr, level[COLOR="Red"], [B]orig_level[/B][/COLOR]); ... }
Last edited by kaypy; September 24, 2014, 17:33.Comment
Comment