dnd5-scripts/generate_encounter/get_npc_races.py
2026-06-17 22:32:48 +03:00

290 lines
18 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
get_npc_races.py — маппинг биома на типичные расы NPC.
По аналогии с get_creature.py: используется encounter_generator
при вызове get_npc, чтобы ограничить пул рас биомом.
Пустой список (или отсутствующий биом) = все расы без ограничений.
"""
NPC_RACES_BY_ENV: dict[str, list[str]] = {
"arctic": [
"Human", # основное население севера
"Goliath", # горные и арктические кочевники
"Half-Orc", # выносливые, часто в северных племенах
"Dwarf", # горные кланы у края ледников
"Orc", # северные племена
"Genasi", # воздушные и водные генази — редко, но возможно
"Tiefling", # изгнанники и одиночки
],
"coastal": [
"Human", # рыбаки, моряки, торговцы
"Half-Elf", # портовые города полны полукровок
"Triton", # прибрежные общины, выходящие на сушу
"Genasi", # водные генази — у моря естественны
"Dwarf", # морские торговцы
"Halfling", # торговые суда, таверны
"Gnome", # механики, картографы
"Tabaxi", # странствующие торговцы с далёких берегов
"Tiefling", # портовые города терпимы к чужакам
"Half-Orc", # докеры, наёмники
"Kenku", # воры и информаторы в портах
"Lizardfolk", # прибрежные болота рядом
"Orc", # пираты, наёмные моряки
"Aasimar", # редко, но встречаются
],
"desert": [
"Human", # основное население пустынь
"Genasi", # огненные и воздушные — у себя дома
"Tabaxi", # кочевые охотники
"Tiefling", # торговые пути, одиночки
"Half-Elf", # торговцы на маршрутах
"Dragonborn", # кланы в руинах древних империй
"Gnome", # алхимики, искатели артефактов
"Yuan-ti Pureblood", # их цивилизации исторически в пустынях
"Kobold", # в руинах и пещерах под песком
"Halfling", # торговые караваны
"Aasimar", # странники, несущие миссию
"Half-Orc", # наёмники охраны каравана
"Lizardfolk", # оазисы, реки
],
"forest": [
"Human", # охотники, дровосеки, деревни
"Elf", # лесные общины — естественная среда
"Half-Elf", # дети смешанных союзов
"Firbolg", # хранители леса
"Gnome", # лесные гномы в чаще
"Halfling", # деревни на опушках
"Wood Elf", # лесные эльфы
"Goblin", # банды в чаще
"Kobold", # норы под корнями
"Tabaxi", # охотники-одиночки
"Kenku", # падальщики и воры
"Half-Orc", # изгнанники, охотники
"Orc", # племена в глубоком лесу
"Tiefling", # отшельники, беглецы
"Aasimar", # странники
"Lizardfolk", # у болотистых рек
"Dragonborn", # редкие кланы
"Satyr", # фейские опушки
"Genasi", # природные генази
],
"grassland": [
"Human", # фермеры, пастухи, кочевники
"Halfling", # сельские общины
"Half-Orc", # племена степей
"Orc", # кочевые орды
"Gnome", # деревни торговцев
"Half-Elf", # странствующие торговцы
"Goliath", # кочевые воины
"Tabaxi", # охотники на просторах
"Dragonborn", # кланы воинов
"Tiefling", # одиночки среди людских общин
"Kenku", # у дорог и трактов
"Kobold", # норы в холмах
"Aasimar", # редкие странники
"Leonin", # прайды в открытых равнинах — их естественная среда
"Genasi", # воздушные генази
],
"hill": [
"Human", # деревни и фермы
"Dwarf", # холмовые кланы
"Halfling", # норы в холмах — классическая среда
"Gnome", # холмовые гномы
"Half-Orc", # наёмники и изгнанники
"Orc", # племена холмов
"Goblin", # многочисленны в холмах
"Hobgoblin", # военные лагеря
"Kobold", # шахты и норы
"Tiefling", # одиночки
"Half-Elf", # торговцы между деревнями
"Dragonborn", # воинские кланы
"Goliath", # у предгорий
"Kenku", # у дорог
"Aasimar", # редко
],
"mountain": [
"Human", # горные деревни, монастыри
"Dwarf", # горные твердыни — их дом
"Goliath", # высокогорные кочевники
"Dragonborn", # горные кланы
"Gnome", # шахтёры
"Half-Orc", # горные наёмники
"Orc", # горные племена
"Tiefling", # отшельники в горных монастырях
"Aasimar", # паломники, отшельники
"Kobold", # в шахтах и пещерах
"Goblin", # в расщелинах
"Hobgoblin", # военные форпосты
"Genasi", # земляные и огненные
"Kenku", # у горных троп
],
"swamp": [
"Human", # рыбаки, браконьеры, отшельники
"Lizardfolk", # болотные общины — их естественная среда
"Yuan-ti Pureblood", # древние культы в руинах
"Genasi", # водные генази
"Half-Orc", # изгнанники
"Goblin", # болотные банды
"Kobold", # в норах у воды
"Tiefling", # отшельники и культисты
"Kenku", # падальщики
"Orc", # племена болот
"Gnome", # алхимики, охотники за ингредиентами
"Half-Elf", # искатели приключений
"Tabaxi", # охотники
"Aasimar", # редко, миссионеры
],
"underdark": [
"Dwarf", # дуэргары и обычные дварфы в приграничных крепостях
"Gnome", # глубинные гномы (svirfneblin)
"Elf", # дроу
"Half-Elf", # потомки дроу и поверхностных рас
"Goblin", # многочисленны в пещерах
"Hobgoblin", # военные отряды
"Kobold", # повсюду в туннелях
"Orc", # глубинные кланы
"Half-Orc", # среди орочьих кланов
"Tiefling", # культисты, беглецы с поверхности
"Genasi", # земляные и огненные у жерл
"Aasimar", # редчайшие — пленники или странники
"Dragonborn", # редкие кланы, связанные с глубинными драконами
"Gith", # githyanki и githzerai проходят через Андердарк
"Human", # шахтёры, искатели, беглецы с поверхности
"Bugbear", # охотники в темноте
],
"underwater": [
"Triton", # подводные общины — их дом
"Genasi", # водные генази
"Human", # редко, с магической защитой
"Half-Elf", # с зельями или артефактами
"Aasimar", # миссионеры из морских храмов
],
"urban": [
"Human", # большинство населения городов
"Half-Elf", # везде как рыба в воде
"Dwarf", # торговцы, ремесленники
"Gnome", # изобретатели, алхимики, иллюзионисты
"Halfling", # воры, торговцы, слуги
"Tiefling", # городская среда терпима или враждебна — в любом случае они здесь
"Half-Orc", # охранники, докеры, наёмники
"Elf", # послы, маги, торговцы
"Dragonborn", # воины, гильдейские члены
"Aasimar", # жрецы, паладины
"Kenku", # воры, информаторы, гонцы
"Goblin", # трущобы, подземелья под городом
"Kobold", # слуги, механики в мастерских
"Tabaxi", # торговцы из дальних стран
"Orc", # охранники, строители
"Bugbear", # бандиты, вышибалы
"Hobgoblin", # наёмные солдаты, городская стража
"Genasi", # маги, ремесленники
"Lizardfolk", # редко, торговые посольства
"Yuan-ti Pureblood", # инфильтраторы в богатых кварталах
"Gith", # очень редко, искатели артефактов
"Satyr", # артисты, бродяги
],
"nine_hells": [
"Tiefling", # чувствуют зов крови
"Human", # авантюристы, культисты, проклятые
"Aasimar", # пленники или посланники
"Dragonborn", # кланы, заключившие инфернальные договоры
"Half-Elf", # искатели запретного знания
"Gith", # githyanki — союзники Тиамат
"Genasi", # огненные генази
"Half-Orc", # наёмники на инфернальной службе
],
"astral_sea": [
"Human", # авантюристы, искатели
"Gith", # githyanki — хозяева Астрального моря
"Aasimar", # небесные странники
"Tiefling", # торговцы между планами
"Genasi", # воздушные генази
"Half-Elf", # дипломаты между планарными фракциями
"Dragonborn", # планарные рыцари
"Gnome", # исследователи и картографы планов
],
"feywild": [
"Elf", # тесно связаны с Феидом
"Half-Elf", # притянуты фейской кровью
"Gnome", # лесные гномы — почти фейские существа
"Satyr", # их родной план
"Tiefling", # изгнанники, ищущие красоты
"Halfling", # любопытные путешественники
"Human", # заблудившиеся или призванные
"Firbolg", # хранители фейских рощ
"Aasimar", # посланники в фейские дворы
"Genasi", # природные генази
"Tabaxi", # очарованные странники
"Dragonborn", # редко, по древним договорам
],
"plane_of_air": [
"Aarakocra", # коренные обитатели облачных городов
"Genasi", # воздушные генази, рождённые стихией
"Djinn", # правят дворцами, редко общаются с чужаками
"Elf", # искатели знаний, пилоты летучих кораблей
"Human", # купцы, наёмники, беглецы
"Tiefling", # дипломаты или изгнанники
"Aasimar", # посланники богов ветра
"Gith", # githyanki рейдеры, githzerai отшельники
"Gnome", # изобретатели летательных аппаратов
"Halfling", # торговцы на воздушных рынках
"Kenku", # шпионы и воры при дворах джиннов
"Tabaxi", # охотники на высоте, ценят свободу
"Dragonborn", # воины, связанные с небесными драконами
],
"plane_of_earth": [
"Dwarf", # хозяева подземных твердынь, шахтёры
"Gnome", # глубинные гномы, камнерезы и иллюзионисты
"Genasi", # земляные генази, хранители пещер
"Goliath", # кочевники горных хребтов
"Half-Orc", # наёмники, охрана караванов
"Orc", # племена в глубоких пещерах
"Dragonborn", # кланы, связанные с драконами земли
"Tiefling", # искатели древней силы
"Aasimar", # паломники к священным местам
"Goblin", # банды в туннелях
"Kobold", # мастера ловушек и шахтёры
"Hobgoblin", # военные отряды
"Dao", # джинны земли, правители дворцов
"Duergar", # тёмные дварфы, злобные обитатели глубин
],
"plane_of_fire": [
"Genasi", # огненные генази, коренные жители
"Tiefling", # заключают сделки с эфритами
"Dragonborn", # рыцари, связанные с драконами огня
"Azer", # огненные дварфы, кузнецы
"Efreet", # джинны огня, правители-тираны
"Half-Orc", # наёмники в армиях эфритов
"Orc", # племена у жерл вулканов
"Goblin", # слуги и рабочая сила
"Kobold", # хранители сокровищ в горячих пещерах
"Aasimar", # посланники добра, пытаются смягчить тиранию
"Human", # авантюристы, купцы, беженцы
"Dwarf", # горные дварфы, искатели редких руд
"Gith", # рейдеры или отшельники
],
"plane_of_water": [
"Triton", # коренные обитатели, стражи глубин
"Genasi", # водные генази, лоцманы и целители
"Elf", # морские эльфы, кочевники рифов
"Human", # моряки, торговцы, пираты
"Aasimar", # посланники морских божеств
"Tiefling", # изгои или пираты глубин
"Dragonborn", # воины, связанные с морскими драконами
"Lizardfolk", # охотники на болотах и мелководье
"Dwarf", # подводные крепости, добытчики жемчуга
"Gnome", # изобретатели подводных аппаратов
"Marid", # джинны воды, своенравные правители
"Merfolk", # рыбаки, певцы, хранители знаний
],
}
def get_npc_races(env: str) -> list[str]:
"""
Возвращает список рас для биома.
Если биом не найден или список пустой — возвращает [],
что в get_npc означает 'все расы'.
"""
return NPC_RACES_BY_ENV.get(env.lower().strip(), [])