Night troll: различия между версиями
GeloMor (обсуждение | вклад) мНет описания правки |
GeloMor (обсуждение | вклад) Нет описания правки |
||
| Строка 218: | Строка 218: | ||
[CASTE_NAME:hag groom of twilight:hag grooms of twilight:hag groom of twilight] | [CASTE_NAME:hag groom of twilight:hag grooms of twilight:hag groom of twilight] | ||
[SELECT_CASTE:ALL]|title=Пример raws (извлечено из world.sav)}} | [SELECT_CASTE:ALL]|title=Пример raws (извлечено из world.sav)}} | ||
{{Scriptdata}} | |||
{{Creatures}} | {{Creatures}} | ||
[[Категория:Избегающие ловушек]] | [[Категория:Избегающие ловушек]] | ||
Версия от 16:00, 21 октября 2025

Ночные тролли Ñ — разновидность ночных тварей. Это сверхъестественные монстры, похищающие негоблинских цивилизованных существ, превращая их в своих супругов, а затем спаривается с ними для получения молодняка. Все дети того же пола, что и ночной тролль, и никогда того, что у супруга, если они только не были как-то зачаты в режиме крепости. В режиме приключений ночные тролли и их супруги могут стать целью квестов. Они не связаны с обычными троллями.
Графически спрайты, которые используют титан и забытый зверь, будут изображать чёрных загадочных существ, напоминающих сгенерированный внешний вид, который им был придан. То же используется для других процедурно генерируемых существ, таких как и бугимены и малые эксперименты. Спрайты, которые используют ночные тролли, меньше, чем у других процедурных существ, таких как демоны, ангелы и мегачудовища.
Характеристики

Подобно бугименам, забытым тварям и титанам, все ночные тролли генерируются случайным образом при создании мира и отличаются друг от друга. Их число, как правило, зависит от размера мира, но может напрямую контролироваться при продвинутой генерации мира — в сиде мира при "Number of Night Troll Types" установленном на 0 не будет никаких ночных троллей. Не все ночные тролли называются именно так — возможные имена кроме слов, обозначающих night, evil или darkness, включают bridegroom, crone, freak, groom, hag, horror, man, monster, ogre, ogress, troll и woman. Ночные тролли относятся к сферам смерти и ночи и будут названы соответствующим образом.
Хотя ночные тролли генерируются процедурно, все они обладают определенными общими характеристиками. Все они гуманоиды, сказочные, с принадлежностью ко злу, с дополнительными или отсутствующими чертами; например, большие пернатые женщины или крупные одноглазые мужчины без кожи с рогами и хоботом. У некоторых ночных троллей есть крылья, которые дают им возможность полёта, хотя они будут использовать их только во время борьбы с существами, которые также используют умение летать. Их описание всегда содержит способ их движения (например, неровные движения, дергающиеся движения) и подробное описание их кожи (гладкая, грубая, бородавчатая, кожистая и т. д.). Их логово выглядит как насыпь или нора в земле с дверью или люком. В зависимости от ночного тролля, они могут содержать различные инструменты (ножи, вилки, тесаки), небольшое количество разбросанных монет и одежду их жертв, трупы, пищу из органов или костей разумных существ, котлы с кровью или водой с различной едой (мясо, кости, целые скелеты, останки вредителей, редко даже элементы брони), костную муку и вредителей, черепа жертв как трофеи, и даже жернова. Обычно в логове живёт всего один тролль, но иногда вы можете встретить целые семьи из пяти или даже десяти существ. Логова ночных троллей, согласно Toady One, имеют уникальный тег, позволяющий предметам, расположенным там, не разрушаться и не гнить.
Все ночные тролли обладают навыками борьбы, кусания, сражения, битья, пинания, уклонения и наблюдения на уровне Talented, а также бонусами ко всем физическим атрибутам. Ночные тролли могут дышать под водой, не чувствуют усталости, не могут быть оглушены и невосприимчивы к боли, тошноте, головокружению и лихорадке. Ночные тролли не нуждаются ни в еде, ни в воде, ни во сне, ни в том, чтобы дышать, то есть их нельзя утопить или задушить. Интересно, что в их raw-файлах также прописана невосприимчивость к ловушкам, способность разрушать здания и ценность питомца 2000; в режиме крепости с ними можно столкнуться только если вторгнуться в их логово, а там ночные тролли почти не могут разрушать здания или взаимодействовать с ловушками, а также у них нет необходимых токенов для дрессировки (но некоторые виды ночных троллей являются [SLOW_LEARNER] и очень редко, возможно, из-за бага, могут стать приспешниками гоблинов). Все ночные тролли могут воспринимать невидимых живых существ как ☼ так же, как вампиры, хотя это обычно нельзя увидеть в игре, поскольку ночные тролли не являются играбельной расой.
Размеры тела ночных тролля сильно варьируется, но точные рамки диапазона не известны: от размеров рослого дварфа, до размера взрослого оленя. Супруги ночных троллей могут быть меньше, чем их похитители, но это зависит от вида ночных троллей. Приключенцы могут чувствовать запах ночных троллей с помощью o, который описывается по-разному, как запах "смерти", "печёной плоти" или "жучков".
Дварфам могут нравится ночные тролли за их macabre ways.
Размножение ночных троллей
Как сказано выше, ночные тролли должны похитить существо, не принадлежащее гоблинской цивилизации и превратить свою жертву в другого ночного тролля противоположного пола (процесс, с помощью которого это делается, неизвестен, равно как и неизвестна причина, по которой это нельзя сделать с гоблинами) для размножения, но любопытно, что тролль-похититель может быть как мужчиной, так и женщиной, и в данном мире легко может быть несколько троллей обоих полов. Причина, по которой ночные тролли ищут жертв для похищения, а не просто размножаются между собой, неизвестна, но тот факт, что молодые ночные тролли всегда одного пола с родителем-похитителем, предполагает, что может быть какая-то проблема с размножением между "естественно рожденными" ночными троллями (потомство бесполое, неспособное выносить плод до срока и т. д.) Поскольку предполагается, что ночные тролли обладают разумом, также может быть просто их культурное табу против спаривания с другим ночным троллем, которого они не похитили и не трансформировали сами, хотя в этом случае на первый план выходит вопрос о том, почему у них такая способность трансформации вообще есть.
Неизвестно, могут ли супруги спариваться с другим супругом противоположного пола (или вообще с любым ночным троллем, кроме того, который их преобразил), хотя это, конечно, было бы довольно редким событием даже если вообще возможным. Также неизвестно, могут ли супруги похищать и трансформировать супругов уже для себя (например, если ночной тролль, изначально похитивший их, умирает).
Интересным аспектом размножения ночных троллей является то, что оно квалифицируется как генетический барьер, означающий, что если бы гены и мутации были добавлены в качестве игровой механики, изначальные ночные тролли мужского пола и изначальные ночные тролли женского пола в конечном итоге разделятся на отдельные виды, поскольку мутация, возникшая среди одного пола, не могла бы попасть в генофонд другого пола.
Если ночные тролли рожают в режиме крепости, дети будут дружественными крепости. Ночные тролли не будут перетаскивать своих детенышей, за исключением случаев, когда они были сделаны жителями крепости через dfhack.
Борьба с ночными троллями
Ночные тролли достаточно сильные противники, но не особенно опасны, если встречаются в одиночку. Несмотря на это, они довольно большие, поэтому бороться с ними довольно сложно, также им сложнее нанести урон тупыми атаками чем людям. Кроме того, они невосприимчивы к боли и им не нужно дышать, поэтому их нельзя заставить потерять сознание и они не задохнутся.
У ночных троллей изредка есть в их логове один из разделочных инструментов, — например, нож или тесак. Обычно они нападают без оружия и могут, из-за их большого размера, нанести серьезный вред своими ударами, пинками и, особенно, укусами. На самом деле зубы обычно являются их самым опасным оружием, поэтому, если ночной тролль держит в руках режущий инструмент, вам лучше не разоружать его, поскольку они всегда отдают приоритет вооруженным атакам. Особенно избегайте атак в позвоночник: для ночного тролля это никогда не будет смертельной раной, поскольку для жизни ему не нужны функции легких; все, что он сделает, это лишит их возможности использовать свои ноги, руки или, если они у них есть, крылья (и то, и другое и так можно вывести из строя прицельными ударами), но заставит их всегда использовать свою самую сильную атаку.
Они могут умереть от кровопотери, повреждения головного мозга, обезглавливания и разрубания пополам (отрезания нижней части тела). Они никогда не носят одежду или доспехи, и поэтому их конечности уязвимы для отрубания. Пробивающие и рубящие атаки наносят им большой урон. Будьте особенно осторожны с троллями и другими созданиями ночи, у которых есть рога.
Пример raws (извлечено из world.sav) |
|---|
[OBJECT:CREATURE]
[CREATURE:NIGHT_CREATURE_26]
[NAME:hag of twilight:hags of twilight:hag of twilight]
[GENERATED]
[ATTACK_TRIGGER:20:0:0]
[NIGHT_CREATURE_HUNTER]
[BIOME:ANY_FOREST]
[BIOME:ANY_SHRUBLAND]
[BIOME:ANY_SAVANNA]
[BIOME:ANY_GRASSLAND]
[BIOME:ANY_WETLAND]
[BIOME:TUNDRA]
[CASTE:FEMALE]
[FEMALE]
[SPOUSE_CONVERTER]
[ORIENTATION:MALE:0:0:1]
[ORIENTATION:FEMALE:1:0:0]
[CASTE:MALE]
[MALE]
[CONVERTED_SPOUSE]
[SELECT_CASTE:ALL]
[CAN_LEARN]
[CAN_SPEAK]
[SENSE_CREATURE_CLASS:15:4:0:1]
[PHYS_ATT_RANGE:STRENGTH:450:550:700:750:800:850:900]
[PHYS_ATT_RANGE:AGILITY:1000:1250:1500:2000:2250:2500:3000]
[PHYS_ATT_RANGE:TOUGHNESS:850:900:950:1000:1050:1100:1150]
[PHYS_ATT_RANGE:ENDURANCE:850:900:950:1000:1050:1100:1150]
[PHYS_ATT_RANGE:RECUPERATION:450:1050:1150:1250:1350:1550:2250]
[PHYS_ATT_RANGE:DISEASE_RESISTANCE:700:1300:1400:1500:1600:1800:2500]
[MENT_ATT_RANGE:ANALYTICAL_ABILITY:1250:1500:1750:2000:2500:3000:5000]
[MENT_ATT_RANGE:FOCUS:1250:1500:1750:2000:2500:3000:5000]
[MENT_ATT_RANGE:WILLPOWER:1250:1500:1750:2000:2500:3000:5000]
[MENT_ATT_RANGE:PATIENCE:0:333:666:1000:2333:3666:5000]
[MENT_ATT_RANGE:MEMORY:1250:1500:1750:2000:2500:3000:5000]
[MENT_ATT_RANGE:LINGUISTIC_ABILITY:450:1050:1150:1250:1350:1550:2250]
[MENT_ATT_RANGE:MUSICALITY:0:333:666:1000:2333:3666:5000]
[MENT_ATT_RANGE:SOCIAL_AWARENESS:700:1300:1400:1500:1600:1800:2500]
[PERSONALITY:BASHFUL:0:0:0]
[PERSONALITY:STRESS_VULNERABILITY:0:0:0]
[PERSONALITY:FRIENDLINESS:0:0:0]
[PERSONALITY:DISDAIN_ADVICE:100:100:100]
[PERSONALITY:CHEER_PROPENSITY:0:0:0]
[PERSONALITY:GRATITUDE:0:0:0]
[PERSONALITY:TRUST:0:0:0]
[PERSONALITY:ALTRUISM:0:0:0]
[PERSONALITY:CRUELTY:100:100:100]
[NATURAL_SKILL:WRESTLING:6]
[NATURAL_SKILL:BITE:6]
[NATURAL_SKILL:GRASP_STRIKE:6]
[NATURAL_SKILL:STANCE_STRIKE:6]
[NATURAL_SKILL:MELEE_COMBAT:6]
[NATURAL_SKILL:DODGING:6]
[NATURAL_SKILL:SITUATIONAL_AWARENESS:6]
[DIFFICULTY:1]
[LAIR:SIMPLE_BURROW:50]
[LAIR:SIMPLE_MOUND:50]
[LAIR_CHARACTERISTIC:HAS_DOORS:100]
[HABIT_NUM:TEST_ALL]
[HABIT:GRIND_BONE_MEAL:50]
[HABIT:COOK_BLOOD:50]
[HABIT:GRIND_VERMIN:50]
[HABIT:COOK_VERMIN:50]
[HABIT:COOK_PEOPLE:50]
[HABIT:COLLECT_TROPHIES:50]
[ODOR_STRING:death]
[ODOR_LEVEL:90]
[NO_DRINK]
[NO_EAT]
[NO_SLEEP]
[BODY_APPEARANCE_MODIFIER:HEIGHT:90:95:98:100:102:105:110]
[BODY_APPEARANCE_MODIFIER:BROADNESS:90:95:98:100:102:105:110]
[LARGE_PREDATOR]
[EVIL]
[SUPERNATURAL]
[FANCIFUL]
[AMPHIBIOUS]
[PETVALUE:2000]
[GRASSTRAMPLE:20]
[BUILDINGDESTROYER:2]
[ALL_ACTIVE]
[SWIMS_INNATE]
[TRAPAVOID]
[NOPAIN]
[NOSTUN]
[NONAUSEA]
[NOFEAR]
[NOEXERT]
[NO_DIZZINESS]
[NO_FEVERS]
[LARGE_PREDATOR]
[SPHERE:DEATH]
[SPHERE:NIGHT]
[SELECT_CASTE:FEMALE]
[BODY_SIZE:0:0:5900]
[BODY_SIZE:2:0:29500]
[BODY_SIZE:12:0:118000]
[SELECT_CASTE:MALE]
[BODY_SIZE:0:0:106000]
[SELECT_CASTE:ALL]
[BABY:1]
[CHILD:12]
[CREATURE_TILE:165]
[BODY:RCP_UPPER_BODY:RCP_LOWER_BODY:RCP_NECK:RCP_HEAD:RCP_TWO_PART_ARMS:RCP_TWO_PART_LEGS:RCP_TAIL:RCP_2_EYES:RCP_LUNGS:RCP_HEART:RCP_GUTS:RCP_THROAT:RCP_SPINE:RCP_UPPER_SPINE:RCP_BRAIN:RCP:SKULL:RCP_MOUTH:RCP_TONGUE:RCP_RIBS]
[CANOPENDOORS]
[EQUIPS]
[BODY_DETAIL_PLAN:STANDARD_MATERIALS]
[REMOVE_MATERIAL:HAIR]
[BODY_DETAIL_PLAN:STANDARD_TISSUES]
[REMOVE_TISSUE:HAIR]
[BODY_DETAIL_PLAN:VERTEBRATE_TISSUE_LAYERS:SKIN:FAT:MUSCLE:BONE:CARTILAGE]
[BODY_DETAIL_PLAN:STANDARD_HEAD_POSITIONS]
[BODY_DETAIL_PLAN:HUMANOID_HEAD_POSITIONS]
[BODY_DETAIL_PLAN:HUMANOID_RIBCAGE_POSITIONS]
[BODY_DETAIL_PLAN:HUMANOID_RELSIZES]
[USE_MATERIAL_TEMPLATE:SINEW:SINEW_TEMPLATE]
[TENDRONS:LOCAL_CREATURE_MAT:SINEW:200]
[LIGAMENTS:LOCAL_CREATURE_MAT:SINEW:200]
[HAS_NERVES]
[NOBREATHE]
[HOMEOTERM:10040]
[SELECT_MATERIAL:SKIN]
[STATE_COLOR:ALL_SOLID:GRAY]
[NO_UNIT_TYPE_COLOR]
[COLOR:2:0:0]
[SELECT_TISSUE_LAYER:HEART:BY_CATEGORY:HEART]
[PLUS_TISSUE_LAYER:SKIN:BY_CATEGORY:THROAT]
[TL_MAJOR_ARTERIES]
[USE_MATERIAL_TEMPLATE:BLOOD:BLOOD_TEMPLATE]
[BLOOD:LOCAL_CREATURE_MAT:BLOOD:LIQUID]
[CREATURE_CLASS:GENERAL_POISON]
[ATTACK:PUNCH:BODYPART:BY_TYPE:GRASP]
[ATTACK_SKILL:GRASP_STRIKE]
[ATTACK_VERB:punch:punches]
[ATTACK_CONTACT_PERC:100]
[ATTACK_PREPARE_AND_RECOVER:2:2]
[ATTACK_FLAG_WITH]
[ATTACK_PRIORITY:MAIN]
[ATTACK:KICK:BODYPART:BY_TYPE:STANCE]
[ATTACK_SKILL:STANCE_STRIKE]
[ATTACK_VERB:kick:kicks]
[ATTACK_CONTACT_PERC:100]
[ATTACK_PREPARE_AND_RECOVER:2:2]
[ATTACK_FLAG_WITH]
[ATTACK_PRIORITY:MAIN]
[ATTACK_FLAG_BAD_MULTIATTACK]
[ATTACK:BITE:BODYPART:BY_CATEGORY:MOUTH]
[ATTACK_SKILL:BITE]
[ATTACK_VERB:bite:bites]
[ATTACK_CONTACT_PERC:100]
[ATTACK_PREPARE_AND_RECOVER:2:2]
[ATTACK_PRIORITY:MAIN]
[ATTACK_FLAG_CANLATCH]
[GAIT:SWIM:Maximum Swim Speed:725:10:3:2175:50:LAYERS_SLOW:STRENGTH:AGILITY:STEALTH_SLOWS:50]
[GAIT:SWIM:Faster Swim:1450:5:3:2175:10:LAYERS_SLOW:STRENGTH:AGILITY:STEALTH_SLOWS:20]
[GAIT:SWIM:Fast Swim:2175:NO_BUILD_UP:5:LAYERS_SLOW:STRENGTH:AGILITY:STEALTH_SLOWS:10]
[GAIT:SWIM:Swim:2900:NO_BUILD_UP:0]
[GAIT:SWIM:Slow Swim:3900:NO_BUILD_UP:0]
[GAIT:SWIM:Creeping Swim:5900:NO_BUILD_UP:0]
[GAIT:WALK:Sprint:200:10:3:600:50:LAYERS_SLOW:STRENGTH:AGILITY:STEALTH_SLOWS:50]
[GAIT:WALK:Run:400:5:3:600:10:LAYERS_SLOW:STRENGTH:AGILITY:STEALTH_SLOWS:20]
[GAIT:WALK:Jog:600:NO_BUILD_UP:5:LAYERS_SLOW:STRENGTH:AGILITY:STEALTH_SLOWS:10]
[GAIT:WALK:Walk:800:NO_BUILD_UP:0]
[GAIT:WALK:Stroll:1700:NO_BUILD_UP:0]
[GAIT:WALK:Creep:2600:NO_BUILD_UP:0]
[GAIT:CRAWL:Scramble:225:10:3:675:50:LAYERS_SLOW:STRENGTH:AGILITY:STEALTH_SLOWS:50]
[GAIT:CRAWL:Faster Crawl:450:5:3:675:10:LAYERS_SLOW:STRENGTH:AGILITY:STEALTH_SLOWS:20]
[GAIT:CRAWL:Fast Crawl:675:NO_BUILD_UP:5:LAYERS_SLOW:STRENGTH:AGILITY:STEALTH_SLOWS:10]
[GAIT:CRAWL:Crawl:900:NO_BUILD_UP:0]
[GAIT:CRAWL:Slow Crawl:1900:NO_BUILD_UP:0]
[GAIT:CRAWL:Creep:2900:NO_BUILD_UP:0]
[GAIT:CLIMB:Scramble:225:10:3:675:50:LAYERS_SLOW:STRENGTH:AGILITY:STEALTH_SLOWS:50]
[GAIT:CLIMB:Faster Climb:450:5:3:675:10:LAYERS_SLOW:STRENGTH:AGILITY:STEALTH_SLOWS:20]
[GAIT:CLIMB:Fast Climb:675:NO_BUILD_UP:5:LAYERS_SLOW:STRENGTH:AGILITY:STEALTH_SLOWS:10]
[GAIT:CLIMB:Climb:900:NO_BUILD_UP:0]
[GAIT:CLIMB:Slow Climb:1900:NO_BUILD_UP:0]
[GAIT:CLIMB:Creep:2900:NO_BUILD_UP:0]
[DESCRIPTION:A large humanoid with lidless eyes. It has a short tail and its joints are backward. Its gray skin is waxy. Now you will know why you fear the night.]
[PREFSTRING:macabre ways]
[SELECT_CASTE:FEMALE]
[CASTE_NAME:hag of twilight:hags of twilight:hag of twilight]
[SELECT_CASTE:MALE]
[CASTE_NAME:hag groom of twilight:hag grooms of twilight:hag groom of twilight]
[SELECT_CASTE:ALL] |
night_troll_names={
{name="troll",names="trolls",name_adj="troll",cond=function(options) return true end},
{name="man",names="men",name_adj="man",cond=function(options) return adj_exploitable_check(options.fadj) and options.is_male_version end},
{name="woman",names="women",name_adj="woman",cond=function(options) return adj_exploitable_check(options.fadj) and not options.is_male_version end},
{name="brute",names="brutes",name_adj="brutish",cond=function(options) return options.is_male_version and options.night_creature_strength_pref and adj_exploitable_check(options.fadj) end},
{name="hag",names="hags",name_adj="hag",cond=function(options) return not options.is_male_version end},
{name="crone",names="crones",name_adj="crone",cond=function(options) return not options.is_male_version end},
{name="monster",names="monsters",name_adj="monster",cond=function(options) return true end},
{name="creature",names="creatures",name_adj="creature",cond=function(options) return true end},
{name="ogre",names="ogres",name_adj="ogre",cond=function(options) return options.night_creature_strength_pref and options.is_male_version end},
{name="ogress",names="ogresses",name_adj="ogress",cond=function(options) return options.night_creature_strength_pref and not options.is_male_version end},
{name="freak",names="freak",name_adj="freak",cond=function(options) return adj_exploitable_check(options.fadj) end},
{name="horror",names="horrors",name_adj="horror",cond=function(options) return true end},
}
night_troll_flavor_adjs={
"night",
"dark",
"shadow",
"midnight",
"dusk",
"vile",
"wicked",
"twilight",
"moon",
"gloom",
"bleak",
}
night_troll_flavor={
{
add="it mutters to itself as it moves aimlessly",
flavor_adj={"muttering","grumbling","whispering","brooding"}
},
{
add="it groans from time to time",
flavor_adj={"groaning","moaning","whispering","brooding"}
},
{
add="it howls into high winds",
flavor_adj={"screaming","howling","baying","bellowing","shrieking","wailing"}
},
}
night_troll_strength_flavor={
{
add="it shambles sluggishly",
flavor_adj={}
},
{
add="it stamps the ground and snorts",
flavor_adj={}
},
{
add="it has a bloated body",
flavor_adj={"bloated"}
},
{
add="it lumbers along steadily from place to place",
flavor_adj={}
},
}
night_troll_agile_flavor={
{
add="its joints are backward",
flavor_adj={"backward"}
},
{
add="it moves with uneven jerking motions",
flavor_adj={}
},
{
add="its limbs jut out at asymmetric angles",
flavor_adj={"crooked","twisted"}
},
{
add="it lopes quickly along the ground",
flavor_adj={}
},
{
add="it strides in silence with purpose",
flavor_adj={}
},
}
night_troll_smells={
"bug innards",
"cooked flesh",
"death"
}
creatures.night_creature.troll.default=function(tok)
local lines={}
local options={
spheres={
NIGHT=true,
DEATH=true
},
fallback_pref_str="macabre ways",
token=tok
}
options.is_male_version=one_in(2)
if one_in(2) then
options.night_creature_strength_pref=true
else
options.night_creature_agile_pref=true
end
night_creature_universals(lines,options)
-- partially I started feeling split_to_lines is ugly,
-- partially I want to show there's no one right way to do it
-- hopefully my caprice isn't too aggravating
lines[#lines+1]="[NIGHT_CREATURE_HUNTER]"
lines[#lines+1]="[BIOME:ANY_FOREST]"
lines[#lines+1]="[BIOME:ANY_SHRUBLAND]"
lines[#lines+1]="[BIOME:ANY_SAVANNA]"
lines[#lines+1]="[BIOME:ANY_GRASSLAND]"
lines[#lines+1]="[BIOME:ANY_WETLAND]"
lines[#lines+1]="[BIOME:TUNDRA]"
if options.is_male_version then
lines[#lines+1]="[CASTE:MALE]"
lines[#lines+1]="[MALE]"
lines[#lines+1]="[SPOUSE_CONVERTER]"
lines[#lines+1]="[ORIENTATION:MALE:1:0:0]"
lines[#lines+1]="[ORIENTATION:FEMALE:0:0:1]"
lines[#lines+1]="[CASTE:FEMALE]"
lines[#lines+1]="[FEMALE]"
lines[#lines+1]="[CONVERTED_SPOUSE]"
else
lines[#lines+1]="[CASTE:FEMALE]"
lines[#lines+1]="[FEMALE]"
lines[#lines+1]="[SPOUSE_CONVERTER]"
lines[#lines+1]="[ORIENTATION:MALE:0:0:1]"
lines[#lines+1]="[ORIENTATION:FEMALE:1:0:0]"
lines[#lines+1]="[CASTE:MALE]"
lines[#lines+1]="[MALE]"
lines[#lines+1]="[CONVERTED_SPOUSE]"
end
lines[#lines+1]="[SELECT_CASTE:ALL]"
lines[#lines+1]="[CAN_LEARN]"
if one_in(2) then lines[#lines+1]="[SLOW_LEARNER]" end
lines[#lines+1]="[CAN_SPEAK]"
lines[#lines+1]="[SENSE_CREATURE_CLASS:GENERAL_POISON:15:4:0:1]"
if options.night_creature_strength_pref then
lines[#lines+1]="[PHYS_ATT_RANGE:STRENGTH:1000:1250:1500:2000:2250:2500:3000]"
lines[#lines+1]="[PHYS_ATT_RANGE:AGILITY:450:550:700:750:800:850:900]"
lines[#lines+1]="[PHYS_ATT_RANGE:TOUGHNESS:850:900:950:1000:1050:1100:1150]"
lines[#lines+1]="[PHYS_ATT_RANGE:ENDURANCE:850:900:950:1000:1050:1100:1150]"
options.special_walk_speed=1000
elseif options.night_creature_agile_pref then
lines[#lines+1]="[PHYS_ATT_RANGE:STRENGTH:450:550:700:750:800:850:900]"
lines[#lines+1]="[PHYS_ATT_RANGE:AGILITY:1000:1250:1500:2000:2250:2500:3000]"
lines[#lines+1]="[PHYS_ATT_RANGE:TOUGHNESS:850:900:950:1000:1050:1100:1150]"
lines[#lines+1]="[PHYS_ATT_RANGE:ENDURANCE:850:900:950:1000:1050:1100:1150]"
options.special_walk_speed=800;
elseif options.night_creature_strength_agile_pref then
lines[#lines+1]="[PHYS_ATT_RANGE:STRENGTH:1000:1150:1250:1500:2000:2250:2500]"
lines[#lines+1]="[PHYS_ATT_RANGE:AGILITY:1000:1150:1250:1500:2000:2250:2500]"
lines[#lines+1]="[PHYS_ATT_RANGE:TOUGHNESS:850:900:950:1000:1050:1100:1150]"
lines[#lines+1]="[PHYS_ATT_RANGE:ENDURANCE:850:900:950:1000:1050:1100:1150]"
options.special_walk_speed=850;
end
lines[#lines+1]="[PHYS_ATT_RANGE:RECUPERATION:450:1050:1150:1250:1350:1550:2250]"
lines[#lines+1]="[PHYS_ATT_RANGE:DISEASE_RESISTANCE:700:1300:1400:1500:1600:1800:2500]"
lines[#lines+1]="[MENT_ATT_RANGE:ANALYTICAL_ABILITY:1250:1500:1750:2000:2500:3000:5000]"
lines[#lines+1]="[MENT_ATT_RANGE:FOCUS:1250:1500:1750:2000:2500:3000:5000]"
lines[#lines+1]="[MENT_ATT_RANGE:WILLPOWER:1250:1500:1750:2000:2500:3000:5000]"
lines[#lines+1]="[MENT_ATT_RANGE:PATIENCE:0:333:666:1000:2333:3666:5000]"
lines[#lines+1]="[MENT_ATT_RANGE:MEMORY:1250:1500:1750:2000:2500:3000:5000]"
lines[#lines+1]="[MENT_ATT_RANGE:LINGUISTIC_ABILITY:450:1050:1150:1250:1350:1550:2250]"
lines[#lines+1]="[MENT_ATT_RANGE:MUSICALITY:0:333:666:1000:2333:3666:5000]"
lines[#lines+1]="[MENT_ATT_RANGE:SOCIAL_AWARENESS:700:1300:1400:1500:1600:1800:2500]"
--[[
MENTAL_ATTRIBUTE_CREATIVITY,
MENTAL_ATTRIBUTE_INTUITION,
MENTAL_ATTRIBUTE_SPATIAL_SENSE,
MENTAL_ATTRIBUTE_KINESTHETIC_SENSE,
MENTAL_ATTRIBUTE_EMPATHY,
]]
--lines[#lines+1]="[PERSONALITY:ANXIETY_PROPENSITY:0:0:0]"
--lines[#lines+1]="[PERSONALITY:DEPRESSION_PROPENSITY:0:0:0]"
lines[#lines+1]="[PERSONALITY:BASHFUL:0:0:0]"
lines[#lines+1]="[PERSONALITY:STRESS_VULNERABILITY:0:0:0]"
lines[#lines+1]="[PERSONALITY:FRIENDLINESS:0:0:0]"
--lines[#lines+1]="[PERSONALITY:ASSERTIVENESS:100:100:100]"
lines[#lines+1]="[PERSONALITY:DISDAIN_ADVICE:100:100:100]"
lines[#lines+1]="[PERSONALITY:CHEER_PROPENSITY:0:0:0]"
lines[#lines+1]="[PERSONALITY:GRATITUDE:0:0:0]"
lines[#lines+1]="[PERSONALITY:TRUST:0:0:0]"
lines[#lines+1]="[PERSONALITY:ALTRUISM:0:0:0]"
--lines[#lines+1]="[PERSONALITY:SWAYED_BY_EMOTIONS:0:0:0]"
lines[#lines+1]="[PERSONALITY:CRUELTY:100:100:100]"
--lines[#lines+1]="[PERSONALITY:PRIDE:100:100:100]"
add_regular_tokens(lines,options)
populate_sphere_info(lines,options)
local rcp={
name_string="humanoid",
tile='H',
body_base="HUMANOID",
c_class="AMPHIBIAN", -- FOR SKIN/ORGANS AND NO HAIR/FEATHERS AT FIRST
min_size=1,
cannot_have_shell=true
}
lines[#lines+1]="[NATURAL_SKILL:WRESTLING:6]"
lines[#lines+1]="[NATURAL_SKILL:BITE:6]"
lines[#lines+1]="[NATURAL_SKILL:GRASP_STRIKE:6]"
lines[#lines+1]="[NATURAL_SKILL:STANCE_STRIKE:6]"
lines[#lines+1]="[NATURAL_SKILL:MELEE_COMBAT:6]"
lines[#lines+1]="[NATURAL_SKILL:DODGING:6]"
lines[#lines+1]="[NATURAL_SKILL:SITUATIONAL_AWARENESS:6]"
lines[#lines+1]="[DIFFICULTY:3]"
lines[#lines+1]="[LAIR:SIMPLE_MOUND:50]"
lines[#lines+1]="[LAIR:SIMPLE_BURROW:50]"
lines[#lines+1]="[LAIR_CHARACTERISTIC:HAS_DOORS:100]"
lines[#lines+1]="[HABIT_NUM:TEST_ALL]"
lines[#lines+1]="[HABIT:GRIND_BONE_MEAL:50]"
lines[#lines+1]="[HABIT:COOK_BLOOD:50]"
lines[#lines+1]="[HABIT:GRIND_VERMIN:50]"
lines[#lines+1]="[HABIT:COOK_VERMIN:50]"
lines[#lines+1]="[HABIT:COOK_PEOPLE:50]"
lines[#lines+1]="[HABIT:COLLECT_TROPHIES:50]"
lines[#lines+1]="[ODOR_STRING:"..pick_random(night_troll_smells).."]"
lines[#lines+1]="[ODOR_LEVEL:90]"
local body_size=70000+trandom(8)*10000+trandom(11)*1000
options.body_size=body_size
lines[#lines+1]="[SELECT_CASTE:"..(options.is_male_version and "MALE" or "FEMALE").."]"
lines[#lines+1]="[BODY_SIZE:0:0:"..tostring(math.floor(body_size/20)).."]"
lines[#lines+1]="[BODY_SIZE:2:0:"..tostring(math.floor(body_size/4)).."]"
lines[#lines+1]="[BODY_SIZE:12:0:"..tostring(math.floor(body_size)).."]"
body_size_properties(lines,body_size)
local spouse_size=math.floor(body_size*(trandom(51)+50)/100)
lines[#lines+1]="[SELECT_CASTE:"..(options.is_male_version and "FEMALE" or "MALE").."]"
add_body_size(lines,spouse_size)
lines[#lines+1]="[SELECT_CASTE:ALL]"
lines[#lines+1]="[BABY:1]"
lines[#lines+1]="[CHILD:18]"
lines[#lines+1]="[CREATURE_TILE:165]" --Ñ
options.custom_desc_func=function(options)
local add_tbl={}
options.flavor_adj = options.flavor_adj or {}
if one_in(4) then
add_tbl=pick_random(night_troll_flavor)
elseif options.night_creature_strength_pref then
add_tbl=pick_random(night_troll_strength_flavor)
options.flavor_adj[#options.flavor_adj+1]="lumbering"
options.flavor_adj[#options.flavor_adj+1]="hulking"
elseif options.night_creature_agile_pref then
add_tbl=pick_random(night_troll_agile_flavor)
options.flavor_adj[#options.flavor_adj+1]="narrow"
options.flavor_adj[#options.flavor_adj+1]="starved"
options.flavor_adj[#options.flavor_adj+1]="emaciated"
end
table_merge(options.flavor_adj,add_tbl.flavor_adj)
return add_tbl.add
end
options.flavor_adj=options.flavor_adj or {}
build_procgen_creature(rcp,lines,options)
table_merge(options.flavor_adj,night_troll_flavor_adjs)
night_troll_end_phrases=night_troll_end_phrases or {
" of the night",
" of evil",
" of twilight",
" of shadow",
}
options.potential_end_phrase = options.potential_end_phrase or {}
table_merge(options.potential_end_phrase,night_troll_end_phrases)
local name_str=""
local used_ending=false
local name={}
if trandom(#options.flavor_adj + #options.potential_end_phrase) >= #options.flavor_adj then
options.eadj=pick_random(options.potential_end_phrase)
name=pick_random_conditional(night_troll_names,"cond",options)
name_str=name.name..options.eadj..":"..name.names..options.eadj..":"..name.name_adj..options.eadj
used_ending=true
else
options.fadj=pick_random(options.flavor_adj)
name=pick_random_conditional(night_troll_names,"cond",options)
name_str=options.fadj.." "..name.name..":"..options.fadj.." "..name.names..":"..options.fadj.." "..name.name_adj
end
night_troll_wife_names=night_troll_wife_names or {
{"spouse","spouses"},
{"mate","mates"},
{"consort","consorts"},
{"wife","wives"},
{"bride","brides"},
}
night_troll_husband_names=night_troll_husband_names or {
{"spouse","spouses"},
{"mate","mates"},
{"consort","consorts"},
{"husband","husbands"},
{"bridegroom","bridegrooms"},
{"groom","grooms"}
}
local sn,sns="",""
if options.is_male_version then
sn,sns=table.unpack(pick_random(night_troll_wife_names))
lines[#lines+1]="[SELECT_CASTE:MALE]"
else
sn,sns=table.unpack(pick_random(night_troll_husband_names))
lines[#lines+1]="[SELECT_CASTE:FEMALE]"
end
local cstr=""
if used_ending then
cstr=name.name.." "..sn..options.eadj..":"..name.name.." "..sns..options.eadj..":"..name.name_adj.." "..sn..options.eadj
elseif one_in(2) then
cstr=options.fadj.." "..name.name.." "..sn..":"..options.fadj.." "..name.name.." "..sns..":"..options.fadj.." "..name.name.." "..sn
else
cstr=sn.." of the "..options.fadj.." "..name.name..":"..sns.." of the "..options.fadj.." "..name.name..":"..sn.." of the "..options.fadj.." "..name.name_adj
end
lines[#lines+1]="[CASTE_NAME:"..name_str.."]"
if options.is_male_version then lines[#lines+1]="[SELECT_CASTE:FEMALE]"
else lines[#lines+1] = "[SELECT_CASTE:MALE]" end
lines[#lines+1]="[CASTE_NAME:"..cstr.."]"
lines[#lines+1]="[GO_TO_START]"
lines[#lines+1]="[NAME:"..name_str.."]"
return {raws=lines,weight=1}
end
|