From d6a92f326a1311ce4c926a3c8cd204e38adee977 Mon Sep 17 00:00:00 2001 From: Mark Wolfman Date: Thu, 4 Nov 2021 23:27:03 -0500 Subject: [PATCH] Updated SRD monsters with proper hit dice and damage vulnerabilites/etc. --- dungeonsheets/monsters/monsters.py | 1 - dungeonsheets/monsters/monsters_a.py | 1050 ++++++++++++++++------ dungeonsheets/monsters/monsters_b.py | 598 +++++++++---- dungeonsheets/monsters/monsters_c.py | 393 +++++--- dungeonsheets/monsters/monsters_d.py | 445 +++++---- dungeonsheets/monsters/monsters_e.py | 193 ++-- dungeonsheets/monsters/monsters_f.py | 140 ++- dungeonsheets/monsters/monsters_g.py | 1134 ++++++++++++++++------- dungeonsheets/monsters/monsters_h.py | 266 ++++-- dungeonsheets/monsters/monsters_i.py | 101 ++- dungeonsheets/monsters/monsters_j.py | 21 +- dungeonsheets/monsters/monsters_k.py | 104 ++- dungeonsheets/monsters/monsters_l.py | 184 ++-- dungeonsheets/monsters/monsters_m.py | 408 ++++++--- dungeonsheets/monsters/monsters_n.py | 100 ++- dungeonsheets/monsters/monsters_o.py | 195 ++-- dungeonsheets/monsters/monsters_p.py | 266 ++++-- dungeonsheets/monsters/monsters_q.py | 44 +- dungeonsheets/monsters/monsters_r.py | 250 ++++-- dungeonsheets/monsters/monsters_s.py | 1238 ++++++++++++++++++++------ dungeonsheets/monsters/monsters_t.py | 176 +++- dungeonsheets/monsters/monsters_u.py | 32 +- dungeonsheets/monsters/monsters_v.py | 135 ++- dungeonsheets/monsters/monsters_w.py | 1231 +++++++++++++++++++++---- dungeonsheets/monsters/monsters_x.py | 21 +- dungeonsheets/monsters/monsters_y.py | 205 +++-- dungeonsheets/monsters/monsters_z.py | 19 +- 27 files changed, 6571 insertions(+), 2379 deletions(-) diff --git a/dungeonsheets/monsters/monsters.py b/dungeonsheets/monsters/monsters.py index a02e7c0..084d6d2 100644 --- a/dungeonsheets/monsters/monsters.py +++ b/dungeonsheets/monsters/monsters.py @@ -88,7 +88,6 @@ class Monster(Creature, metaclass=SpellFactory): saving_throws = "" # TODO: Consider refactoring stats.Speed to consider all of these # just like we do stats.Ability - swim_speed = 0 fly_speed = 0 climb_speed = 0 diff --git a/dungeonsheets/monsters/monsters_a.py b/dungeonsheets/monsters/monsters_a.py index 334f828..4dc394f 100644 --- a/dungeonsheets/monsters/monsters_a.py +++ b/dungeonsheets/monsters/monsters_a.py @@ -10,6 +10,7 @@ from dungeonsheets.stats import Ability class Aboleth(Monster): """ + Amphibious. The aboleth can breathe air and water. Mucous Cloud. @@ -22,6 +23,9 @@ class Aboleth(Monster): If a creature communicates telepathically with the aboleth, the aboleth learns the creature's greatest desires if the aboleth can see the creature. + + # Actions + Multiattack. The aboleth makes three tentacle attacks. Tentacle. @@ -52,14 +56,24 @@ class Aboleth(Monster): saving throw. On a success, the effect ends. No more than once every 24 hours, the target can also repeat the saving throw when it is at least 1 mile away from the aboleth. + + # Legendary Actions + + Detect. + The aboleth makes a Wisdom (Perception) check. + Tail Swipe. + The aboleth makes one tail attack. + Psychic Drain (Costs 2 Actions). + One creature charmed by the aboleth takes 10 (3d6) psychic damage, and + the aboleth regains hit points equal to the damage the creature takes. """ - name = "Aboleth" - description = "Large aberration, lawful evil" + name = 'Aboleth' + description = 'Large aberration, lawful evil' challenge_rating = 10 armor_class = 17 - skills = "History +12, Perception +10" - senses = "Darkvision 120 ft., Passive Perception 20" - languages = "Deep Speech, telepathy 120 ft." + skills = 'History +12, Perception +10' + senses = 'Darkvision 120 ft., Passive Perception 20' + languages = 'Deep Speech, telepathy 120 ft.' strength = Ability(21) dexterity = Ability(9) constitution = Ability(15) @@ -70,34 +84,38 @@ class Aboleth(Monster): swim_speed = 40 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 135 - hit_dice = "18d10" + hit_dice = '18d10 + 36' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Acolyte(Monster): """ + Spellcasting. - The acolyte is a 1st-level spellcaster. Its spellcasting ability is - Wisdom (spell save DC 12, +4 to hit with spell attacks). The acolyte - has following cleric spells prepared: - - - - - Cantrips (at will): light, sacred flame, thaumaturgy - - - 1st level (3 slots): bless, cure wounds, sanctuary + The acolyte is a 1st-level spellcaster. Its spellcasting ability is Wisdom (spell save DC 12, +4 to hit with spell attacks). The acolyte has following cleric spells prepared: + + - Cantrips (at will): light, sacred flame, thaumaturgy + - 1st level (3 slots): bless, cure wounds, sanctuary + + # Actions + Club. Melee Weapon Attack: +2 to hit, reach 5 ft., one target. Hit: 2 (1d4) bludgeoning damage. """ - name = "Acolyte" - description = "Medium humanoid, any alignment" + name = 'Acolyte' + description = 'Medium humanoid, any alignment' challenge_rating = 0.25 armor_class = 10 - skills = "Medicine +4, Religion +2" - senses = "Passive Perception 12" - languages = "any one language (usually Common)" + skills = 'Medicine +4, Religion +2' + senses = 'Passive Perception 12' + languages = 'any one language (usually Common)' strength = Ability(10) dexterity = Ability(10) constitution = Ability(10) @@ -108,17 +126,26 @@ class Acolyte(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 9 - hit_dice = "2d8" - spells = ["light", "sacred flame", "thaumaturgy", "bless", "cure wounds", "sanctuary"] + hit_dice = '2d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' + spells = ['light', 'sacred flame', 'thaumaturgy', 'bless', 'cure wounds', 'sanctuary'] class AdultBlackDragon(Monster): """ + Amphibious. The dragon can breathe air and water. Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -144,14 +171,26 @@ class AdultBlackDragon(Monster): creature in that line must make a DC 18 Dexterity saving throw, taking 54 (12d8) acid damage on a failed save, or half as much damage on a successful one. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 10 ft. of the dragon + must succeed on a DC 19 Dexterity saving throw or take 13 (2d6 + 6) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Adult Black Dragon" - description = "Huge dragon, chaotic evil" + name = 'Adult Black Dragon' + description = 'Huge dragon, chaotic evil' challenge_rating = 14 armor_class = 19 - skills = "Perception +11, Stealth +7" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 21" - languages = "Common, Draconic" + skills = 'Perception +11, Stealth +7' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 21' + languages = 'Common, Draconic' strength = Ability(23) dexterity = Ability(14) constitution = Ability(21) @@ -162,15 +201,24 @@ class AdultBlackDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 195 - hit_dice = "17d12" + hit_dice = '17d12 + 85' + condition_immunities = '' + damage_immunities = 'acid' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AdultBlueDragon(Monster): """ + Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -196,14 +244,26 @@ class AdultBlueDragon(Monster): Each creature in that line must make a DC 19 Dexterity saving throw, taking 66 (12d10) lightning damage on a failed save, or half as much damage on a successful one. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 10 ft. of the dragon + must succeed on a DC 20 Dexterity saving throw or take 14 (2d6 + 7) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Adult Blue Dragon" - description = "Huge dragon, lawful evil" + name = 'Adult Blue Dragon' + description = 'Huge dragon, lawful evil' challenge_rating = 16 armor_class = 19 - skills = "Perception +12, Stealth +5" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 22" - languages = "Common, Draconic" + skills = 'Perception +12, Stealth +5' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 22' + languages = 'Common, Draconic' strength = Ability(25) dexterity = Ability(10) constitution = Ability(23) @@ -214,15 +274,24 @@ class AdultBlueDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 30 hp_max = 225 - hit_dice = "18d12" + hit_dice = '18d12 + 108' + condition_immunities = '' + damage_immunities = 'lightning' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AdultBrassDragon(Monster): """ + Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -256,14 +325,26 @@ class AdultBrassDragon(Monster): throw or fall unconscious for 10 minutes. This effect ends for a creature if the creature takes damage or someone uses an action to wake it. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 10 ft. of the dragon + must succeed on a DC 19 Dexterity saving throw or take 13 (2d6 + 6) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Adult Brass Dragon" - description = "Huge dragon, chaotic good" + name = 'Adult Brass Dragon' + description = 'Huge dragon, chaotic good' challenge_rating = 13 armor_class = 18 - skills = "History +7, Perception +11, Persuasion +8, Stealth +5" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 21" - languages = "Common, Draconic" + skills = 'History +7, Perception +11, Persuasion +8, Stealth +5' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 21' + languages = 'Common, Draconic' strength = Ability(23) dexterity = Ability(10) constitution = Ability(21) @@ -274,17 +355,26 @@ class AdultBrassDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 40 hp_max = 172 - hit_dice = "15d12" + hit_dice = '15d12 + 75' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AdultBronzeDragon(Monster): """ + Amphibious. The dragon can breathe air and water. Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -317,14 +407,26 @@ class AdultBronzeDragon(Monster): cone. Each creature in that area must succeed on a DC 19 Strength saving throw. On a failed save, the creature is pushed 60 feet away from the dragon. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 10 ft. of the dragon + must succeed on a DC 20 Dexterity saving throw or take 14 (2d6 + 7) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Adult Bronze Dragon" - description = "Huge dragon, lawful good" + name = 'Adult Bronze Dragon' + description = 'Huge dragon, lawful good' challenge_rating = 15 armor_class = 19 - skills = "Insight +7, Perception +12, Stealth +5" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 22" - languages = "Common, Draconic" + skills = 'Insight +7, Perception +12, Stealth +5' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 22' + languages = 'Common, Draconic' strength = Ability(25) dexterity = Ability(10) constitution = Ability(23) @@ -335,15 +437,24 @@ class AdultBronzeDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 212 - hit_dice = "17d12" + hit_dice = '17d12 + 102' + condition_immunities = '' + damage_immunities = 'lightning' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AdultCopperDragon(Monster): """ + Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -380,14 +491,26 @@ class AdultCopperDragon(Monster): its turn, but not both. These effects last for 1 minute. The creature can repeat the saving throw at the end of each of its turns, ending the effect on itself with a successful save. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 10 ft. of the dragon + must succeed on a DC 19 Dexterity saving throw or take 13 (2d6 + 6) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Adult Copper Dragon" - description = "Huge dragon, chaotic good" + name = 'Adult Copper Dragon' + description = 'Huge dragon, chaotic good' challenge_rating = 14 armor_class = 18 - skills = "Deception +8, Perception +12, Stealth +6" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 22" - languages = "Common, Draconic" + skills = 'Deception +8, Perception +12, Stealth +6' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 22' + languages = 'Common, Draconic' strength = Ability(23) dexterity = Ability(12) constitution = Ability(21) @@ -398,17 +521,26 @@ class AdultCopperDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 40 + burrow_speed = 0 hp_max = 184 - hit_dice = "16d12" + hit_dice = '16d12 + 80' + condition_immunities = '' + damage_immunities = 'acid' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AdultGoldDragon(Monster): """ + Amphibious. The dragon can breathe air and water. Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -443,14 +575,26 @@ class AdultGoldDragon(Monster): Strength saving throws for 1 minute. A creature can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 10 ft. of the dragon + must succeed on a DC 22 Dexterity saving throw or take 15 (2d6 + 8) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Adult Gold Dragon" - description = "Huge dragon, lawful good" + name = 'Adult Gold Dragon' + description = 'Huge dragon, lawful good' challenge_rating = 17 armor_class = 19 - skills = "Insight +8, Perception +14, Persuasion +13, Stealth +8" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 24" - languages = "Common, Draconic" + skills = 'Insight +8, Perception +14, Persuasion +13, Stealth +8' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 24' + languages = 'Common, Draconic' strength = Ability(27) dexterity = Ability(14) constitution = Ability(25) @@ -461,17 +605,26 @@ class AdultGoldDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 256 - hit_dice = "19d12" + hit_dice = '19d12 + 133' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AdultGreenDragon(Monster): """ + Amphibious. The dragon can breathe air and water. Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -497,14 +650,26 @@ class AdultGreenDragon(Monster): that area must make a DC 18 Constitution saving throw, taking 56 (16d6) poison damage on a failed save, or half as much damage on a successful one. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 10 ft. of the dragon + must succeed on a DC 19 Dexterity saving throw or take 13 (2d6 + 6) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Adult Green Dragon" - description = "Huge dragon, lawful evil" + name = 'Adult Green Dragon' + description = 'Huge dragon, lawful evil' challenge_rating = 15 armor_class = 19 - skills = "Deception +8, Insight +7, Perception +12, Persuasion +8, Stealth +6" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 22" - languages = "Common, Draconic" + skills = 'Deception +8, Insight +7, Perception +12, Persuasion +8, Stealth +6' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 22' + languages = 'Common, Draconic' strength = Ability(23) dexterity = Ability(12) constitution = Ability(21) @@ -515,15 +680,24 @@ class AdultGreenDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 207 - hit_dice = "18d12" + hit_dice = '18d12 + 90' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AdultRedDragon(Monster): """ + Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -570,14 +744,26 @@ class AdultRedDragon(Monster): turn in the cloud must succeed on a DC 13 Constitution saving throw or be poisoned until the end of its turn. While poisoned in this way, a creature is incapacitated. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 10 ft. of the dragon + must succeed on a DC 22 Dexterity saving throw or take 15 (2d6 + 8) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Adult Red Dragon" - description = "Huge dragon, chaotic evil" + name = 'Adult Red Dragon' + description = 'Huge dragon, chaotic evil' challenge_rating = 17 armor_class = 19 - skills = "Perception +13, Stealth +6" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 23" - languages = "Common, Draconic" + skills = 'Perception +13, Stealth +6' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 23' + languages = 'Common, Draconic' strength = Ability(27) dexterity = Ability(10) constitution = Ability(25) @@ -588,15 +774,24 @@ class AdultRedDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 40 + burrow_speed = 0 hp_max = 256 - hit_dice = "19d12" + hit_dice = '19d12 + 133' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AdultSilverDragon(Monster): """ + Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -630,14 +825,26 @@ class AdultSilverDragon(Monster): saving throw or be paralyzed for 1 minute. A creature can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 10 ft. of the dragon + must succeed on a DC 22 Dexterity saving throw or take 15 (2d6 + 8) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Adult Silver Dragon" - description = "Huge dragon, lawful good" + name = 'Adult Silver Dragon' + description = 'Huge dragon, lawful good' challenge_rating = 16 armor_class = 19 - skills = "Arcana +8, History +8, Perception +11, Stealth +5" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 21" - languages = "Common, Draconic" + skills = 'Arcana +8, History +8, Perception +11, Stealth +5' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 21' + languages = 'Common, Draconic' strength = Ability(27) dexterity = Ability(10) constitution = Ability(25) @@ -648,19 +855,28 @@ class AdultSilverDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 243 - hit_dice = "18d12" + hit_dice = '18d12 + 126' + condition_immunities = '' + damage_immunities = 'cold' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AdultWhiteDragon(Monster): """ + Ice Walk. The dragon can move across and climb icy surfaces without needing to make an ability check. Additionally, difficult terrain composed of ice or snow doesn't cost it extra moment. Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -686,14 +902,26 @@ class AdultWhiteDragon(Monster): that area must make a DC 19 Constitution saving throw, taking 54 (12d8) cold damage on a failed save, or half as much damage on a successful one. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 10 ft. of the dragon + must succeed on a DC 19 Dexterity saving throw or take 13 (2d6 + 6) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Adult White Dragon" - description = "Huge dragon, chaotic evil" + name = 'Adult White Dragon' + description = 'Huge dragon, chaotic evil' challenge_rating = 13 armor_class = 18 - skills = "Perception +11, Stealth +5" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 21" - languages = "Common, Draconic" + skills = 'Perception +11, Stealth +5' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 21' + languages = 'Common, Draconic' strength = Ability(22) dexterity = Ability(10) constitution = Ability(22) @@ -704,16 +932,25 @@ class AdultWhiteDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 30 hp_max = 200 - hit_dice = "16d12" + hit_dice = '16d12 + 96' + condition_immunities = '' + damage_immunities = 'cold' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AirElemental(Monster): """ + Air Form. The elemental can enter a hostile creature's space and stop there. It can move through a space as narrow as 1 inch wide without squeezing. + + # Actions + Multiattack. The elemental makes two slam attacks. Slam. @@ -732,13 +969,13 @@ class AirElemental(Monster): If the saving throw is successful, the target takes half the bludgeoning damage and isn't flung away or knocked prone. """ - name = "Air Elemental" - description = "Large elemental, neutral" + name = 'Air Elemental' + description = 'Large elemental, neutral' challenge_rating = 5 armor_class = 15 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Auran" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Auran' strength = Ability(14) dexterity = Ability(20) constitution = Ability(14) @@ -749,17 +986,26 @@ class AirElemental(Monster): swim_speed = 0 fly_speed = 90 climb_speed = 0 + burrow_speed = 0 hp_max = 90 - hit_dice = "12d10" + hit_dice = '12d10 + 24' + condition_immunities = 'exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained, unconscious' + damage_immunities = 'poison' + damage_resistances = 'lightning' + damage_vulnerabilities = '' spells = [] class AncientBlackDragon(Monster): """ + Amphibious. The dragon can breathe air and water. Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -785,14 +1031,26 @@ class AncientBlackDragon(Monster): creature in that line must make a DC 22 Dexterity saving throw, taking 67 (15d8) acid damage on a failed save, or half as much damage on a successful one. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 15 ft. of the dragon + must succeed on a DC 23 Dexterity saving throw or take 15 (2d6 + 8) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Ancient Black Dragon" - description = "Gargantuan dragon, chaotic evil" + name = 'Ancient Black Dragon' + description = 'Gargantuan dragon, chaotic evil' challenge_rating = 21 armor_class = 22 - skills = "Perception +16, Stealth +9" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 26" - languages = "Common, Draconic" + skills = 'Perception +16, Stealth +9' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 26' + languages = 'Common, Draconic' strength = Ability(27) dexterity = Ability(14) constitution = Ability(25) @@ -803,13 +1061,21 @@ class AncientBlackDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 367 - hit_dice = "21d20" + hit_dice = '21d20 + 147' + condition_immunities = '' + damage_immunities = 'acid' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AncientBlueDragon(Monster): """ + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -835,14 +1101,26 @@ class AncientBlueDragon(Monster): Each creature in that line must make a DC 23 Dexterity saving throw, taking 88 (16d10) lightning damage on a failed save, or half as much damage on a successful one. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 15 ft. of the dragon + must succeed on a DC 24 Dexterity saving throw or take 16 (2d6 + 9) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Ancient Blue Dragon" - description = "Gargantuan dragon, lawful evil" + name = 'Ancient Blue Dragon' + description = 'Gargantuan dragon, lawful evil' challenge_rating = 23 armor_class = 22 - skills = "Perception +17, Stealth +7" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 27" - languages = "Common, Draconic" + skills = 'Perception +17, Stealth +7' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 27' + languages = 'Common, Draconic' strength = Ability(29) dexterity = Ability(10) constitution = Ability(27) @@ -853,15 +1131,24 @@ class AncientBlueDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 40 hp_max = 481 - hit_dice = "26d20" + hit_dice = '26d20 + 208' + condition_immunities = '' + damage_immunities = 'lightning' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AncientBrassDragon(Monster): """ + Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -906,14 +1193,26 @@ class AncientBrassDragon(Monster): and Intelligence, Wisdom, and Charisma scores, as well as this action. Its statistics and capabilities are otherwise replaced by those of the new form, except any class features or legendary actions of that form. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 15 ft. of the dragon + must succeed on a DC 22 Dexterity saving throw or take 15 (2d6 + 8) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Ancient Brass Dragon" - description = "Gargantuan dragon, chaotic good" + name = 'Ancient Brass Dragon' + description = 'Gargantuan dragon, chaotic good' challenge_rating = 20 armor_class = 20 - skills = "History +9, Perception +14, Persuasion +10, Stealth +6" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 24" - languages = "Common, Draconic" + skills = 'History +9, Perception +14, Persuasion +10, Stealth +6' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 24' + languages = 'Common, Draconic' strength = Ability(27) dexterity = Ability(10) constitution = Ability(25) @@ -924,17 +1223,26 @@ class AncientBrassDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 40 hp_max = 297 - hit_dice = "17d20" + hit_dice = '17d20 + 119' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AncientBronzeDragon(Monster): """ + Amphibious. The dragon can breathe air and water. Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -978,14 +1286,26 @@ class AncientBronzeDragon(Monster): and Intelligence, Wisdom, and Charisma scores, as well as this action. Its statistics and capabilities are otherwise replaced by those of the new form, except any class features or legendary actions of that form. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 15 ft. of the dragon + must succeed on a DC 24 Dexterity saving throw or take 16 (2d6 + 9) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Ancient Bronze Dragon" - description = "Gargantuan dragon, lawful good" + name = 'Ancient Bronze Dragon' + description = 'Gargantuan dragon, lawful good' challenge_rating = 22 armor_class = 22 - skills = "Insight +10, Perception +17, Stealth +7" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 27" - languages = "Common, Draconic" + skills = 'Insight +10, Perception +17, Stealth +7' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 27' + languages = 'Common, Draconic' strength = Ability(29) dexterity = Ability(10) constitution = Ability(27) @@ -996,15 +1316,24 @@ class AncientBronzeDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 444 - hit_dice = "24d20" + hit_dice = '24d20 + 192' + condition_immunities = '' + damage_immunities = 'lightning' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AncientCopperDragon(Monster): """ + Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -1052,14 +1381,26 @@ class AncientCopperDragon(Monster): and Intelligence, Wisdom, and Charisma scores, as well as this action. Its statistics and capabilities are otherwise replaced by those of the new form, except any class features or legendary actions of that form. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 15 ft. of the dragon + must succeed on a DC 23 Dexterity saving throw or take 15 (2d6 + 8) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Ancient Copper Dragon" - description = "Gargantuan dragon, chaotic good" + name = 'Ancient Copper Dragon' + description = 'Gargantuan dragon, chaotic good' challenge_rating = 21 armor_class = 21 - skills = "Deception +11, Perception +17, Stealth +8" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 27" - languages = "Common, Draconic" + skills = 'Deception +11, Perception +17, Stealth +8' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 27' + languages = 'Common, Draconic' strength = Ability(27) dexterity = Ability(12) constitution = Ability(25) @@ -1070,17 +1411,26 @@ class AncientCopperDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 40 + burrow_speed = 0 hp_max = 350 - hit_dice = "20d20" + hit_dice = '20d20 + 140' + condition_immunities = '' + damage_immunities = 'acid' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AncientGoldDragon(Monster): """ + Amphibious. The dragon can breathe air and water. Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -1126,14 +1476,26 @@ class AncientGoldDragon(Monster): and Intelligence, Wisdom, and Charisma scores, as well as this action. Its statistics and capabilities are otherwise replaced by those of the new form, except any class features or legendary actions of that form. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 15 ft. of the dragon + must succeed on a DC 25 Dexterity saving throw or take 17 (2d6 + 10) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Ancient Gold Dragon" - description = "Gargantuan dragon, lawful good" + name = 'Ancient Gold Dragon' + description = 'Gargantuan dragon, lawful good' challenge_rating = 24 armor_class = 22 - skills = "Insight +10, Perception +17, Persuasion +16, Stealth +9" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 27" - languages = "Common, Draconic" + skills = 'Insight +10, Perception +17, Persuasion +16, Stealth +9' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 27' + languages = 'Common, Draconic' strength = Ability(30) dexterity = Ability(14) constitution = Ability(29) @@ -1144,17 +1506,26 @@ class AncientGoldDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 546 - hit_dice = "28d20" + hit_dice = '28d20 + 252' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AncientGreenDragon(Monster): """ + Amphibious. The dragon can breathe air and water. Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -1180,14 +1551,26 @@ class AncientGreenDragon(Monster): that area must make a DC 22 Constitution saving throw, taking 77 (22d6) poison damage on a failed save, or half as much damage on a successful one. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 15 ft. of the dragon + must succeed on a DC 23 Dexterity saving throw or take 15 (2d6 + 8) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Ancient Green Dragon" - description = "Gargantuan dragon, lawful evil" + name = 'Ancient Green Dragon' + description = 'Gargantuan dragon, lawful evil' challenge_rating = 22 armor_class = 21 - skills = "Deception +11, Insight +10, Perception +17, Persuasion +11, Stealth +8" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 27" - languages = "Common, Draconic" + skills = 'Deception +11, Insight +10, Perception +17, Persuasion +11, Stealth +8' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 27' + languages = 'Common, Draconic' strength = Ability(27) dexterity = Ability(12) constitution = Ability(25) @@ -1198,15 +1581,24 @@ class AncientGreenDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 385 - hit_dice = "22d20" + hit_dice = '22d20 + 154' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AncientRedDragon(Monster): """ + Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -1231,14 +1623,26 @@ class AncientRedDragon(Monster): The dragon exhales fire in a 90-foot cone. Each creature in that area must make a DC 24 Dexterity saving throw, taking 91 (26d6) fire damage on a failed save, or half as much damage on a successful one. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 15 ft. of the dragon + must succeed on a DC 25 Dexterity saving throw or take 17 (2d6 + 10) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Ancient Red Dragon" - description = "Gargantuan dragon, chaotic evil" + name = 'Ancient Red Dragon' + description = 'Gargantuan dragon, chaotic evil' challenge_rating = 24 armor_class = 22 - skills = "Perception +16, Stealth +7" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 26" - languages = "Common, Draconic" + skills = 'Perception +16, Stealth +7' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 26' + languages = 'Common, Draconic' strength = Ability(30) dexterity = Ability(10) constitution = Ability(29) @@ -1249,15 +1653,24 @@ class AncientRedDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 40 + burrow_speed = 0 hp_max = 546 - hit_dice = "28d20" + hit_dice = '28d20 + 252' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AncientSilverDragon(Monster): """ + Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -1302,14 +1715,26 @@ class AncientSilverDragon(Monster): and Intelligence, Wisdom, and Charisma scores, as well as this action. Its statistics and capabilities are otherwise replaced by those of the new form, except any class features or legendary actions of that form. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 15 ft. of the dragon + must succeed on a DC 25 Dexterity saving throw or take 17 (2d6 + 10) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Ancient Silver Dragon" - description = "Gargantuan dragon, lawful good" + name = 'Ancient Silver Dragon' + description = 'Gargantuan dragon, lawful good' challenge_rating = 23 armor_class = 22 - skills = "Arcana +11, History +11, Perception +16, Stealth +7" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 26" - languages = "Common, Draconic" + skills = 'Arcana +11, History +11, Perception +16, Stealth +7' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 26' + languages = 'Common, Draconic' strength = Ability(30) dexterity = Ability(10) constitution = Ability(29) @@ -1320,19 +1745,28 @@ class AncientSilverDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 487 - hit_dice = "25d20" + hit_dice = '25d20 + 225' + condition_immunities = '' + damage_immunities = 'cold' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class AncientWhiteDragon(Monster): """ + Ice Walk. The dragon can move across and climb icy surfaces without needing to make an ability check. Additionally, difficult terrain composed of ice or snow doesn't cost it extra moment. Legendary Resistance. If the dragon fails a saving throw, it can choose to succeed instead. + + # Actions + Multiattack. The dragon can use its Frightful Presence. It then makes three attacks: one with its bite and two with its claws. @@ -1358,14 +1792,26 @@ class AncientWhiteDragon(Monster): that area must make a DC 22 Constitution saving throw, taking 72 (l6d8) cold damage on a failed save, or half as much damage on a successful one. + + # Legendary Actions + + Detect. + The dragon makes a Wisdom (Perception) check. + Tail Attack. + The dragon makes a tail attack. + Wing Attack (Costs 2 Actions). + The dragon beats its wings. Each creature within 15 ft. of the dragon + must succeed on a DC 22 Dexterity saving throw or take 15 (2d6 + 8) + bludgeoning damage and be knocked prone. The dragon can then fly up to + half its flying speed. """ - name = "Ancient White Dragon" - description = "Gargantuan dragon, chaotic evil" + name = 'Ancient White Dragon' + description = 'Gargantuan dragon, chaotic evil' challenge_rating = 20 armor_class = 20 - skills = "Perception +13, Stealth +6" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 23" - languages = "Common, Draconic" + skills = 'Perception +13, Stealth +6' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 23' + languages = 'Common, Draconic' strength = Ability(26) dexterity = Ability(10) constitution = Ability(26) @@ -1376,13 +1822,19 @@ class AncientWhiteDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 40 hp_max = 333 - hit_dice = "18d20" + hit_dice = '18d20 + 144' + condition_immunities = '' + damage_immunities = 'cold' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Androsphinx(Monster): """ + Inscrutable. The sphinx is immune to any effect that would sense its emotions or read its thoughts, as well as any divination spell that it refuses. @@ -1391,26 +1843,18 @@ class Androsphinx(Monster): Magic Weapons. The sphinx's weapon attacks are magical. Spellcasting. - The sphinx is a 12th-level spellcaster. Its spellcasting ability is - Wisdom (spell save DC 18, +10 to hit with spell attacks). It requires - no material components to cast its spells. The sphinx has the - following cleric spells prepared: - - - - - Cantrips (at will): sacred flame, spare the dying, thaumaturgy - - - 1st level (4 slots): command, detect evil and good, detect magic - - - 2nd level (3 slots): lesser restoration, zone of truth - - - 3rd level (3 slots): dispel magic, tongues - - - 4th level (3 slots): banishment, freedom of movement - - - 5th level (2 slots): flame strike, greater restoration - - - 6th level (1 slot): heroes' feast + The sphinx is a 12th-level spellcaster. Its spellcasting ability is Wisdom (spell save DC 18, +10 to hit with spell attacks). It requires no material components to cast its spells. The sphinx has the following cleric spells prepared: + + - Cantrips (at will): sacred flame, spare the dying, thaumaturgy + - 1st level (4 slots): command, detect evil and good, detect magic + - 2nd level (3 slots): lesser restoration, zone of truth + - 3rd level (3 slots): dispel magic, tongues + - 4th level (3 slots): banishment, freedom of movement + - 5th level (2 slots): flame strike, greater restoration + - 6th level (1 slot): heroes' feast + + # Actions + Multiattack. The sphinx makes two claw attacks. Claw. @@ -1442,14 +1886,25 @@ class Androsphinx(Monster): a failed save, a creature takes 44 (8d10) thunder damage and is knocked prone. On a successful save, the creature takes half as much damage and isn't knocked prone. + + # Legendary Actions + + Claw Attack. + The sphinx makes one claw attack. + Teleport (Costs 2 Actions). + The sphinx magically teleports, along with any equipment it is wearing + or carrying, up to 120 feet to an unoccupied space it can see. + Cast a Spell (Costs 3 Actions). + The sphinx casts a spell from its list of prepared spells, using a + spell slot as normal. """ - name = "Androsphinx" - description = "Large monstrosity, lawful neutral" + name = 'Androsphinx' + description = 'Large monstrosity, lawful neutral' challenge_rating = 17 armor_class = 17 - skills = "Arcana +9, Perception +10, Religion +15" - senses = "Truesight 120 ft., Passive Perception 20" - languages = "Common, Sphinx" + skills = 'Arcana +9, Perception +10, Religion +15' + senses = 'Truesight 120 ft., Passive Perception 20' + languages = 'Common, Sphinx' strength = Ability(22) dexterity = Ability(10) constitution = Ability(20) @@ -1460,13 +1915,19 @@ class Androsphinx(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 199 - hit_dice = "19d10" - spells = ["sacred flame", "spare the dying", "thaumaturgy", "command", "detect evil and good", "detect magic", "lesser restoration", "zone of truth", "dispel magic", "tongues", "banishment", "freedom of movement", "flame strike", "greater restoration", "heroes' feast"] + hit_dice = '19d10 + 95' + condition_immunities = 'charmed, frightened' + damage_immunities = 'psychic, bludgeoning, piercing, and slashing from nonmagical weapons' + damage_resistances = '' + damage_vulnerabilities = '' + spells = ['sacred flame', 'spare the dying', 'thaumaturgy', 'command', 'detect evil and good', 'detect magic', 'lesser restoration', 'zone of truth', 'dispel magic', 'tongues', 'banishment', 'freedom of movement', 'flame strike', 'greater restoration', "heroes' feast"] class AnimatedArmor(Monster): """ + Antimagic Susceptibility. The armor is incapacitated while in the area of an antimagic field. If targeted by dispel magic, the armor must succeed on a Constitution @@ -1475,19 +1936,22 @@ class AnimatedArmor(Monster): False Appearance. While the armor remains motionless, it is indistinguishable from a normal suit of armor. + + # Actions + Multiattack. The armor makes two melee attacks. Slam. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + 2) bludgeoning damage. """ - name = "Animated Armor" - description = "Medium construct, unaligned" + name = 'Animated Armor' + description = 'Medium construct, unaligned' challenge_rating = 1 armor_class = 18 - skills = "" - senses = "Blindsight 60 ft. (blind beyond this radius), Passive Perception 6" - languages = "" + skills = '' + senses = 'Blindsight 60 ft. (blind beyond this radius), Passive Perception 6' + languages = '' strength = Ability(14) dexterity = Ability(11) constitution = Ability(13) @@ -1498,13 +1962,21 @@ class AnimatedArmor(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 33 - hit_dice = "6d8" + hit_dice = '6d8 + 6' + condition_immunities = 'blinded, charmed, deafened, exhaustion, frightened, paralyzed, petrified, poisoned' + damage_immunities = 'poison, psychic' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Ankheg(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + 3) slashing damage plus 3 (1d6) acid damage. If the target is a @@ -1517,13 +1989,13 @@ class Ankheg(Monster): must make a DC 13 Dexterity saving throw, taking 10 (3d6) acid damage on a failed save, or half as much damage on a successful one. """ - name = "Ankheg" - description = "Large monstrosity, unaligned" + name = 'Ankheg' + description = 'Large monstrosity, unaligned' challenge_rating = 2 armor_class = 14 - skills = "" - senses = "Darkvision 60 ft., Tremorsense 60 ft., Passive Perception 11" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Tremorsense 60 ft., Passive Perception 11' + languages = '' strength = Ability(17) dexterity = Ability(11) constitution = Ability(13) @@ -1534,8 +2006,13 @@ class Ankheg(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 10 hp_max = 39 - hit_dice = "6d10" + hit_dice = '6d10 + 6' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -1551,13 +2028,12 @@ class Ankylosaurus(Monster): knocked prone. """ - # TODO: This doesn't appear to be SRD - name = "Ankylosaurus" - description = "Huge beast, unaligned" + name = 'Ankylosaurus' + description = 'Huge beast, unaligned' challenge_rating = 3 armor_class = 15 - skills = "" - senses = "passive Perception 11" + skills = '' + senses = 'passive Perception 11' strength = Ability(19) dexterity = Ability(11) constitution = Ability(15) @@ -1569,11 +2045,14 @@ class Ankylosaurus(Monster): fly_speed = 0 climb_speed = 0 hp_max = 68 - hit_dice = "8d12+16" + hit_dice = '8d12+16' class Ape(Monster): """ + + # Actions + Multiattack. The ape makes two fist attacks. Fist. @@ -1583,13 +2062,13 @@ class Ape(Monster): Ranged Weapon Attack: +5 to hit, range 25/50 ft., one target. Hit: 6 (1d6 + 3) bludgeoning damage. """ - name = "Ape" - description = "Medium beast, unaligned" + name = 'Ape' + description = 'Medium beast, unaligned' challenge_rating = 0.5 armor_class = 12 - skills = "Athletics +5, Perception +3" - senses = "Passive Perception 13" - languages = "" + skills = 'Athletics +5, Perception +3' + senses = 'Passive Perception 13' + languages = '' strength = Ability(16) dexterity = Ability(14) constitution = Ability(14) @@ -1600,58 +2079,50 @@ class Ape(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 30 + burrow_speed = 0 hp_max = 19 - hit_dice = "3d8" + hit_dice = '3d8 + 6' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Archmage(Monster): """ + Magic Resistance. The archmage has advantage on saving throws against spells and other magical effects. Spellcasting. - The archmage is an 18th-level spellcaster. Its spellcasting ability is - Intelligence (spell save DC 17, +9 to hit with spell attacks). The - archmage can cast disguise self and invisibility at will and has the - following wizard spells prepared: - - - - - Cantrips (at will): fire bolt, light, mage hand, prestidigitation, - shocking grasp - - - 1st level (4 slots): detect magic, identify, mage armor*, magic - missile - - - 2nd level (3 slots): detect thoughts, mirror image, misty step - - - 3rd level (3 slots): counterspell, fly, lightning bolt - - - 4th level (3 slots): banishment, fire shield, stoneskin* - - - 5th level (3 slots): cone of cold, scrying, wall of force - - - 6th level (1 slot): globe of invulnerability - - - 7th level (1 slot): teleport - - - 8th level (1 slot): mind blank* - - - 9th level (1 slot): time stop - - * The archmage casts these spells on itself before combat. + The archmage is an 18th-level spellcaster. Its spellcasting ability is Intelligence (spell save DC 17, +9 to hit with spell attacks). The archmage can cast disguise self and invisibility at will and has the following wizard spells prepared: + + - Cantrips (at will): fire bolt, light, mage hand, prestidigitation, shocking grasp + - 1st level (4 slots): detect magic, identify, mage armor*, magic missile + - 2nd level (3 slots): detect thoughts, mirror image, misty step + - 3rd level (3 slots): counterspell, fly, lightning bolt + - 4th level (3 slots): banishment, fire shield, stoneskin* + - 5th level (3 slots): cone of cold, scrying, wall of force + - 6th level (1 slot): globe of invulnerability + - 7th level (1 slot): teleport + - 8th level (1 slot): mind blank* + - 9th level (1 slot): time stop + * The archmage casts these spells on itself before combat. + + # Actions + Dagger. Melee or Ranged Weapon Attack: +6 to hit, reach 5 ft. or range 20/60 ft., one target. Hit: 4 (1d4 + 2) piercing damage. """ - name = "Archmage" - description = "Medium humanoid, any alignment" + name = 'Archmage' + description = 'Medium humanoid, any alignment' challenge_rating = 12 armor_class = 12 - skills = "Arcana +13, History +13" - senses = "Passive Perception 12" - languages = "any six languages" + skills = 'Arcana +13, History +13' + senses = 'Passive Perception 12' + languages = 'any six languages' strength = Ability(10) dexterity = Ability(14) constitution = Ability(12) @@ -1662,13 +2133,19 @@ class Archmage(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 99 - hit_dice = "18d8" - spells = ["disguise self", "invisibility", "fire bolt", "light", "mage hand", "prestidigitation", "shocking grasp", "detect magic", "identify", "mage armor", "magic missile", "detect thoughts", "mirror image", "misty step", "counterspell", "fly", "lightning bolt", "banishment", "fire shield", "stoneskin", "cone of cold", "scrying", "wall of force", "globe of invulnerability", "teleport", "mind blank", "time stop"] + hit_dice = '18d8 + 18' + condition_immunities = '' + damage_immunities = '' + damage_resistances = 'damage from spells' + damage_vulnerabilities = '' + spells = ['disguise self', 'invisibility', 'fire bolt', 'light', 'mage hand', 'prestidigitation', 'shocking grasp', 'detect magic', 'identify', 'mage armor', 'magic missile', 'detect thoughts', 'mirror image', 'misty step', 'counterspell', 'fly', 'lightning bolt', 'banishment', 'fire shield', 'stoneskin', 'cone of cold', 'scrying', 'wall of force', 'globe of invulnerability', 'teleport', 'mind blank', 'time stop'] class Assassin(Monster): """ + Assassinate. During its first turn, the assassin has advantage on attack rolls against any creature that hasn't taken a turn. Any hit the assassin @@ -1684,6 +2161,9 @@ class Assassin(Monster): target is within 5 ft. of an ally of the assassin that isn't incapacitated and the assassin doesn't have disadvantage on the attack roll. + + # Actions + Multiattack. The assassin makes two shortsword attacks. Shortsword. @@ -1697,12 +2177,12 @@ class Assassin(Monster): Constitution saving throw, taking 24 (7d6) poison damage on a failed save, or half as much damage on a successful one. """ - name = "Assassin" - description = "Medium humanoid, any non-good alignment" + name = 'Assassin' + description = 'Medium humanoid, any non-good alignment' challenge_rating = 8 armor_class = 15 - skills = "Acrobatics +6, Deception +3, Perception +3, Stealth +9" - senses = "Passive Perception 13" + skills = 'Acrobatics +6, Deception +3, Perception +3, Stealth +9' + senses = 'Passive Perception 13' languages = "Thieves' cant plus any two languages" strength = Ability(11) dexterity = Ability(16) @@ -1714,27 +2194,36 @@ class Assassin(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 78 - hit_dice = "12d8" + hit_dice = '12d8 + 24' + condition_immunities = '' + damage_immunities = '' + damage_resistances = 'poison' + damage_vulnerabilities = '' spells = [] class AwakenedShrub(Monster): """ + False Appearance. While the shrub remains motionless, it is indistinguishable from a normal shrub. + + # Actions + Rake. Melee Weapon Attack: +1 to hit, reach 5 ft., one target. Hit: 1 (1d4 - 1) slashing damage. """ - name = "Awakened Shrub" - description = "Small plant, unaligned" + name = 'Awakened Shrub' + description = 'Small plant, unaligned' challenge_rating = 0 armor_class = 9 - skills = "" - senses = "Passive Perception 10" - languages = "one language known by its creator" + skills = '' + senses = 'Passive Perception 10' + languages = 'one language known by its creator' strength = Ability(3) dexterity = Ability(8) constitution = Ability(11) @@ -1745,27 +2234,36 @@ class AwakenedShrub(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 10 - hit_dice = "3d6" + hit_dice = '3d6 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = 'piercing' + damage_vulnerabilities = 'fire' spells = [] class AwakenedTree(Monster): """ + False Appearance. While the tree remains motionless, it is indistinguishable from a normal tree. + + # Actions + Slam. Melee Weapon Attack: +6 to hit, reach 10 ft., one target. Hit: 14 (3d6 + 4) bludgeoning damage. """ - name = "Awakened Tree" - description = "Huge plant, unaligned" + name = 'Awakened Tree' + description = 'Huge plant, unaligned' challenge_rating = 2 armor_class = 13 - skills = "" - senses = "Passive Perception 10" - languages = "one language known by its creator" + skills = '' + senses = 'Passive Perception 10' + languages = 'one language known by its creator' strength = Ability(19) dexterity = Ability(6) constitution = Ability(15) @@ -1776,24 +2274,32 @@ class AwakenedTree(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 59 - hit_dice = "7d12" + hit_dice = '7d12 + 14' + condition_immunities = '' + damage_immunities = '' + damage_resistances = 'bludgeoning' + damage_vulnerabilities = 'fire' spells = [] class AxeBeak(Monster): """ + + # Actions + Beak. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 6 (1d8 + 2) slashing damage. """ - name = "Axe Beak" - description = "Large beast, unaligned" + name = 'Axe Beak' + description = 'Large beast, unaligned' challenge_rating = 0.25 armor_class = 11 - skills = "" - senses = "Passive Perception 10" - languages = "" + skills = '' + senses = 'Passive Perception 10' + languages = '' strength = Ability(14) dexterity = Ability(12) constitution = Ability(12) @@ -1804,13 +2310,19 @@ class AxeBeak(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 19 - hit_dice = "3d10" + hit_dice = '3d10 + 3' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Azer(Monster): """ + Heated Body. A creature that touches the azer or hits it with a melee attack while within 5 ft. of it takes 5 (1d10) fire damage. @@ -1820,18 +2332,21 @@ class Azer(Monster): Illumination. The azer sheds bright light in a 10-foot radius and dim light for an additional 10 ft.. + + # Actions + Warhammer. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d8 + 3) bludgeoning damage, or 8 (1d10 + 3) bludgeoning damage if used with two hands to make a melee attack, plus 3 (1d6) fire damage. """ - name = "Azer" - description = "Medium elemental, lawful neutral" + name = 'Azer' + description = 'Medium elemental, lawful neutral' challenge_rating = 2 armor_class = 17 - skills = "" - senses = "Passive Perception 11" - languages = "Ignan" + skills = '' + senses = 'Passive Perception 11' + languages = 'Ignan' strength = Ability(17) dexterity = Ability(12) constitution = Ability(15) @@ -1842,6 +2357,11 @@ class Azer(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 39 - hit_dice = "6d8" + hit_dice = '6d8 + 12' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_b.py b/dungeonsheets/monsters/monsters_b.py index d3513a6..0955d81 100644 --- a/dungeonsheets/monsters/monsters_b.py +++ b/dungeonsheets/monsters/monsters_b.py @@ -10,21 +10,25 @@ from dungeonsheets.stats import Ability class Baboon(Monster): """ + Pack Tactics. The baboon has advantage on an attack roll against a creature if at least one of the baboon's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Bite. Melee Weapon Attack: +1 to hit, reach 5 ft., one target. Hit: 1 (1d4 - 1) piercing damage. """ - name = "Baboon" - description = "Small beast, unaligned" + name = 'Baboon' + description = 'Small beast, unaligned' challenge_rating = 0 armor_class = 12 - skills = "" - senses = "Passive Perception 11" - languages = "" + skills = '' + senses = 'Passive Perception 11' + languages = '' strength = Ability(8) dexterity = Ability(14) constitution = Ability(11) @@ -35,27 +39,36 @@ class Baboon(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 30 + burrow_speed = 0 hp_max = 3 - hit_dice = "1d6" + hit_dice = '1d6 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Badger(Monster): """ + Keen Smell. The badger has advantage on Wisdom (Perception) checks that rely on smell. + + # Actions + Bite. Melee Weapon Attack: +2 to hit, reach 5 ft., one target. Hit: 1 piercing damage. """ - name = "Badger" - description = "Tiny beast, unaligned" + name = 'Badger' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 10 - skills = "" - senses = "Darkvision 30 ft., Passive Perception 11" - languages = "" + skills = '' + senses = 'Darkvision 30 ft., Passive Perception 11' + languages = '' strength = Ability(4) dexterity = Ability(11) constitution = Ability(12) @@ -66,13 +79,19 @@ class Badger(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 5 hp_max = 3 - hit_dice = "1d4" + hit_dice = '1d4 + 1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Balor(Monster): """ + Death Throes. When the balor dies, it explodes, and each creature within 30 feet of it must make a DC 20 Dexterity saving throw, taking 70 (20d6) fire @@ -90,6 +109,9 @@ class Balor(Monster): magical effects. Magic Weapons. The balor's weapon attacks are magical. + + # Actions + Multiattack. The balor makes two attacks: one with its longsword and one with its whip. @@ -117,13 +139,13 @@ class Balor(Monster): demons. It remains for 1 minute, until it or its summoner dies, or until its summoner dismisses it as an action. """ - name = "Balor" - description = "Huge fiend, chaotic evil" + name = 'Balor' + description = 'Huge fiend, chaotic evil' challenge_rating = 19 armor_class = 19 - skills = "" - senses = "Truesight 120 ft., Passive Perception 13" - languages = "Abyssal, telepathy 120 ft." + skills = '' + senses = 'Truesight 120 ft., Passive Perception 13' + languages = 'Abyssal, telepathy 120 ft.' strength = Ability(26) dexterity = Ability(15) constitution = Ability(22) @@ -134,13 +156,21 @@ class Balor(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 262 - hit_dice = "21d12" + hit_dice = '21d12 + 126' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Bandit(Monster): """ + + # Actions + Scimitar. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 4 (1d6 + 1) slashing damage. @@ -148,13 +178,13 @@ class Bandit(Monster): Ranged Weapon Attack: +3 to hit, range 80 ft./320 ft., one target. Hit: 5 (1d8 + 1) piercing damage. """ - name = "Bandit" - description = "Medium humanoid, any non-lawful alignment" + name = 'Bandit' + description = 'Medium humanoid, any non-lawful alignment' challenge_rating = 0.125 armor_class = 12 - skills = "" - senses = "Passive Perception 10" - languages = "any one language (usually Common)" + skills = '' + senses = 'Passive Perception 10' + languages = 'any one language (usually Common)' strength = Ability(11) dexterity = Ability(12) constitution = Ability(12) @@ -165,13 +195,21 @@ class Bandit(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 11 - hit_dice = "2d8" + hit_dice = '2d8 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class BanditCaptain(Monster): """ + + # Actions + Multiattack. The captain makes three melee attacks: two with its scimitar and one with its dagger. Or the captain makes two ranged attacks with its @@ -182,14 +220,21 @@ class BanditCaptain(Monster): Dagger. Melee or Ranged Weapon Attack: +5 to hit, reach 5 ft. or range 20/60 ft., one target. Hit: 5 (1d4 + 3) piercing damage. + + # Reactions + + Parry. + The captain adds 2 to its AC against one melee attack that would hit + it. To do so, the captain must see the attacker and be wielding a + melee weapon. """ - name = "Bandit Captain" - description = "Medium humanoid, any non-lawful alignment" + name = 'Bandit Captain' + description = 'Medium humanoid, any non-lawful alignment' challenge_rating = 2 armor_class = 15 - skills = "Athletics +4, Deception +4" - senses = "Passive Perception 10" - languages = "any two languages" + skills = 'Athletics +4, Deception +4' + senses = 'Passive Perception 10' + languages = 'any two languages' strength = Ability(15) dexterity = Ability(16) constitution = Ability(14) @@ -200,13 +245,19 @@ class BanditCaptain(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 65 - hit_dice = "10d8" + hit_dice = '10d8 + 20' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class BarbedDevil(Monster): """ + Barbed Hide. At the start of each of its turns, the barbed devil deals 5 (1d10) piercing damage to any creature grappling it. @@ -215,6 +266,9 @@ class BarbedDevil(Monster): Magic Resistance. The devil has advantage on saving throws against spells and other magical effects. + + # Actions + Multiattack. The devil makes three melee attacks: one with its tail and two with its claws. Alternatively, it can use Hurl Flame twice. @@ -229,13 +283,13 @@ class BarbedDevil(Monster): (3d6) fire damage. If the target is a flammable object that isn't being worn or carried, it also catches fire. """ - name = "Barbed Devil" - description = "Medium fiend, lawful evil" + name = 'Barbed Devil' + description = 'Medium fiend, lawful evil' challenge_rating = 5 armor_class = 15 - skills = "Deception +5, Insight +5, Perception +8" - senses = "Darkvision 120 ft., Passive Perception 18" - languages = "Infernal, telepathy 120 ft." + skills = 'Deception +5, Insight +5, Perception +8' + senses = 'Darkvision 120 ft., Passive Perception 18' + languages = 'Infernal, telepathy 120 ft.' strength = Ability(16) dexterity = Ability(17) constitution = Ability(18) @@ -246,13 +300,19 @@ class BarbedDevil(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 110 - hit_dice = "13d8" + hit_dice = '13d8 + 52' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Basilisk(Monster): """ + Petrifying Gaze. If a creature starts its turn within 30 ft. of the basilisk and the two of them can see each other, the basilisk can force the creature to @@ -272,17 +332,20 @@ class Basilisk(Monster): If the basilisk sees its reflection within 30 ft. of it in bright light, it mistakes itself for a rival and targets itself with its gaze. + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + 3) piercing damage plus 7 (2d6) poison damage. """ - name = "Basilisk" - description = "Medium monstrosity, unaligned" + name = 'Basilisk' + description = 'Medium monstrosity, unaligned' challenge_rating = 3 armor_class = 12 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 9" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 9' + languages = '' strength = Ability(16) dexterity = Ability(8) constitution = Ability(15) @@ -293,29 +356,38 @@ class Basilisk(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 52 - hit_dice = "8d8" + hit_dice = '8d8 + 16' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Bat(Monster): """ + Echolocation. The bat can't use its blindsight while deafened. Keen Hearing. The bat has advantage on Wisdom (Perception) checks that rely on hearing. + + # Actions + Bite. Melee Weapon Attack: +0 to hit, reach 5 ft., one creature. Hit: 1 piercing damage. """ - name = "Bat" - description = "Tiny beast, unaligned" + name = 'Bat' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 12 - skills = "" - senses = "Blindsight 60 ft., Passive Perception 11" - languages = "" + skills = '' + senses = 'Blindsight 60 ft., Passive Perception 11' + languages = '' strength = Ability(2) dexterity = Ability(15) constitution = Ability(8) @@ -326,13 +398,19 @@ class Bat(Monster): swim_speed = 0 fly_speed = 30 climb_speed = 0 + burrow_speed = 0 hp_max = 1 - hit_dice = "1d4" + hit_dice = '1d4 + -1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class BeardedDevil(Monster): """ + Devil's Sight. Magical darkness doesn't impede the devil's darkvision. Magic Resistance. @@ -341,6 +419,9 @@ class BeardedDevil(Monster): Steadfast. The devil can't be frightened while it can see an allied creature within 30 feet of it. + + # Actions + Multiattack. The devil makes two attacks: one with its beard and one with its glaive. @@ -362,13 +443,13 @@ class BeardedDevil(Monster): 12 Wisdom (Medicine) check. The wound also closes if the target receives magical healing. """ - name = "Bearded Devil" - description = "Medium fiend, lawful evil" + name = 'Bearded Devil' + description = 'Medium fiend, lawful evil' challenge_rating = 3 armor_class = 13 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 10" - languages = "Infernal, telepathy 120 ft." + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 10' + languages = 'Infernal, telepathy 120 ft.' strength = Ability(16) dexterity = Ability(15) constitution = Ability(15) @@ -379,13 +460,21 @@ class BeardedDevil(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 52 - hit_dice = "8d8" + hit_dice = '8d8 + 16' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Behir(Monster): """ + + # Actions + Multiattack. The behir makes two attacks: one with its bite and one to constrict. Bite. @@ -418,13 +507,13 @@ class Behir(Monster): dies, a swallowed creature is no longer restrained by it and can escape from the corpse by using 15 ft. of movement, exiting prone. """ - name = "Behir" - description = "Huge monstrosity, neutral evil" + name = 'Behir' + description = 'Huge monstrosity, neutral evil' challenge_rating = 11 armor_class = 17 - skills = "Perception +6, Stealth +7" - senses = "Darkvision 90 ft., Passive Perception 16" - languages = "Draconic" + skills = 'Perception +6, Stealth +7' + senses = 'Darkvision 90 ft., Passive Perception 16' + languages = 'Draconic' strength = Ability(23) dexterity = Ability(16) constitution = Ability(18) @@ -435,28 +524,37 @@ class Behir(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 40 + burrow_speed = 0 hp_max = 168 - hit_dice = "16d12" + hit_dice = '16d12 + 64' + condition_immunities = '' + damage_immunities = 'lightning' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Berserker(Monster): """ + Reckless. At the start of its turn, the berserker can gain advantage on all melee weapon attack rolls during that turn, but attack rolls against it have advantage until the start of its next turn. + + # Actions + Greataxe. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 9 (1d12 + 3) slashing damage. """ - name = "Berserker" - description = "Medium humanoid, any chaotic alignment" + name = 'Berserker' + description = 'Medium humanoid, any chaotic alignment' challenge_rating = 2 armor_class = 13 - skills = "" - senses = "Passive Perception 10" - languages = "any one language (usually Common)" + skills = '' + senses = 'Passive Perception 10' + languages = 'any one language (usually Common)' strength = Ability(16) dexterity = Ability(12) constitution = Ability(17) @@ -467,16 +565,25 @@ class Berserker(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 67 - hit_dice = "9d8" + hit_dice = '9d8 + 27' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class BlackBear(Monster): """ + Keen Smell. The bear has advantage on Wisdom (Perception) checks that rely on smell. + + # Actions + Multiattack. The bear makes two attacks: one with its bite and one with its claws. Bite. @@ -486,13 +593,13 @@ class BlackBear(Monster): Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 7 (2d4 + 2) slashing damage. """ - name = "Black Bear" - description = "Medium beast, unaligned" + name = 'Black Bear' + description = 'Medium beast, unaligned' challenge_rating = 0.5 armor_class = 11 - skills = "" - senses = "Passive Perception 13" - languages = "" + skills = '' + senses = 'Passive Perception 13' + languages = '' strength = Ability(15) dexterity = Ability(10) constitution = Ability(14) @@ -503,15 +610,24 @@ class BlackBear(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 30 + burrow_speed = 0 hp_max = 19 - hit_dice = "3d8" + hit_dice = '3d8 + 6' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class BlackDragonWyrmling(Monster): """ + Amphibious. The dragon can breathe air and water. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 7 (1d10 + 2) piercing damage plus 2 (1d4) acid damage. @@ -521,13 +637,13 @@ class BlackDragonWyrmling(Monster): 22 (Sd8) acid damage on a failed save, or half as much damage on a successful one. """ - name = "Black Dragon Wyrmling" - description = "Medium dragon, chaotic evil" + name = 'Black Dragon Wyrmling' + description = 'Medium dragon, chaotic evil' challenge_rating = 2 armor_class = 17 - skills = "Perception +4, Stealth +4" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14" - languages = "Draconic" + skills = 'Perception +4, Stealth +4' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14' + languages = 'Draconic' strength = Ability(15) dexterity = Ability(14) constitution = Ability(13) @@ -538,13 +654,19 @@ class BlackDragonWyrmling(Monster): swim_speed = 30 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 33 - hit_dice = "6d8" + hit_dice = '6d8 + 6' + condition_immunities = '' + damage_immunities = 'acid' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class BlackPudding(Monster): """ + Amorphous. The pudding can move through a space as narrow as 1 inch wide without squeezing. @@ -560,20 +682,32 @@ class BlackPudding(Monster): Spider Climb. The pudding can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check. + + # Actions + Pseudopod. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 6 (1d6 + 3) bludgeoning damage plus 18 (4d8) acid damage. In addition, nonmagical armor worn by the target is partly dissolved and takes a permanent and cumulative -1 penalty to the AC it offers. The armor is destroyed if the penalty reduces its AC to 10. + + # Reactions + + Split. + When a pudding that is Medium or larger is subjected to lightning or + slashing damage, it splits into two new puddings if it has at least 10 + hit points. Each new pudding has hit points equal to half the original + pudding's, rounded down. New puddings are one size smaller than the + original pudding. """ - name = "Black Pudding" - description = "Large ooze, unaligned" + name = 'Black Pudding' + description = 'Large ooze, unaligned' challenge_rating = 4 armor_class = 7 - skills = "" - senses = "Blindsight 60 ft. (blind beyond this radius), Passive Perception 8" - languages = "" + skills = '' + senses = 'Blindsight 60 ft. (blind beyond this radius), Passive Perception 8' + languages = '' strength = Ability(16) dexterity = Ability(5) constitution = Ability(16) @@ -584,16 +718,25 @@ class BlackPudding(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 20 + burrow_speed = 0 hp_max = 85 - hit_dice = "10d10" + hit_dice = '10d10 + 30' + condition_immunities = 'blinded, charmed, blinded, exhaustion, frightened, prone' + damage_immunities = 'acid, cold, lightning, slashing' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class BlinkDog(Monster): """ + Keen Hearing and Smell. The dog has advantage on Wisdom (Perception) checks that rely on hearing or smell. + + # Actions + Bite. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 4 (1d6 + 1) piercing damage. @@ -602,12 +745,12 @@ class BlinkDog(Monster): carrying, up to 40 ft. to an unoccupied space it can see. Before or after teleporting, the dog can make one bite attack. """ - name = "Blink Dog" - description = "Medium fey, lawful good" + name = 'Blink Dog' + description = 'Medium fey, lawful good' challenge_rating = 0.25 armor_class = 13 - skills = "Perception +3, Stealth +5" - senses = "Passive Perception 10" + skills = 'Perception +3, Stealth +5' + senses = 'Passive Perception 10' languages = "Blink Dog, understands Sylvan but can't speak it" strength = Ability(12) dexterity = Ability(17) @@ -619,13 +762,19 @@ class BlinkDog(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "4d8" + hit_dice = '4d8 + 4' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class BloodHawk(Monster): """ + Keen Sight. The hawk has advantage on Wisdom (Perception) checks that rely on sight. @@ -633,17 +782,20 @@ class BloodHawk(Monster): The hawk has advantage on an attack roll against a creature if at least one of the hawk's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Beak. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 4 (1d4 + 2) piercing damage. """ - name = "Blood Hawk" - description = "Small beast, unaligned" + name = 'Blood Hawk' + description = 'Small beast, unaligned' challenge_rating = 0.125 armor_class = 12 - skills = "Perception +4" - senses = "Passive Perception 14" - languages = "" + skills = 'Perception +4' + senses = 'Passive Perception 14' + languages = '' strength = Ability(6) dexterity = Ability(14) constitution = Ability(10) @@ -654,13 +806,21 @@ class BloodHawk(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 7 - hit_dice = "2d6" + hit_dice = '2d6 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class BlueDragonWyrmling(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 8 (1d10 + 3) piercing damage plus 3 (1d6) lightning damage. @@ -670,13 +830,13 @@ class BlueDragonWyrmling(Monster): taking 22 (4d10) lightning damage on a failed save, or half as much damage on a successful one. """ - name = "Blue Dragon Wyrmling" - description = "Medium dragon, lawful evil" + name = 'Blue Dragon Wyrmling' + description = 'Medium dragon, lawful evil' challenge_rating = 3 armor_class = 17 - skills = "Perception +4, Stealth +2" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14" - languages = "Draconic" + skills = 'Perception +4, Stealth +2' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14' + languages = 'Draconic' strength = Ability(17) dexterity = Ability(10) constitution = Ability(15) @@ -687,13 +847,19 @@ class BlueDragonWyrmling(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 15 hp_max = 52 - hit_dice = "8d8" + hit_dice = '8d8 + 16' + condition_immunities = '' + damage_immunities = 'lightning' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Boar(Monster): """ + Charge. If the boar moves at least 20 ft. straight toward a target and then hits it with a tusk attack on the same turn, the target takes an extra @@ -702,17 +868,20 @@ class Boar(Monster): Relentless. If the boar takes 7 damage or less that would reduce it to 0 hit points, it is reduced to 1 hit point instead. + + # Actions + Tusk. Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 4 (1d6 + 1) slashing damage. """ - name = "Boar" - description = "Medium beast, unaligned" + name = 'Boar' + description = 'Medium beast, unaligned' challenge_rating = 0.25 armor_class = 11 - skills = "" - senses = "Passive Perception 9" - languages = "" + skills = '' + senses = 'Passive Perception 9' + languages = '' strength = Ability(13) dexterity = Ability(11) constitution = Ability(12) @@ -723,18 +892,27 @@ class Boar(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 11 - hit_dice = "2d8" + hit_dice = '2d8 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class BoneDevil(Monster): """ + Devil's Sight. Magical darkness doesn't impede the devil's darkvision. Magic Resistance. The devil has advantage on saving throws against spells and other magical effects. + + # Actions + Multiattack. The devil makes three attacks: two with its claws and one with its sting. @@ -748,13 +926,13 @@ class BoneDevil(Monster): minute. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success . """ - name = "Bone Devil" - description = "Large fiend, lawful evil" + name = 'Bone Devil' + description = 'Large fiend, lawful evil' challenge_rating = 12 armor_class = 19 - skills = "Deception +7, Insight +6" - senses = "Darkvision 120 ft., Passive Perception 9" - languages = "Infernal, telepathy 120 ft." + skills = 'Deception +7, Insight +6' + senses = 'Darkvision 120 ft., Passive Perception 9' + languages = 'Infernal, telepathy 120 ft.' strength = Ability(18) dexterity = Ability(16) constitution = Ability(18) @@ -765,13 +943,21 @@ class BoneDevil(Monster): swim_speed = 0 fly_speed = 40 climb_speed = 0 + burrow_speed = 0 hp_max = 142 - hit_dice = "15d10" + hit_dice = '15d10 + 60' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class BrassDragonWyrmling(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 7 (1d10 + 2) piercing damage. @@ -789,13 +975,13 @@ class BrassDragonWyrmling(Monster): creature if the creature takes damage or someone uses an action to wake it. """ - name = "Brass Dragon Wyrmling" - description = "Medium dragon, chaotic good" + name = 'Brass Dragon Wyrmling' + description = 'Medium dragon, chaotic good' challenge_rating = 1 armor_class = 16 - skills = "Perception +4, Stealth +2" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14" - languages = "Draconic" + skills = 'Perception +4, Stealth +2' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14' + languages = 'Draconic' strength = Ability(15) dexterity = Ability(10) constitution = Ability(13) @@ -806,15 +992,24 @@ class BrassDragonWyrmling(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 15 hp_max = 16 - hit_dice = "3d8" + hit_dice = '3d8 + 3' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class BronzeDragonWyrmling(Monster): """ + Amphibious. The dragon can breathe air and water. + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 8 (1d10 + 3) piercing damage. @@ -831,13 +1026,13 @@ class BronzeDragonWyrmling(Monster): saving throw. On a failed save, the creature is pushed 30 feet away from the dragon. """ - name = "Bronze Dragon Wyrmling" - description = "Medium dragon, lawful good" + name = 'Bronze Dragon Wyrmling' + description = 'Medium dragon, lawful good' challenge_rating = 2 armor_class = 17 - skills = "Perception +4, Stealth +2" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14" - languages = "Draconic" + skills = 'Perception +4, Stealth +2' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14' + languages = 'Draconic' strength = Ability(17) dexterity = Ability(10) constitution = Ability(15) @@ -848,16 +1043,25 @@ class BronzeDragonWyrmling(Monster): swim_speed = 30 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 32 - hit_dice = "5d8" + hit_dice = '5d8 + 10' + condition_immunities = '' + damage_immunities = 'lightning' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class BrownBear(Monster): """ + Keen Smell. The bear has advantage on Wisdom (Perception) checks that rely on smell. + + # Actions + Multiattack. The bear makes two attacks: one with its bite and one with its claws. Bite. @@ -867,13 +1071,13 @@ class BrownBear(Monster): Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 11 (2d6 + 4) slashing damage. """ - name = "Brown Bear" - description = "Large beast, unaligned" + name = 'Brown Bear' + description = 'Large beast, unaligned' challenge_rating = 1 armor_class = 11 - skills = "Perception +3" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3' + senses = 'Passive Perception 13' + languages = '' strength = Ability(19) dexterity = Ability(10) constitution = Ability(16) @@ -884,13 +1088,19 @@ class BrownBear(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 30 + burrow_speed = 0 hp_max = 34 - hit_dice = "4d10" + hit_dice = '4d10 + 12' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Bugbear(Monster): """ + Brute. A melee weapon deals one extra die of its damage when the bugbear hits with it (included in the attack). @@ -898,6 +1108,9 @@ class Bugbear(Monster): If the bugbear surprises a creature and hits it with an attack during the first round of combat, the target takes an extra 7 (2d6) damage from the attack. + + # Actions + Morningstar. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 11 (2d8 + 2) piercing damage. @@ -906,13 +1119,13 @@ class Bugbear(Monster): ft., one target. Hit: 9 (2d6 + 2) piercing damage in melee or 5 (1d6 + 2) piercing damage at range. """ - name = "Bugbear" - description = "Medium humanoid, chaotic evil" + name = 'Bugbear' + description = 'Medium humanoid, chaotic evil' challenge_rating = 1 armor_class = 16 - skills = "Stealth +6, Survival +2" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Common, Goblin" + skills = 'Stealth +6, Survival +2' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Common, Goblin' strength = Ability(15) dexterity = Ability(14) constitution = Ability(13) @@ -923,12 +1136,67 @@ class Bugbear(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 27 - hit_dice = "5d8" + hit_dice = '5d8 + 5' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' + spells = [] + + +class Bulette(Monster): + """ + + Standing Leap. + The bulette's long jump is up to 30 ft. and its high jump is up to 15 + ft., with or without a running start. + + # Actions + + Bite. + Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 30 (4d12 + + 4) piercing damage. + Deadly Leap. + If the bulette jumps at least 15 ft. as part of its movement, it can + then use this action to land on its ft. in a space that contains one + or more other creatures. Each of those creatures must succeed on a DC + 16 Strength or Dexterity saving throw (target's choice) or be knocked + prone and take 14 (3d6 + 4) bludgeoning damage plus 14 (3d6 + 4) + slashing damage. On a successful save, the creature takes only half + the damage, isn't knocked prone, and is pushed 5 ft. out of the + bulette's space into an unoccupied space of the creature's choice. If + no unoccupied space is within range, the creature instead falls prone + in the bulette's space. + """ + name = 'Bulette' + description = 'Large monstrosity, unaligned' + challenge_rating = 5 + armor_class = 17 + skills = 'Perception +6' + senses = 'Darkvision 60 ft., Tremorsense 60 ft., Passive Perception 16' + languages = '' + strength = Ability(19) + dexterity = Ability(11) + constitution = Ability(21) + intelligence = Ability(2) + wisdom = Ability(10) + charisma = Ability(5) + speed = 40 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 40 + hp_max = 94 + hit_dice = '9d10 + 45' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] -# PotA class Burrowshark(Monster): """Elite warriors of the earth cult, burrowsharks are fierce champions who ride trained bulettes into battle. While their powerful mounts @@ -961,13 +1229,13 @@ class Burrowshark(Monster): neither moved nor knocked prone. """ - name = "Burrowshark" - description = "Medium humanoid (human), neutral evil" + name = 'Burrowshark' + description = 'Medium humanoid (human), neutral evil' challenge_rating = 4 armor_class = 18 - skills = "Animal handling +2, Athletics +6, Intimidation + 3, Perception +2" - senses = "passive Perception 12" - languages = "Common" + skills = 'Animal handling +2, Athletics +6, Intimidation + 3, Perception +2' + senses = 'passive Perception 12' + languages = 'Common' strength = Ability(18) dexterity = Ability(12) constitution = Ability(16) @@ -979,46 +1247,4 @@ class Burrowshark(Monster): fly_speed = 0 climb_speed = 0 hp_max = 82 - hit_dice = "11d8+33" - - -class Bulette(Monster): - """ - Standing Leap. - The bulette's long jump is up to 30 ft. and its high jump is up to 15 - ft., with or without a running start. - Bite. - Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 30 (4d12 - + 4) piercing damage. - Deadly Leap. - If the bulette jumps at least 15 ft. as part of its movement, it can - then use this action to land on its ft. in a space that contains one - or more other creatures. Each of those creatures must succeed on a DC - 16 Strength or Dexterity saving throw (target's choice) or be knocked - prone and take 14 (3d6 + 4) bludgeoning damage plus 14 (3d6 + 4) - slashing damage. On a successful save, the creature takes only half - the damage, isn't knocked prone, and is pushed 5 ft. out of the - bulette's space into an unoccupied space of the creature's choice. If - no unoccupied space is within range, the creature instead falls prone - in the bulette's space. - """ - name = "Bulette" - description = "Large monstrosity, unaligned" - challenge_rating = 5 - armor_class = 17 - skills = "Perception +6" - senses = "Darkvision 60 ft., Tremorsense 60 ft., Passive Perception 16" - languages = "" - strength = Ability(19) - dexterity = Ability(11) - constitution = Ability(21) - intelligence = Ability(2) - wisdom = Ability(10) - charisma = Ability(5) - speed = 40 - swim_speed = 0 - fly_speed = 0 - climb_speed = 0 - hp_max = 94 - hit_dice = "9d10" - spells = [] + hit_dice = '11d8+33' diff --git a/dungeonsheets/monsters/monsters_c.py b/dungeonsheets/monsters/monsters_c.py index 94c4b2f..092e9ca 100644 --- a/dungeonsheets/monsters/monsters_c.py +++ b/dungeonsheets/monsters/monsters_c.py @@ -10,17 +10,20 @@ from dungeonsheets.stats import Ability class Camel(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 2 (1d4) bludgeoning damage. """ - name = "Camel" - description = "Large beast, unaligned" + name = 'Camel' + description = 'Large beast, unaligned' challenge_rating = 0.125 armor_class = 9 - skills = "" - senses = "Passive Perception 9" - languages = "" + skills = '' + senses = 'Passive Perception 9' + languages = '' strength = Ability(16) dexterity = Ability(8) constitution = Ability(14) @@ -31,27 +34,36 @@ class Camel(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 15 - hit_dice = "2d10" + hit_dice = '2d10 + 4' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Cat(Monster): """ + Keen Smell. The cat has advantage on Wisdom (Perception) checks that rely on smell. + + # Actions + Claws. Melee Weapon Attack: +0 to hit, reach 5 ft., one target. Hit: 1 slashing damage. """ - name = "Cat" - description = "Tiny beast, unaligned" + name = 'Cat' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 12 - skills = "Perception +3, Stealth +4" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3, Stealth +4' + senses = 'Passive Perception 13' + languages = '' strength = Ability(3) dexterity = Ability(15) constitution = Ability(10) @@ -62,17 +74,26 @@ class Cat(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 30 + burrow_speed = 0 hp_max = 2 - hit_dice = "1d4" + hit_dice = '1d4 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Centaur(Monster): """ + Charge. If the centaur moves at least 30 ft. straight toward a target and then hits it with a pike attack on the same turn, the target takes an extra 10 (3d6) piercing damage. + + # Actions + Multiattack. The centaur makes two attacks: one with its pike and one with its hooves or two with its longbow. @@ -86,13 +107,13 @@ class Centaur(Monster): Ranged Weapon Attack: +4 to hit, range 150/600 ft., one target. Hit: 6 (1d8 + 2) piercing damage. """ - name = "Centaur" - description = "Large monstrosity, neutral good" + name = 'Centaur' + description = 'Large monstrosity, neutral good' challenge_rating = 2 armor_class = 12 - skills = "Athletics +6, Perception +3, Survival +3" - senses = "Passive Perception 13" - languages = "Elvish, Sylvan" + skills = 'Athletics +6, Perception +3, Survival +3' + senses = 'Passive Perception 13' + languages = 'Elvish, Sylvan' strength = Ability(18) dexterity = Ability(14) constitution = Ability(14) @@ -103,18 +124,27 @@ class Centaur(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 45 - hit_dice = "6d10" + hit_dice = '6d10 + 12' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class ChainDevil(Monster): """ + Devil's Sight. Magical darkness doesn't impede the devil's darkvision. Magic Resistance. The devil has advantage on saving throws against spells and other magical effects. + + # Actions + Multiattack. The devil makes two attacks with its chains. Chain. @@ -135,14 +165,23 @@ class ChainDevil(Monster): creature of its own but can't make attacks while grappling. An animated chain reverts to its inanimate state if reduced to 0 hit points or if the devil is incapacitated or dies. + + # Reactions + + Unnerving Mask. + When a creature the devil can see starts its turn within 30 feet of + the devil, the devil can create the illusion that it looks like one of + the creature's departed loved ones or bitter enemies. If the creature + can see the devil, it must succeed on a DC 14 Wisdom saving throw or + be frightened until the end of its turn. """ - name = "Chain Devil" - description = "Medium fiend, lawful evil" + name = 'Chain Devil' + description = 'Medium fiend, lawful evil' challenge_rating = 8 armor_class = 16 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 11" - languages = "Infernal, telepathy 120 ft." + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 11' + languages = 'Infernal, telepathy 120 ft.' strength = Ability(18) dexterity = Ability(15) constitution = Ability(18) @@ -153,13 +192,21 @@ class ChainDevil(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 85 - hit_dice = "10d8" + hit_dice = '10d8 + 40' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Chimera(Monster): """ + + # Actions + Multiattack. The chimera makes three attacks: one with its bite, one with its horns, and one with its claws. When its fire breath is available, it @@ -178,12 +225,12 @@ class Chimera(Monster): area must make a DC 15 Dexterity saving throw, taking 31 (7d8) fire damage on a failed save, or half as much damage on a successful one. """ - name = "Chimera" - description = "Large monstrosity, chaotic evil" + name = 'Chimera' + description = 'Large monstrosity, chaotic evil' challenge_rating = 6 armor_class = 14 - skills = "Perception +8" - senses = "Darkvision 60 ft., Passive Perception 18" + skills = 'Perception +8' + senses = 'Darkvision 60 ft., Passive Perception 18' languages = "understands Draconic but can't speak" strength = Ability(19) dexterity = Ability(11) @@ -195,18 +242,27 @@ class Chimera(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 114 - hit_dice = "12d10" + hit_dice = '12d10 + 48' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Chuul(Monster): """ + Amphibious. The chuul can breathe air and water. Sense Magic. The chuul senses magic within 120 feet of it at will. This trait otherwise works like the detect magic spell but isn't itself magical. + + # Actions + Multiattack. The chuul makes two pincer attacks. If the chuul is grappling a creature, the chuul can also use its tentacles once. @@ -222,12 +278,12 @@ class Chuul(Monster): throw at the end of each of its turns, ending the effect on itself on a success. """ - name = "Chuul" - description = "Large aberration, chaotic evil" + name = 'Chuul' + description = 'Large aberration, chaotic evil' challenge_rating = 4 armor_class = 16 - skills = "Perception +4" - senses = "Darkvision 60 ft., Passive Perception 14" + skills = 'Perception +4' + senses = 'Darkvision 60 ft., Passive Perception 14' languages = "understands Deep Speech but can't speak" strength = Ability(19) dexterity = Ability(10) @@ -239,13 +295,19 @@ class Chuul(Monster): swim_speed = 30 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 93 - hit_dice = "11d10" + hit_dice = '11d10 + 33' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class ClayGolem(Monster): """ + Acid Absorption. Whenever the golem is subjected to acid damage, it takes no damage and instead regains a number of hit points equal to the acid damage dealt. @@ -264,6 +326,9 @@ class ClayGolem(Monster): magical effects. Magic Weapons. The golem's weapon attacks are magical. + + # Actions + Multiattack. The golem makes two slam attacks. Slam. @@ -278,12 +343,12 @@ class ClayGolem(Monster): to its AC, has advantage on Dexterity saving throws, and can use its slam attack as a bonus action. """ - name = "Clay Golem" - description = "Large construct, unaligned" + name = 'Clay Golem' + description = 'Large construct, unaligned' challenge_rating = 9 armor_class = 14 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 9" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 9' languages = "understands the languages of its creator but can't speak" strength = Ability(20) dexterity = Ability(9) @@ -295,13 +360,19 @@ class ClayGolem(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 133 - hit_dice = "14d10" + hit_dice = '14d10 + 56' + condition_immunities = 'charmed, exhaustion, frightened, paralyzed, petrified, poisoned' + damage_immunities = "acid, poison, psychic, bludgeoning, piercing, and slashing from nonmagical weapons that aren't adamantine" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Cloaker(Monster): """ + Damage Transfer. While attached to a creature, the cloaker takes only half the damage dealt to it (rounded down). and that creature takes the other half. @@ -311,6 +382,9 @@ class Cloaker(Monster): Light Sensitivity. While in bright light, the cloaker has disadvantage on attack rolls and Wisdom (Perception) checks that rely on sight. + + # Actions + Multiattack. The cloaker makes two attacks: one with its bite and one with its tail. @@ -351,13 +425,13 @@ class Cloaker(Monster): attack hits a duplicate, or if a duplicate fails a saving throw against an effect that deals damage, the duplicate disappears. """ - name = "Cloaker" - description = "Large aberration, chaotic neutral" + name = 'Cloaker' + description = 'Large aberration, chaotic neutral' challenge_rating = 8 armor_class = 14 - skills = "Stealth +5" - senses = "Darkvision 60 ft., Passive Perception 11" - languages = "Deep Speech, Undercommon" + skills = 'Stealth +5' + senses = 'Darkvision 60 ft., Passive Perception 11' + languages = 'Deep Speech, Undercommon' strength = Ability(17) dexterity = Ability(15) constitution = Ability(12) @@ -368,13 +442,19 @@ class Cloaker(Monster): swim_speed = 0 fly_speed = 40 climb_speed = 0 + burrow_speed = 0 hp_max = 78 - hit_dice = "12d10" + hit_dice = '12d10 + 12' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class CloudGiant(Monster): """ + Keen Smell. The giant has advantage on Wisdom (Perception) checks that rely on smell. @@ -389,6 +469,9 @@ class CloudGiant(Monster): 3/day each: feather fall, fly, misty step, telekinesis 1/day each: control weather, gaseous form + + # Actions + Multiattack. The giant makes two morningstar attacks. Morningstar. @@ -398,13 +481,13 @@ class CloudGiant(Monster): Ranged Weapon Attack: +12 to hit, range 60/240 ft., one target. Hit: 30 (4d10 + 8) bludgeoning damage. """ - name = "Cloud Giant" - description = "Huge giant, neutral good (50%) or neutral evil (50%)" + name = 'Cloud Giant' + description = 'Huge giant, neutral good (50%) or neutral evil (50%)' challenge_rating = 9 armor_class = 14 - skills = "Insight +7, Perception +7" - senses = "Passive Perception 17" - languages = "Common, Giant" + skills = 'Insight +7, Perception +7' + senses = 'Passive Perception 17' + languages = 'Common, Giant' strength = Ability(27) dexterity = Ability(10) constitution = Ability(22) @@ -415,13 +498,21 @@ class CloudGiant(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 200 - hit_dice = "16d12" + hit_dice = '16d12 + 96' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Cockatrice(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +3 to hit, reach 5 ft., one creature. Hit: 3 (1d4 + 1) piercing damage, and the target must succeed on a DC 11 @@ -431,13 +522,13 @@ class Cockatrice(Monster): success, the effect ends. On a failure, the creature is petrified for 24 hours. """ - name = "Cockatrice" - description = "Small monstrosity, unaligned" + name = 'Cockatrice' + description = 'Small monstrosity, unaligned' challenge_rating = 0.5 armor_class = 11 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 11" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 11' + languages = '' strength = Ability(6) dexterity = Ability(12) constitution = Ability(12) @@ -448,24 +539,32 @@ class Cockatrice(Monster): swim_speed = 0 fly_speed = 40 climb_speed = 0 + burrow_speed = 0 hp_max = 27 - hit_dice = "6d6" + hit_dice = '6d6 + 6' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Commoner(Monster): """ + + # Actions + Club. Melee Weapon Attack: +2 to hit, reach 5 ft., one target. Hit: 2 (1d4) bludgeoning damage. """ - name = "Commoner" - description = "Medium humanoid, any alignment" + name = 'Commoner' + description = 'Medium humanoid, any alignment' challenge_rating = 0 armor_class = 10 - skills = "" - senses = "Passive Perception 10" - languages = "any one language (usually Common)" + skills = '' + senses = 'Passive Perception 10' + languages = 'any one language (usually Common)' strength = Ability(10) dexterity = Ability(10) constitution = Ability(10) @@ -476,13 +575,21 @@ class Commoner(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 4 - hit_dice = "1d8" + hit_dice = '1d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class ConstrictorSnake(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 5 (1d6 + 2) piercing damage. @@ -492,13 +599,13 @@ class ConstrictorSnake(Monster): Until this grapple ends, the creature is restrained, and the snake can't constrict another target. """ - name = "Constrictor Snake" - description = "Large beast, unaligned" + name = 'Constrictor Snake' + description = 'Large beast, unaligned' challenge_rating = 0.25 armor_class = 12 - skills = "" - senses = "Blindsight 10 ft., Passive Perception 10" - languages = "" + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 10' + languages = '' strength = Ability(15) dexterity = Ability(14) constitution = Ability(12) @@ -509,13 +616,21 @@ class ConstrictorSnake(Monster): swim_speed = 30 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 13 - hit_dice = "2d10" + hit_dice = '2d10 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class CopperDragonWyrmling(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 7 (1d10 + 2) piercing damage. @@ -536,13 +651,13 @@ class CopperDragonWyrmling(Monster): can repeat the saving throw at the end of each of its turns, ending the effect on itself with a successful save. """ - name = "Copper Dragon Wyrmling" - description = "Medium dragon, chaotic good" + name = 'Copper Dragon Wyrmling' + description = 'Medium dragon, chaotic good' challenge_rating = 1 armor_class = 16 - skills = "Perception +4, Stealth +3" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14" - languages = "Draconic" + skills = 'Perception +4, Stealth +3' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14' + languages = 'Draconic' strength = Ability(15) dexterity = Ability(12) constitution = Ability(13) @@ -553,13 +668,19 @@ class CopperDragonWyrmling(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 30 + burrow_speed = 0 hp_max = 22 - hit_dice = "4d8" + hit_dice = '4d8 + 4' + condition_immunities = '' + damage_immunities = 'acid' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Couatl(Monster): """ + Innate Spellcasting. The couatl's spellcasting ability is Charisma (spell save DC 14). It can innately cast the following spells, requiring only verbal @@ -578,6 +699,9 @@ class Couatl(Monster): Shielded Mind. The couatl is immune to scrying and to any effect that would sense its emotions, read its thoughts, or detect its location. + + # Actions + Bite. Melee Weapon Attack: +8 to hit, reach 5 ft., one creature. Hit: 8 (1d6 + 5) piercing damage, and the target must succeed on a DC 13 @@ -603,13 +727,13 @@ class Couatl(Monster): and lair actions) that the new form has but that it lacks. If the new form has a bite attack, the couatl can use its bite in that form. """ - name = "Couatl" - description = "Medium celestial, lawful good" + name = 'Couatl' + description = 'Medium celestial, lawful good' challenge_rating = 4 armor_class = 19 - skills = "" - senses = "Truesight 120 ft., Passive Perception 15" - languages = "all, telepathy 120 ft." + skills = '' + senses = 'Truesight 120 ft., Passive Perception 15' + languages = 'all, telepathy 120 ft.' strength = Ability(16) dexterity = Ability(20) constitution = Ability(17) @@ -620,26 +744,35 @@ class Couatl(Monster): swim_speed = 0 fly_speed = 90 climb_speed = 0 + burrow_speed = 0 hp_max = 97 - hit_dice = "13d8" + hit_dice = '13d8 + 39' + condition_immunities = '' + damage_immunities = 'psychic, bludgeoning, piercing, and slashing from nonmagical weapons' + damage_resistances = 'radiant' + damage_vulnerabilities = '' spells = [] class Crab(Monster): """ + Amphibious. The crab can breathe air and water. + + # Actions + Claw. Melee Weapon Attack: +0 to hit, reach 5 ft., one target. Hit: 1 bludgeoning damage. """ - name = "Crab" - description = "Tiny beast, unaligned" + name = 'Crab' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 11 - skills = "Stealth +2" - senses = "Blindsight 30 ft., Passive Perception 9" - languages = "" + skills = 'Stealth +2' + senses = 'Blindsight 30 ft., Passive Perception 9' + languages = '' strength = Ability(2) dexterity = Ability(11) constitution = Ability(10) @@ -650,28 +783,37 @@ class Crab(Monster): swim_speed = 20 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 2 - hit_dice = "1d4" + hit_dice = '1d4 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Crocodile(Monster): """ + Hold Breath. The crocodile can hold its breath for 15 minutes. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 7 (1d10 + 2) piercing damage, and the target is grappled (escape DC 12). Until this grapple ends, the target is restrained, and the crocodile can't bite another target """ - name = "Crocodile" - description = "Large beast, unaligned" + name = 'Crocodile' + description = 'Large beast, unaligned' challenge_rating = 0.5 armor_class = 12 - skills = "Stealth +2" - senses = "Passive Perception 10" - languages = "" + skills = 'Stealth +2' + senses = 'Passive Perception 10' + languages = '' strength = Ability(15) dexterity = Ability(10) constitution = Ability(13) @@ -682,41 +824,44 @@ class Crocodile(Monster): swim_speed = 20 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 19 - hit_dice = "3d10" + hit_dice = '3d10 + 3' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class CultFanatic(Monster): """ + Dark Devotion. The fanatic has advantage on saving throws against being charmed or frightened. Spellcasting. - The fanatic is a 4th-level spellcaster. Its spell casting ability is - Wisdom (spell save DC 11, +3 to hit with spell attacks). The fanatic - has the following cleric spells prepared: - - - - Cantrips (at will): light, sacred flame, thaumaturgy - - - 1st level (4 slots): command, inflict wounds, shield of faith - - - 2nd level (3 slots): hold person, spiritual weapon + The fanatic is a 4th-level spellcaster. Its spell casting ability is Wisdom (spell save DC 11, +3 to hit with spell attacks). The fanatic has the following cleric spells prepared: + + Cantrips (at will): light, sacred flame, thaumaturgy + - 1st level (4 slots): command, inflict wounds, shield of faith + - 2nd level (3 slots): hold person, spiritual weapon + + # Actions + Multiattack. The fanatic makes two melee attacks. Dagger. Melee or Ranged Weapon Attack: +4 to hit, reach 5 ft. or range 20/60 ft., one creature. Hit: 4 (1d4 + 2) piercing damage. """ - name = "Cult Fanatic" - description = "Medium humanoid, any non-good alignment" + name = 'Cult Fanatic' + description = 'Medium humanoid, any non-good alignment' challenge_rating = 2 armor_class = 13 - skills = "Deception +4, Persuasion +4, Religion +2" - senses = "Passive Perception 11" - languages = "any one language (usually Common)" + skills = 'Deception +4, Persuasion +4, Religion +2' + senses = 'Passive Perception 11' + languages = 'any one language (usually Common)' strength = Ability(11) dexterity = Ability(14) constitution = Ability(12) @@ -727,27 +872,36 @@ class CultFanatic(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "6d8" - spells = ["light", "sacred flame", "thaumaturgy", "command", "inflict wounds", "shield of faith", "hold person", "spiritual weapon"] + hit_dice = '6d8 + -5' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' + spells = ['light', 'sacred flame', 'thaumaturgy', 'command', 'inflict wounds', 'shield of faith', 'hold person', 'spiritual weapon'] class Cultist(Monster): """ + Dark Devotion. The cultist has advantage on saving throws against being charmed or frightened. + + # Actions + Scimitar. Melee Weapon Attack: +3 to hit, reach 5 ft., one creature. Hit: 4 (1d6 + 1) slashing damage. """ - name = "Cultist" - description = "Medium humanoid, any non-good alignment" + name = 'Cultist' + description = 'Medium humanoid, any non-good alignment' challenge_rating = 0.125 armor_class = 12 - skills = "Deception +2, Religion +2" - senses = "Passive Perception 10" - languages = "any one language (usually Common)" + skills = 'Deception +2, Religion +2' + senses = 'Passive Perception 10' + languages = 'any one language (usually Common)' strength = Ability(11) dexterity = Ability(12) constitution = Ability(10) @@ -758,6 +912,11 @@ class Cultist(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 9 - hit_dice = "2d8" + hit_dice = '2d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_d.py b/dungeonsheets/monsters/monsters_d.py index dc88e3d..2930169 100644 --- a/dungeonsheets/monsters/monsters_d.py +++ b/dungeonsheets/monsters/monsters_d.py @@ -42,15 +42,15 @@ class Dao(Monster): check or be knocked prone. """ - name = "Dao" - description = "Large elemental, neutral evil" + name = 'Dao' + description = 'Large elemental, neutral evil' challenge_rating = 11 armor_class = 18 - skills = "" - saving_throws = "Int +5, Wis +5, Cha +6" - condition_immunities = "petrified" - senses = "darkvision 120ft., passive Perception 11" - languages = "Terran" + skills = '' + saving_throws = 'Int +5, Wis +5, Cha +6' + condition_immunities = 'petrified' + senses = 'darkvision 120ft., passive Perception 11' + languages = 'Terran' strength = Ability(23) dexterity = Ability(12) constitution = Ability(24) @@ -63,21 +63,21 @@ class Dao(Monster): climb_speed = 0 burrow_speed = 30 hp_max = 187 - hit_dice = "15d10 + 105" - spells = ["detect evil and good", "detect magic", "stone shape", - "passwall", "move earth", "tongues", - "conjure elemental", "gaseous form", - "invisibility", "phantasmal killer", "plane shift", - "wall of stone"] + hit_dice = '15d10 + 105' + spells = ['detect evil and good', 'detect magic', 'stone shape', 'passwall', 'move earth', 'tongues', 'conjure elemental', 'gaseous form', 'invisibility', 'phantasmal killer', 'plane shift', 'wall of stone'] class Darkmantle(Monster): """ + Echolocation. The darkmantle can't use its blindsight while deafened. False Appearance. While the darkmantle remains motionless, it is indistinguishable from a cave formation such as a stalactite or stalagmite. + + # Actions + Crush. Melee Weapon Attack: +5 to hit, reach 5 ft., one creature. Hit: 6 (1d6 + 3) bludgeoning damage, and the darkmantle attaches to the target. If @@ -103,13 +103,13 @@ class Darkmantle(Monster): overlaps with an area of light created by a spell of 2nd level or lower, the spell creating the light is dispelled. """ - name = "Darkmantle" - description = "Small monstrosity, unaligned" + name = 'Darkmantle' + description = 'Small monstrosity, unaligned' challenge_rating = 0.5 armor_class = 11 - skills = "Stealth +3" - senses = "Blindsight 60 ft., Passive Perception 10" - languages = "" + skills = 'Stealth +3' + senses = 'Blindsight 60 ft., Passive Perception 10' + languages = '' strength = Ability(16) dexterity = Ability(12) constitution = Ability(13) @@ -120,17 +120,26 @@ class Darkmantle(Monster): swim_speed = 0 fly_speed = 30 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "5d6" + hit_dice = '5d6 + 5' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class DeathDog(Monster): """ + Two-Headed. The dog has advantage on Wisdom (Perception) checks and on saving throws against being blinded, charmed, deafened, frightened, stunned, or knocked unconscious. + + # Actions + Multiattack. The dog makes two bite attacks. Bite. @@ -142,13 +151,13 @@ class DeathDog(Monster): (1d10) on a failure. This reduction lasts until the disease is cured. The creature dies if the disease reduces its hit point maximum to 0. """ - name = "Death Dog" - description = "Medium monstrosity, neutral evil" + name = 'Death Dog' + description = 'Medium monstrosity, neutral evil' challenge_rating = 1 armor_class = 12 - skills = "Perception +5, Stealth +4" - senses = "Darkvision 120 ft., Passive Perception 15" - languages = "" + skills = 'Perception +5, Stealth +4' + senses = 'Darkvision 120 ft., Passive Perception 15' + languages = '' strength = Ability(15) dexterity = Ability(14) constitution = Ability(14) @@ -159,13 +168,19 @@ class DeathDog(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 39 - hit_dice = "6d8" + hit_dice = '6d8 + 12' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class DeepGnomeSvirfneblin(Monster): """ + Stone Camouflage. The gnome has advantage on Dexterity (Stealth) checks made to hide in rocky terrain. @@ -180,6 +195,9 @@ class DeepGnomeSvirfneblin(Monster): At will: nondetection (self only) 1/day each: blindness/deafness, blur, disguise self + + # Actions + War Pick. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 6 (1d8 + 2) piercing damage. @@ -190,13 +208,13 @@ class DeepGnomeSvirfneblin(Monster): repeat the saving throw at the end of each of its turns, ending the effect on itself on a success """ - name = "Deep Gnome (Svirfneblin)" - description = "Small humanoid, neutral good" + name = 'Deep Gnome (Svirfneblin)' + description = 'Small humanoid, neutral good' challenge_rating = 0.5 armor_class = 15 - skills = "Investigation +3, Perception +2, Stealth +4" - senses = "Darkvision 120 ft., Passive Perception 12" - languages = "Gnomish, Terran, Undercommon" + skills = 'Investigation +3, Perception +2, Stealth +4' + senses = 'Darkvision 120 ft., Passive Perception 12' + languages = 'Gnomish, Terran, Undercommon' strength = Ability(15) dexterity = Ability(14) constitution = Ability(14) @@ -207,74 +225,32 @@ class DeepGnomeSvirfneblin(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 16 - hit_dice = "3d6" + hit_dice = '3d6 + 6' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] -class DeepGnomeSvirfneblin(Monster): - """Stone Camouflage. - The gnome has advantage on Dexterity (Stealth) checks made to - hide in rocky terrain. - Gnome Cunning. - The gnome has advantage on Intelligence, Wisdom, and Charisma - saving throws against magic. - Innate Spellcasting. - The gnome's innate spellcasting ability is Intelligence (spell - save DC 11). It can innately cast the following spells, - requiring no material components: - - - At will: nondetection (self only) - - 1/day each: blindness/deafness, blur, disguise self - - War Pick - Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 6 - (1d8 + 2) piercing damage. - Poisoned Dart - Ranged Weapon Attack: +4 to hit, range 30/120 ft., one - creature. Hit: 4 (1d4 + 2) piercing damage, and the target must - succeed on a DC 12 Constitution saving throw or be poisoned for - 1 minute. The target can repeat the saving throw at the end of - each of its turns, ending the effect on itself on a success - - """ - name = "Deep Gnome (Svirfneblin)" - description = "Small humanoid, neutral good" - challenge_rating = 0.5 - armor_class = 15 - skills = "Investigation +3, Perception +2, Stealth +4" - senses = "Darkvision 120 ft., Passive Perception 12" - languages = "Gnomish, Terran, Undercommon" - strength = Ability(15) - dexterity = Ability(14) - constitution = Ability(14) - intelligence = Ability(12) - wisdom = Ability(10) - charisma = Ability(9) - speed = 20 - swim_speed = 0 - fly_speed = 0 - climb_speed = 0 - hp_max = 16 - hit_dice = "3d6" - - -DeepGnome = DeepGnomeSvirfneblin - - class Deer(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +2 to hit, reach 5 ft., one target. Hit: 2 (1d4) piercing damage. """ - name = "Deer" - description = "Medium beast, unaligned" + name = 'Deer' + description = 'Medium beast, unaligned' challenge_rating = 0 armor_class = 13 - skills = "" - senses = "Passive Perception 12" - languages = "" + skills = '' + senses = 'Passive Perception 12' + languages = '' strength = Ability(11) dexterity = Ability(16) constitution = Ability(11) @@ -285,13 +261,19 @@ class Deer(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 4 - hit_dice = "1d8" + hit_dice = '1d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Deva(Monster): """ + Angelic Weapons. The deva's weapon attacks are magical. When the deva hits with any weapon, the weapon deals an extra 4d8 radiant damage (included in the @@ -307,6 +289,9 @@ class Deva(Monster): Magic Resistance. The deva has advantage on saving throws against spells and other magical effects. + + # Actions + Multiattack. The deva makes two melee attacks. Mace. @@ -329,13 +314,13 @@ class Deva(Monster): statistics and capabilities (except class features, legendary actions, and lair actions) that the new form has but that it lacks. """ - name = "Deva" - description = "Medium celestial, lawful good" + name = 'Deva' + description = 'Medium celestial, lawful good' challenge_rating = 10 armor_class = 17 - skills = "Insight +9, Perception +9" - senses = "Darkvision 120 ft., Passive Perception 19" - languages = "all, telepathy 120 ft." + skills = 'Insight +9, Perception +9' + senses = 'Darkvision 120 ft., Passive Perception 19' + languages = 'all, telepathy 120 ft.' strength = Ability(18) dexterity = Ability(18) constitution = Ability(18) @@ -346,13 +331,19 @@ class Deva(Monster): swim_speed = 0 fly_speed = 90 climb_speed = 0 + burrow_speed = 0 hp_max = 136 - hit_dice = "16d8" + hit_dice = '16d8 + 64' + condition_immunities = 'charmed, exhaustion, frightened' + damage_immunities = '' + damage_resistances = 'radiant' + damage_vulnerabilities = '' spells = [] class DireWolf(Monster): """ + Keen Hearing and Smell. The wolf has advantage on Wisdom (Perception) checks that rely on hearing or smell. @@ -360,18 +351,21 @@ class DireWolf(Monster): The wolf has advantage on an attack roll against a creature if at least one of the wolf's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + 3) piercing damage. If the target is a creature, it must succeed on a DC 13 Strength saving throw or be knocked prone. """ - name = "Dire Wolf" - description = "Large beast, unaligned" + name = 'Dire Wolf' + description = 'Large beast, unaligned' challenge_rating = 1 armor_class = 14 - skills = "Perception +3, Stealth +4" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3, Stealth +4' + senses = 'Passive Perception 13' + languages = '' strength = Ability(17) dexterity = Ability(15) constitution = Ability(15) @@ -382,13 +376,19 @@ class DireWolf(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 37 - hit_dice = "5d10" + hit_dice = '5d10 + 10' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Djinni(Monster): """ + Elemental Demise. If the djinni dies, its body disintegrates into a warm breeze, leaving behind only equipment the djinni was wearing or carrying. @@ -440,6 +440,9 @@ class Djinni(Monster): nature, the genie might try to pervert the intent of the wish by exploiting the wish's poor wording. The perversion of the wording is usually crafted to be to the genie's benefit. + + # Actions + Multiattack. The djinni makes three scimitar attacks. Scimitar. @@ -461,13 +464,13 @@ class Djinni(Monster): If the check succeeds, the creature is no longer restrained and moves to the nearest space outside the whirlwind. """ - name = "Djinni" - description = "Large elemental, chaotic good" + name = 'Djinni' + description = 'Large elemental, chaotic good' challenge_rating = 11 armor_class = 17 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 13" - languages = "Auran" + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 13' + languages = 'Auran' strength = Ability(21) dexterity = Ability(15) constitution = Ability(22) @@ -478,13 +481,19 @@ class Djinni(Monster): swim_speed = 0 fly_speed = 90 climb_speed = 0 + burrow_speed = 0 hp_max = 161 - hit_dice = "14d10" + hit_dice = '14d10 + 84' + condition_immunities = '' + damage_immunities = 'lightning, thunder' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Doppelganger(Monster): """ + Shapechanger. The doppelganger can use its action to polymorph into a Small or Medium humanoid it has seen, or back into its true form. Its @@ -498,6 +507,9 @@ class Doppelganger(Monster): If the doppelganger surprises a creature and hits it with an attack during the first round of combat, the target takes an extra 10 (3d6) damage from the attack. + + # Actions + Multiattack. The doppelganger makes two melee attacks. Slam. @@ -514,13 +526,13 @@ class Doppelganger(Monster): (Insight) and Charisma (Deception, Intimidation, and Persuasion) checks against the target. """ - name = "Doppelganger" - description = "Medium monstrosity, unaligned" + name = 'Doppelganger' + description = 'Medium monstrosity, unaligned' challenge_rating = 3 armor_class = 14 - skills = "Deception +6, Insight +3" - senses = "Darkvision 60 ft., Passive Perception 11" - languages = "Common" + skills = 'Deception +6, Insight +3' + senses = 'Darkvision 60 ft., Passive Perception 11' + languages = 'Common' strength = Ability(11) dexterity = Ability(18) constitution = Ability(14) @@ -531,24 +543,32 @@ class Doppelganger(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 52 - hit_dice = "8d8" + hit_dice = '8d8 + 16' + condition_immunities = 'charmed' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class DraftHorse(Monster): """ + + # Actions + Hooves. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 9 (2d4 + 4) bludgeoning damage. """ - name = "Draft Horse" - description = "Large beast, unaligned" + name = 'Draft Horse' + description = 'Large beast, unaligned' challenge_rating = 0.25 armor_class = 10 - skills = "" - senses = "Passive Perception 10" - languages = "" + skills = '' + senses = 'Passive Perception 10' + languages = '' strength = Ability(18) dexterity = Ability(10) constitution = Ability(12) @@ -559,15 +579,24 @@ class DraftHorse(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 19 - hit_dice = "3d10" + hit_dice = '3d10 + 3' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class DragonTurtle(Monster): """ + Amphibious. The dragon turtle can breathe air and water. + + # Actions + Multiattack. The dragon turtle makes three attacks: one with its bite and two with its claws. It can make one tail attack in place of its two claw @@ -590,13 +619,13 @@ class DragonTurtle(Monster): on a successful one. Being underwater doesn't grant resistance against this damage. """ - name = "Dragon Turtle" - description = "Gargantuan dragon, neutral" + name = 'Dragon Turtle' + description = 'Gargantuan dragon, neutral' challenge_rating = 17 armor_class = 20 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 11" - languages = "Aquan, Draconic" + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 11' + languages = 'Aquan, Draconic' strength = Ability(25) dexterity = Ability(10) constitution = Ability(20) @@ -607,13 +636,21 @@ class DragonTurtle(Monster): swim_speed = 40 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 341 - hit_dice = "22d20" + hit_dice = '22d20 + 110' + condition_immunities = '' + damage_immunities = '' + damage_resistances = 'fire' + damage_vulnerabilities = '' spells = [] class Dretch(Monster): """ + + # Actions + Multiattack. The dretch makes two attacks: one with its bite and one with its claws. @@ -632,13 +669,13 @@ class Dretch(Monster): poisoned in this way, the target can take either an action or a bonus action on its turn, not both, and can't take reactions. """ - name = "Dretch" - description = "Small fiend, chaotic evil" + name = 'Dretch' + description = 'Small fiend, chaotic evil' challenge_rating = 0.25 armor_class = 11 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 9" - languages = "Abyssal, telepathy 60 ft. (works only with creatures that understand Abyssal)" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 9' + languages = 'Abyssal, telepathy 60 ft. (works only with creatures that understand Abyssal)' strength = Ability(11) dexterity = Ability(11) constitution = Ability(12) @@ -649,13 +686,19 @@ class Dretch(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 18 - hit_dice = "4d6" + hit_dice = '4d6 + 4' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Drider(Monster): """ + Fey Ancestry. The drider has advantage on saving throws against being charmed, and magic can't put the drider to sleep. @@ -675,6 +718,9 @@ class Drider(Monster): well as on Wisdom (Perception) checks that rely on sight. Web Walker. The drider ignores movement restrictions caused by webbing. + + # Actions + Multiattack. The drider makes three attacks, either with its longsword or its longbow. It can replace one of those attacks with a bite attack. @@ -689,13 +735,13 @@ class Drider(Monster): Ranged Weapon Attack: +6 to hit, range 150/600 ft., one target. Hit: 7 (1d8 + 3) piercing damage plus 4 (1d8) poison damage. """ - name = "Drider" - description = "Large monstrosity, chaotic evil" + name = 'Drider' + description = 'Large monstrosity, chaotic evil' challenge_rating = 6 armor_class = 19 - skills = "Perception +5, Stealth +9" - senses = "Darkvision 120 ft., Passive Perception 15" - languages = "Elvish, Undercommon" + skills = 'Perception +5, Stealth +9' + senses = 'Darkvision 120 ft., Passive Perception 15' + languages = 'Elvish, Undercommon' strength = Ability(16) dexterity = Ability(16) constitution = Ability(18) @@ -706,13 +752,19 @@ class Drider(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 30 + burrow_speed = 0 hp_max = 123 - hit_dice = "13d10" + hit_dice = '13d10 + 52' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Drow(Monster): """ + Fey Ancestry. The drow has advantage on saving throws against being charmed, and magic can't put the drow to sleep. @@ -726,6 +778,9 @@ class Drow(Monster): Sunlight Sensitivity. While in sunlight, the drow has disadvantage on attack rolls, as well as on Wisdom (Perception) checks that rely on sight. + + # Actions + Shortsword. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + 2) piercing damage. @@ -737,13 +792,13 @@ class Drow(Monster): poisoned in this way. The target wakes up if it takes damage or if another creature takes an action to shake it awake. """ - name = "Drow" - description = "Medium humanoid, neutral evil" + name = 'Drow' + description = 'Medium humanoid, neutral evil' challenge_rating = 0.25 armor_class = 15 - skills = "Perception +2, Stealth +4" - senses = "Darkvision 120 ft., Passive Perception 12" - languages = "Elvish, Undercommon" + skills = 'Perception +2, Stealth +4' + senses = 'Darkvision 120 ft., Passive Perception 12' + languages = 'Elvish, Undercommon' strength = Ability(10) dexterity = Ability(14) constitution = Ability(10) @@ -754,38 +809,40 @@ class Drow(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 13 - hit_dice = "3d8" + hit_dice = '3d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Druid(Monster): """ + Spellcasting. - The druid is a 4th-level spellcaster. Its spellcasting ability is - Wisdom (spell save DC 12, +4 to hit with spell attacks). It has the - following druid spells prepared: - - - - - Cantrips (at will): druidcraft, produce flame, shillelagh - - - 1st level (4 slots): entangle, longstrider, speak with animals, - thunderwave - - - 2nd level (3 slots): animal messenger, barkskin + The druid is a 4th-level spellcaster. Its spellcasting ability is Wisdom (spell save DC 12, +4 to hit with spell attacks). It has the following druid spells prepared: + + - Cantrips (at will): druidcraft, produce flame, shillelagh + - 1st level (4 slots): entangle, longstrider, speak with animals, thunderwave + - 2nd level (3 slots): animal messenger, barkskin + + # Actions + Quarterstaff. Melee Weapon Attack: +2 to hit (+4 to hit with shillelagh), reach 5 ft., one target. Hit: 3 (1d6) bludgeoning damage, or 6 (1d8 + 2) bludgeoning damage with shillelagh or if wielded with two hands. """ - name = "Druid" - description = "Medium humanoid, any alignment" + name = 'Druid' + description = 'Medium humanoid, any alignment' challenge_rating = 2 armor_class = 11 - skills = "Medicine +4, Nature +3, Perception +4" - senses = "Passive Perception 14" - languages = "Druidic plus any two languages" + skills = 'Medicine +4, Nature +3, Perception +4' + senses = 'Passive Perception 14' + languages = 'Druidic plus any two languages' strength = Ability(10) dexterity = Ability(12) constitution = Ability(13) @@ -796,13 +853,19 @@ class Druid(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 27 - hit_dice = "5d8" - spells = ["druidcraft", "produce flame", "shillelagh", "entangle", "longstrider", "speak with animals", "thunderwave", "animal messenger", "barkskin"] + hit_dice = '5d8 + 5' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' + spells = ['druidcraft', 'produce flame', 'shillelagh', 'entangle', 'longstrider', 'speak with animals', 'thunderwave', 'animal messenger', 'barkskin'] class Dryad(Monster): """ + Innate Spellcasting. The dryad's innate spellcasting ability is Charisma (spell save DC 14). The dryad can innately cast the following spells, requiring no @@ -827,6 +890,9 @@ class Dryad(Monster): second living tree within 60 ft. of the first tree, appearing in an unoccupied space within 5 ft. of the second tree. Both trees must be large or bigger. + + # Actions + Club. Melee Weapon Attack: +2 to hit (+6 to hit with shillelagh), reach 5 ft., one target. Hit: 2 (1 d4) bludgeoning damage, or 8 (1d8 + 4) @@ -849,13 +915,13 @@ class Dryad(Monster): The dryad can have no more than one humanoid and up to three beasts charmed at a time. """ - name = "Dryad" - description = "Medium fey, neutral" + name = 'Dryad' + description = 'Medium fey, neutral' challenge_rating = 1 armor_class = 11 - skills = "Perception +4, Stealth +5" - senses = "Darkvision 60 ft., Passive Perception 14" - languages = "Elvish, Sylvan" + skills = 'Perception +4, Stealth +5' + senses = 'Darkvision 60 ft., Passive Perception 14' + languages = 'Elvish, Sylvan' strength = Ability(10) dexterity = Ability(12) constitution = Ability(11) @@ -866,19 +932,28 @@ class Dryad(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "5d8" + hit_dice = '5d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Duergar(Monster): """ + Duergar Resilience. The duergar has advantage on saving throws against poison, spells, and illusions, as well as to resist being charmed or paralyzed. Sunlight Sensitivity. While in sunlight, the duergar has disadvantage on attack rolls, as well as on Wisdom (Perception) checks that rely on sight. + + # Actions + Enlarge. For 1 minute, the duergar magically increases in size, along with anything it is wearing or carrying. While enlarged, the duergar is @@ -899,13 +974,13 @@ class Duergar(Monster): hour (as if concentrating on a spell). Any equipment the duergar wears or carries is invisible with it . """ - name = "Duergar" - description = "Medium humanoid, lawful evil" + name = 'Duergar' + description = 'Medium humanoid, lawful evil' challenge_rating = 1 armor_class = 16 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 10" - languages = "Dwarvish, Undercommon" + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 10' + languages = 'Dwarvish, Undercommon' strength = Ability(14) dexterity = Ability(11) constitution = Ability(14) @@ -916,13 +991,19 @@ class Duergar(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 26 - hit_dice = "4d8" + hit_dice = '4d8 + 8' + condition_immunities = '' + damage_immunities = '' + damage_resistances = 'poison' + damage_vulnerabilities = '' spells = [] class DustMephit(Monster): """ + Death Burst. When the mephit dies, it explodes in a burst of dust. Each creature within 5 ft. of it must then succeed on a DC 10 Constitution saving @@ -932,6 +1013,9 @@ class DustMephit(Monster): Innate Spellcasting. The mephit can innately cast sleep, requiring no material components. Its innate spellcasting ability is Charisma. + + # Actions + Claws. Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 4 (1d4 + 2) slashing damage. @@ -947,13 +1031,13 @@ class DustMephit(Monster): other mephits. It remains for 1 minute, until it or its summoner dies, or until its summoner dismisses it as an action. """ - name = "Dust Mephit" - description = "Small elemental, neutral evil" + name = 'Dust Mephit' + description = 'Small elemental, neutral evil' challenge_rating = 0.5 armor_class = 12 - skills = "Perception +2, Stealth +4" - senses = "Darkvision 60 ft., Passive Perception 12" - languages = "Auran, Terran" + skills = 'Perception +2, Stealth +4' + senses = 'Darkvision 60 ft., Passive Perception 12' + languages = 'Auran, Terran' strength = Ability(5) dexterity = Ability(14) constitution = Ability(10) @@ -964,6 +1048,11 @@ class DustMephit(Monster): swim_speed = 0 fly_speed = 30 climb_speed = 0 + burrow_speed = 0 hp_max = 17 - hit_dice = "5d6" + hit_dice = '5d6 + 0' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = 'fire' spells = [] diff --git a/dungeonsheets/monsters/monsters_e.py b/dungeonsheets/monsters/monsters_e.py index c81d6d3..5f1c40a 100644 --- a/dungeonsheets/monsters/monsters_e.py +++ b/dungeonsheets/monsters/monsters_e.py @@ -10,20 +10,24 @@ from dungeonsheets.stats import Ability class Eagle(Monster): """ + Keen Sight. The eagle has advantage on Wisdom (Perception) checks that rely on sight. + + # Actions + Talons. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 4 (1d4 + 2) slashing damage. """ - name = "Eagle" - description = "Small beast, unaligned" + name = 'Eagle' + description = 'Small beast, unaligned' challenge_rating = 0 armor_class = 12 - skills = "Perception +4" - senses = "Passive Perception 14" - languages = "" + skills = 'Perception +4' + senses = 'Passive Perception 14' + languages = '' strength = Ability(6) dexterity = Ability(15) constitution = Ability(10) @@ -34,32 +38,41 @@ class Eagle(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 3 - hit_dice = "1d6" + hit_dice = '1d6 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class EarthElemental(Monster): """ + Earth Glide. The elemental can burrow through nonmagical, unworked earth and stone. While doing so, the elemental doesn't disturb the material it moves through. Siege Monster. The elemental deals double damage to objects and structures. + + # Actions + Multiattack. The elemental makes two slam attacks. Slam. Melee Weapon Attack: +8 to hit, reach 10 ft., one target. Hit: 14 (2d8 + 5) bludgeoning damage. """ - name = "Earth Elemental" - description = "Large elemental, neutral" + name = 'Earth Elemental' + description = 'Large elemental, neutral' challenge_rating = 5 armor_class = 17 - skills = "" - senses = "Darkvision 60 ft., Tremorsense 60 ft., Passive Perception 10" - languages = "Terran" + skills = '' + senses = 'Darkvision 60 ft., Tremorsense 60 ft., Passive Perception 10' + languages = 'Terran' strength = Ability(20) dexterity = Ability(8) constitution = Ability(20) @@ -70,11 +83,16 @@ class EarthElemental(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 30 hp_max = 126 - hit_dice = "12d10" + hit_dice = '12d10 + 60' + condition_immunities = 'exhaustion, paralyzed, petrified, poisoned, unconscious' + damage_immunities = 'poison' + damage_resistances = 'bludgeoning, piercing, and slashing from nonmagical weapons' + damage_vulnerabilities = 'thunder' spells = [] -# MTF + class EarthElementalMyrmidon(Monster): """Magic Weapons. The myrmidon's weapon attacks are magical. @@ -95,15 +113,15 @@ class EarthElementalMyrmidon(Monster): creators. """ - name = "Earth Elemental Myrmidon" - description = "Medium elemental, neutral" + name = 'Earth Elemental Myrmidon' + description = 'Medium elemental, neutral' challenge_rating = 7 armor_class = 18 - damage_resistances = "bludgeoning, piercing, and slashing from nonmagical weapons" - damage_immunities = "poison" - condition_immunities = "paralyzed, petrified, poisoned, prone" - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" + damage_resistances = 'bludgeoning, piercing, and slashing from nonmagical weapons' + damage_immunities = 'poison' + condition_immunities = 'paralyzed, petrified, poisoned, prone' + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' languages = "Terran, one language of its creator's choice" strength = Ability(18) dexterity = Ability(10) @@ -116,11 +134,12 @@ class EarthElementalMyrmidon(Monster): fly_speed = 0 climb_speed = 0 hp_max = 127 - hit_dice = "17d8 + 51" + hit_dice = '17d8 + 51' class Efreeti(Monster): """ + Elemental Demise. If the efreeti dies, its body disintegrates in a flash of fire and puff of smoke, leaving behind only equipment the djinni was wearing or @@ -172,6 +191,9 @@ class Efreeti(Monster): nature, the genie might try to pervert the intent of the wish by exploiting the wish's poor wording. The perversion of the wording is usually crafted to be to the genie's benefit. + + # Actions + Multiattack. The efreeti makes two scimitar attacks or uses its Hurl Flame twice. Scimitar. @@ -181,13 +203,13 @@ class Efreeti(Monster): Ranged Spell Attack: +7 to hit, range 120 ft., one target. Hit: 17 (5d6) fire damage. """ - name = "Efreeti" - description = "Large elemental, lawful evil" + name = 'Efreeti' + description = 'Large elemental, lawful evil' challenge_rating = 11 armor_class = 17 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 12" - languages = "Ignan" + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 12' + languages = 'Ignan' strength = Ability(22) dexterity = Ability(12) constitution = Ability(24) @@ -198,19 +220,28 @@ class Efreeti(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 200 - hit_dice = "16d10" + hit_dice = '16d10 + 112' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Elephant(Monster): """ + Trampling Charge. If the elephant moves at least 20 ft. straight toward a creature and then hits it with a gore attack on the same turn, that target must succeed on a DC 12 Strength saving throw or be knocked prone. If the target is prone, the elephant can make one stomp attack against it as a bonus action. + + # Actions + Gore. Melee Weapon Attack: +8 to hit, reach 5 ft., one target. Hit: 19 (3d8 + 6) piercing damage. @@ -218,13 +249,13 @@ class Elephant(Monster): Melee Weapon Attack: +8 to hit, reach 5 ft., one prone creature. Hit: 22 (3d10 + 6) bludgeoning damage. """ - name = "Elephant" - description = "Huge beast, unaligned" + name = 'Elephant' + description = 'Huge beast, unaligned' challenge_rating = 4 armor_class = 12 - skills = "" - senses = "Passive Perception 10" - languages = "" + skills = '' + senses = 'Passive Perception 10' + languages = '' strength = Ability(22) dexterity = Ability(9) constitution = Ability(17) @@ -235,18 +266,27 @@ class Elephant(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 76 - hit_dice = "8d12" + hit_dice = '8d12 + 24' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Elk(Monster): """ + Charge. If the elk moves at least 20 ft. straight toward a target and then hits it with a ram attack on the same turn, the target takes an extra 7 (2d6) damage. If the target is a creature, it must succeed on a DC 13 Strength saving throw or be knocked prone. + + # Actions + Ram. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 6 (1d6 + 3) bludgeoning damage. @@ -254,13 +294,13 @@ class Elk(Monster): Melee Weapon Attack: +5 to hit, reach 5 ft., one prone creature. Hit: 8 (2d4 + 3) bludgeoning damage. """ - name = "Elk" - description = "Large beast, unaligned" + name = 'Elk' + description = 'Large beast, unaligned' challenge_rating = 0.25 armor_class = 10 - skills = "" - senses = "Passive Perception 10" - languages = "" + skills = '' + senses = 'Passive Perception 10' + languages = '' strength = Ability(16) dexterity = Ability(10) constitution = Ability(12) @@ -271,19 +311,28 @@ class Elk(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 13 - hit_dice = "2d10" + hit_dice = '2d10 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Erinyes(Monster): """ + Hellish Weapons. The erinyes's weapon attacks are magical and deal an extra 13 (3d8) poison damage on a hit (included in the attacks). Magic Resistance. The erinyes has advantage on saving throws against spells and other magical effects. + + # Actions + Multiattack. The erinyes makes three attacks Longsword. @@ -300,14 +349,21 @@ class Erinyes(Monster): Some erinyes carry a rope of entanglement (detailed in the Dungeon Master's Guide). When such an erinyes uses its Multiattack, the erinyes can use the rope in place of two of the attacks. + + # Reactions + + Parry. + The erinyes adds 4 to its AC against one melee attack that would hit + it. To do so, the erinyes must see the attacker and be wielding a + melee weapon. """ - name = "Erinyes" - description = "Medium fiend, lawful evil" + name = 'Erinyes' + description = 'Medium fiend, lawful evil' challenge_rating = 12 armor_class = 18 - skills = "" - senses = "Truesight 120 ft., Passive Perception 12" - languages = "Infernal, telepathy 120 ft." + skills = '' + senses = 'Truesight 120 ft., Passive Perception 12' + languages = 'Infernal, telepathy 120 ft.' strength = Ability(18) dexterity = Ability(16) constitution = Ability(18) @@ -318,13 +374,19 @@ class Erinyes(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 153 - hit_dice = "18d8" + hit_dice = '18d8 + 72' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Ettercap(Monster): """ + Spider Climb. The ettercap can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check. @@ -333,6 +395,9 @@ class Ettercap(Monster): any other creature in contact with the same web. Web Walker. The ettercap ignores movement restrictions caused by webbing. + + # Actions + Multiattack. The ettercap makes two attacks: one with its bite and one with its claws. @@ -359,13 +424,13 @@ class Ettercap(Monster): (escape DC 12). Until this grapple ends, the target can't breathe, and the ettercap has advantage on attack rolls against it. """ - name = "Ettercap" - description = "Medium monstrosity, neutral evil" + name = 'Ettercap' + description = 'Medium monstrosity, neutral evil' challenge_rating = 2 armor_class = 13 - skills = "Perception +3, Stealth +4, Survival +3" - senses = "Darkvision 60 ft., Passive Perception 13" - languages = "" + skills = 'Perception +3, Stealth +4, Survival +3' + senses = 'Darkvision 60 ft., Passive Perception 13' + languages = '' strength = Ability(14) dexterity = Ability(15) constitution = Ability(13) @@ -376,19 +441,28 @@ class Ettercap(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 30 + burrow_speed = 0 hp_max = 44 - hit_dice = "8d8" + hit_dice = '8d8 + 8' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Ettin(Monster): """ + Two Heads. The ettin has advantage on Wisdom (Perception) checks and on saving throws against being blinded, charmed, deafened, frightened, stunned, and knocked unconscious. Wakeful. When one of the ettin's heads is asleep, its other head is awake. + + # Actions + Multiattack. The ettin makes two attacks: one with its battleaxe and one with its morningstar. @@ -399,13 +473,13 @@ class Ettin(Monster): Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 14 (2d8 + 5) piercing damage. """ - name = "Ettin" - description = "Large giant, chaotic evil" + name = 'Ettin' + description = 'Large giant, chaotic evil' challenge_rating = 4 armor_class = 12 - skills = "Perception +4" - senses = "Darkvision 60 ft., Passive Perception 14" - languages = "Giant, Orc" + skills = 'Perception +4' + senses = 'Darkvision 60 ft., Passive Perception 14' + languages = 'Giant, Orc' strength = Ability(21) dexterity = Ability(8) constitution = Ability(17) @@ -416,6 +490,11 @@ class Ettin(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 85 - hit_dice = "10d10" + hit_dice = '10d10 + 30' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_f.py b/dungeonsheets/monsters/monsters_f.py index 9bdd135..d88aeca 100644 --- a/dungeonsheets/monsters/monsters_f.py +++ b/dungeonsheets/monsters/monsters_f.py @@ -10,6 +10,7 @@ from dungeonsheets.stats import Ability class FireElemental(Monster): """ + Fire Form. The elemental can move through a space as narrow as 1 inch wide without squeezing. A creature that touches the elemental or hits it @@ -25,6 +26,9 @@ class FireElemental(Monster): Water Susceptibility. For every 5 ft. the elemental moves in water, or for every gallon of water splashed on it, it takes 1 cold damage. + + # Actions + Multiattack. The elemental makes two touch attacks. Touch. @@ -33,13 +37,13 @@ class FireElemental(Monster): it ignites. Until a creature takes an action to douse the fire, the target takes 5 (1d10) fire damage at the start of each of its turns. """ - name = "Fire Elemental" - description = "Large elemental, neutral" + name = 'Fire Elemental' + description = 'Large elemental, neutral' challenge_rating = 5 armor_class = 13 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Ignan" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Ignan' strength = Ability(10) dexterity = Ability(17) constitution = Ability(16) @@ -50,13 +54,21 @@ class FireElemental(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 102 - hit_dice = "12d10" + hit_dice = '12d10 + 36' + condition_immunities = 'exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained, unconscious' + damage_immunities = 'fire, poison' + damage_resistances = 'bludgeoning, piercing, and slashing from nonmagical weapons' + damage_vulnerabilities = '' spells = [] class FireGiant(Monster): """ + + # Actions + Multiattack. The giant makes two greatsword attacks. Greatsword. @@ -66,13 +78,13 @@ class FireGiant(Monster): Ranged Weapon Attack: +11 to hit, range 60/240 ft., one target. Hit: 29 (4d10 + 7) bludgeoning damage. """ - name = "Fire Giant" - description = "Huge giant, lawful evil" + name = 'Fire Giant' + description = 'Huge giant, lawful evil' challenge_rating = 9 armor_class = 18 - skills = "Athletics +11, Perception +6" - senses = "Passive Perception 16" - languages = "Giant" + skills = 'Athletics +11, Perception +6' + senses = 'Passive Perception 16' + languages = 'Giant' strength = Ability(25) dexterity = Ability(9) constitution = Ability(23) @@ -83,13 +95,19 @@ class FireGiant(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 162 - hit_dice = "13d12" + hit_dice = '13d12 + 78' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class FleshGolem(Monster): """ + Berserk. Whenever the golem starts its turn with 40 hit points or fewer, roll a d6. On a 6, the golem goes berserk. On each of its turns while @@ -119,18 +137,21 @@ class FleshGolem(Monster): magical effects. Magic Weapons. The golem's weapon attacks are magical. + + # Actions + Multiattack. The golem makes two slam attacks. Slam. Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 13 (2d8 + 4) bludgeoning damage. """ - name = "Flesh Golem" - description = "Medium construct, neutral" + name = 'Flesh Golem' + description = 'Medium construct, neutral' challenge_rating = 5 armor_class = 9 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' languages = "understands the languages of its creator but can't speak" strength = Ability(19) dexterity = Ability(9) @@ -142,27 +163,36 @@ class FleshGolem(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 93 - hit_dice = "11d8" + hit_dice = '11d8 + 44' + condition_immunities = 'charmed, exhaustion, frightened, paralyzed, petrified, poisoned' + damage_immunities = "lightning, poison, bludgeoning, piercing, and slashing from nonmagical weapons that aren't adamantine" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class FlyingSnake(Monster): """ + Flyby. The snake doesn't provoke opportunity attacks when it flies out of an enemy's reach. + + # Actions + Bite. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 1 piercing damage plus 7 (3d4) poison damage. """ - name = "Flying Snake" - description = "Tiny beast, unaligned" + name = 'Flying Snake' + description = 'Tiny beast, unaligned' challenge_rating = 0.125 armor_class = 14 - skills = "" - senses = "Blindsight 10 ft., Passive Perception 11" - languages = "" + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 11' + languages = '' strength = Ability(4) dexterity = Ability(18) constitution = Ability(11) @@ -173,13 +203,19 @@ class FlyingSnake(Monster): swim_speed = 30 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 5 - hit_dice = "2d4" + hit_dice = '2d4 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class FlyingSword(Monster): """ + Antimagic Susceptibility. The sword is incapacitated while in the area of an antimagic field. If targeted by dispel magic, the sword must succeed on a Constitution @@ -188,17 +224,20 @@ class FlyingSword(Monster): False Appearance. While the sword remains motionless and isn't flying, it is indistinguishable from a normal sword. + + # Actions + Longsword. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 5 (1d8 + 1) slashing damage. """ - name = "Flying Sword" - description = "Small construct, unaligned" + name = 'Flying Sword' + description = 'Small construct, unaligned' challenge_rating = 0.25 armor_class = 17 - skills = "" - senses = "Blindsight 60 ft. (blind beyond this radius), Passive Perception 7" - languages = "" + skills = '' + senses = 'Blindsight 60 ft. (blind beyond this radius), Passive Perception 7' + languages = '' strength = Ability(12) dexterity = Ability(15) constitution = Ability(11) @@ -209,26 +248,32 @@ class FlyingSword(Monster): swim_speed = 0 fly_speed = 50 climb_speed = 0 + burrow_speed = 0 hp_max = 17 - hit_dice = "5d6" + hit_dice = '5d6 + 0' + condition_immunities = 'blinded, charmed, blinded, frightened, paralyzed, petrified, poisoned' + damage_immunities = 'poison, psychic' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Frog(Monster): """ + Amphibious. The frog can breathe air and water Standing Leap. The frog's long jump is up to 10 ft. and its high jump is up to 5 ft., with or without a running start. """ - name = "Frog" - description = "Tiny beast, unaligned" + name = 'Frog' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 11 - skills = "Perception +1, Stealth +3" - senses = "Darkvision 30 ft., Passive Perception 11" - languages = "" + skills = 'Perception +1, Stealth +3' + senses = 'Darkvision 30 ft., Passive Perception 11' + languages = '' strength = Ability(1) dexterity = Ability(13) constitution = Ability(8) @@ -239,13 +284,21 @@ class Frog(Monster): swim_speed = 20 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 1 - hit_dice = "1d4" + hit_dice = '1d4 + -1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class FrostGiant(Monster): """ + + # Actions + Multiattack. The giant makes two greataxe attacks. Greataxe. @@ -255,13 +308,13 @@ class FrostGiant(Monster): Ranged Weapon Attack: +9 to hit, range 60/240 ft., one target. Hit: 28 (4d10 + 6) bludgeoning damage. """ - name = "Frost Giant" - description = "Huge giant, neutral evil" + name = 'Frost Giant' + description = 'Huge giant, neutral evil' challenge_rating = 8 armor_class = 15 - skills = "Athletics +9, Perception +3" - senses = "Passive Perception 13" - languages = "Giant" + skills = 'Athletics +9, Perception +3' + senses = 'Passive Perception 13' + languages = 'Giant' strength = Ability(23) dexterity = Ability(9) constitution = Ability(21) @@ -272,6 +325,11 @@ class FrostGiant(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 138 - hit_dice = "12d12" + hit_dice = '12d12 + 60' + condition_immunities = '' + damage_immunities = 'cold' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_g.py b/dungeonsheets/monsters/monsters_g.py index 0f41487..32b048d 100644 --- a/dungeonsheets/monsters/monsters_g.py +++ b/dungeonsheets/monsters/monsters_g.py @@ -10,9 +10,13 @@ from dungeonsheets.stats import Ability class Gargoyle(Monster): """ + False Appearance. While the gargoyle remains motion less, it is indistinguishable from an inanimate statue. + + # Actions + Multiattack. The gargoyle makes two attacks: one with its bite and one with its claws. @@ -23,13 +27,13 @@ class Gargoyle(Monster): Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + 2) slashing damage. """ - name = "Gargoyle" - description = "Medium elemental, chaotic evil" + name = 'Gargoyle' + description = 'Medium elemental, chaotic evil' challenge_rating = 2 armor_class = 15 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Terran" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Terran' strength = Ability(15) dexterity = Ability(11) constitution = Ability(16) @@ -40,13 +44,19 @@ class Gargoyle(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 52 - hit_dice = "7d8" + hit_dice = '7d8 + 21' + condition_immunities = 'exhaustion, petrified, poisoned' + damage_immunities = 'poison' + damage_resistances = "bludgeoning, piercing, and slashing from nonmagical weapons that aren't adamantine" + damage_vulnerabilities = '' spells = [] class GelatinousCube(Monster): """ + Ooze Cube. The cube takes up its entire space. Other creatures can enter the space, but a creature that does so is subjected to the cube's Engulf @@ -66,6 +76,9 @@ class GelatinousCube(Monster): Wisdom (Perception) check to spot a cube that has neither moved nor attacked. A creature that tries to enter the cube's space while unaware of the cube is surprised by the cube. + + # Actions + Pseudopod. Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 10 (3d6) acid damage. @@ -88,13 +101,13 @@ class GelatinousCube(Monster): DC 12 Strength check. On a success, the creature escapes and enters a space of its choice within 5 feet of the cube. """ - name = "Gelatinous Cube" - description = "Large ooze, unaligned" + name = 'Gelatinous Cube' + description = 'Large ooze, unaligned' challenge_rating = 2 armor_class = 6 - skills = "" - senses = "Blindsight 60 ft. (blind beyond this radius), Passive Perception 8" - languages = "" + skills = '' + senses = 'Blindsight 60 ft. (blind beyond this radius), Passive Perception 8' + languages = '' strength = Ability(14) dexterity = Ability(3) constitution = Ability(20) @@ -105,13 +118,19 @@ class GelatinousCube(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 84 - hit_dice = "8d10" + hit_dice = '8d10 + 40' + condition_immunities = 'blinded, charmed, blinded, exhaustion, frightened, prone' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Ghast(Monster): """ + Stench. Any creature that starts its turn within 5 ft. of the ghast must succeed on a DC 10 Constitution saving throw or be poisoned until the @@ -120,6 +139,9 @@ class Ghast(Monster): Turn Defiance. The ghast and any ghouls within 30 ft. of it have advantage on saving throws against effects that turn undead. + + # Actions + Bite. Melee Weapon Attack: +3 to hit, reach 5 ft., one creature. Hit: 12 (2d8 + 3) piercing damage. @@ -130,13 +152,13 @@ class Ghast(Monster): paralyzed for 1 minute. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. """ - name = "Ghast" - description = "Medium undead, chaotic evil" + name = 'Ghast' + description = 'Medium undead, chaotic evil' challenge_rating = 2 armor_class = 13 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Common" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Common' strength = Ability(16) dexterity = Ability(17) constitution = Ability(10) @@ -147,13 +169,19 @@ class Ghast(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 36 - hit_dice = "8d8" + hit_dice = '8d8 + 0' + condition_immunities = 'poisoned' + damage_immunities = 'necrotic' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Ghost(Monster): """ + Ethereal Sight. The ghost can see 60 ft. into the Ethereal Plane when it is on the Material Plane, and vice versa. @@ -161,6 +189,9 @@ class Ghost(Monster): The ghost can move through other creatures and objects as if they were difficult terrain. It takes 5 (1d10) force damage if it ends its turn inside an object. + + # Actions + Withering Touch. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 17 (4d6 + 3) necrotic damage. @@ -198,13 +229,13 @@ class Ghost(Monster): The target is immune to this ghost's Possession for 24 hours after succeeding on the saving throw or after the possession ends. """ - name = "Ghost" - description = "Medium undead, any alignment" + name = 'Ghost' + description = 'Medium undead, any alignment' challenge_rating = 4 armor_class = 11 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 11" - languages = "any languages it knew in life" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 11' + languages = 'any languages it knew in life' strength = Ability(7) dexterity = Ability(13) constitution = Ability(10) @@ -215,13 +246,21 @@ class Ghost(Monster): swim_speed = 0 fly_speed = 40 climb_speed = 0 + burrow_speed = 0 hp_max = 45 - hit_dice = "10d8" + hit_dice = '10d8 + 0' + condition_immunities = 'charmed, exhaustion, frightened, grappled, paralyzed, petrified, poisoned, prone, restrained' + damage_immunities = 'cold, necrotic, poison' + damage_resistances = 'acid' + damage_vulnerabilities = '' spells = [] class Ghoul(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +2 to hit, reach 5 ft., one creature. Hit: 9 (2d6 + 2) piercing damage. @@ -232,13 +271,13 @@ class Ghoul(Monster): paralyzed for 1 minute. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. """ - name = "Ghoul" - description = "Medium undead, chaotic evil" + name = 'Ghoul' + description = 'Medium undead, chaotic evil' challenge_rating = 1 armor_class = 12 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Common" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Common' strength = Ability(13) dexterity = Ability(15) constitution = Ability(10) @@ -249,13 +288,21 @@ class Ghoul(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "5d8" + hit_dice = '5d8 + 0' + condition_immunities = 'poisoned' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantApe(Monster): """ + + # Actions + Multiattack. The ape makes two fist attacks. Fist. @@ -265,13 +312,13 @@ class GiantApe(Monster): Ranged Weapon Attack: +9 to hit, range 50/100 ft., one target. Hit: 30 (7d6 + 6) bludgeoning damage. """ - name = "Giant Ape" - description = "Huge beast, unaligned" + name = 'Giant Ape' + description = 'Huge beast, unaligned' challenge_rating = 7 armor_class = 12 - skills = "Athletics +9, Perception +4" - senses = "Passive Perception 14" - languages = "" + skills = 'Athletics +9, Perception +4' + senses = 'Passive Perception 14' + languages = '' strength = Ability(23) dexterity = Ability(14) constitution = Ability(18) @@ -282,16 +329,25 @@ class GiantApe(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 40 + burrow_speed = 0 hp_max = 157 - hit_dice = "15d12" + hit_dice = '15d12 + 60' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantBadger(Monster): """ + Keen Smell. The badger has advantage on Wisdom (Perception) checks that rely on smell. + + # Actions + Multiattack. The badger makes two attacks: one with its bite and one with its claws. @@ -302,13 +358,13 @@ class GiantBadger(Monster): Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 6 (2d4 + 1) slashing damage. """ - name = "Giant Badger" - description = "Medium beast, unaligned" + name = 'Giant Badger' + description = 'Medium beast, unaligned' challenge_rating = 0.25 armor_class = 10 - skills = "" - senses = "Darkvision 30 ft., Passive Perception 11" - languages = "" + skills = '' + senses = 'Darkvision 30 ft., Passive Perception 11' + languages = '' strength = Ability(13) dexterity = Ability(10) constitution = Ability(15) @@ -319,29 +375,38 @@ class GiantBadger(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 10 hp_max = 13 - hit_dice = "2d8" + hit_dice = '2d8 + 4' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantBat(Monster): """ + Echolocation. The bat can't use its blindsight while deafened. Keen Hearing. The bat has advantage on Wisdom (Perception) checks that rely on hearing. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 5 (1d6 + 2) piercing damage. """ - name = "Giant Bat" - description = "Large beast, unaligned" + name = 'Giant Bat' + description = 'Large beast, unaligned' challenge_rating = 0.25 armor_class = 13 - skills = "" - senses = "Blindsight 60 ft., Passive Perception 11" - languages = "" + skills = '' + senses = 'Blindsight 60 ft., Passive Perception 11' + languages = '' strength = Ability(15) dexterity = Ability(16) constitution = Ability(11) @@ -352,13 +417,19 @@ class GiantBat(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "4d10" + hit_dice = '4d10 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantBoar(Monster): """ + Charge. If the boar moves at least 20 ft. straight toward a target and then hits it with a tusk attack on the same turn, the target takes an extra @@ -367,17 +438,20 @@ class GiantBoar(Monster): Relentless. If the boar takes 10 damage or less that would reduce it to 0 hit points, it is reduced to 1 hit point instead. + + # Actions + Tusk. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + 3) slashing damage. """ - name = "Giant Boar" - description = "Large beast, unaligned" + name = 'Giant Boar' + description = 'Large beast, unaligned' challenge_rating = 2 armor_class = 12 - skills = "" - senses = "Passive Perception 8" - languages = "" + skills = '' + senses = 'Passive Perception 8' + languages = '' strength = Ability(17) dexterity = Ability(10) constitution = Ability(16) @@ -388,13 +462,21 @@ class GiantBoar(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 42 - hit_dice = "5d10" + hit_dice = '5d10 + 15' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantCentipede(Monster): """ + + # Actions + Bite. Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 4 (1d4 + 2) piercing damage, and the target must succeed on a DC 11 @@ -403,13 +485,13 @@ class GiantCentipede(Monster): but poisoned for 1 hour, even after regaining hit points, and is paralyzed while poisoned in this way. """ - name = "Giant Centipede" - description = "Small beast, unaligned" + name = 'Giant Centipede' + description = 'Small beast, unaligned' challenge_rating = 0.25 armor_class = 13 - skills = "" - senses = "Blindsight 30 ft., Passive Perception 8" - languages = "" + skills = '' + senses = 'Blindsight 30 ft., Passive Perception 8' + languages = '' strength = Ability(5) dexterity = Ability(14) constitution = Ability(12) @@ -420,13 +502,21 @@ class GiantCentipede(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 30 + burrow_speed = 0 hp_max = 4 - hit_dice = "1d6" + hit_dice = '1d6 + 1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantConstrictorSnake(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +6 to hit, reach 10 ft., one creature. Hit: 11 (2d6 + 4) piercing damage. @@ -436,13 +526,13 @@ class GiantConstrictorSnake(Monster): 16). Until this grapple ends, the creature is restrained, and the snake can't constrict another target. """ - name = "Giant Constrictor Snake" - description = "Huge beast, unaligned" + name = 'Giant Constrictor Snake' + description = 'Huge beast, unaligned' challenge_rating = 2 armor_class = 12 - skills = "Perception +2" - senses = "Blindsight 10 ft., Passive Perception 12" - languages = "" + skills = 'Perception +2' + senses = 'Blindsight 10 ft., Passive Perception 12' + languages = '' strength = Ability(19) dexterity = Ability(14) constitution = Ability(12) @@ -453,27 +543,36 @@ class GiantConstrictorSnake(Monster): swim_speed = 30 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 60 - hit_dice = "8d12" + hit_dice = '8d12 + 8' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantCrab(Monster): """ + Amphibious. The crab can breathe air and water. + + # Actions + Claw. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 4 (1d6 + 1) bludgeoning damage, and the target is grappled (escape DC 11). The crab has two claws, each of which can grapple only one target. """ - name = "Giant Crab" - description = "Medium beast, unaligned" + name = 'Giant Crab' + description = 'Medium beast, unaligned' challenge_rating = 0.125 armor_class = 15 - skills = "Stealth +4" - senses = "Blindsight 30 ft., Passive Perception 9" - languages = "" + skills = 'Stealth +4' + senses = 'Blindsight 30 ft., Passive Perception 9' + languages = '' strength = Ability(13) dexterity = Ability(15) constitution = Ability(11) @@ -484,15 +583,24 @@ class GiantCrab(Monster): swim_speed = 30 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 13 - hit_dice = "3d8" + hit_dice = '3d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantCrocodile(Monster): """ + Hold Breath. The crocodile can hold its breath for 30 minutes. + + # Actions + Multiattack. The crocodile makes two attacks: one with its bite and one with its tail. @@ -507,13 +615,13 @@ class GiantCrocodile(Monster): is a creature, it must succeed on a DC 16 Strength saving throw or be knocked prone. """ - name = "Giant Crocodile" - description = "Huge beast, unaligned" + name = 'Giant Crocodile' + description = 'Huge beast, unaligned' challenge_rating = 5 armor_class = 14 - skills = "Stealth +5" - senses = "Passive Perception 10" - languages = "" + skills = 'Stealth +5' + senses = 'Passive Perception 10' + languages = '' strength = Ability(21) dexterity = Ability(9) constitution = Ability(17) @@ -524,16 +632,25 @@ class GiantCrocodile(Monster): swim_speed = 50 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 85 - hit_dice = "9d12" + hit_dice = '9d12 + 27' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantEagle(Monster): """ + Keen Sight. The eagle has advantage on Wisdom (Perception) checks that rely on sight. + + # Actions + Multiattack. The eagle makes two attacks: one with its beak and one with its talons. @@ -544,12 +661,12 @@ class GiantEagle(Monster): Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + 3) slashing damage. """ - name = "Giant Eagle" - description = "Large beast, neutral good" + name = 'Giant Eagle' + description = 'Large beast, neutral good' challenge_rating = 1 armor_class = 13 - skills = "Perception +4" - senses = "Passive Perception 14" + skills = 'Perception +4' + senses = 'Passive Perception 14' languages = "Giant Eagle, understands Common and Auran but can't speak" strength = Ability(16) dexterity = Ability(17) @@ -561,18 +678,27 @@ class GiantEagle(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 26 - hit_dice = "4d10" + hit_dice = '4d10 + 4' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantElk(Monster): """ + Charge. If the elk moves at least 20 ft. straight toward a target and then hits it with a ram attack on the same turn, the target takes an extra 7 (2d6) damage. If the target is a creature, it must succeed on a DC 14 Strength saving throw or be knocked prone. + + # Actions + Ram. Melee Weapon Attack: +6 to hit, reach 10 ft., one target. Hit: 11 (2d6 + 4) bludgeoning damage. @@ -580,12 +706,12 @@ class GiantElk(Monster): Melee Weapon Attack: +6 to hit, reach 5 ft., one prone creature. Hit: 22 (4d8 + 4) bludgeoning damage. """ - name = "Giant Elk" - description = "Huge beast, unaligned" + name = 'Giant Elk' + description = 'Huge beast, unaligned' challenge_rating = 2 armor_class = 15 - skills = "Perception +4" - senses = "Passive Perception 14" + skills = 'Perception +4' + senses = 'Passive Perception 14' languages = "Giant Elk, understands Common, Elvish, and Sylvan but can't speak" strength = Ability(19) dexterity = Ability(16) @@ -597,27 +723,36 @@ class GiantElk(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 42 - hit_dice = "5d12" + hit_dice = '5d12 + 10' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantFireBeetle(Monster): """ + Illumination. The beetle sheds bright light in a 10-foot radius and dim light for an additional 10 ft.. + + # Actions + Bite. Melee Weapon Attack: +1 to hit, reach 5 ft., one target. Hit: 2 (1d6 - 1) slashing damage. """ - name = "Giant Fire Beetle" - description = "Small beast, unaligned" + name = 'Giant Fire Beetle' + description = 'Small beast, unaligned' challenge_rating = 0 armor_class = 13 - skills = "" - senses = "Blindsight 30 ft., Passive Perception 8" - languages = "" + skills = '' + senses = 'Blindsight 30 ft., Passive Perception 8' + languages = '' strength = Ability(8) dexterity = Ability(10) constitution = Ability(12) @@ -628,18 +763,27 @@ class GiantFireBeetle(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 4 - hit_dice = "1d6" + hit_dice = '1d6 + 1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantFrog(Monster): """ + Amphibious. The frog can breathe air and water Standing Leap. The frog's long jump is up to 20 ft. and its high jump is up to 10 ft., with or without a running start. + + # Actions + Bite. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 4 (1d6 + 1) piercing damage, and the target is grappled (escape DC 11). Until @@ -655,13 +799,13 @@ class GiantFrog(Monster): dies, a swallowed creature is no longer restrained by it and can escape from the corpse using 5 ft. of movement, exiting prone. """ - name = "Giant Frog" - description = "Medium beast, unaligned" + name = 'Giant Frog' + description = 'Medium beast, unaligned' challenge_rating = 0.25 armor_class = 11 - skills = "Perception +2, Stealth +3" - senses = "Darkvision 30 ft., Passive Perception 12" - languages = "" + skills = 'Perception +2, Stealth +3' + senses = 'Darkvision 30 ft., Passive Perception 12' + languages = '' strength = Ability(12) dexterity = Ability(13) constitution = Ability(11) @@ -672,13 +816,19 @@ class GiantFrog(Monster): swim_speed = 30 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 18 - hit_dice = "4d8" + hit_dice = '4d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantGoat(Monster): """ + Charge. If the goat moves at least 20 ft. straight toward a target and then hits it with a ram attack on the same turn, the target takes an extra @@ -687,17 +837,20 @@ class GiantGoat(Monster): Sure-Footed. The goat has advantage on Strength and Dexterity saving throws made against effects that would knock it prone. + + # Actions + Ram. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 8 (2d4 + 3) bludgeoning damage. """ - name = "Giant Goat" - description = "Large beast, unaligned" + name = 'Giant Goat' + description = 'Large beast, unaligned' challenge_rating = 0.5 armor_class = 11 - skills = "" - senses = "Passive Perception 11" - languages = "" + skills = '' + senses = 'Passive Perception 11' + languages = '' strength = Ability(17) dexterity = Ability(11) constitution = Ability(12) @@ -708,28 +861,37 @@ class GiantGoat(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 19 - hit_dice = "3d10" + hit_dice = '3d10 + 3' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantHyena(Monster): """ + Rampage. When the hyena reduces a creature to 0 hit points with a melee attack on its turn, the hyena can take a bonus action to move up to half its speed and make a bite attack. + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + 3) piercing damage. """ - name = "Giant Hyena" - description = "Large beast, unaligned" + name = 'Giant Hyena' + description = 'Large beast, unaligned' challenge_rating = 1 armor_class = 12 - skills = "Perception +3" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3' + senses = 'Passive Perception 13' + languages = '' strength = Ability(16) dexterity = Ability(14) constitution = Ability(14) @@ -740,30 +902,39 @@ class GiantHyena(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 45 - hit_dice = "6d10" + hit_dice = '6d10 + 12' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantLizard(Monster): """ + Variant: Hold Breath. The lizard can hold its breath for 15 minutes. (A lizard that has this trait also has a swimming speed of 30 feet.) Variant: Spider Climb. The lizard can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 6 (1d8 + 2) piercing damage. """ - name = "Giant Lizard" - description = "Large beast, unaligned" + name = 'Giant Lizard' + description = 'Large beast, unaligned' challenge_rating = 0.25 armor_class = 12 - skills = "" - senses = "Darkvision 30 ft., Passive Perception 10" - languages = "" + skills = '' + senses = 'Darkvision 30 ft., Passive Perception 10' + languages = '' strength = Ability(15) dexterity = Ability(12) constitution = Ability(13) @@ -774,13 +945,19 @@ class GiantLizard(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 30 + burrow_speed = 0 hp_max = 19 - hit_dice = "3d10" + hit_dice = '3d10 + 3' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantOctopus(Monster): """ + Hold Breath. While out of water, the octopus can hold its breath for 1 hour. Underwater Camouflage. @@ -788,6 +965,9 @@ class GiantOctopus(Monster): underwater. Water Breathing. The octopus can breathe only underwater. + + # Actions + Tentacles. Melee Weapon Attack: +5 to hit, reach 15 ft., one target. Hit: 10 (2d6 + 3) bludgeoning damage. If the target is a creature, it is grappled @@ -799,13 +979,13 @@ class GiantOctopus(Monster): significant current can disperse the ink. After releasing the ink, the octopus can use the Dash action as a bonus action. """ - name = "Giant Octopus" - description = "Large beast, unaligned" + name = 'Giant Octopus' + description = 'Large beast, unaligned' challenge_rating = 1 armor_class = 11 - skills = "Perception +4, Stealth +5" - senses = "Darkvision 60 ft., Passive Perception 14" - languages = "" + skills = 'Perception +4, Stealth +5' + senses = 'Darkvision 60 ft., Passive Perception 14' + languages = '' strength = Ability(17) dexterity = Ability(13) constitution = Ability(13) @@ -816,29 +996,38 @@ class GiantOctopus(Monster): swim_speed = 60 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 52 - hit_dice = "8d10" + hit_dice = '8d10 + 8' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantOwl(Monster): """ + Flyby. The owl doesn't provoke opportunity attacks when it flies out of an enemy's reach. Keen Hearing and Sight. The owl has advantage on Wisdom (Perception) checks that rely on hearing or sight. + + # Actions + Talons. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 8 (2d6 + 1) slashing damage. """ - name = "Giant Owl" - description = "Large beast, neutral" + name = 'Giant Owl' + description = 'Large beast, neutral' challenge_rating = 0.25 armor_class = 12 - skills = "Perception +5, Stealth +4" - senses = "Darkvision 120 ft., Passive Perception 15" + skills = 'Perception +5, Stealth +4' + senses = 'Darkvision 120 ft., Passive Perception 15' languages = "Giant Owl, understands Common, Elvish, and Sylvan but can't speak" strength = Ability(13) dexterity = Ability(15) @@ -850,26 +1039,34 @@ class GiantOwl(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 19 - hit_dice = "3d10" + hit_dice = '3d10 + 3' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantPoisonousSnake(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +6 to hit, reach 10 ft., one target. Hit: 6 (1d4 + 4) piercing damage, and the target must make a DC 11 Constitution saving throw, taking 10 (3d6) poison damage on a failed save, or half as much damage on a successful one. """ - name = "Giant Poisonous Snake" - description = "Medium beast, unaligned" + name = 'Giant Poisonous Snake' + description = 'Medium beast, unaligned' challenge_rating = 0.25 armor_class = 14 - skills = "Perception +2" - senses = "Blindsight 10 ft., Passive Perception 12" - languages = "" + skills = 'Perception +2' + senses = 'Blindsight 10 ft., Passive Perception 12' + languages = '' strength = Ability(10) dexterity = Ability(18) constitution = Ability(13) @@ -880,13 +1077,19 @@ class GiantPoisonousSnake(Monster): swim_speed = 30 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 11 - hit_dice = "2d8" + hit_dice = '2d8 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantRat(Monster): """ + Keen Smell. The rat has advantage on Wisdom (Perception) checks that rely on smell. @@ -894,17 +1097,20 @@ class GiantRat(Monster): The rat has advantage on an attack roll against a creature if at least one of the rat's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 4 (1d4 + 2) piercing damage. """ - name = "Giant Rat" - description = "Small beast, unaligned" + name = 'Giant Rat' + description = 'Small beast, unaligned' challenge_rating = 0.125 armor_class = 12 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = '' strength = Ability(7) dexterity = Ability(15) constitution = Ability(11) @@ -915,13 +1121,21 @@ class GiantRat(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 7 - hit_dice = "2d6" + hit_dice = '2d6 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantRatDiseased(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 3 (1d4 + 2) piercing damage. If the target is a creature, it must succeed on a @@ -931,13 +1145,13 @@ class GiantRatDiseased(Monster): 24 hours. If the target's hit point maximum drops to 0 as a result of this disease, the target dies. """ - name = "Giant Rat (Diseased)" - description = "Small beast, unaligned" + name = 'Giant Rat (Diseased)' + description = 'Small beast, unaligned' challenge_rating = 0.125 armor_class = 12 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = '' strength = Ability(7) dexterity = Ability(15) constitution = Ability(11) @@ -948,13 +1162,21 @@ class GiantRatDiseased(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 7 - hit_dice = "2d6" + hit_dice = '2d6 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantScorpion(Monster): """ + + # Actions + Claw. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 6 (1d8 + 2) bludgeoning damage, and the target is grappled (escape DC 12). The @@ -968,13 +1190,13 @@ class GiantScorpion(Monster): Constitution saving throw, taking 22 (4d10) poison damage on a failed save, or half as much damage on a successful one. """ - name = "Giant Scorpion" - description = "Large beast, unaligned" + name = 'Giant Scorpion' + description = 'Large beast, unaligned' challenge_rating = 3 armor_class = 15 - skills = "" - senses = "Blindsight 60 ft., Passive Perception 9" - languages = "" + skills = '' + senses = 'Blindsight 60 ft., Passive Perception 9' + languages = '' strength = Ability(15) dexterity = Ability(13) constitution = Ability(15) @@ -985,13 +1207,19 @@ class GiantScorpion(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 52 - hit_dice = "7d10" + hit_dice = '7d10 + 14' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantSeaHorse(Monster): """ + Charge. If the sea horse moves at least 20 ft. straight toward a target and then hits it with a ram attack on the same turn, the target takes an @@ -999,17 +1227,20 @@ class GiantSeaHorse(Monster): succeed on a DC 11 Strength saving throw or be knocked prone. Water Breathing. The sea horse can breathe only underwater. + + # Actions + Ram. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 4 (1d6 + 1) bludgeoning damage. """ - name = "Giant Sea Horse" - description = "Large beast, unaligned" + name = 'Giant Sea Horse' + description = 'Large beast, unaligned' challenge_rating = 0.5 armor_class = 13 - skills = "" - senses = "Passive Perception 11" - languages = "" + skills = '' + senses = 'Passive Perception 11' + languages = '' strength = Ability(12) dexterity = Ability(15) constitution = Ability(11) @@ -1020,29 +1251,38 @@ class GiantSeaHorse(Monster): swim_speed = 40 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 16 - hit_dice = "3d10" + hit_dice = '3d10 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantShark(Monster): """ + Blood Frenzy. The shark has advantage on melee attack rolls against any creature that doesn't have all its hit points. Water Breathing. The shark can breathe only underwater. + + # Actions + Bite. Weapon Attack: +9 to hit, reach 5 ft., one target. Hit: 22 (3d10 + 6) piercing damage. """ - name = "Giant Shark" - description = "Huge beast, unaligned" + name = 'Giant Shark' + description = 'Huge beast, unaligned' challenge_rating = 5 armor_class = 13 - skills = "Perception +3" - senses = "Blindsight 60 ft., Passive Perception 13" - languages = "" + skills = 'Perception +3' + senses = 'Blindsight 60 ft., Passive Perception 13' + languages = '' strength = Ability(23) dexterity = Ability(11) constitution = Ability(21) @@ -1053,13 +1293,19 @@ class GiantShark(Monster): swim_speed = 50 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 126 - hit_dice = "11d12" + hit_dice = '11d12 + 55' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantSpider(Monster): """ + Spider Climb. The spider can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check. @@ -1068,6 +1314,9 @@ class GiantSpider(Monster): any other creature in contact with the same web. Web Walker. The spider ignores movement restrictions caused by webbing. + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one creature. Hit: 7 (1d8 + 3) piercing damage, and the target must make a DC 11 Constitution @@ -1084,13 +1333,13 @@ class GiantSpider(Monster): vulnerability to fire damage; immunity to bludgeoning, poison, and psychic damage). """ - name = "Giant Spider" - description = "Large beast, unaligned" + name = 'Giant Spider' + description = 'Large beast, unaligned' challenge_rating = 1 armor_class = 14 - skills = "Stealth +7" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 10" - languages = "" + skills = 'Stealth +7' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 10' + languages = '' strength = Ability(14) dexterity = Ability(16) constitution = Ability(12) @@ -1101,18 +1350,27 @@ class GiantSpider(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 30 + burrow_speed = 0 hp_max = 26 - hit_dice = "4d10" + hit_dice = '4d10 + 4' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantToad(Monster): """ + Amphibious. The toad can breathe air and water Standing Leap. The toad's long jump is up to 20 ft. and its high jump is up to 10 ft., with or without a running start. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 7 (1d10 + 2) piercing damage plus 5 (1d10) poison damage, and the target is @@ -1130,13 +1388,13 @@ class GiantToad(Monster): and can escape from the corpse using 5 feet of movement, exiting prone. """ - name = "Giant Toad" - description = "Large beast, unaligned" + name = 'Giant Toad' + description = 'Large beast, unaligned' challenge_rating = 1 armor_class = 11 - skills = "" - senses = "Darkvision 30 ft., Passive Perception 10" - languages = "" + skills = '' + senses = 'Darkvision 30 ft., Passive Perception 10' + languages = '' strength = Ability(15) dexterity = Ability(13) constitution = Ability(13) @@ -1147,13 +1405,19 @@ class GiantToad(Monster): swim_speed = 40 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 39 - hit_dice = "6d10" + hit_dice = '6d10 + 6' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantVulture(Monster): """ + Keen Sight and Smell. The vulture has advantage on Wisdom (Perception) checks that rely on sight or smell. @@ -1161,6 +1425,9 @@ class GiantVulture(Monster): The vulture has advantage on an attack roll against a creature if at least one of the vulture's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Multiattack. The vulture makes two attacks: one with its beak and one with its talons. @@ -1171,12 +1438,12 @@ class GiantVulture(Monster): Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 9 (2d6 + 2) slashing damage. """ - name = "Giant Vulture" - description = "Large beast, neutral evil" + name = 'Giant Vulture' + description = 'Large beast, neutral evil' challenge_rating = 1 armor_class = 10 - skills = "Perception +3" - senses = "Passive Perception 13" + skills = 'Perception +3' + senses = 'Passive Perception 13' languages = "understands Common but can't speak" strength = Ability(15) dexterity = Ability(10) @@ -1188,13 +1455,21 @@ class GiantVulture(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "3d10" + hit_dice = '3d10 + 6' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantWasp(Monster): """ + + # Actions + Sting. Sting. Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 5 (1d6 + 2) piercing damage, and the target must make a DC 11 @@ -1204,13 +1479,13 @@ class GiantWasp(Monster): for 1 hour, even after regaining hit points, and is paralyzed while poisoned in this way. """ - name = "Giant Wasp" - description = "Medium beast, unaligned" + name = 'Giant Wasp' + description = 'Medium beast, unaligned' challenge_rating = 0.5 armor_class = 12 - skills = "" - senses = "Passive Perception 10" - languages = "" + skills = '' + senses = 'Passive Perception 10' + languages = '' strength = Ability(10) dexterity = Ability(14) constitution = Ability(10) @@ -1221,27 +1496,36 @@ class GiantWasp(Monster): swim_speed = 50 fly_speed = 50 climb_speed = 0 + burrow_speed = 0 hp_max = 13 - hit_dice = "3d8" + hit_dice = '3d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantWeasel(Monster): """ + Keen Hearing and Smell. The weasel has advantage on Wisdom (Perception) checks that rely on hearing or smell. + + # Actions + Bite. Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 5 (1d4 + 3) piercing damage. """ - name = "Giant Weasel" - description = "Medium beast, unaligned" + name = 'Giant Weasel' + description = 'Medium beast, unaligned' challenge_rating = 0.125 armor_class = 13 - skills = "Perception +3, Stealth +5" - senses = "Darkvision 60 ft., Passive Perception 13" - languages = "" + skills = 'Perception +3, Stealth +5' + senses = 'Darkvision 60 ft., Passive Perception 13' + languages = '' strength = Ability(11) dexterity = Ability(16) constitution = Ability(10) @@ -1252,13 +1536,19 @@ class GiantWeasel(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 9 - hit_dice = "2d8" + hit_dice = '2d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GiantWolfSpider(Monster): """ + Spider Climb. The spider can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check. @@ -1267,6 +1557,9 @@ class GiantWolfSpider(Monster): any other creature in contact with the same web. Web Walker. The spider ignores movement restrictions caused by webbing. + + # Actions + Bite. Weapon Attack: +3 to hit, reach 5 ft., one creature. Hit: 4 (1d6 + 1) piercing damage, and the target must make a DC 11 Constitution saving @@ -1275,13 +1568,13 @@ class GiantWolfSpider(Monster): 0 hit points, the target is stable but poisoned for 1 hour, even after regaining hit points, and is paralyzed while poisoned in this way. """ - name = "Giant Wolf Spider" - description = "Medium beast, unaligned" + name = 'Giant Wolf Spider' + description = 'Medium beast, unaligned' challenge_rating = 0.25 armor_class = 13 - skills = "Perception +3, Stealth +7" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 13" - languages = "" + skills = 'Perception +3, Stealth +7' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 13' + languages = '' strength = Ability(12) dexterity = Ability(16) constitution = Ability(13) @@ -1292,13 +1585,19 @@ class GiantWolfSpider(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 40 + burrow_speed = 0 hp_max = 11 - hit_dice = "2d8" + hit_dice = '2d8 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GibberingMouther(Monster): """ + Aberrant Ground. The ground in a 10-foot radius around the mouther is doughlike difficult terrain. Each creature that starts its turn in that area @@ -1315,6 +1614,9 @@ class GibberingMouther(Monster): movement to move in a randomly determined direction. On a 7 or 8, the creature makes a melee attack against a randomly determined creature within its reach or does nothing if it can't make such an attack. + + # Actions + Multiattack. The gibbering mouther makes one bite attack and, if it can, uses its Blinding Spittle. @@ -1329,13 +1631,13 @@ class GibberingMouther(Monster): creature within 5 feet of the flash must succeed on a DC 13 Dexterity saving throw or be blinded until the end of the mouther's next turn. """ - name = "Gibbering Mouther" - description = "Medium aberration, neutral" + name = 'Gibbering Mouther' + description = 'Medium aberration, neutral' challenge_rating = 2 armor_class = 9 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = '' strength = Ability(10) dexterity = Ability(8) constitution = Ability(16) @@ -1346,13 +1648,19 @@ class GibberingMouther(Monster): swim_speed = 10 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 67 - hit_dice = "9d8" + hit_dice = '9d8 + 27' + condition_immunities = 'prone' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Glabrezu(Monster): """ + Innate Spellcasting. The glabrezu's spellcasting ability is Intelligence (spell save DC 16). The glabrezu can innately cast the following spells, requiring no @@ -1364,6 +1672,9 @@ class Glabrezu(Monster): Magic Resistance. The glabrezu has advantage on saving throws against spells and other magical effects. + + # Actions + Multiattack. The glabrezu makes four attacks: two with its pincers and two with its fists. Alternatively, it makes two attacks with its pincers and casts @@ -1387,13 +1698,13 @@ class Glabrezu(Monster): demons. It remains for 1 minute, until it or its summoner dies, or until its summoner dismisses it as an action. """ - name = "Glabrezu" - description = "Large fiend, chaotic evil" + name = 'Glabrezu' + description = 'Large fiend, chaotic evil' challenge_rating = 9 armor_class = 17 - skills = "" - senses = "Truesight 120 ft., Passive Perception 13" - languages = "Abyssal, telepathy 120 ft." + skills = '' + senses = 'Truesight 120 ft., Passive Perception 13' + languages = 'Abyssal, telepathy 120 ft.' strength = Ability(20) dexterity = Ability(15) constitution = Ability(21) @@ -1404,18 +1715,27 @@ class Glabrezu(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 157 - hit_dice = "15d10" + hit_dice = '15d10 + 75' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Gladiator(Monster): """ + Brave. The gladiator has advantage on saving throws against being frightened. Brute. A melee weapon deals one extra die of its damage when the gladiator hits with it (included in the attack). + + # Actions + Multiattack. The gladiator makes three melee attacks or two ranged attacks. Spear. @@ -1427,14 +1747,21 @@ class Gladiator(Monster): + 4) bludgeoning damage. If the target is a Medium or smaller creature, it must succeed on a DC 15 Strength saving throw or be knocked prone. + + # Reactions + + Parry. + The gladiator adds 3 to its AC against one melee attack that would hit + it. To do so, the gladiator must see the attacker and be wielding a + melee weapon. """ - name = "Gladiator" - description = "Medium humanoid, any alignment" + name = 'Gladiator' + description = 'Medium humanoid, any alignment' challenge_rating = 5 armor_class = 16 - skills = "Athletics +10, Intimidation +5" - senses = "Passive Perception 11" - languages = "any one language (usually Common)" + skills = 'Athletics +10, Intimidation +5' + senses = 'Passive Perception 11' + languages = 'any one language (usually Common)' strength = Ability(18) dexterity = Ability(15) constitution = Ability(16) @@ -1445,17 +1772,26 @@ class Gladiator(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 112 - hit_dice = "15d8" + hit_dice = '15d8 + 45' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Gnoll(Monster): """ + Rampage. When the gnoll reduces a creature to 0 hit points with a melee attack on its turn, the gnoll can take a bonus action to move up to half its speed and make a bite attack. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 4 (1d4 + 2) piercing damage. @@ -1467,13 +1803,13 @@ class Gnoll(Monster): Ranged Weapon Attack: +3 to hit, range 150/600 ft., one target. Hit: 5 (1d8 + 1) piercing damage. """ - name = "Gnoll" - description = "Medium humanoid, chaotic evil" + name = 'Gnoll' + description = 'Medium humanoid, chaotic evil' challenge_rating = 0.5 armor_class = 15 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Gnoll" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Gnoll' strength = Ability(14) dexterity = Ability(12) constitution = Ability(11) @@ -1484,13 +1820,19 @@ class Gnoll(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "5d8" + hit_dice = '5d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Goat(Monster): """ + Charge. If the goat moves at least 20 ft. straight toward a target and then hits it with a ram attack on the same turn, the target takes an extra @@ -1499,17 +1841,20 @@ class Goat(Monster): Sure-Footed. The goat has advantage on Strength and Dexterity saving throws made against effects that would knock it prone. + + # Actions + Ram. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 3 (1d4 + 1) bludgeoning damage. """ - name = "Goat" - description = "Medium beast, unaligned" + name = 'Goat' + description = 'Medium beast, unaligned' challenge_rating = 0 armor_class = 10 - skills = "" - senses = "Passive Perception 10" - languages = "" + skills = '' + senses = 'Passive Perception 10' + languages = '' strength = Ability(12) dexterity = Ability(10) constitution = Ability(11) @@ -1520,16 +1865,25 @@ class Goat(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 4 - hit_dice = "1d8" + hit_dice = '1d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Goblin(Monster): """ + Nimble Escape. The goblin can take the Disengage or Hide action as a bonus action on each of its turns. + + # Actions + Scimitar. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + 2) slashing damage. @@ -1537,13 +1891,13 @@ class Goblin(Monster): Ranged Weapon Attack: +4 to hit, range 80/320 ft., one target. Hit: 5 (1d6 + 2) piercing damage. """ - name = "Goblin" - description = "Small humanoid, neutral evil" + name = 'Goblin' + description = 'Small humanoid, neutral evil' challenge_rating = 0.25 armor_class = 15 - skills = "Stealth +6" - senses = "Darkvision 60 ft., Passive Perception 9" - languages = "Common, Goblin" + skills = 'Stealth +6' + senses = 'Darkvision 60 ft., Passive Perception 9' + languages = 'Common, Goblin' strength = Ability(8) dexterity = Ability(14) constitution = Ability(10) @@ -1554,15 +1908,24 @@ class Goblin(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 7 - hit_dice = "2d6" + hit_dice = '2d6 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GoldDragonWyrmling(Monster): """ + Amphibious. The dragon can breathe air and water. + + # Actions + Bite. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 9 (1d10 + 4) piercing damage. @@ -1581,13 +1944,13 @@ class GoldDragonWyrmling(Monster): throw at the end of each of its turns, ending the effect on itself on a success. """ - name = "Gold Dragon Wyrmling" - description = "Medium dragon, lawful good" + name = 'Gold Dragon Wyrmling' + description = 'Medium dragon, lawful good' challenge_rating = 3 armor_class = 17 - skills = "Perception +4, Stealth +4" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14" - languages = "Draconic" + skills = 'Perception +4, Stealth +4' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14' + languages = 'Draconic' strength = Ability(19) dexterity = Ability(14) constitution = Ability(17) @@ -1598,19 +1961,28 @@ class GoldDragonWyrmling(Monster): swim_speed = 30 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 60 - hit_dice = "8d8" + hit_dice = '8d8 + 24' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Gorgon(Monster): """ + Trampling Charge. If the gorgon moves at least 20 feet straight toward a creature and then hits it with a gore attack on the same turn, that target must succeed on a DC 16 Strength saving throw or be knocked prone. If the target is prone, the gorgon can make one attack with its hooves against it as a bonus action. + + # Actions + Gore. Melee Weapon Attack: +8 to hit, reach 5 ft., one target. Hit: 18 (2d12 + 5) piercing damage. @@ -1626,13 +1998,13 @@ class Gorgon(Monster): target is petrified until freed by the greater restoration spell or other magic. """ - name = "Gorgon" - description = "Large monstrosity, unaligned" + name = 'Gorgon' + description = 'Large monstrosity, unaligned' challenge_rating = 5 armor_class = 19 - skills = "Perception +4" - senses = "Darkvision 60 ft., Passive Perception 14" - languages = "" + skills = 'Perception +4' + senses = 'Darkvision 60 ft., Passive Perception 14' + languages = '' strength = Ability(20) dexterity = Ability(11) constitution = Ability(18) @@ -1643,13 +2015,19 @@ class Gorgon(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 114 - hit_dice = "12d10" + hit_dice = '12d10 + 48' + condition_immunities = 'petrified' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GrayOoze(Monster): """ + Amorphous. The ooze can move through a space as narrow as 1 inch wide without squeezing. @@ -1664,6 +2042,9 @@ class GrayOoze(Monster): False Appearance. While the ooze remains motionless, it is indistinguishable from an oily pool or wet rock. + + # Actions + Pseudopod. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 4 (1d6 + 1) bludgeoning damage plus 7 (2d6) acid damage, and if the target is @@ -1671,13 +2052,13 @@ class GrayOoze(Monster): a permanent and cumulative -1 penalty to the AC it offers. The armor is destroyed if the penalty reduces its AC to 10. """ - name = "Gray Ooze" - description = "Medium ooze, unaligned" + name = 'Gray Ooze' + description = 'Medium ooze, unaligned' challenge_rating = 0.5 armor_class = 8 - skills = "Stealth +2" - senses = "Blindsight 60 ft. (blind beyond this radius), Passive Perception 8" - languages = "" + skills = 'Stealth +2' + senses = 'Blindsight 60 ft. (blind beyond this radius), Passive Perception 8' + languages = '' strength = Ability(12) dexterity = Ability(6) constitution = Ability(16) @@ -1688,15 +2069,24 @@ class GrayOoze(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 10 + burrow_speed = 0 hp_max = 22 - hit_dice = "3d8" + hit_dice = '3d8 + 9' + condition_immunities = 'blinded, charmed, deafened, exhaustion, frightened, prone' + damage_immunities = '' + damage_resistances = 'acid' + damage_vulnerabilities = '' spells = [] class GreenDragonWyrmling(Monster): """ + Amphibious. The dragon can breathe air and water. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 7 (1d10 + 2) piercing damage plus 3 (1d6) poison damage. @@ -1706,13 +2096,13 @@ class GreenDragonWyrmling(Monster): poison damage on a failed save, or half as much damage on a successful one. """ - name = "Green Dragon Wyrmling" - description = "Medium dragon, lawful evil" + name = 'Green Dragon Wyrmling' + description = 'Medium dragon, lawful evil' challenge_rating = 2 armor_class = 17 - skills = "Perception +4, Stealth +3" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14" - languages = "Draconic" + skills = 'Perception +4, Stealth +3' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14' + languages = 'Draconic' strength = Ability(15) dexterity = Ability(12) constitution = Ability(13) @@ -1723,13 +2113,19 @@ class GreenDragonWyrmling(Monster): swim_speed = 30 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 38 - hit_dice = "7d8" + hit_dice = '7d8 + 7' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GreenHag(Monster): """ + Amphibious. The hag can breathe air and water. Innate Spellcasting. @@ -1744,6 +2140,9 @@ class GreenHag(Monster): The hag can mimic animal sounds and humanoid voices. A creature that hears the sounds can tell they are imitations with a successful DC 14 Wisdom (Insight) check. + + # Actions + Claws. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 13 (2d8 + 4) slashing damage. @@ -1766,13 +2165,13 @@ class GreenHag(Monster): she can be tracked only by magic. Any equipment she wears or carries is invisible with her. """ - name = "Green Hag" - description = "Medium fey, neutral evil" + name = 'Green Hag' + description = 'Medium fey, neutral evil' challenge_rating = 3 armor_class = 17 - skills = "Arcana +3, Deception +4, Perception +4, Stealth +3" - senses = "Darkvision 60 ft., Passive Perception 14" - languages = "Common, Draconic, Sylvan" + skills = 'Arcana +3, Deception +4, Perception +4, Stealth +3' + senses = 'Darkvision 60 ft., Passive Perception 14' + languages = 'Common, Draconic, Sylvan' strength = Ability(18) dexterity = Ability(12) constitution = Ability(16) @@ -1783,16 +2182,25 @@ class GreenHag(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 82 - hit_dice = "11d8" + hit_dice = '11d8 + 33' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Grick(Monster): """ + Stone Camouflage. The grick has advantage on Dexterity (Stealth) checks made to hide in rocky terrain. + + # Actions + Multiattack. The grick makes one attack with its tentacles. If that attack hits, the grick can make one beak attack against the same target. @@ -1803,13 +2211,13 @@ class Grick(Monster): Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + 2) piercing damage. """ - name = "Grick" - description = "Medium monstrosity, neutral" + name = 'Grick' + description = 'Medium monstrosity, neutral' challenge_rating = 2 armor_class = 14 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 12" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 12' + languages = '' strength = Ability(14) dexterity = Ability(14) constitution = Ability(11) @@ -1820,16 +2228,25 @@ class Grick(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 30 + burrow_speed = 0 hp_max = 27 - hit_dice = "6d8" + hit_dice = '6d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = 'bludgeoning, piercing, and slashing damage from nonmagical weapons' + damage_vulnerabilities = '' spells = [] class Griffon(Monster): """ + Keen Sight. The griffon has advantage on Wisdom (Perception) checks that rely on sight. + + # Actions + Multiattack. The griffon makes two attacks: one with its beak and one with its claws. @@ -1840,13 +2257,13 @@ class Griffon(Monster): Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 11 (2d6 + 4) slashing damage. """ - name = "Griffon" - description = "Large monstrosity, unaligned" + name = 'Griffon' + description = 'Large monstrosity, unaligned' challenge_rating = 2 armor_class = 12 - skills = "Perception +5" - senses = "Darkvision 60 ft., Passive Perception 15" - languages = "" + skills = 'Perception +5' + senses = 'Darkvision 60 ft., Passive Perception 15' + languages = '' strength = Ability(18) dexterity = Ability(15) constitution = Ability(16) @@ -1857,13 +2274,19 @@ class Griffon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 59 - hit_dice = "7d10" + hit_dice = '7d10 + 21' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Grimlock(Monster): """ + Blind Senses. The grimlock can't use its blindsight while deafened and unable to smell. @@ -1873,17 +2296,20 @@ class Grimlock(Monster): Stone Camouflage. The grimlock has advantage on Dexterity (Stealth) checks made to hide in rocky terrain. + + # Actions + Spiked Bone Club. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 5 (1d4 + 3) bludgeoning damage plus 2 (1d4) piercing damage. """ - name = "Grimlock" - description = "Medium humanoid, neutral evil" + name = 'Grimlock' + description = 'Medium humanoid, neutral evil' challenge_rating = 0.25 armor_class = 11 - skills = "Athletics +5, Perception +3, Stealth +3" - senses = "Blindsight 30 ft. or 10 ft. while deafened (blind beyond this radius), Passive Perception 13" - languages = "Undercommon" + skills = 'Athletics +5, Perception +3, Stealth +3' + senses = 'Blindsight 30 ft. or 10 ft. while deafened (blind beyond this radius), Passive Perception 13' + languages = 'Undercommon' strength = Ability(16) dexterity = Ability(12) constitution = Ability(12) @@ -1894,25 +2320,33 @@ class Grimlock(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 11 - hit_dice = "2d8" + hit_dice = '2d8 + 2' + condition_immunities = 'blinded' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Guard(Monster): """ + + # Actions + Spear. Melee or Ranged Weapon Attack: +3 to hit, reach 5 ft. or range 20/60 ft., one target. Hit: 4 (1d6 + 1) piercing damage or 5 (1d8 + 1) piercing damage if used with two hands to make a melee attack. """ - name = "Guard" - description = "Medium humanoid, any alignment" + name = 'Guard' + description = 'Medium humanoid, any alignment' challenge_rating = 0.125 armor_class = 16 - skills = "Perception +2" - senses = "Passive Perception 12" - languages = "any one language (usually Common)" + skills = 'Perception +2' + senses = 'Passive Perception 12' + languages = 'any one language (usually Common)' strength = Ability(13) dexterity = Ability(12) constitution = Ability(12) @@ -1923,37 +2357,35 @@ class Guard(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 11 - hit_dice = "2d8" + hit_dice = '2d8 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class GuardianNaga(Monster): """ + Rejuvenation. If it dies, the naga returns to life in 1d6 days and regains all its hit points. Only a wish spell can prevent this trait from functioning. Spellcasting. - The naga is an 11th-level spellcaster. Its spellcasting ability is - Wisdom (spell save DC 16, +8 to hit with spell attacks), and it needs - only verbal components to cast its spells. It has the following cleric - spells prepared: - - - - - Cantrips (at will): mending, sacred flame, thaumaturgy - - - 1st level (4 slots): command, cure wounds, shield of faith - - - 2nd level (3 slots): calm emotions, hold person - - - 3rd level (3 slots): bestow curse, clairvoyance - - - 4th level (3 slots): banishment, freedom of movement - - - 5th level (2 slots): flame strike, geas - - - 6th level (1 slot): true seeing + The naga is an 11th-level spellcaster. Its spellcasting ability is Wisdom (spell save DC 16, +8 to hit with spell attacks), and it needs only verbal components to cast its spells. It has the following cleric spells prepared: + + - Cantrips (at will): mending, sacred flame, thaumaturgy + - 1st level (4 slots): command, cure wounds, shield of faith + - 2nd level (3 slots): calm emotions, hold person + - 3rd level (3 slots): bestow curse, clairvoyance + - 4th level (3 slots): banishment, freedom of movement + - 5th level (2 slots): flame strike, geas + - 6th level (1 slot): true seeing + + # Actions + Bite. Melee Weapon Attack: +8 to hit, reach 10 ft., one creature. Hit: 8 (1d8 + 4) piercing damage, and the target must make a DC 15 @@ -1965,13 +2397,13 @@ class GuardianNaga(Monster): (10d8) poison damage on a failed save, or half as much damage on a successful one. """ - name = "Guardian Naga" - description = "Large monstrosity, lawful good" + name = 'Guardian Naga' + description = 'Large monstrosity, lawful good' challenge_rating = 10 armor_class = 18 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 14" - languages = "Celestial, Common" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 14' + languages = 'Celestial, Common' strength = Ability(19) dexterity = Ability(18) constitution = Ability(16) @@ -1982,13 +2414,19 @@ class GuardianNaga(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 127 - hit_dice = "15d10" - spells = ["mending", "sacred flame", "thaumaturgy", "command", "cure wounds", "shield of faith", "calm emotions", "hold person", "bestow curse", "clairvoyance", "banishment", "freedom of movement", "flame strike", "geas", "true seeing"] + hit_dice = '15d10 + 45' + condition_immunities = 'charmed, poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = '' + spells = ['mending', 'sacred flame', 'thaumaturgy', 'command', 'cure wounds', 'shield of faith', 'calm emotions', 'hold person', 'bestow curse', 'clairvoyance', 'banishment', 'freedom of movement', 'flame strike', 'geas', 'true seeing'] class Gynosphinx(Monster): """ + Inscrutable. The sphinx is immune to any effect that would sense its emotions or read its thoughts, as well as any divination spell that it refuses. @@ -1997,37 +2435,41 @@ class Gynosphinx(Monster): Magic Weapons. The sphinx's weapon attacks are magical. Spellcasting. - The sphinx is a 9th-level spellcaster. Its spellcasting ability is - Intelligence (spell save DC 16, +8 to hit with spell attacks). It - requires no material components to cast its spells. The sphinx has the - following wizard spells prepared: - - - - - Cantrips (at will): mage hand, minor illusion, prestidigitation - - - 1st level (4 slots): detect magic, identify, shield - - - 2nd level (3 slots): darkness, locate object, suggestion - - - 3rd level (3 slots): dispel magic, remove curse, tongues - - - 4th level (3 slots): banishment, greater invisibility - - - 5th level (1 slot): legend lore + The sphinx is a 9th-level spellcaster. Its spellcasting ability is Intelligence (spell save DC 16, +8 to hit with spell attacks). It requires no material components to cast its spells. The sphinx has the following wizard spells prepared: + + - Cantrips (at will): mage hand, minor illusion, prestidigitation + - 1st level (4 slots): detect magic, identify, shield + - 2nd level (3 slots): darkness, locate object, suggestion + - 3rd level (3 slots): dispel magic, remove curse, tongues + - 4th level (3 slots): banishment, greater invisibility + - 5th level (1 slot): legend lore + + # Actions + Multiattack. The sphinx makes two claw attacks. Claw. Melee Weapon Attack: +9 to hit, reach 5 ft., one target. Hit: 13 (2d8 + 4) slashing damage. + + # Legendary Actions + + Claw Attack. + The sphinx makes one claw attack. + Teleport (Costs 2 Actions). + The sphinx magically teleports, along with any equipment it is wearing + or carrying, up to 120 feet to an unoccupied space it can see. + Cast a Spell (Costs 3 Actions). + The sphinx casts a spell from its list of prepared spells, using a + spell slot as normal. """ - name = "Gynosphinx" - description = "Large monstrosity, lawful neutral" + name = 'Gynosphinx' + description = 'Large monstrosity, lawful neutral' challenge_rating = 11 armor_class = 17 - skills = "Arcana +12, History +12, Perception +8, Religion +8" - senses = "Truesight 120 ft., Passive Perception 18" - languages = "Common, Sphinx" + skills = 'Arcana +12, History +12, Perception +8, Religion +8' + senses = 'Truesight 120 ft., Passive Perception 18' + languages = 'Common, Sphinx' strength = Ability(18) dexterity = Ability(15) constitution = Ability(16) @@ -2038,9 +2480,11 @@ class Gynosphinx(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 136 - hit_dice = "16d10" - spells = ["mage hand", "minor illusion", "prestidigitation", - "detect magic", "identify", "shield", "darkness", "locate object", - "suggestion", "dispel magic", "remove curse", "tongues", - "banishment", "greater invisibility", "legend lore"] + hit_dice = '16d10 + 48' + condition_immunities = 'charmed, frightened' + damage_immunities = 'psychic' + damage_resistances = 'bludgeoning, piercing, and slashing from nonmagical weapons' + damage_vulnerabilities = '' + spells = ['mage hand', 'minor illusion', 'prestidigitation', 'detect magic', 'identify', 'shield', 'darkness', 'locate object', 'suggestion', 'dispel magic', 'remove curse', 'tongues', 'banishment', 'greater invisibility', 'legend lore'] diff --git a/dungeonsheets/monsters/monsters_h.py b/dungeonsheets/monsters/monsters_h.py index 215c154..8a115bb 100644 --- a/dungeonsheets/monsters/monsters_h.py +++ b/dungeonsheets/monsters/monsters_h.py @@ -10,6 +10,9 @@ from dungeonsheets.stats import Ability class HalfRedDragonVeteran(Monster): """ + + # Actions + Multiattack. The veteran makes two longsword attacks. If it has a shortsword drawn, it can also make a shortsword attack. @@ -28,13 +31,13 @@ class HalfRedDragonVeteran(Monster): must make a DC 15 Dexterity saving throw, taking 24 (7d6) fire damage on a failed save, or half as much damage on a successful one. """ - name = "Half-Red Dragon Veteran" - description = "Medium humanoid, any alignment" + name = 'Half-Red Dragon Veteran' + description = 'Medium humanoid, any alignment' challenge_rating = 5 armor_class = 18 - skills = "" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 12" - languages = "Common, Draconic" + skills = '' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 12' + languages = 'Common, Draconic' strength = Ability(16) dexterity = Ability(13) constitution = Ability(14) @@ -45,13 +48,21 @@ class HalfRedDragonVeteran(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 65 - hit_dice = "10d8" + hit_dice = '10d8 + 20' + condition_immunities = '' + damage_immunities = '' + damage_resistances = 'fire' + damage_vulnerabilities = '' spells = [] class Harpy(Monster): """ + + # Actions + Multiattack. The harpy makes two attacks: one with its claws and one with its club. Claws. @@ -80,13 +91,13 @@ class Harpy(Monster): A target that successfully saves is immune to this harpy's song for the next 24 hours. """ - name = "Harpy" - description = "Medium monstrosity, chaotic evil" + name = 'Harpy' + description = 'Medium monstrosity, chaotic evil' challenge_rating = 1 armor_class = 11 - skills = "" - senses = "Passive Perception 10" - languages = "Common" + skills = '' + senses = 'Passive Perception 10' + languages = 'Common' strength = Ability(12) dexterity = Ability(13) constitution = Ability(12) @@ -97,27 +108,36 @@ class Harpy(Monster): swim_speed = 0 fly_speed = 40 climb_speed = 0 + burrow_speed = 0 hp_max = 38 - hit_dice = "7d8" + hit_dice = '7d8 + 7' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Hawk(Monster): """ + Keen Sight. The hawk has advantage on Wisdom (Perception) checks that rely on sight. + + # Actions + Talons. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 1 slashing damage. """ - name = "Hawk" - description = "Tiny beast, unaligned" + name = 'Hawk' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 13 - skills = "Perception +4" - senses = "Passive Perception 14" - languages = "" + skills = 'Perception +4' + senses = 'Passive Perception 14' + languages = '' strength = Ability(5) dexterity = Ability(16) constitution = Ability(8) @@ -128,13 +148,19 @@ class Hawk(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 1 - hit_dice = "1d4" + hit_dice = '1d4 + -1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class HellHound(Monster): """ + Keen Hearing and Smell. The hound has advantage on Wisdom (Perception) checks that rely on hearing or smell. @@ -142,6 +168,9 @@ class HellHound(Monster): The hound has advantage on an attack roll against a creature if at least one of the hound's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d8 + 3) piercing damage plus 7 (2d6) fire damage. @@ -150,12 +179,12 @@ class HellHound(Monster): must make a DC 12 Dexterity saving throw, taking 21 (6d6) fire damage on a failed save, or half as much damage on a successful one. """ - name = "Hell Hound" - description = "Medium fiend, lawful evil" + name = 'Hell Hound' + description = 'Medium fiend, lawful evil' challenge_rating = 3 armor_class = 15 - skills = "Perception +5" - senses = "Darkvision 60 ft., Passive Perception 15" + skills = 'Perception +5' + senses = 'Darkvision 60 ft., Passive Perception 15' languages = "understands Infernal but can't speak it" strength = Ability(17) dexterity = Ability(12) @@ -167,13 +196,19 @@ class HellHound(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 45 - hit_dice = "7d8" + hit_dice = '7d8 + 14' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Hezrou(Monster): """ + Magic Resistance. The hezrou has advantage on saving throws against spells and other magical effects. @@ -182,6 +217,9 @@ class Hezrou(Monster): succeed on a DC 14 Constitution saving throw or be poisoned until the start of its next turn. On a successful saving throw, the creature is immune to the hezrou's stench for 24 hours. + + # Actions + Multiattack. The hezrou makes three attacks: one with its bite and two with its claws. @@ -202,13 +240,13 @@ class Hezrou(Monster): demons. It remains for 1 minute, until it or its summoner dies, or until its summoner dismisses it as an action. """ - name = "Hezrou" - description = "Large fiend, chaotic evil" + name = 'Hezrou' + description = 'Large fiend, chaotic evil' challenge_rating = 8 armor_class = 16 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 11" - languages = "Abyssal, telepathy 120 ft." + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 11' + languages = 'Abyssal, telepathy 120 ft.' strength = Ability(19) dexterity = Ability(17) constitution = Ability(20) @@ -219,13 +257,21 @@ class Hezrou(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 136 - hit_dice = "13d10" + hit_dice = '13d10 + 65' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class HillGiant(Monster): """ + + # Actions + Multiattack. The giant makes two greatclub attacks. Greatclub. @@ -235,13 +281,13 @@ class HillGiant(Monster): Ranged Weapon Attack: +8 to hit, range 60/240 ft., one target. Hit: 21 (3d10 + 5) bludgeoning damage. """ - name = "Hill Giant" - description = "Huge giant, chaotic evil" + name = 'Hill Giant' + description = 'Huge giant, chaotic evil' challenge_rating = 5 armor_class = 13 - skills = "Perception +2" - senses = "Passive Perception 12" - languages = "Giant" + skills = 'Perception +2' + senses = 'Passive Perception 12' + languages = 'Giant' strength = Ability(21) dexterity = Ability(8) constitution = Ability(19) @@ -252,16 +298,25 @@ class HillGiant(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 105 - hit_dice = "10d12" + hit_dice = '10d12 + 40' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Hippogriff(Monster): """ + Keen Sight. The hippogriff has advantage on Wisdom (Perception) checks that rely on sight. + + # Actions + Multiattack. The hippogriff makes two attacks: one with its beak and one with its claws. @@ -272,13 +327,13 @@ class Hippogriff(Monster): Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + 3) slashing damage. """ - name = "Hippogriff" - description = "Large monstrosity, unaligned" + name = 'Hippogriff' + description = 'Large monstrosity, unaligned' challenge_rating = 1 armor_class = 11 - skills = "Perception +5" - senses = "Passive Perception 15" - languages = "" + skills = 'Perception +5' + senses = 'Passive Perception 15' + languages = '' strength = Ability(17) dexterity = Ability(13) constitution = Ability(13) @@ -289,17 +344,26 @@ class Hippogriff(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 19 - hit_dice = "3d10" + hit_dice = '3d10 + 3' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Hobgoblin(Monster): """ + Martial Advantage. Once per turn, the hobgoblin can deal an extra 7 (2d6) damage to a creature it hits with a weapon attack if that creature is within 5 ft. of an ally of the hobgoblin that isn't incapacitated. + + # Actions + Longsword. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 5 (1d8 + 1) slashing damage, or 6 (1d10 + 1) slashing damage if used with two @@ -308,13 +372,13 @@ class Hobgoblin(Monster): Ranged Weapon Attack: +3 to hit, range 150/600 ft., one target. Hit: 5 (1d8 + 1) piercing damage. """ - name = "Hobgoblin" - description = "Medium humanoid, lawful evil" + name = 'Hobgoblin' + description = 'Medium humanoid, lawful evil' challenge_rating = 0.5 armor_class = 18 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Common, Goblin" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Common, Goblin' strength = Ability(13) dexterity = Ability(12) constitution = Ability(12) @@ -325,17 +389,26 @@ class Hobgoblin(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 11 - hit_dice = "2d8" + hit_dice = '2d8 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Homunculus(Monster): """ + Telepathic Bond. While the homunculus is on the same plane of existence as its master, it can magically convey what it senses to its master, and the two can communicate telepathically. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 1 piercing damage, and the target must succeed on a DC 10 Constitution @@ -343,12 +416,12 @@ class Homunculus(Monster): 5 or more, the target is instead poisoned for 5 (1d10) minutes and unconscious while poisoned in this way. """ - name = "Homunculus" - description = "Tiny construct, neutral" + name = 'Homunculus' + description = 'Tiny construct, neutral' challenge_rating = 0 armor_class = 13 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' languages = "understands the languages of its creator but can't speak" strength = Ability(4) dexterity = Ability(15) @@ -360,18 +433,27 @@ class Homunculus(Monster): swim_speed = 0 fly_speed = 40 climb_speed = 0 + burrow_speed = 0 hp_max = 5 - hit_dice = "2d4" + hit_dice = '2d4 + 0' + condition_immunities = 'charmed, poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class HornedDevil(Monster): """ + Devil's Sight. Magical darkness doesn't impede the devil's darkvision. Magic Resistance. The devil has advantage on saving throws against spells and other magical effects. + + # Actions + Multiattack. The devil makes three melee attacks: two with its fork and one with its tail. It can use Hurl Flame in place of any melee attack. @@ -393,13 +475,13 @@ class HornedDevil(Monster): (4d6) fire damage. If the target is a flammable object that isn't being worn or carried, it also catches fire. """ - name = "Horned Devil" - description = "Large fiend, lawful evil" + name = 'Horned Devil' + description = 'Large fiend, lawful evil' challenge_rating = 11 armor_class = 18 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 13" - languages = "Infernal, telepathy 120 ft." + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 13' + languages = 'Infernal, telepathy 120 ft.' strength = Ability(22) dexterity = Ability(17) constitution = Ability(21) @@ -410,29 +492,38 @@ class HornedDevil(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 178 - hit_dice = "17d10" + hit_dice = '17d10 + 85' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class HunterShark(Monster): """ + Blood Frenzy. The shark has advantage on melee attack rolls against any creature that doesn't have all its hit points. Water Breathing. The shark can breathe only underwater. + + # Actions + Bite. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 13 (2d8 + 4) piercing damage. """ - name = "Hunter Shark" - description = "Large beast, unaligned" + name = 'Hunter Shark' + description = 'Large beast, unaligned' challenge_rating = 2 armor_class = 12 - skills = "Perception +2" - senses = "Darkvision 30 ft., Passive Perception 12" - languages = "" + skills = 'Perception +2' + senses = 'Darkvision 30 ft., Passive Perception 12' + languages = '' strength = Ability(18) dexterity = Ability(13) constitution = Ability(15) @@ -443,13 +534,19 @@ class HunterShark(Monster): swim_speed = 40 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 45 - hit_dice = "6d10" + hit_dice = '6d10 + 12' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Hydra(Monster): """ + Hold Breath. The hydra can hold its breath for 1 hour. Multiple Heads. @@ -469,19 +566,22 @@ class Hydra(Monster): can be used only for opportunity attacks. Wakeful. While the hydra sleeps, at least one of its heads is awake. + + # Actions + Multiattack. The hydra makes as many bite attacks as it has heads. Bite. Melee Weapon Attack: +8 to hit, reach 10 ft., one target. Hit: 10 (1d10 + 5) piercing damage. """ - name = "Hydra" - description = "Huge monstrosity, unaligned" + name = 'Hydra' + description = 'Huge monstrosity, unaligned' challenge_rating = 8 armor_class = 15 - skills = "Perception +6" - senses = "Darkvision 60 ft., Passive Perception 16" - languages = "" + skills = 'Perception +6' + senses = 'Darkvision 60 ft., Passive Perception 16' + languages = '' strength = Ability(20) dexterity = Ability(12) constitution = Ability(20) @@ -492,28 +592,37 @@ class Hydra(Monster): swim_speed = 30 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 172 - hit_dice = "15d12" + hit_dice = '15d12 + 75' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Hyena(Monster): """ + Pack Tactics. The hyena has advantage on an attack roll against a creature if at least one of the hyena's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Bite. Weapon Attack: +2 to hit, reach 5 ft., one target. Hit: 3 (1d6) piercing damage. """ - name = "Hyena" - description = "Medium beast, unaligned" + name = 'Hyena' + description = 'Medium beast, unaligned' challenge_rating = 0 armor_class = 11 - skills = "Perception +3" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3' + senses = 'Passive Perception 13' + languages = '' strength = Ability(11) dexterity = Ability(13) constitution = Ability(12) @@ -524,6 +633,11 @@ class Hyena(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 5 - hit_dice = "1d8" + hit_dice = '1d8 + 1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_i.py b/dungeonsheets/monsters/monsters_i.py index 78edaef..58125a9 100644 --- a/dungeonsheets/monsters/monsters_i.py +++ b/dungeonsheets/monsters/monsters_i.py @@ -10,11 +10,15 @@ from dungeonsheets.stats import Ability class IceDevil(Monster): """ + Devil's Sight. Magical darkness doesn't impede the devil's darkvision. Magic Resistance. The devil has advantage on saving throws against spells and other magical effects. + + # Actions + Multiattack. The devil makes three attacks: one with its bite, one with its claws, and one with its tail. @@ -50,13 +54,13 @@ class IceDevil(Monster): save, or half as much damage on a successful one. The frigid air dissipates when the rest of the wall vanishes. """ - name = "Ice Devil" - description = "Large fiend, lawful evil" + name = 'Ice Devil' + description = 'Large fiend, lawful evil' challenge_rating = 14 armor_class = 18 - skills = "" - senses = "Blindsight 60 ft., Darkvision 120 ft., Passive Perception 12" - languages = "Infernal, telepathy 120 ft." + skills = '' + senses = 'Blindsight 60 ft., Darkvision 120 ft., Passive Perception 12' + languages = 'Infernal, telepathy 120 ft.' strength = Ability(21) dexterity = Ability(14) constitution = Ability(18) @@ -67,13 +71,19 @@ class IceDevil(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 180 - hit_dice = "19d10" + hit_dice = '19d10 + 76' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = "bludgeoning, piercing, and slashing from nonmagical weapons that aren't silvered" + damage_vulnerabilities = '' spells = [] class IceMephit(Monster): """ + Death Burst. When the mephit dies, it explodes in a burst of jagged ice. Each creature within 5 ft. of it must make a DC 10 Dexterity saving throw, @@ -85,6 +95,9 @@ class IceMephit(Monster): Innate Spellcasting. The mephit can innately cast fog cloud, requiring no material components. Its innate spellcasting ability is Charisma. + + # Actions + Claws. Melee Weapon Attack: +3 to hit, reach 5 ft., one creature. Hit: 3 (1d4 + 1) slashing damage plus 2 (1d4) cold damage. @@ -100,13 +113,13 @@ class IceMephit(Monster): other mephits. It remains for 1 minute, until it or its summoner dies, or until its summoner dismisses it as an action. """ - name = "Ice Mephit" - description = "Small elemental, neutral evil" + name = 'Ice Mephit' + description = 'Small elemental, neutral evil' challenge_rating = 0.5 armor_class = 11 - skills = "Perception +2, Stealth +3" - senses = "Darkvision 60 ft., Passive Perception 12" - languages = "Aquan, Auran" + skills = 'Perception +2, Stealth +3' + senses = 'Darkvision 60 ft., Passive Perception 12' + languages = 'Aquan, Auran' strength = Ability(7) dexterity = Ability(13) constitution = Ability(10) @@ -117,13 +130,19 @@ class IceMephit(Monster): swim_speed = 0 fly_speed = 30 climb_speed = 0 + burrow_speed = 0 hp_max = 21 - hit_dice = "6d6" + hit_dice = '6d6 + 0' + condition_immunities = 'poisoned' + damage_immunities = 'cold, poison' + damage_resistances = '' + damage_vulnerabilities = 'bludgeoning, fire' spells = [] class Imp(Monster): """ + Shapechanger. The imp can use its action to polymorph into a beast form that resembles a rat (speed 20 ft.), a raven (20 ft., fly 60 ft.), or a @@ -144,6 +163,9 @@ class Imp(Monster): shares the quasit's Magic Resistance trait. At any time and for any reason, the imp can end its service as a familiar, ending the telepathic bond. + + # Actions + Sting (Bite in Beast Form). Melee Weapon Attack: +5 to hit, reach 5 ft ., one target. Hit: 5 (1d4 + 3) piercing damage, and the target must make on a DC 11 Constitution @@ -154,13 +176,13 @@ class Imp(Monster): concentration ends (as if concentrating on a spell). Any equipment the imp wears or carries is invisible with it. """ - name = "Imp" - description = "Tiny fiend, lawful evil" + name = 'Imp' + description = 'Tiny fiend, lawful evil' challenge_rating = 1 armor_class = 13 - skills = "Deception +4, Insight +3, Persuasion +4, Stealth +5" - senses = "Darkvision 120 ft., Passive Perception 11" - languages = "Infernal, Common" + skills = 'Deception +4, Insight +3, Persuasion +4, Stealth +5' + senses = 'Darkvision 120 ft., Passive Perception 11' + languages = 'Infernal, Common' strength = Ability(6) dexterity = Ability(17) constitution = Ability(13) @@ -171,13 +193,19 @@ class Imp(Monster): swim_speed = 0 fly_speed = 40 climb_speed = 0 + burrow_speed = 0 hp_max = 10 - hit_dice = "3d4" + hit_dice = '3d4 + 3' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class InvisibleStalker(Monster): """ + Invisibility. The stalker is invisible. Faultless Tracker. @@ -185,18 +213,21 @@ class InvisibleStalker(Monster): direction and distance to its quarry as long as the two of them are on the same plane of existence. The stalker also knows the location of its summoner. + + # Actions + Multiattack. The stalker makes two slam attacks. Slam. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 10 (2d6 + 3) bludgeoning damage. """ - name = "Invisible Stalker" - description = "Medium elemental, neutral" + name = 'Invisible Stalker' + description = 'Medium elemental, neutral' challenge_rating = 6 armor_class = 14 - skills = "Perception +8, Stealth +10" - senses = "Darkvision 60 ft., Passive Perception 18" + skills = 'Perception +8, Stealth +10' + senses = 'Darkvision 60 ft., Passive Perception 18' languages = "Auran, understands Common but doesn't speak it" strength = Ability(16) dexterity = Ability(19) @@ -208,13 +239,19 @@ class InvisibleStalker(Monster): swim_speed = 0 fly_speed = 50 climb_speed = 0 + burrow_speed = 0 hp_max = 104 - hit_dice = "16d8" + hit_dice = '16d8 + 32' + condition_immunities = 'exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained, unconscious' + damage_immunities = 'poison' + damage_resistances = 'bludgeoning, piercing, and slashing from nonmagical weapons' + damage_vulnerabilities = '' spells = [] class IronGolem(Monster): """ + Fire Absorption. Whenever the golem is subjected to fire damage, it takes no damage and instead regains a number of hit points equal to the fire damage dealt. @@ -225,6 +262,9 @@ class IronGolem(Monster): magical effects. Magic Weapons. The golem's weapon attacks are magical. + + # Actions + Multiattack. The golem makes two melee attacks. Slam. @@ -239,12 +279,12 @@ class IronGolem(Monster): (l0d8) poison damage on a failed save, or half as much damage on a successful one. """ - name = "Iron Golem" - description = "Large construct, unaligned" + name = 'Iron Golem' + description = 'Large construct, unaligned' challenge_rating = 16 armor_class = 20 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 10" + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 10' languages = "understands the languages of its creator but can't speak" strength = Ability(24) dexterity = Ability(9) @@ -256,6 +296,11 @@ class IronGolem(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 210 - hit_dice = "20d10" + hit_dice = '20d10 + 100' + condition_immunities = 'charmed, exhaustion, frightened, paralyzed, petrified, poisoned' + damage_immunities = "fire, poison, psychic, bludgeoning, piercing, and slashing from nonmagical weapons that aren't adamantine" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_j.py b/dungeonsheets/monsters/monsters_j.py index c007286..ab10ae2 100644 --- a/dungeonsheets/monsters/monsters_j.py +++ b/dungeonsheets/monsters/monsters_j.py @@ -10,6 +10,7 @@ from dungeonsheets.stats import Ability class Jackal(Monster): """ + Keen Hearing and Smell. The jackal has advantage on Wisdom (Perception) checks that rely on hearing or smell. @@ -17,17 +18,20 @@ class Jackal(Monster): The jackal has advantage on an attack roll against a creature if at least one of the jackal's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Bite. Melee Weapon Attack: +1 to hit, reach 5 ft., one target. Hit: 1 (1d4 - 1) piercing damage. """ - name = "Jackal" - description = "Small beast, unaligned" + name = 'Jackal' + description = 'Small beast, unaligned' challenge_rating = 0 armor_class = 12 - skills = "Perception +3" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3' + senses = 'Passive Perception 13' + languages = '' strength = Ability(8) dexterity = Ability(15) constitution = Ability(11) @@ -38,6 +42,11 @@ class Jackal(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 3 - hit_dice = "1d6" + hit_dice = '1d6 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_k.py b/dungeonsheets/monsters/monsters_k.py index 77fa88c..49e5f31 100644 --- a/dungeonsheets/monsters/monsters_k.py +++ b/dungeonsheets/monsters/monsters_k.py @@ -10,6 +10,7 @@ from dungeonsheets.stats import Ability class KillerWhale(Monster): """ + Echolocation. The whale can't use its blindsight while deafened. Hold Breath. @@ -17,17 +18,20 @@ class KillerWhale(Monster): Keen Hearing. The whale has advantage on Wisdom (Perception) checks that rely on hearing. + + # Actions + Bite. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 21 (5d6 + 4) piercing damage. """ - name = "Killer Whale" - description = "Huge beast, unaligned" + name = 'Killer Whale' + description = 'Huge beast, unaligned' challenge_rating = 3 armor_class = 12 - skills = "Perception +3" - senses = "Blindsight 120 ft., Passive Perception 13" - languages = "" + skills = 'Perception +3' + senses = 'Blindsight 120 ft., Passive Perception 13' + languages = '' strength = Ability(19) dexterity = Ability(10) constitution = Ability(13) @@ -38,15 +42,24 @@ class KillerWhale(Monster): swim_speed = 60 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 90 - hit_dice = "12d12" + hit_dice = '12d12 + 12' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Knight(Monster): """ + Brave. The knight has advantage on saving throws against being frightened. + + # Actions + Multiattack. The knight makes two melee attacks. Greatsword. @@ -62,14 +75,21 @@ class Knight(Monster): its roll provided it can hear and understand the knight. A creature can benefit from only one Leadership die at a time. This effect ends if the knight is incapacitated. + + # Reactions + + Parry. + The knight adds 2 to its AC against one melee attack that would hit + it. To do so, the knight must see the attacker and be wielding a melee + weapon. """ - name = "Knight" - description = "Medium humanoid, any alignment" + name = 'Knight' + description = 'Medium humanoid, any alignment' challenge_rating = 3 armor_class = 18 - skills = "" - senses = "Passive Perception 10" - languages = "any one language (usually Common)" + skills = '' + senses = 'Passive Perception 10' + languages = 'any one language (usually Common)' strength = Ability(16) dexterity = Ability(11) constitution = Ability(14) @@ -80,13 +100,19 @@ class Knight(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 52 - hit_dice = "8d8" + hit_dice = '8d8 + 16' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Kobold(Monster): """ + Sunlight Sensitivity. While in sunlight, the kobold has disadvantage on attack rolls, as well as on Wisdom (Perception) checks that rely on sight. @@ -94,6 +120,9 @@ class Kobold(Monster): The kobold has advantage on an attack roll against a creature if at least one of the kobold's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Dagger. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 4 (1d4 + 2) piercing damage. @@ -101,13 +130,13 @@ class Kobold(Monster): Ranged Weapon Attack: +4 to hit, range 30/120 ft., one target. Hit: 4 (1d4 + 2) bludgeoning damage. """ - name = "Kobold" - description = "Small humanoid, lawful evil" + name = 'Kobold' + description = 'Small humanoid, lawful evil' challenge_rating = 0.125 armor_class = 12 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 8" - languages = "Common, Draconic" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 8' + languages = 'Common, Draconic' strength = Ability(7) dexterity = Ability(15) constitution = Ability(9) @@ -118,13 +147,19 @@ class Kobold(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 5 - hit_dice = "2d6" + hit_dice = '2d6 + -2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Kraken(Monster): """ + Amphibious. The kraken can breathe air and water. Freedom of Movement. @@ -133,6 +168,9 @@ class Kraken(Monster): movement to escape from nonmagical restraints or being grappled. Siege Monster. The kraken deals double damage to objects and structures. + + # Actions + Multiattack. The kraken makes three tentacle attacks, each of which it can replace with one use of Fling. @@ -167,13 +205,28 @@ class Kraken(Monster): can strike a target the kraken can see within 120 feet of it. A target must make a DC 23 Dexterity saving throw, taking 22 (4d10) lightning damage on a failed save, or half as much damage on a successful one. + + # Legendary Actions + + Tentacle Attack or Fling. + The kraken makes one tentacle attack or uses its Fling. + Lightning Storm (Costs 2 Actions). + The kraken uses Lightning Storm. + Ink Cloud (Costs 3 Actions). + While underwater, the kraken expels an ink cloud in a 60-foot radius. + The cloud spreads around corners, and that area is heavily obscured to + creatures other than the kraken. Each creature other than the kraken + that ends its turn there must succeed on a DC 23 Constitution saving + throw, taking 16 (3d10) poison damage on a failed save, or half as + much damage on a successful one. A strong current disperses the cloud, + which otherwise disappears at the end of the kraken's next turn. """ - name = "Kraken" - description = "Gargantuan monstrosity, chaotic evil" + name = 'Kraken' + description = 'Gargantuan monstrosity, chaotic evil' challenge_rating = 23 armor_class = 18 - skills = "" - senses = "Truesight 120 ft., Passive Perception 14" + skills = '' + senses = 'Truesight 120 ft., Passive Perception 14' languages = "understands Abyssal, Celestial, Infernal, and Primordial but can't speak, telepathy 120 ft." strength = Ability(30) dexterity = Ability(11) @@ -185,6 +238,11 @@ class Kraken(Monster): swim_speed = 60 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 472 - hit_dice = "27d20" + hit_dice = '27d20 + 189' + condition_immunities = 'frightened, paralyzed' + damage_immunities = 'lightning, bludgeoning, piercing, and slashing from nonmagical weapons' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_l.py b/dungeonsheets/monsters/monsters_l.py index 043391a..cd2e5df 100644 --- a/dungeonsheets/monsters/monsters_l.py +++ b/dungeonsheets/monsters/monsters_l.py @@ -10,12 +10,16 @@ from dungeonsheets.stats import Ability class Lamia(Monster): """ + Innate Spellcasting. The lamia's innate spellcasting ability is Charisma (spell save DC 13). It can innately cast the following spells, requiring no material components. At will: disguise self (any humanoid form), major image 3/day each: charm person, mirror image, scrying, suggestion 1/day: geas + + # Actions + Multiattack. The lamia makes two attacks: one with its claws and one with its dagger or Intoxicating Touch. @@ -31,13 +35,13 @@ class Lamia(Monster): target has disadvantage on Wisdom saving throws and all ability checks. """ - name = "Lamia" - description = "Large monstrosity, chaotic evil" + name = 'Lamia' + description = 'Large monstrosity, chaotic evil' challenge_rating = 4 armor_class = 13 - skills = "Deception +7, Insight +4, Stealth +3" - senses = "Darkvision 60 ft., Passive Perception 12" - languages = "Abyssal, Common" + skills = 'Deception +7, Insight +4, Stealth +3' + senses = 'Darkvision 60 ft., Passive Perception 12' + languages = 'Abyssal, Common' strength = Ability(16) dexterity = Ability(13) constitution = Ability(15) @@ -48,13 +52,19 @@ class Lamia(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 97 - hit_dice = "13d10" + hit_dice = '13d10 + 26' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Lemure(Monster): """ + Devil's Sight. Magical darkness doesn't impede the lemure's darkvision. Hellish Rejuvenation. @@ -62,16 +72,19 @@ class Lemure(Monster): hit points in 1d10 days unless it is killed by a good-aligned creature with a bless spell cast on that creature or its remains are sprinkled with holy water. + + # Actions + Fist. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 2 (1d4) bludgeoning damage. """ - name = "Lemure" - description = "Medium fiend, lawful evil" + name = 'Lemure' + description = 'Medium fiend, lawful evil' challenge_rating = 0 armor_class = 7 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 10" + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 10' languages = "understands infernal but can't speak" strength = Ability(10) dexterity = Ability(5) @@ -83,13 +96,19 @@ class Lemure(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 13 - hit_dice = "3d8" + hit_dice = '3d8 + 0' + condition_immunities = 'charmed, frightened, poisoned' + damage_immunities = 'fire, poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Lich(Monster): """ + Legendary Resistance. If the lich fails a saving throw, it can choose to succeed instead. Rejuvenation. @@ -97,51 +116,57 @@ class Lich(Monster): days, regaining all its hit points and becoming active again. The new body appears within 5 feet of the phylactery. Spellcasting. - The lich is an 18th-level spellcaster. Its spellcasting ability is - Intelligence (spell save DC 20, +12 to hit with spell attacks). The - lich has the following wizard spells prepared: - - - - - Cantrips (at will): mage hand, prestidigitation, ray of frost - - - 1st level (4 slots): detect magic, magic missile, shield, - thunderwave - - - 2nd level (3 slots): acid arrow, detect thoughts, invisibility, - mirror image - - - 3rd level (3 slots): animate dead, counterspell, dispel magic, - fireball - - - 4th level (3 slots): blight, dimension door - - - 5th level (3 slots): cloudkill, scrying - - - 6th level (1 slot): disintegrate, globe of invulnerability - - - 7th level (1 slot): finger of death, plane shift - - - 8th level (1 slot): dominate monster, power word stun - - - 9th level (1 slot): power word kill + The lich is an 18th-level spellcaster. Its spellcasting ability is Intelligence (spell save DC 20, +12 to hit with spell attacks). The lich has the following wizard spells prepared: + + - Cantrips (at will): mage hand, prestidigitation, ray of frost + - 1st level (4 slots): detect magic, magic missile, shield, thunderwave + - 2nd level (3 slots): acid arrow, detect thoughts, invisibility, mirror image + - 3rd level (3 slots): animate dead, counterspell, dispel magic, fireball + - 4th level (3 slots): blight, dimension door + - 5th level (3 slots): cloudkill, scrying + - 6th level (1 slot): disintegrate, globe of invulnerability + - 7th level (1 slot): finger of death, plane shift + - 8th level (1 slot): dominate monster, power word stun + - 9th level (1 slot): power word kill Turn Resistance. The lich has advantage on saving throws against any effect that turns undead. + + # Actions + Paralyzing Touch. Melee Spell Attack: +12 to hit, reach 5 ft., one creature. Hit: 10 (3d6) cold damage. The target must succeed on a DC 18 Constitution saving throw or be paralyzed for 1 minute. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. + + # Legendary Actions + + Cantrip. + The lich casts a cantrip. + Paralyzing Touch (Costs 2 Actions). + The lich uses its Paralyzing Touch. + Frightening Gaze (Costs 2 Actions). + The lich fixes its gaze on one creature it can see within 10 feet of + it. The target must succeed on a DC 18 Wisdom saving throw against + this magic or become frightened for 1 minute. The frightened target + can repeat the saving throw at the end of each of its turns, ending + the effect on itself on a success. If a target's saving throw is + successful or the effect ends for it, the target is immune to the + lich's gaze for the next 24 hours. + Disrupt Life (Costs 3 Actions). + Each living creature within 20 feet of the lich must make a DC 18 + Constitution saving throw against this magic, taking 21 (6d6) necrotic + damage on a failed save, or half as much damage on a successful one. """ - name = "Lich" - description = "Medium undead, any evil alignment" + name = 'Lich' + description = 'Medium undead, any evil alignment' challenge_rating = 21 armor_class = 17 - skills = "Arcana +18, History +12, Insight +9, Perception +9" - senses = "Truesight 120 ft., Passive Perception 19" - languages = "Common plus up to five other languages" + skills = 'Arcana +18, History +12, Insight +9, Perception +9' + senses = 'Truesight 120 ft., Passive Perception 19' + languages = 'Common plus up to five other languages' strength = Ability(11) dexterity = Ability(16) constitution = Ability(16) @@ -152,13 +177,19 @@ class Lich(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 135 - hit_dice = "18d8" - spells = ["mage hand", "prestidigitation", "ray of frost", "detect magic", "magic missile", "shield", "thunderwave", "acid arrow", "detect thoughts", "invisibility", "mirror image", "animate dead", "counterspell", "dispel magic", "fireball", "blight", "dimension door", "cloudkill", "scrying", "disintegrate", "globe of invulnerability", "finger of death", "plane shift", "dominate monster", "power word stun", "power word kill"] + hit_dice = '18d8 + 54' + condition_immunities = 'charmed, exhaustion, frightened, paralyzed, poisoned' + damage_immunities = 'poison, bludgeoning, piercing, and slashing from nonmagical weapons' + damage_resistances = 'cold' + damage_vulnerabilities = '' + spells = ['mage hand', 'prestidigitation', 'ray of frost', 'detect magic', 'magic missile', 'shield', 'thunderwave', 'acid arrow', 'detect thoughts', 'invisibility', 'mirror image', 'animate dead', 'counterspell', 'dispel magic', 'fireball', 'blight', 'dimension door', 'cloudkill', 'scrying', 'disintegrate', 'globe of invulnerability', 'finger of death', 'plane shift', 'dominate monster', 'power word stun', 'power word kill'] class Lion(Monster): """ + Keen Smell. The lion has advantage on Wisdom (Perception) checks that rely on smell. @@ -173,6 +204,9 @@ class Lion(Monster): prone, the lion can make one bite attack against it as a bonus action. Running Leap. With a 10-foot running start, the lion can long jump up to 25 ft.. + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d8 + 3) piercing damage. @@ -180,13 +214,13 @@ class Lion(Monster): Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 6 (1d6 + 3) slashing damage. """ - name = "Lion" - description = "Large beast, unaligned" + name = 'Lion' + description = 'Large beast, unaligned' challenge_rating = 1 armor_class = 12 - skills = "Perception +3, Stealth +6" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3, Stealth +6' + senses = 'Passive Perception 13' + languages = '' strength = Ability(17) dexterity = Ability(15) constitution = Ability(13) @@ -197,24 +231,32 @@ class Lion(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 26 - hit_dice = "4d10" + hit_dice = '4d10 + 4' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Lizard(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +0 to hit, reach 5 ft., one target. Hit: 1 piercing damage. """ - name = "Lizard" - description = "Tiny beast, unaligned" + name = 'Lizard' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 10 - skills = "" - senses = "Darkvision 30 ft., Passive Perception 9" - languages = "" + skills = '' + senses = 'Darkvision 30 ft., Passive Perception 9' + languages = '' strength = Ability(2) dexterity = Ability(11) constitution = Ability(10) @@ -225,15 +267,24 @@ class Lizard(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 20 + burrow_speed = 0 hp_max = 2 - hit_dice = "1d4" + hit_dice = '1d4 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Lizardfolk(Monster): """ + Hold Breath. The lizardfolk can hold its breath for 15 minutes. + + # Actions + Multiattack. The lizardfolk makes two melee attacks, each one with a different weapon. @@ -250,13 +301,13 @@ class Lizardfolk(Monster): Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + 2) piercing damage. """ - name = "Lizardfolk" - description = "Medium humanoid, neutral" + name = 'Lizardfolk' + description = 'Medium humanoid, neutral' challenge_rating = 0.5 armor_class = 15 - skills = "Perception +3, Stealth +4, Survival +5" - senses = "Passive Perception 13" - languages = "Draconic" + skills = 'Perception +3, Stealth +4, Survival +5' + senses = 'Passive Perception 13' + languages = 'Draconic' strength = Ability(15) dexterity = Ability(10) constitution = Ability(13) @@ -267,6 +318,11 @@ class Lizardfolk(Monster): swim_speed = 30 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "4d8" + hit_dice = '4d8 + 4' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_m.py b/dungeonsheets/monsters/monsters_m.py index 68eba2e..4ddb981 100644 --- a/dungeonsheets/monsters/monsters_m.py +++ b/dungeonsheets/monsters/monsters_m.py @@ -10,35 +10,30 @@ from dungeonsheets.stats import Ability class Mage(Monster): """ + Spellcasting. - The mage is a 9th-level spellcaster. Its spellcasting ability is - Intelligence (spell save DC 14, +6 to hit with spell attacks). The - mage has the following wizard spells prepared: - - - - - Cantrips (at will): fire bolt, light, mage hand, prestidigitation - - - 1st level (4 slots): detect magic, mage armor, magic missile, shield - - - 2nd level (3 slots): misty step, suggestion - - - 3rd level (3 slots): counterspell, fireball, fly - - - 4th level (3 slots): greater invisibility, ice storm - - - 5th level (1 slot): cone of cold + The mage is a 9th-level spellcaster. Its spellcasting ability is Intelligence (spell save DC 14, +6 to hit with spell attacks). The mage has the following wizard spells prepared: + + - Cantrips (at will): fire bolt, light, mage hand, prestidigitation + - 1st level (4 slots): detect magic, mage armor, magic missile, shield + - 2nd level (3 slots): misty step, suggestion + - 3rd level (3 slots): counterspell, fireball, fly + - 4th level (3 slots): greater invisibility, ice storm + - 5th level (1 slot): cone of cold + + # Actions + Dagger. Melee or Ranged Weapon Attack: +5 to hit, reach 5 ft. or range 20/60 ft., one target. Hit: 4 (1d4 + 2) piercing damage. """ - name = "Mage" - description = "Medium humanoid, any alignment" + name = 'Mage' + description = 'Medium humanoid, any alignment' challenge_rating = 6 armor_class = 12 - skills = "Arcana +6, History +6" - senses = "Passive Perception 11" - languages = "any four languages" + skills = 'Arcana +6, History +6' + senses = 'Passive Perception 11' + languages = 'any four languages' strength = Ability(9) dexterity = Ability(14) constitution = Ability(11) @@ -49,13 +44,19 @@ class Mage(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 40 - hit_dice = "9d8" - spells = ["fire bolt", "light", "mage hand", "prestidigitation", "detect magic", "mage armor", "magic missile", "shield", "misty step", "suggestion", "counterspell", "fireball", "fly", "greater invisibility", "ice storm", "cone of cold"] + hit_dice = '9d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' + spells = ['fire bolt', 'light', 'mage hand', 'prestidigitation', 'detect magic', 'mage armor', 'magic missile', 'shield', 'misty step', 'suggestion', 'counterspell', 'fireball', 'fly', 'greater invisibility', 'ice storm', 'cone of cold'] class MagmaMephit(Monster): """ + Death Burst. When the mephit dies, it explodes in a burst of lava. Each creature within 5 ft. of it must make a DC 11 Dexterity saving throw, taking 7 @@ -67,6 +68,9 @@ class MagmaMephit(Monster): Innate Spellcasting. The mephit can innately cast heat metal (spell save DC 10), requiring no material components. Its innate spellcasting ability is Charisma. + + # Actions + Claws. Melee Weapon Attack: +3 to hit, reach 5 ft ., one creature. Hit: 3 (1d4 + 1) slashing damage plus 2 (1d4) fire damage. @@ -81,13 +85,13 @@ class MagmaMephit(Monster): other mephits. It remains for 1 minute, until it or its summoner dies, or until its summoner dismisses it as an action. """ - name = "Magma Mephit" - description = "Small elemental, neutral evil" + name = 'Magma Mephit' + description = 'Small elemental, neutral evil' challenge_rating = 0.5 armor_class = 11 - skills = "Stealth +3" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Ignan, Terran" + skills = 'Stealth +3' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Ignan, Terran' strength = Ability(8) dexterity = Ability(12) constitution = Ability(12) @@ -98,13 +102,19 @@ class MagmaMephit(Monster): swim_speed = 0 fly_speed = 30 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "5d6" + hit_dice = '5d6 + 5' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = '' + damage_vulnerabilities = 'cold' spells = [] class Magmin(Monster): """ + Death Burst. When the magmin dies, it explodes in a burst of fire and magma. Each creature within 10 ft. of it must make a DC 11 Dexterity saving throw, @@ -115,19 +125,22 @@ class Magmin(Monster): As a bonus action, the magmin can set itself ablaze or extinguish its flames. While ablaze, the magmin sheds bright light in a 10-foot radius and dim light for an additional 10 ft. + + # Actions + Touch. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 7 (2d6) fire damage. If the target is a creature or a flammable object, it ignites. Until a target takes an action to douse the fire, the target takes 3 (1d6) fire damage at the end of each of its turns. """ - name = "Magmin" - description = "Small elemental, chaotic neutral" + name = 'Magmin' + description = 'Small elemental, chaotic neutral' challenge_rating = 0.5 armor_class = 14 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Ignan" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Ignan' strength = Ability(7) dexterity = Ability(15) constitution = Ability(12) @@ -138,19 +151,28 @@ class Magmin(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 9 - hit_dice = "2d6" + hit_dice = '2d6 + 2' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = 'bludgeoning, piercing, and slashing from nonmagical weapons' + damage_vulnerabilities = '' spells = [] class Mammoth(Monster): """ + Trampling Charge. If the mammoth moves at least 20 ft. straight toward a creature and then hits it with a gore attack on the same turn, that target must succeed on a DC 18 Strength saving throw or be knocked prone. If the target is prone, the mammoth can make one stomp attack against it as a bonus action. + + # Actions + Gore. Melee Weapon Attack: +10 to hit, reach 10 ft., one target. Hit: 25 (4d8 + 7) piercing damage. @@ -158,13 +180,13 @@ class Mammoth(Monster): Melee Weapon Attack: +10 to hit, reach 5 ft., one prone creature. Hit: 29 (4d10 + 7) bludgeoning damage. """ - name = "Mammoth" - description = "Huge beast, unaligned" + name = 'Mammoth' + description = 'Huge beast, unaligned' challenge_rating = 6 armor_class = 13 - skills = "" - senses = "Passive Perception 10" - languages = "" + skills = '' + senses = 'Passive Perception 10' + languages = '' strength = Ability(24) dexterity = Ability(9) constitution = Ability(21) @@ -175,16 +197,25 @@ class Mammoth(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 126 - hit_dice = "11d12" + hit_dice = '11d12 + 55' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Manticore(Monster): """ + Tail Spike Regrowth. The manticore has twenty-four tail spikes. Used spikes regrow when the manticore finishes a long rest. + + # Actions + Multiattack. The manticore makes three attacks: one with its bite and two with its claws or three with its tail spikes. @@ -198,13 +229,13 @@ class Manticore(Monster): Ranged Weapon Attack: +5 to hit, range 100/200 ft., one target. Hit: 7 (1d8 + 3) piercing damage. """ - name = "Manticore" - description = "Large monstrosity, lawful evil" + name = 'Manticore' + description = 'Large monstrosity, lawful evil' challenge_rating = 3 armor_class = 14 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 11" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 11' + languages = '' strength = Ability(17) dexterity = Ability(16) constitution = Ability(17) @@ -215,13 +246,19 @@ class Manticore(Monster): swim_speed = 0 fly_speed = 50 climb_speed = 0 + burrow_speed = 0 hp_max = 68 - hit_dice = "8d10" + hit_dice = '8d10 + 24' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Marilith(Monster): """ + Magic Resistance. The marilith has advantage on saving throws against spells and other magical effects. @@ -229,6 +266,9 @@ class Marilith(Monster): The marilith's weapon attacks are magical. Reactive. The marilith can take one reaction on every turn in combat. + + # Actions + Multiattack. The marilith can make seven attacks: six with its longswords and one with its tail. @@ -254,14 +294,21 @@ class Marilith(Monster): summoner, acts as an ally of its summoner, and can't summon other demons. It remains for 1 minute, until it or its summoner dies, or until its summoner dismisses it as an action. + + # Reactions + + Parry. + The marilith adds 5 to its AC against one melee attack that would hit + it. To do so, the marilith must see the attacker and be wielding a + melee weapon. """ - name = "Marilith" - description = "Large fiend, chaotic evil" + name = 'Marilith' + description = 'Large fiend, chaotic evil' challenge_rating = 16 armor_class = 18 - skills = "" - senses = "Truesight 120 ft., Passive Perception 13" - languages = "Abyssal, telepathy 120 ft." + skills = '' + senses = 'Truesight 120 ft., Passive Perception 13' + languages = 'Abyssal, telepathy 120 ft.' strength = Ability(18) dexterity = Ability(20) constitution = Ability(20) @@ -272,28 +319,37 @@ class Marilith(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 189 - hit_dice = "18d10" + hit_dice = '18d10 + 90' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Mastiff(Monster): """ + Keen Hearing and Smell. The mastiff has advantage on Wisdom (Perception) checks that rely on hearing or smell. + + # Actions + Bite. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 4 (1d6 + 1) piercing damage. If the target is a creature, it must succeed on a DC 11 Strength saving throw or be knocked prone. """ - name = "Mastiff" - description = "Medium beast, unaligned" + name = 'Mastiff' + description = 'Medium beast, unaligned' challenge_rating = 0.125 armor_class = 12 - skills = "Perception +3" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3' + senses = 'Passive Perception 13' + languages = '' strength = Ability(13) dexterity = Ability(14) constitution = Ability(12) @@ -304,13 +360,19 @@ class Mastiff(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 5 - hit_dice = "1d8" + hit_dice = '1d8 + 1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Medusa(Monster): """ + Petrifying Gaze. When a creature that can see the medusa's eyes starts its turn within 30 ft. of the medusa, the medusa can force it to make a DC 14 @@ -332,6 +394,9 @@ class Medusa(Monster): If the medusa sees itself reflected on a polished surface within 30 ft. of it and in an area of bright light, the medusa is, due to its curse, affected by its own gaze. + + # Actions + Multiattack. The medusa makes either three melee attacks--one with its snake hair and two with its shortsword--or two ranged attacks with its longbow. @@ -345,13 +410,13 @@ class Medusa(Monster): Ranged Weapon Attack: +5 to hit, range 150/600 ft., one target. Hit: 6 (1d8 + 2) piercing damage plus 7 (2d6) poison damage. """ - name = "Medusa" - description = "Medium monstrosity, lawful evil" + name = 'Medusa' + description = 'Medium monstrosity, lawful evil' challenge_rating = 6 armor_class = 15 - skills = "Deception +5, Insight +4, Perception +4, Stealth +5" - senses = "Darkvision 60 ft., Passive Perception 14" - languages = "Common" + skills = 'Deception +5, Insight +4, Perception +4, Stealth +5' + senses = 'Darkvision 60 ft., Passive Perception 14' + languages = 'Common' strength = Ability(10) dexterity = Ability(15) constitution = Ability(16) @@ -362,27 +427,36 @@ class Medusa(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 127 - hit_dice = "17d8" + hit_dice = '17d8 + 51' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Merfolk(Monster): """ + Amphibious. The merfolk can breathe air and water. + + # Actions + Spear. Melee or Ranged Weapon Attack: +2 to hit, reach 5 ft. or range 20/60 ft., one target. Hit: 3 (1d6) piercing damage, or 4 (1d8) piercing damage if used with two hands to make a melee attack. """ - name = "Merfolk" - description = "Medium humanoid, neutral" + name = 'Merfolk' + description = 'Medium humanoid, neutral' challenge_rating = 0.125 armor_class = 11 - skills = "Perception +2" - senses = "Passive Perception 12" - languages = "Aquan, Common" + skills = 'Perception +2' + senses = 'Passive Perception 12' + languages = 'Aquan, Common' strength = Ability(10) dexterity = Ability(13) constitution = Ability(12) @@ -393,15 +467,24 @@ class Merfolk(Monster): swim_speed = 40 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 11 - hit_dice = "2d8" + hit_dice = '2d8 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Merrow(Monster): """ + Amphibious. The merrow can breathe air and water. + + # Actions + Multiattack. The merrow makes two attacks: one with its bite and one with its claws or harpoon. @@ -417,13 +500,13 @@ class Merrow(Monster): Huge or smaller creature, it must succeed on a Strength contest against the merrow or be pulled up to 20 feet toward the merrow. """ - name = "Merrow" - description = "Large monstrosity, chaotic evil" + name = 'Merrow' + description = 'Large monstrosity, chaotic evil' challenge_rating = 2 armor_class = 13 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Abyssal, Aquan" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Abyssal, Aquan' strength = Ability(18) dexterity = Ability(10) constitution = Ability(15) @@ -434,13 +517,19 @@ class Merrow(Monster): swim_speed = 40 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 45 - hit_dice = "6d10" + hit_dice = '6d10 + 12' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Mimic(Monster): """ + Shapechanger. The mimic can use its action to polymorph into an object or back into its true, amorphous form. Its statistics are the same in each form. @@ -456,6 +545,9 @@ class Mimic(Monster): Grappler. The mimic has advantage on attack rolls against any creature grappled by it. + + # Actions + Pseudopod. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d8 + 3) bludgeoning damage. If the mimic is in object form, the target is @@ -464,13 +556,13 @@ class Mimic(Monster): Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d8 + 3) piercing damage plus 4 (1d8) acid damage. """ - name = "Mimic" - description = "Medium monstrosity, neutral" + name = 'Mimic' + description = 'Medium monstrosity, neutral' challenge_rating = 2 armor_class = 12 - skills = "Stealth +5" - senses = "Darkvision 60 ft., Passive Perception 11" - languages = "" + skills = 'Stealth +5' + senses = 'Darkvision 60 ft., Passive Perception 11' + languages = '' strength = Ability(17) dexterity = Ability(12) constitution = Ability(15) @@ -481,13 +573,19 @@ class Mimic(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 58 - hit_dice = "9d8" + hit_dice = '9d8 + 18' + condition_immunities = 'prone' + damage_immunities = 'acid' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Minotaur(Monster): """ + Charge. If the minotaur moves at least 10 ft. straight toward a target and then hits it with a gore attack on the same turn, the target takes an @@ -500,6 +598,9 @@ class Minotaur(Monster): At the start of its turn, the minotaur can gain advantage on all melee weapon attack rolls it makes during that turn, but attack rolls against it have advantage until the start of its next turn. + + # Actions + Greataxe. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 17 (2d12 + 4) slashing damage. @@ -507,13 +608,13 @@ class Minotaur(Monster): Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 13 (2d8 + 4) piercing damage. """ - name = "Minotaur" - description = "Large monstrosity, chaotic evil" + name = 'Minotaur' + description = 'Large monstrosity, chaotic evil' challenge_rating = 3 armor_class = 14 - skills = "Perception +7" - senses = "Darkvision 60 ft., Passive Perception 17" - languages = "Abyssal" + skills = 'Perception +7' + senses = 'Darkvision 60 ft., Passive Perception 17' + languages = 'Abyssal' strength = Ability(18) dexterity = Ability(11) constitution = Ability(16) @@ -524,19 +625,28 @@ class Minotaur(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 76 - hit_dice = "9d10" + hit_dice = '9d10 + 27' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class MinotaurSkeleton(Monster): """ + Charge. If the skeleton moves at least 10 feet straight toward a target and then hits it with a gore attack on the same turn, the target takes an extra 9 (2d8) piercing damage. If the target is a creature, it must succeed on a DC 14 Strength saving throw or be pushed up to 10 feet away and knocked prone. + + # Actions + Greataxe. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 17 (2d12 + 4) slashing damage. @@ -544,12 +654,12 @@ class MinotaurSkeleton(Monster): Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 13 (2d8 + 4) piercing damage. """ - name = "Minotaur Skeleton" - description = "Large undead, lawful evil" + name = 'Minotaur Skeleton' + description = 'Large undead, lawful evil' challenge_rating = 2 armor_class = 12 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 9" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 9' languages = "understands Abyssal but can't speak" strength = Ability(18) dexterity = Ability(11) @@ -561,30 +671,39 @@ class MinotaurSkeleton(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 67 - hit_dice = "9d10" + hit_dice = '9d10 + 18' + condition_immunities = 'exhaustion, poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = 'bludgeoning' spells = [] class Mule(Monster): """ + Beast of Burden. The mule is considered to be a Large animal for the purpose of determining its carrying capacity. Sure-Footed. The mule has advantage on Strength and Dexterity saving throws made against effects that would knock it prone. + + # Actions + Hooves. Melee Weapon Attack: +2 to hit, reach 5 ft., one target. Hit: 4 (1d4 + 2) bludgeoning damage. """ - name = "Mule" - description = "Medium beast, unaligned" + name = 'Mule' + description = 'Medium beast, unaligned' challenge_rating = 0.125 armor_class = 10 - skills = "" - senses = "Passive Perception 10" - languages = "" + skills = '' + senses = 'Passive Perception 10' + languages = '' strength = Ability(14) dexterity = Ability(10) constitution = Ability(13) @@ -595,13 +714,21 @@ class Mule(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 11 - hit_dice = "2d8" + hit_dice = '2d8 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Mummy(Monster): """ + + # Actions + Multiattack. The mummy can use its Dreadful Glare and makes one attack with its rotting fist. @@ -623,13 +750,13 @@ class Mummy(Monster): the saving throw is immune to the Dreadful Glare of all mummies (but not mummy lords) for the next 24 hours. """ - name = "Mummy" - description = "Medium undead, lawful evil" + name = 'Mummy' + description = 'Medium undead, lawful evil' challenge_rating = 3 armor_class = 11 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "the languages it knew in life" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'the languages it knew in life' strength = Ability(16) dexterity = Ability(8) constitution = Ability(15) @@ -640,13 +767,19 @@ class Mummy(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 58 - hit_dice = "9d8" + hit_dice = '9d8 + 18' + condition_immunities = 'charmed, exhaustion, frightened, paralyzed, poisoned' + damage_immunities = 'necrotic, poison' + damage_resistances = 'bludgeoning, piercing, and slashing from nonmagical weapons' + damage_vulnerabilities = 'fire' spells = [] class MummyLord(Monster): """ + Magic Resistance. The mummy lord has advantage on saving throws against spells and other magical effects. @@ -655,25 +788,18 @@ class MummyLord(Monster): intact, regaining all its hit points and becoming active again. The new body appears within 5 feet of the mummy lord's heart. Spellcasting. - The mummy lord is a 10th-level spellcaster. Its spellcasting ability - is Wisdom (spell save DC 17, +9 to hit with spell attacks). The mummy - lord has the following cleric spells prepared: - - + The mummy lord is a 10th-level spellcaster. Its spellcasting ability is Wisdom (spell save DC 17, +9 to hit with spell attacks). The mummy lord has the following cleric spells prepared: - Cantrips (at will): sacred flame, thaumaturgy - - 1st level (4 slots): command, guiding bolt, shield of faith - - 2nd level (3 slots): hold person, silence, spiritual weapon - - 3rd level (3 slots): animate dead, dispel magic - - 4th level (3 slots): divination, guardian of faith - - 5th level (2 slots): contagion, insect plague - - 6th level (1 slot): harm + + # Actions + Multiattack. The mummy can use its Dreadful Glare and makes one attack with its rotting fist. @@ -694,14 +820,41 @@ class MummyLord(Monster): 5 or more, it is also paralyzed for the same duration. A target that succeeds on the saving throw is immune to the Dreadful Glare of all mummies and mummy lords for the next 24 hours. + + # Legendary Actions + + Attack. + The mummy lord makes one attack with its rotting fist or uses its + Dreadful Glare. + Blinding Dust. + Blinding dust and sand swirls magically around the mummy lord. Each + creature within 5 feet of the mummy lord must succeed on a DC 16 + Constitution saving throw or be blinded until the end of the + creature's next turn. + Blasphemous Word (Costs 2 Actions). + The mummy lord utters a blasphemous word. Each non-undead creature + within 10 feet of the mummy lord that can hear the magical utterance + must succeed on a DC 16 Constitution saving throw or be stunned until + the end of the mummy lord's next turn. + Channel Negative Energy (Costs 2 Actions). + The mummy lord magically unleashes negative energy. Creatures within + 60 feet of the mummy lord, including ones behind barriers and around + corners, can't regain hit points until the end of the mummy lord's + next turn. + Whirlwind of Sand (Costs 2 Actions). + The mummy lord magically transforms into a whirlwind of sand, moves up + to 60 feet, and reverts to its normal form. While in whirlwind form, + the mummy lord is immune to all damage, and it can't be grappled, + petrified, knocked prone, restrained, or stunned. Equipment worn or + carried by the mummy lord remain in its possession. """ - name = "Mummy Lord" - description = "Medium undead, lawful evil" + name = 'Mummy Lord' + description = 'Medium undead, lawful evil' challenge_rating = 15 armor_class = 17 - skills = "History +5, Religion +5" - senses = "Darkvision 60 ft., Passive Perception 14" - languages = "the languages it knew in life" + skills = 'History +5, Religion +5' + senses = 'Darkvision 60 ft., Passive Perception 14' + languages = 'the languages it knew in life' strength = Ability(18) dexterity = Ability(10) constitution = Ability(17) @@ -712,6 +865,11 @@ class MummyLord(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 97 - hit_dice = "13d8" - spells = ["sacred flame", "thaumaturgy", "command", "guiding bolt", "shield of faith", "hold person", "silence", "spiritual weapon", "animate dead", "dispel magic", "divination", "guardian of faith", "contagion", "insect plague", "harm"] + hit_dice = '13d8 + 39' + condition_immunities = 'charmed, exhaustion, frightened, paralyzed, poisoned' + damage_immunities = 'necrotic, poison, bludgeoning, piercing, and slashing from nonmagical weapons' + damage_resistances = '' + damage_vulnerabilities = 'fire' + spells = ['sacred flame', 'thaumaturgy', 'command', 'guiding bolt', 'shield of faith', 'hold person', 'silence', 'spiritual weapon', 'animate dead', 'dispel magic', 'divination', 'guardian of faith', 'contagion', 'insect plague', 'harm'] diff --git a/dungeonsheets/monsters/monsters_n.py b/dungeonsheets/monsters/monsters_n.py index 09bb620..99f4f81 100644 --- a/dungeonsheets/monsters/monsters_n.py +++ b/dungeonsheets/monsters/monsters_n.py @@ -10,9 +10,13 @@ from dungeonsheets.stats import Ability class Nalfeshnee(Monster): """ + Magic Resistance. The nalfeshnee has advantage on saving throws against spells and other magical effects. + + # Actions + Multiattack. The nalfeshnee uses Horror Nimbus if it can. It then makes three attacks: one with its bite and two with its claws. @@ -44,13 +48,13 @@ class Nalfeshnee(Monster): demons. It remains for 1 minute, until it or its summoner dies, or until its summoner dismisses it as an action. """ - name = "Nalfeshnee" - description = "Large fiend, chaotic evil" + name = 'Nalfeshnee' + description = 'Large fiend, chaotic evil' challenge_rating = 13 armor_class = 18 - skills = "" - senses = "Truesight 120 ft., Passive Perception 11" - languages = "Abyssal, telepathy 120 ft." + skills = '' + senses = 'Truesight 120 ft., Passive Perception 11' + languages = 'Abyssal, telepathy 120 ft.' strength = Ability(21) dexterity = Ability(10) constitution = Ability(22) @@ -61,13 +65,19 @@ class Nalfeshnee(Monster): swim_speed = 0 fly_speed = 30 climb_speed = 0 + burrow_speed = 0 hp_max = 184 - hit_dice = "16d10" + hit_dice = '16d10 + 96' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class NightHag(Monster): """ + Innate Spellcasting. The hag's innate spellcasting ability is Charisma (spell save DC 14, +6 to hit with spell attacks). She can innately cast the following @@ -96,6 +106,9 @@ class NightHag(Monster): and only the night hag who crafted the bag can catch a soul with it. Crafting a soul bag takes 7 days and a humanoid sacrifice (whose flesh is used to make the bag). + + # Actions + Claws (Hag Form Only). Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 13 (2d8 + 4) slashing damage. @@ -120,13 +133,13 @@ class NightHag(Monster): soul bag. The reduction to the target's hit point maximum lasts until removed by the greater restoration spell or similar magic. """ - name = "Night Hag" - description = "Medium fiend, neutral evil" + name = 'Night Hag' + description = 'Medium fiend, neutral evil' challenge_rating = 5 armor_class = 17 - skills = "Deception +7, Insight +6, Perception +6, Stealth +6" - senses = "Darkvision 120 ft., Passive Perception 16" - languages = "Abyssal, Common, Infernal, Primordial" + skills = 'Deception +7, Insight +6, Perception +6, Stealth +6' + senses = 'Darkvision 120 ft., Passive Perception 16' + languages = 'Abyssal, Common, Infernal, Primordial' strength = Ability(18) dexterity = Ability(15) constitution = Ability(16) @@ -137,18 +150,27 @@ class NightHag(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 112 - hit_dice = "15d8" + hit_dice = '15d8 + 45' + condition_immunities = 'charmed' + damage_immunities = '' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Nightmare(Monster): """ + Confer Fire Resistance. The nightmare can grant resistance to fire damage to anyone riding it. Illumination. The nightmare sheds bright light in a 10-foot radius and dim light for an additional 10 feet. + + # Actions + Hooves. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 13 (2d8 + 4) bludgeoning damage plus 7 (2d6) fire damage. @@ -157,12 +179,12 @@ class Nightmare(Monster): magically enter the Ethereal Plane from the Material Plane, or vice versa. """ - name = "Nightmare" - description = "Large fiend, neutral evil" + name = 'Nightmare' + description = 'Large fiend, neutral evil' challenge_rating = 3 armor_class = 13 - skills = "" - senses = "Passive Perception 11" + skills = '' + senses = 'Passive Perception 11' languages = "understands Abyssal, Common, and Infernal but can't speak" strength = Ability(18) dexterity = Ability(15) @@ -174,24 +196,39 @@ class Nightmare(Monster): swim_speed = 0 fly_speed = 90 climb_speed = 0 + burrow_speed = 0 hp_max = 68 - hit_dice = "8d10" + hit_dice = '8d10 + 24' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Noble(Monster): """ + + # Actions + Rapier. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 5 (1d8 + 1) piercing damage. + + # Reactions + + Parry. + The noble adds 2 to its AC against one melee attack that would hit it. + To do so, the noble must see the attacker and be wielding a melee + weapon. """ - name = "Noble" - description = "Medium humanoid, any alignment" + name = 'Noble' + description = 'Medium humanoid, any alignment' challenge_rating = 0.125 armor_class = 15 - skills = "Deception +5, Insight +4, Persuasion +5" - senses = "Passive Perception 12" - languages = "any two languages" + skills = 'Deception +5, Insight +4, Persuasion +5' + senses = 'Passive Perception 12' + languages = 'any two languages' strength = Ability(11) dexterity = Ability(12) constitution = Ability(11) @@ -202,8 +239,13 @@ class Noble(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 9 - hit_dice = "2d8" + hit_dice = '2d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -227,13 +269,13 @@ class Nothic(Monster): it magically learns one fact or secret about the target. The target automatically wins if it is immune to being charmed. """ - name = "Nothic" - description = "Medium aberration, neutral evil" + name = 'Nothic' + description = 'Medium aberration, neutral evil' challenge_rating = 2.0 armor_class = 15 - skills = "Arcana +3, Insight +4, Perception +2, Stealth +5" - senses = "Truesight 120ft., Passive Perception 12" - languages = "Undercommon" + skills = 'Arcana +3, Insight +4, Perception +2, Stealth +5' + senses = 'Truesight 120ft., Passive Perception 12' + languages = 'Undercommon' strength = Ability(14) dexterity = Ability(16) constitution = Ability(16) @@ -245,5 +287,5 @@ class Nothic(Monster): fly_speed = 0 climb_speed = 0 hp_max = 45 - hit_dice = "6d8+18" + hit_dice = '6d8+18' spells = [] diff --git a/dungeonsheets/monsters/monsters_o.py b/dungeonsheets/monsters/monsters_o.py index 2f5f198..80247ca 100644 --- a/dungeonsheets/monsters/monsters_o.py +++ b/dungeonsheets/monsters/monsters_o.py @@ -10,23 +10,36 @@ from dungeonsheets.stats import Ability class OchreJelly(Monster): """ + Amorphous. The jelly can move through a space as narrow as 1 inch wide without squeezing. Spider Climb. The jelly can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check. + + # Actions + Pseudopod. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 9 (2d6 + 2) bludgeoning damage plus 3 (1d6) acid damage. + + # Reactions + + Split. + When a jelly that is Medium or larger is subjected to lightning or + slashing damage, it splits into two new jellies if it has at least 10 + hit points. Each new jelly has hit points equal to half the original + jelly's, rounded down. New jellies are one size smaller than the + original jelly. """ - name = "Ochre Jelly" - description = "Large ooze, unaligned" + name = 'Ochre Jelly' + description = 'Large ooze, unaligned' challenge_rating = 2 armor_class = 8 - skills = "" - senses = "Blindsight 60 ft. (blind beyond this radius), Passive Perception 8" - languages = "" + skills = '' + senses = 'Blindsight 60 ft. (blind beyond this radius), Passive Perception 8' + languages = '' strength = Ability(15) dexterity = Ability(6) constitution = Ability(14) @@ -37,13 +50,19 @@ class OchreJelly(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 10 + burrow_speed = 0 hp_max = 45 - hit_dice = "6d10" + hit_dice = '6d10 + 12' + condition_immunities = 'blinded, charmed, blinded, exhaustion, frightened, prone' + damage_immunities = 'lightning, slashing' + damage_resistances = 'acid' + damage_vulnerabilities = '' spells = [] class Octopus(Monster): """ + Hold Breath. While out of water, the octopus can hold its breath for 30 minutes. Underwater Camouflage. @@ -51,6 +70,9 @@ class Octopus(Monster): underwater. Water Breathing. The octopus can breathe only underwater. + + # Actions + Tentacles. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 1 bludgeoning damage, and the target is grappled (escape DC 10). Until @@ -62,13 +84,13 @@ class Octopus(Monster): significant current can disperse the ink. After releasing the ink, the octopus can use the Dash action as a bonus action. """ - name = "Octopus" - description = "Small beast, unaligned" + name = 'Octopus' + description = 'Small beast, unaligned' challenge_rating = 0 armor_class = 12 - skills = "Perception +2, Stealth +4" - senses = "Darkvision 30 ft., Passive Perception 12" - languages = "" + skills = 'Perception +2, Stealth +4' + senses = 'Darkvision 30 ft., Passive Perception 12' + languages = '' strength = Ability(4) dexterity = Ability(15) constitution = Ability(11) @@ -79,13 +101,21 @@ class Octopus(Monster): swim_speed = 30 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 3 - hit_dice = "1d6" + hit_dice = '1d6 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Ogre(Monster): """ + + # Actions + Greatclub. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 13 (2d8 + 4) bludgeoning damage. @@ -93,13 +123,13 @@ class Ogre(Monster): Melee or Ranged Weapon Attack: +6 to hit, reach 5 ft. or range 30/120 ft., one target. Hit: 11 (2d6 + 4) piercing damage. """ - name = "Ogre" - description = "Large giant, chaotic evil" + name = 'Ogre' + description = 'Large giant, chaotic evil' challenge_rating = 2 armor_class = 11 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 8" - languages = "Common, Giant" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 8' + languages = 'Common, Giant' strength = Ability(19) dexterity = Ability(8) constitution = Ability(16) @@ -110,28 +140,37 @@ class Ogre(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 59 - hit_dice = "7d10" + hit_dice = '7d10 + 21' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class OgreZombie(Monster): """ + Undead Fortitude. If damage reduces the zombie to 0 hit points, it must make a Constitution saving throw with a DC of 5+the damage taken, unless the damage is radiant or from a critical hit. On a success, the zombie drops to 1 hit point instead. + + # Actions + Morningstar. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 13 (2d8 + 4) bludgeoning damage. """ - name = "Ogre Zombie" - description = "Large undead, neutral evil" + name = 'Ogre Zombie' + description = 'Large undead, neutral evil' challenge_rating = 2 armor_class = 8 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 8" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 8' languages = "understands Common and Giant but can't speak" strength = Ability(19) dexterity = Ability(6) @@ -143,13 +182,19 @@ class OgreZombie(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 85 - hit_dice = "9d10" + hit_dice = '9d10 + 36' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Oni(Monster): """ + Innate Spellcasting. The oni's innate spellcasting ability is Charisma (spell save DC 13). The oni can innately cast the following spells, requiring no material @@ -165,6 +210,9 @@ class Oni(Monster): Regeneration. The oni regains 10 hit points at the start of its turn if it has at least 1 hit point. + + # Actions + Multiattack. The oni makes two attacks, either with its claws or its glaive. Claw (Oni Form Only). @@ -182,13 +230,13 @@ class Oni(Monster): humanoid form. If the oni dies, it reverts to its true form, and its glaive reverts to its normal size. """ - name = "Oni" - description = "Large giant, lawful evil" + name = 'Oni' + description = 'Large giant, lawful evil' challenge_rating = 7 armor_class = 16 - skills = "Arcana +5, Deception +8, Perception +4" - senses = "Darkvision 60 ft., Passive Perception 14" - languages = "Common, Giant" + skills = 'Arcana +5, Deception +8, Perception +4' + senses = 'Darkvision 60 ft., Passive Perception 14' + languages = 'Common, Giant' strength = Ability(19) dexterity = Ability(11) constitution = Ability(16) @@ -199,16 +247,25 @@ class Oni(Monster): swim_speed = 0 fly_speed = 30 climb_speed = 0 + burrow_speed = 0 hp_max = 110 - hit_dice = "13d10" + hit_dice = '13d10 + 39' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Orc(Monster): """ + Aggressive. As a bonus action, the orc can move up to its speed toward a hostile creature that it can see. + + # Actions + Greataxe. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 9 (1d12 + 3) slashing damage. @@ -216,13 +273,13 @@ class Orc(Monster): Melee or Ranged Weapon Attack: +5 to hit, reach 5 ft. or range 30/120 ft., one target. Hit: 6 (1d6 + 3) piercing damage. """ - name = "Orc" - description = "Medium humanoid, chaotic evil" + name = 'Orc' + description = 'Medium humanoid, chaotic evil' challenge_rating = 0.5 armor_class = 13 - skills = "Intimidation +2" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Common, Orc" + skills = 'Intimidation +2' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Common, Orc' strength = Ability(16) dexterity = Ability(12) constitution = Ability(16) @@ -233,18 +290,27 @@ class Orc(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 15 - hit_dice = "2d8" + hit_dice = '2d8 + 6' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Otyugh(Monster): """ + Limited Telepathy. The otyugh can magically transmit simple messages and images to any creature within 120 ft. of it that can understand a language. This form of telepathy doesn't allow the receiving creature to telepathically respond. + + # Actions + Multiattack. The otyugh makes three attacks: one with its bite and two with its tentacles. @@ -270,13 +336,13 @@ class Otyugh(Monster): end of the otyugh's next turn. On a successful save, the target takes half the bludgeoning damage and isn't stunned. """ - name = "Otyugh" - description = "Large aberration, neutral" + name = 'Otyugh' + description = 'Large aberration, neutral' challenge_rating = 5 armor_class = 14 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 11" - languages = "Otyugh" + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 11' + languages = 'Otyugh' strength = Ability(16) dexterity = Ability(11) constitution = Ability(19) @@ -287,30 +353,39 @@ class Otyugh(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 114 - hit_dice = "12d10" + hit_dice = '12d10 + 48' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Owl(Monster): """ + Flyby. The owl doesn't provoke opportunity attacks when it flies out of an enemy's reach. Keen Hearing and Sight. The owl has advantage on Wisdom (Perception) checks that rely on hearing or sight. + + # Actions + Talons. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 1 slashing damage. """ - name = "Owl" - description = "Tiny beast, unaligned" + name = 'Owl' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 11 - skills = "Perception +3, Stealth +3" - senses = "Darkvision 120 ft., Passive Perception 13" - languages = "" + skills = 'Perception +3, Stealth +3' + senses = 'Darkvision 120 ft., Passive Perception 13' + languages = '' strength = Ability(3) dexterity = Ability(13) constitution = Ability(8) @@ -321,16 +396,25 @@ class Owl(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 1 - hit_dice = "1d4" + hit_dice = '1d4 + -1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Owlbear(Monster): """ + Keen Sight and Smell. The owlbear has advantage on Wisdom (Perception) checks that rely on sight or smell. + + # Actions + Multiattack. The owlbear makes two attacks: one with its beak and one with its claws. @@ -341,13 +425,13 @@ class Owlbear(Monster): Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 14 (2d8 + 5) slashing damage. """ - name = "Owlbear" - description = "Large monstrosity, unaligned" + name = 'Owlbear' + description = 'Large monstrosity, unaligned' challenge_rating = 3 armor_class = 13 - skills = "Perception +3" - senses = "Darkvision 60 ft., Passive Perception 13" - languages = "" + skills = 'Perception +3' + senses = 'Darkvision 60 ft., Passive Perception 13' + languages = '' strength = Ability(20) dexterity = Ability(12) constitution = Ability(17) @@ -358,6 +442,11 @@ class Owlbear(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 59 - hit_dice = "7d10" + hit_dice = '7d10 + 21' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_p.py b/dungeonsheets/monsters/monsters_p.py index 2b20361..6771de8 100644 --- a/dungeonsheets/monsters/monsters_p.py +++ b/dungeonsheets/monsters/monsters_p.py @@ -10,6 +10,7 @@ from dungeonsheets.stats import Ability class Panther(Monster): """ + Keen Smell. The panther has advantage on Wisdom (Perception) checks that rely on smell. @@ -19,6 +20,9 @@ class Panther(Monster): succeed on a DC 12 Strength saving throw or be knocked prone. If the target is prone, the panther can make one bite attack against it as a bonus action. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + 2) piercing damage. @@ -26,13 +30,13 @@ class Panther(Monster): Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 4 (1d4 + 2) slashing damage. """ - name = "Panther" - description = "Medium beast, unaligned" + name = 'Panther' + description = 'Medium beast, unaligned' challenge_rating = 0.25 armor_class = 12 - skills = "Perception +4, Stealth +6" - senses = "Passive Perception 14" - languages = "" + skills = 'Perception +4, Stealth +6' + senses = 'Passive Perception 14' + languages = '' strength = Ability(14) dexterity = Ability(15) constitution = Ability(10) @@ -43,23 +47,31 @@ class Panther(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 40 + burrow_speed = 0 hp_max = 13 - hit_dice = "3d8" + hit_dice = '3d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Pegasus(Monster): """ + + # Actions + Hooves. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 11 (2d6 + 4) bludgeoning damage. """ - name = "Pegasus" - description = "Large celestial, chaotic good" + name = 'Pegasus' + description = 'Large celestial, chaotic good' challenge_rating = 2 armor_class = 12 - skills = "Perception +6" - senses = "Passive Perception 16" + skills = 'Perception +6' + senses = 'Passive Perception 16' languages = "understands Celestial, Common, Elvish, and Sylvan but can't speak" strength = Ability(18) dexterity = Ability(15) @@ -71,13 +83,19 @@ class Pegasus(Monster): swim_speed = 0 fly_speed = 90 climb_speed = 0 + burrow_speed = 0 hp_max = 59 - hit_dice = "7d10" + hit_dice = '7d10 + 21' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class PhaseSpider(Monster): """ + Ethereal Jaunt. As a bonus action, the spider can magically shift from the Material Plane to the Ethereal Plane, or vice versa. @@ -86,6 +104,9 @@ class PhaseSpider(Monster): ceilings, without needing to make an ability check. Web Walker. The spider ignores movement restrictions caused by webbing. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 7 (1d10 + 2) piercing damage, and the target must make a DC 11 @@ -95,13 +116,13 @@ class PhaseSpider(Monster): for 1 hour, even after regaining hit points, and is paralyzed while poisoned in this way. """ - name = "Phase Spider" - description = "Large monstrosity, unaligned" + name = 'Phase Spider' + description = 'Large monstrosity, unaligned' challenge_rating = 3 armor_class = 13 - skills = "Stealth +6" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "" + skills = 'Stealth +6' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = '' strength = Ability(15) dexterity = Ability(15) constitution = Ability(12) @@ -112,13 +133,19 @@ class PhaseSpider(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 30 + burrow_speed = 0 hp_max = 32 - hit_dice = "5d10" + hit_dice = '5d10 + 5' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class PitFiend(Monster): """ + Fear Aura. Any creature hostile to the pit fiend that starts its turn within 20 feet of the pit fiend must make a DC 21 Wisdom saving throw, unless @@ -139,6 +166,9 @@ class PitFiend(Monster): At will: detect magic, fireball 3/day each: hold monster, wall of fire + + # Actions + Multiattack. The pit fiend makes four attacks: one with its bite, one with its claw, one with its mace, and one with its tail. @@ -160,13 +190,13 @@ class PitFiend(Monster): Melee Weapon Attack: +14 to hit, reach 10ft., one target. Hit: 24 (3d1O + 8) bludgeoning damage. """ - name = "Pit Fiend" - description = "Large fiend, lawful evil" + name = 'Pit Fiend' + description = 'Large fiend, lawful evil' challenge_rating = 20 armor_class = 19 - skills = "" - senses = "Truesight 120 ft., Passive Perception 14" - languages = "Infernal, telepathy 120 ft." + skills = '' + senses = 'Truesight 120 ft., Passive Perception 14' + languages = 'Infernal, telepathy 120 ft.' strength = Ability(26) dexterity = Ability(14) constitution = Ability(24) @@ -177,13 +207,19 @@ class PitFiend(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 300 - hit_dice = "24d10" + hit_dice = '24d10 + 168' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Planetar(Monster): """ + Angelic Weapons. The planetar's weapon attacks are magical. When the planetar hits with any weapon, the weapon deals an extra 5d8 radiant damage (included in @@ -204,6 +240,9 @@ class Planetar(Monster): Magic Resistance. The planetar has advantage on saving throws against spells and other magical effects. + + # Actions + Multiattack. The planetar makes two melee attacks. Greatsword. @@ -214,13 +253,13 @@ class Planetar(Monster): (6d8 + 3) hit points and is freed from any curse, disease, poison, blindness, or deafness. """ - name = "Planetar" - description = "Large celestial, lawful good" + name = 'Planetar' + description = 'Large celestial, lawful good' challenge_rating = 16 armor_class = 19 - skills = "Perception +11" - senses = "Truesight 120 ft., Passive Perception 21" - languages = "all, telepathy 120 ft." + skills = 'Perception +11' + senses = 'Truesight 120 ft., Passive Perception 21' + languages = 'all, telepathy 120 ft.' strength = Ability(24) dexterity = Ability(20) constitution = Ability(24) @@ -231,26 +270,35 @@ class Planetar(Monster): swim_speed = 0 fly_speed = 120 climb_speed = 0 + burrow_speed = 0 hp_max = 200 - hit_dice = "16d10" + hit_dice = '16d10 + 112' + condition_immunities = 'charmed, exhaustion, frightened' + damage_immunities = '' + damage_resistances = 'radiant' + damage_vulnerabilities = '' spells = [] class Plesiosaurus(Monster): """ + Hold Breath. The plesiosaurus can hold its breath for 1 hour. + + # Actions + Bite. Melee Weapon Attack: +6 to hit, reach 10 ft., one target. Hit: 14 (3d6 + 4) piercing damage. """ - name = "Plesiosaurus" - description = "Large beast, unaligned" + name = 'Plesiosaurus' + description = 'Large beast, unaligned' challenge_rating = 2 armor_class = 13 - skills = "Perception +3, Stealth +4" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3, Stealth +4' + senses = 'Passive Perception 13' + languages = '' strength = Ability(18) dexterity = Ability(15) constitution = Ability(16) @@ -261,26 +309,34 @@ class Plesiosaurus(Monster): swim_speed = 40 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 68 - hit_dice = "8d10" + hit_dice = '8d10 + 24' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class PoisonousSnake(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 1 piercing damage, and the target must make a DC 10 Constitution saving throw, taking 5 (2d4) poison damage on a failed save, or half as much damage on a successful one. """ - name = "Poisonous Snake" - description = "Tiny beast, unaligned" + name = 'Poisonous Snake' + description = 'Tiny beast, unaligned' challenge_rating = 0.125 armor_class = 13 - skills = "" - senses = "Blindsight 10 ft., Passive Perception 10" - languages = "" + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 10' + languages = '' strength = Ability(2) dexterity = Ability(16) constitution = Ability(11) @@ -291,16 +347,25 @@ class PoisonousSnake(Monster): swim_speed = 30 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 2 - hit_dice = "1d4" + hit_dice = '1d4 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class PolarBear(Monster): """ + Keen Smell. The bear has advantage on Wisdom (Perception) checks that rely on smell. + + # Actions + Multiattack. The bear makes two attacks: one with its bite and one with its claws. Bite. @@ -310,13 +375,13 @@ class PolarBear(Monster): Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 12 (2d6 + 5) slashing damage. """ - name = "Polar Bear" - description = "Large beast, unaligned" + name = 'Polar Bear' + description = 'Large beast, unaligned' challenge_rating = 2 armor_class = 12 - skills = "Perception +3" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3' + senses = 'Passive Perception 13' + languages = '' strength = Ability(20) dexterity = Ability(10) constitution = Ability(16) @@ -327,24 +392,32 @@ class PolarBear(Monster): swim_speed = 30 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 42 - hit_dice = "5d10" + hit_dice = '5d10 + 15' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Pony(Monster): """ + + # Actions + Hooves. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 7 (2d4 + 2) bludgeoning damage. """ - name = "Pony" - description = "Medium beast, unaligned" + name = 'Pony' + description = 'Medium beast, unaligned' challenge_rating = 0.125 armor_class = 10 - skills = "" - senses = "Passive Perception 10" - languages = "" + skills = '' + senses = 'Passive Perception 10' + languages = '' strength = Ability(15) dexterity = Ability(10) constitution = Ability(13) @@ -355,13 +428,19 @@ class Pony(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 11 - hit_dice = "2d8" + hit_dice = '2d8 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Priest(Monster): """ + Divine Eminence. As a bonus action, the priest can expend a spell slot to cause its melee weapon attacks to magically deal an extra 10 (3d6) radiant @@ -369,30 +448,26 @@ class Priest(Monster): turn. If the priest expends a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each level above 1st. Spellcasting. - The priest is a 5th-level spellcaster. Its spellcasting ability is - Wisdom (spell save DC 13, +5 to hit with spell attacks). The priest - has the following cleric spells prepared: - - - - - Cantrips (at will): light, sacred flame, thaumaturgy - - - 1st level (4 slots): cure wounds, guiding bolt, sanctuary - - - 2nd level (3 slots): lesser restoration, spiritual weapon - - - 3rd level (2 slots): dispel magic, spirit guardians + The priest is a 5th-level spellcaster. Its spellcasting ability is Wisdom (spell save DC 13, +5 to hit with spell attacks). The priest has the following cleric spells prepared: + + - Cantrips (at will): light, sacred flame, thaumaturgy + - 1st level (4 slots): cure wounds, guiding bolt, sanctuary + - 2nd level (3 slots): lesser restoration, spiritual weapon + - 3rd level (2 slots): dispel magic, spirit guardians + + # Actions + Mace. Melee Weapon Attack: +2 to hit, reach 5 ft., one target. Hit: 3 (1d6) bludgeoning damage. """ - name = "Priest" - description = "Medium humanoid, any alignment" + name = 'Priest' + description = 'Medium humanoid, any alignment' challenge_rating = 2 armor_class = 13 - skills = "Medicine +7, Persuasion +3, Religion +4" - senses = "Passive Perception 13" - languages = "any two languages" + skills = 'Medicine +7, Persuasion +3, Religion +4' + senses = 'Passive Perception 13' + languages = 'any two languages' strength = Ability(10) dexterity = Ability(10) constitution = Ability(12) @@ -403,13 +478,19 @@ class Priest(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 27 - hit_dice = "5d8" - spells = ["light", "sacred flame", "thaumaturgy", "cure wounds", "guiding bolt", "sanctuary", "lesser restoration", "spiritual weapon", "dispel magic", "spirit guardians"] + hit_dice = '5d8 + 5' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' + spells = ['light', 'sacred flame', 'thaumaturgy', 'cure wounds', 'guiding bolt', 'sanctuary', 'lesser restoration', 'spiritual weapon', 'dispel magic', 'spirit guardians'] class Pseudodragon(Monster): """ + Keen Senses. The pseudodragon has advantage on Wisdom (Perception) checks that rely on sight, hearing, or smell. @@ -429,6 +510,9 @@ class Pseudodragon(Monster): pseudodragon's Magic Resistance trait. At any time and for any reason, the pseudodragon can end its service as a familiar, ending the telepathic bond. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 4 (1d4 + 2) piercing damage. @@ -440,12 +524,12 @@ class Pseudodragon(Monster): duration, or until it takes damage or another creature uses an action to shake it awake. """ - name = "Pseudodragon" - description = "Tiny dragon, neutral good" + name = 'Pseudodragon' + description = 'Tiny dragon, neutral good' challenge_rating = 0.25 armor_class = 13 - skills = "Perception +3, Stealth +4" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 13" + skills = 'Perception +3, Stealth +4' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 13' languages = "understands Common and Draconic but can't speak" strength = Ability(6) dexterity = Ability(15) @@ -457,16 +541,25 @@ class Pseudodragon(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 7 - hit_dice = "2d4" + hit_dice = '2d4 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class PurpleWorm(Monster): """ + Tunneler. The worm can burrow through solid rock at half its burrow speed and leaves a 10-foot-diameter tunnel in its wake. + + # Actions + Multiattack. The worm makes two attacks: one with its bite and one with its stinger. @@ -490,13 +583,13 @@ class PurpleWorm(Monster): Constitution saving throw, taking 42 (12d6) poison damage on a failed save, or half as much damage on a successful one. """ - name = "Purple Worm" - description = "Gargantuan monstrosity, unaligned" + name = 'Purple Worm' + description = 'Gargantuan monstrosity, unaligned' challenge_rating = 15 armor_class = 18 - skills = "" - senses = "Blindsight 30 ft., Tremorsense 60 ft., Passive Perception 9" - languages = "" + skills = '' + senses = 'Blindsight 30 ft., Tremorsense 60 ft., Passive Perception 9' + languages = '' strength = Ability(28) dexterity = Ability(7) constitution = Ability(22) @@ -507,6 +600,11 @@ class PurpleWorm(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 30 hp_max = 247 - hit_dice = "15d20" + hit_dice = '15d20 + 90' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_q.py b/dungeonsheets/monsters/monsters_q.py index a7f84e5..31200a2 100644 --- a/dungeonsheets/monsters/monsters_q.py +++ b/dungeonsheets/monsters/monsters_q.py @@ -6,8 +6,11 @@ This file was autogenerated by https://github.com/stravajiaxen/5e-srd-to-py from dungeonsheets.monsters.monsters import Monster from dungeonsheets.stats import Ability + + class Quasit(Monster): """ + Shapechanger. The quasit can use its action to polymorph into a beast form that resembles a bat (speed 10 ft. fly 40 ft.), a centipede (40 ft., climb @@ -26,6 +29,9 @@ class Quasit(Monster): the master shares the quasit's Magic Resistance trait. At any time and for any reason, the quasit can end its service as a familiar, ending the telepathic bond. + + # Actions + Claw (Bite in Beast Form). Melee Weapon Attack: +4 to hit, reach 5 ft ., one target. Hit: 5 (1d4 + 3) piercing damage, and the target must succeed on a DC 10 @@ -43,13 +49,13 @@ class Quasit(Monster): or until its concentration ends (as if concentrating on a spell). Any equipment the quasit wears or carries is invisible with it. """ - name = "Quasit" - description = "Tiny fiend, chaotic evil" + name = 'Quasit' + description = 'Tiny fiend, chaotic evil' challenge_rating = 1 armor_class = 13 - skills = "Stealth +5" - senses = "Darkvision 120 ft., Passive Perception 10" - languages = "Abyssal, Common" + skills = 'Stealth +5' + senses = 'Darkvision 120 ft., Passive Perception 10' + languages = 'Abyssal, Common' strength = Ability(5) dexterity = Ability(17) constitution = Ability(10) @@ -60,29 +66,38 @@ class Quasit(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 7 - hit_dice = "3d4" + hit_dice = '3d4 + 0' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Quipper(Monster): """ + Blood Frenzy. The quipper has advantage on melee attack rolls against any creature that doesn't have all its hit points. Water Breathing. The quipper can breathe only underwater. + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 1 piercing damage. """ - name = "Quipper" - description = "Tiny beast, unaligned" + name = 'Quipper' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 13 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 8" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 8' + languages = '' strength = Ability(2) dexterity = Ability(16) constitution = Ability(9) @@ -93,6 +108,11 @@ class Quipper(Monster): swim_speed = 40 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 1 - hit_dice = "1d4" + hit_dice = '1d4 + -1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_r.py b/dungeonsheets/monsters/monsters_r.py index 4f80e8f..e7c197c 100644 --- a/dungeonsheets/monsters/monsters_r.py +++ b/dungeonsheets/monsters/monsters_r.py @@ -10,6 +10,7 @@ from dungeonsheets.stats import Ability class Rakshasa(Monster): """ + Limited Magic Immunity. The rakshasa can't be affected or detected by spells of 6th level or lower unless it wishes to be. It has advantage on saving throws @@ -27,6 +28,9 @@ class Rakshasa(Monster): suggestion 1/day each: dominate person, fly, plane shift, true seeing + + # Actions + Multiattack. The rakshasa makes two claw attacks Claw. @@ -38,13 +42,13 @@ class Rakshasa(Monster): rest. The curse lasts until it is lifted by a remove curse spell or similar magic. """ - name = "Rakshasa" - description = "Medium fiend, lawful evil" + name = 'Rakshasa' + description = 'Medium fiend, lawful evil' challenge_rating = 13 armor_class = 16 - skills = "Deception +10, Insight +8" - senses = "Darkvision 60 ft., Passive Perception 13" - languages = "Common, Infernal" + skills = 'Deception +10, Insight +8' + senses = 'Darkvision 60 ft., Passive Perception 13' + languages = 'Common, Infernal' strength = Ability(14) dexterity = Ability(17) constitution = Ability(18) @@ -55,27 +59,36 @@ class Rakshasa(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 110 - hit_dice = "13d8" + hit_dice = '13d8 + 52' + condition_immunities = '' + damage_immunities = 'bludgeoning, piercing, and slashing from nonmagical weapons' + damage_resistances = '' + damage_vulnerabilities = 'piercing from magic weapons wielded by good creatures' spells = [] class Rat(Monster): """ + Keen Smell. The rat has advantage on Wisdom (Perception) checks that rely on smell. + + # Actions + Bite. Melee Weapon Attack: +0 to hit, reach 5 ft., one target. Hit: 1 piercing damage. """ - name = "Rat" - description = "Tiny beast, unaligned" + name = 'Rat' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 10 - skills = "" - senses = "Darkvision 30 ft., Passive Perception 10" - languages = "" + skills = '' + senses = 'Darkvision 30 ft., Passive Perception 10' + languages = '' strength = Ability(2) dexterity = Ability(11) constitution = Ability(9) @@ -86,29 +99,38 @@ class Rat(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 1 - hit_dice = "1d4" + hit_dice = '1d4 + -1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Raven(Monster): """ + Mimicry. The raven can mimic simple sounds it has heard, such as a person whispering, a baby crying, or an animal chittering. A creature that hears the sounds can tell they are imitations with a successful DC 10 Wisdom (Insight) check. + + # Actions + Beak. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 1 piercing damage. """ - name = "Raven" - description = "Tiny beast, unaligned" + name = 'Raven' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 12 - skills = "Perception +3" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3' + senses = 'Passive Perception 13' + languages = '' strength = Ability(2) dexterity = Ability(14) constitution = Ability(8) @@ -119,13 +141,21 @@ class Raven(Monster): swim_speed = 0 fly_speed = 50 climb_speed = 0 + burrow_speed = 0 hp_max = 1 - hit_dice = "1d4" + hit_dice = '1d4 + -1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class RedDragonWyrmling(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 9 (1d10 + 4) piercing damage plus 3 (1d6) fire damage. @@ -134,13 +164,13 @@ class RedDragonWyrmling(Monster): must make a DC l3 Dexterity saving throw, taking 24 (7d6) fire damage on a failed save, or half as much damage on a successful one. """ - name = "Red Dragon Wyrmling" - description = "Medium dragon, chaotic evil" + name = 'Red Dragon Wyrmling' + description = 'Medium dragon, chaotic evil' challenge_rating = 4 armor_class = 17 - skills = "Perception +4, Stealth +2" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14" - languages = "Draconic" + skills = 'Perception +4, Stealth +2' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14' + languages = 'Draconic' strength = Ability(19) dexterity = Ability(10) constitution = Ability(17) @@ -151,30 +181,39 @@ class RedDragonWyrmling(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 30 + burrow_speed = 0 hp_max = 75 - hit_dice = "10d8" + hit_dice = '10d8 + 30' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class ReefShark(Monster): """ + Pack Tactics. The shark has advantage on an attack roll against a creature if at least one of the shark's allies is within 5 ft. of the creature and the ally isn't incapacitated. Water Breathing. The shark can breathe only underwater. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 6 (1d8 + 2) piercing damage. """ - name = "Reef Shark" - description = "Medium beast, unaligned" + name = 'Reef Shark' + description = 'Medium beast, unaligned' challenge_rating = 0.5 armor_class = 12 - skills = "Perception +2" - senses = "Blindsight 30 ft., Passive Perception 12" - languages = "" + skills = 'Perception +2' + senses = 'Blindsight 30 ft., Passive Perception 12' + languages = '' strength = Ability(14) dexterity = Ability(13) constitution = Ability(13) @@ -185,16 +224,25 @@ class ReefShark(Monster): swim_speed = 40 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "4d8" + hit_dice = '4d8 + 4' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Remorhaz(Monster): """ + Heated Body. A creature that touches the remorhaz or hits it with a melee attack while within 5 feet of it takes 10 (3d6) fire damage. + + # Actions + Bite. Melee Weapon Attack: +11 to hit, reach 10 ft., one target. Hit: 40 (6d10 + 7) piercing damage plus 10 (3d6) fire damage. If the target is @@ -216,13 +264,13 @@ class Remorhaz(Monster): it and can escape from the corpse using 15 feet of movement, exiting prone. """ - name = "Remorhaz" - description = "Huge monstrosity, unaligned" + name = 'Remorhaz' + description = 'Huge monstrosity, unaligned' challenge_rating = 11 armor_class = 17 - skills = "" - senses = "Darkvision 60 ft., Tremorsense 60 ft., Passive Perception 10" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Tremorsense 60 ft., Passive Perception 10' + languages = '' strength = Ability(24) dexterity = Ability(13) constitution = Ability(21) @@ -233,29 +281,38 @@ class Remorhaz(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 20 hp_max = 195 - hit_dice = "17d12" + hit_dice = '17d12 + 85' + condition_immunities = '' + damage_immunities = 'cold, fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Rhinoceros(Monster): """ + Charge. If the rhinoceros moves at least 20 ft. straight toward a target and then hits it with a gore attack on the same turn, the target takes an extra 9 (2d8) bludgeoning damage. If the target is a creature, it must succeed on a DC 15 Strength saving throw or be knocked prone. + + # Actions + Gore. Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 14 (2d8 + 5) bludgeoning damage. """ - name = "Rhinoceros" - description = "Large beast, unaligned" + name = 'Rhinoceros' + description = 'Large beast, unaligned' challenge_rating = 2 armor_class = 11 - skills = "" - senses = "Passive Perception 11" - languages = "" + skills = '' + senses = 'Passive Perception 11' + languages = '' strength = Ability(21) dexterity = Ability(8) constitution = Ability(15) @@ -266,24 +323,32 @@ class Rhinoceros(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 45 - hit_dice = "6d10" + hit_dice = '6d10 + 12' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class RidingHorse(Monster): """ + + # Actions + Hooves. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 8 (2d4 + 3) bludgeoning damage. """ - name = "Riding Horse" - description = "Large beast, unaligned" + name = 'Riding Horse' + description = 'Large beast, unaligned' challenge_rating = 0.25 armor_class = 10 - skills = "" - senses = "Passive Perception 10" - languages = "" + skills = '' + senses = 'Passive Perception 10' + languages = '' strength = Ability(16) dexterity = Ability(10) constitution = Ability(12) @@ -294,16 +359,25 @@ class RidingHorse(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 13 - hit_dice = "2d10" + hit_dice = '2d10 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Roc(Monster): """ + Keen Sight. The roc has advantage on Wisdom (Perception) checks that rely on sight. + + # Actions + Multiattack. The roc makes two attacks: one with its beak and one with its talons. Beak. @@ -315,13 +389,13 @@ class Roc(Monster): this grapple ends, the target is restrained, and the roc can't use its talons on another target. """ - name = "Roc" - description = "Gargantuan monstrosity, unaligned" + name = 'Roc' + description = 'Gargantuan monstrosity, unaligned' challenge_rating = 11 armor_class = 15 - skills = "Perception +4" - senses = "Passive Perception 14" - languages = "" + skills = 'Perception +4' + senses = 'Passive Perception 14' + languages = '' strength = Ability(28) dexterity = Ability(10) constitution = Ability(20) @@ -332,13 +406,19 @@ class Roc(Monster): swim_speed = 0 fly_speed = 120 climb_speed = 0 + burrow_speed = 0 hp_max = 248 - hit_dice = "16d20" + hit_dice = '16d20 + 80' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Roper(Monster): """ + False Appearance. While the roper remains motionless, it is indistinguishable from a normal cave formation, such as a stalagmite. @@ -352,6 +432,9 @@ class Roper(Monster): Spider Climb. The roper can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check. + + # Actions + Multiattack. The roper makes four attacks with its tendrils, uses Reel, and makes one attack with its bite. @@ -368,13 +451,13 @@ class Roper(Monster): The roper pulls each creature grappled by it up to 25 ft. straight toward it. """ - name = "Roper" - description = "Large monstrosity, neutral evil" + name = 'Roper' + description = 'Large monstrosity, neutral evil' challenge_rating = 5 armor_class = 20 - skills = "Perception +6, Stealth +5" - senses = "Darkvision 60 ft., Passive Perception 16" - languages = "" + skills = 'Perception +6, Stealth +5' + senses = 'Darkvision 60 ft., Passive Perception 16' + languages = '' strength = Ability(18) dexterity = Ability(8) constitution = Ability(17) @@ -385,13 +468,19 @@ class Roper(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 10 + burrow_speed = 0 hp_max = 93 - hit_dice = "11d10" + hit_dice = '11d10 + 33' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class RugofSmothering(Monster): """ + Antimagic Susceptibility. The rug is incapacitated while in the area of an antimagic field. If targeted by dispel magic, the rug must succeed on a Constitution @@ -404,6 +493,9 @@ class RugofSmothering(Monster): False Appearance. While the rug remains motionless, it is indistinguishable from a normal rug. + + # Actions + Smother. Melee Weapon Attack: +5 to hit, reach 5 ft., one Medium or smaller creature. Hit: The creature is grappled (escape DC 13). Until this @@ -412,13 +504,13 @@ class RugofSmothering(Monster): the start of each of the target's turns, the target takes 10 (2d6 + 3) bludgeoning damage. """ - name = "Rug of Smothering" - description = "Large construct, unaligned" + name = 'Rug of Smothering' + description = 'Large construct, unaligned' challenge_rating = 2 armor_class = 12 - skills = "" - senses = "Blindsight 60 ft. (blind beyond this radius), Passive Perception 6" - languages = "" + skills = '' + senses = 'Blindsight 60 ft. (blind beyond this radius), Passive Perception 6' + languages = '' strength = Ability(17) dexterity = Ability(14) constitution = Ability(10) @@ -429,13 +521,19 @@ class RugofSmothering(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 33 - hit_dice = "6d10" + hit_dice = '6d10 + 0' + condition_immunities = 'blinded, charmed, blinded, frightened, paralyzed, petrified, poisoned' + damage_immunities = 'poison, psychic' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class RustMonster(Monster): """ + Iron Scent. The rust monster can pinpoint, by scent, the location of ferrous metal within 30 feet of it. @@ -445,6 +543,9 @@ class RustMonster(Monster): cumulative -1 penalty to damage rolls. If its penalty drops to -5, the weapon is destroyed. Non magical ammunition made of metal that hits the rust monster is destroyed after dealing damage. + + # Actions + Bite. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 5 (1d8 + 1) piercing damage. @@ -461,13 +562,13 @@ class RustMonster(Monster): to a bonus is destroyed. If the object touched is a held metal weapon, it rusts as described in the Rust Metal trait. """ - name = "Rust Monster" - description = "Medium monstrosity, unaligned" + name = 'Rust Monster' + description = 'Medium monstrosity, unaligned' challenge_rating = 0.5 armor_class = 14 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 11" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 11' + languages = '' strength = Ability(13) dexterity = Ability(12) constitution = Ability(13) @@ -478,6 +579,11 @@ class RustMonster(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 27 - hit_dice = "5d8" + hit_dice = '5d8 + 5' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_s.py b/dungeonsheets/monsters/monsters_s.py index 59f8c27..7d09c2e 100644 --- a/dungeonsheets/monsters/monsters_s.py +++ b/dungeonsheets/monsters/monsters_s.py @@ -10,6 +10,7 @@ from dungeonsheets.stats import Ability class SaberToothedTiger(Monster): """ + Keen Smell. The tiger has advantage on Wisdom (Perception) checks that rely on smell. @@ -19,6 +20,9 @@ class SaberToothedTiger(Monster): on a DC 14 Strength saving throw or be knocked prone. If the target is prone, the tiger can make one bite attack against it as a bonus action. + + # Actions + Bite. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 10 (1d10 + 5) piercing damage. @@ -26,13 +30,13 @@ class SaberToothedTiger(Monster): Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 12 (2d6 + 5) slashing damage. """ - name = "Saber-Toothed Tiger" - description = "Large beast, unaligned" + name = 'Saber-Toothed Tiger' + description = 'Large beast, unaligned' challenge_rating = 2 armor_class = 12 - skills = "Perception +3, Stealth +6" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3, Stealth +6' + senses = 'Passive Perception 13' + languages = '' strength = Ability(18) dexterity = Ability(14) constitution = Ability(15) @@ -43,13 +47,19 @@ class SaberToothedTiger(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 52 - hit_dice = "7d10" + hit_dice = '7d10 + 14' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Sahuagin(Monster): """ + Blood Frenzy. The sahuagin has advantage on melee attack rolls against any creature that doesn't have all its hit points. @@ -59,6 +69,9 @@ class Sahuagin(Monster): Shark Telepathy. The sahuagin can magically command any shark within 120 feet of it, using a limited telepathy. + + # Actions + Multiattack. The sahuagin makes two melee attacks: one with its bite and one with its claws or spear. @@ -73,13 +86,13 @@ class Sahuagin(Monster): ft., one target. Hit: 4 (1d6 + 1) piercing damage, or 5 (1d8 + 1) piercing damage if used with two hands to make a melee attack. """ - name = "Sahuagin" - description = "Medium humanoid, lawful evil" + name = 'Sahuagin' + description = 'Medium humanoid, lawful evil' challenge_rating = 0.5 armor_class = 12 - skills = "Perception +5" - senses = "Darkvision 120 ft., Passive Perception 15" - languages = "Sahuagin" + skills = 'Perception +5' + senses = 'Darkvision 120 ft., Passive Perception 15' + languages = 'Sahuagin' strength = Ability(13) dexterity = Ability(11) constitution = Ability(12) @@ -90,19 +103,28 @@ class Sahuagin(Monster): swim_speed = 40 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "4d8" + hit_dice = '4d8 + 4' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Salamander(Monster): """ + Heated Body. A creature that touches the salamander or hits it with a melee attack while within 5 ft. of it takes 7 (2d6) fire damage. Heated Weapons. Any metal melee weapon the salamander wields deals an extra 3 (1d6) fire damage on a hit (included in the attack). + + # Actions + Multiattack. The salamander makes two attacks: one with its spear and one with its tail. @@ -119,13 +141,13 @@ class Salamander(Monster): tail, and the salamander can't make tail attacks against other targets. """ - name = "Salamander" - description = "Large elemental, neutral evil" + name = 'Salamander' + description = 'Large elemental, neutral evil' challenge_rating = 5 armor_class = 15 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Ignan" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Ignan' strength = Ability(18) dexterity = Ability(14) constitution = Ability(15) @@ -136,16 +158,25 @@ class Salamander(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 90 - hit_dice = "12d10" + hit_dice = '12d10 + 24' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = 'bludgeoning, piercing, and slashing from nonmagical weapons' + damage_vulnerabilities = 'cold' spells = [] class Satyr(Monster): """ + Magic Resistance. The satyr has advantage on saving throws against spells and other magical effects. + + # Actions + Ram. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 6 (2d4 + 1) bludgeoning damage. @@ -160,13 +191,13 @@ class Satyr(Monster): minute. The effect ends if the creature takes damage or if someone takes an action to shake the creature awake. """ - name = "Satyr" - description = "Medium fey, chaotic neutral" + name = 'Satyr' + description = 'Medium fey, chaotic neutral' challenge_rating = 0.5 armor_class = 14 - skills = "Perception +2, Performance +6, Stealth +5" - senses = "Passive Perception 12" - languages = "Common, Elvish, Sylvan" + skills = 'Perception +2, Performance +6, Stealth +5' + senses = 'Passive Perception 12' + languages = 'Common, Elvish, Sylvan' strength = Ability(12) dexterity = Ability(16) constitution = Ability(11) @@ -177,26 +208,34 @@ class Satyr(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 31 - hit_dice = "7d8" + hit_dice = '7d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Scorpion(Monster): """ + + # Actions + Sting. Melee Weapon Attack: +2 to hit, reach 5 ft., one creature. Hit: 1 piercing damage, and the target must make a DC 9 Constitution saving throw, taking 4 (1d8) poison damage on a failed save, or half as much damage on a successful one. """ - name = "Scorpion" - description = "Tiny beast, unaligned" + name = 'Scorpion' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 11 - skills = "" - senses = "Blindsight 10 ft., Passive Perception 9" - languages = "" + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 9' + languages = '' strength = Ability(2) dexterity = Ability(11) constitution = Ability(8) @@ -207,16 +246,25 @@ class Scorpion(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 1 - hit_dice = "1d4" + hit_dice = '1d4 + -1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Scout(Monster): """ + Keen Hearing and Sight. The scout has advantage on Wisdom (Perception) checks that rely on hearing or sight. + + # Actions + Multiattack. The scout makes two melee attacks or two ranged attacks. Shortsword. @@ -226,13 +274,13 @@ class Scout(Monster): Ranged Weapon Attack: +4 to hit, ranged 150/600 ft., one target. Hit: 6 (1d8 + 2) piercing damage. """ - name = "Scout" - description = "Medium humanoid, any alignment" + name = 'Scout' + description = 'Medium humanoid, any alignment' challenge_rating = 0.5 armor_class = 13 - skills = "Nature +4, Perception +5, Stealth +6, Survival +5" - senses = "Passive Perception 15" - languages = "any one language (usually Common)" + skills = 'Nature +4, Perception +5, Stealth +6, Survival +5' + senses = 'Passive Perception 15' + languages = 'any one language (usually Common)' strength = Ability(11) dexterity = Ability(14) constitution = Ability(12) @@ -243,13 +291,19 @@ class Scout(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 16 - hit_dice = "3d8" + hit_dice = '3d8 + 3' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class SeaHag(Monster): """ + Amphibious. The hag can breathe air and water. Horrific Appearance. @@ -266,6 +320,9 @@ class SeaHag(Monster): form is sudden, the target can avert its eyes and avoid making the initial saving throw. Until the start of its next turn, a creature that averts its eyes has disadvantage on attack rolls against the hag. + + # Actions + Claws. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + 3) slashing damage. @@ -286,13 +343,13 @@ class SeaHag(Monster): DC 16 Intelligence (Investigation) check to discern that the hag is disguised. """ - name = "Sea Hag" - description = "Medium fey, chaotic evil" + name = 'Sea Hag' + description = 'Medium fey, chaotic evil' challenge_rating = 2 armor_class = 14 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 11" - languages = "Aquan, Common, Giant" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 11' + languages = 'Aquan, Common, Giant' strength = Ability(16) dexterity = Ability(13) constitution = Ability(16) @@ -303,23 +360,29 @@ class SeaHag(Monster): swim_speed = 40 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 52 - hit_dice = "7d8" + hit_dice = '7d8 + 21' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class SeaHorse(Monster): """ + Water Breathing. The sea horse can breathe only underwater. """ - name = "Sea Horse" - description = "Tiny beast, unaligned" + name = 'Sea Horse' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 11 - skills = "" - senses = "Passive Perception 10" - languages = "" + skills = '' + senses = 'Passive Perception 10' + languages = '' strength = Ability(1) dexterity = Ability(12) constitution = Ability(8) @@ -330,13 +393,19 @@ class SeaHorse(Monster): swim_speed = 20 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 1 - hit_dice = "1d4" + hit_dice = '1d4 + -1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Shadow(Monster): """ + Amorphous. The shadow can move through a space as narrow as 1 inch wide without squeezing. @@ -346,6 +415,9 @@ class Shadow(Monster): Sunlight Weakness. While in sunlight, the shadow has disadvantage on attack rolls, ability checks, and saving throws. + + # Actions + Strength Drain. Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 9 (2d6 + 2) necrotic damage, and the target's Strength score is reduced by @@ -355,13 +427,13 @@ class Shadow(Monster): If a non-evil humanoid dies from this attack, a new shadow rises from the corpse 1d4 hours later. """ - name = "Shadow" - description = "Medium undead, chaotic evil" + name = 'Shadow' + description = 'Medium undead, chaotic evil' challenge_rating = 0.5 armor_class = 12 - skills = "Stealth +4" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "" + skills = 'Stealth +4' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = '' strength = Ability(6) dexterity = Ability(14) constitution = Ability(13) @@ -372,8 +444,13 @@ class Shadow(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 16 - hit_dice = "3d8" + hit_dice = '3d8 + 3' + condition_immunities = 'exhaustion, frightened, grappled, paralyzed, petrified, poisoned, prone, restrained' + damage_immunities = 'necrotic, poison' + damage_resistances = 'acid' + damage_vulnerabilities = 'radiant' spells = [] @@ -394,24 +471,18 @@ class ShadowDemon(Monster): creature. *Hit:* 10 (2d6+3) psychic damage or, if the demon had advantage on the attack roll, 17 (4d6+3) psychic damage. """ - - name = "Shadow Demon" - description = "Medium fiend (demon), chaotic evil" + name = 'Shadow Demon' + description = 'Medium fiend (demon), chaotic evil' challenge_rating = 4 armor_class = 13 - skills = "Stealth +7" - saving_throws = "Dex +5, Cha +4" - damage_vulnerabilities = "radiant" - damage_resistances = ( - "acid, fire, necrotic, thunder; bludgeoning, piercing, and slashing from" - " nonmagical attacks" - ) - damage_immunities = "cold, lightning, poison" - condition_immunities = ( - "exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained" - ) - senses = "Darkvision 120 ft., Passive Perception 11" - languages = "Abyssal, telepathy 120 ft." + skills = 'Stealth +7' + saving_throws = 'Dex +5, Cha +4' + damage_vulnerabilities = 'radiant' + damage_resistances = 'acid, fire, necrotic, thunder; bludgeoning, piercing, and slashing from nonmagical attacks' + damage_immunities = 'cold, lightning, poison' + condition_immunities = 'exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained' + senses = 'Darkvision 120 ft., Passive Perception 11' + languages = 'Abyssal, telepathy 120 ft.' strength = Ability(1) dexterity = Ability(17) constitution = Ability(12) @@ -421,15 +492,19 @@ class ShadowDemon(Monster): speed = 30 fly_speed = 30 hp_max = 66 - hit_dice = "12d8 + 12" + hit_dice = '12d8 + 12' class ShamblingMound(Monster): """ + Lightning Absorption. Whenever the shambling mound is subjected to lightning damage, it takes no damage and regains a number of hit points equal to the lightning damage dealt. + + # Actions + Multiattack. The shambling mound makes two slam attacks. If both attacks hit a Medium or smaller target, the target is grappled (escape DC 14), and @@ -445,13 +520,13 @@ class ShamblingMound(Monster): If the mound moves, the engulfed target moves with it. The mound can have only one creature engulfed at a time. """ - name = "Shambling Mound" - description = "Large plant, unaligned" + name = 'Shambling Mound' + description = 'Large plant, unaligned' challenge_rating = 5 armor_class = 15 - skills = "Stealth +2" - senses = "Blindsight 60 ft. (blind beyond this radius), Passive Perception 10" - languages = "" + skills = 'Stealth +2' + senses = 'Blindsight 60 ft. (blind beyond this radius), Passive Perception 10' + languages = '' strength = Ability(18) dexterity = Ability(8) constitution = Ability(16) @@ -462,13 +537,19 @@ class ShamblingMound(Monster): swim_speed = 20 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 136 - hit_dice = "16d10" + hit_dice = '16d10 + 48' + condition_immunities = 'blinded, blinded, exhaustion' + damage_immunities = 'lightning' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class ShieldGuardian(Monster): """ + Bound. The shield guardian is magically bound to an amulet. As long as the guardian and its amulet are on the same plane of existence, the @@ -488,18 +569,28 @@ class ShieldGuardian(Monster): spellcaster, the guardian casts the stored spell with any parameters set by the original caster, requiring no components. When the spell is cast or a new spell is stored, any previously stored spell is lost. + + # Actions + Multiattack. The guardian makes two fist attacks. Fist. Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 11 (2d6 + 4) bludgeoning damage. + + # Reactions + + Shield. + When a creature makes an attack against the wearer of the guardian's + amulet, the guardian grants a +2 bonus to the wearer's AC if the + guardian is within 5 feet of the wearer. """ - name = "Shield Guardian" - description = "Large construct, unaligned" + name = 'Shield Guardian' + description = 'Large construct, unaligned' challenge_rating = 7 armor_class = 17 - skills = "" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 10" + skills = '' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 10' languages = "understands commands given in any language but can't speak" strength = Ability(18) dexterity = Ability(8) @@ -511,29 +602,38 @@ class ShieldGuardian(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 142 - hit_dice = "15d10" + hit_dice = '15d10 + 60' + condition_immunities = 'charmed, exhaustion, frightened, paralyzed, poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Shrieker(Monster): """ + False Appearance. While the shrieker remains motionless, it is indistinguishable from an ordinary fungus. + + # Actions + Shriek. When bright light or a creature is within 30 feet of the shrieker, it emits a shriek audible within 300 feet of it. The shrieker continues to shriek until the disturbance moves out of range and for 1d4 of the shrieker's turns afterward """ - name = "Shrieker" - description = "Medium plant, unaligned" + name = 'Shrieker' + description = 'Medium plant, unaligned' challenge_rating = 0 armor_class = 5 - skills = "" - senses = "Blindsight 30 ft. (blind beyond this radius), Passive Perception 6" - languages = "" + skills = '' + senses = 'Blindsight 30 ft. (blind beyond this radius), Passive Perception 6' + languages = '' strength = Ability(1) dexterity = Ability(1) constitution = Ability(10) @@ -544,13 +644,21 @@ class Shrieker(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 13 - hit_dice = "3d8" + hit_dice = '3d8 + 0' + condition_immunities = 'blinded, blinded, frightened' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class SilverDragonWyrmling(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 9 (1d10 + 4) piercing damage. @@ -568,13 +676,13 @@ class SilverDragonWyrmling(Monster): saving throw at the end of each of its turns, ending the effect on itself on a success. """ - name = "Silver Dragon Wyrmling" - description = "Medium dragon, lawful good" + name = 'Silver Dragon Wyrmling' + description = 'Medium dragon, lawful good' challenge_rating = 2 armor_class = 17 - skills = "Perception +4, Stealth +2" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14" - languages = "Draconic" + skills = 'Perception +4, Stealth +2' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14' + languages = 'Draconic' strength = Ability(19) dexterity = Ability(10) constitution = Ability(17) @@ -585,13 +693,21 @@ class SilverDragonWyrmling(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 45 - hit_dice = "6d8" + hit_dice = '6d8 + 18' + condition_immunities = '' + damage_immunities = 'cold' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Skeleton(Monster): """ + + # Actions + Shortsword. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + 2) piercing damage. @@ -599,12 +715,12 @@ class Skeleton(Monster): Ranged Weapon Attack: +4 to hit, range 80/320 ft., one target. Hit: 5 (1d6 + 2) piercing damage. """ - name = "Skeleton" - description = "Medium undead, lawful evil" + name = 'Skeleton' + description = 'Medium undead, lawful evil' challenge_rating = 0.25 armor_class = 13 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 9" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 9' languages = "understands all languages it spoke in life but can't speak" strength = Ability(10) dexterity = Ability(14) @@ -616,13 +732,19 @@ class Skeleton(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 13 - hit_dice = "2d8" + hit_dice = '2d8 + 4' + condition_immunities = 'poisoned' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = 'bludgeoning' spells = [] class Solar(Monster): """ + Angelic Weapons. The solar's weapon attacks are magical. When the solar hits with any weapon, the weapon deals an extra 6d8 radiant damage (included in the @@ -642,6 +764,9 @@ class Solar(Monster): Magic Resistance. The solar has advantage on saving throws against spells and other magical effects. + + # Actions + Multiattack. The solar makes two greatsword attacks. Greatsword. @@ -664,14 +789,30 @@ class Solar(Monster): The solar touches another creature. The target magically regains 40 (8d8 + 4) hit points and is freed from any curse, disease, poison, blindness, or deafness. + + # Legendary Actions + + Teleport. + The solar magically teleports, along with any equipment it is wearing + or carrying, up to 120 ft. to an unoccupied space it can see. + Searing Burst (Costs 2 Actions). + The solar emits magical, divine energy. Each creature of its choice in + a 10 -foot radius must make a DC 23 Dexterity saving throw, taking 14 + (4d6) fire damage plus 14 (4d6) radiant damage on a failed save, or + half as much damage on a successful one. + Blinding Gaze (Costs 3 Actions). + The solar targets one creature it can see within 30 ft. of it. If the + target can see it, the target must succeed on a DC 15 Constitution + saving throw or be blinded until magic such as the lesser restoration + spell removes the blindness. """ - name = "Solar" - description = "Large celestial, lawful good" + name = 'Solar' + description = 'Large celestial, lawful good' challenge_rating = 21 armor_class = 21 - skills = "Perception +14" - senses = "Truesight 120 ft., Passive Perception 24" - languages = "all, telepathy 120 ft." + skills = 'Perception +14' + senses = 'Truesight 120 ft., Passive Perception 24' + languages = 'all, telepathy 120 ft.' strength = Ability(26) dexterity = Ability(22) constitution = Ability(26) @@ -682,13 +823,19 @@ class Solar(Monster): swim_speed = 0 fly_speed = 150 climb_speed = 0 + burrow_speed = 0 hp_max = 243 - hit_dice = "18d10" + hit_dice = '18d10 + 144' + condition_immunities = 'charmed, exhaustion, frightened, poisoned' + damage_immunities = 'necrotic, poison' + damage_resistances = 'radiant' + damage_vulnerabilities = '' spells = [] class Specter(Monster): """ + Incorporeal Movement. The specter can move through other creatures and objects as if they were difficult terrain. It takes 5 (1d10) force damage if it ends its @@ -696,6 +843,9 @@ class Specter(Monster): Sunlight Sensitivity. While in sunlight, the specter has disadvantage on attack rolls, as well as on Wisdom (Perception) checks that rely on sight. + + # Actions + Life Drain. Melee Spell Attack: +4 to hit, reach 5 ft., one creature. Hit: 10 (3d6) necrotic damage. The target must succeed on a DC 10 Constitution @@ -704,12 +854,12 @@ class Specter(Monster): long rest. The target dies if this effect reduces its hit point maximum to 0. """ - name = "Specter" - description = "Medium undead, chaotic evil" + name = 'Specter' + description = 'Medium undead, chaotic evil' challenge_rating = 1 armor_class = 12 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' languages = "understands all languages it knew in life but can't speak" strength = Ability(1) dexterity = Ability(14) @@ -721,13 +871,19 @@ class Specter(Monster): swim_speed = 0 fly_speed = 50 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "5d8" + hit_dice = '5d8 + 0' + condition_immunities = 'charmed, exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained, unconscious' + damage_immunities = 'necrotic, poison' + damage_resistances = 'acid' + damage_vulnerabilities = '' spells = [] class Spider(Monster): """ + Spider Climb. The spider can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check. @@ -736,18 +892,21 @@ class Spider(Monster): any other creature in contact with the same web. Web Walker. The spider ignores movement restrictions caused by webbing. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 1 piercing damage, and the target must succeed on a DC 9 Constitution saving throw or take 2 (1d4) poison damage. """ - name = "Spider" - description = "Tiny beast, unaligned" + name = 'Spider' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 12 - skills = "Stealth +4" - senses = "Darkvision 30 ft., Passive Perception 12" - languages = "" + skills = 'Stealth +4' + senses = 'Darkvision 30 ft., Passive Perception 12' + languages = '' strength = Ability(2) dexterity = Ability(14) constitution = Ability(8) @@ -758,48 +917,47 @@ class Spider(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 20 + burrow_speed = 0 hp_max = 1 - hit_dice = "1d4" + hit_dice = '1d4 + -1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class SpiritNaga(Monster): """ + Rejuvenation. If it dies, the naga returns to life in 1d6 days and regains all its hit points. Only a wish spell can prevent this trait from functioning. Spellcasting. - The naga is a 10th-level spellcaster. Its spellcasting ability is - Intelligence (spell save DC 14, +6 to hit with spell attacks), and it - needs only verbal components to cast its spells. It has the following - wizard spells prepared: - - - - - Cantrips (at will): mage hand, minor illusion, ray of frost - - - 1st level (4 slots): charm person, detect magic, sleep - - - 2nd level (3 slots): detect thoughts, hold person - - - 3rd level (3 slots): lightning bolt, water breathing - - - 4th level (3 slots): blight, dimension door - - - 5th level (2 slots): dominate person + The naga is a 10th-level spellcaster. Its spellcasting ability is Intelligence (spell save DC 14, +6 to hit with spell attacks), and it needs only verbal components to cast its spells. It has the following wizard spells prepared: + + - Cantrips (at will): mage hand, minor illusion, ray of frost + - 1st level (4 slots): charm person, detect magic, sleep + - 2nd level (3 slots): detect thoughts, hold person + - 3rd level (3 slots): lightning bolt, water breathing + - 4th level (3 slots): blight, dimension door + - 5th level (2 slots): dominate person + + # Actions + Bite. Melee Weapon Attack: +7 to hit, reach 10 ft., one creature. Hit: 7 (1d6 + 4) piercing damage, and the target must make a DC 13 Constitution saving throw, taking 31 (7d8) poison damage on a failed save, or half as much damage on a successful one. """ - name = "Spirit Naga" - description = "Large monstrosity, chaotic evil" + name = 'Spirit Naga' + description = 'Large monstrosity, chaotic evil' challenge_rating = 8 armor_class = 15 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 12" - languages = "Abyssal, Common" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 12' + languages = 'Abyssal, Common' strength = Ability(18) dexterity = Ability(17) constitution = Ability(14) @@ -810,13 +968,21 @@ class SpiritNaga(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 75 - hit_dice = "10d10" - spells = ["mage hand", "minor illusion", "ray of frost", "charm person", "detect magic", "sleep", "detect thoughts", "hold person", "lightning bolt", "water breathing", "blight", "dimension door", "dominate person"] + hit_dice = '10d10 + 20' + condition_immunities = 'charmed, poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = '' + spells = ['mage hand', 'minor illusion', 'ray of frost', 'charm person', 'detect magic', 'sleep', 'detect thoughts', 'hold person', 'lightning bolt', 'water breathing', 'blight', 'dimension door', 'dominate person'] class Sprite(Monster): """ + + # Actions + Longsword. Melee Weapon Attack: +2 to hit, reach 5 ft., one target. Hit: 1 slashing damage. @@ -838,13 +1004,13 @@ class Sprite(Monster): spell). Any equipment the sprite wears or carries is invisible with it. """ - name = "Sprite" - description = "Tiny fey, neutral good" + name = 'Sprite' + description = 'Tiny fey, neutral good' challenge_rating = 0.25 armor_class = 15 - skills = "Perception +3, Stealth +8" - senses = "Passive Perception 13" - languages = "Common, Elvish, Sylvan" + skills = 'Perception +3, Stealth +8' + senses = 'Passive Perception 13' + languages = 'Common, Elvish, Sylvan' strength = Ability(3) dexterity = Ability(18) constitution = Ability(10) @@ -855,13 +1021,19 @@ class Sprite(Monster): swim_speed = 0 fly_speed = 40 climb_speed = 0 + burrow_speed = 0 hp_max = 2 - hit_dice = "1d4" + hit_dice = '1d4 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Spy(Monster): """ + Cunning Action. On each of its turns, the spy can use a bonus action to take the Dash, Disengage, or Hide action. @@ -870,6 +1042,9 @@ class Spy(Monster): weapon attack and has advantage on the attack roll, or when the target is within 5 ft. of an ally of the spy that isn't incapacitated and the spy doesn't have disadvantage on the attack roll. + + # Actions + Multiattack. The spy makes two melee attacks. Shortsword. @@ -879,13 +1054,13 @@ class Spy(Monster): Ranged Weapon Attack: +4 to hit, range 30/120 ft., one target. Hit: 5 (1d6 + 2) piercing damage. """ - name = "Spy" - description = "Medium humanoid, any alignment" + name = 'Spy' + description = 'Medium humanoid, any alignment' challenge_rating = 1 armor_class = 12 - skills = "Deception +5, Insight +4, Investigation +5, Perception +6, Persuasion +5, Stealth +4" - senses = "Passive Perception 16" - languages = "any two languages" + skills = 'Deception +5, Insight +4, Investigation +5, Perception +6, Persuasion +5, Stealth +4' + senses = 'Passive Perception 16' + languages = 'any two languages' strength = Ability(10) dexterity = Ability(15) constitution = Ability(10) @@ -896,13 +1071,19 @@ class Spy(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 27 - hit_dice = "6d8" + hit_dice = '6d8 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class SteamMephit(Monster): """ + Death Burst. When the mephit dies, it explodes in a cloud of steam. Each creature within 5 ft. of the mephit must succeed on a DC 10 Dexterity saving @@ -910,6 +1091,9 @@ class SteamMephit(Monster): Innate Spellcasting. The mephit can innately cast blur, requiring no material components. Its innate spellcasting ability is Charisma. + + # Actions + Claws. Melee Weapon Attack: +2 to hit, reach 5 ft., one creature. Hit: 2 (1d4) slashing damage plus 2 (1d4) fire damage. @@ -925,13 +1109,13 @@ class SteamMephit(Monster): other mephits. It remains for 1 minute, until it or its summoner dies, or until its summoner dismisses it as an action. """ - name = "Steam Mephit" - description = "Small elemental, neutral evil" + name = 'Steam Mephit' + description = 'Small elemental, neutral evil' challenge_rating = 0.25 armor_class = 10 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Aquan, Ignan" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Aquan, Ignan' strength = Ability(5) dexterity = Ability(11) constitution = Ability(10) @@ -942,13 +1126,21 @@ class SteamMephit(Monster): swim_speed = 0 fly_speed = 30 climb_speed = 0 + burrow_speed = 0 hp_max = 21 - hit_dice = "6d6" + hit_dice = '6d6 + 0' + condition_immunities = 'poisoned' + damage_immunities = 'fire, poison' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Stirge(Monster): """ + + # Actions + Blood Drain. Melee Weapon Attack: +5 to hit, reach 5 ft., one creature. Hit: 5 (1d4 + 3) piercing damage, and the stirge attaches to the target. While @@ -961,13 +1153,13 @@ class Stirge(Monster): target dies. A creature, including the target, can use its action to detach the stirge. """ - name = "Stirge" - description = "Tiny beast, unaligned" + name = 'Stirge' + description = 'Tiny beast, unaligned' challenge_rating = 0.125 armor_class = 14 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 9" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 9' + languages = '' strength = Ability(4) dexterity = Ability(16) constitution = Ability(11) @@ -978,16 +1170,25 @@ class Stirge(Monster): swim_speed = 0 fly_speed = 40 climb_speed = 0 + burrow_speed = 0 hp_max = 2 - hit_dice = "1d4" + hit_dice = '1d4 + 0' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class StoneGiant(Monster): """ + Stone Camouflage. The giant has advantage on Dexterity (Stealth) checks made to hide in rocky terrain. + + # Actions + Multiattack. The giant makes two greatclub attacks. Greatclub. @@ -997,14 +1198,21 @@ class StoneGiant(Monster): Ranged Weapon Attack: +9 to hit, range 60/240 ft., one target. Hit: 28 (4d10 + 6) bludgeoning damage. If the target is a creature, it must succeed on a DC 17 Strength saving throw or be knocked prone. + + # Reactions + + Rock Catching. + If a rock or similar object is hurled at the giant, the giant can, + with a successful DC 10 Dexterity saving throw, catch the missile and + take no bludgeoning damage from it. """ - name = "Stone Giant" - description = "Huge giant, neutral" + name = 'Stone Giant' + description = 'Huge giant, neutral' challenge_rating = 7 armor_class = 17 - skills = "Athletics +12, Perception +4" - senses = "Darkvision 60 ft., Passive Perception 14" - languages = "Giant" + skills = 'Athletics +12, Perception +4' + senses = 'Darkvision 60 ft., Passive Perception 14' + languages = 'Giant' strength = Ability(23) dexterity = Ability(15) constitution = Ability(20) @@ -1015,13 +1223,19 @@ class StoneGiant(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 126 - hit_dice = "11d12" + hit_dice = '11d12 + 55' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class StoneGolem(Monster): """ + Immutable Form. The golem is immune to any spell or effect that would alter its form. Magic Resistance. @@ -1029,6 +1243,9 @@ class StoneGolem(Monster): magical effects. Magic Weapons. The golem's weapon attacks are magical. + + # Actions + Multiattack. The golem makes two slam attacks. Slam. @@ -1044,12 +1261,12 @@ class StoneGolem(Monster): repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. """ - name = "Stone Golem" - description = "Large construct, unaligned" + name = 'Stone Golem' + description = 'Large construct, unaligned' challenge_rating = 10 armor_class = 17 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 10" + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 10' languages = "understands the languages of its creator but can't speak" strength = Ability(22) dexterity = Ability(9) @@ -1061,8 +1278,13 @@ class StoneGolem(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 178 - hit_dice = "17d10" + hit_dice = '17d10 + 85' + condition_immunities = 'charmed, exhaustion, frightened, paralyzed, petrified, poisoned' + damage_immunities = "poison, psychic, bludgeoning, piercing, and slashing from nonmagical weapons that aren't adamantine" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -1104,13 +1326,13 @@ class Stonemelder(Monster): it serves as a conduit for Ogrémoch's wrath. """ - name = "Stonemelder" - description = "Medium humanoid (human), neutral evil" + name = 'Stonemelder' + description = 'Medium humanoid (human), neutral evil' challenge_rating = 4 armor_class = 17 - skills = "Intimidation +5, Perception +2" - senses = "termorsense 30 ft., passive Perception 12" - languages = "Common, Terran" + skills = 'Intimidation +5, Perception +2' + senses = 'termorsense 30 ft., passive Perception 12' + languages = 'Common, Terran' strength = Ability(15) dexterity = Ability(10) constitution = Ability(16) @@ -1122,15 +1344,13 @@ class Stonemelder(Monster): fly_speed = 0 climb_speed = 0 hp_max = 75 - hit_dice = "10d8 + 30" - spells = ["acid splash", "blade ward", "light", "mending", "mold earth", - "expeditious retreat", "false life", "shield", - "maximilian's earthen grasp", "shatter", "erupting earth", - "meld into stone", "stoneskin"] + hit_dice = '10d8 + 30' + spells = ['acid splash', 'blade ward', 'light', 'mending', 'mold earth', 'expeditious retreat', 'false life', 'shield', "maximilian's earthen grasp", 'shatter', 'erupting earth', 'meld into stone', 'stoneskin'] class StormGiant(Monster): """ + Amphibious. The giant can breathe air and water. Innate Spellcasting. @@ -1143,6 +1363,9 @@ class StormGiant(Monster): At will: detect magic, feather fall, levitate, light 3/day each: control weather, water breathing + + # Actions + Multiattack. The giant makes two greatsword attacks. Greatsword. @@ -1157,13 +1380,13 @@ class StormGiant(Monster): DC 17 Dexterity saving throw, taking 54 (12d8) lightning damage on a failed save, or half as much damage on a successful one. """ - name = "Storm Giant" - description = "Huge giant, chaotic good" + name = 'Storm Giant' + description = 'Huge giant, chaotic good' challenge_rating = 13 armor_class = 16 - skills = "Arcana +8, Athletics +14, History +8, Perception +9" - senses = "Passive Perception 19" - languages = "Common, Giant" + skills = 'Arcana +8, Athletics +14, History +8, Perception +9' + senses = 'Passive Perception 19' + languages = 'Common, Giant' strength = Ability(29) dexterity = Ability(14) constitution = Ability(20) @@ -1174,13 +1397,19 @@ class StormGiant(Monster): swim_speed = 50 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 230 - hit_dice = "20d12" + hit_dice = '20d12 + 100' + condition_immunities = '' + damage_immunities = 'lightning, thunder' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class SuccubusIncubus(Monster): """ + Telepathic Bond. The fiend ignores the range restriction on its telepathy when communicating with a creature it has charmed. The two don't even need @@ -1191,6 +1420,9 @@ class SuccubusIncubus(Monster): its flying speed. Other than its size and speed, its statistics are the same in each form. Any equipment it is wearing or carrying isn't transformed. It reverts to its true form if it dies. + + # Actions + Claw (Fiend Form Only). Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 6 (1d6 + 3) slashing damage. @@ -1217,13 +1449,13 @@ class SuccubusIncubus(Monster): The fiend magically enters the Ethereal Plane from the Material Plane, or vice versa. """ - name = "Succubus/Incubus" - description = "Medium fiend, neutral evil" + name = 'Succubus/Incubus' + description = 'Medium fiend, neutral evil' challenge_rating = 4 armor_class = 15 - skills = "Deception +9, Insight +5, Perception +5, Persuasion +9, Stealth +7" - senses = "Darkvision 60 ft., Passive Perception 15" - languages = "Abyssal, Common, Infernal, telepathy 60 ft." + skills = 'Deception +9, Insight +5, Perception +5, Persuasion +9, Stealth +7' + senses = 'Darkvision 60 ft., Passive Perception 15' + languages = 'Abyssal, Common, Infernal, telepathy 60 ft.' strength = Ability(8) dexterity = Ability(17) constitution = Ability(13) @@ -1234,46 +1466,13 @@ class SuccubusIncubus(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 66 - hit_dice = "12d8" - spells = [] - - -class SwarmOfBats(Monster): - """ - Echolocation. - The swarm can't use its blindsight while deafened. - Keen Hearing. - The swarm has advantage on Wisdom (Perception) checks that rely on - hearing. - Swarm. - The swarm can occupy another creature's space and vice versa, and the - swarm can move through any opening large enough for a Tiny bat. The - swarm can't regain hit points or gain temporary hit points. - Bites. - Melee Weapon Attack: +4 to hit, reach 0 ft., one creature in the - swarm's space. Hit: 5 (2d4) piercing damage, or 2 (1d4) piercing - damage if the swarm has half of its hit points or fewer. - """ - name = "Swarm of Bats" - description = "Medium swarm of Tiny beasts, unaligned" - challenge_rating = 0.25 - armor_class = 12 - skills = "" - senses = "Blindsight 60 ft., Passive Perception 11" - languages = "" - strength = Ability(5) - dexterity = Ability(15) - constitution = Ability(10) - intelligence = Ability(2) - wisdom = Ability(12) - charisma = Ability(4) - speed = 0 - swim_speed = 0 - fly_speed = 30 - climb_speed = 0 - hp_max = 22 - hit_dice = "5d8" + hit_dice = '12d8 + 12' + condition_immunities = '' + damage_immunities = '' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] @@ -1293,13 +1492,13 @@ class SwarmOfBats(Monster): damage if the swarm has half of its hit points or fewer. """ - name = "Swarm of Bats" - description = "Medium swarm of Tiny beasts, unaligned" + name = 'Swarm of Bats' + description = 'Medium swarm of Tiny beasts, unaligned' challenge_rating = 0.25 armor_class = 12 - skills = "" - senses = "Blindsight 60 ft., Passive Perception 11" - languages = "" + skills = '' + senses = 'Blindsight 60 ft., Passive Perception 11' + languages = '' strength = Ability(5) dexterity = Ability(15) constitution = Ability(10) @@ -1311,7 +1510,7 @@ class SwarmOfBats(Monster): fly_speed = 30 climb_speed = 0 hp_max = 22 - hit_dice = "5d8" + hit_dice = '5d8' class SwarmOfBeetles(Monster): @@ -1325,13 +1524,13 @@ class SwarmOfBeetles(Monster): space. Hit: 10 (4d4) piercing damage, or 5 (2d4) piercing damage if the swarm has half of its hit points or fewer. """ - name = "Swarm of Beetles" - description = "Medium swarm of Tiny beasts, unaligned" + name = 'Swarm of Beetles' + description = 'Medium swarm of Tiny beasts, unaligned' challenge_rating = 0.5 armor_class = 12 - skills = "" - senses = "Blindsight 10 ft., Passive Perception 8" - languages = "" + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 8' + languages = '' strength = Ability(3) dexterity = Ability(13) constitution = Ability(10) @@ -1343,7 +1542,7 @@ class SwarmOfBeetles(Monster): fly_speed = 0 climb_speed = 20 hp_max = 22 - hit_dice = "5d8" + hit_dice = '5d8' spells = [] @@ -1362,13 +1561,13 @@ class SwarmOfCentipedes(Monster): but poisoned for 1 hour, even after regaining hit points, and paralyzed while poisoned in this way. """ - name = "Swarm of Centipedes" - description = "Medium swarm of Tiny beasts, unaligned" + name = 'Swarm of Centipedes' + description = 'Medium swarm of Tiny beasts, unaligned' challenge_rating = 0.5 armor_class = 12 - skills = "" - senses = "Blindsight 10 ft., Passive Perception 8" - languages = "" + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 8' + languages = '' strength = Ability(3) dexterity = Ability(13) constitution = Ability(10) @@ -1380,7 +1579,7 @@ class SwarmOfCentipedes(Monster): fly_speed = 0 climb_speed = 20 hp_max = 22 - hit_dice = "5d8" + hit_dice = '5d8' spells = [] @@ -1395,13 +1594,13 @@ class SwarmOfInsects(Monster): space. Hit: 10 (4d4) piercing damage, or 5 (2d4) piercing damage if the swarm has half of its hit points or fewer. """ - name = "Swarm of Insects" - description = "Medium swarm of Tiny beasts, unaligned" + name = 'Swarm of Insects' + description = 'Medium swarm of Tiny beasts, unaligned' challenge_rating = 0.5 armor_class = 12 - skills = "" - senses = "Blindsight 10 ft., Passive Perception 8" - languages = "" + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 8' + languages = '' strength = Ability(3) dexterity = Ability(13) constitution = Ability(10) @@ -1413,7 +1612,7 @@ class SwarmOfInsects(Monster): fly_speed = 0 climb_speed = 20 hp_max = 22 - hit_dice = "5d8" + hit_dice = '5d8' spells = [] @@ -1430,13 +1629,13 @@ class SwarmOfPoisonousSnakes(Monster): must make a DC 10 Constitution saving throw, taking 14 (4d6) poison damage on a failed save, or half as much damage on a successful one. """ - name = "Swarm of Poisonous Snakes" - description = "Medium swarm of Tiny beasts, unaligned" + name = 'Swarm of Poisonous Snakes' + description = 'Medium swarm of Tiny beasts, unaligned' challenge_rating = 2 armor_class = 14 - skills = "" - senses = "Blindsight 10 ft., Passive Perception 10" - languages = "" + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 10' + languages = '' strength = Ability(8) dexterity = Ability(18) constitution = Ability(11) @@ -1448,7 +1647,7 @@ class SwarmOfPoisonousSnakes(Monster): fly_speed = 0 climb_speed = 0 hp_max = 36 - hit_dice = "8d8" + hit_dice = '8d8' spells = [] @@ -1468,13 +1667,13 @@ class SwarmOfQuippers(Monster): swarm's space. Hit: 14 (4d6) piercing damage, or 7 (2d6) piercing damage if the swarm has half of its hit points or fewer. """ - name = "Swarm of Quippers" - description = "Medium swarm of Tiny beasts, unaligned" + name = 'Swarm of Quippers' + description = 'Medium swarm of Tiny beasts, unaligned' challenge_rating = 1 armor_class = 13 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 8" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 8' + languages = '' strength = Ability(13) dexterity = Ability(16) constitution = Ability(9) @@ -1486,7 +1685,7 @@ class SwarmOfQuippers(Monster): fly_speed = 0 climb_speed = 0 hp_max = 28 - hit_dice = "8d8" + hit_dice = '8d8' spells = [] @@ -1504,13 +1703,13 @@ class SwarmOfRats(Monster): space. Hit: 7 (2d6) piercing damage, or 3 (1d6) piercing damage if the swarm has half of its hit points or fewer. """ - name = "Swarm of Rats" - description = "Medium swarm of Tiny beasts, unaligned" + name = 'Swarm of Rats' + description = 'Medium swarm of Tiny beasts, unaligned' challenge_rating = 0.25 armor_class = 10 - skills = "" - senses = "Darkvision 30 ft., Passive Perception 10" - languages = "" + skills = '' + senses = 'Darkvision 30 ft., Passive Perception 10' + languages = '' strength = Ability(9) dexterity = Ability(11) constitution = Ability(9) @@ -1522,7 +1721,7 @@ class SwarmOfRats(Monster): fly_speed = 0 climb_speed = 0 hp_max = 24 - hit_dice = "7d8" + hit_dice = '7d8' spells = [] @@ -1537,13 +1736,13 @@ class SwarmOfRavens(Monster): space. Hit: 7 (2d6) piercing damage, or 3 (1d6) piercing damage if the swarm has half of its hit points or fewer. """ - name = "Swarm of Ravens" - description = "Medium swarm of Tiny beasts, unaligned" + name = 'Swarm of Ravens' + description = 'Medium swarm of Tiny beasts, unaligned' challenge_rating = 0.25 armor_class = 12 - skills = "" - senses = "Passive Perception 15" - languages = "" + skills = '' + senses = 'Passive Perception 15' + languages = '' strength = Ability(6) dexterity = Ability(14) constitution = Ability(8) @@ -1555,7 +1754,7 @@ class SwarmOfRavens(Monster): fly_speed = 50 climb_speed = 0 hp_max = 24 - hit_dice = "7d8" + hit_dice = '7d8' spells = [] @@ -1578,13 +1777,13 @@ class SwarmOfSpiders(Monster): space. Hit: 10 (4d4) piercing damage, or 5 (2d4) piercing damage if the swarm has half of its hit points or fewer. """ - name = "Swarm of Spiders" - description = "Medium swarm of Tiny beasts, unaligned" + name = 'Swarm of Spiders' + description = 'Medium swarm of Tiny beasts, unaligned' challenge_rating = 0.5 armor_class = 12 - skills = "" - senses = "Blindsight 10 ft., Passive Perception 8" - languages = "" + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 8' + languages = '' strength = Ability(3) dexterity = Ability(13) constitution = Ability(10) @@ -1596,7 +1795,7 @@ class SwarmOfSpiders(Monster): fly_speed = 0 climb_speed = 20 hp_max = 22 - hit_dice = "5d8" + hit_dice = '5d8' spells = [] @@ -1611,13 +1810,13 @@ class SwarmOfWasps(Monster): space. Hit: 10 (4d4) piercing damage, or 5 (2d4) piercing damage if the swarm has half of its hit points or fewer. """ - name = "Swarm of Wasps" - description = "Medium swarm of Tiny beasts, unaligned" + name = 'Swarm of Wasps' + description = 'Medium swarm of Tiny beasts, unaligned' challenge_rating = 0.5 armor_class = 12 - skills = "" - senses = "Blindsight 10 ft., Passive Perception 8" - languages = "" + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 8' + languages = '' strength = Ability(3) dexterity = Ability(13) constitution = Ability(10) @@ -1629,5 +1828,452 @@ class SwarmOfWasps(Monster): fly_speed = 30 climb_speed = 0 hp_max = 22 - hit_dice = "5d8" + hit_dice = '5d8' + spells = [] + + +class SwarmofBats(Monster): + """ + + Echolocation. + The swarm can't use its blindsight while deafened. + Keen Hearing. + The swarm has advantage on Wisdom (Perception) checks that rely on + hearing. + Swarm. + The swarm can occupy another creature's space and vice versa, and the + swarm can move through any opening large enough for a Tiny bat. The + swarm can't regain hit points or gain temporary hit points. + + # Actions + + Bites. + Melee Weapon Attack: +4 to hit, reach 0 ft., one creature in the + swarm's space. Hit: 5 (2d4) piercing damage, or 2 (1d4) piercing + damage if the swarm has half of its hit points or fewer. + """ + name = 'Swarm of Bats' + description = 'Medium swarm of Tiny beasts, unaligned' + challenge_rating = 0.25 + armor_class = 12 + skills = '' + senses = 'Blindsight 60 ft., Passive Perception 11' + languages = '' + strength = Ability(5) + dexterity = Ability(15) + constitution = Ability(10) + intelligence = Ability(2) + wisdom = Ability(12) + charisma = Ability(4) + speed = 0 + swim_speed = 0 + fly_speed = 30 + climb_speed = 0 + burrow_speed = 0 + hp_max = 22 + hit_dice = '5d8 + 0' + condition_immunities = 'charmed, frightened, grappled, paralyzed, petrified, prone, restrained, stunned' + damage_immunities = '' + damage_resistances = 'bludgeoning' + damage_vulnerabilities = '' + spells = [] + + +class SwarmofBeetles(Monster): + """ + + Swarm. + The swarm can occupy another creature's space and vice versa, and the + swarm can move through any opening large enough for a Tiny insect. The + swarm can't regain hit points or gain temporary hit points. + + # Actions + + Bites. + Melee Weapon Attack: +3 to hit, reach 0 ft., one target in the swarm's + space. Hit: 10 (4d4) piercing damage, or 5 (2d4) piercing damage if + the swarm has half of its hit points or fewer. + """ + name = 'Swarm of Beetles' + description = 'Medium swarm of Tiny beasts, unaligned' + challenge_rating = 0.5 + armor_class = 12 + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 8' + languages = '' + strength = Ability(3) + dexterity = Ability(13) + constitution = Ability(10) + intelligence = Ability(1) + wisdom = Ability(7) + charisma = Ability(1) + speed = 20 + swim_speed = 0 + fly_speed = 0 + climb_speed = 20 + burrow_speed = 5 + hp_max = 22 + hit_dice = '5d8 + 0' + condition_immunities = 'charmed, frightened, grappled, paralyzed, petrified, prone, restrained, stunned' + damage_immunities = '' + damage_resistances = 'bludgeoning' + damage_vulnerabilities = '' + spells = [] + + +class SwarmofCentipedes(Monster): + """ + + Swarm. + The swarm can occupy another creature's space and vice versa, and the + swarm can move through any opening large enough for a Tiny insect. The + swarm can't regain hit points or gain temporary hit points. + + # Actions + + Bites. + Melee Weapon Attack: +3 to hit, reach 0 ft., one target in the swarm's + space. Hit: 10 (4d4) piercing damage, or 5 (2d4) piercing damage if + the swarm has half of its hit points or fewer. + + A creature reduced to 0 hit points by a swarm of centipedes is stable + but poisoned for 1 hour, even after regaining hit points, and + paralyzed while poisoned in this way. + """ + name = 'Swarm of Centipedes' + description = 'Medium swarm of Tiny beasts, unaligned' + challenge_rating = 0.5 + armor_class = 12 + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 8' + languages = '' + strength = Ability(3) + dexterity = Ability(13) + constitution = Ability(10) + intelligence = Ability(1) + wisdom = Ability(7) + charisma = Ability(1) + speed = 20 + swim_speed = 0 + fly_speed = 0 + climb_speed = 20 + burrow_speed = 0 + hp_max = 22 + hit_dice = '5d8 + 0' + condition_immunities = 'charmed, frightened, grappled, paralyzed, petrified, prone, restrained, stunned' + damage_immunities = '' + damage_resistances = 'bludgeoning' + damage_vulnerabilities = '' + spells = [] + + +class SwarmofInsects(Monster): + """ + + Swarm. + The swarm can occupy another creature's space and vice versa, and the + swarm can move through any opening large enough for a Tiny insect. The + swarm can't regain hit points or gain temporary hit points. + + # Actions + + Bites. + Melee Weapon Attack: +3 to hit, reach 0 ft., one target in the swarm's + space. Hit: 10 (4d4) piercing damage, or 5 (2d4) piercing damage if + the swarm has half of its hit points or fewer. + """ + name = 'Swarm of Insects' + description = 'Medium swarm of Tiny beasts, unaligned' + challenge_rating = 0.5 + armor_class = 12 + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 8' + languages = '' + strength = Ability(3) + dexterity = Ability(13) + constitution = Ability(10) + intelligence = Ability(1) + wisdom = Ability(7) + charisma = Ability(1) + speed = 20 + swim_speed = 0 + fly_speed = 0 + climb_speed = 20 + burrow_speed = 0 + hp_max = 22 + hit_dice = '5d8 + 0' + condition_immunities = 'charmed, frightened, grappled, paralyzed, petrified, prone, restrained, stunned' + damage_immunities = '' + damage_resistances = 'bludgeoning' + damage_vulnerabilities = '' + spells = [] + + +class SwarmofPoisonousSnakes(Monster): + """ + + Swarm. + The swarm can occupy another creature's space and vice versa, and the + swarm can move through any opening large enough for a Tiny snake. The + swarm can't regain hit points or gain temporary hit points. + + # Actions + + Bites. + Melee Weapon Attack: +6 to hit, reach 0 ft., one creature in the + swarm's space. Hit: 7 (2d6) piercing damage, or 3 (1d6) piercing + damage if the swarm has half of its hit points or fewer. The target + must make a DC 10 Constitution saving throw, taking 14 (4d6) poison + damage on a failed save, or half as much damage on a successful one. + """ + name = 'Swarm of Poisonous Snakes' + description = 'Medium swarm of Tiny beasts, unaligned' + challenge_rating = 2 + armor_class = 14 + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 10' + languages = '' + strength = Ability(8) + dexterity = Ability(18) + constitution = Ability(11) + intelligence = Ability(1) + wisdom = Ability(10) + charisma = Ability(3) + speed = 30 + swim_speed = 30 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 36 + hit_dice = '8d8 + 0' + condition_immunities = 'charmed, frightened, grappled, paralyzed, petrified, prone, restrained, stunned' + damage_immunities = '' + damage_resistances = 'bludgeoning' + damage_vulnerabilities = '' + spells = [] + + +class SwarmofQuippers(Monster): + """ + + Blood Frenzy. + The swarm has advantage on melee attack rolls against any creature + that doesn't have all its hit points. + Swarm. + The swarm can occupy another creature's space and vice versa, and the + swarm can move through any opening large enough for a Tiny quipper. + The swarm can't regain hit points or gain temporary hit points. + Water Breathing. + The swarm can breathe only underwater. + + # Actions + + Bites. + Melee Weapon Attack: +5 to hit, reach 0 ft., one creature in the + swarm's space. Hit: 14 (4d6) piercing damage, or 7 (2d6) piercing + damage if the swarm has half of its hit points or fewer. + """ + name = 'Swarm of Quippers' + description = 'Medium swarm of Tiny beasts, unaligned' + challenge_rating = 1 + armor_class = 13 + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 8' + languages = '' + strength = Ability(13) + dexterity = Ability(16) + constitution = Ability(9) + intelligence = Ability(1) + wisdom = Ability(7) + charisma = Ability(2) + speed = 0 + swim_speed = 40 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 28 + hit_dice = '8d8 + -8' + condition_immunities = 'charmed, frightened, grappled, paralyzed, petrified, prone, restrained, stunned' + damage_immunities = '' + damage_resistances = 'bludgeoning' + damage_vulnerabilities = '' + spells = [] + + +class SwarmofRats(Monster): + """ + + Keen Smell. + The swarm has advantage on Wisdom (Perception) checks that rely on + smell. + Swarm. + The swarm can occupy another creature's space and vice versa, and the + swarm can move through any opening large enough for a Tiny rat. The + swarm can't regain hit points or gain temporary hit points. + + # Actions + + Bites. + Melee Weapon Attack: +2 to hit, reach 0 ft., one target in the swarm's + space. Hit: 7 (2d6) piercing damage, or 3 (1d6) piercing damage if the + swarm has half of its hit points or fewer. + """ + name = 'Swarm of Rats' + description = 'Medium swarm of Tiny beasts, unaligned' + challenge_rating = 0.25 + armor_class = 10 + skills = '' + senses = 'Darkvision 30 ft., Passive Perception 10' + languages = '' + strength = Ability(9) + dexterity = Ability(11) + constitution = Ability(9) + intelligence = Ability(2) + wisdom = Ability(10) + charisma = Ability(3) + speed = 30 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 24 + hit_dice = '7d8 + -7' + condition_immunities = 'charmed, frightened, grappled, paralyzed, petrified, prone, restrained, stunned' + damage_immunities = '' + damage_resistances = 'bludgeoning' + damage_vulnerabilities = '' + spells = [] + + +class SwarmofRavens(Monster): + """ + + Swarm. + The swarm can occupy another creature's space and vice versa, and the + swarm can move through any opening large enough for a Tiny raven. The + swarm can't regain hit points or gain temporary hit points. + + # Actions + + Beaks. + Melee Weapon Attack: +4 to hit, reach 5 ft., one target in the swarm's + space. Hit: 7 (2d6) piercing damage, or 3 (1d6) piercing damage if the + swarm has half of its hit points or fewer. + """ + name = 'Swarm of Ravens' + description = 'Medium swarm of Tiny beasts, unaligned' + challenge_rating = 0.25 + armor_class = 12 + skills = '' + senses = 'Passive Perception 15' + languages = '' + strength = Ability(6) + dexterity = Ability(14) + constitution = Ability(8) + intelligence = Ability(3) + wisdom = Ability(12) + charisma = Ability(6) + speed = 10 + swim_speed = 0 + fly_speed = 50 + climb_speed = 0 + burrow_speed = 0 + hp_max = 24 + hit_dice = '7d8 + -7' + condition_immunities = 'charmed, frightened, grappled, paralyzed, petrified, prone, restrained, stunned' + damage_immunities = '' + damage_resistances = 'bludgeoning' + damage_vulnerabilities = '' + spells = [] + + +class SwarmofSpiders(Monster): + """ + + Swarm. + The swarm can occupy another creature's space and vice versa, and the + swarm can move through any opening large enough for a Tiny insect. The + swarm can't regain hit points or gain temporary hit points. + Spider Climb. + The swarm can climb difficult surfaces, including upside down on + ceilings, without needing to make an ability check. + Web Sense. + While in contact with a web, the swarm knows the exact location of any + other creature in contact with the same web. + Web Walker. + The swarm ignores movement restrictions caused by webbing. + + # Actions + + Bites. + Melee Weapon Attack: +3 to hit, reach 0 ft., one target in the swarm's + space. Hit: 10 (4d4) piercing damage, or 5 (2d4) piercing damage if + the swarm has half of its hit points or fewer. + """ + name = 'Swarm of Spiders' + description = 'Medium swarm of Tiny beasts, unaligned' + challenge_rating = 0.5 + armor_class = 12 + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 8' + languages = '' + strength = Ability(3) + dexterity = Ability(13) + constitution = Ability(10) + intelligence = Ability(1) + wisdom = Ability(7) + charisma = Ability(1) + speed = 20 + swim_speed = 0 + fly_speed = 0 + climb_speed = 20 + burrow_speed = 0 + hp_max = 22 + hit_dice = '5d8 + 0' + condition_immunities = 'charmed, frightened, paralyzed, petrified, prone, restrained, stunned' + damage_immunities = '' + damage_resistances = 'bludgeoning' + damage_vulnerabilities = '' + spells = [] + + +class SwarmofWasps(Monster): + """ + + Swarm. + The swarm can occupy another creature's space and vice versa, and the + swarm can move through any opening large enough for a Tiny insect. The + swarm can't regain hit points or gain temporary hit points. + + # Actions + + Bites. + Melee Weapon Attack: +3 to hit, reach 0 ft., one target in the swarm's + space. Hit: 10 (4d4) piercing damage, or 5 (2d4) piercing damage if + the swarm has half of its hit points or fewer. + """ + name = 'Swarm of Wasps' + description = 'Medium swarm of Tiny beasts, unaligned' + challenge_rating = 0.5 + armor_class = 12 + skills = '' + senses = 'Blindsight 10 ft., Passive Perception 8' + languages = '' + strength = Ability(3) + dexterity = Ability(13) + constitution = Ability(10) + intelligence = Ability(1) + wisdom = Ability(7) + charisma = Ability(1) + speed = 5 + swim_speed = 0 + fly_speed = 30 + climb_speed = 0 + burrow_speed = 0 + hp_max = 22 + hit_dice = '5d8 + 0' + condition_immunities = 'charmed, frightened, grappled, paralyzed, petrified, prone, restrained, stunned' + damage_immunities = '' + damage_resistances = 'bludgeoning' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_t.py b/dungeonsheets/monsters/monsters_t.py index 7367ecd..9e3ae8c 100644 --- a/dungeonsheets/monsters/monsters_t.py +++ b/dungeonsheets/monsters/monsters_t.py @@ -10,6 +10,7 @@ from dungeonsheets.stats import Ability class Tarrasque(Monster): """ + Legendary Resistance. If the tarrasque fails a saving throw, it can choose to succeed instead. @@ -24,6 +25,9 @@ class Tarrasque(Monster): it originated from the tarrasque, turning the caster into the target. Siege Monster. The tarrasque deals double damage to objects and structures. + + # Actions + Multiattack. The tarrasque can use its Frightful Presence. It then makes five attacks: one with its bite, two with its claws, one with its horns, @@ -67,14 +71,23 @@ class Tarrasque(Monster): tarrasque. If the tarrasque dies, a swallowed creature is no longer restrained by it and can escape from the corpse by using 30 feet of movement, exiting prone. + + # Legendary Actions + + Attack. + The tarrasque makes one claw attack or tail attack. + Move. + The tarrasque moves up to half its speed. + Chomp (Costs 2 Actions). + The tarrasque makes one bite attack or uses its Swallow. """ - name = "Tarrasque" - description = "Gargantuan monstrosity, unaligned" + name = 'Tarrasque' + description = 'Gargantuan monstrosity, unaligned' challenge_rating = 30 armor_class = 25 - skills = "" - senses = "Blindsight 120 ft., Passive Perception 10" - languages = "" + skills = '' + senses = 'Blindsight 120 ft., Passive Perception 10' + languages = '' strength = Ability(30) dexterity = Ability(11) constitution = Ability(30) @@ -85,17 +98,26 @@ class Tarrasque(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 676 - hit_dice = "33d20" + hit_dice = '33d20 + 330' + condition_immunities = 'charmed, frightened, paralyzed, poisoned' + damage_immunities = 'fire, poison, bludgeoning, piercing, and slashing from nonmagical weapons' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Thug(Monster): """ + Pack Tactics. The thug has advantage on an attack roll against a creature if at least one of the thug's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Multiattack. The thug makes two melee attacks. Mace. @@ -105,13 +127,13 @@ class Thug(Monster): Ranged Weapon Attack: +2 to hit, range 100/400 ft., one target. Hit: 5 (1d10) piercing damage. """ - name = "Thug" - description = "Medium humanoid, any non-good alignment" + name = 'Thug' + description = 'Medium humanoid, any non-good alignment' challenge_rating = 0.5 armor_class = 11 - skills = "Intimidation +2" - senses = "Passive Perception 10" - languages = "any one language (usually Common)" + skills = 'Intimidation +2' + senses = 'Passive Perception 10' + languages = 'any one language (usually Common)' strength = Ability(15) dexterity = Ability(11) constitution = Ability(14) @@ -122,13 +144,19 @@ class Thug(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 32 - hit_dice = "5d8" + hit_dice = '5d8 + 10' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Tiger(Monster): """ + Keen Smell. The tiger has advantage on Wisdom (Perception) checks that rely on smell. @@ -138,6 +166,9 @@ class Tiger(Monster): on a DC 13 Strength saving throw or be knocked prone. If the target is prone, the tiger can make one bite attack against it as a bonus action. + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 8 (1d10 + 3) piercing damage. @@ -145,13 +176,13 @@ class Tiger(Monster): Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d8 + 3) slashing damage. """ - name = "Tiger" - description = "Large beast, unaligned" + name = 'Tiger' + description = 'Large beast, unaligned' challenge_rating = 1 armor_class = 12 - skills = "Perception +3, Stealth +6" - senses = "Darkvision 60 ft., Passive Perception 13" - languages = "" + skills = 'Perception +3, Stealth +6' + senses = 'Darkvision 60 ft., Passive Perception 13' + languages = '' strength = Ability(17) dexterity = Ability(15) constitution = Ability(14) @@ -162,18 +193,27 @@ class Tiger(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 37 - hit_dice = "5d10" + hit_dice = '5d10 + 10' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Treant(Monster): """ + False Appearance. While the treant remains motionless, it is indistinguishable from a normal tree. Siege Monster. The treant deals double damage to objects and structures. + + # Actions + Multiattack. The treant makes two slam attacks. Slam. @@ -192,13 +232,13 @@ class Treant(Monster): until the treant takes a bonus action to turn it back into an inanimate tree. The tree then takes root if possible. """ - name = "Treant" - description = "Huge plant, chaotic good" + name = 'Treant' + description = 'Huge plant, chaotic good' challenge_rating = 9 armor_class = 16 - skills = "" - senses = "Passive Perception 13" - languages = "Common, Druidic, Elvish, Sylvan" + skills = '' + senses = 'Passive Perception 13' + languages = 'Common, Druidic, Elvish, Sylvan' strength = Ability(23) dexterity = Ability(8) constitution = Ability(21) @@ -209,29 +249,38 @@ class Treant(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 138 - hit_dice = "12d12" + hit_dice = '12d12 + 60' + condition_immunities = '' + damage_immunities = '' + damage_resistances = 'bludgeoning' + damage_vulnerabilities = 'fire' spells = [] class TribalWarrior(Monster): """ + Pack Tactics. The warrior has advantage on an attack roll against a creature if at least one of the warrior's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Spear. Melee or Ranged Weapon Attack: +3 to hit, reach 5 ft. or range 20/60 ft., one target. Hit: 4 (1d6 + 1) piercing damage, or 5 (1d8 + 1) piercing damage if used with two hands to make a melee attack. """ - name = "Tribal Warrior" - description = "Medium humanoid, any alignment" + name = 'Tribal Warrior' + description = 'Medium humanoid, any alignment' challenge_rating = 0.125 armor_class = 12 - skills = "" - senses = "Passive Perception 10" - languages = "any one language" + skills = '' + senses = 'Passive Perception 10' + languages = 'any one language' strength = Ability(13) dexterity = Ability(11) constitution = Ability(12) @@ -242,19 +291,28 @@ class TribalWarrior(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 11 - hit_dice = "2d8" + hit_dice = '2d8 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Triceratops(Monster): """ + Trampling Charge. If the triceratops moves at least 20 ft. straight toward a creature and then hits it with a gore attack on the same turn, that target must succeed on a DC 13 Strength saving throw or be knocked prone. If the target is prone, the triceratops can make one stomp attack against it as a bonus action. + + # Actions + Gore. Melee Weapon Attack: +9 to hit, reach 5 ft., one target. Hit: 24 (4d8 + 6) piercing damage. @@ -262,13 +320,13 @@ class Triceratops(Monster): Melee Weapon Attack: +9 to hit, reach 5 ft., one prone creature. Hit: 22 (3d10 + 6) bludgeoning damage """ - name = "Triceratops" - description = "Huge beast, unaligned" + name = 'Triceratops' + description = 'Huge beast, unaligned' challenge_rating = 5 armor_class = 13 - skills = "" - senses = "Passive Perception 10" - languages = "" + skills = '' + senses = 'Passive Perception 10' + languages = '' strength = Ability(22) dexterity = Ability(9) constitution = Ability(17) @@ -279,13 +337,19 @@ class Triceratops(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 95 - hit_dice = "10d12" + hit_dice = '10d12 + 30' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Troll(Monster): """ + Keen Smell. The troll has advantage on Wisdom (Perception) checks that rely on smell. @@ -329,6 +393,9 @@ class Troll(Monster): legs, it falls prone. If it has both arms, it can crawl. With only one arm, it can still crawl, but its speed is halved. With no arms or legs, its speed is 0, and it can't benefit from bonuses to speed. + + # Actions + Multiattack. The troll makes three attacks: one with its bite and two with its claws. @@ -339,13 +406,13 @@ class Troll(Monster): Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 11 (2d6 + 4) slashing damage. """ - name = "Troll" - description = "Large giant, chaotic evil" + name = 'Troll' + description = 'Large giant, chaotic evil' challenge_rating = 5 armor_class = 15 - skills = "Perception +2" - senses = "Darkvision 60 ft., Passive Perception 12" - languages = "Giant" + skills = 'Perception +2' + senses = 'Darkvision 60 ft., Passive Perception 12' + languages = 'Giant' strength = Ability(18) dexterity = Ability(13) constitution = Ability(20) @@ -356,13 +423,21 @@ class Troll(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 84 - hit_dice = "8d10" + hit_dice = '8d10 + 40' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class TyrannosaurusRex(Monster): """ + + # Actions + Multiattack. The tyrannosaurus makes two attacks: one with its bite and one with its tail. It can't make both attacks against the same target. @@ -375,13 +450,13 @@ class TyrannosaurusRex(Monster): Melee Weapon Attack: +10 to hit, reach 10 ft., one target. Hit: 20 (3d8 + 7) bludgeoning damage. """ - name = "Tyrannosaurus Rex" - description = "Huge beast, unaligned" + name = 'Tyrannosaurus Rex' + description = 'Huge beast, unaligned' challenge_rating = 8 armor_class = 13 - skills = "Perception +4" - senses = "Passive Perception 14" - languages = "" + skills = 'Perception +4' + senses = 'Passive Perception 14' + languages = '' strength = Ability(25) dexterity = Ability(10) constitution = Ability(19) @@ -392,6 +467,11 @@ class TyrannosaurusRex(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 136 - hit_dice = "13d12" + hit_dice = '13d12 + 52' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_u.py b/dungeonsheets/monsters/monsters_u.py index 0c4d0e9..3c5099c 100644 --- a/dungeonsheets/monsters/monsters_u.py +++ b/dungeonsheets/monsters/monsters_u.py @@ -10,6 +10,7 @@ from dungeonsheets.stats import Ability class Unicorn(Monster): """ + Charge. If the unicorn moves at least 20 ft. straight toward a target and then hits it with a horn attack on the same turn, the target takes an extra @@ -30,6 +31,9 @@ class Unicorn(Monster): magical effects. Magic Weapons. The unicorn's weapon attacks are magical. + + # Actions + Multiattack. The unicorn makes two attacks: one with its hooves and one with its horn. @@ -49,14 +53,25 @@ class Unicorn(Monster): creatures it can see within 5 ft. of it, along with any equipment they are wearing or carrying, to a location the unicorn is familiar with, up to 1 mile away. + + # Legendary Actions + + Hooves. + The unicorn makes one attack with its hooves. + Shimmering Shield (Costs 2 Actions). + The unicorn creates a shimmering, magical field around itself or + another creature it can see within 60 ft. of it. The target gains a +2 + bonus to AC until the end of the unicorn's next turn. + Heal Self (Costs 3 Actions). + The unicorn magically regains 11 (2d8 + 2) hit points. """ - name = "Unicorn" - description = "Large celestial, lawful good" + name = 'Unicorn' + description = 'Large celestial, lawful good' challenge_rating = 5 armor_class = 12 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 13" - languages = "Celestial, Elvish, Sylvan, telepathy 60 ft." + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 13' + languages = 'Celestial, Elvish, Sylvan, telepathy 60 ft.' strength = Ability(18) dexterity = Ability(14) constitution = Ability(15) @@ -67,6 +82,11 @@ class Unicorn(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 67 - hit_dice = "9d10" + hit_dice = '9d10 + 18' + condition_immunities = 'charmed, paralyzed, poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_v.py b/dungeonsheets/monsters/monsters_v.py index 7b4b819..8ce6c1c 100644 --- a/dungeonsheets/monsters/monsters_v.py +++ b/dungeonsheets/monsters/monsters_v.py @@ -10,6 +10,7 @@ from dungeonsheets.stats import Ability class Vampire(Monster): """ + Shapechanger. If the vampire isn't in sun light or running water, it can use its action to polymorph into a Tiny bat or a Medium cloud of mist, or back @@ -66,6 +67,9 @@ class Vampire(Monster): Sunlight Hypersensitivity. The vampire takes 20 radiant damage when it starts its turn in sunlight. While in sunlight, it has disadvantage on attack rolls and ability checks. + + # Actions + Multiattack (Vampire Form Only). The vampire makes two attacks, only one of which can be a bite attack. Unarmed Strike (Vampire Form Only). @@ -104,14 +108,24 @@ class Vampire(Monster): of the vampire and obeying its spoken commands. The beasts remain for 1 hour, until the vampire dies, or until the vampire dismisses them as a bonus action. + + # Legendary Actions + + Move. + The vampire moves up to its speed without provoking opportunity + attacks. + Unarmed Strike. + The vampire makes one unarmed strike. + Bite (Costs 2 Actions). + The vampire makes one bite attack. """ - name = "Vampire" - description = "Medium undead, lawful evil" + name = 'Vampire' + description = 'Medium undead, lawful evil' challenge_rating = 13 armor_class = 16 - skills = "Perception +7, Stealth +9" - senses = "Darkvision 120 ft., Passive Perception 17" - languages = "the languages it knew in life" + skills = 'Perception +7, Stealth +9' + senses = 'Darkvision 120 ft., Passive Perception 17' + languages = 'the languages it knew in life' strength = Ability(18) dexterity = Ability(18) constitution = Ability(18) @@ -122,13 +136,19 @@ class Vampire(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 144 - hit_dice = "17d8" + hit_dice = '17d8 + 68' + condition_immunities = '' + damage_immunities = '' + damage_resistances = 'necrotic' + damage_vulnerabilities = '' spells = [] class VampireSpawn(Monster): """ + Regeneration. The vampire regains 10 hit points at the start of its turn if it has at least 1 hit point and isn't in sunlight or running water. If the @@ -153,6 +173,9 @@ class VampireSpawn(Monster): Sunlight Hypersensitivity. The vampire takes 20 radiant damage when it starts its turn in sunlight. While in sunlight, it has disadvantage on attack rolls and ability checks. + + # Actions + Multiattack. The vampire makes two attacks, only one of which can be a bite attack. Bite. @@ -169,13 +192,13 @@ class VampireSpawn(Monster): + 3) slashing damage. Instead of dealing damage, the vampire can grapple the target (escape DC 13). """ - name = "Vampire Spawn" - description = "Medium undead, neutral evil" + name = 'Vampire Spawn' + description = 'Medium undead, neutral evil' challenge_rating = 5 armor_class = 15 - skills = "Perception +3, Stealth +6" - senses = "Darkvision 60 ft., Passive Perception 13" - languages = "the languages it knew in life" + skills = 'Perception +3, Stealth +6' + senses = 'Darkvision 60 ft., Passive Perception 13' + languages = 'the languages it knew in life' strength = Ability(16) dexterity = Ability(16) constitution = Ability(16) @@ -186,13 +209,21 @@ class VampireSpawn(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 82 - hit_dice = "11d8" + hit_dice = '11d8 + 33' + condition_immunities = '' + damage_immunities = '' + damage_resistances = 'necrotic' + damage_vulnerabilities = '' spells = [] class Veteran(Monster): """ + + # Actions + Multiattack. The veteran makes two longsword attacks. If it has a shortsword drawn, it can also make a shortsword attack. @@ -207,13 +238,13 @@ class Veteran(Monster): Ranged Weapon Attack: +3 to hit, range 100/400 ft., one target. Hit: 6 (1d10 + 1) piercing damage. """ - name = "Veteran" - description = "Medium humanoid, any alignment" + name = 'Veteran' + description = 'Medium humanoid, any alignment' challenge_rating = 3 armor_class = 17 - skills = "Athletics +5, Perception +2" - senses = "Passive Perception 12" - languages = "any one language (usually Common)" + skills = 'Athletics +5, Perception +2' + senses = 'Passive Perception 12' + languages = 'any one language (usually Common)' strength = Ability(16) dexterity = Ability(13) constitution = Ability(14) @@ -224,29 +255,38 @@ class Veteran(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 58 - hit_dice = "9d8" + hit_dice = '9d8 + 18' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class VioletFungus(Monster): """ + False Appearance. While the violet fungus remains motionless, it is indistinguishable from an ordinary fungus. + + # Actions + Multiattack. The fungus makes 1d4 Rotting Touch attacks. Rotting Touch. Melee Weapon Attack: +2 to hit, reach 10 ft., one creature. Hit: 4 (1d8) necrotic damage. """ - name = "Violet Fungus" - description = "Medium plant, unaligned" + name = 'Violet Fungus' + description = 'Medium plant, unaligned' challenge_rating = 0.25 armor_class = 5 - skills = "" - senses = "Blindsight 30 ft. (blind beyond this radius), Passive Perception 6" - languages = "" + skills = '' + senses = 'Blindsight 30 ft. (blind beyond this radius), Passive Perception 6' + languages = '' strength = Ability(3) dexterity = Ability(1) constitution = Ability(10) @@ -257,16 +297,25 @@ class VioletFungus(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 18 - hit_dice = "4d8" + hit_dice = '4d8 + 0' + condition_immunities = 'blinded, blinded, frightened' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Vrock(Monster): """ + Magic Resistance. The vrock has advantage on saving throws against spells and other magical effects. + + # Actions + Multiattack. The vrock makes two attacks: one with its beak and one with its talons. @@ -301,13 +350,13 @@ class Vrock(Monster): demons. It remains for 1 minute, until it or its summoner dies, or until its summoner dismisses it as an action. """ - name = "Vrock" - description = "Large fiend, chaotic evil" + name = 'Vrock' + description = 'Large fiend, chaotic evil' challenge_rating = 6 armor_class = 15 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 11" - languages = "Abyssal, telepathy 120 ft." + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 11' + languages = 'Abyssal, telepathy 120 ft.' strength = Ability(17) dexterity = Ability(15) constitution = Ability(18) @@ -318,13 +367,19 @@ class Vrock(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 104 - hit_dice = "11d10" + hit_dice = '11d10 + 44' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = 'cold' + damage_vulnerabilities = '' spells = [] class Vulture(Monster): """ + Keen Sight and Smell. The vulture has advantage on Wisdom (Perception) checks that rely on sight or smell. @@ -332,17 +387,20 @@ class Vulture(Monster): The vulture has advantage on an attack roll against a creature if at least one of the vulture's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Beak. Melee Weapon Attack: +2 to hit, reach 5 ft., one target. Hit: 2 (1d4) piercing damage. """ - name = "Vulture" - description = "Medium beast, unaligned" + name = 'Vulture' + description = 'Medium beast, unaligned' challenge_rating = 0 armor_class = 10 - skills = "Perception +3" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3' + senses = 'Passive Perception 13' + languages = '' strength = Ability(7) dexterity = Ability(10) constitution = Ability(13) @@ -353,6 +411,11 @@ class Vulture(Monster): swim_speed = 0 fly_speed = 50 climb_speed = 0 + burrow_speed = 0 hp_max = 5 - hit_dice = "1d8" + hit_dice = '1d8 + 1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_w.py b/dungeonsheets/monsters/monsters_w.py index 1779ed5..89c2af3 100644 --- a/dungeonsheets/monsters/monsters_w.py +++ b/dungeonsheets/monsters/monsters_w.py @@ -10,23 +10,27 @@ from dungeonsheets.stats import Ability class Warhorse(Monster): """ + Trampling Charge. If the horse moves at least 20 ft. straight toward a creature and then hits it with a hooves attack on the same turn, that target must succeed on a DC 14 Strength saving throw or be knocked prone. If the target is prone, the horse can make another attack with its hooves against it as a bonus action. + + # Actions + Hooves. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 11 (2d6 + 4) bludgeoning damage. """ - name = "Warhorse" - description = "Large beast, unaligned" + name = 'Warhorse' + description = 'Large beast, unaligned' challenge_rating = 0.5 armor_class = 11 - skills = "" - senses = "Passive Perception 11" - languages = "" + skills = '' + senses = 'Passive Perception 11' + languages = '' strength = Ability(18) dexterity = Ability(12) constitution = Ability(13) @@ -37,24 +41,32 @@ class Warhorse(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 19 - hit_dice = "3d10" + hit_dice = '3d10 + 3' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class WarhorseSkeleton(Monster): """ + + # Actions + Hooves. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 11 (2d6 + 4) bludgeoning damage. """ - name = "Warhorse Skeleton" - description = "Large undead, lawful evil" + name = 'Warhorse Skeleton' + description = 'Large undead, lawful evil' challenge_rating = 0.5 armor_class = 13 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 9" - languages = "" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 9' + languages = '' strength = Ability(18) dexterity = Ability(12) constitution = Ability(15) @@ -65,19 +77,28 @@ class WarhorseSkeleton(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "3d10" + hit_dice = '3d10 + 6' + condition_immunities = 'exhaustion, poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = 'bludgeoning' spells = [] class WaterElemental(Monster): """ + Water Form. The elemental can enter a hostile creature's space and stop there. It can move through a space as narrow as 1 inch wide without squeezing. Freeze. If the elemental takes cold damage, it partially freezes; its speed is reduced by 20 ft. until the end of its next turn. + + # Actions + Multiattack. The elemental makes two slam attacks. Slam. @@ -98,13 +119,13 @@ class WaterElemental(Monster): or object out of it by taking an action to make a DC 14 Strength and succeeding. """ - name = "Water Elemental" - description = "Large elemental, neutral" + name = 'Water Elemental' + description = 'Large elemental, neutral' challenge_rating = 5 armor_class = 14 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 10" - languages = "Aquan" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 10' + languages = 'Aquan' strength = Ability(18) dexterity = Ability(14) constitution = Ability(18) @@ -115,27 +136,36 @@ class WaterElemental(Monster): swim_speed = 90 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 114 - hit_dice = "12d10" + hit_dice = '12d10 + 48' + condition_immunities = 'exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained, unconscious' + damage_immunities = 'poison' + damage_resistances = 'acid' + damage_vulnerabilities = '' spells = [] class Weasel(Monster): """ + Keen Hearing and Smell. The weasel has advantage on Wisdom (Perception) checks that rely on hearing or smell. + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one creature. Hit: 1 piercing damage. """ - name = "Weasel" - description = "Tiny beast, unaligned" + name = 'Weasel' + description = 'Tiny beast, unaligned' challenge_rating = 0 armor_class = 13 - skills = "Perception +3, Stealth +5" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3, Stealth +5' + senses = 'Passive Perception 13' + languages = '' strength = Ability(3) dexterity = Ability(16) constitution = Ability(8) @@ -146,8 +176,68 @@ class Weasel(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 1 - hit_dice = "1d4" + hit_dice = '1d4 + -1' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' + spells = [] + + +class WerebearBearForm(Monster): + """ + + Shapechanger. + The werebear can use its action to polymorph into a Large bear- + humanoid hybrid or into a Large bear, or back into its true form, + which is humanoid. Its statistics, other than its size and AC, are the + same in each form. Any equipment it is wearing or carrying isn't + transformed. It reverts to its true form if it dies. + Keen Smell. + The werebear has advantage on Wisdom (Perception) checks that rely on + smell. + + # Actions + + Multiattack. + In bear form, the werebear makes two claw attacks. In humanoid form, + it makes two greataxe attacks. In hybrid form, it can attack like a + bear or a humanoid. + Bite. + Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 15 (2d10 + + 4) piercing damage. If the target is a humanoid, it must succeed on + a DC 14 Constitution saving throw or be cursed with werebear + lycanthropy. + Claw. + Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 13 (2d8 + + 4) slashing damage. + """ + name = 'Werebear, Bear Form' + description = 'Medium humanoid, neutral good' + challenge_rating = 5 + armor_class = 10 + skills = 'Perception +7' + senses = 'Passive Perception 17' + languages = '' + strength = Ability(19) + dexterity = Ability(10) + constitution = Ability(17) + intelligence = Ability(11) + wisdom = Ability(12) + charisma = Ability(12) + speed = 40 + swim_speed = 0 + fly_speed = 0 + climb_speed = 30 + burrow_speed = 0 + hp_max = 135 + hit_dice = '18d8 + 54' + condition_immunities = '' + damage_immunities = 'bludgeoning, piercing, and slashing from nonmagical attacks not made with silvered weapons' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -175,13 +265,13 @@ class WerebearBearform(Monster): Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 13 (2d8 + 4) slashing damage. """ - name = "Werebear, Bear form" - description = "Medium humanoid, neutral good" + name = 'Werebear, Bear form' + description = 'Medium humanoid, neutral good' challenge_rating = 5 armor_class = 10 - skills = "Perception +7" - senses = "Passive Perception 17" - languages = "" + skills = 'Perception +7' + senses = 'Passive Perception 17' + languages = '' strength = Ability(19) dexterity = Ability(10) constitution = Ability(17) @@ -193,7 +283,57 @@ class WerebearBearform(Monster): fly_speed = 0 climb_speed = 30 hp_max = 135 - hit_dice = "18d8" + hit_dice = '18d8' + spells = [] + + +class WerebearHumanForm(Monster): + """ + + Shapechanger. + The werebear can use its action to polymorph into a Large bear- + humanoid hybrid or into a Large bear, or back into its true form, + which is humanoid. Its statistics, other than its size and AC, are the + same in each form. Any equipment it is wearing or carrying isn't + transformed. It reverts to its true form if it dies. + Keen Smell. + The werebear has advantage on Wisdom (Perception) checks that rely on + smell. + + # Actions + + Multiattack. + In bear form, the werebear makes two claw attacks. In humanoid form, + it makes two greataxe attacks. In hybrid form, it can attack like a + bear or a humanoid. + Greataxe. + Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 10 (1d12 + + 4) slashing damage. + """ + name = 'Werebear, Human Form' + description = 'Medium humanoid, neutral good' + challenge_rating = 5 + armor_class = 10 + skills = 'Perception +7' + senses = 'Passive Perception 17' + languages = 'Common' + strength = Ability(19) + dexterity = Ability(10) + constitution = Ability(17) + intelligence = Ability(11) + wisdom = Ability(12) + charisma = Ability(12) + speed = 30 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 135 + hit_dice = '18d8 + 54' + condition_immunities = '' + damage_immunities = 'bludgeoning, piercing, and slashing from nonmagical attacks not made with silvered weapons' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -216,13 +356,13 @@ class WerebearHumanform(Monster): Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 10 (1d12 + 4) slashing damage. """ - name = "Werebear, Human form" - description = "Medium humanoid, neutral good" + name = 'Werebear, Human form' + description = 'Medium humanoid, neutral good' challenge_rating = 5 armor_class = 10 - skills = "Perception +7" - senses = "Passive Perception 17" - languages = "Common" + skills = 'Perception +7' + senses = 'Passive Perception 17' + languages = 'Common' strength = Ability(19) dexterity = Ability(10) constitution = Ability(17) @@ -234,7 +374,65 @@ class WerebearHumanform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 135 - hit_dice = "18d8" + hit_dice = '18d8' + spells = [] + + +class WerebearHybridForm(Monster): + """ + + Shapechanger. + The werebear can use its action to polymorph into a Large bear- + humanoid hybrid or into a Large bear, or back into its true form, + which is humanoid. Its statistics, other than its size and AC, are the + same in each form. Any equipment it is wearing or carrying isn't + transformed. It reverts to its true form if it dies. + Keen Smell. + The werebear has advantage on Wisdom (Perception) checks that rely on + smell. + + # Actions + + Multiattack. + In bear form, the werebear makes two claw attacks. In humanoid form, + it makes two greataxe attacks. In hybrid form, it can attack like a + bear or a humanoid. + Bite. + Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 15 (2d10 + + 4) piercing damage. If the target is a humanoid, it must succeed on + a DC 14 Constitution saving throw or be cursed with werebear + lycanthropy. + Claw. + Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 13 (2d8 + + 4) slashing damage. + Greataxe. + Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 10 (1d12 + + 4) slashing damage. + """ + name = 'Werebear, Hybrid Form' + description = 'Medium humanoid, neutral good' + challenge_rating = 5 + armor_class = 10 + skills = 'Perception +7' + senses = 'Passive Perception 17' + languages = 'Common' + strength = Ability(19) + dexterity = Ability(10) + constitution = Ability(17) + intelligence = Ability(11) + wisdom = Ability(12) + charisma = Ability(12) + speed = 40 + swim_speed = 0 + fly_speed = 0 + climb_speed = 30 + burrow_speed = 0 + hp_max = 135 + hit_dice = '18d8 + 54' + condition_immunities = '' + damage_immunities = 'bludgeoning, piercing, and slashing from nonmagical attacks not made with silvered weapons' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -265,13 +463,13 @@ class WerebearHybridform(Monster): Melee Weapon Attack: +7 to hit, reach 5 ft., one target. Hit: 10 (1d12 + 4) slashing damage. """ - name = "Werebear, Hybrid form" - description = "Medium humanoid, neutral good" + name = 'Werebear, Hybrid form' + description = 'Medium humanoid, neutral good' challenge_rating = 5 armor_class = 10 - skills = "Perception +7" - senses = "Passive Perception 17" - languages = "Common" + skills = 'Perception +7' + senses = 'Passive Perception 17' + languages = 'Common' strength = Ability(19) dexterity = Ability(10) constitution = Ability(17) @@ -283,7 +481,60 @@ class WerebearHybridform(Monster): fly_speed = 0 climb_speed = 30 hp_max = 135 - hit_dice = "18d8" + hit_dice = '18d8' + spells = [] + + +class WereboarBoarForm(Monster): + """ + + Shapechanger. + The wereboar can use its action to polymorph into a boar-humanoid + hybrid or into a boar, or back into its true form, which is humanoid. + Its statistics, other than its AC, are the same in each form. Any + equipment it is wearing or carrying isn't transformed. It reverts to + its true form if it dies. + Charge (Boar or Hybrid Form Only). + If the wereboar moves at least 15 feet straight toward a target and + then hits it with its tusks on the same turn, the target takes an + extra 7 (2d6) slashing damage. If the target is a creature, it must + succeed on a DC 13 Strength saving throw or be knocked prone. + Relentless. + If the wereboar takes 14 damage or less that would reduce it to 0 hit + points, it is reduced to 1 hit point instead. + + # Actions + + Tusks. + Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + + 3) slashing damage. If the target is a humanoid, it must succeed on + a DC 12 Constitution saving throw or be cursed with wereboar + lycanthropy. + """ + name = 'Wereboar, Boar Form' + description = 'Medium humanoid, neutral evil' + challenge_rating = 4 + armor_class = 10 + skills = 'Perception +2' + senses = 'Passive Perception 12' + languages = '' + strength = Ability(17) + dexterity = Ability(10) + constitution = Ability(15) + intelligence = Ability(10) + wisdom = Ability(11) + charisma = Ability(8) + speed = 40 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 78 + hit_dice = '12d8 + 24' + condition_immunities = '' + damage_immunities = "bludgeoning, piercing, and slashing damage from nonmagical weapons that aren't silvered" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -309,13 +560,13 @@ class WereboarBoarform(Monster): a DC 12 Constitution saving throw or be cursed with wereboar lycanthropy. """ - name = "Wereboar, Boar form" - description = "Medium humanoid, neutral evil" + name = 'Wereboar, Boar form' + description = 'Medium humanoid, neutral evil' challenge_rating = 4 armor_class = 10 - skills = "Perception +2" - senses = "Passive Perception 12" - languages = "" + skills = 'Perception +2' + senses = 'Passive Perception 12' + languages = '' strength = Ability(17) dexterity = Ability(10) constitution = Ability(15) @@ -327,7 +578,56 @@ class WereboarBoarform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 78 - hit_dice = "12d8" + hit_dice = '12d8' + spells = [] + + +class WereboarHumanForm(Monster): + """ + + Shapechanger. + The wereboar can use its action to polymorph into a boar-humanoid + hybrid or into a boar, or back into its true form, which is humanoid. + Its statistics, other than its AC, are the same in each form. Any + equipment it is wearing or carrying isn't transformed. It reverts to + its true form if it dies. + Relentless. + If the wereboar takes 14 damage or less that would reduce it to 0 hit + points, it is reduced to 1 hit point instead. + + # Actions + + Multiattack. + The wereboar makes two attacks, only one of which can be with its + tusks. + Maul. + Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + + 3) bludgeoning damage. + """ + name = 'Wereboar, Human Form' + description = 'Medium humanoid, neutral evil' + challenge_rating = 4 + armor_class = 10 + skills = 'Perception +2' + senses = 'Passive Perception 12' + languages = "Common (can't speak in boar form)" + strength = Ability(17) + dexterity = Ability(10) + constitution = Ability(15) + intelligence = Ability(10) + wisdom = Ability(11) + charisma = Ability(8) + speed = 30 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 78 + hit_dice = '12d8 + 24' + condition_immunities = '' + damage_immunities = "bludgeoning, piercing, and slashing damage from nonmagical weapons that aren't silvered" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -349,12 +649,12 @@ class WereboarHumanform(Monster): Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + 3) bludgeoning damage. """ - name = "Wereboar, Human form" - description = "Medium humanoid, neutral evil" + name = 'Wereboar, Human form' + description = 'Medium humanoid, neutral evil' challenge_rating = 4 armor_class = 10 - skills = "Perception +2" - senses = "Passive Perception 12" + skills = 'Perception +2' + senses = 'Passive Perception 12' languages = "Common (can't speak in boar form)" strength = Ability(17) dexterity = Ability(10) @@ -367,7 +667,66 @@ class WereboarHumanform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 78 - hit_dice = "12d8" + hit_dice = '12d8' + spells = [] + + +class WereboarHybridForm(Monster): + """ + + Shapechanger. + The wereboar can use its action to polymorph into a boar-humanoid + hybrid or into a boar, or back into its true form, which is humanoid. + Its statistics, other than its AC, are the same in each form. Any + equipment it is wearing or carrying isn't transformed. It reverts to + its true form if it dies. + Charge (Boar or Hybrid Form Only). + If the wereboar moves at least 15 feet straight toward a target and + then hits it with its tusks on the same turn, the target takes an + extra 7 (2d6) slashing damage. If the target is a creature, it must + succeed on a DC 13 Strength saving throw or be knocked prone. + Relentless. + If the wereboar takes 14 damage or less that would reduce it to 0 hit + points, it is reduced to 1 hit point instead. + + # Actions + + Multiattack. + The wereboar makes two attacks, only one of which can be with its + tusks. + Maul. + Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + + 3) bludgeoning damage. + Tusks. + Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + + 3) slashing damage. If the target is a humanoid, it must succeed on + a DC 12 Constitution saving throw or be cursed with wereboar + lycanthropy. + """ + name = 'Wereboar, Hybrid Form' + description = 'Medium humanoid, neutral evil' + challenge_rating = 4 + armor_class = 10 + skills = 'Perception +2' + senses = 'Passive Perception 12' + languages = 'Common' + strength = Ability(17) + dexterity = Ability(10) + constitution = Ability(15) + intelligence = Ability(10) + wisdom = Ability(11) + charisma = Ability(8) + speed = 30 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 78 + hit_dice = '12d8 + 24' + condition_immunities = '' + damage_immunities = "bludgeoning, piercing, and slashing damage from nonmagical weapons that aren't silvered" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -399,13 +758,13 @@ class WereboarHybridform(Monster): a DC 12 Constitution saving throw or be cursed with wereboar lycanthropy. """ - name = "Wereboar, Hybrid form" - description = "Medium humanoid, neutral evil" + name = 'Wereboar, Hybrid form' + description = 'Medium humanoid, neutral evil' challenge_rating = 4 armor_class = 10 - skills = "Perception +2" - senses = "Passive Perception 12" - languages = "Common" + skills = 'Perception +2' + senses = 'Passive Perception 12' + languages = 'Common' strength = Ability(17) dexterity = Ability(10) constitution = Ability(15) @@ -417,7 +776,58 @@ class WereboarHybridform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 78 - hit_dice = "12d8" + hit_dice = '12d8' + spells = [] + + +class WereratHumanForm(Monster): + """ + + Shapechanger. + The wererat can use its action to polymorph into a rat-humanoid hybrid + or into a giant rat, or back into its true form, which is humanoid. + Its statistics, other than its size, are the same in each form. Any + equipment it is wearing or carrying isn't transformed. It reverts to + its true form if it dies. + Keen Smell. + The wererat has advantage on Wisdom (Perception) checks that rely on + smell. + + # Actions + + Multiattack (Humanoid or Hybrid Form Only). + The wererat makes two attacks, only one of which can be a bite. + Shortsword. + Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + + 2) piercing damage. + Hand Crossbow. + Ranged Weapon Attack: +4 to hit, range 30/120 ft., one target. Hit: 5 + (1d6 + 2) piercing damage. + """ + name = 'Wererat, Human Form' + description = 'Medium humanoid, lawful evil' + challenge_rating = 2 + armor_class = 12 + skills = 'Perception +2, Stealth +4' + senses = 'Passive Perception 12' + languages = 'Common' + strength = Ability(10) + dexterity = Ability(15) + constitution = Ability(12) + intelligence = Ability(11) + wisdom = Ability(10) + charisma = Ability(8) + speed = 30 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 33 + hit_dice = '6d8 + 6' + condition_immunities = '' + damage_immunities = "bludgeoning, piercing, and slashing damage from nonmagical weapons that aren't silvered" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -441,13 +851,13 @@ class WereratHumanform(Monster): Ranged Weapon Attack: +4 to hit, range 30/120 ft., one target. Hit: 5 (1d6 + 2) piercing damage. """ - name = "Wererat, Human form" - description = "Medium humanoid, lawful evil" + name = 'Wererat, Human form' + description = 'Medium humanoid, lawful evil' challenge_rating = 2 armor_class = 12 - skills = "Perception +2, Stealth +4" - senses = "Passive Perception 12" - languages = "Common" + skills = 'Perception +2, Stealth +4' + senses = 'Passive Perception 12' + languages = 'Common' strength = Ability(10) dexterity = Ability(15) constitution = Ability(12) @@ -459,7 +869,62 @@ class WereratHumanform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 33 - hit_dice = "6d8" + hit_dice = '6d8' + spells = [] + + +class WereratHybridForm(Monster): + """ + + Shapechanger. + The wererat can use its action to polymorph into a rat-humanoid hybrid + or into a giant rat, or back into its true form, which is humanoid. + Its statistics, other than its size, are the same in each form. Any + equipment it is wearing or carrying isn't transformed. It reverts to + its true form if it dies. + Keen Smell. + The wererat has advantage on Wisdom (Perception) checks that rely on + smell. + + # Actions + + Multiattack. + The wererat makes two attacks, only one of which can be a bite. + Bite. + Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 4 (1d4 + + 2) piercing damage. If the target is a humanoid, it must succeed on a + DC 11 Constitution saving throw or be cursed with wererat lycanthropy. + Shortsword. + Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 5 (1d6 + + 2) piercing damage. + Hand Crossbow. + Ranged Weapon Attack: +4 to hit, range 30/120 ft., one target. Hit: 5 + (1d6 + 2) piercing damage. + """ + name = 'Wererat, Hybrid Form' + description = 'Medium humanoid, lawful evil' + challenge_rating = 2 + armor_class = 12 + skills = 'Perception +2, Stealth +4' + senses = 'Passive Perception 12' + languages = 'Common' + strength = Ability(10) + dexterity = Ability(15) + constitution = Ability(12) + intelligence = Ability(11) + wisdom = Ability(10) + charisma = Ability(8) + speed = 30 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 33 + hit_dice = '6d8 + 6' + condition_immunities = '' + damage_immunities = "bludgeoning, piercing, and slashing damage from nonmagical weapons that aren't silvered" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -487,13 +952,13 @@ class WereratHybridform(Monster): Ranged Weapon Attack: +4 to hit, range 30/120 ft., one target. Hit: 5 (1d6 + 2) piercing damage. """ - name = "Wererat, Hybrid form" - description = "Medium humanoid, lawful evil" + name = 'Wererat, Hybrid form' + description = 'Medium humanoid, lawful evil' challenge_rating = 2 armor_class = 12 - skills = "Perception +2, Stealth +4" - senses = "Passive Perception 12" - languages = "Common" + skills = 'Perception +2, Stealth +4' + senses = 'Passive Perception 12' + languages = 'Common' strength = Ability(10) dexterity = Ability(15) constitution = Ability(12) @@ -505,7 +970,54 @@ class WereratHybridform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 33 - hit_dice = "6d8" + hit_dice = '6d8' + spells = [] + + +class WereratRatForm(Monster): + """ + + Shapechanger. + The wererat can use its action to polymorph into a rat-humanoid hybrid + or into a giant rat, or back into its true form, which is humanoid. + Its statistics, other than its size, are the same in each form. Any + equipment it is wearing or carrying isn't transformed. It reverts to + its true form if it dies. + Keen Smell. + The wererat has advantage on Wisdom (Perception) checks that rely on + smell. + + # Actions + + Bite. + Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 4 (1d4 + + 2) piercing damage. If the target is a humanoid, it must succeed on a + DC 11 Constitution saving throw or be cursed with wererat lycanthropy. + """ + name = 'Wererat, Rat Form' + description = 'Medium humanoid, lawful evil' + challenge_rating = 2 + armor_class = 12 + skills = 'Perception +2, Stealth +4' + senses = 'Darkvision 60 ft., Passive Perception 12' + languages = '' + strength = Ability(10) + dexterity = Ability(15) + constitution = Ability(12) + intelligence = Ability(11) + wisdom = Ability(10) + charisma = Ability(8) + speed = 30 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 33 + hit_dice = '6d8 + 6' + condition_immunities = '' + damage_immunities = "bludgeoning, piercing, and slashing damage from nonmagical weapons that aren't silvered" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -525,13 +1037,13 @@ class WereratRatform(Monster): 2) piercing damage. If the target is a humanoid, it must succeed on a DC 11 Constitution saving throw or be cursed with wererat lycanthropy. """ - name = "Wererat, Rat form" - description = "Medium humanoid, lawful evil" + name = 'Wererat, Rat form' + description = 'Medium humanoid, lawful evil' challenge_rating = 2 armor_class = 12 - skills = "Perception +2, Stealth +4" - senses = "Darkvision 60 ft., Passive Perception 12" - languages = "" + skills = 'Perception +2, Stealth +4' + senses = 'Darkvision 60 ft., Passive Perception 12' + languages = '' strength = Ability(10) dexterity = Ability(15) constitution = Ability(12) @@ -543,7 +1055,60 @@ class WereratRatform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 33 - hit_dice = "6d8" + hit_dice = '6d8' + spells = [] + + +class WeretigerHumanForm(Monster): + """ + + Shapechanger. + The weretiger can use its action to polymorph into a tiger-humanoid + hybrid or into a tiger, or back into its true form, which is humanoid. + Its statistics, other than its size, are the same in each form. Any + equipment it is wearing or carrying isn't transformed. It reverts to + its true form if it dies. + Keen Hearing and Smell. + The weretiger has advantage on Wisdom (Perception) checks that rely on + hearing or smell. + + # Actions + + Multiattack. + In humanoid form, the weretiger makes two scimitar attacks or two + longbow attacks. In hybrid form, it can attack like a humanoid or make + two claw attacks. + Scimitar. + Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 6 (1d6 + + 3) slashing damage. + Longbow. + Ranged Weapon Attack: +4 to hit, range 150/600 ft., one target. Hit: 6 + (1d8 + 2) piercing damage. + """ + name = 'Weretiger, Human Form' + description = 'Medium humanoid, neutral' + challenge_rating = 4 + armor_class = 12 + skills = 'Perception +5, Stealth +4' + senses = 'Darkvision 60 ft., Passive Perception 15' + languages = 'Common' + strength = Ability(17) + dexterity = Ability(15) + constitution = Ability(16) + intelligence = Ability(10) + wisdom = Ability(13) + charisma = Ability(11) + speed = 30 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 120 + hit_dice = '16d8 + 48' + condition_immunities = '' + damage_immunities = "bludgeoning, piercing, and slashing damage from nonmagical weapons that aren't silvered" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -569,13 +1134,13 @@ class WeretigerHumanform(Monster): Ranged Weapon Attack: +4 to hit, range 150/600 ft., one target. Hit: 6 (1d8 + 2) piercing damage. """ - name = "Weretiger, Human form" - description = "Medium humanoid, neutral" + name = 'Weretiger, Human form' + description = 'Medium humanoid, neutral' challenge_rating = 4 armor_class = 12 - skills = "Perception +5, Stealth +4" - senses = "Darkvision 60 ft., Passive Perception 15" - languages = "Common" + skills = 'Perception +5, Stealth +4' + senses = 'Darkvision 60 ft., Passive Perception 15' + languages = 'Common' strength = Ability(17) dexterity = Ability(15) constitution = Ability(16) @@ -587,7 +1152,74 @@ class WeretigerHumanform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 120 - hit_dice = "16d8" + hit_dice = '16d8' + spells = [] + + +class WeretigerHybridForm(Monster): + """ + + Shapechanger. + The weretiger can use its action to polymorph into a tiger-humanoid + hybrid or into a tiger, or back into its true form, which is humanoid. + Its statistics, other than its size, are the same in each form. Any + equipment it is wearing or carrying isn't transformed. It reverts to + its true form if it dies. + Keen Hearing and Smell. + The weretiger has advantage on Wisdom (Perception) checks that rely on + hearing or smell. + Pounce. + If the weretiger moves at least 15 feet straight toward a creature and + then hits it with a claw attack on the same turn, that target must + succeed on a DC 14 Strength saving throw or be knocked prone. If the + target is prone, the weretiger can make one bite attack against it as + a bonus action. + + # Actions + + Multiattack. + In humanoid form, the weretiger makes two scimitar attacks or two + longbow attacks. In hybrid form, it can attack like a humanoid or make + two claw attacks. + Bite. + Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 8 (1d10 + + 3) piercing damage. If the target is a humanoid, it must succeed on + a DC 13 Constitution saving throw or be cursed with weretiger + lycanthropy. + Claw. + Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d8 + + 3) slashing damage. + Scimitar. + Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 6 (1d6 + + 3) slashing damage. + Longbow. + Ranged Weapon Attack: +4 to hit, range 150/600 ft., one target. Hit: 6 + (1d8 + 2) piercing damage. + """ + name = 'Weretiger, Hybrid Form' + description = 'Medium humanoid, neutral' + challenge_rating = 4 + armor_class = 12 + skills = 'Perception +5, Stealth +4' + senses = 'Darkvision 60 ft., Passive Perception 15' + languages = 'Common' + strength = Ability(17) + dexterity = Ability(15) + constitution = Ability(16) + intelligence = Ability(10) + wisdom = Ability(13) + charisma = Ability(11) + speed = 30 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 120 + hit_dice = '16d8 + 48' + condition_immunities = '' + damage_immunities = "bludgeoning, piercing, and slashing damage from nonmagical weapons that aren't silvered" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -627,13 +1259,13 @@ class WeretigerHybridform(Monster): Ranged Weapon Attack: +4 to hit, range 150/600 ft., one target. Hit: 6 (1d8 + 2) piercing damage. """ - name = "Weretiger, Hybrid form" - description = "Medium humanoid, neutral" + name = 'Weretiger, Hybrid form' + description = 'Medium humanoid, neutral' challenge_rating = 4 armor_class = 12 - skills = "Perception +5, Stealth +4" - senses = "Darkvision 60 ft., Passive Perception 15" - languages = "Common" + skills = 'Perception +5, Stealth +4' + senses = 'Darkvision 60 ft., Passive Perception 15' + languages = 'Common' strength = Ability(17) dexterity = Ability(15) constitution = Ability(16) @@ -645,7 +1277,64 @@ class WeretigerHybridform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 120 - hit_dice = "16d8" + hit_dice = '16d8' + spells = [] + + +class WeretigerTigerForm(Monster): + """ + + Shapechanger. + The weretiger can use its action to polymorph into a tiger-humanoid + hybrid or into a tiger, or back into its true form, which is humanoid. + Its statistics, other than its size, are the same in each form. Any + equipment it is wearing or carrying isn't transformed. It reverts to + its true form if it dies. + Keen Hearing and Smell. + The weretiger has advantage on Wisdom (Perception) checks that rely on + hearing or smell. + Pounce. + If the weretiger moves at least 15 feet straight toward a creature and + then hits it with a claw attack on the same turn, that target must + succeed on a DC 14 Strength saving throw or be knocked prone. If the + target is prone, the weretiger can make one bite attack against it as + a bonus action. + + # Actions + + Bite. + Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 8 (1d10 + + 3) piercing damage. If the target is a humanoid, it must succeed on + a DC 13 Constitution saving throw or be cursed with weretiger + lycanthropy. + Claw. + Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d8 + + 3) slashing damage. + """ + name = 'Weretiger, Tiger Form' + description = 'Medium humanoid, neutral' + challenge_rating = 4 + armor_class = 12 + skills = 'Perception +5, Stealth +4' + senses = 'Darkvision 60 ft., Passive Perception 15' + languages = '' + strength = Ability(17) + dexterity = Ability(15) + constitution = Ability(16) + intelligence = Ability(10) + wisdom = Ability(13) + charisma = Ability(11) + speed = 40 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 120 + hit_dice = '16d8 + 48' + condition_immunities = '' + damage_immunities = "bludgeoning, piercing, and slashing damage from nonmagical weapons that aren't silvered" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -675,13 +1364,13 @@ class WeretigerTigerform(Monster): Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d8 + 3) slashing damage. """ - name = "Weretiger, Tiger form" - description = "Medium humanoid, neutral" + name = 'Weretiger, Tiger form' + description = 'Medium humanoid, neutral' challenge_rating = 4 armor_class = 12 - skills = "Perception +5, Stealth +4" - senses = "Darkvision 60 ft., Passive Perception 15" - languages = "" + skills = 'Perception +5, Stealth +4' + senses = 'Darkvision 60 ft., Passive Perception 15' + languages = '' strength = Ability(17) dexterity = Ability(15) constitution = Ability(16) @@ -693,7 +1382,57 @@ class WeretigerTigerform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 120 - hit_dice = "16d8" + hit_dice = '16d8' + spells = [] + + +class WerewolfHumanForm(Monster): + """ + + Shapechanger. + The werewolf can use its action to polymorph into a wolf-humanoid + hybrid or into a wolf, or back into its true form, which is humanoid. + Its statistics, other than its AC, are the same in each form. Any + equipment it is wearing or carrying isn't transformed. It reverts to + its true form if it dies. + Keen Hearing and Smell. + The werewolf has advantage on Wisdom (Perception) checks that rely on + hearing or smell. + + # Actions + + Multiattack. + The werewolf makes two attacks: two with its spear (humanoid form) or + one with its bite and one with its claws (hybrid form). + Spear. + Melee or Ranged Weapon Attack: +4 to hit, reach 5 ft. or range 20/60 + ft., one creature. Hit: 5 (1d6 + 2) piercing damage, or 6 (1d8 + 2) + piercing damage if used with two hands to make a melee attack. + """ + name = 'Werewolf, Human Form' + description = 'Medium humanoid, chaotic evil' + challenge_rating = 3 + armor_class = 11 + skills = 'Perception +4' + senses = 'Passive Perception 14' + languages = 'Common' + strength = Ability(15) + dexterity = Ability(13) + constitution = Ability(14) + intelligence = Ability(10) + wisdom = Ability(11) + charisma = Ability(10) + speed = 30 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 58 + hit_dice = '9d8 + 18' + condition_immunities = '' + damage_immunities = "bludgeoning, piercing, and slashing damage from nonmagical weapons that aren't silvered" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -716,13 +1455,13 @@ class WerewolfHumanform(Monster): ft., one creature. Hit: 5 (1d6 + 2) piercing damage, or 6 (1d8 + 2) piercing damage if used with two hands to make a melee attack. """ - name = "Werewolf, Human form" - description = "Medium humanoid, chaotic evil" + name = 'Werewolf, Human form' + description = 'Medium humanoid, chaotic evil' challenge_rating = 3 armor_class = 11 - skills = "Perception +4" - senses = "Passive Perception 14" - languages = "Common" + skills = 'Perception +4' + senses = 'Passive Perception 14' + languages = 'Common' strength = Ability(15) dexterity = Ability(13) constitution = Ability(14) @@ -734,7 +1473,61 @@ class WerewolfHumanform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 58 - hit_dice = "9d8" + hit_dice = '9d8' + spells = [] + + +class WerewolfHybridForm(Monster): + """ + + Shapechanger. + The werewolf can use its action to polymorph into a wolf-humanoid + hybrid or into a wolf, or back into its true form, which is humanoid. + Its statistics, other than its AC, are the same in each form. Any + equipment it is wearing or carrying isn't transformed. It reverts to + its true form if it dies. + Keen Hearing and Smell. + The werewolf has advantage on Wisdom (Perception) checks that rely on + hearing or smell. + + # Actions + + Multiattack. + The werewolf makes two attacks: two with its spear (humanoid form) or + one with its bite and one with its claws (hybrid form). + Bite. + Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 6 (1d8 + + 2) piercing damage. If the target is a humanoid, it must succeed on a + DC 12 Constitution saving throw or be cursed with werewolf + lycanthropy. + Claws. + Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 7 (2d4 + + 2) slashing damage. + """ + name = 'Werewolf, Hybrid Form' + description = 'Medium humanoid, chaotic evil' + challenge_rating = 3 + armor_class = 11 + skills = 'Perception +4' + senses = 'Passive Perception 14' + languages = 'Common' + strength = Ability(15) + dexterity = Ability(13) + constitution = Ability(14) + intelligence = Ability(10) + wisdom = Ability(11) + charisma = Ability(10) + speed = 30 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 58 + hit_dice = '9d8 + 18' + condition_immunities = '' + damage_immunities = "bludgeoning, piercing, and slashing damage from nonmagical weapons that aren't silvered" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -761,13 +1554,13 @@ class WerewolfHybridform(Monster): Melee Weapon Attack: +4 to hit, reach 5 ft., one creature. Hit: 7 (2d4 + 2) slashing damage. """ - name = "Werewolf, Hybrid form" - description = "Medium humanoid, chaotic evil" + name = 'Werewolf, Hybrid form' + description = 'Medium humanoid, chaotic evil' challenge_rating = 3 armor_class = 11 - skills = "Perception +4" - senses = "Passive Perception 14" - languages = "Common" + skills = 'Perception +4' + senses = 'Passive Perception 14' + languages = 'Common' strength = Ability(15) dexterity = Ability(13) constitution = Ability(14) @@ -779,7 +1572,55 @@ class WerewolfHybridform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 58 - hit_dice = "9d8" + hit_dice = '9d8' + spells = [] + + +class WerewolfWolfForm(Monster): + """ + + Shapechanger. + The werewolf can use its action to polymorph into a wolf-humanoid + hybrid or into a wolf, or back into its true form, which is humanoid. + Its statistics, other than its AC, are the same in each form. Any + equipment it is wearing or carrying isn't transformed. It reverts to + its true form if it dies. + Keen Hearing and Smell. + The werewolf has advantage on Wisdom (Perception) checks that rely on + hearing or smell. + + # Actions + + Bite. + Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 6 (1d8 + + 2) piercing damage. If the target is a humanoid, it must succeed on a + DC 12 Constitution saving throw or be cursed with werewolf + lycanthropy. + """ + name = 'Werewolf, Wolf Form' + description = 'Medium humanoid, chaotic evil' + challenge_rating = 3 + armor_class = 11 + skills = 'Perception +4' + senses = 'Passive Perception 14' + languages = '' + strength = Ability(15) + dexterity = Ability(13) + constitution = Ability(14) + intelligence = Ability(10) + wisdom = Ability(11) + charisma = Ability(10) + speed = 40 + swim_speed = 0 + fly_speed = 0 + climb_speed = 0 + burrow_speed = 0 + hp_max = 58 + hit_dice = '9d8 + 18' + condition_immunities = '' + damage_immunities = "bludgeoning, piercing, and slashing damage from nonmagical weapons that aren't silvered" + damage_resistances = '' + damage_vulnerabilities = '' spells = [] @@ -800,13 +1641,13 @@ class WerewolfWolfform(Monster): DC 12 Constitution saving throw or be cursed with werewolf lycanthropy. """ - name = "Werewolf, Wolf form" - description = "Medium humanoid, chaotic evil" + name = 'Werewolf, Wolf form' + description = 'Medium humanoid, chaotic evil' challenge_rating = 3 armor_class = 11 - skills = "Perception +4" - senses = "Passive Perception 14" - languages = "" + skills = 'Perception +4' + senses = 'Passive Perception 14' + languages = '' strength = Ability(15) dexterity = Ability(13) constitution = Ability(14) @@ -818,12 +1659,15 @@ class WerewolfWolfform(Monster): fly_speed = 0 climb_speed = 0 hp_max = 58 - hit_dice = "9d8" + hit_dice = '9d8' spells = [] class WhiteDragonWyrmling(Monster): """ + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 7 (1d10 + 2) piercing damage plus 2 (1d4) cold damage. @@ -833,13 +1677,13 @@ class WhiteDragonWyrmling(Monster): taking 22 (5d8) cold damage on a failed save, or half as much damage on a successful one. """ - name = "White Dragon Wyrmling" - description = "Medium dragon, chaotic evil" + name = 'White Dragon Wyrmling' + description = 'Medium dragon, chaotic evil' challenge_rating = 2 armor_class = 16 - skills = "Perception +4, Stealth +2" - senses = "Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14" - languages = "Draconic" + skills = 'Perception +4, Stealth +2' + senses = 'Blindsight 10 ft., Darkvision 60 ft., Passive Perception 14' + languages = 'Draconic' strength = Ability(14) dexterity = Ability(10) constitution = Ability(14) @@ -850,16 +1694,25 @@ class WhiteDragonWyrmling(Monster): swim_speed = 30 fly_speed = 60 climb_speed = 0 + burrow_speed = 15 hp_max = 32 - hit_dice = "5d8" + hit_dice = '5d8 + 10' + condition_immunities = '' + damage_immunities = 'cold' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Wight(Monster): """ + Sunlight Sensitivity. While in sunlight, the wight has disadvantage on attack rolls, as well as on Wisdom (Perception) checks that rely on sight. + + # Actions + Multiattack. The wight makes two longsword attacks or two longbow attacks. It can use its Life Drain in place of one longsword attack. @@ -883,13 +1736,13 @@ class Wight(Monster): Ranged Weapon Attack: +4 to hit, range 150/600 ft., one target. Hit: 6 (1d8 + 2) piercing damage. """ - name = "Wight" - description = "Medium undead, neutral evil" + name = 'Wight' + description = 'Medium undead, neutral evil' challenge_rating = 3 armor_class = 14 - skills = "Perception +3, Stealth +4" - senses = "Darkvision 60 ft., Passive Perception 13" - languages = "the languages it knew in life" + skills = 'Perception +3, Stealth +4' + senses = 'Darkvision 60 ft., Passive Perception 13' + languages = 'the languages it knew in life' strength = Ability(15) dexterity = Ability(14) constitution = Ability(16) @@ -900,13 +1753,19 @@ class Wight(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 45 - hit_dice = "6d8" + hit_dice = '6d8 + 18' + condition_immunities = 'exhaustion, poisoned' + damage_immunities = 'poison' + damage_resistances = 'necrotic' + damage_vulnerabilities = '' spells = [] class WilloWisp(Monster): """ + Consume Life. As a bonus action, the will-o'-wisp can target one creature it can see within 5 ft. of it that has 0 hit points and is still alive. The @@ -923,6 +1782,9 @@ class WilloWisp(Monster): The will-o'-wisp sheds bright light in a 5- to 20-foot radius and dim light for an additional number of ft. equal to the chosen radius. The will-o'-wisp can alter the radius as a bonus action. + + # Actions + Shock. Melee Spell Attack: +4 to hit, reach 5 ft., one creature. Hit: 9 (2d8) lightning damage. @@ -932,12 +1794,12 @@ class WilloWisp(Monster): if concentrating on a spell). """ name = "Will-o'-Wisp" - description = "Tiny undead, chaotic evil" + description = 'Tiny undead, chaotic evil' challenge_rating = 2 armor_class = 19 - skills = "" - senses = "Darkvision 120 ft., Passive Perception 12" - languages = "the languages it knew in life" + skills = '' + senses = 'Darkvision 120 ft., Passive Perception 12' + languages = 'the languages it knew in life' strength = Ability(1) dexterity = Ability(28) constitution = Ability(10) @@ -948,13 +1810,19 @@ class WilloWisp(Monster): swim_speed = 0 fly_speed = 50 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "9d4" + hit_dice = '9d4 + 0' + condition_immunities = 'exhaustion, grappled, paralyzed, poisoned, prone, restrained, unconscious' + damage_immunities = 'lightning, poison' + damage_resistances = 'acid' + damage_vulnerabilities = '' spells = [] class WinterWolf(Monster): """ + Keen Hearing and Smell. The wolf has advantage on Wisdom (Perception) checks that rely on hearing or smell. @@ -965,6 +1833,9 @@ class WinterWolf(Monster): Snow Camouflage. The wolf has advantage on Dexterity (Stealth) checks made to hide in snowy terrain. + + # Actions + Bite. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 11 (2d6 + 4) piercing damage. If the target is a creature, it must succeed on @@ -975,13 +1846,13 @@ class WinterWolf(Monster): 18 (4d8) cold damage on a failed save, or half as much damage on a successful one. """ - name = "Winter Wolf" - description = "Large monstrosity, neutral evil" + name = 'Winter Wolf' + description = 'Large monstrosity, neutral evil' challenge_rating = 3 armor_class = 13 - skills = "Perception +5, Stealth +3" - senses = "Passive Perception 15" - languages = "Common, Giant, Winter Wolf" + skills = 'Perception +5, Stealth +3' + senses = 'Passive Perception 15' + languages = 'Common, Giant, Winter Wolf' strength = Ability(18) dexterity = Ability(13) constitution = Ability(14) @@ -992,13 +1863,19 @@ class WinterWolf(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 75 - hit_dice = "10d10" + hit_dice = '10d10 + 20' + condition_immunities = '' + damage_immunities = 'cold' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Wolf(Monster): """ + Keen Hearing and Smell. The wolf has advantage on Wisdom (Perception) checks that rely on hearing or smell. @@ -1006,18 +1883,21 @@ class Wolf(Monster): The wolf has advantage on an attack roll against a creature if at least one of the wolf's allies is within 5 ft. of the creature and the ally isn't incapacitated. + + # Actions + Bite. Melee Weapon Attack: +4 to hit, reach 5 ft., one target. Hit: 7 (2d4 + 2) piercing damage. If the target is a creature, it must succeed on a DC 11 Strength saving throw or be knocked prone. """ - name = "Wolf" - description = "Medium beast, unaligned" + name = 'Wolf' + description = 'Medium beast, unaligned' challenge_rating = 0.25 armor_class = 13 - skills = "Perception +3, Stealth +4" - senses = "Passive Perception 13" - languages = "" + skills = 'Perception +3, Stealth +4' + senses = 'Passive Perception 13' + languages = '' strength = Ability(12) dexterity = Ability(15) constitution = Ability(12) @@ -1028,28 +1908,37 @@ class Wolf(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 11 - hit_dice = "2d8" + hit_dice = '2d8 + 2' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Worg(Monster): """ + Keen Hearing and Smell. The worg has advantage on Wisdom (Perception) checks that rely on hearing or smell. + + # Actions + Bite. Melee Weapon Attack: +5 to hit, reach 5 ft., one target. Hit: 10 (2d6 + 3) piercing damage. If the target is a creature, it must succeed on a DC 13 Strength saving throw or be knocked prone. """ - name = "Worg" - description = "Large monstrosity, neutral evil" + name = 'Worg' + description = 'Large monstrosity, neutral evil' challenge_rating = 0.5 armor_class = 13 - skills = "Perception +4" - senses = "Darkvision 60 ft., Passive Perception 14" - languages = "Goblin, Worg" + skills = 'Perception +4' + senses = 'Darkvision 60 ft., Passive Perception 14' + languages = 'Goblin, Worg' strength = Ability(16) dexterity = Ability(13) constitution = Ability(13) @@ -1060,13 +1949,19 @@ class Worg(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 26 - hit_dice = "4d10" + hit_dice = '4d10 + 4' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class Wraith(Monster): """ + Incorporeal Movement. The wraith can move through other creatures and objects as if they were difficult terrain. It takes 5 (1d10) force damage if it ends its @@ -1074,6 +1969,9 @@ class Wraith(Monster): Sunlight Sensitivity. While in sunlight, the wraith has disadvantage on attack rolls, as well as on Wisdom (Perception) checks that rely on sight. + + # Actions + Life Drain. Melee Weapon Attack: +6 to hit, reach 5 ft., one creature. Hit: 21 (4d8 + 3) necrotic damage. The target must succeed on a DC 14 @@ -1089,13 +1987,13 @@ class Wraith(Monster): wraith can have no more than seven specters under its control at one time. """ - name = "Wraith" - description = "Medium undead, neutral evil" + name = 'Wraith' + description = 'Medium undead, neutral evil' challenge_rating = 5 armor_class = 13 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 12" - languages = "the languages it knew in life" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 12' + languages = 'the languages it knew in life' strength = Ability(6) dexterity = Ability(16) constitution = Ability(16) @@ -1106,13 +2004,21 @@ class Wraith(Monster): swim_speed = 0 fly_speed = 60 climb_speed = 0 + burrow_speed = 0 hp_max = 67 - hit_dice = "9d8" + hit_dice = '9d8 + 27' + condition_immunities = 'charmed, exhaustion, grappled, paralyzed, petrified, poisoned, prone, restrained' + damage_immunities = 'necrotic, poison' + damage_resistances = 'acid' + damage_vulnerabilities = '' spells = [] class Wyvern(Monster): """ + + # Actions + Multiattack. The wyvern makes two attacks: one with its bite and one with its stinger. While flying, it can use its claws in place of one other @@ -1129,13 +2035,13 @@ class Wyvern(Monster): saving throw, taking 24 (7d6) poison damage on a failed save, or half as much damage on a successful one. """ - name = "Wyvern" - description = "Large dragon, unaligned" + name = 'Wyvern' + description = 'Large dragon, unaligned' challenge_rating = 6 armor_class = 13 - skills = "Perception +4" - senses = "Darkvision 60 ft., Passive Perception 14" - languages = "" + skills = 'Perception +4' + senses = 'Darkvision 60 ft., Passive Perception 14' + languages = '' strength = Ability(19) dexterity = Ability(10) constitution = Ability(16) @@ -1146,6 +2052,11 @@ class Wyvern(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 110 - hit_dice = "13d10" + hit_dice = '13d10 + 39' + condition_immunities = '' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_x.py b/dungeonsheets/monsters/monsters_x.py index b283fc9..d782e65 100644 --- a/dungeonsheets/monsters/monsters_x.py +++ b/dungeonsheets/monsters/monsters_x.py @@ -10,6 +10,7 @@ from dungeonsheets.stats import Ability class Xorn(Monster): """ + Earth Glide. The xorn can burrow through nonmagical, unworked earth and stone. While doing so, the xorn doesn't disturb the material it moves @@ -20,6 +21,9 @@ class Xorn(Monster): Treasure Sense. The xorn can pinpoint, by scent, the location of precious metals and stones, such as coins and gems, within 60 ft. of it. + + # Actions + Multiattack. The xorn makes three claw attacks and one bite attack. Bite. @@ -29,13 +33,13 @@ class Xorn(Monster): Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 6 (1d6 + 3) slashing damage. """ - name = "Xorn" - description = "Medium elemental, neutral" + name = 'Xorn' + description = 'Medium elemental, neutral' challenge_rating = 5 armor_class = 19 - skills = "Perception +6, Stealth +3" - senses = "Darkvision 60 ft., Tremorsense 60 ft., Passive Perception 16" - languages = "Terran" + skills = 'Perception +6, Stealth +3' + senses = 'Darkvision 60 ft., Tremorsense 60 ft., Passive Perception 16' + languages = 'Terran' strength = Ability(17) dexterity = Ability(10) constitution = Ability(22) @@ -46,6 +50,11 @@ class Xorn(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 20 hp_max = 73 - hit_dice = "7d8" + hit_dice = '7d8 + 42' + condition_immunities = '' + damage_immunities = '' + damage_resistances = "piercing and slashing from nonmagical weapons that aren't adamantine" + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_y.py b/dungeonsheets/monsters/monsters_y.py index 12db812..3598951 100644 --- a/dungeonsheets/monsters/monsters_y.py +++ b/dungeonsheets/monsters/monsters_y.py @@ -10,8 +10,12 @@ from dungeonsheets.stats import Ability class YoungBlackDragon(Monster): """ + Amphibious. The dragon can breathe air and water. + + # Actions + Multiattack. The dragon makes three attacks: one with its bite and two with its claws. @@ -27,13 +31,13 @@ class YoungBlackDragon(Monster): 49 (11d8) acid damage on a failed save, or half as much damage on a successful one. """ - name = "Young Black Dragon" - description = "Large dragon, chaotic evil" + name = 'Young Black Dragon' + description = 'Large dragon, chaotic evil' challenge_rating = 7 armor_class = 18 - skills = "Perception +6, Stealth +5" - senses = "Blindsight 30 ft., Darkvision 120 ft., Passive Perception 16" - languages = "Common, Draconic" + skills = 'Perception +6, Stealth +5' + senses = 'Blindsight 30 ft., Darkvision 120 ft., Passive Perception 16' + languages = 'Common, Draconic' strength = Ability(19) dexterity = Ability(14) constitution = Ability(17) @@ -44,13 +48,21 @@ class YoungBlackDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 127 - hit_dice = "15d10" + hit_dice = '15d10 + 45' + condition_immunities = '' + damage_immunities = 'acid' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class YoungBlueDragon(Monster): """ + + # Actions + Multiattack. The dragon makes three attacks: one with its bite and two with its claws. @@ -66,13 +78,13 @@ class YoungBlueDragon(Monster): taking 55 (10d10) lightning damage on a failed save, or half as much damage on a successful one. """ - name = "Young Blue Dragon" - description = "Large dragon, lawful evil" + name = 'Young Blue Dragon' + description = 'Large dragon, lawful evil' challenge_rating = 9 armor_class = 18 - skills = "Perception +9, Stealth +4" - senses = "Blindsight 30 ft., Darkvision 120 ft., Passive Perception 19" - languages = "Common, Draconic" + skills = 'Perception +9, Stealth +4' + senses = 'Blindsight 30 ft., Darkvision 120 ft., Passive Perception 19' + languages = 'Common, Draconic' strength = Ability(21) dexterity = Ability(10) constitution = Ability(19) @@ -83,13 +95,21 @@ class YoungBlueDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 40 hp_max = 152 - hit_dice = "16d10" + hit_dice = '16d10 + 64' + condition_immunities = '' + damage_immunities = 'lightning' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class YoungBrassDragon(Monster): """ + + # Actions + Multiattack. The dragon makes three attacks: one with its bite and two with its claws. @@ -113,13 +133,13 @@ class YoungBrassDragon(Monster): creature if the creature takes damage or someone uses an action to wake it. """ - name = "Young Brass Dragon" - description = "Large dragon, chaotic good" + name = 'Young Brass Dragon' + description = 'Large dragon, chaotic good' challenge_rating = 6 armor_class = 17 - skills = "Perception +6, Persuasion +5, Stealth +3" - senses = "Blindsight 30 ft., Darkvision 120 ft., Passive Perception 16" - languages = "Common, Draconic" + skills = 'Perception +6, Persuasion +5, Stealth +3' + senses = 'Blindsight 30 ft., Darkvision 120 ft., Passive Perception 16' + languages = 'Common, Draconic' strength = Ability(19) dexterity = Ability(10) constitution = Ability(17) @@ -130,15 +150,24 @@ class YoungBrassDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 20 hp_max = 110 - hit_dice = "13d10" + hit_dice = '13d10 + 39' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class YoungBronzeDragon(Monster): """ + Amphibious. The dragon can breathe air and water. + + # Actions + Multiattack. The dragon makes three attacks: one with its bite and two with its claws. @@ -161,13 +190,13 @@ class YoungBronzeDragon(Monster): saving throw. On a failed save, the creature is pushed 40 feet away from the dragon. """ - name = "Young Bronze Dragon" - description = "Large dragon, lawful good" + name = 'Young Bronze Dragon' + description = 'Large dragon, lawful good' challenge_rating = 8 armor_class = 18 - skills = "Insight +4, Perception +7, Stealth +3" - senses = "Blindsight 30 ft., Darkvision 120 ft., Passive Perception 17" - languages = "Common, Draconic" + skills = 'Insight +4, Perception +7, Stealth +3' + senses = 'Blindsight 30 ft., Darkvision 120 ft., Passive Perception 17' + languages = 'Common, Draconic' strength = Ability(21) dexterity = Ability(10) constitution = Ability(19) @@ -178,13 +207,21 @@ class YoungBronzeDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 142 - hit_dice = "15d10" + hit_dice = '15d10 + 60' + condition_immunities = '' + damage_immunities = 'lightning' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class YoungCopperDragon(Monster): """ + + # Actions + Multiattack. The dragon makes three attacks: one with its bite and two with its claws. @@ -211,13 +248,13 @@ class YoungCopperDragon(Monster): can repeat the saving throw at the end of each of its turns, ending the effect on itself with a successful save. """ - name = "Young Copper Dragon" - description = "Large dragon, chaotic good" + name = 'Young Copper Dragon' + description = 'Large dragon, chaotic good' challenge_rating = 7 armor_class = 17 - skills = "Deception +5, Perception +7, Stealth +4" - senses = "Blindsight 30 ft., Darkvision 120 ft., Passive Perception 17" - languages = "Common, Draconic" + skills = 'Deception +5, Perception +7, Stealth +4' + senses = 'Blindsight 30 ft., Darkvision 120 ft., Passive Perception 17' + languages = 'Common, Draconic' strength = Ability(19) dexterity = Ability(12) constitution = Ability(17) @@ -228,15 +265,24 @@ class YoungCopperDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 40 + burrow_speed = 0 hp_max = 119 - hit_dice = "14d10" + hit_dice = '14d10 + 42' + condition_immunities = '' + damage_immunities = 'acid' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class YoungGoldDragon(Monster): """ + Amphibious. The dragon can breathe air and water. + + # Actions + Multiattack. The dragon makes three attacks: one with its bite and two with its claws. @@ -261,13 +307,13 @@ class YoungGoldDragon(Monster): throw at the end of each of its turns, ending the effect on itself on a success. """ - name = "Young Gold Dragon" - description = "Large dragon, lawful good" + name = 'Young Gold Dragon' + description = 'Large dragon, lawful good' challenge_rating = 10 armor_class = 18 - skills = "Insight +5, Perception +9, Persuasion +9, Stealth +6" - senses = "Blindsight 30 ft., Darkvision 120 ft., Passive Perception 19" - languages = "Common, Draconic" + skills = 'Insight +5, Perception +9, Persuasion +9, Stealth +6' + senses = 'Blindsight 30 ft., Darkvision 120 ft., Passive Perception 19' + languages = 'Common, Draconic' strength = Ability(23) dexterity = Ability(14) constitution = Ability(21) @@ -278,15 +324,24 @@ class YoungGoldDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 178 - hit_dice = "17d10" + hit_dice = '17d10 + 85' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class YoungGreenDragon(Monster): """ + Amphibious. The dragon can breathe air and water. + + # Actions + Multiattack. The dragon makes three attacks: one with its bite and two with its claws. @@ -302,13 +357,13 @@ class YoungGreenDragon(Monster): (12d6) poison damage on a failed save, or half as much damage on a successful one. """ - name = "Young Green Dragon" - description = "Large dragon, lawful evil" + name = 'Young Green Dragon' + description = 'Large dragon, lawful evil' challenge_rating = 8 armor_class = 18 - skills = "Deception +5, Perception +7, Stealth +4" - senses = "Blindsight 30 ft., Darkvision 120 ft., Passive Perception 17" - languages = "Common, Draconic" + skills = 'Deception +5, Perception +7, Stealth +4' + senses = 'Blindsight 30 ft., Darkvision 120 ft., Passive Perception 17' + languages = 'Common, Draconic' strength = Ability(19) dexterity = Ability(12) constitution = Ability(17) @@ -319,13 +374,21 @@ class YoungGreenDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 136 - hit_dice = "16d10" + hit_dice = '16d10 + 48' + condition_immunities = 'poisoned' + damage_immunities = 'poison' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class YoungRedDragon(Monster): """ + + # Actions + Multiattack. The dragon makes three attacks: one with its bite and two with its claws. @@ -340,13 +403,13 @@ class YoungRedDragon(Monster): must make a DC 17 Dexterity saving throw, taking 56 (16d6) fire damage on a failed save, or half as much damage on a successful one. """ - name = "Young Red Dragon" - description = "Large dragon, chaotic evil" + name = 'Young Red Dragon' + description = 'Large dragon, chaotic evil' challenge_rating = 10 armor_class = 18 - skills = "Perception +8, Stealth +4" - senses = "Blindsight 30 ft., Darkvision 120 ft., Passive Perception 18" - languages = "Common, Draconic" + skills = 'Perception +8, Stealth +4' + senses = 'Blindsight 30 ft., Darkvision 120 ft., Passive Perception 18' + languages = 'Common, Draconic' strength = Ability(23) dexterity = Ability(10) constitution = Ability(21) @@ -357,13 +420,21 @@ class YoungRedDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 40 + burrow_speed = 0 hp_max = 178 - hit_dice = "17d10" + hit_dice = '17d10 + 85' + condition_immunities = '' + damage_immunities = 'fire' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class YoungSilverDragon(Monster): """ + + # Actions + Multiattack. The dragon makes three attacks: one with its bite and two with its claws. @@ -387,13 +458,13 @@ class YoungSilverDragon(Monster): saving throw at the end of each of its turns, ending the effect on itself on a success. """ - name = "Young Silver Dragon" - description = "Large dragon, lawful good" + name = 'Young Silver Dragon' + description = 'Large dragon, lawful good' challenge_rating = 9 armor_class = 18 - skills = "Arcana +6, History +6, Perception +8, Stealth +4" - senses = "Blindsight 30 ft., Darkvision 120 ft., Passive Perception 18" - languages = "Common, Draconic" + skills = 'Arcana +6, History +6, Perception +8, Stealth +4' + senses = 'Blindsight 30 ft., Darkvision 120 ft., Passive Perception 18' + languages = 'Common, Draconic' strength = Ability(23) dexterity = Ability(10) constitution = Ability(21) @@ -404,17 +475,26 @@ class YoungSilverDragon(Monster): swim_speed = 0 fly_speed = 80 climb_speed = 0 + burrow_speed = 0 hp_max = 168 - hit_dice = "16d10" + hit_dice = '16d10 + 80' + condition_immunities = '' + damage_immunities = 'cold' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] class YoungWhiteDragon(Monster): """ + Ice Walk. The dragon can move across and climb icy surfaces without needing to make an ability check. Additionally, difficult terrain composed of ice or snow doesn't cost it extra moment. + + # Actions + Multiattack. The dragon makes three attacks: one with its bite and two with its claws. @@ -430,13 +510,13 @@ class YoungWhiteDragon(Monster): (10d8) cold damage on a failed save, or half as much damage on a successful one. """ - name = "Young White Dragon" - description = "Large dragon, chaotic evil" + name = 'Young White Dragon' + description = 'Large dragon, chaotic evil' challenge_rating = 6 armor_class = 17 - skills = "Perception +6, Stealth +3" - senses = "Blindsight 30 ft., Darkvision 120 ft., Passive Perception 16" - languages = "Common, Draconic" + skills = 'Perception +6, Stealth +3' + senses = 'Blindsight 30 ft., Darkvision 120 ft., Passive Perception 16' + languages = 'Common, Draconic' strength = Ability(18) dexterity = Ability(10) constitution = Ability(18) @@ -447,6 +527,11 @@ class YoungWhiteDragon(Monster): swim_speed = 40 fly_speed = 80 climb_speed = 0 + burrow_speed = 20 hp_max = 133 - hit_dice = "14d10" + hit_dice = '14d10 + 56' + condition_immunities = '' + damage_immunities = 'cold' + damage_resistances = '' + damage_vulnerabilities = '' spells = [] diff --git a/dungeonsheets/monsters/monsters_z.py b/dungeonsheets/monsters/monsters_z.py index d65bd6e..b32a1d1 100644 --- a/dungeonsheets/monsters/monsters_z.py +++ b/dungeonsheets/monsters/monsters_z.py @@ -10,21 +10,25 @@ from dungeonsheets.stats import Ability class Zombie(Monster): """ + Undead Fortitude. If damage reduces the zombie to 0 hit points, it must make a Constitution saving throw with a DC of 5+the damage taken, unless the damage is radiant or from a critical hit. On a success, the zombie drops to 1 hit point instead. + + # Actions + Slam. Melee Weapon Attack: +3 to hit, reach 5 ft., one target. Hit: 4 (1d6 + 1) bludgeoning damage. """ - name = "Zombie" - description = "Medium undead, neutral evil" + name = 'Zombie' + description = 'Medium undead, neutral evil' challenge_rating = 0.25 armor_class = 8 - skills = "" - senses = "Darkvision 60 ft., Passive Perception 8" + skills = '' + senses = 'Darkvision 60 ft., Passive Perception 8' languages = "understands all languages it spoke in life but can't speak" strength = Ability(13) dexterity = Ability(6) @@ -36,6 +40,11 @@ class Zombie(Monster): swim_speed = 0 fly_speed = 0 climb_speed = 0 + burrow_speed = 0 hp_max = 22 - hit_dice = "3d8" + hit_dice = '3d8 + 9' + condition_immunities = 'poisoned' + damage_immunities = '' + damage_resistances = '' + damage_vulnerabilities = '' spells = []