From 5937d893da5656be3f486c863ae54e08bbe66579 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 9 Aug 2022 16:57:53 -0400 Subject: Added generic items, worked on features --- Makefile | 127 ++++------- configure | 56 +++-- features/0blank.json | 15 -- features/TYPE_absorption.json | 18 -- features/aberrant_ground.json | 23 +- features/acid_spray.json | 17 +- features/adhesive.json | 6 +- features/air_form.json | 4 +- features/amorphous.json | 2 +- features/amphibious.json | 4 +- features/animate_chains.json | 15 -- features/animate_trees.json | 0 features/antennae.json | 22 +- features/antimagic_susceptibility.json | 4 +- features/attack.json | 15 -- features/attack_tarrasque.json | 22 ++ features/aversion_of_fire.json | 4 +- features/beast_of_burden.json | 2 +- features/berserk.json | 8 +- features/blasphemous_word.json | 10 +- features/blind_senses.json | 11 +- features/blinding_breath.json | 9 +- features/blinding_dust.json | 14 +- features/blinding_gaze.json | 19 +- features/blinding_spittle.json | 22 +- features/blood_frenzy.json | 16 +- features/bound.json | 15 -- features/brave.json | 13 +- features/breath_attack.json | 2 +- features/breath_weapons.json | 15 -- features/brute.json | 13 +- features/cantrip.json | 11 +- features/cast_a_spell.json | 11 +- features/change_shape.json | 12 +- features/channel_negative_energy.json | 13 +- features/charge.json | 24 +- features/charm.json | 15 -- features/children_of_the_night.json | 0 features/chomp.json | 15 -- features/claw_attack.json | 15 -- features/cold_breath.json | 15 -- features/confer_fire_resistance.json | 15 -- features/consume_life.json | 15 -- features/corrode_metal.json | 15 -- features/corrosive_form.json | 15 -- features/create_specter.json | 15 -- features/create_whirlwind.json | 15 -- features/cunning_action.json | 15 -- features/damage_transfer.json | 15 -- features/dark_devotion.json | 15 -- features/darkness_aura.json | 0 features/deadly_leap.json | 15 -- features/death_burst.json | 15 -- features/death_glare.json | 15 -- features/death_throes.json | 15 -- features/detect.json | 15 -- features/devil's_sight.json | 15 -- features/disrupt_life.json | 15 -- features/divine_awareness.json | 15 -- features/divine_eminence.json | 15 -- features/draining_kiss.json | 15 -- features/dreadful_glare.json | 15 -- features/duergar_resilience.json | 15 -- features/earth_glide.json | 15 -- features/echolocation.json | 15 -- features/elemental_demise.json | 15 -- features/engulf.json | 15 -- features/enlarge.json | 15 -- features/enslave.json | 0 features/ephemeral.json | 15 -- features/ethereal_jaunt.json | 15 -- features/ethereal_sight.json | 15 -- features/ethereal_stride.json | 15 -- features/etherealness.json | 15 -- features/evasion.json | 15 -- features/false_appearance.json | 15 -- features/faultless_tracker.json | 15 -- features/fear_aura.json | 15 -- features/fetid_cloud.json | 0 features/fey_ancestry.json | 15 -- features/fey_charm.json | 15 -- features/fire_absorption.json | 15 -- features/fire_aura.json | 15 -- features/fire_breath.json | 15 -- features/fire_form.json | 15 -- features/first_roar.json | 15 -- features/fling.json | 15 -- features/flyby.json | 15 -- features/flying_sword.json | 15 -- features/freedom_of_movement.json | 15 -- features/freeze.json | 15 -- features/frightening_gaze.json | 15 -- features/frightful_presence.json | 15 -- features/frost_breath.json | 15 -- features/gibbering.json | 15 -- features/gnome_cunning.json | 15 -- features/grappler.json | 15 -- features/grasping_tendrils.json | 15 -- features/haste.json | 15 -- features/heal_self.json | 15 -- features/healing_touch.json | 0 features/heart_sight.json | 15 -- features/heated_body.json | 15 -- features/heated_weapons.json | 15 -- features/hellish_rejuvenation.json | 15 -- features/hellish_weapons.json | 15 -- features/hold_breath.json | 15 -- features/hooves.json | 15 -- features/horrific_appearance.json | 15 -- features/horrifying_visage.json | 15 -- features/horror_nimbus.json | 15 -- features/hurl_flame.json | 0 features/ice_walk.json | 15 -- features/ignited_illumination.json | 15 -- features/illumination.json | 15 -- features/illusory_appearance.json | 15 -- features/immutable_form.json | 15 -- features/incorporeal_movement.json | 15 -- features/ink_cloud.json | 15 -- features/inscrutable.json | 15 -- features/intoxicating_touch.json | 15 -- features/invisibility.json | 15 -- features/invisible_passage.json | 15 -- features/iron_scent.json | 15 -- features/keen_hearing.json | 15 -- features/keen_hearing_and_sight.json | 15 -- features/keen_hearing_and_smell.json | 15 -- features/keen_sight.json | 15 -- features/keen_sight_and_smell.json | 15 -- features/keen_smell.json | 15 -- features/labyrinthine_recall.json | 15 -- features/leadership.json | 15 -- features/legendary_attack.json | 14 -- features/legendary_resistance.json | 0 features/life_drain.json | 15 -- features/light_sensitivity.json | 15 -- features/lightning_absorption.json | 15 -- features/lightning_breath.json | 15 -- features/lightning_storm.json | 15 -- features/lightning_strike.json | 15 -- features/limited_amphibiousess.json | 15 -- features/limited_magic_immunity.json | 15 -- features/limited_telepathy.json | 15 -- features/luring_song.json | 15 -- features/magic_resistance.json | 15 -- features/magic_weapons.json | 15 -- features/martial_advantage.json | 15 -- features/mimicry.json | 15 -- features/misty_escape.json | 15 -- features/moan.json | 15 -- features/move.json | 15 -- features/mucous_cloud.json | 15 -- features/multiattack..json | 15 -- features/multiattack.json | 15 -- features/multiple_heads.json | 15 -- features/nightmare_haunting.json | 0 features/nimble_escape.json | 15 -- features/ooze_cube.json | 15 -- features/pack_tactics.json | 15 -- features/paralyzing_breath.json | 15 -- features/paralyzing_touch.json | 15 -- features/parry.json | 15 -- features/petrifying_breath.json | 15 -- features/petrifying_gaze.json | 15 -- features/phantasms.json | 15 -- features/poison_breath.json | 15 -- features/possession.json | 15 -- features/pounce.json | 15 -- features/probing_telepathy.json | 15 -- features/psychic_drain.json | 15 -- features/rampage.json | 15 -- features/reactive.json | 15 -- features/reactive_heads.json | 15 -- features/read_thoughts.json | 15 -- features/readme.md | 292 ++++++++++++++++--------- features/reckless.json | 15 -- features/reel.json | 15 -- features/reflective_carapace.json | 15 -- features/regeneration.json | 15 -- features/rejuvenation.json | 15 -- features/relentless.json | 15 -- features/repulsion_breath.json | 15 -- features/roar.json | 0 features/rock_catching.json | 15 -- features/running_leap.json | 15 -- features/rust_metal.json | 15 -- features/scare.json | 0 features/searing_burst.json | 15 -- features/second_roar.json | 15 -- features/sense_magic.json | 15 -- features/senses.json | 15 -- features/shadow_stealth.json | 15 -- features/shapechanger.json | 15 -- features/shark_telepathy.json | 15 -- features/shield.json | 15 -- features/shielded_mind.json | 15 -- features/shimmering_shield.json | 15 -- features/shock.json | 15 -- features/shriek.json | 15 -- features/siege_monster.json | 15 -- features/sleep_breath.json | 15 -- features/slow.json | 15 -- features/slowing_breath.json | 15 -- features/sneak_attack.json | 15 -- features/snow_camouflage.json | 15 -- features/speak_with_beasts_and_plants.json | 15 -- features/spell_storing.json | 15 -- features/spider_climb.json | 15 -- features/split.json | 15 -- features/spores.json | 15 -- features/standing_leap.json | 15 -- features/steadfast.json | 15 -- features/steam_breath.json | 15 -- features/stench.json | 15 -- features/stone_camouflage.json | 15 -- features/stunning_screech.json | 0 features/sunlight_sensitivity.json | 15 -- features/sunlight_weakness.json | 15 -- features/sure-footed.json | 15 -- features/surprise_attack.json | 15 -- features/swallow.json | 15 -- features/swarm.json | 15 -- features/tail_attack.json | 15 -- features/tail_spike_regrowth.json | 15 -- features/tail_swipe.json | 15 -- features/telepathic_bond.json | 15 -- features/teleport.json | 15 -- features/tentacle_attack_or_fling.json | 15 -- features/tentacle_slam.json | 15 -- features/tentacles.json | 15 -- features/third_roar.json | 15 -- features/trampling_charge.json | 15 -- features/transparent.json | 15 -- features/treasure_sense.json | 15 -- features/tree_stride.json | 15 -- features/tunneler.json | 15 -- features/turn_resistance.json | 15 -- features/turning_defiance.json | 15 -- features/two-headed.json | 15 -- features/two_heads.json | 15 -- features/unarmed_strike.json | 15 -- features/undead_fortitude.json | 15 -- features/underwater_camouflage.json | 15 -- features/unnerving_mask.json | 15 -- features/vampire_weaknesses.json | 15 -- features/variable_illumination.json | 15 -- features/wakeful.json | 15 -- features/wall_of_ice.json | 15 -- features/water_breathing.json | 15 -- features/water_form.json | 15 -- features/water_susceptibility.json | 15 -- features/weakening_breath.json | 15 -- features/web_sense.json | 15 -- features/web_walker.json | 15 -- features/whelm.json | 15 -- features/whirlwind.json | 15 -- features/whirlwind_of_sand.json | 15 -- features/wing_attack.json | 15 -- features/wip/0blank.json | 15 ++ features/wip/TYPE_absorption.json | 18 ++ features/wip/animate_chains.json | 16 ++ features/wip/animate_trees.json | 0 features/wip/bound.json | 15 ++ features/wip/breath_weapons.json | 15 ++ features/wip/charm.json | 15 ++ features/wip/children_of_the_night.json | 0 features/wip/chomp.json | 15 ++ features/wip/claw_attack.json | 15 ++ features/wip/cold_breath.json | 15 ++ features/wip/confer_fire_resistance.json | 15 ++ features/wip/consume_life.json | 15 ++ features/wip/corrode_metal.json | 15 ++ features/wip/corrosive_form.json | 15 ++ features/wip/create_specter.json | 15 ++ features/wip/create_whirlwind.json | 15 ++ features/wip/cunning_action.json | 15 ++ features/wip/damage_transfer.json | 15 ++ features/wip/dark_devotion.json | 15 ++ features/wip/darkness_aura.json | 0 features/wip/deadly_leap.json | 15 ++ features/wip/death_burst.json | 15 ++ features/wip/death_glare.json | 15 ++ features/wip/death_throes.json | 15 ++ features/wip/detect.json | 15 ++ features/wip/devil's_sight.json | 15 ++ features/wip/disrupt_life.json | 15 ++ features/wip/divine_awareness.json | 15 ++ features/wip/divine_eminence.json | 15 ++ features/wip/draining_kiss.json | 15 ++ features/wip/dreadful_glare.json | 15 ++ features/wip/duergar_resilience.json | 15 ++ features/wip/earth_glide.json | 15 ++ features/wip/echolocation.json | 15 ++ features/wip/elemental_demise.json | 15 ++ features/wip/engulf.json | 15 ++ features/wip/enlarge.json | 15 ++ features/wip/enslave.json | 0 features/wip/ephemeral.json | 15 ++ features/wip/ethereal_jaunt.json | 15 ++ features/wip/ethereal_sight.json | 15 ++ features/wip/ethereal_stride.json | 15 ++ features/wip/etherealness.json | 15 ++ features/wip/evasion.json | 15 ++ features/wip/false_appearance.json | 15 ++ features/wip/faultless_tracker.json | 15 ++ features/wip/fear_aura.json | 15 ++ features/wip/fetid_cloud.json | 0 features/wip/fey_ancestry.json | 15 ++ features/wip/fey_charm.json | 15 ++ features/wip/fire_absorption.json | 15 ++ features/wip/fire_aura.json | 15 ++ features/wip/fire_breath.json | 15 ++ features/wip/fire_form.json | 15 ++ features/wip/first_roar.json | 15 ++ features/wip/fling.json | 15 ++ features/wip/flyby.json | 15 ++ features/wip/flying_sword.json | 15 ++ features/wip/freedom_of_movement.json | 15 ++ features/wip/freeze.json | 15 ++ features/wip/frightening_gaze.json | 15 ++ features/wip/frightful_presence.json | 15 ++ features/wip/frost_breath.json | 15 ++ features/wip/gibbering.json | 15 ++ features/wip/gnome_cunning.json | 15 ++ features/wip/grappler.json | 15 ++ features/wip/grasping_tendrils.json | 15 ++ features/wip/haste.json | 15 ++ features/wip/heal_self.json | 15 ++ features/wip/healing_touch.json | 0 features/wip/heart_sight.json | 15 ++ features/wip/heated_body.json | 15 ++ features/wip/heated_weapons.json | 15 ++ features/wip/hellish_rejuvenation.json | 15 ++ features/wip/hellish_weapons.json | 15 ++ features/wip/hold_breath.json | 15 ++ features/wip/hooves.json | 15 ++ features/wip/horrific_appearance.json | 15 ++ features/wip/horrifying_visage.json | 15 ++ features/wip/horror_nimbus.json | 15 ++ features/wip/hurl_flame.json | 0 features/wip/ice_walk.json | 15 ++ features/wip/ignited_illumination.json | 15 ++ features/wip/illumination.json | 15 ++ features/wip/illusory_appearance.json | 15 ++ features/wip/immutable_form.json | 15 ++ features/wip/incorporeal_movement.json | 15 ++ features/wip/ink_cloud.json | 15 ++ features/wip/inscrutable.json | 15 ++ features/wip/intoxicating_touch.json | 15 ++ features/wip/invisibility.json | 15 ++ features/wip/invisible_passage.json | 15 ++ features/wip/iron_scent.json | 15 ++ features/wip/keen_hearing.json | 15 ++ features/wip/keen_hearing_and_sight.json | 15 ++ features/wip/keen_hearing_and_smell.json | 15 ++ features/wip/keen_sight.json | 15 ++ features/wip/keen_sight_and_smell.json | 15 ++ features/wip/keen_smell.json | 15 ++ features/wip/labyrinthine_recall.json | 15 ++ features/wip/leadership.json | 15 ++ features/wip/legendary_attack.json | 14 ++ features/wip/legendary_resistance.json | 0 features/wip/life_drain.json | 15 ++ features/wip/light_sensitivity.json | 15 ++ features/wip/lightning_absorption.json | 15 ++ features/wip/lightning_breath.json | 15 ++ features/wip/lightning_storm.json | 15 ++ features/wip/lightning_strike.json | 15 ++ features/wip/limited_amphibiousess.json | 15 ++ features/wip/limited_magic_immunity.json | 15 ++ features/wip/limited_telepathy.json | 15 ++ features/wip/luring_song.json | 15 ++ features/wip/magic_resistance.json | 15 ++ features/wip/magic_weapons.json | 15 ++ features/wip/martial_advantage.json | 15 ++ features/wip/mimicry.json | 15 ++ features/wip/misty_escape.json | 15 ++ features/wip/moan.json | 15 ++ features/wip/move.json | 15 ++ features/wip/mucous_cloud.json | 15 ++ features/wip/multiattack..json | 15 ++ features/wip/multiattack.json | 15 ++ features/wip/multiple_heads.json | 15 ++ features/wip/nightmare_haunting.json | 0 features/wip/nimble_escape.json | 15 ++ features/wip/ooze_cube.json | 15 ++ features/wip/pack_tactics.json | 15 ++ features/wip/paralyzing_breath.json | 15 ++ features/wip/paralyzing_touch.json | 15 ++ features/wip/parry.json | 15 ++ features/wip/petrifying_breath.json | 15 ++ features/wip/petrifying_gaze.json | 15 ++ features/wip/phantasms.json | 15 ++ features/wip/poison_breath.json | 15 ++ features/wip/possession.json | 15 ++ features/wip/pounce.json | 15 ++ features/wip/probing_telepathy.json | 15 ++ features/wip/psychic_drain.json | 15 ++ features/wip/rampage.json | 15 ++ features/wip/reactive.json | 15 ++ features/wip/reactive_heads.json | 15 ++ features/wip/read_thoughts.json | 15 ++ features/wip/reckless.json | 15 ++ features/wip/reel.json | 15 ++ features/wip/reflective_carapace.json | 15 ++ features/wip/regeneration.json | 15 ++ features/wip/rejuvenation.json | 15 ++ features/wip/relentless.json | 15 ++ features/wip/repulsion_breath.json | 15 ++ features/wip/roar.json | 0 features/wip/rock_catching.json | 15 ++ features/wip/running_leap.json | 15 ++ features/wip/rust_metal.json | 15 ++ features/wip/scare.json | 0 features/wip/searing_burst.json | 15 ++ features/wip/second_roar.json | 15 ++ features/wip/sense_magic.json | 15 ++ features/wip/senses.json | 15 ++ features/wip/shadow_stealth.json | 15 ++ features/wip/shapechanger.json | 15 ++ features/wip/shark_telepathy.json | 15 ++ features/wip/shield.json | 15 ++ features/wip/shielded_mind.json | 15 ++ features/wip/shimmering_shield.json | 15 ++ features/wip/shock.json | 15 ++ features/wip/shriek.json | 15 ++ features/wip/siege_monster.json | 15 ++ features/wip/sleep_breath.json | 15 ++ features/wip/slow.json | 15 ++ features/wip/slowing_breath.json | 15 ++ features/wip/sneak_attack.json | 15 ++ features/wip/snow_camouflage.json | 15 ++ features/wip/speak_with_beasts_and_plants.json | 15 ++ features/wip/spell_storing.json | 15 ++ features/wip/spider_climb.json | 15 ++ features/wip/split.json | 15 ++ features/wip/spores.json | 15 ++ features/wip/standing_leap.json | 15 ++ features/wip/steadfast.json | 15 ++ features/wip/steam_breath.json | 15 ++ features/wip/stench.json | 15 ++ features/wip/stone_camouflage.json | 15 ++ features/wip/stunning_screech.json | 0 features/wip/sunlight_sensitivity.json | 15 ++ features/wip/sunlight_weakness.json | 15 ++ features/wip/sure-footed.json | 15 ++ features/wip/surprise_attack.json | 15 ++ features/wip/swallow.json | 15 ++ features/wip/swarm.json | 15 ++ features/wip/tail_attack.json | 15 ++ features/wip/tail_spike_regrowth.json | 15 ++ features/wip/tail_swipe.json | 15 ++ features/wip/telepathic_bond.json | 15 ++ features/wip/teleport.json | 15 ++ features/wip/tentacle_attack_or_fling.json | 15 ++ features/wip/tentacle_slam.json | 15 ++ features/wip/tentacles.json | 15 ++ features/wip/third_roar.json | 15 ++ features/wip/trampling_charge.json | 15 ++ features/wip/transparent.json | 15 ++ features/wip/treasure_sense.json | 15 ++ features/wip/tree_stride.json | 15 ++ features/wip/tunneler.json | 15 ++ features/wip/turn_resistance.json | 15 ++ features/wip/turning_defiance.json | 15 ++ features/wip/two-headed.json | 15 ++ features/wip/two_heads.json | 15 ++ features/wip/unarmed_strike.json | 15 ++ features/wip/undead_fortitude.json | 15 ++ features/wip/underwater_camouflage.json | 15 ++ features/wip/unnerving_mask.json | 15 ++ features/wip/vampire_weaknesses.json | 15 ++ features/wip/variable_illumination.json | 15 ++ features/wip/wakeful.json | 15 ++ features/wip/wall_of_ice.json | 15 ++ features/wip/water_breathing.json | 15 ++ features/wip/water_form.json | 15 ++ features/wip/water_susceptibility.json | 15 ++ features/wip/weakening_breath.json | 15 ++ features/wip/web_sense.json | 15 ++ features/wip/web_walker.json | 15 ++ features/wip/whelm.json | 15 ++ features/wip/whirlwind.json | 15 ++ features/wip/whirlwind_of_sand.json | 15 ++ features/wip/wing_attack.json | 15 ++ featuresNotes.txt | 126 ----------- propertiesNotes.txt | 46 ---- src/armor.cc | 8 +- src/armor.h | 4 +- src/battlescape/battlescape.h | 50 +++++ src/features/feature.cc | 2 + src/item.cc | 26 ++- src/item.h | 18 +- src/settings.cc | 1 + src/utils.h | 2 +- src/weapon.cc | 10 +- src/weapon.h | 4 +- 497 files changed, 3780 insertions(+), 3780 deletions(-) delete mode 100644 features/0blank.json delete mode 100644 features/TYPE_absorption.json delete mode 100644 features/animate_chains.json delete mode 100644 features/animate_trees.json delete mode 100644 features/attack.json create mode 100644 features/attack_tarrasque.json delete mode 100644 features/bound.json delete mode 100644 features/breath_weapons.json delete mode 100644 features/charm.json delete mode 100644 features/children_of_the_night.json delete mode 100644 features/chomp.json delete mode 100644 features/claw_attack.json delete mode 100644 features/cold_breath.json delete mode 100644 features/confer_fire_resistance.json delete mode 100644 features/consume_life.json delete mode 100644 features/corrode_metal.json delete mode 100644 features/corrosive_form.json delete mode 100644 features/create_specter.json delete mode 100644 features/create_whirlwind.json delete mode 100644 features/cunning_action.json delete mode 100644 features/damage_transfer.json delete mode 100644 features/dark_devotion.json delete mode 100644 features/darkness_aura.json delete mode 100644 features/deadly_leap.json delete mode 100644 features/death_burst.json delete mode 100644 features/death_glare.json delete mode 100644 features/death_throes.json delete mode 100644 features/detect.json delete mode 100644 features/devil's_sight.json delete mode 100644 features/disrupt_life.json delete mode 100644 features/divine_awareness.json delete mode 100644 features/divine_eminence.json delete mode 100644 features/draining_kiss.json delete mode 100644 features/dreadful_glare.json delete mode 100644 features/duergar_resilience.json delete mode 100644 features/earth_glide.json delete mode 100644 features/echolocation.json delete mode 100644 features/elemental_demise.json delete mode 100644 features/engulf.json delete mode 100644 features/enlarge.json delete mode 100644 features/enslave.json delete mode 100644 features/ephemeral.json delete mode 100644 features/ethereal_jaunt.json delete mode 100644 features/ethereal_sight.json delete mode 100644 features/ethereal_stride.json delete mode 100644 features/etherealness.json delete mode 100644 features/evasion.json delete mode 100644 features/false_appearance.json delete mode 100644 features/faultless_tracker.json delete mode 100644 features/fear_aura.json delete mode 100644 features/fetid_cloud.json delete mode 100644 features/fey_ancestry.json delete mode 100644 features/fey_charm.json delete mode 100644 features/fire_absorption.json delete mode 100644 features/fire_aura.json delete mode 100644 features/fire_breath.json delete mode 100644 features/fire_form.json delete mode 100644 features/first_roar.json delete mode 100644 features/fling.json delete mode 100644 features/flyby.json delete mode 100644 features/flying_sword.json delete mode 100644 features/freedom_of_movement.json delete mode 100644 features/freeze.json delete mode 100644 features/frightening_gaze.json delete mode 100644 features/frightful_presence.json delete mode 100644 features/frost_breath.json delete mode 100644 features/gibbering.json delete mode 100644 features/gnome_cunning.json delete mode 100644 features/grappler.json delete mode 100644 features/grasping_tendrils.json delete mode 100644 features/haste.json delete mode 100644 features/heal_self.json delete mode 100644 features/healing_touch.json delete mode 100644 features/heart_sight.json delete mode 100644 features/heated_body.json delete mode 100644 features/heated_weapons.json delete mode 100644 features/hellish_rejuvenation.json delete mode 100644 features/hellish_weapons.json delete mode 100644 features/hold_breath.json delete mode 100644 features/hooves.json delete mode 100644 features/horrific_appearance.json delete mode 100644 features/horrifying_visage.json delete mode 100644 features/horror_nimbus.json delete mode 100644 features/hurl_flame.json delete mode 100644 features/ice_walk.json delete mode 100644 features/ignited_illumination.json delete mode 100644 features/illumination.json delete mode 100644 features/illusory_appearance.json delete mode 100644 features/immutable_form.json delete mode 100644 features/incorporeal_movement.json delete mode 100644 features/ink_cloud.json delete mode 100644 features/inscrutable.json delete mode 100644 features/intoxicating_touch.json delete mode 100644 features/invisibility.json delete mode 100644 features/invisible_passage.json delete mode 100644 features/iron_scent.json delete mode 100644 features/keen_hearing.json delete mode 100644 features/keen_hearing_and_sight.json delete mode 100644 features/keen_hearing_and_smell.json delete mode 100644 features/keen_sight.json delete mode 100644 features/keen_sight_and_smell.json delete mode 100644 features/keen_smell.json delete mode 100644 features/labyrinthine_recall.json delete mode 100644 features/leadership.json delete mode 100644 features/legendary_attack.json delete mode 100644 features/legendary_resistance.json delete mode 100644 features/life_drain.json delete mode 100644 features/light_sensitivity.json delete mode 100644 features/lightning_absorption.json delete mode 100644 features/lightning_breath.json delete mode 100644 features/lightning_storm.json delete mode 100644 features/lightning_strike.json delete mode 100644 features/limited_amphibiousess.json delete mode 100644 features/limited_magic_immunity.json delete mode 100644 features/limited_telepathy.json delete mode 100644 features/luring_song.json delete mode 100644 features/magic_resistance.json delete mode 100644 features/magic_weapons.json delete mode 100644 features/martial_advantage.json delete mode 100644 features/mimicry.json delete mode 100644 features/misty_escape.json delete mode 100644 features/moan.json delete mode 100644 features/move.json delete mode 100644 features/mucous_cloud.json delete mode 100644 features/multiattack..json delete mode 100644 features/multiattack.json delete mode 100644 features/multiple_heads.json delete mode 100644 features/nightmare_haunting.json delete mode 100644 features/nimble_escape.json delete mode 100644 features/ooze_cube.json delete mode 100644 features/pack_tactics.json delete mode 100644 features/paralyzing_breath.json delete mode 100644 features/paralyzing_touch.json delete mode 100644 features/parry.json delete mode 100644 features/petrifying_breath.json delete mode 100644 features/petrifying_gaze.json delete mode 100644 features/phantasms.json delete mode 100644 features/poison_breath.json delete mode 100644 features/possession.json delete mode 100644 features/pounce.json delete mode 100644 features/probing_telepathy.json delete mode 100644 features/psychic_drain.json delete mode 100644 features/rampage.json delete mode 100644 features/reactive.json delete mode 100644 features/reactive_heads.json delete mode 100644 features/read_thoughts.json delete mode 100644 features/reckless.json delete mode 100644 features/reel.json delete mode 100644 features/reflective_carapace.json delete mode 100644 features/regeneration.json delete mode 100644 features/rejuvenation.json delete mode 100644 features/relentless.json delete mode 100644 features/repulsion_breath.json delete mode 100644 features/roar.json delete mode 100644 features/rock_catching.json delete mode 100644 features/running_leap.json delete mode 100644 features/rust_metal.json delete mode 100644 features/scare.json delete mode 100644 features/searing_burst.json delete mode 100644 features/second_roar.json delete mode 100644 features/sense_magic.json delete mode 100644 features/senses.json delete mode 100644 features/shadow_stealth.json delete mode 100644 features/shapechanger.json delete mode 100644 features/shark_telepathy.json delete mode 100644 features/shield.json delete mode 100644 features/shielded_mind.json delete mode 100644 features/shimmering_shield.json delete mode 100644 features/shock.json delete mode 100644 features/shriek.json delete mode 100644 features/siege_monster.json delete mode 100644 features/sleep_breath.json delete mode 100644 features/slow.json delete mode 100644 features/slowing_breath.json delete mode 100644 features/sneak_attack.json delete mode 100644 features/snow_camouflage.json delete mode 100644 features/speak_with_beasts_and_plants.json delete mode 100644 features/spell_storing.json delete mode 100644 features/spider_climb.json delete mode 100644 features/split.json delete mode 100644 features/spores.json delete mode 100644 features/standing_leap.json delete mode 100644 features/steadfast.json delete mode 100644 features/steam_breath.json delete mode 100644 features/stench.json delete mode 100644 features/stone_camouflage.json delete mode 100644 features/stunning_screech.json delete mode 100644 features/sunlight_sensitivity.json delete mode 100644 features/sunlight_weakness.json delete mode 100644 features/sure-footed.json delete mode 100644 features/surprise_attack.json delete mode 100644 features/swallow.json delete mode 100644 features/swarm.json delete mode 100644 features/tail_attack.json delete mode 100644 features/tail_spike_regrowth.json delete mode 100644 features/tail_swipe.json delete mode 100644 features/telepathic_bond.json delete mode 100644 features/teleport.json delete mode 100644 features/tentacle_attack_or_fling.json delete mode 100644 features/tentacle_slam.json delete mode 100644 features/tentacles.json delete mode 100644 features/third_roar.json delete mode 100644 features/trampling_charge.json delete mode 100644 features/transparent.json delete mode 100644 features/treasure_sense.json delete mode 100644 features/tree_stride.json delete mode 100644 features/tunneler.json delete mode 100644 features/turn_resistance.json delete mode 100644 features/turning_defiance.json delete mode 100644 features/two-headed.json delete mode 100644 features/two_heads.json delete mode 100644 features/unarmed_strike.json delete mode 100644 features/undead_fortitude.json delete mode 100644 features/underwater_camouflage.json delete mode 100644 features/unnerving_mask.json delete mode 100644 features/vampire_weaknesses.json delete mode 100644 features/variable_illumination.json delete mode 100644 features/wakeful.json delete mode 100644 features/wall_of_ice.json delete mode 100644 features/water_breathing.json delete mode 100644 features/water_form.json delete mode 100644 features/water_susceptibility.json delete mode 100644 features/weakening_breath.json delete mode 100644 features/web_sense.json delete mode 100644 features/web_walker.json delete mode 100644 features/whelm.json delete mode 100644 features/whirlwind.json delete mode 100644 features/whirlwind_of_sand.json delete mode 100644 features/wing_attack.json create mode 100644 features/wip/0blank.json create mode 100644 features/wip/TYPE_absorption.json create mode 100644 features/wip/animate_chains.json create mode 100644 features/wip/animate_trees.json create mode 100644 features/wip/bound.json create mode 100644 features/wip/breath_weapons.json create mode 100644 features/wip/charm.json create mode 100644 features/wip/children_of_the_night.json create mode 100644 features/wip/chomp.json create mode 100644 features/wip/claw_attack.json create mode 100644 features/wip/cold_breath.json create mode 100644 features/wip/confer_fire_resistance.json create mode 100644 features/wip/consume_life.json create mode 100644 features/wip/corrode_metal.json create mode 100644 features/wip/corrosive_form.json create mode 100644 features/wip/create_specter.json create mode 100644 features/wip/create_whirlwind.json create mode 100644 features/wip/cunning_action.json create mode 100644 features/wip/damage_transfer.json create mode 100644 features/wip/dark_devotion.json create mode 100644 features/wip/darkness_aura.json create mode 100644 features/wip/deadly_leap.json create mode 100644 features/wip/death_burst.json create mode 100644 features/wip/death_glare.json create mode 100644 features/wip/death_throes.json create mode 100644 features/wip/detect.json create mode 100644 features/wip/devil's_sight.json create mode 100644 features/wip/disrupt_life.json create mode 100644 features/wip/divine_awareness.json create mode 100644 features/wip/divine_eminence.json create mode 100644 features/wip/draining_kiss.json create mode 100644 features/wip/dreadful_glare.json create mode 100644 features/wip/duergar_resilience.json create mode 100644 features/wip/earth_glide.json create mode 100644 features/wip/echolocation.json create mode 100644 features/wip/elemental_demise.json create mode 100644 features/wip/engulf.json create mode 100644 features/wip/enlarge.json create mode 100644 features/wip/enslave.json create mode 100644 features/wip/ephemeral.json create mode 100644 features/wip/ethereal_jaunt.json create mode 100644 features/wip/ethereal_sight.json create mode 100644 features/wip/ethereal_stride.json create mode 100644 features/wip/etherealness.json create mode 100644 features/wip/evasion.json create mode 100644 features/wip/false_appearance.json create mode 100644 features/wip/faultless_tracker.json create mode 100644 features/wip/fear_aura.json create mode 100644 features/wip/fetid_cloud.json create mode 100644 features/wip/fey_ancestry.json create mode 100644 features/wip/fey_charm.json create mode 100644 features/wip/fire_absorption.json create mode 100644 features/wip/fire_aura.json create mode 100644 features/wip/fire_breath.json create mode 100644 features/wip/fire_form.json create mode 100644 features/wip/first_roar.json create mode 100644 features/wip/fling.json create mode 100644 features/wip/flyby.json create mode 100644 features/wip/flying_sword.json create mode 100644 features/wip/freedom_of_movement.json create mode 100644 features/wip/freeze.json create mode 100644 features/wip/frightening_gaze.json create mode 100644 features/wip/frightful_presence.json create mode 100644 features/wip/frost_breath.json create mode 100644 features/wip/gibbering.json create mode 100644 features/wip/gnome_cunning.json create mode 100644 features/wip/grappler.json create mode 100644 features/wip/grasping_tendrils.json create mode 100644 features/wip/haste.json create mode 100644 features/wip/heal_self.json create mode 100644 features/wip/healing_touch.json create mode 100644 features/wip/heart_sight.json create mode 100644 features/wip/heated_body.json create mode 100644 features/wip/heated_weapons.json create mode 100644 features/wip/hellish_rejuvenation.json create mode 100644 features/wip/hellish_weapons.json create mode 100644 features/wip/hold_breath.json create mode 100644 features/wip/hooves.json create mode 100644 features/wip/horrific_appearance.json create mode 100644 features/wip/horrifying_visage.json create mode 100644 features/wip/horror_nimbus.json create mode 100644 features/wip/hurl_flame.json create mode 100644 features/wip/ice_walk.json create mode 100644 features/wip/ignited_illumination.json create mode 100644 features/wip/illumination.json create mode 100644 features/wip/illusory_appearance.json create mode 100644 features/wip/immutable_form.json create mode 100644 features/wip/incorporeal_movement.json create mode 100644 features/wip/ink_cloud.json create mode 100644 features/wip/inscrutable.json create mode 100644 features/wip/intoxicating_touch.json create mode 100644 features/wip/invisibility.json create mode 100644 features/wip/invisible_passage.json create mode 100644 features/wip/iron_scent.json create mode 100644 features/wip/keen_hearing.json create mode 100644 features/wip/keen_hearing_and_sight.json create mode 100644 features/wip/keen_hearing_and_smell.json create mode 100644 features/wip/keen_sight.json create mode 100644 features/wip/keen_sight_and_smell.json create mode 100644 features/wip/keen_smell.json create mode 100644 features/wip/labyrinthine_recall.json create mode 100644 features/wip/leadership.json create mode 100644 features/wip/legendary_attack.json create mode 100644 features/wip/legendary_resistance.json create mode 100644 features/wip/life_drain.json create mode 100644 features/wip/light_sensitivity.json create mode 100644 features/wip/lightning_absorption.json create mode 100644 features/wip/lightning_breath.json create mode 100644 features/wip/lightning_storm.json create mode 100644 features/wip/lightning_strike.json create mode 100644 features/wip/limited_amphibiousess.json create mode 100644 features/wip/limited_magic_immunity.json create mode 100644 features/wip/limited_telepathy.json create mode 100644 features/wip/luring_song.json create mode 100644 features/wip/magic_resistance.json create mode 100644 features/wip/magic_weapons.json create mode 100644 features/wip/martial_advantage.json create mode 100644 features/wip/mimicry.json create mode 100644 features/wip/misty_escape.json create mode 100644 features/wip/moan.json create mode 100644 features/wip/move.json create mode 100644 features/wip/mucous_cloud.json create mode 100644 features/wip/multiattack..json create mode 100644 features/wip/multiattack.json create mode 100644 features/wip/multiple_heads.json create mode 100644 features/wip/nightmare_haunting.json create mode 100644 features/wip/nimble_escape.json create mode 100644 features/wip/ooze_cube.json create mode 100644 features/wip/pack_tactics.json create mode 100644 features/wip/paralyzing_breath.json create mode 100644 features/wip/paralyzing_touch.json create mode 100644 features/wip/parry.json create mode 100644 features/wip/petrifying_breath.json create mode 100644 features/wip/petrifying_gaze.json create mode 100644 features/wip/phantasms.json create mode 100644 features/wip/poison_breath.json create mode 100644 features/wip/possession.json create mode 100644 features/wip/pounce.json create mode 100644 features/wip/probing_telepathy.json create mode 100644 features/wip/psychic_drain.json create mode 100644 features/wip/rampage.json create mode 100644 features/wip/reactive.json create mode 100644 features/wip/reactive_heads.json create mode 100644 features/wip/read_thoughts.json create mode 100644 features/wip/reckless.json create mode 100644 features/wip/reel.json create mode 100644 features/wip/reflective_carapace.json create mode 100644 features/wip/regeneration.json create mode 100644 features/wip/rejuvenation.json create mode 100644 features/wip/relentless.json create mode 100644 features/wip/repulsion_breath.json create mode 100644 features/wip/roar.json create mode 100644 features/wip/rock_catching.json create mode 100644 features/wip/running_leap.json create mode 100644 features/wip/rust_metal.json create mode 100644 features/wip/scare.json create mode 100644 features/wip/searing_burst.json create mode 100644 features/wip/second_roar.json create mode 100644 features/wip/sense_magic.json create mode 100644 features/wip/senses.json create mode 100644 features/wip/shadow_stealth.json create mode 100644 features/wip/shapechanger.json create mode 100644 features/wip/shark_telepathy.json create mode 100644 features/wip/shield.json create mode 100644 features/wip/shielded_mind.json create mode 100644 features/wip/shimmering_shield.json create mode 100644 features/wip/shock.json create mode 100644 features/wip/shriek.json create mode 100644 features/wip/siege_monster.json create mode 100644 features/wip/sleep_breath.json create mode 100644 features/wip/slow.json create mode 100644 features/wip/slowing_breath.json create mode 100644 features/wip/sneak_attack.json create mode 100644 features/wip/snow_camouflage.json create mode 100644 features/wip/speak_with_beasts_and_plants.json create mode 100644 features/wip/spell_storing.json create mode 100644 features/wip/spider_climb.json create mode 100644 features/wip/split.json create mode 100644 features/wip/spores.json create mode 100644 features/wip/standing_leap.json create mode 100644 features/wip/steadfast.json create mode 100644 features/wip/steam_breath.json create mode 100644 features/wip/stench.json create mode 100644 features/wip/stone_camouflage.json create mode 100644 features/wip/stunning_screech.json create mode 100644 features/wip/sunlight_sensitivity.json create mode 100644 features/wip/sunlight_weakness.json create mode 100644 features/wip/sure-footed.json create mode 100644 features/wip/surprise_attack.json create mode 100644 features/wip/swallow.json create mode 100644 features/wip/swarm.json create mode 100644 features/wip/tail_attack.json create mode 100644 features/wip/tail_spike_regrowth.json create mode 100644 features/wip/tail_swipe.json create mode 100644 features/wip/telepathic_bond.json create mode 100644 features/wip/teleport.json create mode 100644 features/wip/tentacle_attack_or_fling.json create mode 100644 features/wip/tentacle_slam.json create mode 100644 features/wip/tentacles.json create mode 100644 features/wip/third_roar.json create mode 100644 features/wip/trampling_charge.json create mode 100644 features/wip/transparent.json create mode 100644 features/wip/treasure_sense.json create mode 100644 features/wip/tree_stride.json create mode 100644 features/wip/tunneler.json create mode 100644 features/wip/turn_resistance.json create mode 100644 features/wip/turning_defiance.json create mode 100644 features/wip/two-headed.json create mode 100644 features/wip/two_heads.json create mode 100644 features/wip/unarmed_strike.json create mode 100644 features/wip/undead_fortitude.json create mode 100644 features/wip/underwater_camouflage.json create mode 100644 features/wip/unnerving_mask.json create mode 100644 features/wip/vampire_weaknesses.json create mode 100644 features/wip/variable_illumination.json create mode 100644 features/wip/wakeful.json create mode 100644 features/wip/wall_of_ice.json create mode 100644 features/wip/water_breathing.json create mode 100644 features/wip/water_form.json create mode 100644 features/wip/water_susceptibility.json create mode 100644 features/wip/weakening_breath.json create mode 100644 features/wip/web_sense.json create mode 100644 features/wip/web_walker.json create mode 100644 features/wip/whelm.json create mode 100644 features/wip/whirlwind.json create mode 100644 features/wip/whirlwind_of_sand.json create mode 100644 features/wip/wing_attack.json delete mode 100644 featuresNotes.txt delete mode 100644 propertiesNotes.txt create mode 100644 src/battlescape/battlescape.h diff --git a/Makefile b/Makefile index 401c43b..f2f5416 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,12 @@ -CC=g++ LIBS=libconfuse nlohmann_json -CFLAGS=-c -Wall -fPIC -std=c++20 -LDFLAGS= -SOURCES=src/dmtool.cc src/item.cc src/creature.cc src/spellcasting.cc src/weapon.cc src/dice.cc src/settings.cc src/spell.cc src/features/feature.cc src/utils.cc src/rules.cc src/armor.cc src/cmd/cmd.cc src/cmd/cmd_usage.cc src/cmd/cmd_query.cc src/cmd/cmd_fsops.cc src/cmd/cmd_manipulate.cc src/entry.cc +override CXXFLAGS += -Wall -fPIC -std=c++20 `pkg-config $(LIBS) --cflags` +override LDFLAGS += `pkg-config $(LIBS) --libs` +CC=$(CXX) +SOURCES=src/armor.cc src/cmd/cmd.cc src/cmd/cmd_fsops.cc src/cmd/cmd_manipulate.cc src/cmd/cmd_query.cc src/cmd/cmd_usage.cc src/creature.cc src/dice.cc src/dmtool.cc src/entry.cc src/features/feature.cc src/item.cc src/rules.cc src/settings.cc src/spell.cc src/spellcasting.cc src/utils.cc src/weapon.cc OBJECTS=$(SOURCES:.cc=.o) LIBRARY= EXECUTABLE=dmtool -ifeq ($(PREFIX),) - PREFIX := /usr -endif +PREFIX := /usr all: $(SOURCES) $(EXECUTABLE) @@ -16,105 +14,70 @@ parsed: parser/scrapeToJson.py parser/utils.py parser/verified.txt python parser/scrapeToJson.py touch parsed/ -install: $(EXECUTABLE) parsed +install: $(EXECUTABLE) install -d $(DESTDIR)$(PREFIX)/share/dmtool/ - cp -r parsed/* $(DESTDIR)$(PREFIX)/share/dmtool/ + #cp -r parsed/* $(DESTDIR)$(PREFIX)/share/dmtool/ install -d $(DESTDIR)$(PREFIX)/bin/ install -m 755 $(EXECUTABLE) $(DESTDIR)$(PREFIX)/bin/ - install -m 644 files/dmtool.bash $(DESTDIR)/usr/share/bash-completion/completions/dmtool + install -m 644 files/dmtool.bash $(DESTDIR)`pkg-config --variable=completionsdir bash-completion`/dmtool install -m 644 files/dmtool.conf $(DESTDIR)/etc/dmtool.conf $(EXECUTABLE): $(OBJECTS) - $(CC) $(OBJECTS) -o $@ $(LDFLAGS) `pkg-config $(LIBS) --libs` + $(CXX) $(OBJECTS) -o $@ $(LDFLAGS) $(LDLIBS) -src/dmtool.o: src/dmtool.cc src/cmd/cmd.h src/cmd/../rules.h \ - src/cmd/../utils.h src/cmd/../entry.h src/cmd/../defines.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - -src/item.o: src/item.cc src/item.h src/entry.h src/defines.h src/weapon.h \ - src/rules.h src/utils.h src/armor.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - -src/creature.o: src/creature.cc src/creature.h src/rules.h src/utils.h \ - src/entry.h src/defines.h src/features/feature.h src/item.h src/dice.h \ - src/weapon.h src/armor.h src/attack.h src/spellcasting.h src/spell.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - -src/spellcasting.o: src/spellcasting.cc src/spellcasting.h \ - src/features/feature.h src/features/../entry.h src/features/../defines.h \ - src/spell.h src/rules.h src/utils.h src/defines.h src/creature.h \ - src/item.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - -src/weapon.o: src/weapon.cc src/weapon.h src/item.h src/entry.h \ - src/defines.h src/rules.h src/utils.h src/creature.h \ - src/features/feature.h src/dice.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - -src/dice.o: src/dice.cc src/dice.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - -src/settings.o: src/settings.cc src/settings.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - -src/spell.o: src/spell.cc src/spell.h src/entry.h src/defines.h \ - src/utils.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - -src/features/feature.o: src/features/feature.cc src/features/feature.h \ - src/features/../entry.h src/features/../defines.h \ - src/features/../spellcasting.h src/features/../spell.h \ - src/features/../rules.h src/features/../utils.h src/features/../attack.h \ - src/features/../weapon.h src/features/../item.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - -src/utils.o: src/utils.cc src/utils.h src/entry.h src/defines.h \ - src/settings.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - -src/rules.o: src/rules.cc src/rules.h src/utils.h src/entry.h \ - src/defines.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - src/armor.o: src/armor.cc src/armor.h src/item.h src/entry.h \ src/defines.h src/creature.h src/rules.h src/utils.h \ src/features/feature.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - src/cmd/cmd.o: src/cmd/cmd.cc src/cmd/cmd.h src/cmd/../rules.h \ src/cmd/../utils.h src/cmd/../entry.h src/cmd/../defines.h \ src/cmd/../settings.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - -src/cmd/cmd_usage.o: src/cmd/cmd_usage.cc src/cmd/cmd.h \ - src/cmd/../rules.h src/cmd/../utils.h src/cmd/../entry.h \ - src/cmd/../defines.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - -src/cmd/cmd_query.o: src/cmd/cmd_query.cc src/cmd/cmd.h \ - src/cmd/../rules.h src/cmd/../utils.h src/cmd/../entry.h \ - src/cmd/../defines.h src/cmd/../creature.h src/cmd/../features/feature.h \ - src/cmd/../item.h src/cmd/../dice.h src/cmd/../weapon.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - src/cmd/cmd_fsops.o: src/cmd/cmd_fsops.cc src/cmd/cmd.h \ src/cmd/../rules.h src/cmd/../utils.h src/cmd/../entry.h \ src/cmd/../defines.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - src/cmd/cmd_manipulate.o: src/cmd/cmd_manipulate.cc src/cmd/cmd.h \ src/cmd/../rules.h src/cmd/../utils.h src/cmd/../entry.h \ src/cmd/../defines.h src/cmd/../creature.h src/cmd/../features/feature.h \ src/cmd/../item.h src/cmd/../spellcasting.h src/cmd/../spell.h \ src/cmd/../settings.h src/cmd/../weapon.h src/cmd/../dice.h \ src/cmd/../armor.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` - +src/cmd/cmd_query.o: src/cmd/cmd_query.cc src/cmd/cmd.h \ + src/cmd/../rules.h src/cmd/../utils.h src/cmd/../entry.h \ + src/cmd/../defines.h src/cmd/../creature.h src/cmd/../features/feature.h \ + src/cmd/../item.h src/cmd/../dice.h src/cmd/../weapon.h +src/cmd/cmd_usage.o: src/cmd/cmd_usage.cc src/cmd/cmd.h \ + src/cmd/../rules.h src/cmd/../utils.h src/cmd/../entry.h \ + src/cmd/../defines.h +src/creature.o: src/creature.cc src/creature.h src/rules.h src/utils.h \ + src/entry.h src/defines.h src/features/feature.h src/item.h src/dice.h \ + src/weapon.h src/armor.h src/attack.h src/spellcasting.h src/spell.h +src/dice.o: src/dice.cc src/dice.h +src/dmtool.o: src/dmtool.cc src/cmd/cmd.h src/cmd/../rules.h \ + src/cmd/../utils.h src/cmd/../entry.h src/cmd/../defines.h src/entry.o: src/entry.cc src/entry.h src/defines.h src/utils.h \ src/features/feature.h src/item.h src/spell.h src/creature.h src/rules.h - $(CC) $(CFLAGS) $< -o $@ `pkg-config $(LIBS) --cflags` +src/features/feature.o: src/features/feature.cc src/features/feature.h \ + src/features/../entry.h src/features/../defines.h \ + src/features/../spellcasting.h src/features/../spell.h \ + src/features/../rules.h src/features/../utils.h src/features/../attack.h \ + src/features/../weapon.h src/features/../item.h \ + src/features/../creature.h +src/item.o: src/item.cc src/item.h src/entry.h src/defines.h src/weapon.h \ + src/rules.h src/utils.h src/armor.h +src/rules.o: src/rules.cc src/rules.h src/utils.h src/entry.h \ + src/defines.h +src/settings.o: src/settings.cc src/settings.h +src/spell.o: src/spell.cc src/spell.h src/entry.h src/defines.h \ + src/utils.h +src/spellcasting.o: src/spellcasting.cc src/spellcasting.h \ + src/features/feature.h src/features/../entry.h src/features/../defines.h \ + src/spell.h src/rules.h src/utils.h src/defines.h src/creature.h \ + src/item.h +src/utils.o: src/utils.cc src/utils.h src/entry.h src/defines.h \ + src/settings.h +src/weapon.o: src/weapon.cc src/weapon.h src/item.h src/entry.h \ + src/defines.h src/rules.h src/utils.h src/creature.h \ + src/features/feature.h src/dice.h clean: - rm -f $(LIBRARY) $(EXECUTABLE) - find . | grep .o$ | xargs rm -f + $(RM) $(LIBRARY) $(EXECUTABLE) $(TEST) $(OBJECTS) diff --git a/configure b/configure index b6488b4..61c60b2 100755 --- a/configure +++ b/configure @@ -7,10 +7,12 @@ EXECUTABLE="dmtool" # e.g., foo.so LIBRARY= +TEST= + # List of libs as given to pkg-config LIBS="libconfuse nlohmann_json" -CFLAGS="-c -Wall -fPIC -std=c++20" +CXXFLAGS="-Wall -fPIC -std=c++20" LDFLAGS= @@ -22,15 +24,15 @@ parsed: parser/scrapeToJson.py parser/utils.py parser/verified.txt touch parsed/ " -INSTALL=" -install: \$(EXECUTABLE) parsed - install -d \$(DESTDIR)\$(PREFIX)/share/dmtool/ - cp -r parsed/* \$(DESTDIR)\$(PREFIX)/share/dmtool/ - install -d \$(DESTDIR)\$(PREFIX)/bin/ - install -m 755 \$(EXECUTABLE) \$(DESTDIR)\$(PREFIX)/bin/ - install -m 644 files/dmtool.bash \$(DESTDIR)`pkg-config --variable=completionsdir bash-completion`/dmtool - install -m 644 files/dmtool.conf \$(DESTDIR)/etc/dmtool.conf -" +INSTALL=' +install: $(EXECUTABLE) parsed + install -d $(DESTDIR)$(PREFIX)/share/dmtool/ + cp -r parsed/* $(DESTDIR)$(PREFIX)/share/dmtool/ + install -d $(DESTDIR)$(PREFIX)/bin/ + install -m 755 $(EXECUTABLE) $(DESTDIR)$(PREFIX)/bin/ + install -m 644 files/dmtool.bash $(DESTDIR)`pkg-config --variable=completionsdir bash-completion`/dmtool + install -m 644 files/dmtool.conf $(DESTDIR)/etc/dmtool.conf +' # Below here shouldn't need editing @@ -49,7 +51,7 @@ LIBRULE= if [ -n "$LIBRARY" ]; then LIBRULE=" \$(LIBRARY): \$(OBJECTS) - \$(CC) \$(OBJECTS) -shared -o \$@ \$(LDFLAGS) $PKG_CONFIG_LIBS + \$(CXX) \$(OBJECTS) -shared -o \$@ \$(LDFLAGS) \$(LDLIBS) " ALL="$ALL \$(LIBRARY)" fi @@ -58,32 +60,42 @@ EXERULE= if [ -n "$EXECUTABLE" ]; then EXERULE=" \$(EXECUTABLE): \$(OBJECTS) - \$(CC) \$(OBJECTS) -o \$@ \$(LDFLAGS) $PKG_CONFIG_LIBS + \$(CXX) \$(OBJECTS) -o \$@ \$(LDFLAGS) \$(LDLIBS) " ALL="$ALL \$(EXECUTABLE)" fi -ORULES=$(for cc in `find $SOURCE_DIR | grep .cc$`; do g++ -MM -MT `cut -d'.' -f-1 <<< $cc`.o $cc; echo -e "\t"'$(CC) $(CFLAGS) $< -o $@ '"$PKG_CONFIG_CFLAGS\n"; done) +TESTRULE= +if [ -n "$TEST" ]; then + TESTRULE=" +\$(TEST): \$(OBJECTS) + \$(CXX) \$(OBJECTS) -o \$@ \$(LDFLAGS) \$(LDLIBS) -lcppunit + +test: \$(TEST) + ./\$(TEST) +" + ALL="$ALL \$(TEST)" +fi + + +ORULES=$(for cc in `find $SOURCE_DIR | grep .cc$`; do g++ -MM -MT `cut -d'.' -f-1 <<< $cc`.o $cc; done) cat << EOF > Makefile -CC=g++ LIBS=$LIBS -CFLAGS=$CFLAGS -LDFLAGS=$LDFLAGS +override CXXFLAGS += $CXXFLAGS $PKG_CONFIG_CFLAGS +override LDFLAGS += $LDFLAGS $PKG_CONFIG_LIBS +CC=\$(CXX) SOURCES=$SOURCES OBJECTS=\$(SOURCES:.cc=.o) LIBRARY=$LIBRARY EXECUTABLE=$EXECUTABLE -ifeq (\$(PREFIX),) - PREFIX := /usr -endif +PREFIX := /usr $ALL -$EXTRAS$INSTALL$LIBRULE$EXERULE +$EXTRAS$INSTALL$LIBRULE$EXERULE$TESTRULE $ORULES clean: - rm -f \$(LIBRARY) \$(EXECUTABLE) - find . | grep .o\$ | xargs rm -f + \$(RM) \$(LIBRARY) \$(EXECUTABLE) \$(TEST) \$(OBJECTS) EOF diff --git a/features/0blank.json b/features/0blank.json deleted file mode 100644 index 80aaf8e..0000000 --- a/features/0blank.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "NAME", - "text": "TEXT", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/TYPE_absorption.json b/features/TYPE_absorption.json deleted file mode 100644 index 58c1018..0000000 --- a/features/TYPE_absorption.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "{V0} absorption", - "text": "Whenever the {NAME} is subjected to {V0} damage, it takes no damage and instead regains a number of hit points equal to the {V0} damage dealt.", - "subfeatures": [ - { - "trigger": [ "N takes damage", "self" ], - "conditions": [[ "Damage received was type TYPE", "V0" ]], - "effects": [{ - "target": "self", - "effect": [ "Reduce incoming damage by X", "V1" ] - }, - { - "target": "self", - "effect": [ "Regain X hp", "V1" ] - }] - } - ] -} diff --git a/features/aberrant_ground.json b/features/aberrant_ground.json index 4e72225..dc5f1f9 100644 --- a/features/aberrant_ground.json +++ b/features/aberrant_ground.json @@ -1,26 +1,23 @@ { "name": "aberrant ground", - "text": "The ground in a 10-foot radius around the {NAME} is doughlike difficult terrain. Each creature that starts its turn in that area must succeed on a DC {(8,PROF,STR,+,+)} Strength saving throw or have its speed reduced to 0 until the start of its next turn.", + "text": "The ground in a 10-foot radius around the {NAME} is doughlike difficult terrain. Each creature that starts its turn in that area must succeed on a DC {8,PROF,STR,+,+} Strength saving throw or have its speed reduced to 0 until the start of its next turn.", "subfeatures": [ { - "trigger": [ "N end of turn", "self" ], - "conditions": [], + "trigger": "self,turnend", "effects": [{ - "target": "self", - "effect": [ "Terrain in X ft radius is difficult", 10 ], - "duration": "Start of next turn" + "target": "terrain", + "condition": "terrain,self,distance,10,<=", + "effect": "1,terrain.TERRAIN_IS_DIFFICULT,store", + "duration": "self,turnstart" }] }, { - "trigger": [ "N start of turn", "creature" ], - "conditions": [ - [ "N is within radius X of N", "creature", 10, "self" ], - [ "N succeeds dc X ABILITY save by at least X", "creature", "(8,PROF,STR,+,+)", "STR", 0 ] - ], + "trigger": "creature,turnstart", + "condition": "creature,self,distance,10,<=,creature,strength,roll,8,PROF,STR,+,+,>=,&", "effects": [{ "target": "creature", - "effect": [ "Set movement speed to X", 0 ], - "duration": "Start of next turn" + "effect": "0,creature.MOVESPEED,store", + "duration": "creature,turnstart" }] } ] diff --git a/features/acid_spray.json b/features/acid_spray.json index a24905a..78cd8cc 100644 --- a/features/acid_spray.json +++ b/features/acid_spray.json @@ -1,15 +1,16 @@ { - "name": "acid spray (recharge 6) (action)", - "text": "The ankheg spits acid in a line that is 30 feet long and 5 feet wide, provided that it has no creature grappled. Each creature in that line 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": "acid spray", + "text": "The {NAME} spits acid in a line that is {V0} feet long and {V1} feet wide, provided that it has no creature grappled. Each creature in that line must make a DC {8,STR,PROF,+,+} Dexterity saving throw, taking {V2}d{V3} acid damage on a failed save, or half as much damage on a successful one.", "subfeatures": [ { - "trigger": [], - "conditions": [], + "trigger": "action", + "condition": "self.GRAPPLED,!", "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] + "target": "creatures", + "effect conditions": [[ "N is in AOE", "creature", "line {V0} {V1}" ]], + "effect": [ "Inflict XdX TYPE damage, dc X ABILITY save halves", "V2", "V3", "acid", "(8,STR,PROF,+,+)", "dexterity" ] + }], + "recharge": [ 1, "6-6" ] } ] } diff --git a/features/adhesive.json b/features/adhesive.json index f432534..60a772e 100644 --- a/features/adhesive.json +++ b/features/adhesive.json @@ -5,12 +5,12 @@ { "trigger": [ "N touches N", "creature", "self" ], "conditions": [ - [ "N has property PROPERTY = VALUE", "self", "Form", "Object" ], - [ "not N has property Property", "other", "Size", "Gargantuan" ] + [ "(FORM_STATE,0,>)" ], + [ "(creature.SIZE,15,<=)" ] ], "effects": [{ "target": "creature", - "effect": [ "Acquire condition CONDITION", "grappled" ] + "effect": [ "set N = N", "creature.GRAPPLED", 1 ] }] }, { diff --git a/features/air_form.json b/features/air_form.json index 6d47718..030c8ac 100644 --- a/features/air_form.json +++ b/features/air_form.json @@ -7,11 +7,11 @@ "conditions": [], "effects": [{ "target": "self", - "effect": [ "Set property PROPERTY to X", "Can stop in hostile space", "True" ] + "effect" : [ "Set N = N", "CAN_STOP_IN_HOSTILE_SPACE", 1 ] }, { "target": "self", - "effect": [ "Set property PROPERTY to X", "Minimum space to move without squeezing", "1\"" ] + "effect" : [ "Set N = N", "MIN_SPACE_WITHOUT_SQUEEZING", "1\"" ] }] } ] diff --git a/features/amorphous.json b/features/amorphous.json index 1b0392b..098bf52 100644 --- a/features/amorphous.json +++ b/features/amorphous.json @@ -7,7 +7,7 @@ "conditions": [], "effects": [{ "target": "self", - "effect": [ "Set property PROPERTY to X", "Minimum space to move without squeezing", "1\"" ] + "effect" : [ "Set N = N", "MIN_SPACE_WITHOUT_SQUEEZING", "1\"" ] }] } ] diff --git a/features/amphibious.json b/features/amphibious.json index 5aef528..0ef1b5f 100644 --- a/features/amphibious.json +++ b/features/amphibious.json @@ -7,11 +7,11 @@ "conditions": [], "effects": [{ "target": "self", - "effect": [ "Set property PROPERTY to X", "Can breathe air", "True" ] + "effect" : [ "Set N = N", "BREATHES_AIR", 1 ] }, { "target": "self", - "effect": [ "Set property PROPERTY to X", "Can breathe water", "True" ] + "effect" : [ "Set N = N", "BREATHES_WATER", 1 ] }] } ] diff --git a/features/animate_chains.json b/features/animate_chains.json deleted file mode 100644 index 1f42da1..0000000 --- a/features/animate_chains.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "animate chains (recharges after a short or long rest) (action)", - "text": "Up to four chains the devil can see within 60 feet of it magically sprout razor-­edged barbs and animate under the devil's control, provided that the chains aren't being worn or carried.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/animate_trees.json b/features/animate_trees.json deleted file mode 100644 index e69de29..0000000 diff --git a/features/antennae.json b/features/antennae.json index 12739a4..3945752 100644 --- a/features/antennae.json +++ b/features/antennae.json @@ -1,14 +1,22 @@ { - "name": "antennae (action)", - "text": "The rust monster corrodes a nonmagical ferrous metal object it can see within 5 feet of it. If the object isn't being worn or carried, the touch destroys a 1-foot cube of it. If the object is being worn or carried by a creature, the creature can make a DC 11 Dexterity saving throw to avoid the rust monster's touch.", + "name": "antennae", + "text": "The {NAME} corrodes a nonmagical ferrous metal object it can see within 5 feet of it. If the object isn't being worn or carried, the touch destroys a 1-foot cube of it. If the object is being worn or carried by a creature, the creature can make a DC {(8,PROF,STR,+,+)} Dexterity saving throw to avoid the rust monster's touch. If the object touched is either metal armor or a metal shield being worn or carried, its takes a permanent and cumulative −1 penalty to the AC it offers. Armor reduced to an AC of 10 or a shield that drops to a +0 bonus is destroyed. If the object touched is a held metal weapon, it rusts as described in the Rust Metal trait.", "subfeatures": [ { - "trigger": [], - "conditions": [], + "trigger": [ "action" ], + "conditions": [ + [ "N is within radius X of N", "object", "5'", "self" ], + [ "N is made of metal", "object" ], + [ "N is worn or carried by N", "object", "creature" ], + [ "N fails dc X ABILITY save by at least X", "creature", "(8,PROF,STR,+,+)", "dexterity", 0 ] + ], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "object", + "effect": [ "Set N = N", "object.RUST", "(object.RUST,1,+)" ] + }, { + "target": "object", + "effect conditions": [[ "(object.OBJECT_TYPE,1,==,object.RUST,5,>=,&,object.OBJECT_TYPE,2,==,object.RUST,object.OBJECT_AC,-,10,<=,&,object.OBJECT_TYPE,3,==,object.RUST,object.OBJECT_AC,-,0,<=,&,|,|)" ]], + "effect": [ "Destroyed" ] }] } ] diff --git a/features/antimagic_susceptibility.json b/features/antimagic_susceptibility.json index 7e8b0c8..73c1785 100644 --- a/features/antimagic_susceptibility.json +++ b/features/antimagic_susceptibility.json @@ -7,7 +7,7 @@ "conditions": [], "effects": [{ "target": "self", - "effect": [ "Set property PROPERTY to X", "Is incapacitated by antimagic field", "True" ] + "effect" : [ "Set N = N", "ANTIMAGIC_INCAPACITATES", 1 ] }] }, { @@ -18,7 +18,7 @@ ], "effects": [{ "target": "self", - "effect": [ "Acquire condition CONDITION", "unconscious" ], + "effect": [ "Set N = N", "UNCONSCIOUS", 1 ], "duration": "1 min" }] } diff --git a/features/attack.json b/features/attack.json deleted file mode 100644 index 49879e0..0000000 --- a/features/attack.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "attack (legendary_action)", - "text": "The tarrasque makes one claw attack or tail attack.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/attack_tarrasque.json b/features/attack_tarrasque.json new file mode 100644 index 0000000..7974904 --- /dev/null +++ b/features/attack_tarrasque.json @@ -0,0 +1,22 @@ +{ + "name": "attack", + "text": "The {NAME} makes one claw attack or tail attack.", + "subfeatures": [ + { + "trigger": [ "legendary action costing X", 1 ], + "conditions": [], + "effects": [{ + "target": "self", + "effect": [ "Take action ACTION", "claw" ] + }] + }, + { + "trigger": [ "legendary action costing X", 1 ], + "conditions": [], + "effects": [{ + "target": "self", + "effect": [ "Take action ACTION", "tail" ] + }] + } + ] +} diff --git a/features/aversion_of_fire.json b/features/aversion_of_fire.json index 2072454..d4d4c96 100644 --- a/features/aversion_of_fire.json +++ b/features/aversion_of_fire.json @@ -8,12 +8,12 @@ "effects": [{ "target": "self", "effect": [ "Impose disadvantage on TYPE", "attack rolls" ], - "duration": "End of next turn" + "duration": "End of target next turn" }, { "target": "self", "effect": [ "Impose disadvantage on TYPE", "ability checks" ], - "duration": "End of next turn" + "duration": "End of target next turn" }] } ] diff --git a/features/beast_of_burden.json b/features/beast_of_burden.json index 3e6c9b1..c3f6509 100644 --- a/features/beast_of_burden.json +++ b/features/beast_of_burden.json @@ -7,7 +7,7 @@ "conditions": [], "effects": [{ "target": "self", - "effect": [ "Set property PROPERTY to X", "Carrying capacity size is X", "Large" ] + "effect": [ "Set N = N", "CARRY_CAPACITY", "(30,STR,*)" ] }] } ] diff --git a/features/berserk.json b/features/berserk.json index c0f0c8b..0042a7b 100644 --- a/features/berserk.json +++ b/features/berserk.json @@ -4,18 +4,18 @@ "subfeatures": [ { "trigger": [ "N start of turn", "self" ], - "conditions": [ "N has COND X hp", "self", "<=", "V0" ], + "conditions": [ "(HP,V0,<=)" ], "effects": [{ "target": "self", - "effect": [ "Set property PROPERTY to X", "Is berserk", "True" ] + "effect": [ "Set N = N", "BERSERK", 1 ] }] }, { "trigger": [ "N start of turn", "self" ], - "conditions": [ "N has COND X hp", "self", "==", "MAXHP" ], + "conditions": [ "(HP,MAXHP,==)" ], "effects": [{ "target": "self", - "effect": [ "Set property PROPERTY to X", "Is berserk", "False" ] + "effect": [ "Set N = N", "BERSERK", 0 ] }] } ] diff --git a/features/blasphemous_word.json b/features/blasphemous_word.json index feca4c9..010492f 100644 --- a/features/blasphemous_word.json +++ b/features/blasphemous_word.json @@ -6,14 +6,14 @@ "trigger": [ "legendary action costing X", "V0" ], "conditions": [], "effects": [{ - "target": "creature", + "target": "creatures", "effect conditions": [ - [ "N has property PROPERTY = VALUE", "creature", "Is alive", "True" ], + [ "creature.ALIVE" ], [ "N is within radius X of N", "creature", "self", "10'" ], - [ ] + [ "N fails dc X ABILITY save by at least X", "creature", "(8,PROF,CON,+,+)", "constitution", 0 ] ], - "effect": [], - "duration": "" + "effect": [ "set N = N", "creature.STUNNED", 1 ], + "duration": "End of self next turn" }] } ] diff --git a/features/blind_senses.json b/features/blind_senses.json index eb8b5a2..ebf114a 100644 --- a/features/blind_senses.json +++ b/features/blind_senses.json @@ -1,14 +1,13 @@ { - "name": "blind senses (feature)", - "text": ". The grimlock can't use its blindsight while deafened and unable to smell.", + "name": "blind senses", + "text": "The {NAME} can't use its blindsight while deafened and unable to smell.", "subfeatures": [ { - "trigger": [], + "trigger": [ "passive" ], "conditions": [], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "self", + "effect": [ "Set N = N", "BLINDSIGHT", "(30,BLINDED,!,CAN_SMELL,&,&)" ] }] } ] diff --git a/features/blinding_breath.json b/features/blinding_breath.json index e7e6d89..dd26a79 100644 --- a/features/blinding_breath.json +++ b/features/blinding_breath.json @@ -1,19 +1,20 @@ { - "name": "blinding breath (recharge 6)", + "name": "blinding breath", "text": "The {NAME} exhales a {V0}-foot cone of blinding dust. Each creature in that area must succeed on a DC {(8,PROF,CON,+,+)} Dexterity saving throw or be blinded 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.", "subfeatures": [ { "trigger": [ "action" ], "conditions": [], "effects": [{ - "target": "creature", + "target": "creatures", "effect conditions": [ [ "N is in AOE", "creature", "cone {V0}" ], [ "N fails dc X ABILITY save by at least X", "creature", "(8,PROF,CON,+,+)", "dexterity", "0" ] ], - "effect": [ "Acquire condition CONDITION", "blinded" ], + "effect": [ "set N = N", "creature.BLINDED", 1 ], "duration": "1 min" - }] + }], + "recharge": [ 1, "6-6" ] } ] } diff --git a/features/blinding_dust.json b/features/blinding_dust.json index a8e0403..658c7f1 100644 --- a/features/blinding_dust.json +++ b/features/blinding_dust.json @@ -1,14 +1,18 @@ { "name": "blinding dust (legendary_action)", - "text": "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.", + "text": "Blinding dust and sand swirls magically around the {NAME}. Each creature within 5 feet of the {NAME} must succeed on a DC {(8,PROF,CON,+,+)} Constitution saving throw or be blinded until the end of the creature's next turn.", "subfeatures": [ { - "trigger": [], + "trigger": [ "legendary action costing X", 1 ], "conditions": [], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "creatures", + "effect conditions": [ + [ "N is within radius X of N", "creature", "5'", "self" ], + [ "N fails dc X ABILITY save by at least X", "creature", "(8,PROF,CON,+,+)", "constitution", 0 ] + ], + "effect": [ "set N = N", "creature.BLINDED", 1 ], + "duration": "End of target next turn" }] } ] diff --git a/features/blinding_gaze.json b/features/blinding_gaze.json index 77a1d37..a3b2d3b 100644 --- a/features/blinding_gaze.json +++ b/features/blinding_gaze.json @@ -1,14 +1,19 @@ { - "name": "blinding gaze (costs 3 actions) (legendary_action)", - "text": "The solar targets one creature it can see within 30 feet 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": "blinding gaze", + "text": "The {NAME} targets one creature it can see within 30 feet of it. If the target can see it, the target must succeed on a DC {(8,PROF,+)} Constitution saving throw or be blinded until magic such as the lesser restoration spell removes the blindness.", "subfeatures": [ { - "trigger": [], - "conditions": [], + "trigger": [ "legendary action costing X", 3 ], + "conditions": [ + [ "N can see N", "self", "creature" ], + [ "N is within radius X of N", "creature", "30'", "self" ], + [ "N can see N", "creature", "self" ], + [ "N fails dc X ABILITY save by at least X", "creature", "(8,PROF,+)", "constitution", 0 ] + ], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "creature", + "effect": [ "set N = N", "creature.BLINDED", 1 ], + "duration": "Until lesser restoration is cast" }] } ] diff --git a/features/blinding_spittle.json b/features/blinding_spittle.json index c282651..93b0bc9 100644 --- a/features/blinding_spittle.json +++ b/features/blinding_spittle.json @@ -1,14 +1,22 @@ { - "name": "blinding spittle (recharge 5–6) (action)", - "text": "The mouther spits a chemical glob at a point it can see within 15 feet of it. The glob explodes in a blinding flash of light on impact. Each 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": "blinding spittle", + "text": "The {NAME} spits a chemical glob at a point it can see within 15 feet of it. The glob explodes in a blinding flash of light on impact. Each creature within 5 feet of the flash must succeed on a DC {(8,PROF,CON,+,+)} Dexterity saving throw or be blinded until the end of the {NAME}'s next turn.", "subfeatures": [ { - "trigger": [], - "conditions": [], + "trigger": [ "action" ], + "conditions": [ + [ "N is within radius X of N", "point in space", "15'", "self" ], + [ "N can see N", "self", "point in space" ] + ], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "creatures", + "effect conditions": [ + [ "N is within radius X of N", "point in space", "5'", "creature" ], + [ "N fails dc X ABILITY save by at least X", "creature", "(8,PROF,CON,+,+)", "dexterity", 0 ] + ], + "effect": [ "set N = N", "creature.BLINDED", 1 ], + "duration": "End of self next turn", + "recharge": "5-6" }] } ] diff --git a/features/blood_frenzy.json b/features/blood_frenzy.json index ebea84c..b6f9f87 100644 --- a/features/blood_frenzy.json +++ b/features/blood_frenzy.json @@ -1,14 +1,16 @@ { - "name": "blood frenzy (feature)", - "text": "The sahuagin has advantage on melee attack rolls against any creature that doesn't have all its hit points.", + "name": "blood frenzy", + "text": "The {NAME} has advantage on melee attack rolls against any creature that doesn't have all its hit points.", "subfeatures": [ { - "trigger": [], - "conditions": [], + "trigger": [ "N attacks N", "self", "creature" ], + "conditions": [ + ["N made melee attack", "self" ], + [ "(creature.HP,creature.MAXHP,<)" ] + ], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "self", + "effect": [ "Grant advantage" ] }] } ] diff --git a/features/bound.json b/features/bound.json deleted file mode 100644 index 84a1dbe..0000000 --- a/features/bound.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "bound (feature)", - "text": "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 amulet's wearer can telepathically call the guardian to travel to it, and the guardian knows the distance and direction to the amulet. If the guardian is within 60 feet of the amulet's wearer, half of any damage the wearer takes (rounded up) is transferred to the guardian.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/brave.json b/features/brave.json index adf3d43..2c2584a 100644 --- a/features/brave.json +++ b/features/brave.json @@ -1,14 +1,13 @@ { - "name": "brave (feature)", - "text": "The gladiator has advantage on saving throws against being frightened.", + "name": "brave", + "text": "The {NAME} has advantage on saving throws against being frightened.", "subfeatures": [ { - "trigger": [], - "conditions": [], + "trigger": [ "N forces N to save", "any", "self" ], + "conditions": [ "N == N", "V0", "frightened" ], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "self", + "effect": [ "Grant advantage" ] }] } ] diff --git a/features/breath_attack.json b/features/breath_attack.json index 26f90a5..dfb7fa4 100644 --- a/features/breath_attack.json +++ b/features/breath_attack.json @@ -6,7 +6,7 @@ "trigger": [ "action" ], "conditions": [], "effects": [{ - "target": "creature", + "target": "creatures", "effect conditions": [[ "N is in AOE", "creature", "line {V1} {V2}" ]], "effect": [ "Inflict XdX TYPE damage, dc X ABILITY save halves", "V3", "V4", "V0", "(8,CON,PROF,+,+)", "dexterity" ] }], diff --git a/features/breath_weapons.json b/features/breath_weapons.json deleted file mode 100644 index b020604..0000000 --- a/features/breath_weapons.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "breath weapons (recharge 5–6) (action)", - "text": "The dragon uses one of the following breath weapons.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/brute.json b/features/brute.json index b1a6808..7657d39 100644 --- a/features/brute.json +++ b/features/brute.json @@ -1,14 +1,13 @@ { - "name": "brute (feature)", - "text": "A melee weapon deals one extra die of its damage when the gladiator hits with it (included in the attack).", + "name": "brute", + "text": "A melee weapon deals one extra die of its damage when the {NAME} hits with it.", "subfeatures": [ { - "trigger": [], - "conditions": [], + "trigger": [ "N hits N", "self", "any" ], + "conditions": [ "N made melee attack", "self" ], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "any", + "effect": [ "Deal +X weapon die damage", 1 ] }] } ] diff --git a/features/cantrip.json b/features/cantrip.json index 904d3f3..993f0bb 100644 --- a/features/cantrip.json +++ b/features/cantrip.json @@ -1,14 +1,13 @@ { - "name": "cantrip (legendary_action)", - "text": "The lich casts a cantrip.", + "name": "cantrip", + "text": "The {NAME} casts a cantrip.", "subfeatures": [ { - "trigger": [], + "trigger": [ "legendary action costing X", 1 ], "conditions": [], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "self", + "effect": [ "Take action ACTION", "cantrip" ] }] } ] diff --git a/features/cast_a_spell.json b/features/cast_a_spell.json index 3155c67..d154b92 100644 --- a/features/cast_a_spell.json +++ b/features/cast_a_spell.json @@ -1,14 +1,13 @@ { - "name": "cast a spell (costs 3 actions) (legendary_action)", - "text": "The sphinx casts a spell from its list of prepared spells, using a spell slot as normal.", + "name": "cast a spell", + "text": "The {NAME} casts a spell from its list of prepared spells, using a spell slot as normal.", "subfeatures": [ { - "trigger": [], + "trigger": [ "legendary action costing X", 3 ], "conditions": [], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "self", + "effect": [ "Take action ACTION", "cast spell" ] }] } ] diff --git a/features/change_shape.json b/features/change_shape.json index 77fc0fb..e7c05f5 100644 --- a/features/change_shape.json +++ b/features/change_shape.json @@ -1,14 +1,14 @@ { - "name": "change shape (action)", - "text": "The dragon magically polymorphs into a humanoid or beast that has a challenge rating no higher than its own, or back into its true form. It reverts to its true form if it dies. Any equipment it is wearing or carrying is absorbed or borne by the new form (the dragon's choice).", + "name": "change shape", + "text": "The {NAME} magically polymorphs into a humanoid or beast that has a challenge rating no higher than its own, or back into its true form. It reverts to its true form if it dies. Any equipment it is wearing or carrying is absorbed or borne by the new form (the {NAME}'s choice).", "subfeatures": [ { - "trigger": [], + "trigger": [ "action" ], "conditions": [], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "self", + "effect": [ "Polymorph N into creature <= X cr", "self", "(CR)" ], + "duration": "Until overridden or dead" }] } ] diff --git a/features/channel_negative_energy.json b/features/channel_negative_energy.json index 42e216b..311d43c 100644 --- a/features/channel_negative_energy.json +++ b/features/channel_negative_energy.json @@ -1,14 +1,15 @@ { - "name": "channel negative energy (costs 2 actions) (legendary_action)", - "text": "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.", + "name": "channel negative energy", + "text": "The {NAME} magically unleashes negative energy. Creatures within 60 feet of the {NAME}, including ones behind barriers and around corners, can't regain hit points until the end of the {NAME}'s next turn.", "subfeatures": [ { - "trigger": [], + "trigger": [ "legendary action costing X", 2 ], "conditions": [], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "creatures", + "effect conditions": [[ "N is within radius X of N", "creature", "60'", "self" ]], + "effect": [ "set N = N", "creature.REGAINS_HP", 0 ], + "duration": "End of self next turn" }] } ] diff --git a/features/charge.json b/features/charge.json index 646de65..2941fa3 100644 --- a/features/charge.json +++ b/features/charge.json @@ -1,14 +1,24 @@ { - "name": "charge (feature)", - "text": "If the unicorn moves at least 20 feet straight toward a target and then hits it with a horn 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 15 Strength saving throw or be knocked prone.", + "name": "charge", + "text": "If the {NAME} moves at least {V0} feet straight toward a target and then hits it with a {V1} attack on the same turn, the target takes an extra {V2}d{V3} {V4} damage. If the target is a creature, it must succeed on a DC {(8,PROF,STR,+,+)} Strength saving throw or be knocked prone.", "subfeatures": [ { - "trigger": [], - "conditions": [], + "trigger": [ "N hits N", "self", "any" ], + "conditions": [ + ["N moved X distance straight toward N", "self", "(V0)", "any" ], + [ "N made attack ATTACK", "(V1)" ] + ], "effects": [{ - "target": "", - "effect": [], - "duration": "" + "target": "any", + "effect": [ "Inflict XdX TYPE damage", "(V2)", "(V3)", "(V4)" ] + }, + { + "target": "any", + "effect conditions": [ + [ "N == N", "any.OBJECT_TYPE", -1 ], + [ "N fails dc X ABILITY save by at least X", "any", "(8,PROF,STR,+,+)", "strength", 0 ] + ], + "effect": [ "set N = N", "any.PRONE", 1 ] }] } ] diff --git a/features/charm.json b/features/charm.json deleted file mode 100644 index 9f6ffe0..0000000 --- a/features/charm.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "charm (action)", - "text": "The vampire targets one humanoid it can see within 30 feet of it. If the target can see the vampire, the target must succeed on a DC 17 Wisdom saving throw against this magic or be charmed by the vampire. The charmed target regards the vampire as a trusted friend to be heeded and protected. Although the target isn't under the vampire's control, it takes the vampire's requests or actions in the most favorable way it can, and it is a willing target for the vampire's bite attack.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/children_of_the_night.json b/features/children_of_the_night.json deleted file mode 100644 index e69de29..0000000 diff --git a/features/chomp.json b/features/chomp.json deleted file mode 100644 index d72b5de..0000000 --- a/features/chomp.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "chomp (costs 2 actions) (legendary_action)", - "text": "The tarrasque makes one bite attack or uses its Swallow.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/claw_attack.json b/features/claw_attack.json deleted file mode 100644 index 0d300bb..0000000 --- a/features/claw_attack.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "claw attack (legendary_action)", - "text": "The sphinx makes one claw attack.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/cold_breath.json b/features/cold_breath.json deleted file mode 100644 index ceafca7..0000000 --- a/features/cold_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "cold breath (recharge 5–6) (action)", - "text": "The dragon exhales an icy blast in a 90-foot cone. Each creature in that area must make a DC 22 Constitution saving throw, taking 72 (16d8) cold damage on a failed save, or half as much damage on a successful one.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/confer_fire_resistance.json b/features/confer_fire_resistance.json deleted file mode 100644 index 978aef2..0000000 --- a/features/confer_fire_resistance.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "confer fire resistance (feature)", - "text": "The nightmare can grant resistance to fire damage to anyone riding it.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/consume_life.json b/features/consume_life.json deleted file mode 100644 index 60ec347..0000000 --- a/features/consume_life.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "consume life (feature)", - "text": "As a bonus action, the will-o'-wisp can target one creature it can see within 5 feet of it that has 0 hit points and is still alive. The target must succeed on a DC 10 Constitution saving throw against this magic or die. If the target dies, the will-o'-wisp regains 10 (3d6) hit points.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/corrode_metal.json b/features/corrode_metal.json deleted file mode 100644 index 7d38de5..0000000 --- a/features/corrode_metal.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "corrode metal (feature)", - "text": "Any nonmagical weapon made of metal that hits the ooze corrodes. After dealing damage, the weapon takes a permanent and cumulative −1 penalty to damage rolls. If its penalty drops to −5, the weapon is destroyed. Nonmagical ammunition made of metal that hits the ooze is destroyed after dealing damage.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/corrosive_form.json b/features/corrosive_form.json deleted file mode 100644 index 902ad57..0000000 --- a/features/corrosive_form.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "corrosive form (feature)", - "text": "A creature that touches the pudding or hits it with a melee attack while within 5 feet of it takes 4 (1d8) acid damage. Any nonmagical weapon made of metal or wood that hits the pudding corrodes. After dealing damage, the weapon takes a permanent and cumulative −1 penalty to damage rolls. If its penalty drops to −5, the weapon is destroyed. Nonmagical ammunition made of metal or wood that hits the pudding is destroyed after dealing damage.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/create_specter.json b/features/create_specter.json deleted file mode 100644 index 09074d4..0000000 --- a/features/create_specter.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "create specter (action)", - "text": "The wraith targets a humanoid within 10 feet of it that has been dead for no longer than 1 minute and died violently. The target's spirit rises as a specter in the space of its corpse or in the nearest unoccupied space. The specter is under the wraith's control. The wraith can have no more than seven specters under its control at one time.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/create_whirlwind.json b/features/create_whirlwind.json deleted file mode 100644 index bf45c7f..0000000 --- a/features/create_whirlwind.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "create whirlwind (action)", - "text": "A 5-foot-radius, 30-foot-tall cylinder of swirling air magically forms on a point the djinni can see within 120 feet of it. The whirlwind lasts as long as the djinni maintains concentration (as if concentrating on a spell). Any creature but the djinni that enters the whirlwind must succeed on a DC 18 Strength saving throw or be restrained by it. The djinni can move the whirlwind up to 60 feet as an action, and creatures restrained by the whirlwind move with it. The whirlwind ends if the djinni loses sight of it.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/cunning_action.json b/features/cunning_action.json deleted file mode 100644 index 7940d67..0000000 --- a/features/cunning_action.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "cunning action (feature)", - "text": "On each of its turns, the spy can use a bonus action to take the Dash, Disengage, or Hide action.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/damage_transfer.json b/features/damage_transfer.json deleted file mode 100644 index 1290953..0000000 --- a/features/damage_transfer.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "damage transfer (feature)", - "text": "While it is grappling a creature, the rug takes only half the damage dealt to it, and the creature grappled by the rug takes the other half.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/dark_devotion.json b/features/dark_devotion.json deleted file mode 100644 index 8607755..0000000 --- a/features/dark_devotion.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "dark devotion (feature)", - "text": "The cultist has advantage on saving throws against being charmed or frightened.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/darkness_aura.json b/features/darkness_aura.json deleted file mode 100644 index e69de29..0000000 diff --git a/features/deadly_leap.json b/features/deadly_leap.json deleted file mode 100644 index a8c0a6e..0000000 --- a/features/deadly_leap.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "deadly leap (action)", - "text": "If the bulette jumps at least 15 feet as part of its movement, it can then use this action to land on its feet 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 feet 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/death_burst.json b/features/death_burst.json deleted file mode 100644 index ea6fa45..0000000 --- a/features/death_burst.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "death burst (feature)", - "text": "When the mephit dies, it explodes in a cloud of steam. Each creature within 5 feet of the mephit must succeed on a DC 10 Dexterity saving throw or take 4 (1d8) fire damage.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/death_glare.json b/features/death_glare.json deleted file mode 100644 index 707c92f..0000000 --- a/features/death_glare.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "death glare (action)", - "text": "The hag targets one frightened creature she can see within 30 feet of her. If the target can see the hag, it must succeed on a DC 11 Wisdom saving throw against this magic or drop to 0 hit points.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/death_throes.json b/features/death_throes.json deleted file mode 100644 index d85633a..0000000 --- a/features/death_throes.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "death throes (feature)", - "text": "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 damage on a failed save, or half as much damage on a successful one. The explosion ignites flammable objects in that area that aren't being worn or carried, and it destroys the balor's weapons.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/detect.json b/features/detect.json deleted file mode 100644 index 7c2d2a6..0000000 --- a/features/detect.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "detect (legendary_action)", - "text": "The dragon makes a Wisdom (Perception) check.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/devil's_sight.json b/features/devil's_sight.json deleted file mode 100644 index 26f0c34..0000000 --- a/features/devil's_sight.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "devil's sight (feature)", - "text": "Magical darkness doesn't impede the lemure's darkvision.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/disrupt_life.json b/features/disrupt_life.json deleted file mode 100644 index 7632a36..0000000 --- a/features/disrupt_life.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "disrupt life (costs 3 actions) (legendary_action)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/divine_awareness.json b/features/divine_awareness.json deleted file mode 100644 index 57d2e97..0000000 --- a/features/divine_awareness.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "divine awareness (feature)", - "text": "The planetar knows if it hears a lie.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/divine_eminence.json b/features/divine_eminence.json deleted file mode 100644 index 916ac36..0000000 --- a/features/divine_eminence.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "divine eminence (feature)", - "text": "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 damage to a target on a hit. This benefit lasts until the end of the turn. If the priest expends a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each level above 1st.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/draining_kiss.json b/features/draining_kiss.json deleted file mode 100644 index 777b82e..0000000 --- a/features/draining_kiss.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "draining kiss (action)", - "text": "The fiend kisses a creature charmed by it or a willing creature. The target must make a DC 15 Constitution saving throw against this magic, taking 32 (5d10 + 5) psychic damage on a failed save, or half as much damage on a successful one. The target's hit point maximum is reduced by an amount equal to the damage taken. This reduction lasts until the target finishes a long rest. The target dies if this effect reduces its hit point maximum to 0.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/dreadful_glare.json b/features/dreadful_glare.json deleted file mode 100644 index 63f16ad..0000000 --- a/features/dreadful_glare.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "dreadful glare (action)", - "text": "The mummy lord targets one creature it can see within 60 feet of it. If the target can see the mummy lord, it must succeed on a DC 16 Wisdom saving throw against this magic or become frightened until the end of the mummy's next turn. If the target fails the saving throw by 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/duergar_resilience.json b/features/duergar_resilience.json deleted file mode 100644 index cb0efa0..0000000 --- a/features/duergar_resilience.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "duergar resilience (feature)", - "text": "The duergar has advantage on saving throws against poison, spells, and illusions, as well as to resist being charmed or paralyzed.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/earth_glide.json b/features/earth_glide.json deleted file mode 100644 index a9601f3..0000000 --- a/features/earth_glide.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "earth glide (feature)", - "text": "The xorn can burrow through nonmagical, unworked earth and stone. While doing so, the xorn doesn't disturb the material it moves through.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/echolocation.json b/features/echolocation.json deleted file mode 100644 index 295a403..0000000 --- a/features/echolocation.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "echolocation (feature)", - "text": "The swarm can't use its blindsight while deafened.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/elemental_demise.json b/features/elemental_demise.json deleted file mode 100644 index a486cb6..0000000 --- a/features/elemental_demise.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "elemental demise (feature)", - "text": "If the djinni dies, its body disintegrates into a warm breeze, leaving behind only equipment the djinni was wearing or carrying.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/engulf.json b/features/engulf.json deleted file mode 100644 index c8a1692..0000000 --- a/features/engulf.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "engulf (action)", - "text": "The shambling mound engulfs a Medium or smaller creature grappled by it. The engulfed target is blinded, restrained, and unable to breathe, and it must succeed on a DC 14 Constitution saving throw at the start of each of the mound's turns or take 13 (2d8 + 4) bludgeoning damage. If the mound moves, the engulfed target moves with it. The mound can have only one creature engulfed at a time.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/enlarge.json b/features/enlarge.json deleted file mode 100644 index f9fbd86..0000000 --- a/features/enlarge.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "enlarge (recharges after a short or long rest) (action)", - "text": "For 1 minute, the duergar magically increases in size, along with anything it is wearing or carrying. While enlarged, the duergar is Large, doubles its damage dice on Strength-based weapon attacks (included in the attacks), and makes Strength checks and Strength saving throws with advantage. If the duergar lacks the room to become Large, it attains the maximum size possible in the space available.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/enslave.json b/features/enslave.json deleted file mode 100644 index e69de29..0000000 diff --git a/features/ephemeral.json b/features/ephemeral.json deleted file mode 100644 index 55ec3ca..0000000 --- a/features/ephemeral.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "ephemeral (feature)", - "text": "The will-o'-wisp can't wear or carry anything.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/ethereal_jaunt.json b/features/ethereal_jaunt.json deleted file mode 100644 index 51838d3..0000000 --- a/features/ethereal_jaunt.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "ethereal jaunt (feature)", - "text": "As a bonus action, the spider can magically shift from the Material Plane to the Ethereal Plane, or vice versa.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/ethereal_sight.json b/features/ethereal_sight.json deleted file mode 100644 index 8731e80..0000000 --- a/features/ethereal_sight.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "ethereal sight (feature)", - "text": "The ghost can see 60 feet into the Ethereal Plane when it is on the Material Plane, and vice versa.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/ethereal_stride.json b/features/ethereal_stride.json deleted file mode 100644 index 915aa0d..0000000 --- a/features/ethereal_stride.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "ethereal stride (action)", - "text": "The nightmare and up to three willing creatures within 5 feet of it magically enter the Ethereal Plane from the Material Plane, or vice versa.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/etherealness.json b/features/etherealness.json deleted file mode 100644 index 3b67efa..0000000 --- a/features/etherealness.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "etherealness (action)", - "text": "The fiend magically enters the Ethereal Plane from the Material Plane, or vice versa.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/evasion.json b/features/evasion.json deleted file mode 100644 index 1dfff45..0000000 --- a/features/evasion.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "evasion (feature)", - "text": "If the assassin is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the assassin instead takes no damage if it succeeds on the saving throw, and only half damage if it fails.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/false_appearance.json b/features/false_appearance.json deleted file mode 100644 index fcdd655..0000000 --- a/features/false_appearance.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "false appearance (feature)", - "text": "While the armor remains motionless, it is indistinguishable from a normal suit of armor.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/faultless_tracker.json b/features/faultless_tracker.json deleted file mode 100644 index ed235ab..0000000 --- a/features/faultless_tracker.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "faultless tracker (feature)", - "text": "The stalker is given a quarry by its summoner. The stalker knows the 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/fear_aura.json b/features/fear_aura.json deleted file mode 100644 index e6ad68f..0000000 --- a/features/fear_aura.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "fear aura (feature)", - "text": "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 the pit fiend is incapacitated. On a failed save, the creature is frightened until the start of its next turn. If a creature's saving throw is successful, the creature is immune to the pit fiend's Fear Aura for the next 24 hours.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/fetid_cloud.json b/features/fetid_cloud.json deleted file mode 100644 index e69de29..0000000 diff --git a/features/fey_ancestry.json b/features/fey_ancestry.json deleted file mode 100644 index 0680b74..0000000 --- a/features/fey_ancestry.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "fey ancestry (feature)", - "text": "The drider has advantage on saving throws against being charmed, and magic can't put the drider to sleep.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/fey_charm.json b/features/fey_charm.json deleted file mode 100644 index 39f0e5e..0000000 --- a/features/fey_charm.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "fey charm (action)", - "text": "The dryad targets one humanoid or beast that she can see within 30 feet of her. If the target can see the dryad, it must succeed on a DC 14 Wisdom saving throw or be magically charmed. The charmed creature regards the dryad as a trusted friend to be heeded and protected. Although the target isn't under the dryad's control, it takes the dryad's requests or actions in the most favorable way it can.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/fire_absorption.json b/features/fire_absorption.json deleted file mode 100644 index c2724b0..0000000 --- a/features/fire_absorption.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "fire absorption (feature)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/fire_aura.json b/features/fire_aura.json deleted file mode 100644 index 6fe6d2d..0000000 --- a/features/fire_aura.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "fire aura (feature)", - "text": "At the start of each of the balor's turns, each creature within 5 feet of it takes 10 (3d6) fire damage, and flammable objects in the aura that aren't being worn or carried ignite. A creature that touches the balor or hits it with a melee attack while within 5 feet of it takes 10 (3d6) fire damage.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/fire_breath.json b/features/fire_breath.json deleted file mode 100644 index 58646f4..0000000 --- a/features/fire_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "fire breath (recharge 5–6) (action)", - "text": "The dragon exhales fire in a 60‐foot cone. Each creature in that area must make a DC 21 Dexterity saving throw, taking 63 (18d6) fire damage on a failed save, or half as much damage on a successful one.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/fire_form.json b/features/fire_form.json deleted file mode 100644 index cef7dba..0000000 --- a/features/fire_form.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "fire form (feature)", - "text": "The elemental can move through a space as narrow as 1 inch wide without squeezing. A creature that touches the elemental or hits it with a melee attack while within 5 feet of it takes 5 (1d10) fire damage. In addition, the elemental can enter a hostile creature's space and stop there. The first time it enters a creature's space on a turn, that creature takes 5 (1d10) fire damage and catches fire; until someone takes an action to douse the fire, the creature takes 5 (1d10) fire damage at the start of each of its turns.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/first_roar.json b/features/first_roar.json deleted file mode 100644 index 9966c2a..0000000 --- a/features/first_roar.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "first roar (action)", - "text": "Each creature that fails a DC 18 Wisdom saving throw is frightened for 1 minute. A frightened creature can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/fling.json b/features/fling.json deleted file mode 100644 index 56c3b0a..0000000 --- a/features/fling.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "fling (action)", - "text": "One Large or smaller object held or creature grappled by the kraken is thrown up to 60 feet in a random direction and knocked prone. If a thrown target strikes a solid surface, the target takes 3 (1d6) bludgeoning damage for every 10 feet it was thrown. If the target is thrown at another creature, that creature must succeed on a DC 18 Dexterity saving throw or take the same damage and be knocked prone.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/flyby.json b/features/flyby.json deleted file mode 100644 index 1ca973a..0000000 --- a/features/flyby.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "flyby (feature)", - "text": "The owl doesn't provoke opportunity attacks when it flies out of an enemy's reach.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/flying_sword.json b/features/flying_sword.json deleted file mode 100644 index 05656a5..0000000 --- a/features/flying_sword.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "flying sword (action)", - "text": "The solar releases its greatsword to hover magically in an unoccupied space within 5 feet of it. If the solar can see the sword, the solar can mentally command it as a bonus action to fly up to 50 feet and either make one attack against a target or return to the solar's hands. If the hovering sword is targeted by any effect, the solar is considered to be holding it. The hovering sword falls if the solar dies.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/freedom_of_movement.json b/features/freedom_of_movement.json deleted file mode 100644 index daeeef4..0000000 --- a/features/freedom_of_movement.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "freedom of movement (feature)", - "text": "The kraken ignores difficult terrain, and magical effects can't reduce its speed or cause it to be restrained. It can spend 5 feet of movement to escape from nonmagical restraints or being grappled.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/freeze.json b/features/freeze.json deleted file mode 100644 index 1f91eac..0000000 --- a/features/freeze.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "freeze (feature)", - "text": "If the elemental takes cold damage, it partially freezes; its speed is reduced by 20 feet until the end of its next turn.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/frightening_gaze.json b/features/frightening_gaze.json deleted file mode 100644 index 5cc19b6..0000000 --- a/features/frightening_gaze.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "frightening gaze (costs 2 actions) (legendary_action)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/frightful_presence.json b/features/frightful_presence.json deleted file mode 100644 index 64e63c3..0000000 --- a/features/frightful_presence.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "frightful presence (action)", - "text": "Each creature of the dragon's choice that is within 120 feet of the dragon and aware of it must succeed on a DC 16 Wisdom saving throw or become frightened 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. If a creature's saving throw is successful or the effect ends for it, the creature is immune to the dragon's Frightful Presence for the next 24 hours.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/frost_breath.json b/features/frost_breath.json deleted file mode 100644 index 55d64ce..0000000 --- a/features/frost_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "frost breath (recharge 6) (action)", - "text": "The mephit exhales a 15- foot cone of cold air. Each creature in that area must succeed on a DC 10 Dexterity saving throw, taking 5 (2d4) cold damage on a failed save, or half as much damage on a successful one.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/gibbering.json b/features/gibbering.json deleted file mode 100644 index 28d5896..0000000 --- a/features/gibbering.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "gibbering (feature)", - "text": "The mouther babbles incoherently while it can see any creature and isn't incapacitated. Each creature that starts its turn within 20 feet of the mouther and can hear the gibbering must succeed on a DC 10 Wisdom saving throw. On a failure, the creature can't take reactions until the start of its next turn and rolls a d8 to determine what it does during its turn. On a 1 to 4, the creature does nothing. On a 5 or 6, the creature takes no action or bonus action and uses all its 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/gnome_cunning.json b/features/gnome_cunning.json deleted file mode 100644 index 37e6907..0000000 --- a/features/gnome_cunning.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "gnome cunning (feature)", - "text": "The gnome has advantage on Intelligence, Wisdom, and Charisma saving throws against magic.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/grappler.json b/features/grappler.json deleted file mode 100644 index 0d23a01..0000000 --- a/features/grappler.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "grappler (feature)", - "text": "The mimic has advantage on attack rolls against any creature grappled by it.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/grasping_tendrils.json b/features/grasping_tendrils.json deleted file mode 100644 index d0efc05..0000000 --- a/features/grasping_tendrils.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "grasping tendrils (feature)", - "text": "The roper can have up to six tendrils at a time. Each tendril can be attacked (AC 20; 10 hit points; immunity to poison and psychic damage). Destroying a tendril deals no damage to the roper, which can extrude a replacement tendril on its next turn. A tendril can also be broken if a creature takes an action and succeeds on a DC 15 Strength check against it.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/haste.json b/features/haste.json deleted file mode 100644 index fe98a49..0000000 --- a/features/haste.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "haste (recharge 5–6) (action)", - "text": "Until the end of its next turn, the golem magically gains a +2 bonus to its AC, has advantage on Dexterity saving throws, and can use its slam attack as a bonus action.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/heal_self.json b/features/heal_self.json deleted file mode 100644 index 398026c..0000000 --- a/features/heal_self.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "heal self (costs 3 actions) (legendary_action)", - "text": "The unicorn magically regains 11 (2d8 + 2) hit points.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/healing_touch.json b/features/healing_touch.json deleted file mode 100644 index e69de29..0000000 diff --git a/features/heart_sight.json b/features/heart_sight.json deleted file mode 100644 index d8d82bd..0000000 --- a/features/heart_sight.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "heart sight (action)", - "text": "The sprite touches a creature and magically knows the creature's current emotional state. If the target fails a DC 10 Charisma saving throw, the sprite also knows the creature's alignment. Celestials, fiends, and undead automatically fail the saving throw.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/heated_body.json b/features/heated_body.json deleted file mode 100644 index 0076162..0000000 --- a/features/heated_body.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "heated body (feature)", - "text": "A creature that touches the azer or hits it with a melee attack while within 5 feet of it takes 5 (1d10) fire damage.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/heated_weapons.json b/features/heated_weapons.json deleted file mode 100644 index 32d67fd..0000000 --- a/features/heated_weapons.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "heated weapons (feature)", - "text": "When the azer hits with a metal melee weapon, it deals an extra 3 (1d6) fire damage (included in the attack).", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/hellish_rejuvenation.json b/features/hellish_rejuvenation.json deleted file mode 100644 index badf56e..0000000 --- a/features/hellish_rejuvenation.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "hellish rejuvenation (feature)", - "text": "A lemure that dies in the Nine Hells comes back to life with all its 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/hellish_weapons.json b/features/hellish_weapons.json deleted file mode 100644 index fcd37f7..0000000 --- a/features/hellish_weapons.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "hellish weapons (feature)", - "text": "The erinyes's weapon attacks are magical and deal an extra 13 (3d8) poison damage on a hit (included in the attacks).", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/hold_breath.json b/features/hold_breath.json deleted file mode 100644 index b57b9b8..0000000 --- a/features/hold_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "hold breath (feature)", - "text": "The plesiosaurus can hold its breath for 1 hour.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/hooves.json b/features/hooves.json deleted file mode 100644 index 4e95f5f..0000000 --- a/features/hooves.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "hooves (legendary_action)", - "text": "The unicorn makes one attack with its hooves.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/horrific_appearance.json b/features/horrific_appearance.json deleted file mode 100644 index ba3d57e..0000000 --- a/features/horrific_appearance.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "horrific appearance (feature)", - "text": "Any humanoid that starts its turn within 30 feet of the hag and can see the hag's true form must make a DC 11 Wisdom saving throw. On a failed save, the creature is frightened for 1 minute. A creature can repeat the saving throw at the end of each of its turns, with disadvantage if the hag is within line of sight, ending the effect on itself on a success. If a creature's saving throw is successful or the effect ends for it, the creature is immune to the hag's Horrific Appearance for the next 24 hours.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/horrifying_visage.json b/features/horrifying_visage.json deleted file mode 100644 index 9a7b8a0..0000000 --- a/features/horrifying_visage.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "horrifying visage (action)", - "text": "Each non-undead creature within 60 feet of the ghost that can see it must succeed on a DC 13 Wisdom saving throw or be frightened for 1 minute. If the save fails by 5 or more, the target also ages 1d4 × 10 years. A frightened target can repeat the saving throw at the end of each of its turns, ending the frightened condition on itself on a success. If a target's saving throw is successful or the effect ends for it, the target is immune to this ghost's Horrifying Visage for the next 24 hours. The aging effect can be reversed with a greater restoration spell, but only within 24 hours of it occurring.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/horror_nimbus.json b/features/horror_nimbus.json deleted file mode 100644 index c0dcb62..0000000 --- a/features/horror_nimbus.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "horror nimbus (recharge 5–6) (action)", - "text": "The nalfeshnee magically emits scintillating, multicolored light. Each creature within 15 feet of the nalfeshnee that can see the light must succeed on a DC 15 Wisdom saving throw or be frightened 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. If a creature's saving throw is successful or the effect ends for it, the creature is immune to the nalfeshnee's Horror Nimbus for the next 24 hours.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/hurl_flame.json b/features/hurl_flame.json deleted file mode 100644 index e69de29..0000000 diff --git a/features/ice_walk.json b/features/ice_walk.json deleted file mode 100644 index b3f033b..0000000 --- a/features/ice_walk.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "ice walk (feature)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/ignited_illumination.json b/features/ignited_illumination.json deleted file mode 100644 index ab78e2d..0000000 --- a/features/ignited_illumination.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "ignited illumination (feature)", - "text": "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 feet.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/illumination.json b/features/illumination.json deleted file mode 100644 index 46aa99a..0000000 --- a/features/illumination.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "illumination (feature)", - "text": "The azer sheds bright light in a 10-­foot radius and dim light for an additional 10 feet.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/illusory_appearance.json b/features/illusory_appearance.json deleted file mode 100644 index fd6f73d..0000000 --- a/features/illusory_appearance.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "illusory appearance (action)", - "text": "The hag covers herself and anything she is wearing or carrying with a magical illusion that makes her look like an ugly creature of her general size and humanoid shape. The effect ends if the hag takes a bonus action to end it or if she dies.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/immutable_form.json b/features/immutable_form.json deleted file mode 100644 index fe48fd3..0000000 --- a/features/immutable_form.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "immutable form (feature)", - "text": "The golem is immune to any spell or effect that would alter its form.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/incorporeal_movement.json b/features/incorporeal_movement.json deleted file mode 100644 index 6cdc08a..0000000 --- a/features/incorporeal_movement.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "incorporeal movement (feature)", - "text": "The will-o'-wisp 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/ink_cloud.json b/features/ink_cloud.json deleted file mode 100644 index ce92045..0000000 --- a/features/ink_cloud.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "ink cloud (recharges after a short or long rest) (action)", - "text": "A 5-foot-radius cloud of ink extends all around the octopus if it is underwater. The area is heavily obscured for 1 minute, although a significant current can disperse the ink. After releasing the ink, the octopus can use the Dash action as a bonus action.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/inscrutable.json b/features/inscrutable.json deleted file mode 100644 index 56a9409..0000000 --- a/features/inscrutable.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "inscrutable (feature)", - "text": "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. Wisdom (Insight) checks made to ascertain the sphinx's intentions or sincerity have disadvantage.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/intoxicating_touch.json b/features/intoxicating_touch.json deleted file mode 100644 index 8ac0e4e..0000000 --- a/features/intoxicating_touch.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "intoxicating touch (spell attack)", - "text": "+5 to hit, reach 5 ft. Hit: The target is magically cursed for 1 hour. Until the curse ends, the target has disadvantage on Wisdom saving throws and all ability checks.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/invisibility.json b/features/invisibility.json deleted file mode 100644 index d670d9a..0000000 --- a/features/invisibility.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "invisibility (action)", - "text": "The will-o'-wisp and its light magically become invisible until it attacks or uses its Consume Life, or until its concentration ends (as if concentrating on a spell).", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/invisible_passage.json b/features/invisible_passage.json deleted file mode 100644 index 4924f35..0000000 --- a/features/invisible_passage.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "invisible passage (action)", - "text": "The hag magically turns invisible until she attacks or casts a spell, or until her concentration ends (as if concentrating on a spell). While invisible, she leaves no physical evidence of her passage, so she can be tracked only by magic. Any equipment she wears or carries is invisible with her.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/iron_scent.json b/features/iron_scent.json deleted file mode 100644 index 2767bb8..0000000 --- a/features/iron_scent.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "iron scent (feature)", - "text": "The rust monster can pinpoint, by scent, the location of ferrous metal within 30 feet of it.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/keen_hearing.json b/features/keen_hearing.json deleted file mode 100644 index 0f386ad..0000000 --- a/features/keen_hearing.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "keen hearing (feature)", - "text": "The swarm has advantage on Wisdom (Perception) checks that rely on hearing.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/keen_hearing_and_sight.json b/features/keen_hearing_and_sight.json deleted file mode 100644 index 84a511e..0000000 --- a/features/keen_hearing_and_sight.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "keen hearing and sight (feature)", - "text": "The scout has advantage on Wisdom (Perception) checks that rely on hearing or sight.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/keen_hearing_and_smell.json b/features/keen_hearing_and_smell.json deleted file mode 100644 index e3bf77a..0000000 --- a/features/keen_hearing_and_smell.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "keen hearing and smell (feature)", - "text": "The weasel has advantage on Wisdom (Perception) checks that rely on hearing or smell.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/keen_sight.json b/features/keen_sight.json deleted file mode 100644 index bcf1aa6..0000000 --- a/features/keen_sight.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "keen sight (feature)", - "text": "The roc has advantage on Wisdom (Perception) checks that rely on sight.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/keen_sight_and_smell.json b/features/keen_sight_and_smell.json deleted file mode 100644 index 53ec530..0000000 --- a/features/keen_sight_and_smell.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "keen sight and smell (feature)", - "text": "The vulture has advantage on Wisdom (Perception) checks that rely on sight or smell.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/keen_smell.json b/features/keen_smell.json deleted file mode 100644 index 8504b20..0000000 --- a/features/keen_smell.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "keen smell (feature)", - "text": "The werebear has advantage on Wisdom (Perception) checks that rely on smell.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/labyrinthine_recall.json b/features/labyrinthine_recall.json deleted file mode 100644 index 90d789e..0000000 --- a/features/labyrinthine_recall.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "labyrinthine recall (feature)", - "text": "The minotaur can perfectly recall any path it has traveled.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/leadership.json b/features/leadership.json deleted file mode 100644 index 39aa51a..0000000 --- a/features/leadership.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "leadership (recharges after a short or long rest) (action)", - "text": "For 1 minute, the knight can utter a special command or warning whenever a nonhostile creature that it can see within 30 feet of it makes an attack roll or a saving throw. The creature can add a d4 to 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/legendary_attack.json b/features/legendary_attack.json deleted file mode 100644 index 2b17f1c..0000000 --- a/features/legendary_attack.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "{V0}", - "text": "The {NAME} makes one {V0} attack.", - "subfeatures": [ - { - "trigger": [ "legendary action costing X", "V1" ], - "conditions": [], - "effects": [{ - "target": "self", - "effect": [ "Take action ACTION", "V0" ] - }] - } - ] -} diff --git a/features/legendary_resistance.json b/features/legendary_resistance.json deleted file mode 100644 index e69de29..0000000 diff --git a/features/life_drain.json b/features/life_drain.json deleted file mode 100644 index 4f5743f..0000000 --- a/features/life_drain.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "life drain (spell attack)", - "text": "+4 to hit, reach 5 ft. Hit: 3d6 necrotic damage. The target must succeed on a DC 10 Constitution saving throw or its hit point maximum is reduced by an amount equal to the damage taken. This reduction lasts until the creature finishes a long rest. The target dies if this effect reduces its hit point maximum to 0.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/light_sensitivity.json b/features/light_sensitivity.json deleted file mode 100644 index 387e288..0000000 --- a/features/light_sensitivity.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "light sensitivity (feature)", - "text": "While in bright light, the cloaker has disadvantage on attack rolls and Wisdom (Perception) checks that rely on sight.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/lightning_absorption.json b/features/lightning_absorption.json deleted file mode 100644 index a901c31..0000000 --- a/features/lightning_absorption.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "lightning absorption (feature)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/lightning_breath.json b/features/lightning_breath.json deleted file mode 100644 index 4329863..0000000 --- a/features/lightning_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "lightning breath (action)", - "text": "The dragon exhales lightning in a 90- foot line that is 5 feet wide. 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/lightning_storm.json b/features/lightning_storm.json deleted file mode 100644 index f92e486..0000000 --- a/features/lightning_storm.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "lightning storm (action)", - "text": "The kraken magically creates three bolts of lightning, each of which 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/lightning_strike.json b/features/lightning_strike.json deleted file mode 100644 index 920f0c8..0000000 --- a/features/lightning_strike.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "lightning strike (recharge 5–6) (action)", - "text": "The giant hurls a magical lightning bolt at a point it can see within 500 feet of it. Each creature within 10 feet of that point must make a DC 17 Dexterity saving throw, taking 54 (12d8) lightning damage on a failed save, or half as much damage on a successful one.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/limited_amphibiousess.json b/features/limited_amphibiousess.json deleted file mode 100644 index 483c17e..0000000 --- a/features/limited_amphibiousess.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "limited amphibiousess (feature)", - "text": "The sahuagin can breathe air and water, but it needs to be submerged at least once every 4 hours to avoid suffocating.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/limited_magic_immunity.json b/features/limited_magic_immunity.json deleted file mode 100644 index 45eac17..0000000 --- a/features/limited_magic_immunity.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "limited magic immunity (feature)", - "text": "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 against all other spells and magical effects.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/limited_telepathy.json b/features/limited_telepathy.json deleted file mode 100644 index 3ed0c1f..0000000 --- a/features/limited_telepathy.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "limited telepathy (feature)", - "text": "The otyugh can magically transmit simple messages and images to any creature within 120 feet of it that can understand a language. This form of telepathy doesn't allow the receiving creature to telepathically respond.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/luring_song.json b/features/luring_song.json deleted file mode 100644 index b7c0206..0000000 --- a/features/luring_song.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "luring song (action)", - "text": "The harpy sings a magical melody. Every humanoid and giant within 300 feet of the harpy that can hear the song must succeed on a DC 11 Wisdom saving throw or be charmed until the song ends. The harpy must take a bonus action on its subsequent turns to continue singing. It can stop singing at any time. The song ends if the harpy is incapacitated.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/magic_resistance.json b/features/magic_resistance.json deleted file mode 100644 index 2717e38..0000000 --- a/features/magic_resistance.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "magic resistance (feature)", - "text": "The archmage has advantage on saving throws against spells and other magical effects.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/magic_weapons.json b/features/magic_weapons.json deleted file mode 100644 index b71c784..0000000 --- a/features/magic_weapons.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "magic weapons (feature)", - "text": "The sphinx's weapon attacks are magical.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/martial_advantage.json b/features/martial_advantage.json deleted file mode 100644 index 6677521..0000000 --- a/features/martial_advantage.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "martial advantage (feature)", - "text": "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 feet of an ally of the hobgoblin that isn't incapacitated.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/mimicry.json b/features/mimicry.json deleted file mode 100644 index 84fab6e..0000000 --- a/features/mimicry.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "mimicry (feature)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/misty_escape.json b/features/misty_escape.json deleted file mode 100644 index 0433d1e..0000000 --- a/features/misty_escape.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "misty escape (feature)", - "text": "When it drops to 0 hit points outside its resting place, the vampire transforms into a cloud of mist (as in the Shapechanger trait) instead of falling unconscious, provided that it isn't in sunlight or running water. If it can't transform, it is destroyed.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/moan.json b/features/moan.json deleted file mode 100644 index d78a097..0000000 --- a/features/moan.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "moan (action)", - "text": "Each creature within 60 feet of the cloaker that can hear its moan and that isn't an aberration must succeed on a DC 13 Wisdom saving throw or become frightened until the end of the cloaker's next turn. If a creature's saving throw is successful, the creature is immune to the cloaker's moan for the next 24 hours.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/move.json b/features/move.json deleted file mode 100644 index bd45f58..0000000 --- a/features/move.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "move (legendary_action)", - "text": "The vampire moves up to its speed without provoking opportunity attacks.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/mucous_cloud.json b/features/mucous_cloud.json deleted file mode 100644 index 069425a..0000000 --- a/features/mucous_cloud.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "mucous cloud (feature)", - "text": "While underwater, the aboleth is surrounded by transformative mucus. A creature that touches the aboleth or that hits it with a melee attack while within 5 feet of it must make a DC 14 Constitution saving throw. On a failure, the creature is diseased for 1d4 hours. The diseased creature can breathe only underwater.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/multiattack..json b/features/multiattack..json deleted file mode 100644 index 8e9b93f..0000000 --- a/features/multiattack..json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "multiattack. (vampire form only) (action)", - "text": "The vampire makes two attacks, only one of which can be a bite attack.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/multiattack.json b/features/multiattack.json deleted file mode 100644 index 0c17ce9..0000000 --- a/features/multiattack.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "multiattack (action)", - "text": "The assassin makes two shortsword attacks.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/multiple_heads.json b/features/multiple_heads.json deleted file mode 100644 index ddf4173..0000000 --- a/features/multiple_heads.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "multiple heads (feature)", - "text": "The hydra has five heads. While it has more than one head, the hydra has advantage on saving throws against being blinded, charmed, deafened, frightened, stunned, and knocked unconscious.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/nightmare_haunting.json b/features/nightmare_haunting.json deleted file mode 100644 index e69de29..0000000 diff --git a/features/nimble_escape.json b/features/nimble_escape.json deleted file mode 100644 index 69218e2..0000000 --- a/features/nimble_escape.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "nimble escape (feature)", - "text": "The goblin can take the Disengage or Hide action as a bonus action on each of its turns.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/ooze_cube.json b/features/ooze_cube.json deleted file mode 100644 index fee2d89..0000000 --- a/features/ooze_cube.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "ooze cube (feature)", - "text": "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 and has disadvantage on the saving throw.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/pack_tactics.json b/features/pack_tactics.json deleted file mode 100644 index 0d35128..0000000 --- a/features/pack_tactics.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "pack tactics (feature)", - "text": "The warrior has advantage on an attack roll against a creature if at least one of the warrior's allies is within 5 feet of the creature and the ally isn't incapacitated.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/paralyzing_breath.json b/features/paralyzing_breath.json deleted file mode 100644 index d0e5328..0000000 --- a/features/paralyzing_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "paralyzing breath (action)", - "text": "The dragon exhales paralyzing gas in a 60-foot cone. Each creature in that area must succeed on a DC 20 Constitution 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/paralyzing_touch.json b/features/paralyzing_touch.json deleted file mode 100644 index cd7004b..0000000 --- a/features/paralyzing_touch.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "paralyzing touch (spell attack)", - "text": "+12 to hit, reach 5 ft. Hit: 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/parry.json b/features/parry.json deleted file mode 100644 index 382b4bb..0000000 --- a/features/parry.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "parry (reaction)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/petrifying_breath.json b/features/petrifying_breath.json deleted file mode 100644 index 3a9f636..0000000 --- a/features/petrifying_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "petrifying breath (recharge 5–6) (action)", - "text": "The gorgon exhales petrifying gas in a 30-foot cone. Each creature in that area must succeed on a DC 13 Constitution saving throw. On a failed save, a target begins to turn to stone and is restrained. The restrained target must repeat the saving throw at the end of its next turn. On a success, the effect ends on the target. On a failure, the target is petrified until freed by the greater restoration spell or other magic.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/petrifying_gaze.json b/features/petrifying_gaze.json deleted file mode 100644 index 7c15a88..0000000 --- a/features/petrifying_gaze.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "petrifying gaze (feature)", - "text": "When a creature that can see the medusa's eyes starts its turn within 30 feet of the medusa, the medusa can force it to make a DC 14 Constitution saving throw if the medusa isn't incapacitated and can see the creature. If the saving throw fails by 5 or more, the creature is instantly petrified. Otherwise, a creature that fails the save begins to turn to stone and is restrained. The restrained creature must repeat the saving throw at the end of its next turn, becoming petrified on a failure or ending the effect on a success. The petrification lasts until the creature is freed by the greater restoration spell or other magic.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/phantasms.json b/features/phantasms.json deleted file mode 100644 index c5ed88e..0000000 --- a/features/phantasms.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "phantasms (recharges after a short or long rest) (action)", - "text": "The cloaker magically creates three illusory duplicates of itself if it isn't in bright light. The duplicates move with it and mimic its actions, shifting position so as to make it impossible to track which cloaker is the real one. If the cloaker is ever in an area of bright light, the duplicates disappear.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/poison_breath.json b/features/poison_breath.json deleted file mode 100644 index fcb96f5..0000000 --- a/features/poison_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "poison breath (recharge 5–6) (action)", - "text": "The dragon exhales poisonous gas in a 60‐foot cone. Each creature in 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/possession.json b/features/possession.json deleted file mode 100644 index c644567..0000000 --- a/features/possession.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "possession (recharge 6) (action)", - "text": "One humanoid that the ghost can see within 5 feet of it must succeed on a DC 13 Charisma saving throw or be possessed by the ghost; the ghost then disappears, and the target is incapacitated and loses control of its body. The ghost now controls the body but doesn't deprive the target of awareness. The ghost can't be targeted by any attack, spell, or other effect, except ones that turn undead, and it retains its alignment, Intelligence, Wisdom, Charisma, and immunity to being charmed and frightened. It otherwise uses the possessed target's statistics, but doesn't gain access to the target's knowledge, class features, or proficiencies.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/pounce.json b/features/pounce.json deleted file mode 100644 index cbc492b..0000000 --- a/features/pounce.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "pounce (feature)", - "text": "If the tiger moves at least 20 feet straight toward a creature and then hits it with a claw 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 tiger can make one bite attack against it as a bonus action.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/probing_telepathy.json b/features/probing_telepathy.json deleted file mode 100644 index fc55177..0000000 --- a/features/probing_telepathy.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "probing telepathy (feature)", - "text": "If a creature communicates telepathically with the aboleth, the aboleth learns the creature's greatest desires if the aboleth can see the creature.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/psychic_drain.json b/features/psychic_drain.json deleted file mode 100644 index ed2750b..0000000 --- a/features/psychic_drain.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "psychic drain (legendary_action)", - "text": "(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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/rampage.json b/features/rampage.json deleted file mode 100644 index 9f340ba..0000000 --- a/features/rampage.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "rampage (feature)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/reactive.json b/features/reactive.json deleted file mode 100644 index 14f8ae1..0000000 --- a/features/reactive.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "reactive (feature)", - "text": "The marilith can take one reaction on every turn in a combat.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/reactive_heads.json b/features/reactive_heads.json deleted file mode 100644 index 8cf453e..0000000 --- a/features/reactive_heads.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "reactive heads (feature)", - "text": "For each head the hydra has beyond one, it gets an extra reaction that can be used only for opportunity attacks.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/read_thoughts.json b/features/read_thoughts.json deleted file mode 100644 index 56bcf34..0000000 --- a/features/read_thoughts.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "read thoughts (action)", - "text": "The doppelganger magically reads the surface thoughts of one creature within 60 feet of it. The effect can penetrate barriers, but 3 feet of wood or dirt, 2 feet of stone, 2 inches of metal, or a thin sheet of lead blocks it. While the target is in range, the doppelganger can continue reading its thoughts, as long as the doppelganger's concentration isn't broken (as if concentrating on a spell). While reading the target's mind, the doppelganger has advantage on Wisdom (Insight) and Charisma (Deception, Intimidation, and Persuasion) checks against the target.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/readme.md b/features/readme.md index fda276b..73fbdec 100644 --- a/features/readme.md +++ b/features/readme.md @@ -10,6 +10,22 @@ The overall structure of a feature is a dictionary as follows: In addition to the hardcoded data provided in the feature, certain variables may be given at runtime. +## NOUNS + +Nouns embedded into subfeature elements may be any of: + + * "self" + * "creature" + * "creatures" (i.e., all creatures for whom "effect conditions" are true) + * "object" + * "structure" + * "point in space" + * "any" + * "terrain" + * NAME + +Where NAME is interpreted by the game as a specific creature or object with a matching name. + ## Variables Many features are very similar between creatures except for certain variables. When instantiated programatically, the feature is given the following: @@ -19,7 +35,7 @@ Many features are very similar between creatures except for certain variables. W Certain portions of features accept these as parameters, either inline as in TEXT, or in the place of hardcoded variables for conditions or effects. -In addition to these, certain attributes of the creature having this feature may be probed such as: +In addition to these, certain attributes of the creature having this feature may be probed (as they are intrinsic, modifications are reverted at the end of a duration) such as: * STR * DEX * CON @@ -28,12 +44,127 @@ In addition to these, certain attributes of the creature having this feature may * CHA * PROF * MAXHP + * HP * MOVESPEED + * MOVEREMAIN * SPELLDC + * SIZE (stored as a scalar, e.g., 5 for Medium or 2.5 for Tiny) + * OBJECT\_TYPE (-1: creature, 0: misc item, 1: weapon, 2: armor, 3: shield) + * OBJECT\_AC + * CR + * PLANE = 0 (each value is a different plane) + * DAMAGE (Returns a damage object regarding the most recent time this was hit): + * AMOUNT + * CRITICAL + * TYPE + * ATTACK (Returns an attack object regarding the most recent attack this made): + * MELEE + * ADVANTAGE + * DISADVANTAGE + * WEAPON (0 is none, else weapon ID) + * TURNS (number of completed turns since rolling initiative) + * FLYING + * TERRAIN (current terain) + * LIGHTING (i.e., sunlight, dim light, darkness, magical darkness) + * LANGUAGECOUNT + * SURPRISED + * METAL (i.e., made of metal) + * TERRAIN\_IS\_DIFFICULT (only applies to terrain) + +Furthermore, this list is expanded with the following properties and conditions (default values provided) (note: for conditions other than EXHAUSTED, e.g., GRAPPLED, the value is the ID of the source of the condition): + * BLINDED = 0 + * CHARMED = 0 + * DEAFENED = 0 + * FRIGHTENED = 0 + * GRAPPLED = 0 + * INCAPACITATED = 0 + * INVISIBLE = 0 + * PARALYZED = 0 + * PETRIFIED = 0 + * POISONED = 0 + * PRONE = 0 + * RESTRAINED = 0 + * STUNNED = 0 + * UNCONSCIOUS = 0 + * EXHAUSTED = 0 (ranges up to 6) + * REGAINS\_HP = 1 + * CAN\_STOP\_IN\_HOSTILE\_SPACE = 0 + * MIN\_SPACE\_WITHOUT\_SQUEEZING = SIZE + * BREATHES\_AIR = 1 + * BREATHES\_WATER = 0 + * BREATH\_HOLD\_MINUTES = (1,CON,+,.5,max) + * CARRY\_CAPACITY = (2,SIZE,2.5,-,SIZE,0,ifelse,5,-,5,/,^,15,\*,STR,\*) + * BERSERK = 0 + * TELEPATHIC = 0 (0 = no, 1 = yes, .5 = one-way) + * DASH = 0 (0 = action, 1 = bns action) + * DISENGAGE = 0 + * HIDE = 0 + * SEES\_MAGICAL\_DARKNESS = 0 + * SEES\_ETHEREAL = 0 + * DETECTS\_LIES = 0 + * LEAVES\_CORPSE = 1 + * HOLDS\_INVENTORY = 1 + * PROVOKES\_OPPORTUNITY\_ATTACKS = 1 + * IGNORES\_DIFFICULT\_TERRAIN = 0 + * PASSES\_THROUGH\_CREATURES\_AS\_DIFFICULT\_TERRAIN = 0 + * IGNORES\_WEBS = 0 + * REACTIONS = 1 + * BRIGHT\_LIGHT = 0 + * DIM\_LIGHT = 0 + * PERFECT\_MAP\_RECALL = 0 + * MIMIC\_SOUNDS\_VOICES\_INSIGHT\_DC = (PERFORMANCE,DECEPTION,max) + * SPEAKS\_WITH\_BEASTS = 0 + * SPEAKS\_WITH\_PLANTS = 0 + * SPIDER\_CLIMB = 0 + * BOILS\_WATER = 0 + * FORM\_STATE = 0 (0 is true form, others are defined in features) + * MUNDANE\_OBJECT\_WHEN\_STILL = 0 + * CAN\_SMELL = 1 + * ALIGNMENT = 11 (00: LG, 11: NN, 22: CE, etc.) + * ANTIMAGIC\_INCAPACITATES = 0 + * ALIVE = 1 + * BLINDSIGHT = 0 + * RUST = 0 + * EXPOSED = 0 (underside is exposed) + * HEADS = 1 + * SPELLSLOTS = 0 (num remaining) + * NV1, NV2, ... (variables saved to N private only to this feature, all initially 0) The above attributes by default apply to self (i.e., self.STR), however, they may also be used for another creature (i.e., creature.STR). -Finally, simple math can be provided in postfix notation surounded by parentheses. For example, to set a save DC equal to 8+int+prof: (8,INT,PROF,+,+). +Simple math can be provided in postfix notation surounded by parentheses. For example, to set a save DC equal to 8+int+prof: (8,INT,PROF,+,+), or to set breath time to max(.5, 1+CON): (1,CON,+,.5,max). Additionally, boolean expressions may be imbedded, using "|" for "or", "&" for "and", "!" for not (which only consumes one operand), comparitors (i.e., "<", ">", "<=", ">=", "=="), and an "ifelse" expresion, with 0 being false and any else being true. The following rules are respected; note order matters: + + * (X,Y,&) -> 0 if Y == 0, else X + * (X,Y,|) -> Y if X == 0, else X + * (X,!) -> 1 if X == 0, else 0 + * (X,Y,<) -> 1 if X < Y, else 0 + * (X,Y,Z,ifelse) -> if X != 0 then Y, else Z + * (X,consume) -> removes X from the stack + * (X,duplicate) -> X, X + * (X,Y,store) -> X, and stores X to variable Y + +More complex conditions are below, potentially resulting in complex "types": + + * bool: 0 is false, 1 is true + * creature: stored as creature ID + * TYPE: various constants for skills, abilities, damage types, etc. + +Syntax is "operator": operand1, operand2,... -> resultType; description (if necessary) + + * "hostile": N1, N2 -> bool; N1 is hostile to N2 (one-directional) + * "allied": N1, N2; N1 is allied to N2 (one-directional) + * "approves": N; N agrees to the effect + * "roll": N, TYPE -> int; TYPE is an ability or skill + * "distance": N1, N2 -> int; units of feet + * "sees": N1, N2 -> bool; N1 can see N2 + * "movedto": N1, N2 -> int; distance (feet) N1 moved directly toward N2 this turn + * "underspell": N, SPELL -> bool; N is currently under the effects of SPELL; SPELL can alternatively be of school SCHOOL + * "N is in lighting LIGHTING" (sunlight, dim light, darkness, magical darkness) + * "understand": N1, N2 -> bool; N1 and N2 share a language + * "bound": N1, N2 -> bool; N1 is bound by N2 + * "aware": N1, N2 -> bool; N1 as aware of N2 + * "webshare": N1, N2 -> bool; N1 and N2 are in the same web + * "carried": N1, N2 -> bool; N1 is worn or carried by N2 ## TEXT @@ -54,93 +185,45 @@ Each subfeature is a dictionary with the following elements: Several of the elements accept various nouns. -## NOUNS - -Nouns embedded into subfeature elements may be any of: - - * "self" - * "creature" - * "object" - * "structure" - * "target" - * "point in space" - * NAME - -Where NAME is interpreted by the game as a specific creature or object with a matching name. - ### TRIGGER TRIGGER is a list containing any of the following followed by nouns corresponding to instances of N: - * "passive" (evaluated on initialization) - * "action" - * "bonus action" - * "free action" - * "legendary action costing X" - * "N start of turn" - * "N end of turn" - * "N takes damage" (pushes damage amount, damage type to variables list) - * "N moves" - * "N makes check against N" (pushes ROLLCLASS to variables list) - * "N forces N to save" (pushes ROLLCLASS to variables list) - * "N rolls a d20" (pushes ROLLCLASS to variables list) - * "N targets N by a spell" (pushes spell name to variables list) - * "N attacks N" - * "N hits N" - * "N touches N" +The subfeature activates when TRIGGER is true. The TRIGGER uses any condition, with the following exclusive conditions: + + * "passive": -> bool; evaluated on initialization + * "action": -> bool; taken by creature on turn + * "bonus": -> bool; bonus action + * "free": -> bool; free action + * "legendary": X -> bool; legendary action costing X + * "turnstart": N -> bool; N start of turn + * "turnend": N -> bool; N end of turn + * "damaged": N -> bool; N takes damage + * "moves": N -> bool; N moves + * "checkagainst": N1, N2 -> ROLLCLASS; N1 makes check against N2 + * "forcesave": N1, N2 -> ROLLCLASS; N1 forces N2 to save + * "rolls": N, X -> bool; N rolls a dX + * "targetspell": N1, N2 -> SPELL; N1 targets N2 by a spell + * "attacks": N1, N2 -> ATTACK; N1 attacks N2 + * "hits": N1, N2 -> DAMAGE; N1 hits N2 + * "touches": N1, N2 -> bool; N1 touches N2 Where ROLLCLASS is any of: * "attack" * "grapple" * "escape grapple" * "shove" + * "frightened" ... -### CONDITIONS - -CONDITIONS is a list of lists, all of which must evaluate True for effects to be applied. Each condition list is formatted [ CONDITION, variables ] where CONDITION is any of the following, prepend "not " to invert: - - * "N has property PROPERTY = VALUE" - * "N is hostile to N" - * "N is allied to N" - * "N wishes it to be so" - * "N succeeds dc X ABILITY save by at least X" (0 is a success) - * "N fails dc X ABILITY save by at least X" (0 is a fail) - * "N is within radius X of N" - * "N can see N" - * "N has completed >= X turns" - * "N has COND X hp" (COND any of ">=", ">", "<=", "<", "==") - * "Damage received >= X" - * "Damage received was a critical hit" - * "Damage received was type TYPE" - * "N has condition CONDITION" - * "N has condition CONDITION given by N" - * "N and N are on same plane of existence" - * "N is on plane PLANE" - * "N moved X distance straight toward N" - * "N has X movement remaining" - * "N made attack ATTACK" - * "N has underside exposed" - * "First time N uses feature on N during turn" - * "N is flying" - * "N is under effects of spell SPELL" - * "N has spell from school SCHOOL cast on it" - * "N is on terrain TERRAIN" - * "N is inside an object" - * "N is in lighting LIGHTING" (sunlight, dim light, darkness, magical darkness) - * "N can understand >= X languages" - * "N and N share a language" - * "N has >= X heads" - * "N has X spell slots remaining" - * "N had advantage" - * "N had disadvantage" - * "N used a weapon" - * "N is surprised" - * "N is bound by N" - * "N is aware of N" - * "N and N are in the same web" - * "N == N" - * "N is in AOE" where AOE is denoted in any of the following: +### CONDITION + +CONDITION is a string containing the conditional which, if it evaluates to true (i.e., not 0), then the effect occurs. + +### AOE + +AOE is + * "in": N, AOE -> bool; N is in an AOE * "line LENGTH WIDTH" * "cone LENGTH" @@ -149,44 +232,48 @@ CONDITIONS is a list of lists, all of which must evaluate True for effects to be EFFECTS is a list of dictionaries containing the following: * "target": NOUN + * "condition": CONDITION * "effect": [EFFECT, variables] - * "effect conditions": [[ CONDITION, variables ]] * "duration": DURATION +(Note: Unlike subfeature conditions, effect conditions apply to each target individually, i.e., for target = creatures, we can apply condition on each creature.) + Where EFFECT is any of the following (UNDER CONSTRUCTION DENOTED BY x): - * Terrain in X ft radius is difficult - * Set movement speed to X - * Move up to X ft toward N + * "Move up to X ft toward N" x * Increase movement speed by X x * Increase jump distance by X x * Increase jump height by X - * Acquire condition CONDITION -x * End condition CONDITION - * Set property PROPERTY to X + * "Set N = N" + * "Destroyed" x * Death x * Surprised x * Pushed X feet in DIRECTION direction x * Immune to feature FEATURE x * Immune to spells with trait SPELL\_TRAIT - * Impose disadvantage + * "Impose disadvantage" * "Impose disadvantage on TYPE" (any of "attack rolls", "ability checks", "saving throws") - * Grant advantage - * Grant critical hit + * "Grant advantage" + * "Grant critical hit" x * Advantage on rolls ROLL\_CLASS x * Automatic fail on rolls ROLL\_CLASS x * Automatic succeed on rolls ROLL\_CLASS x * Move X distance x * Deal X damage - * Inflict XdX TYPE damage - * Inflict XdX TYPE damage, dc X ABILITY save halves - * Deal +X weapon die damage - * Damage dealt is magical - * Take action ACTION + * "Inflict XdX TYPE damage" + * "Inflict XdX TYPE damage, dc X ABILITY save halves" + * "Deal +X weapon die damage" + * "Damage dealt is magical" + * "Take action ACTION" + * "cantrip" + * "cast spell" + * "attack" + * specific feature x * Disable other feature x * Know distance/direction to creature/object within X distance - * Reduce incoming damage by X - * Regain X hp + * "Reduce incoming damage by X" + * "Regain X hp" + * "Polymorph N into creature <= X cr" x * Weapon/armor corrodes x * Ignite flammable objects x * Expend spell slot @@ -205,13 +292,16 @@ x * Creates X diameter tunnel The conditions on an effect may be omitted if not applicable, and are the same as conditions for a trigger. -The duration of an effect may be omitted for instantaneous effects and is any of the following: +The duration of an effect may be omitted for instantaneous effects and is a condition, including the contents of TRIGGER, plus the following: - * "End of turn" - * "Start of next turn" - * "End of next turn" - * "Until action is taken to end" - * TIME (formatted "X units", where units is any of sec, min, hr, day, month, year) +x * "End of turn" +x * "Start of next turn" +x * "End of self next turn" +x * "End of target next turn" +x * "Until action is taken to end" +x * TIME (formatted "X units", where units is any of sec, min, hr, day, month, year) +x * "Until lesser restoration is cast" (implies at least lesser) +x * "Until overridden or dead" x * Repeated saves??? x * Repeated saves at advantage/disadvantage with condition??? x * Until certain spell is cast??? @@ -222,4 +312,4 @@ x * Until other effect expires??? The recharge of a feature may be omitted to indicate that it is unlimited. Otherwise, it is a list of the following two items: * Integer indicating number of times the feature can be used - * Any of "turn", "long rest", "short rest", "X-Y" (for integers X and Y) indicating when spent uses are restored + * Any of "turn", "long rest", "short rest", "X-Y" (for integers X and Y) indicating range on a d6 where spent uses are restored diff --git a/features/reckless.json b/features/reckless.json deleted file mode 100644 index d50eb69..0000000 --- a/features/reckless.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "reckless (feature)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/reel.json b/features/reel.json deleted file mode 100644 index 462bb3d..0000000 --- a/features/reel.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "reel (action)", - "text": "The roper pulls each creature grappled by it up to 25 feet straight toward it.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/reflective_carapace.json b/features/reflective_carapace.json deleted file mode 100644 index 8504fcd..0000000 --- a/features/reflective_carapace.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "reflective carapace (feature)", - "text": "Any time the tarrasque is targeted by a **_magic missle_** spell, a line spell, or a spell that requires a ranged attack roll, roll a d6. On a 1 to 5, the tarrasque is unaffected. On a 6, the tarrasque is unaffected, and the effect is reflected back at the caster as though it originated from the tarrasque, turning the caster into the target.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/regeneration.json b/features/regeneration.json deleted file mode 100644 index f6f1a25..0000000 --- a/features/regeneration.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "regeneration (feature)", - "text": "The vampire regains 20 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 vampire takes radiant damage or damage from holy water, this trait doesn't function at the start of the vampire's next turn.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/rejuvenation.json b/features/rejuvenation.json deleted file mode 100644 index ec888d6..0000000 --- a/features/rejuvenation.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "rejuvenation (feature)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/relentless.json b/features/relentless.json deleted file mode 100644 index 02b32eb..0000000 --- a/features/relentless.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "relentless (recharges after a short or long rest) (feature)", - "text": "If the wereboar takes 14 damage or less that would reduce it to 0 hit points, it is reduced to 1 hit point instead.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/repulsion_breath.json b/features/repulsion_breath.json deleted file mode 100644 index 17f6259..0000000 --- a/features/repulsion_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "repulsion breath (action)", - "text": "The dragon exhales repulsion energy in a 30-foot 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/roar.json b/features/roar.json deleted file mode 100644 index e69de29..0000000 diff --git a/features/rock_catching.json b/features/rock_catching.json deleted file mode 100644 index 4e16005..0000000 --- a/features/rock_catching.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "rock catching (reaction)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/running_leap.json b/features/running_leap.json deleted file mode 100644 index d9e5b22..0000000 --- a/features/running_leap.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "running leap (feature)", - "text": "With a 10-foot running start, the lion can long jump up to 25 feet.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/rust_metal.json b/features/rust_metal.json deleted file mode 100644 index ac2abf6..0000000 --- a/features/rust_metal.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "rust metal (feature)", - "text": "Any nonmagical weapon made of metal that hits the rust monster corrodes. After dealing damage, the weapon takes a permanent and cumulative −1 penalty to damage rolls. If its penalty drops to −5, the weapon is destroyed. Nonmagical ammunition made of metal that hits the rust monster is destroyed after dealing damage.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/scare.json b/features/scare.json deleted file mode 100644 index e69de29..0000000 diff --git a/features/searing_burst.json b/features/searing_burst.json deleted file mode 100644 index 77c3baa..0000000 --- a/features/searing_burst.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "searing burst (costs 2 actions) (legendary_action)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/second_roar.json b/features/second_roar.json deleted file mode 100644 index 0084451..0000000 --- a/features/second_roar.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "second roar (action)", - "text": "Each creature that fails a DC 18 Wisdom saving throw is deafened and frightened for 1 minute. A frightened creature is paralyzed and can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/sense_magic.json b/features/sense_magic.json deleted file mode 100644 index 2a3084a..0000000 --- a/features/sense_magic.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "sense magic (feature)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/senses.json b/features/senses.json deleted file mode 100644 index 4150c7e..0000000 --- a/features/senses.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "senses (feature)", - "text": ". The pseudodragon has advantage on Wisdom (Perception) checks that rely on sight, hearing, or smell.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/shadow_stealth.json b/features/shadow_stealth.json deleted file mode 100644 index df3d476..0000000 --- a/features/shadow_stealth.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "shadow stealth (feature)", - "text": "While in dim light or darkness, the shadow can take the Hide action as a bonus action.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/shapechanger.json b/features/shapechanger.json deleted file mode 100644 index 745cc7c..0000000 --- a/features/shapechanger.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "shapechanger (feature)", - "text": "If the vampire isn't in sunlight or running water, it can use its action to polymorph into a Tiny bat or a Medium cloud of mist, or back into its true form.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/shark_telepathy.json b/features/shark_telepathy.json deleted file mode 100644 index 48e4bb1..0000000 --- a/features/shark_telepathy.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "shark telepathy (feature)", - "text": "The sahuagin can magically command any shark within 120 feet of it, using a limited telepathy.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/shield.json b/features/shield.json deleted file mode 100644 index 6d6eeed..0000000 --- a/features/shield.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "shield (reaction)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/shielded_mind.json b/features/shielded_mind.json deleted file mode 100644 index e613ea6..0000000 --- a/features/shielded_mind.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "shielded mind (feature)", - "text": "The couatl is immune to scrying and to any effect that would sense its emotions, read its thoughts, or detect its location.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/shimmering_shield.json b/features/shimmering_shield.json deleted file mode 100644 index b148b7f..0000000 --- a/features/shimmering_shield.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "shimmering shield (costs 2 actions) (legendary_action)", - "text": "The unicorn creates a shimmering, magical field around itself or another creature it can see within 60 feet of it. The target gains a +2 bonus to AC until the end of the unicorn's next turn.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/shock.json b/features/shock.json deleted file mode 100644 index 0174364..0000000 --- a/features/shock.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "shock (spell attack)", - "text": "+4 to hit, reach 5 ft. Hit: 2d8 lightning damage.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/shriek.json b/features/shriek.json deleted file mode 100644 index ef14bab..0000000 --- a/features/shriek.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "shriek (reaction)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/siege_monster.json b/features/siege_monster.json deleted file mode 100644 index 37d911d..0000000 --- a/features/siege_monster.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "siege monster (feature)", - "text": "The treant deals double damage to objects and structures.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/sleep_breath.json b/features/sleep_breath.json deleted file mode 100644 index f5d26f8..0000000 --- a/features/sleep_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "sleep breath (action)", - "text": "The dragon exhales sleep gas in a 60-foot cone. Each creature in that area must succeed on a DC 18 Constitution saving 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/slow.json b/features/slow.json deleted file mode 100644 index 7ae57dd..0000000 --- a/features/slow.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "slow (recharge 5–6) (action)", - "text": "The golem targets one or more creatures it can see within 10 feet of it. Each target must make a DC 17 Wisdom saving throw against this magic. On a failed save, a target can't use reactions, its speed is halved, and it can't make more than one attack on its turn. In addition, the target can take either an action or a bonus action on its turn, not both. These effects last for 1 minute. A target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/slowing_breath.json b/features/slowing_breath.json deleted file mode 100644 index f63fb95..0000000 --- a/features/slowing_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "slowing breath (action)", - "text": "The dragon exhales gas in a 60-foot cone. Each creature in that area must succeed on a DC 18 Constitution saving throw. On a failed save, the creature can't use reactions, its speed is halved, and it can't make more than one attack on its turn. In addition, the creature can use either an action or a bonus action on 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/sneak_attack.json b/features/sneak_attack.json deleted file mode 100644 index 975a47f..0000000 --- a/features/sneak_attack.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "sneak attack (feature)", - "text": "Once per turn, the assassin deals an extra 14 (4d6) damage when it hits a target with a weapon attack and has advantage on the attack roll, or when the target is within 5 feet of an ally of the assassin that isn't incapacitated and the assassin doesn't have disadvantage on the attack roll.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/snow_camouflage.json b/features/snow_camouflage.json deleted file mode 100644 index 937bae5..0000000 --- a/features/snow_camouflage.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "snow camouflage (feature)", - "text": "The wolf has advantage on Dexterity (Stealth) checks made to hide in snowy terrain.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/speak_with_beasts_and_plants.json b/features/speak_with_beasts_and_plants.json deleted file mode 100644 index ac0be3a..0000000 --- a/features/speak_with_beasts_and_plants.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "speak with beasts and plants (feature)", - "text": "The dryad can communicate with beasts and plants as if they shared a language.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/spell_storing.json b/features/spell_storing.json deleted file mode 100644 index 21a794d..0000000 --- a/features/spell_storing.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "spell storing (feature)", - "text": "A spellcaster who wears the shield guardian's amulet can cause the guardian to store one spell of 4th level or lower. To do so, the wearer must cast the spell on the guardian. The spell has no effect but is stored within the guardian. When commanded to do so by the wearer or when a situation arises that was predefined by the 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/spider_climb.json b/features/spider_climb.json deleted file mode 100644 index f692e30..0000000 --- a/features/spider_climb.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "spider climb (feature)", - "text": "The vampire can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/split.json b/features/split.json deleted file mode 100644 index 05e9db2..0000000 --- a/features/split.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "split (reaction)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/spores.json b/features/spores.json deleted file mode 100644 index 2c9fa10..0000000 --- a/features/spores.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "spores (recharge 6) (action)", - "text": "A 15­‐foot­‐radius cloud of toxic spores extends out from the vrock. The spores spread around corners. Each creature in that area must succeed on a DC 14 Constitution saving throw or become poisoned. While poisoned in this way, a target takes 5 (1d10) poison damage at the start of each of its turns. A target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. Emptying a vial of holy water on the target also ends the effect on it.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/standing_leap.json b/features/standing_leap.json deleted file mode 100644 index 8e96b76..0000000 --- a/features/standing_leap.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "standing leap (feature)", - "text": "The toad's long jump is up to 20 feet and its high jump is up to 10 feet, with or without a running start.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/steadfast.json b/features/steadfast.json deleted file mode 100644 index 674288e..0000000 --- a/features/steadfast.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "steadfast (feature)", - "text": "The devil can't be frightened while it can see an allied creature within 30 feet of it.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/steam_breath.json b/features/steam_breath.json deleted file mode 100644 index 0f43f54..0000000 --- a/features/steam_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "steam breath (recharge 6) (action)", - "text": "The mephit exhales a 15- foot cone of scalding steam. Each creature in that area must succeed on a DC 10 Dexterity saving throw, taking 4 (1d8) fire damage on a failed save, or half as much damage on a successful one.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/stench.json b/features/stench.json deleted file mode 100644 index da9d30b..0000000 --- a/features/stench.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "stench (feature)", - "text": "Any creature that starts its turn within 10 feet of the hezrou must 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/stone_camouflage.json b/features/stone_camouflage.json deleted file mode 100644 index b7ca35b..0000000 --- a/features/stone_camouflage.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "stone camouflage (feature)", - "text": "The giant has advantage on Dexterity (Stealth) checks made to hide in rocky terrain.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/stunning_screech.json b/features/stunning_screech.json deleted file mode 100644 index e69de29..0000000 diff --git a/features/sunlight_sensitivity.json b/features/sunlight_sensitivity.json deleted file mode 100644 index 334ef9e..0000000 --- a/features/sunlight_sensitivity.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "sunlight sensitivity (feature)", - "text": "While in sunlight, the wraith has disadvantage on attack rolls, as well as on Wisdom (Perception) checks that rely on sight.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/sunlight_weakness.json b/features/sunlight_weakness.json deleted file mode 100644 index e3c1fae..0000000 --- a/features/sunlight_weakness.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "sunlight weakness (feature)", - "text": "While in sunlight, the shadow has disadvantage on attack rolls, ability checks, and saving throws.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/sure-footed.json b/features/sure-footed.json deleted file mode 100644 index f964d16..0000000 --- a/features/sure-footed.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "sure-footed (feature)", - "text": "The goat has advantage on Strength and Dexterity saving throws made against effects that would knock it prone.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/surprise_attack.json b/features/surprise_attack.json deleted file mode 100644 index 84a97f2..0000000 --- a/features/surprise_attack.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "surprise attack (feature)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/swallow.json b/features/swallow.json deleted file mode 100644 index 48727ec..0000000 --- a/features/swallow.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "swallow (action)", - "text": "The tarrasque makes one bite attack against a Large or smaller creature it is grappling. If the attack hits, the target takes the bite's damage, the target is swallowed, and the grapple ends. While swallowed, the creature is blinded and restrained, it has total cover against attacks and other effects outside the tarrasque, and it takes 56 (16d6) acid damage at the start of each of the tarrasque's turns.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/swarm.json b/features/swarm.json deleted file mode 100644 index 86da157..0000000 --- a/features/swarm.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "swarm (feature)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/tail_attack.json b/features/tail_attack.json deleted file mode 100644 index f3cadb0..0000000 --- a/features/tail_attack.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "tail attack (legendary_action)", - "text": "The dragon makes a tail attack.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/tail_spike_regrowth.json b/features/tail_spike_regrowth.json deleted file mode 100644 index d9c4a75..0000000 --- a/features/tail_spike_regrowth.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "tail spike regrowth (feature)", - "text": "The manticore has twenty-four tail spikes. Used spikes regrow when the manticore finishes a long rest.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/tail_swipe.json b/features/tail_swipe.json deleted file mode 100644 index 27dfc25..0000000 --- a/features/tail_swipe.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "tail swipe (legendary_action)", - "text": "The aboleth makes one tail attack.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/telepathic_bond.json b/features/telepathic_bond.json deleted file mode 100644 index 035952f..0000000 --- a/features/telepathic_bond.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "telepathic bond (feature)", - "text": "The fiend ignores the range restriction on its telepathy when communicating with a creature it has charmed. The two don't even need to be on the same plane of existence.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/teleport.json b/features/teleport.json deleted file mode 100644 index 900bc68..0000000 --- a/features/teleport.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "teleport (costs 2 actions) (legendary_action)", - "text": "The sphinx magically teleports, along with any equipment it is wearing or carrying, up to 120 feet to an unoccupied space it can see.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/tentacle_attack_or_fling.json b/features/tentacle_attack_or_fling.json deleted file mode 100644 index 5044187..0000000 --- a/features/tentacle_attack_or_fling.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "tentacle attack or fling (legendary_action)", - "text": "The kraken makes one tentacle attack or uses its Fling.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/tentacle_slam.json b/features/tentacle_slam.json deleted file mode 100644 index 00cef67..0000000 --- a/features/tentacle_slam.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "tentacle slam (action)", - "text": "The otyugh slams creatures grappled by it into each other or a solid surface. Each creature must succeed on a DC 14 Constitution saving throw or take 10 (2d6 + 3) bludgeoning damage and be stunned until the end of the otyugh's next turn. On a successful save, the target takes half the bludgeoning damage and isn't stunned.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/tentacles.json b/features/tentacles.json deleted file mode 100644 index 04c5b73..0000000 --- a/features/tentacles.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "tentacles (action)", - "text": "One creature grappled by the chuul must succeed on a DC 13 Constitution saving throw or be poisoned for 1 minute. Until this poison ends, the target is paralyzed. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/third_roar.json b/features/third_roar.json deleted file mode 100644 index 1da7e85..0000000 --- a/features/third_roar.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "third roar (action)", - "text": "Each creature makes a DC 18 Constitution saving throw. On 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/trampling_charge.json b/features/trampling_charge.json deleted file mode 100644 index 32d35e5..0000000 --- a/features/trampling_charge.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "trampling charge (feature)", - "text": "If the horse moves at least 20 feet 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/transparent.json b/features/transparent.json deleted file mode 100644 index 942835b..0000000 --- a/features/transparent.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "transparent (feature)", - "text": "Even when the cube is in plain sight, it takes a successful DC 15 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/treasure_sense.json b/features/treasure_sense.json deleted file mode 100644 index 7a18bb7..0000000 --- a/features/treasure_sense.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "treasure sense (feature)", - "text": "The xorn can pinpoint, by scent, the location of precious metals and stones, such as coins and gems, within 60 feet of it.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/tree_stride.json b/features/tree_stride.json deleted file mode 100644 index e78186a..0000000 --- a/features/tree_stride.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "tree stride (feature)", - "text": "Once on her turn, the dryad can use 10 feet of her movement to step magically into one living tree within her reach and emerge from a second living tree within 60 feet of the first tree, appearing in an unoccupied space within 5 feet of the second tree. Both trees must be Large or bigger.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/tunneler.json b/features/tunneler.json deleted file mode 100644 index a1dd416..0000000 --- a/features/tunneler.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "tunneler (feature)", - "text": "The worm can burrow through solid rock at half its burrow speed and leaves a 10-foot-diameter tunnel in its wake.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/turn_resistance.json b/features/turn_resistance.json deleted file mode 100644 index e191cf8..0000000 --- a/features/turn_resistance.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "turn resistance (feature)", - "text": "The lich has advantage on saving throws against any effect that turns undead.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/turning_defiance.json b/features/turning_defiance.json deleted file mode 100644 index 286fc8f..0000000 --- a/features/turning_defiance.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "turning defiance (feature)", - "text": "The ghast and any ghouls within 30 feet of it have advantage on saving throws against effects that turn undead.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/two-headed.json b/features/two-headed.json deleted file mode 100644 index 92f8b25..0000000 --- a/features/two-headed.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "two-headed (feature)", - "text": "The dog has advantage on Wisdom (Perception) checks and on saving throws against being blinded, charmed, deafened, frightened, stunned, or knocked unconscious.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/two_heads.json b/features/two_heads.json deleted file mode 100644 index d93a87f..0000000 --- a/features/two_heads.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "two heads (feature)", - "text": "The ettin has advantage on Wisdom (Perception) checks and on saving throws against being blinded, charmed, deafened, frightened, stunned, and knocked unconscious.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/unarmed_strike.json b/features/unarmed_strike.json deleted file mode 100644 index ddba1c5..0000000 --- a/features/unarmed_strike.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "unarmed strike (legendary_action)", - "text": "The vampire makes one unarmed strike.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/undead_fortitude.json b/features/undead_fortitude.json deleted file mode 100644 index e840ab3..0000000 --- a/features/undead_fortitude.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "undead fortitude (feature)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/underwater_camouflage.json b/features/underwater_camouflage.json deleted file mode 100644 index 4990715..0000000 --- a/features/underwater_camouflage.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "underwater camouflage (feature)", - "text": "The octopus has advantage on Dexterity (Stealth) checks made while underwater.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/unnerving_mask.json b/features/unnerving_mask.json deleted file mode 100644 index c8958e1..0000000 --- a/features/unnerving_mask.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "unnerving mask (reaction)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/vampire_weaknesses.json b/features/vampire_weaknesses.json deleted file mode 100644 index a60bd30..0000000 --- a/features/vampire_weaknesses.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "vampire weaknesses (feature)", - "text": "The vampire has the following flaws:", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/variable_illumination.json b/features/variable_illumination.json deleted file mode 100644 index f11b9cb..0000000 --- a/features/variable_illumination.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "variable illumination (feature)", - "text": "The will-o'-wisp sheds bright light in a 5- to 20-foot radius and dim light for an additional number of feet equal to the chosen radius. The will-o'-wisp can alter the radius as a bonus action.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/wakeful.json b/features/wakeful.json deleted file mode 100644 index 627c491..0000000 --- a/features/wakeful.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "wakeful (feature)", - "text": "When one of the ettin's heads is asleep, its other head is awake.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/wall_of_ice.json b/features/wall_of_ice.json deleted file mode 100644 index 65565f0..0000000 --- a/features/wall_of_ice.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "wall of ice (recharge 6) (action)", - "text": "The devil magically forms an opaque wall of ice on a solid surface it can see within 60 feet of it. The wall is 1 foot thick and up to 30 feet long and 10 feet high, or it's a hemispherical dome up to 20 feet in diameter.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/water_breathing.json b/features/water_breathing.json deleted file mode 100644 index 3167210..0000000 --- a/features/water_breathing.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "water breathing (feature)", - "text": "The shark can breathe only underwater.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/water_form.json b/features/water_form.json deleted file mode 100644 index 7686901..0000000 --- a/features/water_form.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "water form (feature)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/water_susceptibility.json b/features/water_susceptibility.json deleted file mode 100644 index cb16f42..0000000 --- a/features/water_susceptibility.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "water susceptibility (feature)", - "text": "For every 5 feet the elemental moves in water, or for every gallon of water splashed on it, it takes 1 cold damage.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/weakening_breath.json b/features/weakening_breath.json deleted file mode 100644 index 281d302..0000000 --- a/features/weakening_breath.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "weakening breath (action)", - "text": "The dragon exhales gas in a 60-foot cone. Each creature in that area must succeed on a DC 21 Strength saving throw or have disadvantage on Strength-based attack rolls, Strength checks, and 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/web_sense.json b/features/web_sense.json deleted file mode 100644 index 9767c9a..0000000 --- a/features/web_sense.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "web sense (feature)", - "text": "While in contact with a web, the spider knows the exact location of any other creature in contact with the same web.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/web_walker.json b/features/web_walker.json deleted file mode 100644 index 7764955..0000000 --- a/features/web_walker.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "web walker (feature)", - "text": "The spider ignores movement restrictions caused by webbing.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/whelm.json b/features/whelm.json deleted file mode 100644 index 78532ea..0000000 --- a/features/whelm.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "whelm (recharge 4–6) (action)", - "text": "Each creature in the elemental's space must make a DC 15 Strength saving throw. On a failure, a target takes 13 (2d8 + 4) bludgeoning damage. If it is Large or smaller, it is also grappled (escape DC 14). Until this grapple ends, the target is restrained and unable to breathe unless it can breathe water. If the saving throw is successful, the target is pushed out of the elemental's space.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/whirlwind.json b/features/whirlwind.json deleted file mode 100644 index e1e676f..0000000 --- a/features/whirlwind.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "whirlwind (recharge 4–6) (action)", - "text": "Each creature in the elemental's space must make a DC 13 Strength saving throw. On a failure, a target takes 15 (3d8 + 2) bludgeoning damage and is flung up 20 feet away from the elemental in a random direction and knocked prone. If a thrown target strikes an object, such as a wall or floor, the target takes 3 (1d6) bludgeoning damage for every 10 feet it was thrown. If the target is thrown at another creature, that creature must succeed on a DC 13 Dexterity saving throw or take the same damage and be knocked prone.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/whirlwind_of_sand.json b/features/whirlwind_of_sand.json deleted file mode 100644 index 094ea48..0000000 --- a/features/whirlwind_of_sand.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "whirlwind of sand (costs 2 actions) (legendary_action)", - "text": "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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/wing_attack.json b/features/wing_attack.json deleted file mode 100644 index 2807e91..0000000 --- a/features/wing_attack.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "wing attack (costs 2 actions) (legendary_action)", - "text": "The dragon beats its wings. Each creature within 15 feet 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.", - "subfeatures": [ - { - "trigger": [], - "conditions": [], - "effects": [{ - "target": "", - "effect": [], - "duration": "" - }] - } - ] -} diff --git a/features/wip/0blank.json b/features/wip/0blank.json new file mode 100644 index 0000000..80aaf8e --- /dev/null +++ b/features/wip/0blank.json @@ -0,0 +1,15 @@ +{ + "name": "NAME", + "text": "TEXT", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/TYPE_absorption.json b/features/wip/TYPE_absorption.json new file mode 100644 index 0000000..58c1018 --- /dev/null +++ b/features/wip/TYPE_absorption.json @@ -0,0 +1,18 @@ +{ + "name": "{V0} absorption", + "text": "Whenever the {NAME} is subjected to {V0} damage, it takes no damage and instead regains a number of hit points equal to the {V0} damage dealt.", + "subfeatures": [ + { + "trigger": [ "N takes damage", "self" ], + "conditions": [[ "Damage received was type TYPE", "V0" ]], + "effects": [{ + "target": "self", + "effect": [ "Reduce incoming damage by X", "V1" ] + }, + { + "target": "self", + "effect": [ "Regain X hp", "V1" ] + }] + } + ] +} diff --git a/features/wip/animate_chains.json b/features/wip/animate_chains.json new file mode 100644 index 0000000..7677e3b --- /dev/null +++ b/features/wip/animate_chains.json @@ -0,0 +1,16 @@ +{ + "name": "animate chains", + "text": "Up to four chains the {NAME} can see within 60 feet of it magically sprout razor-­edged barbs and animate under the {NAME}'s control, provided that the chains aren't being worn or carried. Each animated chain is an object with AC 20, 20 hit points, resistance to piercing damage, and immunity to psychic and thunder damage. When the {NAME} uses multiattack on its turn, it can use each animated chain to make one additional chain attack. An animated chain can grapple one 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 {NAME} is incapacitated or dies.", + "subfeatures": [ + { + "trigger": [ "action" ], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }], + "recharge": [ 1, "short rest" ] + } + ] +} diff --git a/features/wip/animate_trees.json b/features/wip/animate_trees.json new file mode 100644 index 0000000..e69de29 diff --git a/features/wip/bound.json b/features/wip/bound.json new file mode 100644 index 0000000..2d69c62 --- /dev/null +++ b/features/wip/bound.json @@ -0,0 +1,15 @@ +{ + "name": "bound", + "text": "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 amulet's wearer can telepathically call the guardian to travel to it, and the guardian knows the distance and direction to the amulet. If the guardian is within 60 feet of the amulet's wearer, half of any damage the wearer takes (rounded up) is transferred to the guardian.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/breath_weapons.json b/features/wip/breath_weapons.json new file mode 100644 index 0000000..b020604 --- /dev/null +++ b/features/wip/breath_weapons.json @@ -0,0 +1,15 @@ +{ + "name": "breath weapons (recharge 5–6) (action)", + "text": "The dragon uses one of the following breath weapons.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/charm.json b/features/wip/charm.json new file mode 100644 index 0000000..b6d895f --- /dev/null +++ b/features/wip/charm.json @@ -0,0 +1,15 @@ +{ + "name": "charm", + "text": "The {NAME} targets one humanoid it can see within 30 feet of it. If the target can see the {NAME}, the target must succeed on a DC {(8,PROF,CHA,+,+)} Wisdom saving throw against this magic or be charmed by the {NAME}. The charmed target regards the {NAME} as a trusted friend to be heeded and protected. Although the target isn't under the {NAME}'s control, it takes the {NAME}'s requests or actions in the most favorable way it can, and it is a willing target for the {NAME}'s bite attack. Each time the {NAME} or the {NAME}'s companions do anything harmful to the target, it can repeat the saving throw, ending the effect on itself on a success. Otherwise, the effect lasts 24 hours or until the {NAME} is destroyed, is on a different plane of existence than the target, or takes a bonus action to end the effect.", + "subfeatures": [ + { + "trigger": [ "action" ], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/children_of_the_night.json b/features/wip/children_of_the_night.json new file mode 100644 index 0000000..e69de29 diff --git a/features/wip/chomp.json b/features/wip/chomp.json new file mode 100644 index 0000000..d72b5de --- /dev/null +++ b/features/wip/chomp.json @@ -0,0 +1,15 @@ +{ + "name": "chomp (costs 2 actions) (legendary_action)", + "text": "The tarrasque makes one bite attack or uses its Swallow.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/claw_attack.json b/features/wip/claw_attack.json new file mode 100644 index 0000000..0d300bb --- /dev/null +++ b/features/wip/claw_attack.json @@ -0,0 +1,15 @@ +{ + "name": "claw attack (legendary_action)", + "text": "The sphinx makes one claw attack.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/cold_breath.json b/features/wip/cold_breath.json new file mode 100644 index 0000000..ceafca7 --- /dev/null +++ b/features/wip/cold_breath.json @@ -0,0 +1,15 @@ +{ + "name": "cold breath (recharge 5–6) (action)", + "text": "The dragon exhales an icy blast in a 90-foot cone. Each creature in that area must make a DC 22 Constitution saving throw, taking 72 (16d8) cold damage on a failed save, or half as much damage on a successful one.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/confer_fire_resistance.json b/features/wip/confer_fire_resistance.json new file mode 100644 index 0000000..978aef2 --- /dev/null +++ b/features/wip/confer_fire_resistance.json @@ -0,0 +1,15 @@ +{ + "name": "confer fire resistance (feature)", + "text": "The nightmare can grant resistance to fire damage to anyone riding it.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/consume_life.json b/features/wip/consume_life.json new file mode 100644 index 0000000..60ec347 --- /dev/null +++ b/features/wip/consume_life.json @@ -0,0 +1,15 @@ +{ + "name": "consume life (feature)", + "text": "As a bonus action, the will-o'-wisp can target one creature it can see within 5 feet of it that has 0 hit points and is still alive. The target must succeed on a DC 10 Constitution saving throw against this magic or die. If the target dies, the will-o'-wisp regains 10 (3d6) hit points.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/corrode_metal.json b/features/wip/corrode_metal.json new file mode 100644 index 0000000..7d38de5 --- /dev/null +++ b/features/wip/corrode_metal.json @@ -0,0 +1,15 @@ +{ + "name": "corrode metal (feature)", + "text": "Any nonmagical weapon made of metal that hits the ooze corrodes. After dealing damage, the weapon takes a permanent and cumulative −1 penalty to damage rolls. If its penalty drops to −5, the weapon is destroyed. Nonmagical ammunition made of metal that hits the ooze is destroyed after dealing damage.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/corrosive_form.json b/features/wip/corrosive_form.json new file mode 100644 index 0000000..902ad57 --- /dev/null +++ b/features/wip/corrosive_form.json @@ -0,0 +1,15 @@ +{ + "name": "corrosive form (feature)", + "text": "A creature that touches the pudding or hits it with a melee attack while within 5 feet of it takes 4 (1d8) acid damage. Any nonmagical weapon made of metal or wood that hits the pudding corrodes. After dealing damage, the weapon takes a permanent and cumulative −1 penalty to damage rolls. If its penalty drops to −5, the weapon is destroyed. Nonmagical ammunition made of metal or wood that hits the pudding is destroyed after dealing damage.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/create_specter.json b/features/wip/create_specter.json new file mode 100644 index 0000000..09074d4 --- /dev/null +++ b/features/wip/create_specter.json @@ -0,0 +1,15 @@ +{ + "name": "create specter (action)", + "text": "The wraith targets a humanoid within 10 feet of it that has been dead for no longer than 1 minute and died violently. The target's spirit rises as a specter in the space of its corpse or in the nearest unoccupied space. The specter is under the wraith's control. The wraith can have no more than seven specters under its control at one time.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/create_whirlwind.json b/features/wip/create_whirlwind.json new file mode 100644 index 0000000..bf45c7f --- /dev/null +++ b/features/wip/create_whirlwind.json @@ -0,0 +1,15 @@ +{ + "name": "create whirlwind (action)", + "text": "A 5-foot-radius, 30-foot-tall cylinder of swirling air magically forms on a point the djinni can see within 120 feet of it. The whirlwind lasts as long as the djinni maintains concentration (as if concentrating on a spell). Any creature but the djinni that enters the whirlwind must succeed on a DC 18 Strength saving throw or be restrained by it. The djinni can move the whirlwind up to 60 feet as an action, and creatures restrained by the whirlwind move with it. The whirlwind ends if the djinni loses sight of it.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/cunning_action.json b/features/wip/cunning_action.json new file mode 100644 index 0000000..7940d67 --- /dev/null +++ b/features/wip/cunning_action.json @@ -0,0 +1,15 @@ +{ + "name": "cunning action (feature)", + "text": "On each of its turns, the spy can use a bonus action to take the Dash, Disengage, or Hide action.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/damage_transfer.json b/features/wip/damage_transfer.json new file mode 100644 index 0000000..1290953 --- /dev/null +++ b/features/wip/damage_transfer.json @@ -0,0 +1,15 @@ +{ + "name": "damage transfer (feature)", + "text": "While it is grappling a creature, the rug takes only half the damage dealt to it, and the creature grappled by the rug takes the other half.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/dark_devotion.json b/features/wip/dark_devotion.json new file mode 100644 index 0000000..8607755 --- /dev/null +++ b/features/wip/dark_devotion.json @@ -0,0 +1,15 @@ +{ + "name": "dark devotion (feature)", + "text": "The cultist has advantage on saving throws against being charmed or frightened.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/darkness_aura.json b/features/wip/darkness_aura.json new file mode 100644 index 0000000..e69de29 diff --git a/features/wip/deadly_leap.json b/features/wip/deadly_leap.json new file mode 100644 index 0000000..a8c0a6e --- /dev/null +++ b/features/wip/deadly_leap.json @@ -0,0 +1,15 @@ +{ + "name": "deadly leap (action)", + "text": "If the bulette jumps at least 15 feet as part of its movement, it can then use this action to land on its feet 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 feet 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/death_burst.json b/features/wip/death_burst.json new file mode 100644 index 0000000..ea6fa45 --- /dev/null +++ b/features/wip/death_burst.json @@ -0,0 +1,15 @@ +{ + "name": "death burst (feature)", + "text": "When the mephit dies, it explodes in a cloud of steam. Each creature within 5 feet of the mephit must succeed on a DC 10 Dexterity saving throw or take 4 (1d8) fire damage.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/death_glare.json b/features/wip/death_glare.json new file mode 100644 index 0000000..707c92f --- /dev/null +++ b/features/wip/death_glare.json @@ -0,0 +1,15 @@ +{ + "name": "death glare (action)", + "text": "The hag targets one frightened creature she can see within 30 feet of her. If the target can see the hag, it must succeed on a DC 11 Wisdom saving throw against this magic or drop to 0 hit points.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/death_throes.json b/features/wip/death_throes.json new file mode 100644 index 0000000..d85633a --- /dev/null +++ b/features/wip/death_throes.json @@ -0,0 +1,15 @@ +{ + "name": "death throes (feature)", + "text": "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 damage on a failed save, or half as much damage on a successful one. The explosion ignites flammable objects in that area that aren't being worn or carried, and it destroys the balor's weapons.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/detect.json b/features/wip/detect.json new file mode 100644 index 0000000..7c2d2a6 --- /dev/null +++ b/features/wip/detect.json @@ -0,0 +1,15 @@ +{ + "name": "detect (legendary_action)", + "text": "The dragon makes a Wisdom (Perception) check.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/devil's_sight.json b/features/wip/devil's_sight.json new file mode 100644 index 0000000..26f0c34 --- /dev/null +++ b/features/wip/devil's_sight.json @@ -0,0 +1,15 @@ +{ + "name": "devil's sight (feature)", + "text": "Magical darkness doesn't impede the lemure's darkvision.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/disrupt_life.json b/features/wip/disrupt_life.json new file mode 100644 index 0000000..7632a36 --- /dev/null +++ b/features/wip/disrupt_life.json @@ -0,0 +1,15 @@ +{ + "name": "disrupt life (costs 3 actions) (legendary_action)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/divine_awareness.json b/features/wip/divine_awareness.json new file mode 100644 index 0000000..57d2e97 --- /dev/null +++ b/features/wip/divine_awareness.json @@ -0,0 +1,15 @@ +{ + "name": "divine awareness (feature)", + "text": "The planetar knows if it hears a lie.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/divine_eminence.json b/features/wip/divine_eminence.json new file mode 100644 index 0000000..916ac36 --- /dev/null +++ b/features/wip/divine_eminence.json @@ -0,0 +1,15 @@ +{ + "name": "divine eminence (feature)", + "text": "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 damage to a target on a hit. This benefit lasts until the end of the turn. If the priest expends a spell slot of 2nd level or higher, the extra damage increases by 1d6 for each level above 1st.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/draining_kiss.json b/features/wip/draining_kiss.json new file mode 100644 index 0000000..777b82e --- /dev/null +++ b/features/wip/draining_kiss.json @@ -0,0 +1,15 @@ +{ + "name": "draining kiss (action)", + "text": "The fiend kisses a creature charmed by it or a willing creature. The target must make a DC 15 Constitution saving throw against this magic, taking 32 (5d10 + 5) psychic damage on a failed save, or half as much damage on a successful one. The target's hit point maximum is reduced by an amount equal to the damage taken. This reduction lasts until the target finishes a long rest. The target dies if this effect reduces its hit point maximum to 0.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/dreadful_glare.json b/features/wip/dreadful_glare.json new file mode 100644 index 0000000..63f16ad --- /dev/null +++ b/features/wip/dreadful_glare.json @@ -0,0 +1,15 @@ +{ + "name": "dreadful glare (action)", + "text": "The mummy lord targets one creature it can see within 60 feet of it. If the target can see the mummy lord, it must succeed on a DC 16 Wisdom saving throw against this magic or become frightened until the end of the mummy's next turn. If the target fails the saving throw by 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/duergar_resilience.json b/features/wip/duergar_resilience.json new file mode 100644 index 0000000..cb0efa0 --- /dev/null +++ b/features/wip/duergar_resilience.json @@ -0,0 +1,15 @@ +{ + "name": "duergar resilience (feature)", + "text": "The duergar has advantage on saving throws against poison, spells, and illusions, as well as to resist being charmed or paralyzed.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/earth_glide.json b/features/wip/earth_glide.json new file mode 100644 index 0000000..a9601f3 --- /dev/null +++ b/features/wip/earth_glide.json @@ -0,0 +1,15 @@ +{ + "name": "earth glide (feature)", + "text": "The xorn can burrow through nonmagical, unworked earth and stone. While doing so, the xorn doesn't disturb the material it moves through.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/echolocation.json b/features/wip/echolocation.json new file mode 100644 index 0000000..295a403 --- /dev/null +++ b/features/wip/echolocation.json @@ -0,0 +1,15 @@ +{ + "name": "echolocation (feature)", + "text": "The swarm can't use its blindsight while deafened.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/elemental_demise.json b/features/wip/elemental_demise.json new file mode 100644 index 0000000..a486cb6 --- /dev/null +++ b/features/wip/elemental_demise.json @@ -0,0 +1,15 @@ +{ + "name": "elemental demise (feature)", + "text": "If the djinni dies, its body disintegrates into a warm breeze, leaving behind only equipment the djinni was wearing or carrying.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/engulf.json b/features/wip/engulf.json new file mode 100644 index 0000000..c8a1692 --- /dev/null +++ b/features/wip/engulf.json @@ -0,0 +1,15 @@ +{ + "name": "engulf (action)", + "text": "The shambling mound engulfs a Medium or smaller creature grappled by it. The engulfed target is blinded, restrained, and unable to breathe, and it must succeed on a DC 14 Constitution saving throw at the start of each of the mound's turns or take 13 (2d8 + 4) bludgeoning damage. If the mound moves, the engulfed target moves with it. The mound can have only one creature engulfed at a time.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/enlarge.json b/features/wip/enlarge.json new file mode 100644 index 0000000..f9fbd86 --- /dev/null +++ b/features/wip/enlarge.json @@ -0,0 +1,15 @@ +{ + "name": "enlarge (recharges after a short or long rest) (action)", + "text": "For 1 minute, the duergar magically increases in size, along with anything it is wearing or carrying. While enlarged, the duergar is Large, doubles its damage dice on Strength-based weapon attacks (included in the attacks), and makes Strength checks and Strength saving throws with advantage. If the duergar lacks the room to become Large, it attains the maximum size possible in the space available.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/enslave.json b/features/wip/enslave.json new file mode 100644 index 0000000..e69de29 diff --git a/features/wip/ephemeral.json b/features/wip/ephemeral.json new file mode 100644 index 0000000..55ec3ca --- /dev/null +++ b/features/wip/ephemeral.json @@ -0,0 +1,15 @@ +{ + "name": "ephemeral (feature)", + "text": "The will-o'-wisp can't wear or carry anything.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/ethereal_jaunt.json b/features/wip/ethereal_jaunt.json new file mode 100644 index 0000000..51838d3 --- /dev/null +++ b/features/wip/ethereal_jaunt.json @@ -0,0 +1,15 @@ +{ + "name": "ethereal jaunt (feature)", + "text": "As a bonus action, the spider can magically shift from the Material Plane to the Ethereal Plane, or vice versa.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/ethereal_sight.json b/features/wip/ethereal_sight.json new file mode 100644 index 0000000..8731e80 --- /dev/null +++ b/features/wip/ethereal_sight.json @@ -0,0 +1,15 @@ +{ + "name": "ethereal sight (feature)", + "text": "The ghost can see 60 feet into the Ethereal Plane when it is on the Material Plane, and vice versa.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/ethereal_stride.json b/features/wip/ethereal_stride.json new file mode 100644 index 0000000..915aa0d --- /dev/null +++ b/features/wip/ethereal_stride.json @@ -0,0 +1,15 @@ +{ + "name": "ethereal stride (action)", + "text": "The nightmare and up to three willing creatures within 5 feet of it magically enter the Ethereal Plane from the Material Plane, or vice versa.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/etherealness.json b/features/wip/etherealness.json new file mode 100644 index 0000000..3b67efa --- /dev/null +++ b/features/wip/etherealness.json @@ -0,0 +1,15 @@ +{ + "name": "etherealness (action)", + "text": "The fiend magically enters the Ethereal Plane from the Material Plane, or vice versa.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/evasion.json b/features/wip/evasion.json new file mode 100644 index 0000000..1dfff45 --- /dev/null +++ b/features/wip/evasion.json @@ -0,0 +1,15 @@ +{ + "name": "evasion (feature)", + "text": "If the assassin is subjected to an effect that allows it to make a Dexterity saving throw to take only half damage, the assassin instead takes no damage if it succeeds on the saving throw, and only half damage if it fails.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/false_appearance.json b/features/wip/false_appearance.json new file mode 100644 index 0000000..fcdd655 --- /dev/null +++ b/features/wip/false_appearance.json @@ -0,0 +1,15 @@ +{ + "name": "false appearance (feature)", + "text": "While the armor remains motionless, it is indistinguishable from a normal suit of armor.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/faultless_tracker.json b/features/wip/faultless_tracker.json new file mode 100644 index 0000000..ed235ab --- /dev/null +++ b/features/wip/faultless_tracker.json @@ -0,0 +1,15 @@ +{ + "name": "faultless tracker (feature)", + "text": "The stalker is given a quarry by its summoner. The stalker knows the 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/fear_aura.json b/features/wip/fear_aura.json new file mode 100644 index 0000000..e6ad68f --- /dev/null +++ b/features/wip/fear_aura.json @@ -0,0 +1,15 @@ +{ + "name": "fear aura (feature)", + "text": "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 the pit fiend is incapacitated. On a failed save, the creature is frightened until the start of its next turn. If a creature's saving throw is successful, the creature is immune to the pit fiend's Fear Aura for the next 24 hours.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/fetid_cloud.json b/features/wip/fetid_cloud.json new file mode 100644 index 0000000..e69de29 diff --git a/features/wip/fey_ancestry.json b/features/wip/fey_ancestry.json new file mode 100644 index 0000000..0680b74 --- /dev/null +++ b/features/wip/fey_ancestry.json @@ -0,0 +1,15 @@ +{ + "name": "fey ancestry (feature)", + "text": "The drider has advantage on saving throws against being charmed, and magic can't put the drider to sleep.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/fey_charm.json b/features/wip/fey_charm.json new file mode 100644 index 0000000..39f0e5e --- /dev/null +++ b/features/wip/fey_charm.json @@ -0,0 +1,15 @@ +{ + "name": "fey charm (action)", + "text": "The dryad targets one humanoid or beast that she can see within 30 feet of her. If the target can see the dryad, it must succeed on a DC 14 Wisdom saving throw or be magically charmed. The charmed creature regards the dryad as a trusted friend to be heeded and protected. Although the target isn't under the dryad's control, it takes the dryad's requests or actions in the most favorable way it can.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/fire_absorption.json b/features/wip/fire_absorption.json new file mode 100644 index 0000000..c2724b0 --- /dev/null +++ b/features/wip/fire_absorption.json @@ -0,0 +1,15 @@ +{ + "name": "fire absorption (feature)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/fire_aura.json b/features/wip/fire_aura.json new file mode 100644 index 0000000..6fe6d2d --- /dev/null +++ b/features/wip/fire_aura.json @@ -0,0 +1,15 @@ +{ + "name": "fire aura (feature)", + "text": "At the start of each of the balor's turns, each creature within 5 feet of it takes 10 (3d6) fire damage, and flammable objects in the aura that aren't being worn or carried ignite. A creature that touches the balor or hits it with a melee attack while within 5 feet of it takes 10 (3d6) fire damage.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/fire_breath.json b/features/wip/fire_breath.json new file mode 100644 index 0000000..58646f4 --- /dev/null +++ b/features/wip/fire_breath.json @@ -0,0 +1,15 @@ +{ + "name": "fire breath (recharge 5–6) (action)", + "text": "The dragon exhales fire in a 60‐foot cone. Each creature in that area must make a DC 21 Dexterity saving throw, taking 63 (18d6) fire damage on a failed save, or half as much damage on a successful one.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/fire_form.json b/features/wip/fire_form.json new file mode 100644 index 0000000..cef7dba --- /dev/null +++ b/features/wip/fire_form.json @@ -0,0 +1,15 @@ +{ + "name": "fire form (feature)", + "text": "The elemental can move through a space as narrow as 1 inch wide without squeezing. A creature that touches the elemental or hits it with a melee attack while within 5 feet of it takes 5 (1d10) fire damage. In addition, the elemental can enter a hostile creature's space and stop there. The first time it enters a creature's space on a turn, that creature takes 5 (1d10) fire damage and catches fire; until someone takes an action to douse the fire, the creature takes 5 (1d10) fire damage at the start of each of its turns.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/first_roar.json b/features/wip/first_roar.json new file mode 100644 index 0000000..9966c2a --- /dev/null +++ b/features/wip/first_roar.json @@ -0,0 +1,15 @@ +{ + "name": "first roar (action)", + "text": "Each creature that fails a DC 18 Wisdom saving throw is frightened for 1 minute. A frightened creature can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/fling.json b/features/wip/fling.json new file mode 100644 index 0000000..56c3b0a --- /dev/null +++ b/features/wip/fling.json @@ -0,0 +1,15 @@ +{ + "name": "fling (action)", + "text": "One Large or smaller object held or creature grappled by the kraken is thrown up to 60 feet in a random direction and knocked prone. If a thrown target strikes a solid surface, the target takes 3 (1d6) bludgeoning damage for every 10 feet it was thrown. If the target is thrown at another creature, that creature must succeed on a DC 18 Dexterity saving throw or take the same damage and be knocked prone.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/flyby.json b/features/wip/flyby.json new file mode 100644 index 0000000..1ca973a --- /dev/null +++ b/features/wip/flyby.json @@ -0,0 +1,15 @@ +{ + "name": "flyby (feature)", + "text": "The owl doesn't provoke opportunity attacks when it flies out of an enemy's reach.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/flying_sword.json b/features/wip/flying_sword.json new file mode 100644 index 0000000..05656a5 --- /dev/null +++ b/features/wip/flying_sword.json @@ -0,0 +1,15 @@ +{ + "name": "flying sword (action)", + "text": "The solar releases its greatsword to hover magically in an unoccupied space within 5 feet of it. If the solar can see the sword, the solar can mentally command it as a bonus action to fly up to 50 feet and either make one attack against a target or return to the solar's hands. If the hovering sword is targeted by any effect, the solar is considered to be holding it. The hovering sword falls if the solar dies.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/freedom_of_movement.json b/features/wip/freedom_of_movement.json new file mode 100644 index 0000000..daeeef4 --- /dev/null +++ b/features/wip/freedom_of_movement.json @@ -0,0 +1,15 @@ +{ + "name": "freedom of movement (feature)", + "text": "The kraken ignores difficult terrain, and magical effects can't reduce its speed or cause it to be restrained. It can spend 5 feet of movement to escape from nonmagical restraints or being grappled.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/freeze.json b/features/wip/freeze.json new file mode 100644 index 0000000..1f91eac --- /dev/null +++ b/features/wip/freeze.json @@ -0,0 +1,15 @@ +{ + "name": "freeze (feature)", + "text": "If the elemental takes cold damage, it partially freezes; its speed is reduced by 20 feet until the end of its next turn.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/frightening_gaze.json b/features/wip/frightening_gaze.json new file mode 100644 index 0000000..5cc19b6 --- /dev/null +++ b/features/wip/frightening_gaze.json @@ -0,0 +1,15 @@ +{ + "name": "frightening gaze (costs 2 actions) (legendary_action)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/frightful_presence.json b/features/wip/frightful_presence.json new file mode 100644 index 0000000..64e63c3 --- /dev/null +++ b/features/wip/frightful_presence.json @@ -0,0 +1,15 @@ +{ + "name": "frightful presence (action)", + "text": "Each creature of the dragon's choice that is within 120 feet of the dragon and aware of it must succeed on a DC 16 Wisdom saving throw or become frightened 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. If a creature's saving throw is successful or the effect ends for it, the creature is immune to the dragon's Frightful Presence for the next 24 hours.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/frost_breath.json b/features/wip/frost_breath.json new file mode 100644 index 0000000..55d64ce --- /dev/null +++ b/features/wip/frost_breath.json @@ -0,0 +1,15 @@ +{ + "name": "frost breath (recharge 6) (action)", + "text": "The mephit exhales a 15- foot cone of cold air. Each creature in that area must succeed on a DC 10 Dexterity saving throw, taking 5 (2d4) cold damage on a failed save, or half as much damage on a successful one.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/gibbering.json b/features/wip/gibbering.json new file mode 100644 index 0000000..28d5896 --- /dev/null +++ b/features/wip/gibbering.json @@ -0,0 +1,15 @@ +{ + "name": "gibbering (feature)", + "text": "The mouther babbles incoherently while it can see any creature and isn't incapacitated. Each creature that starts its turn within 20 feet of the mouther and can hear the gibbering must succeed on a DC 10 Wisdom saving throw. On a failure, the creature can't take reactions until the start of its next turn and rolls a d8 to determine what it does during its turn. On a 1 to 4, the creature does nothing. On a 5 or 6, the creature takes no action or bonus action and uses all its 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/gnome_cunning.json b/features/wip/gnome_cunning.json new file mode 100644 index 0000000..37e6907 --- /dev/null +++ b/features/wip/gnome_cunning.json @@ -0,0 +1,15 @@ +{ + "name": "gnome cunning (feature)", + "text": "The gnome has advantage on Intelligence, Wisdom, and Charisma saving throws against magic.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/grappler.json b/features/wip/grappler.json new file mode 100644 index 0000000..0d23a01 --- /dev/null +++ b/features/wip/grappler.json @@ -0,0 +1,15 @@ +{ + "name": "grappler (feature)", + "text": "The mimic has advantage on attack rolls against any creature grappled by it.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/grasping_tendrils.json b/features/wip/grasping_tendrils.json new file mode 100644 index 0000000..d0efc05 --- /dev/null +++ b/features/wip/grasping_tendrils.json @@ -0,0 +1,15 @@ +{ + "name": "grasping tendrils (feature)", + "text": "The roper can have up to six tendrils at a time. Each tendril can be attacked (AC 20; 10 hit points; immunity to poison and psychic damage). Destroying a tendril deals no damage to the roper, which can extrude a replacement tendril on its next turn. A tendril can also be broken if a creature takes an action and succeeds on a DC 15 Strength check against it.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/haste.json b/features/wip/haste.json new file mode 100644 index 0000000..fe98a49 --- /dev/null +++ b/features/wip/haste.json @@ -0,0 +1,15 @@ +{ + "name": "haste (recharge 5–6) (action)", + "text": "Until the end of its next turn, the golem magically gains a +2 bonus to its AC, has advantage on Dexterity saving throws, and can use its slam attack as a bonus action.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/heal_self.json b/features/wip/heal_self.json new file mode 100644 index 0000000..398026c --- /dev/null +++ b/features/wip/heal_self.json @@ -0,0 +1,15 @@ +{ + "name": "heal self (costs 3 actions) (legendary_action)", + "text": "The unicorn magically regains 11 (2d8 + 2) hit points.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/healing_touch.json b/features/wip/healing_touch.json new file mode 100644 index 0000000..e69de29 diff --git a/features/wip/heart_sight.json b/features/wip/heart_sight.json new file mode 100644 index 0000000..d8d82bd --- /dev/null +++ b/features/wip/heart_sight.json @@ -0,0 +1,15 @@ +{ + "name": "heart sight (action)", + "text": "The sprite touches a creature and magically knows the creature's current emotional state. If the target fails a DC 10 Charisma saving throw, the sprite also knows the creature's alignment. Celestials, fiends, and undead automatically fail the saving throw.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/heated_body.json b/features/wip/heated_body.json new file mode 100644 index 0000000..0076162 --- /dev/null +++ b/features/wip/heated_body.json @@ -0,0 +1,15 @@ +{ + "name": "heated body (feature)", + "text": "A creature that touches the azer or hits it with a melee attack while within 5 feet of it takes 5 (1d10) fire damage.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/heated_weapons.json b/features/wip/heated_weapons.json new file mode 100644 index 0000000..32d67fd --- /dev/null +++ b/features/wip/heated_weapons.json @@ -0,0 +1,15 @@ +{ + "name": "heated weapons (feature)", + "text": "When the azer hits with a metal melee weapon, it deals an extra 3 (1d6) fire damage (included in the attack).", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/hellish_rejuvenation.json b/features/wip/hellish_rejuvenation.json new file mode 100644 index 0000000..badf56e --- /dev/null +++ b/features/wip/hellish_rejuvenation.json @@ -0,0 +1,15 @@ +{ + "name": "hellish rejuvenation (feature)", + "text": "A lemure that dies in the Nine Hells comes back to life with all its 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/hellish_weapons.json b/features/wip/hellish_weapons.json new file mode 100644 index 0000000..fcd37f7 --- /dev/null +++ b/features/wip/hellish_weapons.json @@ -0,0 +1,15 @@ +{ + "name": "hellish weapons (feature)", + "text": "The erinyes's weapon attacks are magical and deal an extra 13 (3d8) poison damage on a hit (included in the attacks).", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/hold_breath.json b/features/wip/hold_breath.json new file mode 100644 index 0000000..b57b9b8 --- /dev/null +++ b/features/wip/hold_breath.json @@ -0,0 +1,15 @@ +{ + "name": "hold breath (feature)", + "text": "The plesiosaurus can hold its breath for 1 hour.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/hooves.json b/features/wip/hooves.json new file mode 100644 index 0000000..4e95f5f --- /dev/null +++ b/features/wip/hooves.json @@ -0,0 +1,15 @@ +{ + "name": "hooves (legendary_action)", + "text": "The unicorn makes one attack with its hooves.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/horrific_appearance.json b/features/wip/horrific_appearance.json new file mode 100644 index 0000000..ba3d57e --- /dev/null +++ b/features/wip/horrific_appearance.json @@ -0,0 +1,15 @@ +{ + "name": "horrific appearance (feature)", + "text": "Any humanoid that starts its turn within 30 feet of the hag and can see the hag's true form must make a DC 11 Wisdom saving throw. On a failed save, the creature is frightened for 1 minute. A creature can repeat the saving throw at the end of each of its turns, with disadvantage if the hag is within line of sight, ending the effect on itself on a success. If a creature's saving throw is successful or the effect ends for it, the creature is immune to the hag's Horrific Appearance for the next 24 hours.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/horrifying_visage.json b/features/wip/horrifying_visage.json new file mode 100644 index 0000000..9a7b8a0 --- /dev/null +++ b/features/wip/horrifying_visage.json @@ -0,0 +1,15 @@ +{ + "name": "horrifying visage (action)", + "text": "Each non-undead creature within 60 feet of the ghost that can see it must succeed on a DC 13 Wisdom saving throw or be frightened for 1 minute. If the save fails by 5 or more, the target also ages 1d4 × 10 years. A frightened target can repeat the saving throw at the end of each of its turns, ending the frightened condition on itself on a success. If a target's saving throw is successful or the effect ends for it, the target is immune to this ghost's Horrifying Visage for the next 24 hours. The aging effect can be reversed with a greater restoration spell, but only within 24 hours of it occurring.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/horror_nimbus.json b/features/wip/horror_nimbus.json new file mode 100644 index 0000000..c0dcb62 --- /dev/null +++ b/features/wip/horror_nimbus.json @@ -0,0 +1,15 @@ +{ + "name": "horror nimbus (recharge 5–6) (action)", + "text": "The nalfeshnee magically emits scintillating, multicolored light. Each creature within 15 feet of the nalfeshnee that can see the light must succeed on a DC 15 Wisdom saving throw or be frightened 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. If a creature's saving throw is successful or the effect ends for it, the creature is immune to the nalfeshnee's Horror Nimbus for the next 24 hours.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/hurl_flame.json b/features/wip/hurl_flame.json new file mode 100644 index 0000000..e69de29 diff --git a/features/wip/ice_walk.json b/features/wip/ice_walk.json new file mode 100644 index 0000000..b3f033b --- /dev/null +++ b/features/wip/ice_walk.json @@ -0,0 +1,15 @@ +{ + "name": "ice walk (feature)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/ignited_illumination.json b/features/wip/ignited_illumination.json new file mode 100644 index 0000000..ab78e2d --- /dev/null +++ b/features/wip/ignited_illumination.json @@ -0,0 +1,15 @@ +{ + "name": "ignited illumination (feature)", + "text": "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 feet.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/illumination.json b/features/wip/illumination.json new file mode 100644 index 0000000..46aa99a --- /dev/null +++ b/features/wip/illumination.json @@ -0,0 +1,15 @@ +{ + "name": "illumination (feature)", + "text": "The azer sheds bright light in a 10-­foot radius and dim light for an additional 10 feet.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/illusory_appearance.json b/features/wip/illusory_appearance.json new file mode 100644 index 0000000..fd6f73d --- /dev/null +++ b/features/wip/illusory_appearance.json @@ -0,0 +1,15 @@ +{ + "name": "illusory appearance (action)", + "text": "The hag covers herself and anything she is wearing or carrying with a magical illusion that makes her look like an ugly creature of her general size and humanoid shape. The effect ends if the hag takes a bonus action to end it or if she dies.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/immutable_form.json b/features/wip/immutable_form.json new file mode 100644 index 0000000..fe48fd3 --- /dev/null +++ b/features/wip/immutable_form.json @@ -0,0 +1,15 @@ +{ + "name": "immutable form (feature)", + "text": "The golem is immune to any spell or effect that would alter its form.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/incorporeal_movement.json b/features/wip/incorporeal_movement.json new file mode 100644 index 0000000..6cdc08a --- /dev/null +++ b/features/wip/incorporeal_movement.json @@ -0,0 +1,15 @@ +{ + "name": "incorporeal movement (feature)", + "text": "The will-o'-wisp 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/ink_cloud.json b/features/wip/ink_cloud.json new file mode 100644 index 0000000..ce92045 --- /dev/null +++ b/features/wip/ink_cloud.json @@ -0,0 +1,15 @@ +{ + "name": "ink cloud (recharges after a short or long rest) (action)", + "text": "A 5-foot-radius cloud of ink extends all around the octopus if it is underwater. The area is heavily obscured for 1 minute, although a significant current can disperse the ink. After releasing the ink, the octopus can use the Dash action as a bonus action.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/inscrutable.json b/features/wip/inscrutable.json new file mode 100644 index 0000000..56a9409 --- /dev/null +++ b/features/wip/inscrutable.json @@ -0,0 +1,15 @@ +{ + "name": "inscrutable (feature)", + "text": "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. Wisdom (Insight) checks made to ascertain the sphinx's intentions or sincerity have disadvantage.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/intoxicating_touch.json b/features/wip/intoxicating_touch.json new file mode 100644 index 0000000..8ac0e4e --- /dev/null +++ b/features/wip/intoxicating_touch.json @@ -0,0 +1,15 @@ +{ + "name": "intoxicating touch (spell attack)", + "text": "+5 to hit, reach 5 ft. Hit: The target is magically cursed for 1 hour. Until the curse ends, the target has disadvantage on Wisdom saving throws and all ability checks.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/invisibility.json b/features/wip/invisibility.json new file mode 100644 index 0000000..d670d9a --- /dev/null +++ b/features/wip/invisibility.json @@ -0,0 +1,15 @@ +{ + "name": "invisibility (action)", + "text": "The will-o'-wisp and its light magically become invisible until it attacks or uses its Consume Life, or until its concentration ends (as if concentrating on a spell).", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/invisible_passage.json b/features/wip/invisible_passage.json new file mode 100644 index 0000000..4924f35 --- /dev/null +++ b/features/wip/invisible_passage.json @@ -0,0 +1,15 @@ +{ + "name": "invisible passage (action)", + "text": "The hag magically turns invisible until she attacks or casts a spell, or until her concentration ends (as if concentrating on a spell). While invisible, she leaves no physical evidence of her passage, so she can be tracked only by magic. Any equipment she wears or carries is invisible with her.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/iron_scent.json b/features/wip/iron_scent.json new file mode 100644 index 0000000..2767bb8 --- /dev/null +++ b/features/wip/iron_scent.json @@ -0,0 +1,15 @@ +{ + "name": "iron scent (feature)", + "text": "The rust monster can pinpoint, by scent, the location of ferrous metal within 30 feet of it.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/keen_hearing.json b/features/wip/keen_hearing.json new file mode 100644 index 0000000..0f386ad --- /dev/null +++ b/features/wip/keen_hearing.json @@ -0,0 +1,15 @@ +{ + "name": "keen hearing (feature)", + "text": "The swarm has advantage on Wisdom (Perception) checks that rely on hearing.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/keen_hearing_and_sight.json b/features/wip/keen_hearing_and_sight.json new file mode 100644 index 0000000..84a511e --- /dev/null +++ b/features/wip/keen_hearing_and_sight.json @@ -0,0 +1,15 @@ +{ + "name": "keen hearing and sight (feature)", + "text": "The scout has advantage on Wisdom (Perception) checks that rely on hearing or sight.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/keen_hearing_and_smell.json b/features/wip/keen_hearing_and_smell.json new file mode 100644 index 0000000..e3bf77a --- /dev/null +++ b/features/wip/keen_hearing_and_smell.json @@ -0,0 +1,15 @@ +{ + "name": "keen hearing and smell (feature)", + "text": "The weasel has advantage on Wisdom (Perception) checks that rely on hearing or smell.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/keen_sight.json b/features/wip/keen_sight.json new file mode 100644 index 0000000..bcf1aa6 --- /dev/null +++ b/features/wip/keen_sight.json @@ -0,0 +1,15 @@ +{ + "name": "keen sight (feature)", + "text": "The roc has advantage on Wisdom (Perception) checks that rely on sight.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/keen_sight_and_smell.json b/features/wip/keen_sight_and_smell.json new file mode 100644 index 0000000..53ec530 --- /dev/null +++ b/features/wip/keen_sight_and_smell.json @@ -0,0 +1,15 @@ +{ + "name": "keen sight and smell (feature)", + "text": "The vulture has advantage on Wisdom (Perception) checks that rely on sight or smell.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/keen_smell.json b/features/wip/keen_smell.json new file mode 100644 index 0000000..8504b20 --- /dev/null +++ b/features/wip/keen_smell.json @@ -0,0 +1,15 @@ +{ + "name": "keen smell (feature)", + "text": "The werebear has advantage on Wisdom (Perception) checks that rely on smell.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/labyrinthine_recall.json b/features/wip/labyrinthine_recall.json new file mode 100644 index 0000000..90d789e --- /dev/null +++ b/features/wip/labyrinthine_recall.json @@ -0,0 +1,15 @@ +{ + "name": "labyrinthine recall (feature)", + "text": "The minotaur can perfectly recall any path it has traveled.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/leadership.json b/features/wip/leadership.json new file mode 100644 index 0000000..39aa51a --- /dev/null +++ b/features/wip/leadership.json @@ -0,0 +1,15 @@ +{ + "name": "leadership (recharges after a short or long rest) (action)", + "text": "For 1 minute, the knight can utter a special command or warning whenever a nonhostile creature that it can see within 30 feet of it makes an attack roll or a saving throw. The creature can add a d4 to 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/legendary_attack.json b/features/wip/legendary_attack.json new file mode 100644 index 0000000..2b17f1c --- /dev/null +++ b/features/wip/legendary_attack.json @@ -0,0 +1,14 @@ +{ + "name": "{V0}", + "text": "The {NAME} makes one {V0} attack.", + "subfeatures": [ + { + "trigger": [ "legendary action costing X", "V1" ], + "conditions": [], + "effects": [{ + "target": "self", + "effect": [ "Take action ACTION", "V0" ] + }] + } + ] +} diff --git a/features/wip/legendary_resistance.json b/features/wip/legendary_resistance.json new file mode 100644 index 0000000..e69de29 diff --git a/features/wip/life_drain.json b/features/wip/life_drain.json new file mode 100644 index 0000000..4f5743f --- /dev/null +++ b/features/wip/life_drain.json @@ -0,0 +1,15 @@ +{ + "name": "life drain (spell attack)", + "text": "+4 to hit, reach 5 ft. Hit: 3d6 necrotic damage. The target must succeed on a DC 10 Constitution saving throw or its hit point maximum is reduced by an amount equal to the damage taken. This reduction lasts until the creature finishes a long rest. The target dies if this effect reduces its hit point maximum to 0.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/light_sensitivity.json b/features/wip/light_sensitivity.json new file mode 100644 index 0000000..387e288 --- /dev/null +++ b/features/wip/light_sensitivity.json @@ -0,0 +1,15 @@ +{ + "name": "light sensitivity (feature)", + "text": "While in bright light, the cloaker has disadvantage on attack rolls and Wisdom (Perception) checks that rely on sight.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/lightning_absorption.json b/features/wip/lightning_absorption.json new file mode 100644 index 0000000..a901c31 --- /dev/null +++ b/features/wip/lightning_absorption.json @@ -0,0 +1,15 @@ +{ + "name": "lightning absorption (feature)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/lightning_breath.json b/features/wip/lightning_breath.json new file mode 100644 index 0000000..4329863 --- /dev/null +++ b/features/wip/lightning_breath.json @@ -0,0 +1,15 @@ +{ + "name": "lightning breath (action)", + "text": "The dragon exhales lightning in a 90- foot line that is 5 feet wide. 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/lightning_storm.json b/features/wip/lightning_storm.json new file mode 100644 index 0000000..f92e486 --- /dev/null +++ b/features/wip/lightning_storm.json @@ -0,0 +1,15 @@ +{ + "name": "lightning storm (action)", + "text": "The kraken magically creates three bolts of lightning, each of which 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/lightning_strike.json b/features/wip/lightning_strike.json new file mode 100644 index 0000000..920f0c8 --- /dev/null +++ b/features/wip/lightning_strike.json @@ -0,0 +1,15 @@ +{ + "name": "lightning strike (recharge 5–6) (action)", + "text": "The giant hurls a magical lightning bolt at a point it can see within 500 feet of it. Each creature within 10 feet of that point must make a DC 17 Dexterity saving throw, taking 54 (12d8) lightning damage on a failed save, or half as much damage on a successful one.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/limited_amphibiousess.json b/features/wip/limited_amphibiousess.json new file mode 100644 index 0000000..483c17e --- /dev/null +++ b/features/wip/limited_amphibiousess.json @@ -0,0 +1,15 @@ +{ + "name": "limited amphibiousess (feature)", + "text": "The sahuagin can breathe air and water, but it needs to be submerged at least once every 4 hours to avoid suffocating.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/limited_magic_immunity.json b/features/wip/limited_magic_immunity.json new file mode 100644 index 0000000..45eac17 --- /dev/null +++ b/features/wip/limited_magic_immunity.json @@ -0,0 +1,15 @@ +{ + "name": "limited magic immunity (feature)", + "text": "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 against all other spells and magical effects.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/limited_telepathy.json b/features/wip/limited_telepathy.json new file mode 100644 index 0000000..3ed0c1f --- /dev/null +++ b/features/wip/limited_telepathy.json @@ -0,0 +1,15 @@ +{ + "name": "limited telepathy (feature)", + "text": "The otyugh can magically transmit simple messages and images to any creature within 120 feet of it that can understand a language. This form of telepathy doesn't allow the receiving creature to telepathically respond.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/luring_song.json b/features/wip/luring_song.json new file mode 100644 index 0000000..b7c0206 --- /dev/null +++ b/features/wip/luring_song.json @@ -0,0 +1,15 @@ +{ + "name": "luring song (action)", + "text": "The harpy sings a magical melody. Every humanoid and giant within 300 feet of the harpy that can hear the song must succeed on a DC 11 Wisdom saving throw or be charmed until the song ends. The harpy must take a bonus action on its subsequent turns to continue singing. It can stop singing at any time. The song ends if the harpy is incapacitated.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/magic_resistance.json b/features/wip/magic_resistance.json new file mode 100644 index 0000000..2717e38 --- /dev/null +++ b/features/wip/magic_resistance.json @@ -0,0 +1,15 @@ +{ + "name": "magic resistance (feature)", + "text": "The archmage has advantage on saving throws against spells and other magical effects.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/magic_weapons.json b/features/wip/magic_weapons.json new file mode 100644 index 0000000..b71c784 --- /dev/null +++ b/features/wip/magic_weapons.json @@ -0,0 +1,15 @@ +{ + "name": "magic weapons (feature)", + "text": "The sphinx's weapon attacks are magical.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/martial_advantage.json b/features/wip/martial_advantage.json new file mode 100644 index 0000000..6677521 --- /dev/null +++ b/features/wip/martial_advantage.json @@ -0,0 +1,15 @@ +{ + "name": "martial advantage (feature)", + "text": "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 feet of an ally of the hobgoblin that isn't incapacitated.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/mimicry.json b/features/wip/mimicry.json new file mode 100644 index 0000000..84fab6e --- /dev/null +++ b/features/wip/mimicry.json @@ -0,0 +1,15 @@ +{ + "name": "mimicry (feature)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/misty_escape.json b/features/wip/misty_escape.json new file mode 100644 index 0000000..0433d1e --- /dev/null +++ b/features/wip/misty_escape.json @@ -0,0 +1,15 @@ +{ + "name": "misty escape (feature)", + "text": "When it drops to 0 hit points outside its resting place, the vampire transforms into a cloud of mist (as in the Shapechanger trait) instead of falling unconscious, provided that it isn't in sunlight or running water. If it can't transform, it is destroyed.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/moan.json b/features/wip/moan.json new file mode 100644 index 0000000..d78a097 --- /dev/null +++ b/features/wip/moan.json @@ -0,0 +1,15 @@ +{ + "name": "moan (action)", + "text": "Each creature within 60 feet of the cloaker that can hear its moan and that isn't an aberration must succeed on a DC 13 Wisdom saving throw or become frightened until the end of the cloaker's next turn. If a creature's saving throw is successful, the creature is immune to the cloaker's moan for the next 24 hours.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/move.json b/features/wip/move.json new file mode 100644 index 0000000..bd45f58 --- /dev/null +++ b/features/wip/move.json @@ -0,0 +1,15 @@ +{ + "name": "move (legendary_action)", + "text": "The vampire moves up to its speed without provoking opportunity attacks.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/mucous_cloud.json b/features/wip/mucous_cloud.json new file mode 100644 index 0000000..069425a --- /dev/null +++ b/features/wip/mucous_cloud.json @@ -0,0 +1,15 @@ +{ + "name": "mucous cloud (feature)", + "text": "While underwater, the aboleth is surrounded by transformative mucus. A creature that touches the aboleth or that hits it with a melee attack while within 5 feet of it must make a DC 14 Constitution saving throw. On a failure, the creature is diseased for 1d4 hours. The diseased creature can breathe only underwater.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/multiattack..json b/features/wip/multiattack..json new file mode 100644 index 0000000..8e9b93f --- /dev/null +++ b/features/wip/multiattack..json @@ -0,0 +1,15 @@ +{ + "name": "multiattack. (vampire form only) (action)", + "text": "The vampire makes two attacks, only one of which can be a bite attack.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/multiattack.json b/features/wip/multiattack.json new file mode 100644 index 0000000..0c17ce9 --- /dev/null +++ b/features/wip/multiattack.json @@ -0,0 +1,15 @@ +{ + "name": "multiattack (action)", + "text": "The assassin makes two shortsword attacks.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/multiple_heads.json b/features/wip/multiple_heads.json new file mode 100644 index 0000000..ddf4173 --- /dev/null +++ b/features/wip/multiple_heads.json @@ -0,0 +1,15 @@ +{ + "name": "multiple heads (feature)", + "text": "The hydra has five heads. While it has more than one head, the hydra has advantage on saving throws against being blinded, charmed, deafened, frightened, stunned, and knocked unconscious.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/nightmare_haunting.json b/features/wip/nightmare_haunting.json new file mode 100644 index 0000000..e69de29 diff --git a/features/wip/nimble_escape.json b/features/wip/nimble_escape.json new file mode 100644 index 0000000..69218e2 --- /dev/null +++ b/features/wip/nimble_escape.json @@ -0,0 +1,15 @@ +{ + "name": "nimble escape (feature)", + "text": "The goblin can take the Disengage or Hide action as a bonus action on each of its turns.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/ooze_cube.json b/features/wip/ooze_cube.json new file mode 100644 index 0000000..fee2d89 --- /dev/null +++ b/features/wip/ooze_cube.json @@ -0,0 +1,15 @@ +{ + "name": "ooze cube (feature)", + "text": "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 and has disadvantage on the saving throw.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/pack_tactics.json b/features/wip/pack_tactics.json new file mode 100644 index 0000000..0d35128 --- /dev/null +++ b/features/wip/pack_tactics.json @@ -0,0 +1,15 @@ +{ + "name": "pack tactics (feature)", + "text": "The warrior has advantage on an attack roll against a creature if at least one of the warrior's allies is within 5 feet of the creature and the ally isn't incapacitated.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/paralyzing_breath.json b/features/wip/paralyzing_breath.json new file mode 100644 index 0000000..d0e5328 --- /dev/null +++ b/features/wip/paralyzing_breath.json @@ -0,0 +1,15 @@ +{ + "name": "paralyzing breath (action)", + "text": "The dragon exhales paralyzing gas in a 60-foot cone. Each creature in that area must succeed on a DC 20 Constitution 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/paralyzing_touch.json b/features/wip/paralyzing_touch.json new file mode 100644 index 0000000..cd7004b --- /dev/null +++ b/features/wip/paralyzing_touch.json @@ -0,0 +1,15 @@ +{ + "name": "paralyzing touch (spell attack)", + "text": "+12 to hit, reach 5 ft. Hit: 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/parry.json b/features/wip/parry.json new file mode 100644 index 0000000..382b4bb --- /dev/null +++ b/features/wip/parry.json @@ -0,0 +1,15 @@ +{ + "name": "parry (reaction)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/petrifying_breath.json b/features/wip/petrifying_breath.json new file mode 100644 index 0000000..3a9f636 --- /dev/null +++ b/features/wip/petrifying_breath.json @@ -0,0 +1,15 @@ +{ + "name": "petrifying breath (recharge 5–6) (action)", + "text": "The gorgon exhales petrifying gas in a 30-foot cone. Each creature in that area must succeed on a DC 13 Constitution saving throw. On a failed save, a target begins to turn to stone and is restrained. The restrained target must repeat the saving throw at the end of its next turn. On a success, the effect ends on the target. On a failure, the target is petrified until freed by the greater restoration spell or other magic.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/petrifying_gaze.json b/features/wip/petrifying_gaze.json new file mode 100644 index 0000000..7c15a88 --- /dev/null +++ b/features/wip/petrifying_gaze.json @@ -0,0 +1,15 @@ +{ + "name": "petrifying gaze (feature)", + "text": "When a creature that can see the medusa's eyes starts its turn within 30 feet of the medusa, the medusa can force it to make a DC 14 Constitution saving throw if the medusa isn't incapacitated and can see the creature. If the saving throw fails by 5 or more, the creature is instantly petrified. Otherwise, a creature that fails the save begins to turn to stone and is restrained. The restrained creature must repeat the saving throw at the end of its next turn, becoming petrified on a failure or ending the effect on a success. The petrification lasts until the creature is freed by the greater restoration spell or other magic.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/phantasms.json b/features/wip/phantasms.json new file mode 100644 index 0000000..c5ed88e --- /dev/null +++ b/features/wip/phantasms.json @@ -0,0 +1,15 @@ +{ + "name": "phantasms (recharges after a short or long rest) (action)", + "text": "The cloaker magically creates three illusory duplicates of itself if it isn't in bright light. The duplicates move with it and mimic its actions, shifting position so as to make it impossible to track which cloaker is the real one. If the cloaker is ever in an area of bright light, the duplicates disappear.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/poison_breath.json b/features/wip/poison_breath.json new file mode 100644 index 0000000..fcb96f5 --- /dev/null +++ b/features/wip/poison_breath.json @@ -0,0 +1,15 @@ +{ + "name": "poison breath (recharge 5–6) (action)", + "text": "The dragon exhales poisonous gas in a 60‐foot cone. Each creature in 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/possession.json b/features/wip/possession.json new file mode 100644 index 0000000..c644567 --- /dev/null +++ b/features/wip/possession.json @@ -0,0 +1,15 @@ +{ + "name": "possession (recharge 6) (action)", + "text": "One humanoid that the ghost can see within 5 feet of it must succeed on a DC 13 Charisma saving throw or be possessed by the ghost; the ghost then disappears, and the target is incapacitated and loses control of its body. The ghost now controls the body but doesn't deprive the target of awareness. The ghost can't be targeted by any attack, spell, or other effect, except ones that turn undead, and it retains its alignment, Intelligence, Wisdom, Charisma, and immunity to being charmed and frightened. It otherwise uses the possessed target's statistics, but doesn't gain access to the target's knowledge, class features, or proficiencies.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/pounce.json b/features/wip/pounce.json new file mode 100644 index 0000000..cbc492b --- /dev/null +++ b/features/wip/pounce.json @@ -0,0 +1,15 @@ +{ + "name": "pounce (feature)", + "text": "If the tiger moves at least 20 feet straight toward a creature and then hits it with a claw 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 tiger can make one bite attack against it as a bonus action.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/probing_telepathy.json b/features/wip/probing_telepathy.json new file mode 100644 index 0000000..fc55177 --- /dev/null +++ b/features/wip/probing_telepathy.json @@ -0,0 +1,15 @@ +{ + "name": "probing telepathy (feature)", + "text": "If a creature communicates telepathically with the aboleth, the aboleth learns the creature's greatest desires if the aboleth can see the creature.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/psychic_drain.json b/features/wip/psychic_drain.json new file mode 100644 index 0000000..ed2750b --- /dev/null +++ b/features/wip/psychic_drain.json @@ -0,0 +1,15 @@ +{ + "name": "psychic drain (legendary_action)", + "text": "(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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/rampage.json b/features/wip/rampage.json new file mode 100644 index 0000000..9f340ba --- /dev/null +++ b/features/wip/rampage.json @@ -0,0 +1,15 @@ +{ + "name": "rampage (feature)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/reactive.json b/features/wip/reactive.json new file mode 100644 index 0000000..14f8ae1 --- /dev/null +++ b/features/wip/reactive.json @@ -0,0 +1,15 @@ +{ + "name": "reactive (feature)", + "text": "The marilith can take one reaction on every turn in a combat.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/reactive_heads.json b/features/wip/reactive_heads.json new file mode 100644 index 0000000..8cf453e --- /dev/null +++ b/features/wip/reactive_heads.json @@ -0,0 +1,15 @@ +{ + "name": "reactive heads (feature)", + "text": "For each head the hydra has beyond one, it gets an extra reaction that can be used only for opportunity attacks.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/read_thoughts.json b/features/wip/read_thoughts.json new file mode 100644 index 0000000..56bcf34 --- /dev/null +++ b/features/wip/read_thoughts.json @@ -0,0 +1,15 @@ +{ + "name": "read thoughts (action)", + "text": "The doppelganger magically reads the surface thoughts of one creature within 60 feet of it. The effect can penetrate barriers, but 3 feet of wood or dirt, 2 feet of stone, 2 inches of metal, or a thin sheet of lead blocks it. While the target is in range, the doppelganger can continue reading its thoughts, as long as the doppelganger's concentration isn't broken (as if concentrating on a spell). While reading the target's mind, the doppelganger has advantage on Wisdom (Insight) and Charisma (Deception, Intimidation, and Persuasion) checks against the target.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/reckless.json b/features/wip/reckless.json new file mode 100644 index 0000000..d50eb69 --- /dev/null +++ b/features/wip/reckless.json @@ -0,0 +1,15 @@ +{ + "name": "reckless (feature)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/reel.json b/features/wip/reel.json new file mode 100644 index 0000000..462bb3d --- /dev/null +++ b/features/wip/reel.json @@ -0,0 +1,15 @@ +{ + "name": "reel (action)", + "text": "The roper pulls each creature grappled by it up to 25 feet straight toward it.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/reflective_carapace.json b/features/wip/reflective_carapace.json new file mode 100644 index 0000000..8504fcd --- /dev/null +++ b/features/wip/reflective_carapace.json @@ -0,0 +1,15 @@ +{ + "name": "reflective carapace (feature)", + "text": "Any time the tarrasque is targeted by a **_magic missle_** spell, a line spell, or a spell that requires a ranged attack roll, roll a d6. On a 1 to 5, the tarrasque is unaffected. On a 6, the tarrasque is unaffected, and the effect is reflected back at the caster as though it originated from the tarrasque, turning the caster into the target.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/regeneration.json b/features/wip/regeneration.json new file mode 100644 index 0000000..f6f1a25 --- /dev/null +++ b/features/wip/regeneration.json @@ -0,0 +1,15 @@ +{ + "name": "regeneration (feature)", + "text": "The vampire regains 20 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 vampire takes radiant damage or damage from holy water, this trait doesn't function at the start of the vampire's next turn.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/rejuvenation.json b/features/wip/rejuvenation.json new file mode 100644 index 0000000..ec888d6 --- /dev/null +++ b/features/wip/rejuvenation.json @@ -0,0 +1,15 @@ +{ + "name": "rejuvenation (feature)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/relentless.json b/features/wip/relentless.json new file mode 100644 index 0000000..02b32eb --- /dev/null +++ b/features/wip/relentless.json @@ -0,0 +1,15 @@ +{ + "name": "relentless (recharges after a short or long rest) (feature)", + "text": "If the wereboar takes 14 damage or less that would reduce it to 0 hit points, it is reduced to 1 hit point instead.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/repulsion_breath.json b/features/wip/repulsion_breath.json new file mode 100644 index 0000000..17f6259 --- /dev/null +++ b/features/wip/repulsion_breath.json @@ -0,0 +1,15 @@ +{ + "name": "repulsion breath (action)", + "text": "The dragon exhales repulsion energy in a 30-foot 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/roar.json b/features/wip/roar.json new file mode 100644 index 0000000..e69de29 diff --git a/features/wip/rock_catching.json b/features/wip/rock_catching.json new file mode 100644 index 0000000..4e16005 --- /dev/null +++ b/features/wip/rock_catching.json @@ -0,0 +1,15 @@ +{ + "name": "rock catching (reaction)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/running_leap.json b/features/wip/running_leap.json new file mode 100644 index 0000000..d9e5b22 --- /dev/null +++ b/features/wip/running_leap.json @@ -0,0 +1,15 @@ +{ + "name": "running leap (feature)", + "text": "With a 10-foot running start, the lion can long jump up to 25 feet.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/rust_metal.json b/features/wip/rust_metal.json new file mode 100644 index 0000000..ac2abf6 --- /dev/null +++ b/features/wip/rust_metal.json @@ -0,0 +1,15 @@ +{ + "name": "rust metal (feature)", + "text": "Any nonmagical weapon made of metal that hits the rust monster corrodes. After dealing damage, the weapon takes a permanent and cumulative −1 penalty to damage rolls. If its penalty drops to −5, the weapon is destroyed. Nonmagical ammunition made of metal that hits the rust monster is destroyed after dealing damage.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/scare.json b/features/wip/scare.json new file mode 100644 index 0000000..e69de29 diff --git a/features/wip/searing_burst.json b/features/wip/searing_burst.json new file mode 100644 index 0000000..77c3baa --- /dev/null +++ b/features/wip/searing_burst.json @@ -0,0 +1,15 @@ +{ + "name": "searing burst (costs 2 actions) (legendary_action)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/second_roar.json b/features/wip/second_roar.json new file mode 100644 index 0000000..0084451 --- /dev/null +++ b/features/wip/second_roar.json @@ -0,0 +1,15 @@ +{ + "name": "second roar (action)", + "text": "Each creature that fails a DC 18 Wisdom saving throw is deafened and frightened for 1 minute. A frightened creature is paralyzed and can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/sense_magic.json b/features/wip/sense_magic.json new file mode 100644 index 0000000..2a3084a --- /dev/null +++ b/features/wip/sense_magic.json @@ -0,0 +1,15 @@ +{ + "name": "sense magic (feature)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/senses.json b/features/wip/senses.json new file mode 100644 index 0000000..4150c7e --- /dev/null +++ b/features/wip/senses.json @@ -0,0 +1,15 @@ +{ + "name": "senses (feature)", + "text": ". The pseudodragon has advantage on Wisdom (Perception) checks that rely on sight, hearing, or smell.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/shadow_stealth.json b/features/wip/shadow_stealth.json new file mode 100644 index 0000000..df3d476 --- /dev/null +++ b/features/wip/shadow_stealth.json @@ -0,0 +1,15 @@ +{ + "name": "shadow stealth (feature)", + "text": "While in dim light or darkness, the shadow can take the Hide action as a bonus action.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/shapechanger.json b/features/wip/shapechanger.json new file mode 100644 index 0000000..745cc7c --- /dev/null +++ b/features/wip/shapechanger.json @@ -0,0 +1,15 @@ +{ + "name": "shapechanger (feature)", + "text": "If the vampire isn't in sunlight or running water, it can use its action to polymorph into a Tiny bat or a Medium cloud of mist, or back into its true form.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/shark_telepathy.json b/features/wip/shark_telepathy.json new file mode 100644 index 0000000..48e4bb1 --- /dev/null +++ b/features/wip/shark_telepathy.json @@ -0,0 +1,15 @@ +{ + "name": "shark telepathy (feature)", + "text": "The sahuagin can magically command any shark within 120 feet of it, using a limited telepathy.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/shield.json b/features/wip/shield.json new file mode 100644 index 0000000..6d6eeed --- /dev/null +++ b/features/wip/shield.json @@ -0,0 +1,15 @@ +{ + "name": "shield (reaction)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/shielded_mind.json b/features/wip/shielded_mind.json new file mode 100644 index 0000000..e613ea6 --- /dev/null +++ b/features/wip/shielded_mind.json @@ -0,0 +1,15 @@ +{ + "name": "shielded mind (feature)", + "text": "The couatl is immune to scrying and to any effect that would sense its emotions, read its thoughts, or detect its location.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/shimmering_shield.json b/features/wip/shimmering_shield.json new file mode 100644 index 0000000..b148b7f --- /dev/null +++ b/features/wip/shimmering_shield.json @@ -0,0 +1,15 @@ +{ + "name": "shimmering shield (costs 2 actions) (legendary_action)", + "text": "The unicorn creates a shimmering, magical field around itself or another creature it can see within 60 feet of it. The target gains a +2 bonus to AC until the end of the unicorn's next turn.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/shock.json b/features/wip/shock.json new file mode 100644 index 0000000..0174364 --- /dev/null +++ b/features/wip/shock.json @@ -0,0 +1,15 @@ +{ + "name": "shock (spell attack)", + "text": "+4 to hit, reach 5 ft. Hit: 2d8 lightning damage.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/shriek.json b/features/wip/shriek.json new file mode 100644 index 0000000..ef14bab --- /dev/null +++ b/features/wip/shriek.json @@ -0,0 +1,15 @@ +{ + "name": "shriek (reaction)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/siege_monster.json b/features/wip/siege_monster.json new file mode 100644 index 0000000..37d911d --- /dev/null +++ b/features/wip/siege_monster.json @@ -0,0 +1,15 @@ +{ + "name": "siege monster (feature)", + "text": "The treant deals double damage to objects and structures.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/sleep_breath.json b/features/wip/sleep_breath.json new file mode 100644 index 0000000..f5d26f8 --- /dev/null +++ b/features/wip/sleep_breath.json @@ -0,0 +1,15 @@ +{ + "name": "sleep breath (action)", + "text": "The dragon exhales sleep gas in a 60-foot cone. Each creature in that area must succeed on a DC 18 Constitution saving 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/slow.json b/features/wip/slow.json new file mode 100644 index 0000000..7ae57dd --- /dev/null +++ b/features/wip/slow.json @@ -0,0 +1,15 @@ +{ + "name": "slow (recharge 5–6) (action)", + "text": "The golem targets one or more creatures it can see within 10 feet of it. Each target must make a DC 17 Wisdom saving throw against this magic. On a failed save, a target can't use reactions, its speed is halved, and it can't make more than one attack on its turn. In addition, the target can take either an action or a bonus action on its turn, not both. These effects last for 1 minute. A target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/slowing_breath.json b/features/wip/slowing_breath.json new file mode 100644 index 0000000..f63fb95 --- /dev/null +++ b/features/wip/slowing_breath.json @@ -0,0 +1,15 @@ +{ + "name": "slowing breath (action)", + "text": "The dragon exhales gas in a 60-foot cone. Each creature in that area must succeed on a DC 18 Constitution saving throw. On a failed save, the creature can't use reactions, its speed is halved, and it can't make more than one attack on its turn. In addition, the creature can use either an action or a bonus action on 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/sneak_attack.json b/features/wip/sneak_attack.json new file mode 100644 index 0000000..975a47f --- /dev/null +++ b/features/wip/sneak_attack.json @@ -0,0 +1,15 @@ +{ + "name": "sneak attack (feature)", + "text": "Once per turn, the assassin deals an extra 14 (4d6) damage when it hits a target with a weapon attack and has advantage on the attack roll, or when the target is within 5 feet of an ally of the assassin that isn't incapacitated and the assassin doesn't have disadvantage on the attack roll.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/snow_camouflage.json b/features/wip/snow_camouflage.json new file mode 100644 index 0000000..937bae5 --- /dev/null +++ b/features/wip/snow_camouflage.json @@ -0,0 +1,15 @@ +{ + "name": "snow camouflage (feature)", + "text": "The wolf has advantage on Dexterity (Stealth) checks made to hide in snowy terrain.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/speak_with_beasts_and_plants.json b/features/wip/speak_with_beasts_and_plants.json new file mode 100644 index 0000000..ac0be3a --- /dev/null +++ b/features/wip/speak_with_beasts_and_plants.json @@ -0,0 +1,15 @@ +{ + "name": "speak with beasts and plants (feature)", + "text": "The dryad can communicate with beasts and plants as if they shared a language.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/spell_storing.json b/features/wip/spell_storing.json new file mode 100644 index 0000000..21a794d --- /dev/null +++ b/features/wip/spell_storing.json @@ -0,0 +1,15 @@ +{ + "name": "spell storing (feature)", + "text": "A spellcaster who wears the shield guardian's amulet can cause the guardian to store one spell of 4th level or lower. To do so, the wearer must cast the spell on the guardian. The spell has no effect but is stored within the guardian. When commanded to do so by the wearer or when a situation arises that was predefined by the 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/spider_climb.json b/features/wip/spider_climb.json new file mode 100644 index 0000000..f692e30 --- /dev/null +++ b/features/wip/spider_climb.json @@ -0,0 +1,15 @@ +{ + "name": "spider climb (feature)", + "text": "The vampire can climb difficult surfaces, including upside down on ceilings, without needing to make an ability check.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/split.json b/features/wip/split.json new file mode 100644 index 0000000..05e9db2 --- /dev/null +++ b/features/wip/split.json @@ -0,0 +1,15 @@ +{ + "name": "split (reaction)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/spores.json b/features/wip/spores.json new file mode 100644 index 0000000..2c9fa10 --- /dev/null +++ b/features/wip/spores.json @@ -0,0 +1,15 @@ +{ + "name": "spores (recharge 6) (action)", + "text": "A 15­‐foot­‐radius cloud of toxic spores extends out from the vrock. The spores spread around corners. Each creature in that area must succeed on a DC 14 Constitution saving throw or become poisoned. While poisoned in this way, a target takes 5 (1d10) poison damage at the start of each of its turns. A target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success. Emptying a vial of holy water on the target also ends the effect on it.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/standing_leap.json b/features/wip/standing_leap.json new file mode 100644 index 0000000..8e96b76 --- /dev/null +++ b/features/wip/standing_leap.json @@ -0,0 +1,15 @@ +{ + "name": "standing leap (feature)", + "text": "The toad's long jump is up to 20 feet and its high jump is up to 10 feet, with or without a running start.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/steadfast.json b/features/wip/steadfast.json new file mode 100644 index 0000000..674288e --- /dev/null +++ b/features/wip/steadfast.json @@ -0,0 +1,15 @@ +{ + "name": "steadfast (feature)", + "text": "The devil can't be frightened while it can see an allied creature within 30 feet of it.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/steam_breath.json b/features/wip/steam_breath.json new file mode 100644 index 0000000..0f43f54 --- /dev/null +++ b/features/wip/steam_breath.json @@ -0,0 +1,15 @@ +{ + "name": "steam breath (recharge 6) (action)", + "text": "The mephit exhales a 15- foot cone of scalding steam. Each creature in that area must succeed on a DC 10 Dexterity saving throw, taking 4 (1d8) fire damage on a failed save, or half as much damage on a successful one.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/stench.json b/features/wip/stench.json new file mode 100644 index 0000000..da9d30b --- /dev/null +++ b/features/wip/stench.json @@ -0,0 +1,15 @@ +{ + "name": "stench (feature)", + "text": "Any creature that starts its turn within 10 feet of the hezrou must 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/stone_camouflage.json b/features/wip/stone_camouflage.json new file mode 100644 index 0000000..b7ca35b --- /dev/null +++ b/features/wip/stone_camouflage.json @@ -0,0 +1,15 @@ +{ + "name": "stone camouflage (feature)", + "text": "The giant has advantage on Dexterity (Stealth) checks made to hide in rocky terrain.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/stunning_screech.json b/features/wip/stunning_screech.json new file mode 100644 index 0000000..e69de29 diff --git a/features/wip/sunlight_sensitivity.json b/features/wip/sunlight_sensitivity.json new file mode 100644 index 0000000..334ef9e --- /dev/null +++ b/features/wip/sunlight_sensitivity.json @@ -0,0 +1,15 @@ +{ + "name": "sunlight sensitivity (feature)", + "text": "While in sunlight, the wraith has disadvantage on attack rolls, as well as on Wisdom (Perception) checks that rely on sight.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/sunlight_weakness.json b/features/wip/sunlight_weakness.json new file mode 100644 index 0000000..e3c1fae --- /dev/null +++ b/features/wip/sunlight_weakness.json @@ -0,0 +1,15 @@ +{ + "name": "sunlight weakness (feature)", + "text": "While in sunlight, the shadow has disadvantage on attack rolls, ability checks, and saving throws.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/sure-footed.json b/features/wip/sure-footed.json new file mode 100644 index 0000000..f964d16 --- /dev/null +++ b/features/wip/sure-footed.json @@ -0,0 +1,15 @@ +{ + "name": "sure-footed (feature)", + "text": "The goat has advantage on Strength and Dexterity saving throws made against effects that would knock it prone.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/surprise_attack.json b/features/wip/surprise_attack.json new file mode 100644 index 0000000..84a97f2 --- /dev/null +++ b/features/wip/surprise_attack.json @@ -0,0 +1,15 @@ +{ + "name": "surprise attack (feature)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/swallow.json b/features/wip/swallow.json new file mode 100644 index 0000000..48727ec --- /dev/null +++ b/features/wip/swallow.json @@ -0,0 +1,15 @@ +{ + "name": "swallow (action)", + "text": "The tarrasque makes one bite attack against a Large or smaller creature it is grappling. If the attack hits, the target takes the bite's damage, the target is swallowed, and the grapple ends. While swallowed, the creature is blinded and restrained, it has total cover against attacks and other effects outside the tarrasque, and it takes 56 (16d6) acid damage at the start of each of the tarrasque's turns.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/swarm.json b/features/wip/swarm.json new file mode 100644 index 0000000..86da157 --- /dev/null +++ b/features/wip/swarm.json @@ -0,0 +1,15 @@ +{ + "name": "swarm (feature)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/tail_attack.json b/features/wip/tail_attack.json new file mode 100644 index 0000000..f3cadb0 --- /dev/null +++ b/features/wip/tail_attack.json @@ -0,0 +1,15 @@ +{ + "name": "tail attack (legendary_action)", + "text": "The dragon makes a tail attack.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/tail_spike_regrowth.json b/features/wip/tail_spike_regrowth.json new file mode 100644 index 0000000..d9c4a75 --- /dev/null +++ b/features/wip/tail_spike_regrowth.json @@ -0,0 +1,15 @@ +{ + "name": "tail spike regrowth (feature)", + "text": "The manticore has twenty-four tail spikes. Used spikes regrow when the manticore finishes a long rest.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/tail_swipe.json b/features/wip/tail_swipe.json new file mode 100644 index 0000000..27dfc25 --- /dev/null +++ b/features/wip/tail_swipe.json @@ -0,0 +1,15 @@ +{ + "name": "tail swipe (legendary_action)", + "text": "The aboleth makes one tail attack.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/telepathic_bond.json b/features/wip/telepathic_bond.json new file mode 100644 index 0000000..035952f --- /dev/null +++ b/features/wip/telepathic_bond.json @@ -0,0 +1,15 @@ +{ + "name": "telepathic bond (feature)", + "text": "The fiend ignores the range restriction on its telepathy when communicating with a creature it has charmed. The two don't even need to be on the same plane of existence.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/teleport.json b/features/wip/teleport.json new file mode 100644 index 0000000..900bc68 --- /dev/null +++ b/features/wip/teleport.json @@ -0,0 +1,15 @@ +{ + "name": "teleport (costs 2 actions) (legendary_action)", + "text": "The sphinx magically teleports, along with any equipment it is wearing or carrying, up to 120 feet to an unoccupied space it can see.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/tentacle_attack_or_fling.json b/features/wip/tentacle_attack_or_fling.json new file mode 100644 index 0000000..5044187 --- /dev/null +++ b/features/wip/tentacle_attack_or_fling.json @@ -0,0 +1,15 @@ +{ + "name": "tentacle attack or fling (legendary_action)", + "text": "The kraken makes one tentacle attack or uses its Fling.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/tentacle_slam.json b/features/wip/tentacle_slam.json new file mode 100644 index 0000000..00cef67 --- /dev/null +++ b/features/wip/tentacle_slam.json @@ -0,0 +1,15 @@ +{ + "name": "tentacle slam (action)", + "text": "The otyugh slams creatures grappled by it into each other or a solid surface. Each creature must succeed on a DC 14 Constitution saving throw or take 10 (2d6 + 3) bludgeoning damage and be stunned until the end of the otyugh's next turn. On a successful save, the target takes half the bludgeoning damage and isn't stunned.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/tentacles.json b/features/wip/tentacles.json new file mode 100644 index 0000000..04c5b73 --- /dev/null +++ b/features/wip/tentacles.json @@ -0,0 +1,15 @@ +{ + "name": "tentacles (action)", + "text": "One creature grappled by the chuul must succeed on a DC 13 Constitution saving throw or be poisoned for 1 minute. Until this poison ends, the target is paralyzed. The target can repeat the saving throw at the end of each of its turns, ending the effect on itself on a success.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/third_roar.json b/features/wip/third_roar.json new file mode 100644 index 0000000..1da7e85 --- /dev/null +++ b/features/wip/third_roar.json @@ -0,0 +1,15 @@ +{ + "name": "third roar (action)", + "text": "Each creature makes a DC 18 Constitution saving throw. On 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/trampling_charge.json b/features/wip/trampling_charge.json new file mode 100644 index 0000000..32d35e5 --- /dev/null +++ b/features/wip/trampling_charge.json @@ -0,0 +1,15 @@ +{ + "name": "trampling charge (feature)", + "text": "If the horse moves at least 20 feet 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/transparent.json b/features/wip/transparent.json new file mode 100644 index 0000000..942835b --- /dev/null +++ b/features/wip/transparent.json @@ -0,0 +1,15 @@ +{ + "name": "transparent (feature)", + "text": "Even when the cube is in plain sight, it takes a successful DC 15 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/treasure_sense.json b/features/wip/treasure_sense.json new file mode 100644 index 0000000..7a18bb7 --- /dev/null +++ b/features/wip/treasure_sense.json @@ -0,0 +1,15 @@ +{ + "name": "treasure sense (feature)", + "text": "The xorn can pinpoint, by scent, the location of precious metals and stones, such as coins and gems, within 60 feet of it.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/tree_stride.json b/features/wip/tree_stride.json new file mode 100644 index 0000000..e78186a --- /dev/null +++ b/features/wip/tree_stride.json @@ -0,0 +1,15 @@ +{ + "name": "tree stride (feature)", + "text": "Once on her turn, the dryad can use 10 feet of her movement to step magically into one living tree within her reach and emerge from a second living tree within 60 feet of the first tree, appearing in an unoccupied space within 5 feet of the second tree. Both trees must be Large or bigger.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/tunneler.json b/features/wip/tunneler.json new file mode 100644 index 0000000..a1dd416 --- /dev/null +++ b/features/wip/tunneler.json @@ -0,0 +1,15 @@ +{ + "name": "tunneler (feature)", + "text": "The worm can burrow through solid rock at half its burrow speed and leaves a 10-foot-diameter tunnel in its wake.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/turn_resistance.json b/features/wip/turn_resistance.json new file mode 100644 index 0000000..e191cf8 --- /dev/null +++ b/features/wip/turn_resistance.json @@ -0,0 +1,15 @@ +{ + "name": "turn resistance (feature)", + "text": "The lich has advantage on saving throws against any effect that turns undead.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/turning_defiance.json b/features/wip/turning_defiance.json new file mode 100644 index 0000000..286fc8f --- /dev/null +++ b/features/wip/turning_defiance.json @@ -0,0 +1,15 @@ +{ + "name": "turning defiance (feature)", + "text": "The ghast and any ghouls within 30 feet of it have advantage on saving throws against effects that turn undead.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/two-headed.json b/features/wip/two-headed.json new file mode 100644 index 0000000..92f8b25 --- /dev/null +++ b/features/wip/two-headed.json @@ -0,0 +1,15 @@ +{ + "name": "two-headed (feature)", + "text": "The dog has advantage on Wisdom (Perception) checks and on saving throws against being blinded, charmed, deafened, frightened, stunned, or knocked unconscious.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/two_heads.json b/features/wip/two_heads.json new file mode 100644 index 0000000..d93a87f --- /dev/null +++ b/features/wip/two_heads.json @@ -0,0 +1,15 @@ +{ + "name": "two heads (feature)", + "text": "The ettin has advantage on Wisdom (Perception) checks and on saving throws against being blinded, charmed, deafened, frightened, stunned, and knocked unconscious.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/unarmed_strike.json b/features/wip/unarmed_strike.json new file mode 100644 index 0000000..ddba1c5 --- /dev/null +++ b/features/wip/unarmed_strike.json @@ -0,0 +1,15 @@ +{ + "name": "unarmed strike (legendary_action)", + "text": "The vampire makes one unarmed strike.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/undead_fortitude.json b/features/wip/undead_fortitude.json new file mode 100644 index 0000000..e840ab3 --- /dev/null +++ b/features/wip/undead_fortitude.json @@ -0,0 +1,15 @@ +{ + "name": "undead fortitude (feature)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/underwater_camouflage.json b/features/wip/underwater_camouflage.json new file mode 100644 index 0000000..4990715 --- /dev/null +++ b/features/wip/underwater_camouflage.json @@ -0,0 +1,15 @@ +{ + "name": "underwater camouflage (feature)", + "text": "The octopus has advantage on Dexterity (Stealth) checks made while underwater.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/unnerving_mask.json b/features/wip/unnerving_mask.json new file mode 100644 index 0000000..c8958e1 --- /dev/null +++ b/features/wip/unnerving_mask.json @@ -0,0 +1,15 @@ +{ + "name": "unnerving mask (reaction)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/vampire_weaknesses.json b/features/wip/vampire_weaknesses.json new file mode 100644 index 0000000..a60bd30 --- /dev/null +++ b/features/wip/vampire_weaknesses.json @@ -0,0 +1,15 @@ +{ + "name": "vampire weaknesses (feature)", + "text": "The vampire has the following flaws:", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/variable_illumination.json b/features/wip/variable_illumination.json new file mode 100644 index 0000000..f11b9cb --- /dev/null +++ b/features/wip/variable_illumination.json @@ -0,0 +1,15 @@ +{ + "name": "variable illumination (feature)", + "text": "The will-o'-wisp sheds bright light in a 5- to 20-foot radius and dim light for an additional number of feet equal to the chosen radius. The will-o'-wisp can alter the radius as a bonus action.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/wakeful.json b/features/wip/wakeful.json new file mode 100644 index 0000000..627c491 --- /dev/null +++ b/features/wip/wakeful.json @@ -0,0 +1,15 @@ +{ + "name": "wakeful (feature)", + "text": "When one of the ettin's heads is asleep, its other head is awake.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/wall_of_ice.json b/features/wip/wall_of_ice.json new file mode 100644 index 0000000..65565f0 --- /dev/null +++ b/features/wip/wall_of_ice.json @@ -0,0 +1,15 @@ +{ + "name": "wall of ice (recharge 6) (action)", + "text": "The devil magically forms an opaque wall of ice on a solid surface it can see within 60 feet of it. The wall is 1 foot thick and up to 30 feet long and 10 feet high, or it's a hemispherical dome up to 20 feet in diameter.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/water_breathing.json b/features/wip/water_breathing.json new file mode 100644 index 0000000..3167210 --- /dev/null +++ b/features/wip/water_breathing.json @@ -0,0 +1,15 @@ +{ + "name": "water breathing (feature)", + "text": "The shark can breathe only underwater.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/water_form.json b/features/wip/water_form.json new file mode 100644 index 0000000..7686901 --- /dev/null +++ b/features/wip/water_form.json @@ -0,0 +1,15 @@ +{ + "name": "water form (feature)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/water_susceptibility.json b/features/wip/water_susceptibility.json new file mode 100644 index 0000000..cb16f42 --- /dev/null +++ b/features/wip/water_susceptibility.json @@ -0,0 +1,15 @@ +{ + "name": "water susceptibility (feature)", + "text": "For every 5 feet the elemental moves in water, or for every gallon of water splashed on it, it takes 1 cold damage.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/weakening_breath.json b/features/wip/weakening_breath.json new file mode 100644 index 0000000..281d302 --- /dev/null +++ b/features/wip/weakening_breath.json @@ -0,0 +1,15 @@ +{ + "name": "weakening breath (action)", + "text": "The dragon exhales gas in a 60-foot cone. Each creature in that area must succeed on a DC 21 Strength saving throw or have disadvantage on Strength-based attack rolls, Strength checks, and 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/web_sense.json b/features/wip/web_sense.json new file mode 100644 index 0000000..9767c9a --- /dev/null +++ b/features/wip/web_sense.json @@ -0,0 +1,15 @@ +{ + "name": "web sense (feature)", + "text": "While in contact with a web, the spider knows the exact location of any other creature in contact with the same web.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/web_walker.json b/features/wip/web_walker.json new file mode 100644 index 0000000..7764955 --- /dev/null +++ b/features/wip/web_walker.json @@ -0,0 +1,15 @@ +{ + "name": "web walker (feature)", + "text": "The spider ignores movement restrictions caused by webbing.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/whelm.json b/features/wip/whelm.json new file mode 100644 index 0000000..78532ea --- /dev/null +++ b/features/wip/whelm.json @@ -0,0 +1,15 @@ +{ + "name": "whelm (recharge 4–6) (action)", + "text": "Each creature in the elemental's space must make a DC 15 Strength saving throw. On a failure, a target takes 13 (2d8 + 4) bludgeoning damage. If it is Large or smaller, it is also grappled (escape DC 14). Until this grapple ends, the target is restrained and unable to breathe unless it can breathe water. If the saving throw is successful, the target is pushed out of the elemental's space.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/whirlwind.json b/features/wip/whirlwind.json new file mode 100644 index 0000000..e1e676f --- /dev/null +++ b/features/wip/whirlwind.json @@ -0,0 +1,15 @@ +{ + "name": "whirlwind (recharge 4–6) (action)", + "text": "Each creature in the elemental's space must make a DC 13 Strength saving throw. On a failure, a target takes 15 (3d8 + 2) bludgeoning damage and is flung up 20 feet away from the elemental in a random direction and knocked prone. If a thrown target strikes an object, such as a wall or floor, the target takes 3 (1d6) bludgeoning damage for every 10 feet it was thrown. If the target is thrown at another creature, that creature must succeed on a DC 13 Dexterity saving throw or take the same damage and be knocked prone.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/whirlwind_of_sand.json b/features/wip/whirlwind_of_sand.json new file mode 100644 index 0000000..094ea48 --- /dev/null +++ b/features/wip/whirlwind_of_sand.json @@ -0,0 +1,15 @@ +{ + "name": "whirlwind of sand (costs 2 actions) (legendary_action)", + "text": "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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/features/wip/wing_attack.json b/features/wip/wing_attack.json new file mode 100644 index 0000000..2807e91 --- /dev/null +++ b/features/wip/wing_attack.json @@ -0,0 +1,15 @@ +{ + "name": "wing attack (costs 2 actions) (legendary_action)", + "text": "The dragon beats its wings. Each creature within 15 feet 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.", + "subfeatures": [ + { + "trigger": [], + "conditions": [], + "effects": [{ + "target": "", + "effect": [], + "duration": "" + }] + } + ] +} diff --git a/featuresNotes.txt b/featuresNotes.txt deleted file mode 100644 index 2424e81..0000000 --- a/featuresNotes.txt +++ /dev/null @@ -1,126 +0,0 @@ -Features can do various things, both passively and actively. - -Nouns: - * Self - * Any creature - * Single target - * All in AOE - * Any object - * Any structure - * Specific object - * Point in space - -Triggers by Noun (N): - * Passive (always acting) - * N takes special action / bns action / free action (granted by feature) - * N start of turn - * N takes damage - * N makes check against N - * N forces N to save - * N rolls a d20 - * N targets N by spell - * N attacks N - * N hits N - * N moves - * N dies - * N touches N - -Conditions on some number of Nouns (N) (can be negated): - * N has property PROPERTY - * N is hostile to N - * N is allied to N - * N wishes it to be so - * N succeeds roll by at least X - * N fails roll by at least X - * N is within radius of N - * N can see N - * N in antimagic field - * N has completed >= X turns - * N doesn't have full hp - * N has >= X hp - * Damage received by N >= X - * Damage received by N was a critical hit - * Damage received by N was type X - * N is alive - * N has condition X (given by N) - * N and N are on same plane of existence - * N on specific plane - * N moved X distance straight toward N - * N has X movement remaining - * N made specific attack - * N without underside exposed - * First time N uses feature on N during turn - * N is flying - * N has X spell cast on it - * N has spell with X property on it - * N is on X terrain/surface - * N is inside an object - * N is in X lighting (sunlight, dim light, darkness, magical darkness) - * N can understand at least 1 language - * N and N share a language - * N has >= X heads - * N is intact - * N has spell slots remaining - * N had advantage - * N had disadvantage - * N used a weapon - * N is surprised - * N is bound by N (aka, N is N's master) - * N is aware of N - * N is in same web as N - -Effects for given N: - * Delayed effect (effect takes place after a duration) - * Modify movement speed - * Modify jump distance - * Modify jump height - * Acquire condition CONDITION - * Ends condition CONDITION - * Acquire/override property PROPERTY (see propertiesNotes.txt) - * Death - * Surprised - * Pushed X feet in DIRECTION direction - * Immune to feature FEATURE - * Immune to spells with trait SPELL_TRAIT - * Make terrain difficult - * Disadvantage on rolls ROLL_CLASS - * Advantage on rolls ROLL_CLASS - * Automatic fail on rolls ROLL_CLASS - * Automatic succeed on rolls ROLL_CLASS - * Automatic critical hit - * Move X distance - * Can move through creatures/objects as difficult terrain - * Deal X damage - * Disable other feature - * Know distance/direction to creature/object within X distance - * Reduce incoming damage by X - * Regain X hp - * Weapon/armor corrodes - * Ignite flammable objects - * Expend spell slot - * Special movement - * Plane shift - * Grant spell effect - * Transparency (perpetual hidenness?) - * Prescribed actions (randomized), any of: - - Nothing - - Moves in random direction - - Attacks random creature within reach - * Telepathic command - * Learns creature's desires - * Spell storing - * Creates X diameter tunnel - -Effect duration: - * Set time (e.g., end of turn, start of next turn, end of next turn, 1 min...) - * Repeated saves - * Repeated saves at advantage/disadvantage with condition - * Until action is taken to douse - * Until certain spell is cast - * Until other effect expires - -Feature recharge: - * Permenant - * X/turn - * X/lr - * X/sr diff --git a/propertiesNotes.txt b/propertiesNotes.txt deleted file mode 100644 index 4d9f117..0000000 --- a/propertiesNotes.txt +++ /dev/null @@ -1,46 +0,0 @@ -There are some "features" that we reorganize into "properties". - -Properties inherited from other rules: - * Damage immunities, resistances, vulnerabilities - * Condition immunities - -Other properties: - * Can regain HP (default=True) - * Can stop in hostile space (default=False) - * Minimum space to move without squeezing (default=calc based on size) - * Can breathe air (default=True) - * Can breathe water (default=False) - * Can hold breath for X time (default=calc based on constitution) - * Carrying capacity size is X (default=creature size) - * Berserk (default=False) - * Is telepathic (default=False) - * Is one-way telepathic (default=False) - * Dash action type (default=action) - * Disengage action type (default=action) - * Hide action type (default=action) - * Can see in magical darkness (default=False) - * Can see ethereal (default=False) - * Autodetects lies (default=False) - * Leaves a corpse (default=True) - * Can hold inventory (default=True) - * Appears as mundane object OBJECT when still (default=False) - * Immune to spell tag TAG - * Does not provoke opportunity attacks (default=False) - * Ignores difficult terrain (default=False) - * Can pass through creatures/objects as difficult terrain (default=False) - * Ignores webs (default=False) - * Reactions/round (default=1) - * Sheds bright light radius X and dim light radius Y (default=0,0) - * Has perfect map recall (default=False) - * Mimic sounds/voices insight DC (default=Performance/Deception) - * Can speak with beasts (default=False) - * Can speak with plants (default=False) - * Can spider climb (default=False) - * Is hot (water boils/evaporates) (default=False) - * Form (default=True Form) - * Size (default=read from statblock) - * Can smell (default=True) - * Alignment (default=NN) - * Is incapacitated by antimagic field (default=False) - * Is alive (default=True) - * Is berserk (default=False) diff --git a/src/armor.cc b/src/armor.cc index 3a429b3..cb73cb1 100644 --- a/src/armor.cc +++ b/src/armor.cc @@ -13,10 +13,8 @@ namespace entry{ std::string armor_type; int strength; bool disadvantage; - int cost; - double weight; }; - NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(armorImpl, ac, armor_type, strength, disadvantage, cost, weight); + NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(armorImpl, ac, armor_type, strength, disadvantage); NLOHMANN_FRIEND_DEFS(Item, Armor, data); @@ -26,8 +24,6 @@ namespace entry{ std::string Armor::getArmorType(void) const {return data->armor_type;} int Armor::getStrRequirement(void) const {return data->strength;} bool Armor::stealthDisadvantage(void) const {return data->disadvantage;} - int Armor::getCost(void) const {return data->cost;} - double Armor::getWeight(void) const {return data->weight;} string getTextHelper(const Armor& a, string dexBonusLight, string dexBonusMedium) { stringstream text; @@ -43,7 +39,7 @@ namespace entry{ if(a.stealthDisadvantage()) { text << ", Imposes stealth disadvantage"; } - text << ". " << a.Substantial::getText(); + text << ". " << a.getCostWeightText(); return text.str(); } diff --git a/src/armor.h b/src/armor.h index c8bdb87..43bd002 100644 --- a/src/armor.h +++ b/src/armor.h @@ -5,15 +5,13 @@ namespace entry { struct armorImpl; - class Armor : public Item , public Substantial { + class Armor : public Item { public: Armor(); int getACBonus(void) const; std::string getArmorType(void) const; int getStrRequirement(void) const; bool stealthDisadvantage(void) const; - int getCost(void) const; - double getWeight(void) const; virtual std::string getText() const override; virtual std::string getText(const creature::Creature& c) const override; diff --git a/src/battlescape/battlescape.h b/src/battlescape/battlescape.h new file mode 100644 index 0000000..a170ad3 --- /dev/null +++ b/src/battlescape/battlescape.h @@ -0,0 +1,50 @@ +#pragma once +#include +#include +#include +#include +#include +#include // size_t +#include "../entry.h" + +namespace battlescape { + struct battlescapeImpl; + + struct Tile { + std::string name; + std::string description; + char look; + int color; + }; + NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Tile, name, description, look, color); + + typedef std::tuple coord3d; + + class Battlescape { + public: + Battlescape(); + // Also can be created programmatically + Battlescape(std::vector>> terrain); + + // Getters + std::map, coord3d> getContents(void) const; + + // Setters + bool place(std::shared_ptr thing, const coord3d& position); + bool remove(std::shared_ptr thing, const coord3d& position); + bool move(std::shared_ptr thing, const coord3d& from, const coord3d& to) { + if(place(thing, to)) { + if(remove(thing, from)) { + return true; + } + remove(thing, to); + } + return false; + } + + NLOHMANN_FRIEND_DECLARES(Battlescape); + + private: + std::shared_ptr data; + }; +} diff --git a/src/features/feature.cc b/src/features/feature.cc index 0fd2d6c..a941ecf 100644 --- a/src/features/feature.cc +++ b/src/features/feature.cc @@ -2,8 +2,10 @@ #include "../spellcasting.h" #include "../attack.h" #include "../utils.h" +#include "../creature.h" #include #include +#include using namespace std; diff --git a/src/item.cc b/src/item.cc index 5ecdb0c..24498db 100644 --- a/src/item.cc +++ b/src/item.cc @@ -20,10 +20,24 @@ namespace entry { } else if(data["type"] == "armor") { return utils::loadDFromJson(data); } - return shared_ptr(new Item(data)); + return utils::loadDFromJson(data); } - string Substantial::getText() const { + struct itemImpl { + int cost; + double weight; + }; + NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(itemImpl, cost, weight); + + NLOHMANN_FRIEND_DEFS(Entry, Item, data); + + Item::Item() : data(new itemImpl()) {} + + int Item::getCost() const {return data->cost;} + + double Item::getWeight() const {return data->weight;} + + string Item::getCostWeightText() const { stringstream text; if(getCost() >= 0) { text << "Cost: "; @@ -39,4 +53,12 @@ namespace entry { } return text.str(); } + + string Item::getText() const { + return Entry::getText() + " " + getCostWeightText(); + } + + string Item::getText(const creature::Creature& c) const { + return getText(); + } } diff --git a/src/item.h b/src/item.h index fc43a40..e8a40b9 100644 --- a/src/item.h +++ b/src/item.h @@ -4,17 +4,21 @@ #include namespace entry { + struct itemImpl; + class Item : public Entry { public: + Item(); static std::shared_ptr create(const nlohmann::json& data); virtual ~Item() {} - }; + virtual int getCost(void) const; + virtual double getWeight(void) const; + virtual std::string getCostWeightText() const; + virtual std::string getText() const override; + virtual std::string getText(const creature::Creature& c) const override; - class Substantial { - public: - virtual int getCost(void) const = 0; - virtual double getWeight(void) const = 0; - std::string getText() const; - virtual ~Substantial() {} + NLOHMANN_FRIEND_DECLARES(Item); + private: + std::shared_ptr data; }; } diff --git a/src/settings.cc b/src/settings.cc index ba15945..f8bc8b5 100644 --- a/src/settings.cc +++ b/src/settings.cc @@ -5,6 +5,7 @@ #include #include #include +#include namespace settings { std::string getString(const std::string& key) { diff --git a/src/utils.h b/src/utils.h index 2998704..9d22a66 100644 --- a/src/utils.h +++ b/src/utils.h @@ -67,7 +67,7 @@ namespace utils { ent = entry::Entry::create(loadJson(path)); } catch(std::exception& e) { if(std::filesystem::directory_entry(path).exists()) { - throw std::runtime_error("Invalid json: " + path.string()); + throw std::runtime_error("Invalid json: " + path.string() + ": " + e.what()); } else { throw std::runtime_error("No such file nor directory: " + path.string()); } diff --git a/src/weapon.cc b/src/weapon.cc index e5f04f2..4c47d8b 100644 --- a/src/weapon.cc +++ b/src/weapon.cc @@ -16,14 +16,12 @@ namespace entry { std::string weapon_type; std::pair range; int reach; - int cost; - double weight; std::optional toHitOverride; std::optional dmgBonusOverride; std::optional abilityOverride; }; - NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(weaponImpl, damage, properties, weapon_type, range, reach, cost, weight, toHitOverride, dmgBonusOverride, abilityOverride); + NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(weaponImpl, damage, properties, weapon_type, range, reach, toHitOverride, dmgBonusOverride, abilityOverride); NLOHMANN_FRIEND_DEFS(Item, Weapon, data); @@ -34,8 +32,6 @@ namespace entry { std::string Weapon::getWeaponType(void) const {return data->weapon_type;} std::pair Weapon::getRange(void) const {return data->range;} int Weapon::getReach(void) const {return data->reach;} - int Weapon::getCost(void) const {return data->cost;} - double Weapon::getWeight(void) const {return data->weight;} string getTextHelper(const Weapon& w, string toHitBonus, string damageBonus) { stringstream text; @@ -99,8 +95,8 @@ namespace entry { if(! props.empty()) { text << " Additional properties: " << utils::join(props, ", ") << "."; } - if(! w.Substantial::getText().empty()) { - text << " " << w.Substantial::getText(); + if(! w.getCostWeightText().empty()) { + text << " " << w.getCostWeightText(); } return text.str(); } diff --git a/src/weapon.h b/src/weapon.h index 49de396..dc81689 100644 --- a/src/weapon.h +++ b/src/weapon.h @@ -29,7 +29,7 @@ namespace entry { }; NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Damage, dmg_die_count, dmg_die_sides, dmg_type, is_or); - class Weapon : public Item, public Substantial { + class Weapon : public Item { public: Weapon(); @@ -38,8 +38,6 @@ namespace entry { std::string getWeaponType(void) const; std::pair getRange(void) const; int getReach(void) const; - int getCost(void) const; - double getWeight(void) const; int getToHitBonus(const creature::Creature& c) const; int getDamageBonus(const creature::Creature& c) const; -- cgit v1.2.3