This is custom lib so it may not work with any of yours, but this is a neat toy I've used
#include <defines.h>
#define VOW ({\
"e", "e", "e", "e", "e", "a", "a", "a", "a", "i", "i", "i", "o", "o", "u", \
"e", "e", "e", "e", "e", "a", "a", "a", "a", "i", "i", "i", "o", "o", "u", \
"e", "e", "e", "e", "e", "a", "a", "a", "a", "i", "i", "i", "o", "o", "u", \
"e", "e", "e", "e", "e", "a", "a", "a", "a", "i", "i", "i", "o", "o", "u", \
"y", "ie", "aa", "oo", "ee", "ea", "ia", "io", "ou", "ou", \
})
#define SVOW ({ \
"e", "e", "e", "e", "e", "a", "a", "a", "a", "i", "i", "i", "o", "o", "u", \
})
#define EVOW ({ \
"e", "e", "e", "e", "e", "a", "a", "a", "a", "i", "i", "i", "y", "y", "o", \
})
#define CON ({\
"b", "bl", "br", "c", "ch", "ck", "cl", "cr", "d", "dl", "dr", "f", "fl", \
"fr", "g", "h", "j", "k", "kl", "kr", "l", "m", "n", "p", "pl", "pr", "ps", \
"qu", "r", "rn", "rt", "rth", "s", "sch", "scr", "sh", "shr", "sk", "sm", \
"sn", "sp", "spr", "st", "str", "sw", "t", "th", "tr", "ts", "v", "vr", \
"w", "wr", "x", "z", "zl", "zr", \
})
#define SCON ({ \
"b", "bl", "br", "c", "ch", "cl", "cr", "d", "dr", "f", "fl", "fr", "g", \
"h", "j", "k", "kr", "l", "m", "n", "p", "pl", "pr", "qu", "r", "s", "scr", \
"sh", "shr", "sk", "sm", "sn", "sp", "spr", "st", "str", "sw", "t", "th", \
"tr", "v", "w", "x", "z", \
})
#define ECON ({ \
"b", "ch", "ck", "d", "f", "g", "l", "m", "n", "ng", "p", "ps", "r", \
"rn", "rt", "rth", "s", "sch", "sh", "st", "t", "th", "ts", "w", "z", \
})
#define RVOW VOW[random(sizeof(VOW))]
#define RSVOW SVOW[random(sizeof(SVOW))]
#define REVOW EVOW[random(sizeof(EVOW))]
#define RCON CON[random(sizeof(CON))]
#define RSCON SCON[random(sizeof(SCON))]
#define RECON ECON[random(sizeof(ECON))]
inherit COMMAND;
int main(string arg) {
string name;
int num;
sscanf(arg, "%d", num);
if (!num)
num = 1 + random(3);
if (num < 1)
return notify_fail("Less than 1 syllable... aborting.\n");
if (num > 10)
return notify_fail("Too many syllables... aborting.\n");
name = (random(5) ? RSCON+RVOW : RSVOW);
if (num-- > 0) {
while (num--) {
name += RCON;
name += RVOW;
}
}
if (random(5))
name += RECON;
else
name += RCON + REVOW;
printf("%s\n", capitalize(name));
return 1;
}