| import random |
| import fictional_names.tolkien as tolkien |
| import fictional_names.viking as viking |
| import fictional_names.rowling as rowling |
|
|
| def generate_fantasy_name(race, gender=None): |
| """Generates a random fantasy name based on race using fictional-names library data.""" |
| |
| race = race.lower() |
| |
| |
| if "human" in race: |
| |
| source = viking |
| elif any(r in race for r in ["elf", "elven"]): |
| |
| source = tolkien |
| elif "dwarf" in race: |
| |
| source = tolkien |
| elif "orc" in race: |
| |
| source = tolkien |
| elif any(r in race for r in ["tiefling", "dragonborn"]): |
| |
| source = rowling |
| else: |
| |
| source = tolkien |
|
|
| |
| if gender and gender.lower() == "female": |
| prefixes = source.female_prefix |
| suffixes = source.female_suffix |
| names = source.female_names |
| elif gender and gender.lower() == "male": |
| prefixes = source.male_prefix |
| suffixes = source.male_suffix |
| names = source.male_names |
| else: |
| |
| prefixes = source.male_prefix + source.female_prefix |
| suffixes = source.male_suffix + source.female_suffix |
| names = source.male_names + source.female_names |
|
|
| |
| if random.random() > 0.4 and names: |
| first_name = random.choice(names) |
| else: |
| |
| prefix = random.choice(prefixes) if prefixes else "Al" |
| suffix = random.choice(suffixes) if suffixes else "en" |
| first_name = (prefix + suffix).capitalize() |
|
|
| |
| surname = "" |
| if hasattr(source, "surnames") and random.random() > 0.3: |
| surname = random.choice(source.surnames) |
| |
| if surname: |
| return f"{first_name} {surname}" |
| |
| return first_name |
|
|