A character/one-shot generator for KOBOLDS IN SPACE!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

adversaries.py 48KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217
  1. import random as r
  2. DRAGON_TYPES = ["Cat", "Fairy", "Sedan", "Brass", "Space", "Wolf", "Iron", "Spellcaster", "Green", "Red"]
  3. prob = [
  4. {
  5. 'id': 0, #integer
  6. 'name': f"Baby {r.choice(DRAGON_TYPES)} Dragon", # formatted string
  7. 'shortname': "dragon", # formatted string
  8. 'hasMinion': False, # boolean
  9. 'potentialMinions': None # None or list of IDs
  10. 'needsName': True, # boolean
  11. 'note': "It's very naive about its power level.", # formatted string
  12. 'stats': [2,3,3,3], # four-integer list
  13. },
  14. {
  15. 'id': 1, #integer
  16. 'name': f"Cat Dragon", # formatted string
  17. 'shortname': "dragon", # formatted string
  18. 'hasMinion': False, # boolean
  19. 'potentialMinions': None # None or list of IDs
  20. 'needsName': True, # boolean
  21. 'note': "It's covered in fur; its Hairball Breath may deal Brains damage instead of Body.", # formatted string
  22. 'stats': [1,4,3,4], # four-integer list
  23. },
  24. {
  25. 'id': 2, #integer
  26. 'name': f"Fairy Dragon", # formatted string
  27. 'shortname': "dragon", # formatted string
  28. 'hasMinion': False, # boolean
  29. 'potentialMinions': None # None or list of IDs
  30. 'needsName': True, # boolean
  31. 'note': "Its Glitter Breath makes targets super visible. It loves sweets.", # formatted string
  32. 'stats': [2,4,3,4], # four-integer list
  33. },
  34. {
  35. 'id': 3, #integer
  36. 'name': f"Sedan Dragon", # formatted string
  37. 'shortname': "dragon", # formatted string
  38. 'hasMinion': False, # boolean
  39. 'potentialMinions': None # None or list of IDs
  40. 'needsName': True, # boolean
  41. 'note': "It has four wings and Carbon Monoxide Breath. It may carry and use Gear.", # formatted string
  42. 'stats': [2,4,3,5], # four-integer list
  43. },
  44. {
  45. 'id': 4, #integer
  46. 'name': f"Brass Dragon", # formatted string
  47. 'shortname': "dragon", # formatted string
  48. 'hasMinion': False, # boolean
  49. 'potentialMinions': None # None or list of IDs
  50. 'needsName': True, # boolean
  51. 'note': "A being of Order, it mimics a steampunk theme.", # formatted string
  52. 'stats': [4,3,4,4], # four-integer list
  53. },
  54. {
  55. 'id': 5, #integer
  56. 'name': f"Space Dragon", # formatted string
  57. 'shortname': "dragon", # formatted string
  58. 'hasMinion': False, # boolean
  59. 'potentialMinions': None # None or list of IDs
  60. 'needsName': True, # boolean
  61. 'note': "It has Solar Wind Breath that pushes targets back.", # formatted string
  62. 'stats': [3,4,4,5], # four-integer list
  63. },
  64. {
  65. 'id': 6, #integer
  66. 'name': f"Wolf Dragons", # formatted string
  67. 'shortname': "dragons", # formatted string
  68. 'hasMinion': False, # boolean
  69. 'potentialMinions': None # None or list of IDs
  70. 'needsName': False, # boolean
  71. 'note': "They are covered in fur and attack in packs (the stats are for the pack).", # formatted string
  72. 'stats': [4,5,3,5], # four-integer list
  73. },
  74. {
  75. 'id': 7, #integer
  76. 'name': f"Iron Dragon", # formatted string
  77. 'shortname': "dragon", # formatted string
  78. 'hasMinion': False, # boolean
  79. 'potentialMinions': None # None or list of IDs
  80. 'needsName': True, # boolean
  81. 'note': "It's covered in actual iron and has Coal Dust Breath. It enjoys conquest and destruction for their own sake.", # formatted string
  82. 'stats': [3,5,5,5], # four-integer list
  83. },
  84. {
  85. 'id': 8, #integer
  86. 'name': f"{r.choice(DRAGON_TYPES)} Dragon Spellcaster", # formatted string
  87. 'shortname': "dragon", # formatted string
  88. 'hasMinion': False, # boolean
  89. 'potentialMinions': None # None or list of IDs
  90. 'needsName': True, # boolean
  91. 'note': "It prefers to use spells rather than its physical attacks.", # formatted string
  92. 'stats': [4,5,6,4], # four-integer list
  93. },
  94. {
  95. 'id': 9, #integer
  96. 'name': f"Old Green, the Dragon", # formatted string
  97. 'shortname': "dragon", # formatted string
  98. 'hasMinion': True, # boolean
  99. 'potentialMinions': [x for x in list(range(121)) if x != 9 and x != 10] # None or list of IDs
  100. 'needsName': False, # boolean
  101. 'note': "It will send its minion to attack first, and exhales a toxic, opaque gas to cover its escape if needed.", # formatted string
  102. 'stats': [5,3,6,6], # four-integer list
  103. },
  104. {
  105. 'id': 10, #integer
  106. 'name': f"Old Red, the Dragon", # formatted string
  107. 'shortname': "dragon", # formatted string
  108. 'hasMinion': False, # boolean
  109. 'potentialMinions': None # None or list of IDs
  110. 'needsName': False, # boolean
  111. 'note': "It's bigger than you expect, even when you're expecting it. It melts things with its Fire Breath for fun.", # formatted string
  112. 'stats': [3,5,6,6], # four-integer list
  113. },
  114. {
  115. 'id': 11, #integer
  116. 'name': f"Toxic Air", # formatted string
  117. 'shortname': "air", # formatted string
  118. 'hasMinion': False, # boolean
  119. 'potentialMinions': None # None or list of IDs
  120. 'needsName': False, # boolean
  121. 'note': "It might eat through protective layers, and is immune to Brains damage and automatically fails Brains rolls.", # formatted string
  122. 'stats': [0,6,0,6], # four-integer list
  123. },
  124. {
  125. 'id': 12, #integer
  126. 'name': f"Friendly Living Asteroid", # formatted string
  127. 'shortname': "asteroid", # formatted string
  128. 'hasMinion': False, # boolean
  129. 'potentialMinions': None # None or list of IDs
  130. 'needsName': True, # boolean
  131. 'note': "It wants to follow the kobolds home like the biggest possible puppy.", # formatted string
  132. 'stats': [2,3,1,6], # four-integer list
  133. },
  134. {
  135. 'id': 13, #integer
  136. 'name': f"Aggressive Living Asteroid", # formatted string
  137. 'shortname': "asteroid", # formatted string
  138. 'hasMinion': False, # boolean
  139. 'potentialMinions': None # None or list of IDs
  140. 'needsName': True, # boolean
  141. 'note': "It's an ambush hunter that sees ships as a crunchy outside with chewy centers.", # formatted string
  142. 'stats': [2,4,1,6], # four-integer list
  143. },
  144. {
  145. 'id': 14, #integer
  146. 'name': f"Impending Nova", # formatted string
  147. 'shortname': "nova", # formatted string
  148. 'hasMinion': False, # boolean
  149. 'potentialMinions': None # None or list of IDs
  150. 'needsName': False, # boolean
  151. '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
  152. 'stats': [2,6,0,6], # four-integer list
  153. },
  154. {
  155. 'id': 15, #integer
  156. 'name': f"Volcanic Eruption", # formatted string
  157. 'shortname': f"eruption", # formatted string
  158. 'hasMinion': False, # boolean
  159. 'potentialMinions': None # None or list of IDs
  160. 'needsName': False, # boolean
  161. 'note': "Its molten flow threatens to destroy something important. It is immune to Brains damage and automatically fails Brains rolls.", # formatted string
  162. 'stats': [4,5,0,6], # four-integer list
  163. },
  164. {
  165. 'id': 16, #integer
  166. 'name': f"Tremors", # formatted string
  167. 'shortname': f"tremors", # formatted string
  168. 'hasMinion': False, # boolean
  169. 'potentialMinions': None # None or list of IDs
  170. 'needsName': False, # boolean
  171. 'note': "The earth shakes at the least opportune moments. They are immune to Brains damage and automatically fails Brains rolls.", # formatted string
  172. 'stats': [4,6,0,6], # four-integer list
  173. },
  174. {
  175. 'id': 17, #integer
  176. 'name': f"Fire!", # formatted string
  177. 'shortname': f"fire", # formatted string
  178. 'hasMinion': False, # boolean
  179. 'potentialMinions': None # None or list of IDs
  180. 'needsName': False, # boolean
  181. 'note': "It may consume things not normally considered flammable. It is immune to Brains damage and automatically fails Brains rolls.", # formatted string
  182. 'stats': [5,6,0,6], # four-integer list
  183. },
  184. {
  185. 'id': 18, #integer
  186. 'name': f"Volcano 'God'", # formatted string
  187. 'shortname': f"god", # formatted string
  188. 'hasMinion': True, # boolean
  189. 'potentialMinions': [x for x in list(range(121)) if x not in [9,10,18]] # None or list of IDs
  190. 'needsName': True, # boolean
  191. 'note': "It's not actually a god; it just likes destroying things with fire. Its minion may be a worshiper.", # formatted string
  192. 'stats': [4,5,3,6], # four-integer list
  193. },
  194. {
  195. 'id': 19, #integer
  196. 'name': f"Tiny, Hungry Black Hole", # formatted string
  197. 'shortname': f"black hole", # formatted string
  198. 'hasMinion': False, # boolean
  199. 'potentialMinions': None # None or list of IDs
  200. 'needsName': False, # boolean
  201. 'note': "It's semi-intelligent and mobile. It might stalk ship-sized objects.", # formatted string
  202. 'stats': [4,6,3,6], # four-integer list
  203. },
  204. {
  205. 'id': 20, #integer
  206. 'name': f"Cranky Nebula", # formatted string
  207. 'shortname': f"nebula", # formatted string
  208. 'hasMinion': False, # boolean
  209. 'potentialMinions': None # None or list of IDs
  210. 'needsName': True, # boolean
  211. 'note': "It's a baby and wants attention. Its Brains reflects resilience against damage more than actual mental ability.", # formatted string
  212. 'stats': [4,5,6,6], # four-integer list
  213. },
  214. {
  215. 'id': 21, #integer
  216. 'name': f"Sentient Angry Star", # formatted string
  217. 'shortname': f"star", # formatted string
  218. 'hasMinion': False, # boolean
  219. 'potentialMinions': None # None or list of IDs
  220. 'needsName': True, # boolean
  221. 'note': "It demands tribute, and attacks with solar flares... but it can't move out of its orbit.", # formatted string
  222. 'stats': [5,4,5,6], # four-integer list
  223. },
  224. {
  225. 'id': 22, #integer
  226. 'name': f"Elf Red Shirt Away Team", # formatted string
  227. 'shortname': f"", # formatted string
  228. 'hasMinion': False, # boolean
  229. 'potentialMinions': None # None or list of IDs
  230. 'needsName': False, # boolean
  231. '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
  232. 'stats': [3,2,3,3], # four-integer list
  233. },
  234. {
  235. 'id': 23, #integer
  236. 'name': f"Elf Scout Ship", # formatted string
  237. 'shortname': f"ship", # formatted string
  238. 'hasMinion': False, # boolean
  239. 'potentialMinions': None # None or list of IDs
  240. 'needsName': True, # boolean
  241. 'note': "A short-range ship that looks like a streamlined butterfly. Its crew is a pilot and a gunner.", # formatted string
  242. 'stats': [2,3,3,4], # four-integer list
  243. },
  244. {
  245. 'id': 24, #integer
  246. 'name': f"Elf Guard Ship", # formatted string
  247. 'shortname': f"ship", # formatted string
  248. 'hasMinion': False, # boolean
  249. 'potentialMinions': None # None or list of IDs
  250. 'needsName': True, # boolean
  251. 'note': "A short-range ship that looks like a stinging insect. Its crew is a pilot and a gunner.", # formatted string
  252. 'stats': [2,4,3,4], # four-integer list
  253. },
  254. {
  255. 'id': 25, #integer
  256. 'name': f"Elf Cargo Ship", # formatted string
  257. 'shortname': f"ship", # formatted string
  258. 'hasMinion': False, # boolean
  259. 'potentialMinions': None # None or list of IDs
  260. 'needsName': True, # boolean
  261. 'note': "A long-range ship that resembles a beetle. Its cargo might be anything, and its crew always assume hostile intentions.", # formatted string
  262. 'stats': [3,3,3,5], # four-integer list
  263. },
  264. {
  265. 'id': 26, #integer
  266. 'name': f"Elf Long Range Scout", # formatted string
  267. 'shortname': f"ship", # formatted string
  268. 'hasMinion': False, # boolean
  269. 'potentialMinions': [22,23,24,25,27,29,30,31,32] # None or list of IDs
  270. 'needsName': True, # boolean
  271. '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
  272. 'stats': [,,,], # four-integer list
  273. },
  274. {
  275. 'id': 27, #integer
  276. 'name': f"Detachment from the Elf Armada", # formatted string
  277. 'shortname': f"detachment", # formatted string
  278. 'hasMinion': False, # boolean
  279. 'potentialMinions': None # None or list of IDs
  280. 'needsName': False, # boolean
  281. 'note': "A small group of ships focused more on science than war, they're usually on a research, escort, or retrieval mission.", # formatted string
  282. 'stats': [4,3,5,4], # four-integer list
  283. },
  284. {
  285. 'id': 28, #integer
  286. 'name': f"Elf Armada Shipyard", # formatted string
  287. 'shortname': f"shipyard", # formatted string
  288. 'hasMinion': False, # boolean
  289. 'potentialMinions': [22,23,24,25,26,27,29,30,31,32] # None or list of IDs
  290. 'needsName': True, # boolean
  291. 'note': "It resembles a giant tree.", # formatted string
  292. 'stats': [6,2,3,6], # four-integer list
  293. },
  294. {
  295. 'id': 29, #integer
  296. 'name': f"Elf Stealth Special Ops Team", # formatted string
  297. 'shortname': f"team", # formatted string
  298. 'hasMinion': True, # boolean
  299. '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
  300. 'needsName': False, # boolean
  301. '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
  302. 'stats': [4,6,4,4], # four-integer list
  303. },
  304. {
  305. 'id': 30, #integer
  306. 'name': f"Elf Armada Carrier", # formatted string
  307. 'shortname': f"carrier", # formatted string
  308. 'hasMinion': False, # boolean
  309. 'potentialMinions': None # None or list of IDs
  310. 'needsName': True, # boolean
  311. 'note': "It comes with a swarm of wasp fighters, each with 1 Body. The carrier resembles an enormous chrysalis.", # formatted string
  312. 'stats': [5,5,3,6], # four-integer list
  313. },
  314. {
  315. 'id': 31, #integer
  316. 'name': f"Elf Armada Warship", # formatted string
  317. 'shortname': f"ship", # formatted string
  318. 'hasMinion': False, # boolean
  319. 'potentialMinions': None # None or list of IDs
  320. 'needsName': True, # boolean
  321. '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
  322. 'stats': [6,6,2,6], # four-integer list
  323. },
  324. {
  325. 'id': 32, #integer
  326. 'name': f"Elf Armada Flagship", # formatted string
  327. 'shortname': f"flagship", # formatted string
  328. 'hasMinion': True, # boolean
  329. 'potentialMinions': [22,23,24,25,26,27,29,30,31] # None or list of IDs
  330. 'needsName': True, # boolean
  331. '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
  332. 'stats': [5,4,5,6], # four-integer list
  333. },
  334. {
  335. 'id': 33, #integer
  336. 'name': f"Floating, Flaming Skull", # formatted string
  337. 'shortname': f"skull", # formatted string
  338. 'hasMinion': False, # boolean
  339. 'potentialMinions': None # None or list of IDs
  340. 'needsName': True, # boolean
  341. '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
  342. 'stats': [1,6,3,1], # four-integer list
  343. },
  344. {
  345. 'id': 34, #integer
  346. 'name': f"Newly-Raised Vampire", # formatted string
  347. 'shortname': f"vampire", # formatted string
  348. 'hasMinion': False, # boolean
  349. 'potentialMinions': None # None or list of IDs
  350. 'needsName': True, # boolean
  351. 'note': "They're power-mad and vastly overestimate their own abilities. The GM may interpret 'vampire powers' however they please.", # formatted string
  352. 'stats': [2,4,2,4], # four-integer list
  353. },
  354. {
  355. 'id': 35, #integer
  356. 'name': f"Undead Sample Pack", # formatted string
  357. 'shortname': f"undead", # formatted string
  358. 'hasMinion': False, # boolean
  359. 'potentialMinions': None # None or list of IDs
  360. 'needsName': False, # boolean
  361. '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
  362. 'stats': [0,5,2,6], # four-integer list
  363. },
  364. {
  365. 'id': 36, #integer
  366. 'name': f"Ranged Skeletons", # formatted string
  367. 'shortname': f"skeletons", # formatted string
  368. 'hasMinion': False, # boolean
  369. 'potentialMinions': None # None or list of IDs
  370. 'needsName': False, # boolean
  371. '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
  372. 'stats': [2,5,2,5], # four-integer list
  373. },
  374. {
  375. 'id': 37, #integer
  376. 'name': f"Old Lich who Wants Everyone to Stay Off Their Lawn", # formatted string
  377. 'shortname': f"lich", # formatted string
  378. 'hasMinion': False, # boolean
  379. 'potentialMinions': None # None or list of IDs
  380. 'needsName': True, # boolean
  381. '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
  382. 'stats': [4,2,6,3], # four-integer list
  383. },
  384. {
  385. 'id': 38, #integer
  386. 'name': f"Zombie Brute Squad", # formatted string
  387. 'shortname': f"zombies", # formatted string
  388. 'hasMinion': False, # boolean
  389. 'potentialMinions': None # None or list of IDs
  390. 'needsName': False, # boolean
  391. '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
  392. 'stats': [3,5,2,6], # four-integer list
  393. },
  394. {
  395. 'id': 39, #integer
  396. 'name': f"Vampire Royalty", # formatted string
  397. 'shortname': f"vampire", # formatted string
  398. 'hasMinion': True, # boolean
  399. 'potentialMinions': [33,34,35,36,37,38,40,41,42,43,44] # None or list of IDs
  400. 'needsName': True, # boolean
  401. 'note': "They have lived this long by being patient and cautious. Despite that, their minion may not be 100% loyal.", # formatted string
  402. 'stats': [4,2,5,6], # four-integer list
  403. },
  404. {
  405. 'id': 40, #integer
  406. 'name': f"Possessing Spirit", # formatted string
  407. 'shortname': f"spirit", # formatted string
  408. 'hasMinion': False, # boolean
  409. 'potentialMinions': None # None or list of IDs
  410. 'needsName': True, # boolean
  411. '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
  412. 'stats': [4,4,5,5], # four-integer list
  413. },
  414. {
  415. 'id': 41, #integer
  416. 'name': f"Vengeful Spirit", # formatted string
  417. 'shortname': f"spirit", # formatted string
  418. 'hasMinion': False, # boolean
  419. 'potentialMinions': None # None or list of IDs
  420. 'needsName': True, # boolean
  421. 'note': "It wants revenge on whatever killed it, and it's willing to play the long game to get that revenge.", # formatted string
  422. 'stats': [6,6,6,2], # four-integer list
  423. },
  424. {
  425. 'id': 42, #integer
  426. 'name': f"", # formatted string
  427. 'shortname': f"", # formatted string
  428. 'hasMinion': False, # boolean
  429. 'potentialMinions': None # None or list of IDs
  430. 'needsName': True, # boolean
  431. 'note': "", # formatted string
  432. 'stats': [,,,], # four-integer list
  433. },
  434. {
  435. 'id': 43, #integer
  436. 'name': f"Necromantic Cult", # formatted string
  437. 'shortname': f"cult", # formatted string
  438. 'hasMinion': False, # boolean
  439. 'potentialMinions': None # None or list of IDs
  440. 'needsName': False, # boolean
  441. '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
  442. 'stats': [5,5,5,5], # four-integer list
  443. },
  444. {
  445. 'id': 44, #integer
  446. 'name': f"Mummified Protector", # formatted string
  447. 'shortname': f"mummy", # formatted string
  448. 'hasMinion': False, # boolean
  449. 'potentialMinions': None # None or list of IDs
  450. 'needsName': True, # boolean
  451. '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
  452. 'stats': [5,5,4,6], # four-integer list
  453. },
  454. {
  455. 'id': 45, #integer
  456. 'name': f"Helperbot 1000", # formatted string
  457. 'shortname': f"robot", # formatted string
  458. 'hasMinion': False, # boolean
  459. 'potentialMinions': None # None or list of IDs
  460. 'needsName': False, # boolean
  461. 'note': "It's half as good as Helperbot 2000. It's more incompetent than malicious, but it will defend itself.", # formatted string
  462. 'stats': [4,2,2,3], # four-integer list
  463. },
  464. {
  465. 'id': 46, #integer
  466. 'name': f"Robot Spiders!", # formatted string
  467. 'shortname': f"spiders", # formatted string
  468. 'hasMinion': False, # boolean
  469. 'potentialMinions': None # None or list of IDs
  470. 'needsName': False, # boolean
  471. 'note': "Each Body damage kills one spider, but there may be more lurking in the walls...", # formatted string
  472. 'stats': [3,3,2,4], # four-integer list
  473. },
  474. {
  475. 'id': 47, #integer
  476. 'name': f"Spy Drones", # formatted string
  477. 'shortname': f"drones", # formatted string
  478. 'hasMinion': False, # boolean
  479. 'potentialMinions': None # None or list of IDs
  480. 'needsName': False, # boolean
  481. '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
  482. 'stats': [4,4,3,2], # four-integer list
  483. },
  484. {
  485. 'id': 48, #integer
  486. 'name': f"Supercomputer Bent on Multi-World Domination", # formatted string
  487. 'shortname': f"computer", # formatted string
  488. 'hasMinion': True, # boolean
  489. '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
  490. 'needsName': True, # boolean
  491. 'note': "It uses its minion to deal with interlopers; it's weak by itself and will try to hide its location.", # formatted string
  492. 'stats': [4,1,6,3], # four-integer list
  493. },
  494. {
  495. 'id': 49, #integer
  496. 'name': f"Weaponized Robotic Interpreter", # formatted string
  497. 'shortname': f"robot", # formatted string
  498. 'hasMinion': False, # boolean
  499. 'potentialMinions': None # None or list of IDs
  500. 'needsName': True, # boolean
  501. '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
  502. 'stats': [5,5,3,2], # four-integer list
  503. },
  504. {
  505. 'id': 50, #integer
  506. 'name': f"Robot Soldiers", # formatted string
  507. 'shortname': f"robots", # formatted string
  508. 'hasMinion': False, # boolean
  509. 'potentialMinions': None # None or list of IDs
  510. 'needsName': False, # boolean
  511. '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
  512. 'stats': [3,4,3,6], # four-integer list
  513. },
  514. {
  515. 'id': 51, #integer
  516. 'name': f"Robotic General", # formatted string
  517. 'shortname': f"general", # formatted string
  518. 'hasMinion': True, # boolean
  519. '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
  520. 'needsName': True, # boolean
  521. 'note': "It will give orders to anyone and everyone, and will inflift Brains damage if not obeyed.", # formatted string
  522. 'stats': [3,3,6,5], # four-integer list
  523. },
  524. {
  525. 'id': 52, #integer
  526. 'name': f"Rogue AI-controlled Ship", # formatted string
  527. 'shortname': f"ship", # formatted string
  528. 'hasMinion': True, # boolean
  529. '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
  530. 'needsName': True, # boolean
  531. 'note': "It's not capable of entering a gravity well.", # formatted string
  532. 'stats': [3,3,6,6], # four-integer list
  533. },
  534. {
  535. 'id': 53, #integer
  536. 'name': f"Supercomputer that Has Achieved Multi-World Domination", # formatted string
  537. 'shortname': f"computer", # formatted string
  538. 'hasMinion': True, # boolean
  539. '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
  540. 'needsName': True, # boolean
  541. 'note': "Its home system may be a Dyson sphere across which it's evenly distributed.", # formatted string
  542. 'stats': [4,3,6,6], # four-integer list
  543. },
  544. {
  545. 'id': 54, #integer
  546. 'name': f"Gray Goo", # formatted string
  547. 'shortname': f"goo", # formatted string
  548. 'hasMinion': False, # boolean
  549. 'potentialMinions': None # None or list of IDs
  550. 'needsName': False, # boolean
  551. '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
  552. 'stats': [4,6,6,4], # four-integer list
  553. },
  554. {
  555. 'id': 55, #integer
  556. 'name': f"Giant Mech", # formatted string
  557. 'shortname': f"mech", # formatted string
  558. 'hasMinion': False, # boolean
  559. 'potentialMinions': None # None or list of IDs
  560. 'needsName': True, # boolean
  561. '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
  562. 'stats': [4,6,4,6], # four-integer list
  563. },
  564. {
  565. 'id': 56, #integer
  566. 'name': f"Kobold Workers", # formatted string
  567. 'shortname': f"kobolds", # formatted string
  568. 'hasMinion': False, # boolean
  569. 'potentialMinions': None # None or list of IDs
  570. 'needsName': False, # boolean
  571. '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
  572. 'stats': [3,2,3,3], # four-integer list
  573. },
  574. {
  575. 'id': 57, #integer
  576. 'name': f"Kobold Supervisor", # formatted string
  577. 'shortname': f"kobold", # formatted string
  578. 'hasMinion': True, # boolean
  579. 'potentialMinions': [56] # None or list of IDs
  580. 'needsName': True, # boolean
  581. 'note': "They lead from a safe distance.", # formatted string
  582. 'stats': [3,2,4,3], # four-integer list
  583. },
  584. {
  585. 'id': 58, #integer
  586. 'name': f"Kobold Inventor", # formatted string
  587. 'shortname': f"kobold", # formatted string
  588. 'hasMinion': False, # boolean
  589. 'potentialMinions': None # None or list of IDs
  590. 'needsName': True, # boolean
  591. '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
  592. 'stats': [2,3,5,3], # four-integer list
  593. },
  594. {
  595. 'id': 59, #integer
  596. 'name': f"Kobold Babysitter", # formatted string
  597. 'shortname': f"kobold", # formatted string
  598. 'hasMinion': False, # boolean
  599. 'potentialMinions': None # None or list of IDs
  600. 'needsName': True, # boolean
  601. '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
  602. 'stats': [4,4,3,3], # four-integer list
  603. },
  604. {
  605. 'id': 60, #integer
  606. 'name': f"Kobold Trap Designer", # formatted string
  607. 'shortname': f"kobold", # formatted string
  608. 'hasMinion': False, # boolean
  609. 'potentialMinions': None # None or list of IDs
  610. 'needsName': True, # boolean
  611. '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
  612. 'stats': [3,5,4,3], # four-integer list
  613. },
  614. {
  615. 'id': 61, #integer
  616. 'name': f"Average Kobold", # formatted string
  617. 'shortname': f"kobold", # formatted string
  618. 'hasMinion': False, # boolean
  619. 'potentialMinions': None # None or list of IDs
  620. 'needsName': True, # boolean
  621. '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
  622. 'stats': [4,4,4,4], # four-integer list
  623. },
  624. {
  625. 'id': 62, #integer
  626. 'name': f"Kobold Sorcerer", # formatted string
  627. 'shortname': f"kobold", # formatted string
  628. 'hasMinion': False, # boolean
  629. 'potentialMinions': None # None or list of IDs
  630. 'needsName': True, # boolean
  631. '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
  632. 'stats': [3,5,4,5], # four-integer list
  633. },
  634. {
  635. 'id': 63, #integer
  636. 'name': f"Swolbold", # formatted string
  637. 'shortname': f"kobold", # formatted string
  638. 'hasMinion': False, # boolean
  639. 'potentialMinions': None # None or list of IDs
  640. 'needsName': True, # boolean
  641. '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
  642. 'stats': [3,6,3,6], # four-integer list
  643. },
  644. {
  645. 'id': 64, #integer
  646. 'name': f"Retired Kobold Adventurer", # formatted string
  647. 'shortname': f"kobold", # formatted string
  648. 'hasMinion': False, # boolean
  649. 'potentialMinions': None # None or list of IDs
  650. 'needsName': True, # boolean
  651. '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
  652. 'stats': [5,5,5,4], # four-integer list
  653. },
  654. {
  655. 'id': 65, #integer
  656. 'name': f"Kobold Adventurers", # formatted string
  657. 'shortname': f"kobolds", # formatted string
  658. 'hasMinion': False, # boolean
  659. 'potentialMinions': None # None or list of IDs
  660. 'needsName': False, # boolean
  661. '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
  662. 'stats': [5,5,5,4], # four-integer list
  663. },
  664. {
  665. 'id': 66, #integer
  666. 'name': f"Kobold Leader", # formatted string
  667. 'shortname': f"kobold", # formatted string
  668. 'hasMinion': True, # boolean
  669. 'potentialMinions': [56,57,58,59,60,61,62,63,64,65] # None or list of IDs
  670. 'needsName': True, # boolean
  671. '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
  672. 'stats': [5,5,6,4], # four-integer list
  673. },
  674. {
  675. 'id': 67, #integer
  676. 'name': f"", # formatted string
  677. 'shortname': f"", # formatted string
  678. 'hasMinion': False, # boolean
  679. 'potentialMinions': None # None or list of IDs
  680. 'needsName': True, # boolean
  681. 'note': "", # formatted string
  682. 'stats': [,,,], # four-integer list
  683. },
  684. {
  685. 'id': 68, #integer
  686. 'name': f"", # formatted string
  687. 'shortname': f"", # formatted string
  688. 'hasMinion': False, # boolean
  689. 'potentialMinions': None # None or list of IDs
  690. 'needsName': True, # boolean
  691. 'note': "", # formatted string
  692. 'stats': [,,,], # four-integer list
  693. },
  694. {
  695. 'id': 69, #integer
  696. 'name': f"", # formatted string
  697. 'shortname': f"", # formatted string
  698. 'hasMinion': False, # boolean
  699. 'potentialMinions': None # None or list of IDs
  700. 'needsName': True, # boolean
  701. 'note': "", # formatted string
  702. 'stats': [,,,], # four-integer list
  703. },
  704. {
  705. 'id': 70, #integer
  706. 'name': f"", # formatted string
  707. 'shortname': f"", # formatted string
  708. 'hasMinion': False, # boolean
  709. 'potentialMinions': None # None or list of IDs
  710. 'needsName': True, # boolean
  711. 'note': "", # formatted string
  712. 'stats': [,,,], # four-integer list
  713. },
  714. {
  715. 'id': 71, #integer
  716. 'name': f"", # formatted string
  717. 'shortname': f"", # formatted string
  718. 'hasMinion': False, # boolean
  719. 'potentialMinions': None # None or list of IDs
  720. 'needsName': True, # boolean
  721. 'note': "", # formatted string
  722. 'stats': [,,,], # four-integer list
  723. },
  724. {
  725. 'id': 72, #integer
  726. 'name': f"", # formatted string
  727. 'shortname': f"", # formatted string
  728. 'hasMinion': False, # boolean
  729. 'potentialMinions': None # None or list of IDs
  730. 'needsName': True, # boolean
  731. 'note': "", # formatted string
  732. 'stats': [,,,], # four-integer list
  733. },
  734. {
  735. 'id': 73, #integer
  736. 'name': f"", # formatted string
  737. 'shortname': f"", # formatted string
  738. 'hasMinion': False, # boolean
  739. 'potentialMinions': None # None or list of IDs
  740. 'needsName': True, # boolean
  741. 'note': "", # formatted string
  742. 'stats': [,,,], # four-integer list
  743. },
  744. {
  745. 'id': 74, #integer
  746. 'name': f"", # formatted string
  747. 'shortname': f"", # formatted string
  748. 'hasMinion': False, # boolean
  749. 'potentialMinions': None # None or list of IDs
  750. 'needsName': True, # boolean
  751. 'note': "", # formatted string
  752. 'stats': [,,,], # four-integer list
  753. },
  754. {
  755. 'id': 75, #integer
  756. 'name': f"", # formatted string
  757. 'shortname': f"", # formatted string
  758. 'hasMinion': False, # boolean
  759. 'potentialMinions': None # None or list of IDs
  760. 'needsName': True, # boolean
  761. 'note': "", # formatted string
  762. 'stats': [,,,], # four-integer list
  763. },
  764. {
  765. 'id': 76, #integer
  766. 'name': f"", # formatted string
  767. 'shortname': f"", # formatted string
  768. 'hasMinion': False, # boolean
  769. 'potentialMinions': None # None or list of IDs
  770. 'needsName': True, # boolean
  771. 'note': "", # formatted string
  772. 'stats': [,,,], # four-integer list
  773. },
  774. {
  775. 'id': 77, #integer
  776. 'name': f"", # formatted string
  777. 'shortname': f"", # formatted string
  778. 'hasMinion': False, # boolean
  779. 'potentialMinions': None # None or list of IDs
  780. 'needsName': True, # boolean
  781. 'note': "", # formatted string
  782. 'stats': [,,,], # four-integer list
  783. },
  784. {
  785. 'id': 78, #integer
  786. 'name': f"", # formatted string
  787. 'shortname': f"", # formatted string
  788. 'hasMinion': False, # boolean
  789. 'potentialMinions': None # None or list of IDs
  790. 'needsName': True, # boolean
  791. 'note': "", # formatted string
  792. 'stats': [,,,], # four-integer list
  793. },
  794. {
  795. 'id': 79, #integer
  796. 'name': f"", # formatted string
  797. 'shortname': f"", # formatted string
  798. 'hasMinion': False, # boolean
  799. 'potentialMinions': None # None or list of IDs
  800. 'needsName': True, # boolean
  801. 'note': "", # formatted string
  802. 'stats': [,,,], # four-integer list
  803. },
  804. {
  805. 'id': 80, #integer
  806. 'name': f"", # formatted string
  807. 'shortname': f"", # formatted string
  808. 'hasMinion': False, # boolean
  809. 'potentialMinions': None # None or list of IDs
  810. 'needsName': True, # boolean
  811. 'note': "", # formatted string
  812. 'stats': [,,,], # four-integer list
  813. },
  814. {
  815. 'id': 81, #integer
  816. 'name': f"", # formatted string
  817. 'shortname': f"", # formatted string
  818. 'hasMinion': False, # boolean
  819. 'potentialMinions': None # None or list of IDs
  820. 'needsName': True, # boolean
  821. 'note': "", # formatted string
  822. 'stats': [,,,], # four-integer list
  823. },
  824. {
  825. 'id': 82, #integer
  826. 'name': f"", # formatted string
  827. 'shortname': f"", # formatted string
  828. 'hasMinion': False, # boolean
  829. 'potentialMinions': None # None or list of IDs
  830. 'needsName': True, # boolean
  831. 'note': "", # formatted string
  832. 'stats': [,,,], # four-integer list
  833. },
  834. {
  835. 'id': 83, #integer
  836. 'name': f"", # formatted string
  837. 'shortname': f"", # formatted string
  838. 'hasMinion': False, # boolean
  839. 'potentialMinions': None # None or list of IDs
  840. 'needsName': True, # boolean
  841. 'note': "", # formatted string
  842. 'stats': [,,,], # four-integer list
  843. },
  844. {
  845. 'id': 84, #integer
  846. 'name': f"", # formatted string
  847. 'shortname': f"", # formatted string
  848. 'hasMinion': False, # boolean
  849. 'potentialMinions': None # None or list of IDs
  850. 'needsName': True, # boolean
  851. 'note': "", # formatted string
  852. 'stats': [,,,], # four-integer list
  853. },
  854. {
  855. 'id': 85, #integer
  856. 'name': f"", # formatted string
  857. 'shortname': f"", # formatted string
  858. 'hasMinion': False, # boolean
  859. 'potentialMinions': None # None or list of IDs
  860. 'needsName': True, # boolean
  861. 'note': "", # formatted string
  862. 'stats': [,,,], # four-integer list
  863. },
  864. {
  865. 'id': 86, #integer
  866. 'name': f"", # formatted string
  867. 'shortname': f"", # formatted string
  868. 'hasMinion': False, # boolean
  869. 'potentialMinions': None # None or list of IDs
  870. 'needsName': True, # boolean
  871. 'note': "", # formatted string
  872. 'stats': [,,,], # four-integer list
  873. },
  874. {
  875. 'id': 87, #integer
  876. 'name': f"", # formatted string
  877. 'shortname': f"", # formatted string
  878. 'hasMinion': False, # boolean
  879. 'potentialMinions': None # None or list of IDs
  880. 'needsName': True, # boolean
  881. 'note': "", # formatted string
  882. 'stats': [,,,], # four-integer list
  883. },
  884. {
  885. 'id': 88, #integer
  886. 'name': f"", # formatted string
  887. 'shortname': f"", # formatted string
  888. 'hasMinion': False, # boolean
  889. 'potentialMinions': None # None or list of IDs
  890. 'needsName': True, # boolean
  891. 'note': "", # formatted string
  892. 'stats': [,,,], # four-integer list
  893. },
  894. {
  895. 'id': 89, #integer
  896. 'name': f"", # formatted string
  897. 'shortname': f"", # formatted string
  898. 'hasMinion': False, # boolean
  899. 'potentialMinions': None # None or list of IDs
  900. 'needsName': True, # boolean
  901. 'note': "", # formatted string
  902. 'stats': [,,,], # four-integer list
  903. },
  904. {
  905. 'id': 90, #integer
  906. 'name': f"", # formatted string
  907. 'shortname': f"", # formatted string
  908. 'hasMinion': False, # boolean
  909. 'potentialMinions': None # None or list of IDs
  910. 'needsName': True, # boolean
  911. 'note': "", # formatted string
  912. 'stats': [,,,], # four-integer list
  913. },
  914. {
  915. 'id': 91, #integer
  916. 'name': f"", # formatted string
  917. 'shortname': f"", # formatted string
  918. 'hasMinion': False, # boolean
  919. 'potentialMinions': None # None or list of IDs
  920. 'needsName': True, # boolean
  921. 'note': "", # formatted string
  922. 'stats': [,,,], # four-integer list
  923. },
  924. {
  925. 'id': 92, #integer
  926. 'name': f"", # formatted string
  927. 'shortname': f"", # formatted string
  928. 'hasMinion': False, # boolean
  929. 'potentialMinions': None # None or list of IDs
  930. 'needsName': True, # boolean
  931. 'note': "", # formatted string
  932. 'stats': [,,,], # four-integer list
  933. },
  934. {
  935. 'id': 93, #integer
  936. 'name': f"", # formatted string
  937. 'shortname': f"", # formatted string
  938. 'hasMinion': False, # boolean
  939. 'potentialMinions': None # None or list of IDs
  940. 'needsName': True, # boolean
  941. 'note': "", # formatted string
  942. 'stats': [,,,], # four-integer list
  943. },
  944. {
  945. 'id': 94, #integer
  946. 'name': f"", # formatted string
  947. 'shortname': f"", # formatted string
  948. 'hasMinion': False, # boolean
  949. 'potentialMinions': None # None or list of IDs
  950. 'needsName': True, # boolean
  951. 'note': "", # formatted string
  952. 'stats': [,,,], # four-integer list
  953. },
  954. {
  955. 'id': 95, #integer
  956. 'name': f"", # formatted string
  957. 'shortname': f"", # formatted string
  958. 'hasMinion': False, # boolean
  959. 'potentialMinions': None # None or list of IDs
  960. 'needsName': True, # boolean
  961. 'note': "", # formatted string
  962. 'stats': [,,,], # four-integer list
  963. },
  964. {
  965. 'id': 96, #integer
  966. 'name': f"", # formatted string
  967. 'shortname': f"", # formatted string
  968. 'hasMinion': False, # boolean
  969. 'potentialMinions': None # None or list of IDs
  970. 'needsName': True, # boolean
  971. 'note': "", # formatted string
  972. 'stats': [,,,], # four-integer list
  973. },
  974. {
  975. 'id': 97, #integer
  976. 'name': f"", # formatted string
  977. 'shortname': f"", # formatted string
  978. 'hasMinion': False, # boolean
  979. 'potentialMinions': None # None or list of IDs
  980. 'needsName': True, # boolean
  981. 'note': "", # formatted string
  982. 'stats': [,,,], # four-integer list
  983. },
  984. {
  985. 'id': 98, #integer
  986. 'name': f"", # formatted string
  987. 'shortname': f"", # formatted string
  988. 'hasMinion': False, # boolean
  989. 'potentialMinions': None # None or list of IDs
  990. 'needsName': True, # boolean
  991. 'note': "", # formatted string
  992. 'stats': [,,,], # four-integer list
  993. },
  994. {
  995. 'id': 99, #integer
  996. 'name': f"", # formatted string
  997. 'shortname': f"", # formatted string
  998. 'hasMinion': False, # boolean
  999. 'potentialMinions': None # None or list of IDs
  1000. 'needsName': True, # boolean
  1001. 'note': "", # formatted string
  1002. 'stats': [,,,], # four-integer list
  1003. },
  1004. {
  1005. 'id': 100, #integer
  1006. 'name': f"", # formatted string
  1007. 'shortname': f"", # formatted string
  1008. 'hasMinion': False, # boolean
  1009. 'potentialMinions': None # None or list of IDs
  1010. 'needsName': True, # boolean
  1011. 'note': "", # formatted string
  1012. 'stats': [,,,], # four-integer list
  1013. },
  1014. {
  1015. 'id': 101, #integer
  1016. 'name': f"", # formatted string
  1017. 'shortname': f"", # formatted string
  1018. 'hasMinion': False, # boolean
  1019. 'potentialMinions': None # None or list of IDs
  1020. 'needsName': True, # boolean
  1021. 'note': "", # formatted string
  1022. 'stats': [,,,], # four-integer list
  1023. },
  1024. {
  1025. 'id': 102, #integer
  1026. 'name': f"", # formatted string
  1027. 'shortname': f"", # formatted string
  1028. 'hasMinion': False, # boolean
  1029. 'potentialMinions': None # None or list of IDs
  1030. 'needsName': True, # boolean
  1031. 'note': "", # formatted string
  1032. 'stats': [,,,], # four-integer list
  1033. },
  1034. {
  1035. 'id': 103, #integer
  1036. 'name': f"", # formatted string
  1037. 'shortname': f"", # formatted string
  1038. 'hasMinion': False, # boolean
  1039. 'potentialMinions': None # None or list of IDs
  1040. 'needsName': True, # boolean
  1041. 'note': "", # formatted string
  1042. 'stats': [,,,], # four-integer list
  1043. },
  1044. {
  1045. 'id': 104, #integer
  1046. 'name': f"", # formatted string
  1047. 'shortname': f"", # formatted string
  1048. 'hasMinion': False, # boolean
  1049. 'potentialMinions': None # None or list of IDs
  1050. 'needsName': True, # boolean
  1051. 'note': "", # formatted string
  1052. 'stats': [,,,], # four-integer list
  1053. },
  1054. {
  1055. 'id': 105, #integer
  1056. 'name': f"", # formatted string
  1057. 'shortname': f"", # formatted string
  1058. 'hasMinion': False, # boolean
  1059. 'potentialMinions': None # None or list of IDs
  1060. 'needsName': True, # boolean
  1061. 'note': "", # formatted string
  1062. 'stats': [,,,], # four-integer list
  1063. },
  1064. {
  1065. 'id': 106, #integer
  1066. 'name': f"", # formatted string
  1067. 'shortname': f"", # formatted string
  1068. 'hasMinion': False, # boolean
  1069. 'potentialMinions': None # None or list of IDs
  1070. 'needsName': True, # boolean
  1071. 'note': "", # formatted string
  1072. 'stats': [,,,], # four-integer list
  1073. },
  1074. {
  1075. 'id': 107, #integer
  1076. 'name': f"", # formatted string
  1077. 'shortname': f"", # formatted string
  1078. 'hasMinion': False, # boolean
  1079. 'potentialMinions': None # None or list of IDs
  1080. 'needsName': True, # boolean
  1081. 'note': "", # formatted string
  1082. 'stats': [,,,], # four-integer list
  1083. },
  1084. {
  1085. 'id': 108, #integer
  1086. 'name': f"", # formatted string
  1087. 'shortname': f"", # formatted string
  1088. 'hasMinion': False, # boolean
  1089. 'potentialMinions': None # None or list of IDs
  1090. 'needsName': True, # boolean
  1091. 'note': "", # formatted string
  1092. 'stats': [,,,], # four-integer list
  1093. },
  1094. {
  1095. 'id': 109, #integer
  1096. 'name': f"", # formatted string
  1097. 'shortname': f"", # formatted string
  1098. 'hasMinion': False, # boolean
  1099. 'potentialMinions': None # None or list of IDs
  1100. 'needsName': True, # boolean
  1101. 'note': "", # formatted string
  1102. 'stats': [,,,], # four-integer list
  1103. },
  1104. {
  1105. 'id': 110, #integer
  1106. 'name': f"", # formatted string
  1107. 'shortname': f"", # formatted string
  1108. 'hasMinion': False, # boolean
  1109. 'potentialMinions': None # None or list of IDs
  1110. 'needsName': True, # boolean
  1111. 'note': "", # formatted string
  1112. 'stats': [,,,], # four-integer list
  1113. },
  1114. {
  1115. 'id': 111, #integer
  1116. 'name': f"", # formatted string
  1117. 'shortname': f"", # formatted string
  1118. 'hasMinion': False, # boolean
  1119. 'potentialMinions': None # None or list of IDs
  1120. 'needsName': True, # boolean
  1121. 'note': "", # formatted string
  1122. 'stats': [,,,], # four-integer list
  1123. },
  1124. {
  1125. 'id': 112, #integer
  1126. 'name': f"", # formatted string
  1127. 'shortname': f"", # formatted string
  1128. 'hasMinion': False, # boolean
  1129. 'potentialMinions': None # None or list of IDs
  1130. 'needsName': True, # boolean
  1131. 'note': "", # formatted string
  1132. 'stats': [,,,], # four-integer list
  1133. },
  1134. {
  1135. 'id': 113, #integer
  1136. 'name': f"", # formatted string
  1137. 'shortname': f"", # formatted string
  1138. 'hasMinion': False, # boolean
  1139. 'potentialMinions': None # None or list of IDs
  1140. 'needsName': True, # boolean
  1141. 'note': "", # formatted string
  1142. 'stats': [,,,], # four-integer list
  1143. },
  1144. {
  1145. 'id': 114, #integer
  1146. 'name': f"", # formatted string
  1147. 'shortname': f"", # formatted string
  1148. 'hasMinion': False, # boolean
  1149. 'potentialMinions': None # None or list of IDs
  1150. 'needsName': True, # boolean
  1151. 'note': "", # formatted string
  1152. 'stats': [,,,], # four-integer list
  1153. },
  1154. {
  1155. 'id': 115, #integer
  1156. 'name': f"", # formatted string
  1157. 'shortname': f"", # formatted string
  1158. 'hasMinion': False, # boolean
  1159. 'potentialMinions': None # None or list of IDs
  1160. 'needsName': True, # boolean
  1161. 'note': "", # formatted string
  1162. 'stats': [,,,], # four-integer list
  1163. },
  1164. {
  1165. 'id': 116, #integer
  1166. 'name': f"", # formatted string
  1167. 'shortname': f"", # formatted string
  1168. 'hasMinion': False, # boolean
  1169. 'potentialMinions': None # None or list of IDs
  1170. 'needsName': True, # boolean
  1171. 'note': "", # formatted string
  1172. 'stats': [,,,], # four-integer list
  1173. },
  1174. {
  1175. 'id': 117, #integer
  1176. 'name': f"", # formatted string
  1177. 'shortname': f"", # formatted string
  1178. 'hasMinion': False, # boolean
  1179. 'potentialMinions': None # None or list of IDs
  1180. 'needsName': True, # boolean
  1181. 'note': "", # formatted string
  1182. 'stats': [,,,], # four-integer list
  1183. },
  1184. {
  1185. 'id': 118, #integer
  1186. 'name': f"", # formatted string
  1187. 'shortname': f"", # formatted string
  1188. 'hasMinion': False, # boolean
  1189. 'potentialMinions': None # None or list of IDs
  1190. 'needsName': True, # boolean
  1191. 'note': "", # formatted string
  1192. 'stats': [,,,], # four-integer list
  1193. },
  1194. {
  1195. 'id': 119, #integer
  1196. 'name': f"", # formatted string
  1197. 'shortname': f"", # formatted string
  1198. 'hasMinion': False, # boolean
  1199. 'potentialMinions': None # None or list of IDs
  1200. 'needsName': True, # boolean
  1201. 'note': "", # formatted string
  1202. 'stats': [,,,], # four-integer list
  1203. },
  1204. {
  1205. 'id': 120, #integer
  1206. 'name': f"", # formatted string
  1207. 'shortname': f"", # formatted string
  1208. 'hasMinion': False, # boolean
  1209. 'potentialMinions': None # None or list of IDs
  1210. 'needsName': True, # boolean
  1211. 'note': "", # formatted string
  1212. 'stats': [,,,], # four-integer list
  1213. },
  1214. ]