return a random monster name, for hallucination */
| 1386 | |
| 1387 | /* return a random monster name, for hallucination */ |
| 1388 | char * |
| 1389 | rndmonnam(char *code) |
| 1390 | { |
| 1391 | static char buf[BUFSZ]; |
| 1392 | char *mnam; |
| 1393 | int name; |
| 1394 | #define BOGUSMONSIZE 100 /* arbitrary */ |
| 1395 | |
| 1396 | if (code) |
| 1397 | *code = '\0'; |
| 1398 | |
| 1399 | do { |
| 1400 | name = rn2_on_display_rng(SPECIAL_PM + BOGUSMONSIZE - LOW_PM) + LOW_PM; |
| 1401 | } while (name < SPECIAL_PM |
| 1402 | && (type_is_pname(&mons[name]) || (mons[name].geno & G_NOGEN))); |
| 1403 | |
| 1404 | if (name >= SPECIAL_PM) { |
| 1405 | mnam = bogusmon(buf, code); |
| 1406 | } else { |
| 1407 | mnam = strcpy(buf, pmname(&mons[name], rn2_on_display_rng(2))); |
| 1408 | } |
| 1409 | return mnam; |
| 1410 | #undef BOGUSMONSIZE |
| 1411 | } |
| 1412 | |
| 1413 | /* check bogusmon prefix to decide whether it's a personal name */ |
| 1414 | boolean |
no test coverage detected