import random as r DRAGON_TYPES = ["Cat", "Fairy", "Sedan", "Brass", "Space", "Wolf", "Iron", "Spellcaster", "Green", "Red"] def rinterp(s1, l1, s2): def rfunc(): return f"{s1}{r.choice(l1)}{s2}" return rfunc prob = [ { 'id': 0, #integer 'name': rinterp("Baby ", DRAGON_TYPES, " Dragon"), # formatted string 'shortname': "dragon", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It's very naive about its power level.", # formatted string 'stats': [2,3,3,3], # four-integer list }, { 'id': 1, #integer 'name': f"Cat Dragon", # formatted string 'shortname': "dragon", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It's covered in fur; its Hairball Breath may deal Brains damage instead of Body.", # formatted string 'stats': [1,4,3,4], # four-integer list }, { 'id': 2, #integer 'name': f"Fairy Dragon", # formatted string 'shortname': "dragon", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "Its Glitter Breath makes targets super visible. It loves sweets.", # formatted string 'stats': [2,4,3,4], # four-integer list }, { 'id': 3, #integer 'name': f"Sedan Dragon", # formatted string 'shortname': "dragon", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It has four wings and Carbon Monoxide Breath. It may carry and use Gear.", # formatted string 'stats': [2,4,3,5], # four-integer list }, { 'id': 4, #integer 'name': f"Brass Dragon", # formatted string 'shortname': "dragon", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "A being of Order, it mimics a steampunk theme.", # formatted string 'stats': [4,3,4,4], # four-integer list }, { 'id': 5, #integer 'name': f"Space Dragon", # formatted string 'shortname': "dragon", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It has Solar Wind Breath that pushes targets back.", # formatted string 'stats': [3,4,4,5], # four-integer list }, { 'id': 6, #integer 'name': f"Wolf Dragons", # formatted string 'shortname': "dragons", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "They are covered in fur and attack in packs (the stats are for the pack).", # formatted string 'stats': [4,5,3,5], # four-integer list }, { 'id': 7, #integer 'name': f"Iron Dragon", # formatted string 'shortname': "dragon", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It's covered in actual iron and has Coal Dust Breath. It enjoys conquest and destruction for their own sake.", # formatted string 'stats': [3,5,5,5], # four-integer list }, { 'id': 8, #integer 'name': rinterp("", DRAGON_TYPES, " Dragon Spellcaster"), # formatted string 'shortname': "dragon", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It prefers to use spells rather than its physical attacks.", # formatted string 'stats': [4,5,6,4], # four-integer list }, { 'id': 9, #integer 'name': f"Old Green, the Dragon", # formatted string 'shortname': "dragon", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x != 9 and x != 10], # None or list of IDs 'needsName': False, # boolean 'note': "It will send its minion to attack first, and exhales a toxic, opaque gas to cover its escape if needed.", # formatted string 'stats': [5,3,6,6], # four-integer list }, { 'id': 10, #integer 'name': f"Old Red, the Dragon", # formatted string 'shortname': "dragon", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "It's bigger than you expect, even when you're expecting it. It melts things with its Fire Breath for fun.", # formatted string 'stats': [3,5,6,6], # four-integer list }, { 'id': 11, #integer 'name': f"Toxic Air", # formatted string 'shortname': "air", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "It might eat through protective layers, and is immune to Brains damage and automatically fails Brains rolls.", # formatted string 'stats': [0,6,0,6], # four-integer list }, { 'id': 12, #integer 'name': f"Friendly Living Asteroid", # formatted string 'shortname': "asteroid", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It wants to follow the kobolds home like the biggest possible puppy.", # formatted string 'stats': [2,3,1,6], # four-integer list }, { 'id': 13, #integer 'name': f"Aggressive Living Asteroid", # formatted string 'shortname': "asteroid", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It's an ambush hunter that sees ships as a crunchy outside with chewy centers.", # formatted string 'stats': [2,4,1,6], # four-integer list }, { 'id': 14, #integer 'name': f"Impending Nova", # formatted string 'shortname': "nova", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "Tick, tick, tick... Set a timer and start marking off Body. The nova goes off when its Body hits 0. It's immune to Brains damage and automatically fails Brains rolls.", # formatted string 'stats': [2,6,0,6], # four-integer list }, { 'id': 15, #integer 'name': f"Volcanic Eruption", # formatted string 'shortname': f"eruption", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "Its molten flow threatens to destroy something important. It is immune to Brains damage and automatically fails Brains rolls.", # formatted string 'stats': [4,5,0,6], # four-integer list }, { 'id': 16, #integer 'name': f"Tremors", # formatted string 'shortname': f"tremors", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "The earth shakes at the least opportune moments. They are immune to Brains damage and automatically fails Brains rolls.", # formatted string 'stats': [4,6,0,6], # four-integer list }, { 'id': 17, #integer 'name': f"Fire!", # formatted string 'shortname': f"fire", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "It may consume things not normally considered flammable. It is immune to Brains damage and automatically fails Brains rolls.", # formatted string 'stats': [5,6,0,6], # four-integer list }, { 'id': 18, #integer 'name': f"Volcano 'God'", # formatted string 'shortname': f"god", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x not in [9,10,18]], # None or list of IDs 'needsName': True, # boolean 'note': "It's not actually a god; it just likes destroying things with fire. Its minion may be a worshiper.", # formatted string 'stats': [4,5,3,6], # four-integer list }, { 'id': 19, #integer 'name': f"Tiny, Hungry Black Hole", # formatted string 'shortname': f"black hole", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "It's semi-intelligent and mobile. It might stalk ship-sized objects.", # formatted string 'stats': [4,6,3,6], # four-integer list }, { 'id': 20, #integer 'name': f"Cranky Nebula", # formatted string 'shortname': f"nebula", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It's a baby and wants attention. Its Brains reflects resilience against damage more than actual mental ability.", # formatted string 'stats': [4,5,6,6], # four-integer list }, { 'id': 21, #integer 'name': f"Sentient Angry Star", # formatted string 'shortname': f"star", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It demands tribute, and attacks with solar flares... but it can't move out of its orbit.", # formatted string 'stats': [5,4,5,6], # four-integer list }, { 'id': 22, #integer 'name': f"Elf Red Shirt Away Team", # formatted string 'shortname': f"elves", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "They don't have access to their own ship, but do have their own mission that may or may not conflict with the kobolds'.", # formatted string 'stats': [3,2,3,3], # four-integer list }, { 'id': 23, #integer 'name': f"Elf Scout Ship", # formatted string 'shortname': f"ship", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "A short-range ship that looks like a streamlined butterfly. Its crew is a pilot and a gunner.", # formatted string 'stats': [2,3,3,4], # four-integer list }, { 'id': 24, #integer 'name': f"Elf Guard Ship", # formatted string 'shortname': f"ship", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "A short-range ship that looks like a stinging insect. Its crew is a pilot and a gunner.", # formatted string 'stats': [2,4,3,4], # four-integer list }, { 'id': 25, #integer 'name': f"Elf Cargo Ship", # formatted string 'shortname': f"ship", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "A long-range ship that resembles a beetle. Its cargo might be anything, and its crew always assume hostile intentions.", # formatted string 'stats': [3,3,3,5], # four-integer list }, { 'id': 26, #integer 'name': f"Elf Long Range Scout", # formatted string 'shortname': f"ship", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': [22,23,24,25,27,29,30,31,32], # None or list of IDs 'needsName': True, # boolean 'note': "A long-range ship that resembles a waterfowl. It prefers to run rather than engage; if it flees, its minion is what's sent to investigate.", # formatted string 'stats': [4,3,4,4], # four-integer list }, { 'id': 27, #integer 'name': f"Detachment from the Elf Armada", # formatted string 'shortname': f"detachment", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "A small group of ships focused more on science than war, they're usually on a research, escort, or retrieval mission.", # formatted string 'stats': [4,3,5,4], # four-integer list }, { 'id': 28, #integer 'name': f"Elf Armada Shipyard", # formatted string 'shortname': f"shipyard", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': [22,23,24,25,26,27,29,30,31,32], # None or list of IDs 'needsName': True, # boolean 'note': "It resembles a giant tree.", # formatted string 'stats': [6,2,3,6], # four-integer list }, { 'id': 29, #integer 'name': f"Elf Stealth Special Ops Team", # formatted string 'shortname': f"team", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x not in [11,12,13,14,15,16,17,18,19,20,28]], # None or list of IDs 'needsName': False, # boolean 'note': "The team is almost certainly opposed to the kobolds' mission. Its first action will be done by surprise, and it will use its minion as a feint.", # formatted string 'stats': [4,6,4,4], # four-integer list }, { 'id': 30, #integer 'name': f"Elf Armada Carrier", # formatted string 'shortname': f"carrier", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It comes with a swarm of wasp fighters, each with 1 Body. The carrier resembles an enormous chrysalis.", # formatted string 'stats': [5,5,3,6], # four-integer list }, { 'id': 31, #integer 'name': f"Elf Armada Warship", # formatted string 'shortname': f"ship", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It looks like a bird of prey. It's heavily armed but not maneuverable, and attempts to use shielding to make up for its inability to dodge.", # formatted string 'stats': [6,6,2,6], # four-integer list }, { 'id': 32, #integer 'name': f"Elf Armada Flagship", # formatted string 'shortname': f"flagship", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [22,23,24,25,26,27,29,30,31], # None or list of IDs 'needsName': True, # boolean 'note': "It looks like a flying forest. Its captain assumes that all their orders will be followed - even orders given to non-elves.", # formatted string 'stats': [5,4,5,6], # four-integer list }, { 'id': 33, #integer 'name': f"Floating, Flaming Skull", # formatted string 'shortname': f"skull", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It likes a good joke. And a bad joke. And slapstick. And shooting fireballs out of its mouth. It's willing to bargain if the kobolds have something it wants.", # formatted string 'stats': [1,6,3,1], # four-integer list }, { 'id': 34, #integer 'name': f"Newly-Raised Vampire", # formatted string 'shortname': f"vampire", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They're power-mad and vastly overestimate their own abilities. The GM may interpret 'vampire powers' however they please.", # formatted string 'stats': [2,4,2,4], # four-integer list }, { 'id': 35, #integer 'name': f"Undead Sample Pack", # formatted string 'shortname': f"undead", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "A swarm of zombies and skeletons; each Body damage kills one. What they were before they died is the GM's choice.", # formatted string 'stats': [0,5,2,6], # four-integer list }, { 'id': 36, #integer 'name': f"Ranged Skeletons", # formatted string 'shortname': f"skeletons", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "They may have bows, ray guns, ray bows, or something else. Each Body damage kills one. They're bad at melee combat.", # formatted string 'stats': [2,5,2,5], # four-integer list }, { 'id': 37, #integer 'name': f"Old Lich who Wants Everyone to Stay Off Their Lawn", # formatted string 'shortname': f"lich", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They're grumpy, but secretly like having company. They claim to own whatever property they're on - whether or not it's true.", # formatted string 'stats': [4,2,6,3], # four-integer list }, { 'id': 38, #integer 'name': f"Zombie Brute Squad", # formatted string 'shortname': f"zombies", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "Each Body damage kills one. They can either be ordered to attack or to block; they won't change targets unless they're told to.", # formatted string 'stats': [3,5,2,6], # four-integer list }, { 'id': 39, #integer 'name': f"Vampire Royalty", # formatted string 'shortname': f"vampire", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [33,34,35,36,37,38,40,41,42,43,44], # None or list of IDs 'needsName': True, # boolean 'note': "They have lived this long by being patient and cautious. Despite that, their minion may not be 100% loyal.", # formatted string 'stats': [4,2,5,6], # four-integer list }, { 'id': 40, #integer 'name': f"Possessing Spirit", # formatted string 'shortname': f"spirit", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It enjoys the parody of life, and hates any reminder that it's dead. It inhabits a host body until its Body is reduced to 0, but it's not dead until its Brains is reduced to 0.", # formatted string 'stats': [4,4,5,5], # four-integer list }, { 'id': 41, #integer 'name': f"Vengeful Spirit", # formatted string 'shortname': f"spirit", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It wants revenge on whatever killed it, and it's willing to play the long game to get that revenge.", # formatted string 'stats': [6,6,6,2], # four-integer list }, { 'id': 42, #integer 'name': f"Eldritch Galaxy-Sized Unknowable Entity", # formatted string 'shortname': f"entity", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x not in [11,12,13,14,15,16,17,18,19,20,28]], # None or list of IDs 'needsName': True, # boolean 'note': "It has phenomenal cosmic power, but can only interact through portals. Its minion is tasked with maintaining the portal; if they stop, the entity is trapped on its side.", # formatted string 'stats': [2,6,6,6], # four-integer list }, { 'id': 43, #integer 'name': f"Necromantic Cult", # formatted string 'shortname': f"cult", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "Each Body damage kills one member, but the full cult may be much larger than what's encountered. Its membership may not be fully undead, but its leaders certainly are.", # formatted string 'stats': [5,5,5,5], # four-integer list }, { 'id': 44, #integer 'name': f"Mummified Protector", # formatted string 'shortname': f"mummy", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It wakes up when the place or object it protects is disturbed. All it wants is to go back to sleep - but if what it's protecting is destroyed, it will not rest until it has its revenge, and then goes dormant permanently.", # formatted string 'stats': [5,5,4,6], # four-integer list }, { 'id': 45, #integer 'name': f"Helperbot 1000", # formatted string 'shortname': f"robot", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "It's half as good as Helperbot 2000. It's more incompetent than malicious, but it will defend itself.", # formatted string 'stats': [4,2,2,3], # four-integer list }, { 'id': 46, #integer 'name': f"Robot Spiders!", # formatted string 'shortname': f"spiders", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "Each Body damage kills one spider, but there may be more lurking in the walls...", # formatted string 'stats': [3,3,2,4], # four-integer list }, { 'id': 47, #integer 'name': f"Spy Drones", # formatted string 'shortname': f"drones", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "Each Body damage kills one drone; each drone can also be taken down by dealing its full Brain damage to that drone. The drones are not armed, but can ram kobolds and attack with rotors.", # formatted string 'stats': [4,4,3,2], # four-integer list }, { 'id': 48, #integer 'name': f"Supercomputer Bent on Multi-World Domination", # formatted string 'shortname': f"computer", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x not in [11,12,13,14,15,16,17,18,19,20,28,48, 53]], # None or list of IDs 'needsName': True, # boolean 'note': "It uses its minion to deal with interlopers; it's weak by itself and will try to hide its location.", # formatted string 'stats': [4,1,6,3], # four-integer list }, { 'id': 49, #integer 'name': f"Weaponized Robotic Interpreter", # formatted string 'shortname': f"robot", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It's fluent in over six million forms of making suffering be your lot in life. You will feel their pain, but they're sorry about that. It's just a living.", # formatted string 'stats': [5,5,3,2], # four-integer list }, { 'id': 50, #integer 'name': f"Robot Soldiers", # formatted string 'shortname': f"robots", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "Each Body damage will destroy one soldier; each soldier can also be taken down by dealing its full Brain damage to that soldier. They are usually humanoid, and attack in formation.", # formatted string 'stats': [3,4,3,6], # four-integer list }, { 'id': 51, #integer 'name': f"Robotic General", # formatted string 'shortname': f"general", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x not in [11,12,13,14,15,16,17,18,19,20,28,48]], # None or list of IDs 'needsName': True, # boolean 'note': "It will give orders to anyone and everyone, and will inflift Brains damage if not obeyed.", # formatted string 'stats': [3,3,6,5], # four-integer list }, { 'id': 52, #integer 'name': f"Rogue AI-controlled Ship", # formatted string 'shortname': f"ship", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x not in [11,12,13,14,15,16,17,18,19,20,28,48]], # None or list of IDs 'needsName': True, # boolean 'note': "It's not capable of entering a gravity well.", # formatted string 'stats': [3,3,6,6], # four-integer list }, { 'id': 53, #integer 'name': f"Supercomputer that Has Achieved Multi-World Domination", # formatted string 'shortname': f"computer", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x not in [11,12,13,14,15,16,17,18,19,20,28,48,53]], # None or list of IDs 'needsName': True, # boolean 'note': "Its home system may be a Dyson sphere across which it's evenly distributed.", # formatted string 'stats': [4,3,6,6], # four-integer list }, { 'id': 54, #integer 'name': f"Gray Goo", # formatted string 'shortname': f"goo", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "World-eating nanites; they may not have actually eaten a world yet, but will if left uncontrolled. They are widely-distributed and must be fully destroyed or they will regenerate.", # formatted string 'stats': [4,6,6,4], # four-integer list }, { 'id': 55, #integer 'name': f"Giant Mech", # formatted string 'shortname': f"mech", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "If it had a crew, it doesn't anymore. Its end goal is unclear, but it doesn't care what it smashes on its way.", # formatted string 'stats': [4,6,4,6], # four-integer list }, { 'id': 56, #integer 'name': f"Kobold Workers", # formatted string 'shortname': f"kobolds", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "They dig, build, and move things. Each Body damage will kill one kobold; each kobold can also be taken down by dealing their full Brain damage to that kobold. But they'd rather run than fight.", # formatted string 'stats': [3,2,3,3], # four-integer list }, { 'id': 57, #integer 'name': f"Kobold Supervisor", # formatted string 'shortname': f"kobold", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [56], # None or list of IDs 'needsName': True, # boolean 'note': "They lead from a safe distance.", # formatted string 'stats': [3,2,4,3], # four-integer list }, { 'id': 58, #integer 'name': f"Kobold Inventor", # formatted string 'shortname': f"kobold", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They invent things by taping two things together. Sometimes, they don't know what their invention is for until they've used it once.", # formatted string 'stats': [2,3,5,3], # four-integer list }, { 'id': 59, #integer 'name': f"Kobold Babysitter", # formatted string 'shortname': f"kobold", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "Oh god, they've got babies with them. The babies will swarm the party. Dealing 1 Body damage kills a baby, you monster. Once the babies are dead, the Babysitter has no reason to be around anymore. Order comes from the Babysitter, Chaos comes from the Babies.", # formatted string 'stats': [4,4,3,3], # four-integer list }, { 'id': 60, #integer 'name': f"Kobold Trap Designer", # formatted string 'shortname': f"kobold", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': f"They have {r.randint(1,6) + 1} traps set up and waiting, and they're surprisingly good at their job. They're a mix of low-tech and high-tech, and range from sharpened sticks to rigged thermal detonators. Each trap takes an Event to disarm.", # formatted string 'stats': [3,5,4,3], # four-integer list }, { 'id': 61, #integer 'name': f"Average Kobold", # formatted string 'shortname': f"kobold", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They tried so hard, but fell so far, and in the end, does it even really matter? They resent the party for actually excelling in their fields, and are intent on proving themselves.", # formatted string 'stats': [4,4,4,4], # four-integer list }, { 'id': 62, #integer 'name': f"Kobold Sorcerer", # formatted string 'shortname': f"kobold", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "Anything not on fire is just going to have to wait its turn. They may have slightly overestimated their current power level.", # formatted string 'stats': [3,5,4,5], # four-integer list }, { 'id': 63, #integer 'name': f"Swolbold", # formatted string 'shortname': f"kobold", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "Do you even lift, bro? This kobold does. And they didn't skip leg day. They're not unintelligent, but they did skip classes to go to the gym.", # formatted string 'stats': [3,6,3,6], # four-integer list }, { 'id': 64, #integer 'name': f"Retired Kobold Adventurer", # formatted string 'shortname': f"kobold", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They've seen the sights. They've done the things. They've earned the rewards. They just want to retire... and you won't let them. They're not as spry as they used to be, but they can still teach hatchlings a thing or two.", # formatted string 'stats': [5,5,5,4], # four-integer list }, { 'id': 65, #integer 'name': f"Kobold Adventurers", # formatted string 'shortname': f"kobolds", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': f"There are {r.randint(1,3) + 1} adventurers in the group, and each takes the full Body or Mind damage to be killed. They're the best at what they do, and what they do is be another group of kobolds in space.", # formatted string 'stats': [5,5,5,4], # four-integer list }, { 'id': 66, #integer 'name': f"Kobold Leader", # formatted string 'shortname': f"kobold", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [56,57,58,59,60,61,62,63,64,65], # None or list of IDs 'needsName': True, # boolean 'note': "This kobold prefers to delegate. It's easier to avoid blame that way. They may attempt to command the PCs. Their instructions may inflict Brains damage.", # formatted string 'stats': [5,5,6,4], # four-integer list }, { 'id': 67, #integer 'name': f"Semi-Intelligent Metal-Eating Slime", # formatted string 'shortname': f"slime", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "It only eats metal. Organics are safe. Ships and equipment... maybe not so much. Fire damage does a minimum of 2 Br damage even on a mixed success.", # formatted string 'stats': [0,4,2,5], # four-integer list }, { 'id': 68, #integer 'name': f"Floating Brain", # formatted string 'shortname': f"brain", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x not in [11,12,13,14,15,16,17,18,19,20,28,48,53]], # None or list of IDs 'needsName': True, # boolean 'note': "It uses telepathy and telekinesis as weapons, and will send its minion in first.", # formatted string 'stats': [2,3,6,1], # four-integer list }, { 'id': 69, #integer 'name': f"Thing in a Jar", # formatted string 'shortname': f"thing", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x not in [11,12,13,14,15,16,17,18,19,20,28,48,53]], # None or list of IDs 'needsName': True, # boolean 'note': "Its jar is fogged up, so it's not easy to see what's inside. Don't leave it near machinery or electronics; it can connect wirelessly to anything it can sense nearby, but it needs a hardwired connection to assert direct control.", # formatted string 'stats': [3,2,6,2], # four-integer list }, { 'id': 70, #integer 'name': f"Small Alien Carnivores", # formatted string 'shortname': f"aliens", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "One alien dies for each Body damage inflicted. They're always hungry. They think you're delicious. They don't have tactics; if they smell something tasty, they run at it and try to eat it.", # formatted string 'stats': [3,5,3,3], # four-integer list }, { 'id': 71, #integer 'name': f"Medium Alien Carnivores", # formatted string 'shortname': f"aliens", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "One alien dies for every two Body damage inflicted. They think you're delicious. They hunt in packs, and make sure at least one of them is flanking a target before they attack. They like tiring out their prey before they strike.", # formatted string 'stats': [3,4,4,4], # four-integer list }, { 'id': 72, #integer 'name': f"Alien Researchers", # formatted string 'shortname': f"aliens", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "They're kobold-sized, but with bulbous heads and large, onyx eyes. They like to reinforce their superiority by researching other species' 'flaws'. They... don't ask for volunteers.", # formatted string 'stats': [4,4,5,3], # four-integer list }, { 'id': 73, #integer 'name': f"Big-Game-Hunting Alien", # formatted string 'shortname': f"alien", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They're on vacation, and like to hunt things that can hunt back. They use 'primitive weapons', like ray guns and homing missiles -- 'nothing fancy'.", # formatted string 'stats': [4,4,5,4], # four-integer list }, { 'id': 74, #integer 'name': f"Large Alien Carnivore", # formatted string 'shortname': f"alien", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "Its priorities are: 1) Eat. 2) Sleep. Once it fulfills the first, it does the second. It likes to think it's an ambush hunter. This includes bashing through walls to get to its prey.", # formatted string 'stats': [4,4,4,6], # four-integer list }, { 'id': 75, #integer 'name': f"Energy Being", # formatted string 'shortname': f"being", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It's made of light, lightning, fire, plasma... you know, a special effect. Its natural state is amorphous but it will change shape to resemble the beings it encounters. It may get angry if its 'guests' try to leave.", # formatted string 'stats': [4,5,5,5], # four-integer list }, { 'id': 76, #integer 'name': f"Hive Mind", # formatted string 'shortname': f"colony", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': rinterp("Every 2 Body damage will kill a member of the hive mind, but this doesn't mean the central intelligence is dead; that takes brain damage. The hive mind is ", ["biological, and seeks organic life forms for food", "cybernetic, and seeks organic life forms for assimilation"], "."), # formatted string 'stats': [4,3,6,6], # four-integer list }, { 'id': 77, #integer 'name': f"Ancient Engineer", # formatted string 'shortname': f"ancient", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': rinterp("They've taken up residence among a 'primitive' civilization, and will take action to defend it. Their goal is ", ["financial", "conquest", "self-aggrandizement", "religious proselytizing"], "."), # formatted string or function 'stats': [6,4,6,4], # four-integer list }, { 'id': 78, #integer 'name': f"Small Panicking Group", # formatted string 'shortname': f"people", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': rinterp("A group of ", list(range(10,51)), " individuals of various species who are scared and not likely to listen to reason."), # formatted string 'stats': [1,4,2,4], # four-integer list }, { 'id': 79, #integer 'name': f"Refugees with Parasites", # formatted string 'shortname': f"refugees", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "The refugees may be ignorant of the infection, know that some (but not all) have it, or be actively spreading it. An infected refugee instead has the stats 3/4/2/3.", # formatted string 'stats': [2,4,0,0], # four-integer list }, { 'id': 80, #integer 'name': f"Perfect Storm School Field Trip", # formatted string 'shortname': f"students", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "Kobold students who are full of sugar and want to play with everything. They may or may not have a teacher with them.", # formatted string 'stats': [4,5,2,2], # four-integer list }, { 'id': 81, #integer 'name': f"Con Artist", # formatted string 'shortname': f"con artist", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They want to swindle whatever they can out of the kobolds. Reconsider any action on their part that might actually help, or add a hidden cost.", # formatted string 'stats': [3,4,5,2], # four-integer list }, { 'id': 82, #integer 'name': f"Legitimate Businessmen", # formatted string 'shortname': f"businessmen", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "They're willing to make you an offer and give you a reason not to refuse it. They might offer protection from Legitimate Businessmen.", # formatted string 'stats': [4,4,3,4], # four-integer list }, { 'id': 83, #integer 'name': f"Agent for a 'Big Bad'", # formatted string 'shortname': f"agent", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They're always someone else's minion... but you might not find out whose. They'll pretend to be a helper NPC but will only attack when found out and cornered.", # formatted string 'stats': [4,4,5,3], # four-integer list }, { 'id': 84, #integer 'name': f"Conspiracy Theory Survivalist", # formatted string 'shortname': f"survivalist", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They're armed to the teeth and holed up in their bunker with every necessity... except one. The less coherent the conspiracy theory, the better.", # formatted string 'stats': [4,5,3,5], # four-integer list }, { 'id': 85, #integer 'name': f"Large Mob", # formatted string 'shortname': f"mob", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "Not organized protesters, but rather Black Friday shoppers, sports fans rioting, or some other less than reasonable group.", # formatted string 'stats': [2,6,4,6], # four-integer list }, { 'id': 86, #integer 'name': f"Bored Trillionaire", # formatted string 'shortname': f"trillionaire", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x not in [11,12,13,14,15,16,17,18,19,20,28,48,53,86]], # None or list of IDs 'needsName': True, # boolean 'note': "They've turned to villainy as a hobby; most of their plans involve acquiring wealth even if it costs more than they'll get, because the intellectual exercise is the point. They love complicated plots, especially if they can explain them to the kobolds.", # formatted string 'stats': [5,5,6,3], # four-integer list }, { 'id': 87, #integer 'name': f"Contrarian Politician", # formatted string 'shortname': f"politician", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They're not anti-kobold; they just happen to be against whatever the kobolds are doing. They'll pull out any obstruction they can... but they might take a bribe.", # formatted string 'stats': [5,5,6,4], # four-integer list }, { 'id': 88, #integer 'name': f"Completely Normal Person Who Is Not A Murder-Bot", # formatted string 'shortname': f"person", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It's definitely a murder-bot. It will pretend to be a helper NPC until the kobolds are vulnerable.", # formatted string 'stats': [4,6,4,6], # four-integer list }, { 'id': 89, #integer 'name': f"Network Pirates", # formatted string 'shortname': f"pirates", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "They do Brains damage by unleashing a torrent of information, and seek proprietary kobold knowledge so they can make it publicly available. They're not fans of paying people for their work.", # formatted string 'stats': [3,3,4,1], # four-integer list }, { 'id': 90, #integer 'name': f"Pirate Mutineers", # formatted string 'shortname': f"pirates", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "The revolution was short; these are the losers. They're still pirates, but they don't have a ship... yet.", # formatted string 'stats': [2,3,3,4], # four-integer list }, { 'id': 91, #integer 'name': f"Pirate Swashbuckler", # formatted string 'shortname': f"pirate", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They're in it for the aesthetic, and like to show off to the point where their effectiveness is limited. If they were better at being an actual pirate, they'd be a captain by now.", # formatted string 'stats': [3,4,3,3], # four-integer list }, { 'id': 92, #integer 'name': f"Pirate Brute", # formatted string 'shortname': f"pirate", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They're good at moving things and at smashing things. Moving indoors is awkward.", # formatted string 'stats': [2,5,2,5], # four-integer list }, { 'id': 93, #integer 'name': f"Pirate Captain", # formatted string 'shortname': f"captain", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [89,90,91,92,94,95,96,97,99], # None or list of IDs 'needsName': True, # boolean 'note': "They might be bloodthirsty, arrogant, elegant, suave, or whatever other stereotype the GM prefers. They may or may not be immune to iocane powder.", # formatted string 'stats': [3,3,5,4], # four-integer list }, { 'id': 94, #integer 'name': f"Pirate Treasure Hunters", # formatted string 'shortname': f"pirates", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "They have a ship, and they have a map - or are looking for a map - or heard about a map? They may be looking for the same thing as the kobolds.", # formatted string 'stats': [3,4,4,5], # four-integer list }, { 'id': 95, #integer 'name': f"Pirate Blockade Runner", # formatted string 'shortname': f"ship", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "The stats include ship and crew. For when it absolutely, positively needs to avoid tariffs overnight.", # formatted string 'stats': [4,3,5,5], # four-integer list }, { 'id': 96, #integer 'name': f"Pirate Gunboat", # formatted string 'shortname': f"ship", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "The stats include ship and crew. It has guns. Lots of guns. But it can't take what it can dish out.", # formatted string 'stats': [4,6,3,5], # four-integer list }, { 'id': 97, #integer 'name': f"Pirate Flagship", # formatted string 'shortname': f"ship", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "The stats include ship and crew. It bristles with guns, and has heavy armor, but it's slow and difficult to maneuver.", # formatted string 'stats': [4,6,3,6], # four-integer list }, { 'id': 98, #integer 'name': f"Legendary Pirate", # formatted string 'shortname': f"pirate", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [89,90,91,92,93,94,95,96,97,99], # None or list of IDs 'needsName': True, # boolean 'note': "They're as into loot as any pirate is, but they also have a grand plan that they may or may not reveal.", # formatted string 'stats': [4,5,6,5], # four-integer list }, { 'id': 99, #integer 'name': f"Pirate Ghost Ship", # formatted string 'shortname': f"ship", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "The stats include the ship and crew. It can harm the living, but it can't collect loot... but the crew still try to go through the motions.", # formatted string 'stats': [6,6,5,3], # four-integer list }, { 'id': 100, #integer 'name': f"Monster Under The Bed", # formatted string 'shortname': f"monster", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "Well, any dark location is fair game. It waits for a nearby kobold to be alone, and does Brain damage by causing illusions. If its first attempts don't work, it'll ramp up - unattended children, core breaches, explosive decompression...", # formatted string 'stats': [1,4,5,1], # four-integer list }, { 'id': 101, #integer 'name': f"Irate Customer", # formatted string 'shortname': f"customer", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They want to speak to the manager, and ignore claims that the kobolds aren't actually running a business. They'll definitely get violent.", # formatted string 'stats': [1,5,1,5], # four-integer list }, { 'id': 102, #integer 'name': f"Representative of the Local Homeowners' Association", # formatted string 'shortname': f"representative", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "Their stats include lawyers that appear one at a time to provide paperwork for their claims. They'll find the kobolds in violation of various codes, some of which they may have just invented, and try to fine them into obscurity.", # formatted string 'stats': [2,4,4,3], # four-integer list }, { 'id': 103, #integer 'name': f"Doppelganger", # formatted string 'shortname': f"doppelganger", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They'll try to split the kobolds up and then infiltrate the group, pretending to be whichever kobold isn't present. They love a good practical joke... or a bad one.", # formatted string 'stats': [3,4,5,2], # four-integer list }, { 'id': 104, #integer 'name': f"Creepy Doll", # formatted string 'shortname': f"doll", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It moves, but only when no one is looking. It tries to get nearby kobolds to hurt themselves or others.", # formatted string 'stats': [4,4,5,2], # four-integer list }, { 'id': 105, #integer 'name': f"Mimic", # formatted string 'shortname': f"mimic", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "It can imitate any simple object made of wood, stone, or metal, but it really likes treasure chests for some reason. It's an ambush hunter, waiting until it's touched to strike.", # formatted string 'stats': [5,5,2,4], # four-integer list }, { 'id': 106, #integer 'name': rinterp("Living ", ["Air", "Earth", "Fire", "Water"], ""), # formatted string 'shortname': f"elemental", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It will coalesce into a vaguely humanoid shape, and it's deeply troubled by and will try to destroy anything that's not just like it.", # formatted string 'stats': [3,6,4,4], # four-integer list }, { 'id': 107, #integer 'name': f"Lycanthrope", # formatted string 'shortname': f"lycanthrope", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "Its 'normal' form can be anything common in the area the kobolds are visiting; if the area is uninhabited, make it a kobold. Probably turns into a wolf... but might turn into something else.", # formatted string 'stats': [4,5,4,5], # four-integer list }, { 'id': 108, #integer 'name': f"Revolutionaries", # formatted string 'shortname': f"revolutionaries", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "They belong to any nearby country, but want to overthrow it. They see the kobolds either as opposition or as useful, ignorant tools.", # formatted string 'stats': [4,5,5,5], # four-integer list }, { 'id': 109, #integer 'name': f"Bored Reality Bender", # formatted string 'shortname': f"Q", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They just want to have a fun time, and they'll help or hinder the kobolds depending on what makes their game last longer. They can bend their own stats if they need to.", # formatted string 'stats': [6,6,6,2], # four-integer list }, { 'id': 110, #integer 'name': f"Released Space Kraken", # formatted string 'shortname': f"kraken", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They just got out and they're ready to party, which in this case means destroying any ships and cities they encounter.", # formatted string 'stats': [4,6,4,6], # four-integer list }, { 'id': 111, #integer 'name': f"Eldritch Mostly-Disembodied Gibbering Voices", # formatted string 'shortname': f"voices", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "They're barely visible, and can walk through walls. They'll always choose to attack rather than defend themselves.", # formatted string 'stats': [0,6,5,0], # four-integer list }, { 'id': 112, #integer 'name': f"Eldritch Fanatic Cultists", # formatted string 'shortname': f"cultists", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "They're eager to appease the beings they serve, but they might be very wrong about how they choose to do it.", # formatted string 'stats': [1,3,4,4], # four-integer list }, { 'id': 113, #integer 'name': f"Eldritch 'Enlightened' Cultists", # formatted string 'shortname': f"cultists", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "They're very eager to appease the beings they serve, and have received some guidance on how to do it... which has altered their appearance somehow.", # formatted string 'stats': [1,4,4,4], # four-integer list }, { 'id': 114, #integer 'name': f"Eldritch 'Ascended' Cultists", # formatted string 'shortname': f"cultists", # formatted string 'isPlural': True, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': False, # boolean 'note': "Whatever they were, they... aren't anymore, with extra limbs and odd proportions. They're working on a device (of a sort up to the GM) to awaken or summon an old god.", # formatted string 'stats': [2,3,4,5], # four-integer list }, { 'id': 115, #integer 'name': f"Eldritch Living Beacon", # formatted string 'shortname': f"beacon", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It can be mechanical, biological, a fusion, or something else altogether. It's been built or grown to summon or awaken something far worse.", # formatted string 'stats': [2,3,5,5], # four-integer list }, { 'id': 116, #integer 'name': f"Eldritch Corrupted Town", # formatted string 'shortname': f"town", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "The residents are all of one mind, whether that's a hive mind, a single entity controlling everything, puppets, or what have you. Their goal is to maintain the status quo, which might involve killing the kobolds... or assimilating them.", # formatted string 'stats': [4,3,3,6], # four-integer list }, { 'id': 117, #integer 'name': f"Eldritch Hunter/Seeker", # formatted string 'shortname': f"hunter/seeker", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "Someone or something is needed for an unknowable purpose, and the hunter/seeker will get it. This might be something the kobolds have, something they want, or one of the kobolds themselves. The hunter/seeker won't let their target be harmed... at least, not before it's delivered.", # formatted string 'stats': [5,2,5,5], # four-integer list }, { 'id': 118, #integer 'name': f"Eldritch Offspring", # formatted string 'shortname': f"offspring", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x not in [11,12,13,14,15,16,17,18,19,20,28]], # None or list of IDs 'needsName': True, # boolean 'note': "It's an avatar of an old god, not yet come into its full power, and may not understand the goals of its parent. Its minion is trying to guide the offspring's decisions.", # formatted string 'stats': [4,5,4,5], # four-integer list }, { 'id': 119, #integer 'name': f"Eldritch Chosen Servant", # formatted string 'shortname': f"servant", # formatted string 'isPlural': False, # boolean 'hasMinion': False, # boolean 'potentialMinions': None, # None or list of IDs 'needsName': True, # boolean 'note': "It's here because someone or something earned the ire of an eldritch being. Whether or not that's the kobolds is up to the DM. Whether or not the kobolds get in its way is their choice.", # formatted string 'stats': [3,5,5,6], # four-integer list }, { 'id': 120, #integer 'name': f"Eldritch Slumbering Old God", # formatted string 'shortname': f"god", # formatted string 'isPlural': False, # boolean 'hasMinion': True, # boolean 'potentialMinions': [x for x in list(range(121)) if x not in [11,12,13,14,15,16,17,18,19,20,28]], # None or list of IDs 'needsName': True, # boolean 'note': "Its minion is either dedicated to waking it up or keeping it asleep, at the DM's discretion. If it wakes up, it'll wake up grumpy.", # formatted string 'stats': [3,5,6,6], # four-integer list }, { 'id': 121, 'name': f"Pev the Destroyer", 'shortname': "cat", 'isPlural': False, 'hasMinion': False, 'potentialMinions': None, 'needsName': False, 'note': "He's an enormous black-and-brown tabby cat who loves to hunt and eat lizards.", 'stats': [2,6,4,6], }, ]