-/* NetHack 3.7 objnam.c $NHDT-Date: 1578535246 2020/01/09 02:00:46 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.285 $ */
+/* NetHack 3.7 objnam.c $NHDT-Date: 1578896203 2020/01/13 06:16:43 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.287 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2011. */
/* NetHack may be freely redistributed. See license for details. */
{
int i, x, sum = 0;
- if (first == last)
- return first;
- for (i = first; i <= last; i++)
- sum += objects[i].oc_prob;
- if (!sum) /* all zero */
- return first + rn2(last - first + 1);
- x = rnd(sum);
- for (i = first; i <= last; i++)
- if (objects[i].oc_prob && (x -= objects[i].oc_prob) <= 0)
- return i;
- return 0;
+ if (last > first) {
+ for (i = first; i <= last; i++)
+ sum += objects[i].oc_prob;
+ if (!sum) /* all zero, so equal probability */
+ return rn1(last - first + 1, first);
+
+ x = rnd(sum);
+ for (i = first; i <= last; i++)
+ if ((x -= objects[i].oc_prob) <= 0)
+ return i;
+ }
+ return (first == last) ? first : STRANGE_OBJECT;
}
static const char *