mirror of
https://github.com/rr-/pq-cli.git
synced 2026-11-12 22:40:36 -07:00
mechanic: move word lists to data files
The word lists (monsters, spells, equipment, races, classes, titles and
so on) now live in pqcli/data/*.json instead of pqcli/config.py. A
GameData object loaded at startup is passed to the simulation and UIs.
Users can replace any list by putting NAME.json in
$XDG_CONFIG_HOME/pqcli/data/ or a directory given with --data-dir.
--dump-data DIR copies the built-in files out for editing. Malformed
files are reported and pqcli exits before starting the UI.
Combat task descriptions come from the new combat_verbs list, with
{target} standing for the enemy. The built-in list holds only "Executing
{target}", and a single verb consumes no random roll, so stock gameplay
is unchanged. Recorded traces in tests/fixtures pin this down.
Monster, Race and Class stay in pqcli.config so existing saves still
load.
Resolves #3
This commit is contained in:
38 files changed
+7143
-778
No files matched your search
+3
-676
@@ -39,56 +39,9 @@ PRIME_STATS = [
|
||||
|
||||
ALL_STATS = PRIME_STATS + [StatType.hp_max, StatType.mp_max]
|
||||
|
||||
|
||||
SPELLS = [
|
||||
"Slime Finger",
|
||||
"Rabbit Punch",
|
||||
"Hastiness",
|
||||
"Good Move",
|
||||
"Sadness",
|
||||
"Seasick",
|
||||
"Shoelaces",
|
||||
"Inoculate",
|
||||
"Cone of Annoyance",
|
||||
"Magnetic Orb",
|
||||
"Invisible Hands",
|
||||
"Revolting Cloud",
|
||||
"Aqueous Humor",
|
||||
"Spectral Miasma",
|
||||
"Clever Fellow",
|
||||
"Lockjaw",
|
||||
"History Lesson",
|
||||
"Hydrophobia",
|
||||
"Big Sister",
|
||||
"Cone of Paste",
|
||||
"Mulligan",
|
||||
"Nestor's Bright Idea",
|
||||
"Holy Batpole",
|
||||
"Tumor (Benign)",
|
||||
"Braingate",
|
||||
"Summon a Bitch",
|
||||
"Nonplus",
|
||||
"Animate Nightstand",
|
||||
"Eye of the Troglodyte",
|
||||
"Curse Name",
|
||||
"Dropsy",
|
||||
"Vitreous Humor",
|
||||
"Roger's Grand Illusion",
|
||||
"Covet",
|
||||
"Black Idaho",
|
||||
"Astral Miasma",
|
||||
"Spectral Oyster",
|
||||
"Acrid Hands",
|
||||
"Angioplasty",
|
||||
"Grognor's Big Day Off",
|
||||
"Tumor (Malignant)",
|
||||
"Animate Tunic",
|
||||
"Ursine Armor",
|
||||
"Holy Roller",
|
||||
"Tonsillectomy",
|
||||
"Curse Family",
|
||||
"Infinite Confusion",
|
||||
]
|
||||
# The word lists live in pqcli/data/*.json (see pqcli.game_data).
|
||||
# Saves pickle Monster, Race and Class instances by import path, so these
|
||||
# classes must stay in this module.
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -97,329 +50,12 @@ class Modifier:
|
||||
quality: int
|
||||
|
||||
|
||||
OFFENSE_ATTRIB = [
|
||||
Modifier("Polished", 1),
|
||||
Modifier("Serrated", 1),
|
||||
Modifier("Heavy", 1),
|
||||
Modifier("Pronged", 2),
|
||||
Modifier("Steely", 2),
|
||||
Modifier("Vicious", 3),
|
||||
Modifier("Venomed", 4),
|
||||
Modifier("Stabbity", 4),
|
||||
Modifier("Dancing", 5),
|
||||
Modifier("Invisible", 6),
|
||||
Modifier("Vorpal", 7),
|
||||
]
|
||||
|
||||
DEFENSE_ATTRIB = [
|
||||
Modifier("Studded", 1),
|
||||
Modifier("Banded", 2),
|
||||
Modifier("Gilded", 2),
|
||||
Modifier("Festooned", 3),
|
||||
Modifier("Holy", 4),
|
||||
Modifier("Cambric", 1),
|
||||
Modifier("Fine", 4),
|
||||
Modifier("Impressive", 5),
|
||||
Modifier("Custom", 3),
|
||||
]
|
||||
|
||||
OFFENSE_BAD = [
|
||||
Modifier("Dull", -2),
|
||||
Modifier("Tarnished", -1),
|
||||
Modifier("Rusty", -3),
|
||||
Modifier("Padded", -5),
|
||||
Modifier("Bent", -4),
|
||||
Modifier("Mini", -4),
|
||||
Modifier("Rubber", -6),
|
||||
Modifier("Nerf", -7),
|
||||
Modifier("Unbalanced", -2),
|
||||
]
|
||||
|
||||
DEFENSE_BAD = [
|
||||
Modifier("Holey", -1),
|
||||
Modifier("Patched", -1),
|
||||
Modifier("Threadbare", -2),
|
||||
Modifier("Faded", -1),
|
||||
Modifier("Rusty", -3),
|
||||
Modifier("Motheaten", -3),
|
||||
Modifier("Mildewed", -2),
|
||||
Modifier("Torn", -3),
|
||||
Modifier("Dented", -3),
|
||||
Modifier("Cursed", -5),
|
||||
Modifier("Plastic", -4),
|
||||
Modifier("Cracked", -4),
|
||||
Modifier("Warped", -3),
|
||||
Modifier("Corroded", -3),
|
||||
]
|
||||
|
||||
|
||||
@dataclass
|
||||
class EquipmentPreset:
|
||||
name: str
|
||||
quality: int
|
||||
|
||||
|
||||
SHIELDS = [
|
||||
EquipmentPreset("Parasol", 0),
|
||||
EquipmentPreset("Pie Plate", 1),
|
||||
EquipmentPreset("Garbage Can Lid", 2),
|
||||
EquipmentPreset("Buckler", 3),
|
||||
EquipmentPreset("Plexiglass", 4),
|
||||
EquipmentPreset("Fender", 4),
|
||||
EquipmentPreset("Round Shield", 5),
|
||||
EquipmentPreset("Carapace", 5),
|
||||
EquipmentPreset("Scutum", 6),
|
||||
EquipmentPreset("Propugner", 6),
|
||||
EquipmentPreset("Kite Shield", 7),
|
||||
EquipmentPreset("Pavise", 8),
|
||||
EquipmentPreset("Tower Shield", 9),
|
||||
EquipmentPreset("Baroque Shield", 11),
|
||||
EquipmentPreset("Aegis", 12),
|
||||
EquipmentPreset("Magnetic Field", 18),
|
||||
]
|
||||
|
||||
ARMORS = [
|
||||
EquipmentPreset("Lace", 1),
|
||||
EquipmentPreset("Macrame", 2),
|
||||
EquipmentPreset("Burlap", 3),
|
||||
EquipmentPreset("Canvas", 4),
|
||||
EquipmentPreset("Flannel", 5),
|
||||
EquipmentPreset("Chamois", 6),
|
||||
EquipmentPreset("Pleathers", 7),
|
||||
EquipmentPreset("Leathers", 8),
|
||||
EquipmentPreset("Bearskin", 9),
|
||||
EquipmentPreset("Ringmail", 10),
|
||||
EquipmentPreset("Scale Mail", 12),
|
||||
EquipmentPreset("Chainmail", 14),
|
||||
EquipmentPreset("Splint Mail", 15),
|
||||
EquipmentPreset("Platemail", 16),
|
||||
EquipmentPreset("ABS", 17),
|
||||
EquipmentPreset("Kevlar", 18),
|
||||
EquipmentPreset("Titanium", 19),
|
||||
EquipmentPreset("Mithril Mail", 20),
|
||||
EquipmentPreset("Diamond Mail", 25),
|
||||
EquipmentPreset("Plasma", 30),
|
||||
]
|
||||
|
||||
WEAPONS = [
|
||||
EquipmentPreset("Stick", 0),
|
||||
EquipmentPreset("Broken Bottle", 1),
|
||||
EquipmentPreset("Shiv", 1),
|
||||
EquipmentPreset("Sprig", 1),
|
||||
EquipmentPreset("Oxgoad", 1),
|
||||
EquipmentPreset("Eelspear", 2),
|
||||
EquipmentPreset("Bowie Knife", 2),
|
||||
EquipmentPreset("Claw Hammer", 2),
|
||||
EquipmentPreset("Handpeen", 2),
|
||||
EquipmentPreset("Andiron", 3),
|
||||
EquipmentPreset("Hatchet", 3),
|
||||
EquipmentPreset("Tomahawk", 3),
|
||||
EquipmentPreset("Hackbarm", 3),
|
||||
EquipmentPreset("Crowbar", 4),
|
||||
EquipmentPreset("Mace", 4),
|
||||
EquipmentPreset("Battleadze", 4),
|
||||
EquipmentPreset("Leafmace", 5),
|
||||
EquipmentPreset("Shortsword", 5),
|
||||
EquipmentPreset("Longiron", 5),
|
||||
EquipmentPreset("Poachard", 5),
|
||||
EquipmentPreset("Baselard", 5),
|
||||
EquipmentPreset("Whinyard", 6),
|
||||
EquipmentPreset("Blunderbuss", 6),
|
||||
EquipmentPreset("Longsword", 6),
|
||||
EquipmentPreset("Crankbow", 6),
|
||||
EquipmentPreset("Blibo", 7),
|
||||
EquipmentPreset("Broadsword", 7),
|
||||
EquipmentPreset("Kreen", 7),
|
||||
EquipmentPreset("Warhammer", 7),
|
||||
EquipmentPreset("Morning Star", 8),
|
||||
EquipmentPreset("Pole-adze", 8),
|
||||
EquipmentPreset("Spontoon", 8),
|
||||
EquipmentPreset("Bastard Sword", 9),
|
||||
EquipmentPreset("Peen-arm", 9),
|
||||
EquipmentPreset("Culverin", 10),
|
||||
EquipmentPreset("Lance", 10),
|
||||
EquipmentPreset("Halberd", 11),
|
||||
EquipmentPreset("Poleax", 12),
|
||||
EquipmentPreset("Bandyclef", 15),
|
||||
]
|
||||
|
||||
SPECIALS = [
|
||||
"Diadem",
|
||||
"Festoon",
|
||||
"Gemstone",
|
||||
"Phial",
|
||||
"Tiara",
|
||||
"Scabbard",
|
||||
"Arrow",
|
||||
"Lens",
|
||||
"Lamp",
|
||||
"Hymnal",
|
||||
"Fleece",
|
||||
"Laurel",
|
||||
"Brooch",
|
||||
"Gimlet",
|
||||
"Cobble",
|
||||
"Albatross",
|
||||
"Brazier",
|
||||
"Bandolier",
|
||||
"Tome",
|
||||
"Garnet",
|
||||
"Amethyst",
|
||||
"Candelabra",
|
||||
"Corset",
|
||||
"Sphere",
|
||||
"Sceptre",
|
||||
"Ankh",
|
||||
"Talisman",
|
||||
"Orb",
|
||||
"Gammel",
|
||||
"Ornament",
|
||||
"Brocade",
|
||||
"Galoon",
|
||||
"Bijou",
|
||||
"Spangle",
|
||||
"Gimcrack",
|
||||
"Hood",
|
||||
"Vulpeculum",
|
||||
]
|
||||
|
||||
ITEM_ATTRIB = [
|
||||
"Golden",
|
||||
"Gilded",
|
||||
"Spectral",
|
||||
"Astral",
|
||||
"Garlanded",
|
||||
"Precious",
|
||||
"Crafted",
|
||||
"Dual",
|
||||
"Filigreed",
|
||||
"Cruciate",
|
||||
"Arcane",
|
||||
"Blessed",
|
||||
"Reverential",
|
||||
"Lucky",
|
||||
"Enchanted",
|
||||
"Gleaming",
|
||||
"Grandiose",
|
||||
"Sacred",
|
||||
"Legendary",
|
||||
"Mythic",
|
||||
"Crystalline",
|
||||
"Austere",
|
||||
"Ostentatious",
|
||||
"One True",
|
||||
"Proverbial",
|
||||
"Fearsome",
|
||||
"Deadly",
|
||||
"Benevolent",
|
||||
"Unearthly",
|
||||
"Magnificent",
|
||||
"Iron",
|
||||
"Ormolu",
|
||||
"Puissant",
|
||||
]
|
||||
|
||||
ITEM_OFS = [
|
||||
"Foreboding",
|
||||
"Foreshadowing",
|
||||
"Nervousness",
|
||||
"Happiness",
|
||||
"Torpor",
|
||||
"Danger",
|
||||
"Craft",
|
||||
"Silence",
|
||||
"Invisibility",
|
||||
"Rapidity",
|
||||
"Pleasure",
|
||||
"Practicality",
|
||||
"Hurting",
|
||||
"Joy",
|
||||
"Petulance",
|
||||
"Intrusion",
|
||||
"Chaos",
|
||||
"Suffering",
|
||||
"Extroversion",
|
||||
"Frenzy",
|
||||
"Sisu",
|
||||
"Solitude",
|
||||
"Punctuality",
|
||||
"Efficiency",
|
||||
"Comfort",
|
||||
"Patience",
|
||||
"Internment",
|
||||
"Incarceration",
|
||||
"Misapprehension",
|
||||
"Loyalty",
|
||||
"Envy",
|
||||
"Acrimony",
|
||||
"Worry",
|
||||
"Fear",
|
||||
"Awe",
|
||||
"Guile",
|
||||
"Prurience",
|
||||
"Fortune",
|
||||
"Perspicacity",
|
||||
"Domination",
|
||||
"Submission",
|
||||
"Fealty",
|
||||
"Hunger",
|
||||
"Despair",
|
||||
"Cruelty",
|
||||
"Grob",
|
||||
"Dignard",
|
||||
"Ra",
|
||||
"the Bone",
|
||||
"Diamonique",
|
||||
"Electrum",
|
||||
"Hydragyrum",
|
||||
]
|
||||
|
||||
BORING_ITEMS = [
|
||||
"nail",
|
||||
"lunchpail",
|
||||
"sock",
|
||||
"I.O.U.",
|
||||
"cookie",
|
||||
"pint",
|
||||
"toothpick",
|
||||
"writ",
|
||||
"newspaper",
|
||||
"letter",
|
||||
"plank",
|
||||
"hat",
|
||||
"egg",
|
||||
"coin",
|
||||
"needle",
|
||||
"bucket",
|
||||
"ladder",
|
||||
"chicken",
|
||||
"twig",
|
||||
"dirtclod",
|
||||
"counterpane",
|
||||
"vest",
|
||||
"teratoma",
|
||||
"bunny",
|
||||
"rock",
|
||||
"pole",
|
||||
"carrot",
|
||||
"canoe",
|
||||
"inkwell",
|
||||
"hoe",
|
||||
"bandage",
|
||||
"trowel",
|
||||
"towel",
|
||||
"planter box",
|
||||
"anvil",
|
||||
"axle",
|
||||
"tuppence",
|
||||
"casket",
|
||||
"nosegay",
|
||||
"trinket",
|
||||
"credenza",
|
||||
"writ",
|
||||
]
|
||||
|
||||
|
||||
@dataclass
|
||||
class Monster:
|
||||
name: str
|
||||
@@ -427,322 +63,13 @@ class Monster:
|
||||
item: T.Optional[str]
|
||||
|
||||
|
||||
MONSTERS = [
|
||||
Monster("Anhkheg", 6, "chitin"),
|
||||
Monster("Ant", 0, "antenna"),
|
||||
Monster("Ape", 4, "ass"),
|
||||
Monster("Baluchitherium", 14, "ear"),
|
||||
Monster("Beholder", 10, "eyestalk"),
|
||||
Monster("Black Pudding", 10, "saliva"),
|
||||
Monster("Blink Dog", 4, "eyelid"),
|
||||
Monster("Cub Scout", 1, "neckerchief"),
|
||||
Monster("Girl Scout", 2, "cookie"),
|
||||
Monster("Boy Scout", 3, "merit badge"),
|
||||
Monster("Eagle Scout", 4, "merit badge"),
|
||||
Monster("Bugbear", 3, "skin"),
|
||||
Monster("Bugboar", 3, "tusk"),
|
||||
Monster("Boogie", 3, "slime"),
|
||||
Monster("Camel", 2, "hump"),
|
||||
Monster("Carrion Crawler", 3, "egg"),
|
||||
Monster("Catoblepas", 6, "neck"),
|
||||
Monster("Centaur", 4, "rib"),
|
||||
Monster("Centipede", 0, "leg"),
|
||||
Monster("Cockatrice", 5, "wattle"),
|
||||
Monster("Couatl", 9, "wing"),
|
||||
Monster("Crayfish", 0, "antenna"),
|
||||
Monster("Demogorgon", 53, "tentacle"),
|
||||
Monster("Jubilex", 17, "gel"),
|
||||
Monster("Manes", 1, "tooth"),
|
||||
Monster("Orcus", 27, "wand"),
|
||||
Monster("Succubus", 6, "bra"),
|
||||
Monster("Vrock", 8, "neck"),
|
||||
Monster("Hezrou", 9, "leg"),
|
||||
Monster("Glabrezu", 10, "collar"),
|
||||
Monster("Nalfeshnee", 11, "tusk"),
|
||||
Monster("Marilith", 7, "arm"),
|
||||
Monster("Balor", 8, "whip"),
|
||||
Monster("Yeenoghu", 25, "flail"),
|
||||
Monster("Asmodeus", 52, "leathers"),
|
||||
Monster("Baalzebul", 43, "pants"),
|
||||
Monster("Barbed Devil", 8, "flame"),
|
||||
Monster("Bone Devil", 9, "hook"),
|
||||
Monster("Dispater", 30, "matches"),
|
||||
Monster("Erinyes", 6, "thong"),
|
||||
Monster("Geryon", 30, "cornucopia"),
|
||||
Monster("Malebranche", 5, "fork"),
|
||||
Monster("Ice Devil", 11, "snow"),
|
||||
Monster("Lemure", 3, "blob"),
|
||||
Monster("Pit Fiend", 13, "seed"),
|
||||
Monster("Ankylosaurus", 9, "tail"),
|
||||
Monster("Brontosaurus", 30, "brain"),
|
||||
Monster("Diplodocus", 24, "fin"),
|
||||
Monster("Elasmosaurus", 15, "neck"),
|
||||
Monster("Gorgosaurus", 13, "arm"),
|
||||
Monster("Iguanadon", 6, "thumb"),
|
||||
Monster("Megalosaurus", 12, "jaw"),
|
||||
Monster("Monoclonius", 8, "horn"),
|
||||
Monster("Pentasaurus", 12, "head"),
|
||||
Monster("Stegosaurus", 18, "plate"),
|
||||
Monster("Triceratops", 16, "horn"),
|
||||
Monster("Tyrannosaurus Rex", 18, "forearm"),
|
||||
Monster("Djinn", 7, "lamp"),
|
||||
Monster("Doppelganger", 4, "face"),
|
||||
Monster("Black Dragon", 7, None),
|
||||
Monster("Plaid Dragon", 7, "sporrin"),
|
||||
Monster("Blue Dragon", 9, None),
|
||||
Monster("Beige Dragon", 9, None),
|
||||
Monster("Brass Dragon", 7, "pole"),
|
||||
Monster("Tin Dragon", 8, None),
|
||||
Monster("Bronze Dragon", 9, "medal"),
|
||||
Monster("Chromatic Dragon", 16, "scale"),
|
||||
Monster("Copper Dragon", 8, "loafer"),
|
||||
Monster("Gold Dragon", 8, "filling"),
|
||||
Monster("Green Dragon", 8, None),
|
||||
Monster("Platinum Dragon", 21, None),
|
||||
Monster("Red Dragon", 10, "cocktail"),
|
||||
Monster("Silver Dragon", 10, None),
|
||||
Monster("White Dragon", 6, "tooth"),
|
||||
Monster("Dragon Turtle", 13, "shell"),
|
||||
Monster("Dryad", 2, "acorn"),
|
||||
Monster("Dwarf", 1, "drawers"),
|
||||
Monster("Eel", 2, "sashimi"),
|
||||
Monster("Efreet", 10, "cinder"),
|
||||
Monster("Sand Elemental", 8, "glass"),
|
||||
Monster("Bacon Elemental", 10, "bit"),
|
||||
Monster("Porn Elemental", 12, "lube"),
|
||||
Monster("Cheese Elemental", 14, "curd"),
|
||||
Monster("Hair Elemental", 16, "follicle"),
|
||||
Monster("Swamp Elf", 1, "lilypad"),
|
||||
Monster("Brown Elf", 1, "tusk"),
|
||||
Monster("Sea Elf", 1, "jerkin"),
|
||||
Monster("Ettin", 10, "fur"),
|
||||
Monster("Frog", 0, "leg"),
|
||||
Monster("Violet Fungi", 3, "spore"),
|
||||
Monster("Gargoyle", 4, "gravel"),
|
||||
Monster("Gelatinous Cube", 4, "jam"),
|
||||
Monster("Ghast", 4, "vomit"),
|
||||
Monster("Ghost", 10, None),
|
||||
Monster("Ghoul", 2, "muscle"),
|
||||
Monster("Humidity Giant", 12, "drops"),
|
||||
Monster("Beef Giant", 11, "steak"),
|
||||
Monster("Quartz Giant", 10, "crystal"),
|
||||
Monster("Porcelain Giant", 9, "fixture"),
|
||||
Monster("Rice Giant", 8, "grain"),
|
||||
Monster("Cloud Giant", 12, "condensation"),
|
||||
Monster("Fire Giant", 11, "cigarettes"),
|
||||
Monster("Frost Giant", 10, "snowman"),
|
||||
Monster("Hill Giant", 8, "corpse"),
|
||||
Monster("Stone Giant", 9, "hatchling"),
|
||||
Monster("Storm Giant", 15, "barometer"),
|
||||
Monster("Mini Giant", 4, "pompadour"),
|
||||
Monster("Gnoll", 2, "collar"),
|
||||
Monster("Gnome", 1, "hat"),
|
||||
Monster("Goblin", 1, "ear"),
|
||||
Monster("Grid Bug", 1, "carapace"),
|
||||
Monster("Jellyrock", 9, "seedling"),
|
||||
Monster("Beer Golem", 15, "foam"),
|
||||
Monster("Oxygen Golem", 17, "platelet"),
|
||||
Monster("Cardboard Golem", 14, "recycling"),
|
||||
Monster("Rubber Golem", 16, "ball"),
|
||||
Monster("Leather Golem", 15, "fob"),
|
||||
Monster("Gorgon", 8, "testicle"),
|
||||
Monster("Gray Ooze", 3, "gravy"),
|
||||
Monster("Green Slime", 2, "sample"),
|
||||
Monster("Griffon", 7, "nest"),
|
||||
Monster("Banshee", 7, "larynx"),
|
||||
Monster("Harpy", 3, "mascara"),
|
||||
Monster("Hell Hound", 5, "tongue"),
|
||||
Monster("Hippocampus", 4, "mane"),
|
||||
Monster("Hippogriff", 3, "egg"),
|
||||
Monster("Hobgoblin", 1, "patella"),
|
||||
Monster("Homunculus", 2, "fluid"),
|
||||
Monster("Hydra", 8, "gyrum"),
|
||||
Monster("Imp", 2, "tail"),
|
||||
Monster("Invisible Stalker", 8, None),
|
||||
Monster("Iron Peasant", 3, "chaff"),
|
||||
Monster("Jumpskin", 3, "shin"),
|
||||
Monster("Kobold", 1, "penis"),
|
||||
Monster("Leprechaun", 1, "wallet"),
|
||||
Monster("Leucrotta", 6, "hoof"),
|
||||
Monster("Lich", 11, "crown"),
|
||||
Monster("Lizard Man", 2, "tail"),
|
||||
Monster("Lurker", 10, "sac"),
|
||||
Monster("Manticore", 6, "spike"),
|
||||
Monster("Mastodon", 12, "tusk"),
|
||||
Monster("Medusa", 6, "eye"),
|
||||
Monster("Multicell", 2, "dendrite"),
|
||||
Monster("Pirate", 1, "booty"),
|
||||
Monster("Berserker", 1, "shirt"),
|
||||
Monster("Caveman", 2, "club"),
|
||||
Monster("Dervish", 1, "robe"),
|
||||
Monster("Merman", 1, "trident"),
|
||||
Monster("Mermaid", 1, "gills"),
|
||||
Monster("Mimic", 9, "hinge"),
|
||||
Monster("Mind Flayer", 8, "tentacle"),
|
||||
Monster("Minotaur", 6, "map"),
|
||||
Monster("Yellow Mold", 1, "spore"),
|
||||
Monster("Morkoth", 7, "teeth"),
|
||||
Monster("Mummy", 6, "gauze"),
|
||||
Monster("Naga", 9, "rattle"),
|
||||
Monster("Nebbish", 1, "belly"),
|
||||
Monster("Neo-Otyugh", 11, "organ "),
|
||||
Monster("Nixie", 1, "webbing"),
|
||||
Monster("Nymph", 3, "hanky"),
|
||||
Monster("Ochre Jelly", 6, "nucleus"),
|
||||
Monster("Octopus", 2, "beak"),
|
||||
Monster("Ogre", 4, "talon"),
|
||||
Monster("Ogre Mage", 5, "apparel"),
|
||||
Monster("Orc", 1, "snout"),
|
||||
Monster("Otyugh", 7, "organ"),
|
||||
Monster("Owlbear", 5, "feather"),
|
||||
Monster("Pegasus", 4, "aileron"),
|
||||
Monster("Peryton", 4, "antler"),
|
||||
Monster("Piercer", 3, "tip"),
|
||||
Monster("Pixie", 1, "dust"),
|
||||
Monster("Man-o-war", 3, "tentacle"),
|
||||
Monster("Purple Worm", 15, "dung"),
|
||||
Monster("Quasit", 3, "tail"),
|
||||
Monster("Rakshasa", 7, "pajamas"),
|
||||
Monster("Rat", 0, "tail"),
|
||||
Monster("Remorhaz", 11, "protrusion"),
|
||||
Monster("Roc", 18, "wing"),
|
||||
Monster("Roper", 11, "twine"),
|
||||
Monster("Rot Grub", 1, "eggsac"),
|
||||
Monster("Rust Monster", 5, "shavings"),
|
||||
Monster("Satyr", 5, "hoof"),
|
||||
Monster("Sea Hag", 3, "wart"),
|
||||
Monster("Silkie", 3, "fur"),
|
||||
Monster("Shadow", 3, "silhouette"),
|
||||
Monster("Shambling Mound", 10, "mulch"),
|
||||
Monster("Shedu", 9, "hoof"),
|
||||
Monster("Shrieker", 3, "stalk"),
|
||||
Monster("Skeleton", 1, "clavicle"),
|
||||
Monster("Spectre", 7, "vestige"),
|
||||
Monster("Sphinx", 10, "paw"),
|
||||
Monster("Spider", 0, "web"),
|
||||
Monster("Sprite", 1, "can"),
|
||||
Monster("Stirge", 1, "proboscis"),
|
||||
Monster("Stun Bear", 5, "tooth"),
|
||||
Monster("Stun Worm", 2, "trode"),
|
||||
Monster("Su-monster", 5, "tail"),
|
||||
Monster("Sylph", 3, "thigh"),
|
||||
Monster("Titan", 20, "sandal"),
|
||||
Monster("Trapper", 12, "shag"),
|
||||
Monster("Treant", 10, "acorn"),
|
||||
Monster("Triton", 3, "scale"),
|
||||
Monster("Troglodyte", 2, "tail"),
|
||||
Monster("Troll", 6, "hide"),
|
||||
Monster("Umber Hulk", 8, "claw"),
|
||||
Monster("Unicorn", 4, "blood"),
|
||||
Monster("Vampire", 8, "pancreas"),
|
||||
Monster("Wight", 4, "lung"),
|
||||
Monster("Will-o'-the-Wisp", 9, "wisp"),
|
||||
Monster("Wraith", 5, "finger"),
|
||||
Monster("Wyvern", 7, "wing"),
|
||||
Monster("Xorn", 7, "jaw"),
|
||||
Monster("Yeti", 4, "fur"),
|
||||
Monster("Zombie", 2, "forehead"),
|
||||
Monster("Wasp", 0, "stinger"),
|
||||
Monster("Rat", 1, "tail"),
|
||||
Monster("Bunny", 0, "ear"),
|
||||
Monster("Moth", 0, "dust"),
|
||||
Monster("Beagle", 0, "collar"),
|
||||
Monster("Midge", 0, "corpse"),
|
||||
Monster("Ostrich", 1, "beak"),
|
||||
Monster("Billy Goat", 1, "beard"),
|
||||
Monster("Bat", 1, "wing"),
|
||||
Monster("Koala", 2, "heart"),
|
||||
Monster("Wolf", 2, "paw"),
|
||||
Monster("Whippet", 2, "collar"),
|
||||
Monster("Uruk", 2, "boot"),
|
||||
Monster("Poroid", 4, "node"),
|
||||
Monster("Moakum", 8, "frenum"),
|
||||
Monster("Fly", 0, None),
|
||||
Monster("Hogbird", 3, "curl"),
|
||||
Monster("Wolog", 4, "lemma"),
|
||||
]
|
||||
|
||||
|
||||
@dataclass
|
||||
class Race:
|
||||
name: str
|
||||
attr: T.List[StatType]
|
||||
|
||||
|
||||
RACES = [
|
||||
Race("Half Orc", [StatType.hp_max]),
|
||||
Race("Half Man", [StatType.charisma]),
|
||||
Race("Half Halfling", [StatType.dexterity]),
|
||||
Race("Double Hobbit", [StatType.strength]),
|
||||
Race("Hob-Hobbit", [StatType.dexterity, StatType.condition]),
|
||||
Race("Low Elf", [StatType.condition]),
|
||||
Race("Dung Elf", [StatType.wisdom]),
|
||||
Race("Talking Pony", [StatType.mp_max, StatType.intelligence]),
|
||||
Race("Gyrognome", [StatType.dexterity]),
|
||||
Race("Lesser Dwarf", [StatType.condition]),
|
||||
Race("Crested Dwarf", [StatType.charisma]),
|
||||
Race("Eel Man", [StatType.dexterity]),
|
||||
Race("Panda Man", [StatType.condition, StatType.strength]),
|
||||
Race("Trans-Kobold", [StatType.wisdom]),
|
||||
Race("Enchanted Motorcycle", [StatType.mp_max]),
|
||||
Race("Will o' the Wisp", [StatType.wisdom]),
|
||||
Race("Battle-Finch", [StatType.dexterity, StatType.intelligence]),
|
||||
Race("Double Wookiee", [StatType.strength]),
|
||||
Race("Skraeling", [StatType.wisdom]),
|
||||
Race("Demicanadian", [StatType.condition]),
|
||||
Race("Land Squid", [StatType.strength, StatType.hp_max]),
|
||||
]
|
||||
|
||||
|
||||
@dataclass
|
||||
class Class:
|
||||
name: str
|
||||
attr: T.List[StatType]
|
||||
|
||||
|
||||
CLASSES = [
|
||||
Class("Ur-Paladin", [StatType.wisdom, StatType.condition]),
|
||||
Class("Voodoo Princess", [StatType.intelligence, StatType.charisma]),
|
||||
Class("Robot Monk", [StatType.strength]),
|
||||
Class("Mu-Fu Monk", [StatType.dexterity]),
|
||||
Class("Mage Illusioner", [StatType.intelligence, StatType.mp_max]),
|
||||
Class("Shiv-Knight", [StatType.dexterity]),
|
||||
Class("Inner Mason", [StatType.condition]),
|
||||
Class("Fighter/Organist", [StatType.charisma, StatType.strength]),
|
||||
Class("Puma Burgular", [StatType.dexterity]),
|
||||
Class("Runeloremaster", [StatType.wisdom]),
|
||||
Class("Hunter Strangler", [StatType.dexterity, StatType.intelligence]),
|
||||
Class("Battle-Felon", [StatType.strength]),
|
||||
Class("Tickle-Mimic", [StatType.wisdom, StatType.intelligence]),
|
||||
Class("Slow Poisoner", [StatType.condition]),
|
||||
Class("Bastard Lunatic", [StatType.condition]),
|
||||
Class("Lowling", [StatType.wisdom]),
|
||||
Class("Birdrider", [StatType.wisdom]),
|
||||
Class("Vermineer", [StatType.intelligence]),
|
||||
]
|
||||
|
||||
TITLES = [
|
||||
"Mr.",
|
||||
"Mrs.",
|
||||
"Sir",
|
||||
"Sgt.",
|
||||
"Ms.",
|
||||
"Captain",
|
||||
"Chief",
|
||||
"Admiral",
|
||||
"Saint",
|
||||
]
|
||||
|
||||
IMPRESSIVE_TITLES = [
|
||||
"King",
|
||||
"Queen",
|
||||
"Lord",
|
||||
"Lady",
|
||||
"Viceroy",
|
||||
"Mayor",
|
||||
"Prince",
|
||||
"Princess",
|
||||
"Chief",
|
||||
"Boss",
|
||||
"Archbishop",
|
||||
]
|
||||
Reference in new issue
Block a user