diff --git a/data/spells/abundant_ammunition.json b/data/spells/abundant_ammunition.json index cc415af..94e97cf 100644 --- a/data/spells/abundant_ammunition.json +++ b/data/spells/abundant_ammunition.json @@ -2,6 +2,7 @@ "name": "Abundant Ammunition", "level": 1, "school": "conjuration", + "components": "V, S, M/DF", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/acid_arrow.json b/data/spells/acid_arrow.json index 667de8a..d5914ba 100644 --- a/data/spells/acid_arrow.json +++ b/data/spells/acid_arrow.json @@ -2,6 +2,7 @@ "name": "Acid Arrow", "level": 2, "school": "evocation", + "components": "V, S, M, F", "range": "long", "save": "none", "base_dc": 10, diff --git a/data/spells/acid_splash.json b/data/spells/acid_splash.json index dd0ba81..09fff66 100644 --- a/data/spells/acid_splash.json +++ b/data/spells/acid_splash.json @@ -2,6 +2,7 @@ "name": "Acid Splash", "level": 0, "school": "conjuration", + "components": "V, S", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/aid.json b/data/spells/aid.json index 5ba46cd..42f808d 100644 --- a/data/spells/aid.json +++ b/data/spells/aid.json @@ -2,6 +2,7 @@ "name": "Aid", "level": 2, "school": "enchantment", + "components": "V, S, DF", "range": "touch", "save": "none", "base_dc": 10, diff --git a/data/spells/air_bubble.json b/data/spells/air_bubble.json index 351feaa..d733a4d 100644 --- a/data/spells/air_bubble.json +++ b/data/spells/air_bubble.json @@ -2,6 +2,7 @@ "name": "Air Bubble", "level": 1, "school": "conjuration", + "components": "S, M/DF", "range": "touch", "save": "none", "base_dc": 10, diff --git a/data/spells/alarm.json b/data/spells/alarm.json index d7f2e68..d87266d 100644 --- a/data/spells/alarm.json +++ b/data/spells/alarm.json @@ -2,6 +2,7 @@ "name": "Alarm", "level": 1, "school": "abjuration", + "components": "V, S, F/DF", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/arcane_mark.json b/data/spells/arcane_mark.json index 51afc42..efc00a2 100644 --- a/data/spells/arcane_mark.json +++ b/data/spells/arcane_mark.json @@ -2,6 +2,7 @@ "name": "Arcane Mark", "level": 0, "school": "universal", + "components": "V, S", "range": "touch", "save": "none", "base_dc": 10, diff --git a/data/spells/bane.json b/data/spells/bane.json index 773ab80..b8e1868 100644 --- a/data/spells/bane.json +++ b/data/spells/bane.json @@ -2,6 +2,7 @@ "name": "Bane", "level": 1, "school": "enchantment", + "components": "V, S, DF", "range": "medium", "save": "will", "base_dc": 10, diff --git a/data/spells/bears_endurance.json b/data/spells/bears_endurance.json index a030d4a..690aa11 100644 --- a/data/spells/bears_endurance.json +++ b/data/spells/bears_endurance.json @@ -2,6 +2,7 @@ "name": "Bear's Endurance", "level": 2, "school": "transmutation", + "components": "V, S, M/DF", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/bladed_dash.json b/data/spells/bladed_dash.json index b020037..ba73ef9 100644 --- a/data/spells/bladed_dash.json +++ b/data/spells/bladed_dash.json @@ -2,6 +2,7 @@ "name": "Bladed Dash", "level": 2, "school": "transmutation", + "components": "V", "range": "personal", "save": "none", "base_dc": 10, diff --git a/data/spells/bleed.json b/data/spells/bleed.json index 8fc9dc7..f6ca507 100644 --- a/data/spells/bleed.json +++ b/data/spells/bleed.json @@ -2,6 +2,7 @@ "name": "Bleed", "level": 0, "school": "necromancy", + "components": "V, S", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/bless.json b/data/spells/bless.json index 4c5dacf..93dc2ec 100644 --- a/data/spells/bless.json +++ b/data/spells/bless.json @@ -2,6 +2,7 @@ "name": "Bless", "level": 1, "school": "enchantment", + "components": "V, S, DF", "range": "medium", "save": "none", "base_dc": 10, diff --git a/data/spells/blindness_deafness.json b/data/spells/blindness_deafness.json index 76fe84a..b22adf5 100644 --- a/data/spells/blindness_deafness.json +++ b/data/spells/blindness_deafness.json @@ -2,6 +2,7 @@ "name": "Blindness/Deafness", "level": 2, "school": "necromancy", + "components": "V", "range": "medium", "save": "fort", "base_dc": 10, diff --git a/data/spells/bulls_strength.json b/data/spells/bulls_strength.json index a4fd42e..916c673 100644 --- a/data/spells/bulls_strength.json +++ b/data/spells/bulls_strength.json @@ -2,6 +2,7 @@ "name": "Bull's Strength", "level": 2, "school": "transmutation", + "components": "V, S, M/DF", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/burning_hands.json b/data/spells/burning_hands.json index c088e7c..1e58cfb 100644 --- a/data/spells/burning_hands.json +++ b/data/spells/burning_hands.json @@ -2,6 +2,7 @@ "name": "Burning Hands", "level": 1, "school": "evocation", + "components": "V, S", "range": "close", "save": "ref", "base_dc": 10, diff --git a/data/spells/charm_person.json b/data/spells/charm_person.json index bfa6b86..b4b1271 100644 --- a/data/spells/charm_person.json +++ b/data/spells/charm_person.json @@ -2,6 +2,7 @@ "name": "Charm Person", "level": 1, "school": "enchantment", + "components": "V, S", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/color_spray.json b/data/spells/color_spray.json index 1640f1e..f1170be 100644 --- a/data/spells/color_spray.json +++ b/data/spells/color_spray.json @@ -2,6 +2,7 @@ "name": "Color Spray", "level": 1, "school": "illusion", + "components": "V, S, M", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/comprehend_languages.json b/data/spells/comprehend_languages.json index 274eeb7..c3ce708 100644 --- a/data/spells/comprehend_languages.json +++ b/data/spells/comprehend_languages.json @@ -2,6 +2,7 @@ "name": "Comprehend Languages", "level": 1, "school": "divination", + "components": "V, S, M/DF", "range": "personal", "save": "none", "base_dc": 10, diff --git a/data/spells/create_water.json b/data/spells/create_water.json index 2caf38c..1524cb8 100644 --- a/data/spells/create_water.json +++ b/data/spells/create_water.json @@ -2,6 +2,7 @@ "name": "Create Water", "level": 0, "school": "conjuration", + "components": "V, S", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/cure_light_wounds.json b/data/spells/cure_light_wounds.json index b8bff8a..fb5c876 100644 --- a/data/spells/cure_light_wounds.json +++ b/data/spells/cure_light_wounds.json @@ -2,6 +2,7 @@ "name": "Cure Light Wounds", "level": 1, "school": "conjuration", + "components": "V, S", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/cure_moderate_wounds.json b/data/spells/cure_moderate_wounds.json index 4969336..e6bc716 100644 --- a/data/spells/cure_moderate_wounds.json +++ b/data/spells/cure_moderate_wounds.json @@ -2,6 +2,7 @@ "name": "Cure Moderate Wounds", "level": 2, "school": "conjuration", + "components": "V, S", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/dancing_lights.json b/data/spells/dancing_lights.json index f14f2ca..87f67b1 100644 --- a/data/spells/dancing_lights.json +++ b/data/spells/dancing_lights.json @@ -2,6 +2,7 @@ "name": "Dancing Lights", "level": 0, "school": "evocation", + "components": "V, S", "range": "medium", "save": "none", "base_dc": 10, diff --git a/data/spells/darkness.json b/data/spells/darkness.json index ccb329e..ca9ab2b 100644 --- a/data/spells/darkness.json +++ b/data/spells/darkness.json @@ -2,6 +2,7 @@ "name": "Darkness", "level": 2, "school": "evocation", + "components": "V, M/DF", "range": "touch", "save": "none", "base_dc": 10, diff --git a/data/spells/daze.json b/data/spells/daze.json index b190c78..913e5a8 100644 --- a/data/spells/daze.json +++ b/data/spells/daze.json @@ -2,6 +2,7 @@ "name": "Daze", "level": 0, "school": "enchantment", + "components": "V, S, M", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/deja_vu.json b/data/spells/deja_vu.json index 4b74e78..a3b3c95 100644 --- a/data/spells/deja_vu.json +++ b/data/spells/deja_vu.json @@ -2,6 +2,7 @@ "name": "Deja Vu", "level": 1, "school": "enchantment", + "components": "V", "range": "medium", "save": "none", "base_dc": 10, diff --git a/data/spells/delay_disease.json b/data/spells/delay_disease.json index d80e568..249f3e6 100644 --- a/data/spells/delay_disease.json +++ b/data/spells/delay_disease.json @@ -2,6 +2,7 @@ "name": "Delay Disease", "level": 2, "school": "conjuration", + "components": "V, S, DF", "range": "touch", "save": "fort", "harmless": true, diff --git a/data/spells/delay_poison.json b/data/spells/delay_poison.json index b5da981..0c91213 100644 --- a/data/spells/delay_poison.json +++ b/data/spells/delay_poison.json @@ -2,6 +2,7 @@ "name": "Delay Poison", "level": 2, "school": "conjuration", + "components": "V, S, DF", "range": "touch", "save": "fort", "harmless": true, diff --git a/data/spells/detect_fiendish_presence.json b/data/spells/detect_fiendish_presence.json index 6af8f40..179187c 100644 --- a/data/spells/detect_fiendish_presence.json +++ b/data/spells/detect_fiendish_presence.json @@ -2,6 +2,7 @@ "name": "Detect Fiendish Presence", "level": 0, "school": "divination", + "components": "V, S", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/detect_magic.json b/data/spells/detect_magic.json index 86c93d1..0f3cb7a 100644 --- a/data/spells/detect_magic.json +++ b/data/spells/detect_magic.json @@ -2,6 +2,7 @@ "name": "Detect Magic", "level": 0, "school": "divination", + "components": "V, S", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/detect_poison.json b/data/spells/detect_poison.json index 09ab76f..21e9a30 100644 --- a/data/spells/detect_poison.json +++ b/data/spells/detect_poison.json @@ -2,6 +2,7 @@ "name": "Detect Poison", "level": 0, "school": "divination", + "components": "V, S", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/disrupt_undead.json b/data/spells/disrupt_undead.json index bcbc4d9..70cf0c7 100644 --- a/data/spells/disrupt_undead.json +++ b/data/spells/disrupt_undead.json @@ -2,6 +2,7 @@ "name": "Disrupt Undead", "level": 0, "school": "necromancy", + "components": "V, S", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/divine_favor.json b/data/spells/divine_favor.json index 365fc00..be69dfc 100644 --- a/data/spells/divine_favor.json +++ b/data/spells/divine_favor.json @@ -2,6 +2,7 @@ "name": "Divine Favor", "level": 1, "school": "evocation", + "components": "V, S, DF", "range": "personal", "save": "none", "base_dc": 10, diff --git a/data/spells/doom.json b/data/spells/doom.json index 599aa1c..8466117 100644 --- a/data/spells/doom.json +++ b/data/spells/doom.json @@ -2,6 +2,7 @@ "name": "Doom", "level": 1, "school": "necromancy", + "components": "V, S, DF", "range": "medium", "save": "will", "base_dc": 10, diff --git a/data/spells/drunkards_breath.json b/data/spells/drunkards_breath.json index 712c263..7345e75 100644 --- a/data/spells/drunkards_breath.json +++ b/data/spells/drunkards_breath.json @@ -2,6 +2,7 @@ "name": "Drunkard's Breath", "level": 2, "school": "conjuration", + "components": "V, S, M", "range": "close", "save": "fort", "base_dc": 10, diff --git a/data/spells/endure_elements.json b/data/spells/endure_elements.json index 58a5ba3..593d78e 100644 --- a/data/spells/endure_elements.json +++ b/data/spells/endure_elements.json @@ -2,6 +2,7 @@ "name": "Endure Elements", "level": 1, "school": "abjuration", + "components": "V, S", "range": "touch", "save": "none", "base_dc": 10, diff --git a/data/spells/enhance_water.json b/data/spells/enhance_water.json index f0b1a59..1d551a3 100644 --- a/data/spells/enhance_water.json +++ b/data/spells/enhance_water.json @@ -2,6 +2,7 @@ "name": "Enhance Water", "level": 1, "school": "transmutation", + "components": "V, S", "range": "touch", "save": "fort", "harmless": true, diff --git a/data/spells/enhanced_diplomacy.json b/data/spells/enhanced_diplomacy.json index b6eff89..0dbe578 100644 --- a/data/spells/enhanced_diplomacy.json +++ b/data/spells/enhanced_diplomacy.json @@ -2,6 +2,7 @@ "name": "Enhanced Diplomacy", "level": 0, "school": "divination", + "components": "V, S", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/face_of_the_devourer.json b/data/spells/face_of_the_devourer.json index b267ec3..4dc2039 100644 --- a/data/spells/face_of_the_devourer.json +++ b/data/spells/face_of_the_devourer.json @@ -2,6 +2,7 @@ "name": "Face of the Devourer", "level": 1, "school": "transmutation", + "components": "V, S", "range": "touch", "save": "fort", "harmless": true, diff --git a/data/spells/fear.json b/data/spells/fear.json index 49cfc68..2221656 100644 --- a/data/spells/fear.json +++ b/data/spells/fear.json @@ -2,6 +2,7 @@ "name": "Fear", "level": 4, "school": "necromancy", + "components": "V, S, M", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/fireball.json b/data/spells/fireball.json index 72116d3..449ec20 100644 --- a/data/spells/fireball.json +++ b/data/spells/fireball.json @@ -2,6 +2,7 @@ "name": "Fireball", "level": 3, "school": "evocation", + "components": "V, S, M", "range": "long", "save": "ref", "base_dc": 10, diff --git a/data/spells/flurry_of_snowballs.json b/data/spells/flurry_of_snowballs.json index d3a4c46..7f52320 100644 --- a/data/spells/flurry_of_snowballs.json +++ b/data/spells/flurry_of_snowballs.json @@ -2,6 +2,7 @@ "name": "Flurry of Snowballs", "level": 2, "school": "evocation", + "components": "V, S", "range": "close", "save": "ref", "base_dc": 10, diff --git a/data/spells/forbid_action.json b/data/spells/forbid_action.json index 2b4008f..1c4ea31 100644 --- a/data/spells/forbid_action.json +++ b/data/spells/forbid_action.json @@ -2,6 +2,7 @@ "name": "Forbid Action", "level": 1, "school": "enchantment", + "components": "V", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/grasp.json b/data/spells/grasp.json index 65ebbcf..10a481f 100644 --- a/data/spells/grasp.json +++ b/data/spells/grasp.json @@ -2,6 +2,7 @@ "name": "Grasp", "level": 0, "school": "divination", + "components": "V", "range": "personal", "save": "none", "base_dc": 10, diff --git a/data/spells/guidance.json b/data/spells/guidance.json index 7ed010a..b4fd2b0 100644 --- a/data/spells/guidance.json +++ b/data/spells/guidance.json @@ -2,6 +2,7 @@ "name": "Guidance", "level": 0, "school": "divination", + "components": "V, S", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/heroism.json b/data/spells/heroism.json index e4ebd41..b704c9b 100644 --- a/data/spells/heroism.json +++ b/data/spells/heroism.json @@ -2,6 +2,7 @@ "name": "Heroism", "level": 2, "school": "enchantment", + "components": "V, S", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/hex_vulnerability.json b/data/spells/hex_vulnerability.json index d05191f..4fe2e53 100644 --- a/data/spells/hex_vulnerability.json +++ b/data/spells/hex_vulnerability.json @@ -2,6 +2,7 @@ "name": "Hex Vulnerability", "level": 1, "school": "necromancy", + "components": "V, S, M", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/hidden_diplomacy.json b/data/spells/hidden_diplomacy.json index f5ba25a..70c3474 100644 --- a/data/spells/hidden_diplomacy.json +++ b/data/spells/hidden_diplomacy.json @@ -2,6 +2,7 @@ "name": "Hidden Diplomacy", "level": 1, "school": "enchantment", + "components": "V, S, M", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/hide_from_undead.json b/data/spells/hide_from_undead.json index d06afef..d32dcbe 100644 --- a/data/spells/hide_from_undead.json +++ b/data/spells/hide_from_undead.json @@ -2,6 +2,7 @@ "name": "Hide from Undead", "level": 1, "school": "abjuration", + "components": "V, S, DF", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/hold_person.json b/data/spells/hold_person.json index 7fe91fc..ded9f99 100644 --- a/data/spells/hold_person.json +++ b/data/spells/hold_person.json @@ -2,6 +2,7 @@ "name": "Hold Person", "level": 3, "school": "enchantment", + "components": "V, S, F/DF", "range": "medium", "save": "will", "base_dc": 10, diff --git a/data/spells/ice_slick.json b/data/spells/ice_slick.json index 56a9499..e0ab62a 100644 --- a/data/spells/ice_slick.json +++ b/data/spells/ice_slick.json @@ -2,6 +2,7 @@ "name": "Ice Slick", "level": 2, "school": "evocation", + "components": "V, S", "range": "close", "save": "ref", "base_dc": 10, diff --git a/data/spells/ill_omen.json b/data/spells/ill_omen.json index c24018b..6267b57 100644 --- a/data/spells/ill_omen.json +++ b/data/spells/ill_omen.json @@ -2,6 +2,7 @@ "name": "Ill Omen", "level": 1, "school": "enchantment", + "components": "V, S, M", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/inflict_light_wounds.json b/data/spells/inflict_light_wounds.json index b223548..c829205 100644 --- a/data/spells/inflict_light_wounds.json +++ b/data/spells/inflict_light_wounds.json @@ -2,6 +2,7 @@ "name": "Inflict Light Wounds", "level": 1, "school": "necromancy", + "components": "V, S", "range": "touch", "save": "will", "base_dc": 10, diff --git a/data/spells/ironskin.json b/data/spells/ironskin.json index ab0ace2..a74fe95 100644 --- a/data/spells/ironskin.json +++ b/data/spells/ironskin.json @@ -2,6 +2,7 @@ "name": "Ironskin", "level": 2, "school": "transmutation", + "components": "V, S, DF/M", "range": "personal", "save": "none", "base_dc": 10, diff --git a/data/spells/light.json b/data/spells/light.json index c61119f..e4dbc1d 100644 --- a/data/spells/light.json +++ b/data/spells/light.json @@ -2,6 +2,7 @@ "name": "Light", "level": 0, "school": "evocation", + "components": "V, M/DF", "range": "touch", "save": "none", "base_dc": 10, diff --git a/data/spells/lightning_bolt.json b/data/spells/lightning_bolt.json index d89f747..1943dae 100644 --- a/data/spells/lightning_bolt.json +++ b/data/spells/lightning_bolt.json @@ -2,6 +2,7 @@ "name": "Lightning Bolt", "level": 3, "school": "evocation", + "components": "V, S, M", "range": "medium", "save": "ref", "base_dc": 10, diff --git a/data/spells/mage_armor.json b/data/spells/mage_armor.json index 74c3ed8..1201132 100644 --- a/data/spells/mage_armor.json +++ b/data/spells/mage_armor.json @@ -2,6 +2,7 @@ "name": "Mage Armor", "level": 1, "school": "conjuration", + "components": "V, S, F", "range": "touch", "save": "none", "base_dc": 10, diff --git a/data/spells/mage_hand.json b/data/spells/mage_hand.json index a003f7c..16a695e 100644 --- a/data/spells/mage_hand.json +++ b/data/spells/mage_hand.json @@ -2,6 +2,7 @@ "name": "Mage Hand", "level": 0, "school": "transmutation", + "components": "V, S", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/magic_missile.json b/data/spells/magic_missile.json index cad17a6..6d63243 100644 --- a/data/spells/magic_missile.json +++ b/data/spells/magic_missile.json @@ -2,6 +2,7 @@ "name": "Magic Missile", "level": 1, "school": "evocation", + "components": "V, S", "range": "medium", "save": "none", "base_dc": 10, diff --git a/data/spells/make_whole.json b/data/spells/make_whole.json index b156b99..b29b9d0 100644 --- a/data/spells/make_whole.json +++ b/data/spells/make_whole.json @@ -2,6 +2,7 @@ "name": "Make Whole", "level": 2, "school": "transmutation", + "components": "V, S", "range": "close", "save": "will", "harmless": true, diff --git a/data/spells/masterwork_transformation.json b/data/spells/masterwork_transformation.json index 22b93db..7f4869b 100644 --- a/data/spells/masterwork_transformation.json +++ b/data/spells/masterwork_transformation.json @@ -2,6 +2,7 @@ "name": "Masterwork Transformation", "level": 2, "school": "transmutation", + "components": "V, S, M", "range": "touch", "save": "none", "base_dc": 10, diff --git a/data/spells/mending.json b/data/spells/mending.json index ab3aa97..eb1fd4f 100644 --- a/data/spells/mending.json +++ b/data/spells/mending.json @@ -2,6 +2,7 @@ "name": "Mending", "level": 0, "school": "transmutation", + "components": "V, S", "range": "close", "save": "will", "harmless": true, diff --git a/data/spells/message.json b/data/spells/message.json index 0a2d40a..ba875e2 100644 --- a/data/spells/message.json +++ b/data/spells/message.json @@ -2,6 +2,7 @@ "name": "Message", "level": 0, "school": "transmutation", + "components": "V, S, F", "range": "medium", "save": "none", "base_dc": 10, diff --git a/data/spells/mirror_image.json b/data/spells/mirror_image.json index c2a15af..baa5ebd 100644 --- a/data/spells/mirror_image.json +++ b/data/spells/mirror_image.json @@ -2,6 +2,7 @@ "name": "Mirror Image", "level": 2, "school": "illusion", + "components": "V, S", "range": "personal", "save": "none", "base_dc": 10, diff --git a/data/spells/oath_of_anonymity.json b/data/spells/oath_of_anonymity.json index 23ed626..ad49494 100644 --- a/data/spells/oath_of_anonymity.json +++ b/data/spells/oath_of_anonymity.json @@ -2,6 +2,7 @@ "name": "Oath of Anonymity", "level": 0, "school": "illusion", + "components": "V", "range": "personal", "save": "none", "base_dc": 10, diff --git a/data/spells/obscuring_mist.json b/data/spells/obscuring_mist.json index 6e562b3..b85e587 100644 --- a/data/spells/obscuring_mist.json +++ b/data/spells/obscuring_mist.json @@ -2,6 +2,7 @@ "name": "Obscuring Mist", "level": 1, "school": "conjuration", + "components": "V, S", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/open_close.json b/data/spells/open_close.json index fa14dd3..7fff7f5 100644 --- a/data/spells/open_close.json +++ b/data/spells/open_close.json @@ -2,6 +2,7 @@ "name": "Open/Close", "level": 0, "school": "transmutation", + "components": "V, S, F", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/owls_wisdom.json b/data/spells/owls_wisdom.json index dd73ae2..b933ccd 100644 --- a/data/spells/owls_wisdom.json +++ b/data/spells/owls_wisdom.json @@ -2,6 +2,7 @@ "name": "Owl's Wisdom", "level": 2, "school": "transmutation", + "components": "V, S, M/DF", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/prestidigitation.json b/data/spells/prestidigitation.json index 36ea006..0afade7 100644 --- a/data/spells/prestidigitation.json +++ b/data/spells/prestidigitation.json @@ -2,6 +2,7 @@ "name": "Prestidigitation", "level": 0, "school": "universal", + "components": "V, S", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/protection_from_evil.json b/data/spells/protection_from_evil.json index 6489606..81c9e77 100644 --- a/data/spells/protection_from_evil.json +++ b/data/spells/protection_from_evil.json @@ -2,6 +2,7 @@ "name": "Protection from Evil", "level": 1, "school": "abjuration", + "components": "V, S, M/DF", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/protection_from_evil_communal.json b/data/spells/protection_from_evil_communal.json index b6534da..08916e7 100644 --- a/data/spells/protection_from_evil_communal.json +++ b/data/spells/protection_from_evil_communal.json @@ -2,6 +2,7 @@ "name": "Protection from Evil, Communal", "level": 2, "school": "abjuration", + "components": "V, S, M/DF", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/protection_from_law.json b/data/spells/protection_from_law.json index da94cd0..b3bb269 100644 --- a/data/spells/protection_from_law.json +++ b/data/spells/protection_from_law.json @@ -2,6 +2,7 @@ "name": "Protection from Law", "level": 1, "school": "abjuration", + "components": "V, S, M/DF", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/protection_from_law_communal.json b/data/spells/protection_from_law_communal.json index ff5e657..ab95c01 100644 --- a/data/spells/protection_from_law_communal.json +++ b/data/spells/protection_from_law_communal.json @@ -2,6 +2,7 @@ "name": "Protection from Law, Communal", "level": 2, "school": "abjuration", + "components": "V, S, M/DF", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/purify_food_and_drink.json b/data/spells/purify_food_and_drink.json index c7bdf29..fef4ce7 100644 --- a/data/spells/purify_food_and_drink.json +++ b/data/spells/purify_food_and_drink.json @@ -2,6 +2,7 @@ "name": "Purify Food and Drink", "level": 0, "school": "transmutation", + "components": "V, S", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/putrefy_food_and_drink.json b/data/spells/putrefy_food_and_drink.json index 5140e23..f6ad6d9 100644 --- a/data/spells/putrefy_food_and_drink.json +++ b/data/spells/putrefy_food_and_drink.json @@ -2,6 +2,7 @@ "name": "Putrefy Food and Drink", "level": 0, "school": "transmutation", + "components": "V, S", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/ray_of_enfeeblement.json b/data/spells/ray_of_enfeeblement.json index e8a85ab..0c8d9c8 100644 --- a/data/spells/ray_of_enfeeblement.json +++ b/data/spells/ray_of_enfeeblement.json @@ -2,6 +2,7 @@ "name": "Ray of Enfeeblement", "level": 1, "school": "necromancy", + "components": "V, S", "range": "close", "save": "fort", "base_dc": 10, diff --git a/data/spells/ray_of_frost.json b/data/spells/ray_of_frost.json index 8f11d0d..feb3837 100644 --- a/data/spells/ray_of_frost.json +++ b/data/spells/ray_of_frost.json @@ -2,6 +2,7 @@ "name": "Ray of Frost", "level": 0, "school": "evocation", + "components": "V, S", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/read_magic.json b/data/spells/read_magic.json index 8cd64c1..c0aa4d4 100644 --- a/data/spells/read_magic.json +++ b/data/spells/read_magic.json @@ -2,6 +2,7 @@ "name": "Read Magic", "level": 0, "school": "divination", + "components": "V, S, F", "range": "personal", "save": "none", "base_dc": 10, diff --git a/data/spells/resistance.json b/data/spells/resistance.json index 52a223d..730d947 100644 --- a/data/spells/resistance.json +++ b/data/spells/resistance.json @@ -2,6 +2,7 @@ "name": "Resistance", "level": 0, "school": "abjuration", + "components": "V, S, M/DF", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/restoration_lesser.json b/data/spells/restoration_lesser.json index cca2cc0..a73c47f 100644 --- a/data/spells/restoration_lesser.json +++ b/data/spells/restoration_lesser.json @@ -2,6 +2,7 @@ "name": "Restoration, Lesser", "level": 2, "school": "conjuration", + "components": "V, S", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/sanctuary.json b/data/spells/sanctuary.json index 59de430..fe49a41 100644 --- a/data/spells/sanctuary.json +++ b/data/spells/sanctuary.json @@ -2,6 +2,7 @@ "name": "Sanctuary", "level": 1, "school": "abjuration", + "components": "V, S, DF", "range": "touch", "save": "will", "base_dc": 10, diff --git a/data/spells/saving_finale.json b/data/spells/saving_finale.json index aa9fb70..b91ca64 100644 --- a/data/spells/saving_finale.json +++ b/data/spells/saving_finale.json @@ -2,6 +2,7 @@ "name": "Saving Finale", "level": 1, "school": "evocation", + "components": "V, S", "range": "close", "save": "will", "harmless": true, diff --git a/data/spells/scorching_ray.json b/data/spells/scorching_ray.json index b266814..940425f 100644 --- a/data/spells/scorching_ray.json +++ b/data/spells/scorching_ray.json @@ -2,6 +2,7 @@ "name": "Scorching Ray", "level": 2, "school": "evocation", + "components": "V, S", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/shard_of_chaos.json b/data/spells/shard_of_chaos.json index 5a72414..b12d46e 100644 --- a/data/spells/shard_of_chaos.json +++ b/data/spells/shard_of_chaos.json @@ -2,6 +2,7 @@ "name": "Shard of Chaos", "level": 2, "school": "evocation", + "components": "V, S, DF", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/shield.json b/data/spells/shield.json index 597634e..0732320 100644 --- a/data/spells/shield.json +++ b/data/spells/shield.json @@ -2,6 +2,7 @@ "name": "Shield", "level": 1, "school": "abjuration", + "components": "V, S", "range": "personal", "save": "none", "base_dc": 10, diff --git a/data/spells/shield_of_faith.json b/data/spells/shield_of_faith.json index a6313ce..0f7ab8a 100644 --- a/data/spells/shield_of_faith.json +++ b/data/spells/shield_of_faith.json @@ -2,6 +2,7 @@ "name": "Shield of Faith", "level": 1, "school": "abjuration", + "components": "V, S, M", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/shocking_grasp.json b/data/spells/shocking_grasp.json index 5328b91..e2c0430 100644 --- a/data/spells/shocking_grasp.json +++ b/data/spells/shocking_grasp.json @@ -2,6 +2,7 @@ "name": "Shocking Grasp", "level": 1, "school": "evocation", + "components": "V, S", "range": "touch", "save": "none", "base_dc": 10, diff --git a/data/spells/silence.json b/data/spells/silence.json index 95eb77d..550cf4a 100644 --- a/data/spells/silence.json +++ b/data/spells/silence.json @@ -2,6 +2,7 @@ "name": "Silence", "level": 2, "school": "illusion", + "components": "V, S", "range": "long", "save": "will", "base_dc": 10, diff --git a/data/spells/sleep.json b/data/spells/sleep.json index bee6972..7965c12 100644 --- a/data/spells/sleep.json +++ b/data/spells/sleep.json @@ -2,6 +2,7 @@ "name": "Sleep", "level": 1, "school": "enchantment", + "components": "V, S, M", "range": "medium", "save": "will", "base_dc": 10, diff --git a/data/spells/sound_burst.json b/data/spells/sound_burst.json index ef66867..3a9d556 100644 --- a/data/spells/sound_burst.json +++ b/data/spells/sound_burst.json @@ -2,6 +2,7 @@ "name": "Sound Burst", "level": 2, "school": "evocation", + "components": "V, S, F/DF", "range": "close", "save": "fort", "base_dc": 10, diff --git a/data/spells/spark.json b/data/spells/spark.json index b3da32b..fec6f3e 100644 --- a/data/spells/spark.json +++ b/data/spells/spark.json @@ -2,6 +2,7 @@ "name": "Spark", "level": 0, "school": "evocation", + "components": "V/S", "range": "close", "save": "fort", "base_dc": 10, diff --git a/data/spells/spear_of_purity.json b/data/spells/spear_of_purity.json index 5cad789..ae1d5a7 100644 --- a/data/spells/spear_of_purity.json +++ b/data/spells/spear_of_purity.json @@ -2,6 +2,7 @@ "name": "Spear of Purity", "level": 2, "school": "evocation", + "components": "V, S, DF", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/spiritual_weapon.json b/data/spells/spiritual_weapon.json index 9d5fc30..8f28790 100644 --- a/data/spells/spiritual_weapon.json +++ b/data/spells/spiritual_weapon.json @@ -2,6 +2,7 @@ "name": "Spiritual Weapon", "level": 2, "school": "evocation", + "components": "V, S, DF", "range": "medium", "save": "none", "base_dc": 10, diff --git a/data/spells/stabilize.json b/data/spells/stabilize.json index e7060ca..91c69b8 100644 --- a/data/spells/stabilize.json +++ b/data/spells/stabilize.json @@ -2,6 +2,7 @@ "name": "Stabilize", "level": 0, "school": "conjuration", + "components": "V, S", "range": "close", "save": "will", "harmless": true, diff --git a/data/spells/status.json b/data/spells/status.json index 3f0485b..26276fa 100644 --- a/data/spells/status.json +++ b/data/spells/status.json @@ -2,6 +2,7 @@ "name": "Status", "level": 2, "school": "divination", + "components": "V, S", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/stave_off_corruption.json b/data/spells/stave_off_corruption.json index 0ca5557..d860362 100644 --- a/data/spells/stave_off_corruption.json +++ b/data/spells/stave_off_corruption.json @@ -2,6 +2,7 @@ "name": "Stave Off Corruption", "level": 2, "school": "abjuration", + "components": "V, S, M", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/summon_instrument.json b/data/spells/summon_instrument.json index 6dfe8cf..6024b11 100644 --- a/data/spells/summon_instrument.json +++ b/data/spells/summon_instrument.json @@ -2,6 +2,7 @@ "name": "Summon Instrument", "level": 0, "school": "conjuration", + "components": "V, S", "range": "personal", "save": "none", "base_dc": 10, diff --git a/data/spells/summon_monster_i.json b/data/spells/summon_monster_i.json index b338c76..c1c954c 100644 --- a/data/spells/summon_monster_i.json +++ b/data/spells/summon_monster_i.json @@ -2,6 +2,7 @@ "name": "Summon Monster I", "level": 1, "school": "conjuration", + "components": "V, S, F/DF", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/summon_monster_ii.json b/data/spells/summon_monster_ii.json index a0d3b96..77c1ce0 100644 --- a/data/spells/summon_monster_ii.json +++ b/data/spells/summon_monster_ii.json @@ -2,6 +2,7 @@ "name": "Summon Monster II", "level": 2, "school": "conjuration", + "components": "V, S, F/DF", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/suppress_charms_and_compulsions.json b/data/spells/suppress_charms_and_compulsions.json index 7e4aebd..3883c96 100644 --- a/data/spells/suppress_charms_and_compulsions.json +++ b/data/spells/suppress_charms_and_compulsions.json @@ -2,6 +2,7 @@ "name": "Suppress Charms and Compulsions", "level": 2, "school": "abjuration", + "components": "V, S", "range": "close", "save": "will", "harmless": true, diff --git a/data/spells/surmount_affliction.json b/data/spells/surmount_affliction.json index 55e7ad1..14aeb1b 100644 --- a/data/spells/surmount_affliction.json +++ b/data/spells/surmount_affliction.json @@ -2,6 +2,7 @@ "name": "Surmount Affliction", "level": 2, "school": "abjuration", + "components": "V, S", "range": "personal", "save": "none", "base_dc": 10, diff --git a/data/spells/tears_to_wine.json b/data/spells/tears_to_wine.json index 3bd7816..2794930 100644 --- a/data/spells/tears_to_wine.json +++ b/data/spells/tears_to_wine.json @@ -2,6 +2,7 @@ "name": "Tears to Wine", "level": 2, "school": "transmutation", + "components": "V, S, M", "range": "close", "save": "will", "base_dc": 10, diff --git a/data/spells/touch_of_fatigue.json b/data/spells/touch_of_fatigue.json index 9a14641..7f4f827 100644 --- a/data/spells/touch_of_fatigue.json +++ b/data/spells/touch_of_fatigue.json @@ -2,6 +2,7 @@ "name": "Touch of Fatigue", "level": 0, "school": "necromancy", + "components": "V, S, M", "range": "touch", "save": "fort", "base_dc": 10, diff --git a/data/spells/unseen_servant.json b/data/spells/unseen_servant.json index 43d688a..f1c8f4a 100644 --- a/data/spells/unseen_servant.json +++ b/data/spells/unseen_servant.json @@ -2,6 +2,7 @@ "name": "Unseen Servant", "level": 1, "school": "conjuration", + "components": "V, S, M", "range": "close", "save": "none", "base_dc": 10, diff --git a/data/spells/vanish.json b/data/spells/vanish.json index a7d6cfd..398f8fd 100644 --- a/data/spells/vanish.json +++ b/data/spells/vanish.json @@ -2,6 +2,7 @@ "name": "Vanish", "level": 1, "school": "illusion", + "components": "V, S", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/virtue.json b/data/spells/virtue.json index ce550ca..b9ff7dc 100644 --- a/data/spells/virtue.json +++ b/data/spells/virtue.json @@ -2,6 +2,7 @@ "name": "Virtue", "level": 0, "school": "transmutation", + "components": "V, S, DF", "range": "touch", "save": "none", "base_dc": 10, diff --git a/data/spells/weapon_of_awe.json b/data/spells/weapon_of_awe.json index 2e5f6df..b42561d 100644 --- a/data/spells/weapon_of_awe.json +++ b/data/spells/weapon_of_awe.json @@ -2,6 +2,7 @@ "name": "Weapon of Awe", "level": 2, "school": "transmutation", + "components": "V, S, DF", "range": "touch", "save": "will", "harmless": true, diff --git a/data/spells/web.json b/data/spells/web.json index 5da5d47..7e1ff3a 100644 --- a/data/spells/web.json +++ b/data/spells/web.json @@ -2,6 +2,7 @@ "name": "Web", "level": 2, "school": "conjuration", + "components": "V, S, M", "range": "medium", "save": "ref", "base_dc": 10, diff --git a/tests/test_spell_failure.py b/tests/test_spell_failure.py index 73d886e..ce5a83d 100644 --- a/tests/test_spell_failure.py +++ b/tests/test_spell_failure.py @@ -331,9 +331,21 @@ def test_lich_is_arcane_oni_is_not() -> None: assert oni.armor_spell_failure == 0 -def test_registry_spells_have_no_components_yet() -> None: - """The full component encoding is a follow-up: no shipped spell - declares components, so no golden combat can roll a failure.""" +def test_registry_spells_declare_kb_components() -> None: + """Every shipped spell encodes its KB Components line (V/S/M/F/DF + tokens, material/focus descriptions dropped) except Create Alcool, + whose SRD entry is not in the KB yet.""" registry = load_spell_registry(DATA_DIR / "spells") assert registry - assert all(spell.components == frozenset() for spell in registry.values()) + for name, spell in registry.items(): + if name == "Create Alcool": + assert spell.components == frozenset() + continue + assert spell.components, name + # spot-checks against the SRD stat blocks + assert registry["Acid Arrow"].components == frozenset({"V", "S", "M", "F"}) + assert registry["Bless"].components == frozenset({"V", "S", "DF"}) + assert registry["Bladed Dash"].components == frozenset({"V"}) + # slash alternatives (M/DF, F/DF) expand to both tokens + assert registry["Alarm"].components == frozenset({"V", "S", "F", "DF"}) + assert registry["Bear's Endurance"].components == frozenset({"V", "S", "M", "DF"})