/************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvements copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefiting. We hope that you share your changes too. What goes * * around, comes around. * *************************************************************************** * ROM 2.4 is copyright 1993-1998 Russ Taylor * * ROM has been brought to you by the ROM consortium * * Russ Taylor (rtaylor@hypercube.org) * * Gabrielle Taylor (gtaylor@hypercube.org) * * Brian Moore (zump@rom.org) * * By using this code, you have agreed to follow the terms of the * * ROM license, in the file Rom24/doc/rom.license * *************************************************************************** * The Dawn of Time v1.69q (c)1997-2002 Michael Garratt * * >> A number of people have contributed to the Dawn codebase, with the * * majority of code written by Michael Garratt - www.dawnoftime.org * * >> To use this source code, you must fully comply with the dawn license * * in licenses.txt... In particular, you may not remove this copyright * * notice. * *************************************************************************** * 1stMud ROM Derivative (c) 2001-2004 by Markanth * * http://www.firstmud.com/ <markanth@firstmud.com> * * By using this code you have agreed to follow the term of * * the 1stMud license in ../doc/1stMud/LICENSE * ***************************************************************************/ #include "merc.h" #include "interp.h" #include "recycle.h" #include "data_table.h" #include "olc.h" void init_name_profiles (void) { const char *word2; char buf[MSL]; int i = 0, count; NameProfile *nl; top_name_profile = 0; if (!name_profile_first) { name_profile_first = new_name_profile (); name_profile_first->title = str_dup ("mixed fantasy names"); name_profile_first->part[0] = str_dup ("A Ab Ac Ad Af Agr Ast As Al Adw Adr " "Ar B Br C C C Cr Ch Cad D Dr Dw Ed Eth Et Er El Eow F Fr G Gr Gw Gw " "Gal Gl H Ha Ib Jer K Ka Ked L Loth Lar Leg M Mir N Nyd Ol Oc On P " "Pr R Rh S Sev T Tr Th Th V Y Yb Z W W Wic"); name_profile_first->part[1] = str_dup ("a ae ae au ao are ale ali ay ardo e " "ei ea ea eri era ela eli enda erra i ia ie ire ira ila ili ira igo " "o oa oi oe ore u y"); name_profile_first->part[2] = str_dup ("_ _ _ _ _ _ a and b bwyn baen bard " "c ctred cred ch can d dan don der dric dfrid dus f g gord gan l li " "lgrin lin lith lath loth ld ldric ldan m mas mos mar mond n nydd " "nidd nnon nwan nyth nad nn nnor nd p r ron rd s sh seth sean t th " "th tha tlan trem tram v vudd w wan win win wyn wyn wyr wyr wyth"); name_profile_first->next = NULL; }; for (nl = name_profile_first; nl != NULL; nl = nl->next) { top_name_profile++; for (i = 0; i < MAX_PARTS; i++) { count = 0; word2 = nl->part[i]; while (true) { word2 = one_argument (word2, buf); if (NullStr (word2)) { break; } count++; } nl->part_count[i] = count; } } } DataTable name_profile_data_table[] = { DTE (STRING, name_profile, title, NULL, NULL, str, NULL), DTE (STRING_ARRAY, name_profile, part, MAX_PARTS, NULL, sarray, NULL), DTE_END }; TableSave_Fun (rw_name_profile_data) { rw_list (type, NAMEGEN_FILE, NameProfile, name_profile); if (type == act_read) init_name_profiles (); } NameProfile * profile_lookup (int which) { NameProfile *nl; int i = 0; for (nl = name_profile_first; nl; nl = nl->next) { if (++i >= which) break; } return nl; } char * genname (NameProfile * profile) { static int i; static char result[5][100]; const char *word; char buf[MIL]; int wordnum; int count, j; ++i, i %= 5; result[i][0] = NUL; for (j = 0; j < MAX_PARTS; j++) { word = profile->part[j]; wordnum = number_range (0, profile->part_count[j]); count = 0; while (true) { word = one_argument (word, buf); if (NullStr (buf)) { bugf ("char * genname(%s) - no word found!!! j=%d, wn=%d, count=%d.", profile->title, j, wordnum, count); break; } if (count == wordnum) { break; } count++; } if (!NullStr (buf) && buf[0] != '_') { strcat (result[i], buf); } } return result[i]; } Do_Fun (do_genname) { int count, i, profile_num; NameProfile *nl; char arg[MIL]; Column Cd; if (!name_profile_first) { chprintln (ch, "Random name generation is currently unavailable."); return; } if (NullStr (argument) || !is_number (argument)) { chprintlnf (ch, "{R%s NAME GENERATOR{x", strupper (mud_info.name)); chprintlnf (ch, "Syntax: %s <1-%d> <amount>", n_fun, top_name_profile); chprintln (ch, "Notes: <profile> relates to the name profile you want to use."); for (count = 0, nl = name_profile_first; nl; nl = nl->next) { chprintlnf (ch, "%2d> %s", ++count, nl->title); } return; } argument = one_argument (argument, arg); profile_num = atoi (arg); if (!NullStr (argument)) count = atoi (argument); else count = 60; if (profile_num < 1 || profile_num > top_name_profile || (nl = profile_lookup (profile_num)) == NULL) { chprintln (ch, "Invalid profile number."); do_genname (n_fun, ch, ""); return; } if (count < 1 || count > 100) { chprintln (ch, "Please choose a reasonable amount of names to display."); return; } chprintlnf (ch, "{R%s NAME GENERATOR - %s{x", strupper (mud_info.name), strupper (nl->title)); set_cols (&Cd, ch, 4, COLS_CHAR, ch); for (i = 0; i < count; i++) { print_cols (&Cd, capitalize (genname (nl))); } cols_nl (&Cd); } const char * get_random_name (void) { NameProfile *nl; do { nl = profile_lookup (number_range (1, top_name_profile)); } while (nl == NULL); return capitalize (genname (nl)); }