Noted in the newsgroup -
Caused by the changes to make_object in revision 404.
You really want:
do
{
/* Pick a random object */
#if 0
k_idx = get_obj_num(base, kind_is_good);
#else
k_idx = get_obj_num(base);
#endif
/* Keep if it's good, or try again */
if (kind_is_good(k_idx)) break;
} while (good)
so that if the good flag is passed in via VAULT drop, or a 'good' flagged
monster drop, that you are guaranteed a good object.
as it stands now, with the good/great flag, it just tries 3/5 times and settles for whatever after that.