From 27f962920fbb266821a9c747721bf7ba1dba784e Mon Sep 17 00:00:00 2001 From: ctan Date: Thu, 17 Sep 2026 21:44:19 +0200 Subject: [PATCH] fix(rules): small SRD data corrections - alarm close, air bubble/endure elements touch, delay poison conjuration, 10-ft/0-ft range conventions documented, daze 4 HD or fewer --- data/spells/air_bubble.json | 4 ++-- data/spells/alarm.json | 2 +- data/spells/daze.json | 2 +- data/spells/delay_poison.json | 2 +- data/spells/endure_elements.json | 4 ++-- data/spells/prestidigitation.json | 2 +- data/spells/purify_food_and_drink.json | 2 +- data/spells/putrefy_food_and_drink.json | 2 +- data/spells/summon_instrument.json | 2 +- tests/test_spell_registry_batch1.py | 8 ++++---- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/data/spells/air_bubble.json b/data/spells/air_bubble.json index 6717770..351feaa 100644 --- a/data/spells/air_bubble.json +++ b/data/spells/air_bubble.json @@ -2,10 +2,10 @@ "name": "Air Bubble", "level": 1, "school": "conjuration", - "range": "personal", + "range": "touch", "save": "none", "base_dc": 10, "cast_time": "standard", "effects": [], - "description": "You create a sphere of air around your head (or a touched creature's) that lasts 10 min/level, allowing breathing underwater. No combat-mechanical effect in the engine." + "description": "SRD spells/air-bubble.md: range touch - a small pocket of breathable air surrounds the touched creature's head (or a touched object) for 1 min./level. No combat-mechanical effect in the engine." } diff --git a/data/spells/alarm.json b/data/spells/alarm.json index c692d05..d7f2e68 100644 --- a/data/spells/alarm.json +++ b/data/spells/alarm.json @@ -2,7 +2,7 @@ "name": "Alarm", "level": 1, "school": "abjuration", - "range": "medium", + "range": "close", "save": "none", "base_dc": 10, "cast_time": "standard", diff --git a/data/spells/daze.json b/data/spells/daze.json index f137b99..b190c78 100644 --- a/data/spells/daze.json +++ b/data/spells/daze.json @@ -14,5 +14,5 @@ "save_negates": true } ], - "description": "A cantrip that clouds the mind of a humanoid creature with 5 or fewer HD, making it unable to act for 1 round. Will negates." + "description": "SRD spells/daze.md: a cantrip that clouds the mind of a humanoid creature with 4 HD or fewer, making it unable to act for 1 round. Humanoids of 5 or more HD are not affected. Will negates." } diff --git a/data/spells/delay_poison.json b/data/spells/delay_poison.json index 8312021..8d541db 100644 --- a/data/spells/delay_poison.json +++ b/data/spells/delay_poison.json @@ -1,7 +1,7 @@ { "name": "Delay Poison", "level": 2, - "school": "abjuration", + "school": "conjuration", "range": "touch", "save": "fort", "base_dc": 10, diff --git a/data/spells/endure_elements.json b/data/spells/endure_elements.json index 358e26c..58a5ba3 100644 --- a/data/spells/endure_elements.json +++ b/data/spells/endure_elements.json @@ -2,10 +2,10 @@ "name": "Endure Elements", "level": 1, "school": "abjuration", - "range": "personal", + "range": "touch", "save": "none", "base_dc": 10, "cast_time": "standard", "effects": [], - "description": "For 24 hours you tolerate comfortable extremes of heat and cold (from -50 to 140 degrees F) without ill effect. Environmental protection, no combat-mechanical effect in the engine." + "description": "SRD spells/endure-elements.md: range touch - the creature touched suffers no harm from hot or cold environments (from -50 to 140 degrees F) for 24 hours. Environmental protection, no combat-mechanical effect in the engine." } diff --git a/data/spells/prestidigitation.json b/data/spells/prestidigitation.json index f5ff37c..36ea006 100644 --- a/data/spells/prestidigitation.json +++ b/data/spells/prestidigitation.json @@ -8,5 +8,5 @@ "cast_time": "standard", "spell_resistance": false, "effects": [], - "description": "A cantrip: minor magical tricks for 1 hour - lift 1 lb. of material, color/clean/soil items in a 1-ft cube, chill/warm/flavor 1 lb. of nonliving material, or create crude trinkets. It can deal no damage and duplicates no other spell. No combat effect; the trivial manipulations are not modeled by the engine." + "description": "SRD spells/prestidigitation.md: a cantrip - minor magical tricks for 1 hour; lift 1 lb. of material, color/clean/soil items in a 1-ft cube, chill/warm/flavor 1 lb. of nonliving material, or create crude trinkets. It deals no damage and duplicates no other spell. The SRD range is 10 ft. - the engine has no 10-ft category, so the closest usable category (close) is kept. No combat effect; the trivial manipulations are not modeled by the engine." } diff --git a/data/spells/purify_food_and_drink.json b/data/spells/purify_food_and_drink.json index c8ba06c..c7bdf29 100644 --- a/data/spells/purify_food_and_drink.json +++ b/data/spells/purify_food_and_drink.json @@ -7,5 +7,5 @@ "base_dc": 10, "cast_time": "standard", "effects": [], - "description": "A cantrip: cleanses 1 cu. ft./level of spoiled, rotten, diseased or poisoned food and water, making it pure and drinkable (no effect on creatures or magic potions). Will negates (object). Non-combat utility: the engine does not model objects, so the spell has no mechanical effects here." + "description": "SRD spells/purify-food-and-drink.md: a cantrip - cleanses 1 cu. ft./level of spoiled, rotten, diseased or poisoned food and water (no effect on creatures or magic potions). Will negates (object). The SRD range is 10 ft. - the engine has no 10-ft category, so the closest usable category (close) is kept. Non-combat utility: the engine does not model objects, so the spell has no mechanical effects here." } diff --git a/data/spells/putrefy_food_and_drink.json b/data/spells/putrefy_food_and_drink.json index 6f09041..5140e23 100644 --- a/data/spells/putrefy_food_and_drink.json +++ b/data/spells/putrefy_food_and_drink.json @@ -7,5 +7,5 @@ "base_dc": 10, "cast_time": "standard", "effects": [], - "description": "A cantrip: instantly rots 1 cu. ft./level of edible food and makes water and liquids brackish and undrinkable (can also spoil a single potion; no effect on creatures or unholy water). Will negates (object). Non-combat utility: the engine does not model objects, so the spell has no mechanical effects here." + "description": "SRD spells/putrefy-food-and-drink.md: a cantrip - instantly rots 1 cu. ft./level of edible food and makes water and liquids brackish and undrinkable (can also spoil a single potion; no effect on creatures or unholy water). Will negates (object). The SRD range is 10 ft. - the engine has no 10-ft category, so the closest usable category (close) is kept. Non-combat utility: the engine does not model objects, so the spell has no mechanical effects here." } diff --git a/data/spells/summon_instrument.json b/data/spells/summon_instrument.json index 21a1f24..6dfe8cf 100644 --- a/data/spells/summon_instrument.json +++ b/data/spells/summon_instrument.json @@ -8,5 +8,5 @@ "cast_time": "one_round", "spell_resistance": false, "effects": [], - "description": "A cantrip (casting time 1 round): you summon one handheld musical instrument of your choice into your hands or at your feet; it plays only for you and disappears when the spell ends (1 min./level). No combat effect: summoned objects are not modeled by the engine." + "description": "SRD spells/summon-instrument.md: a cantrip (casting time 1 round) - you summon one handheld musical instrument of your choice into your hands or at your feet; it plays only for you and disappears when the spell ends (1 min./level). The SRD range is 0 ft. - the engine's personal category maps to 0 ft., so personal is the exact match. No combat effect: summoned objects are not modeled by the engine." } diff --git a/tests/test_spell_registry_batch1.py b/tests/test_spell_registry_batch1.py index 05e0d66..8cf6c3e 100644 --- a/tests/test_spell_registry_batch1.py +++ b/tests/test_spell_registry_batch1.py @@ -36,8 +36,8 @@ _BATCH1: dict[str, tuple[str, int, str, str, str]] = { "Abundant Ammunition": ("abundant_ammunition", 1, "conjuration", "close", "none"), "Acid Splash": ("acid_splash", 0, "conjuration", "close", "none"), "Aid": ("aid", 2, "enchantment", "touch", "none"), - "Air Bubble": ("air_bubble", 1, "conjuration", "personal", "none"), - "Alarm": ("alarm", 1, "abjuration", "medium", "none"), + "Air Bubble": ("air_bubble", 1, "conjuration", "touch", "none"), + "Alarm": ("alarm", 1, "abjuration", "close", "none"), "Arcane Mark": ("arcane_mark", 0, "universal", "touch", "none"), "Bane": ("bane", 1, "enchantment", "medium", "will"), "Bear's Endurance": ("bears_endurance", 2, "transmutation", "touch", "will"), @@ -55,7 +55,7 @@ _BATCH1: dict[str, tuple[str, int, str, str, str]] = { "Daze": ("daze", 0, "enchantment", "close", "will"), "Deja Vu": ("deja_vu", 1, "enchantment", "medium", "none"), "Delay Disease": ("delay_disease", 2, "conjuration", "touch", "fort"), - "Delay Poison": ("delay_poison", 2, "abjuration", "touch", "fort"), + "Delay Poison": ("delay_poison", 2, "conjuration", "touch", "fort"), "Detect Fiendish Presence": ("detect_fiendish_presence", 0, "divination", "close", "none"), "Detect Magic": ("detect_magic", 0, "divination", "close", "none"), "Detect Poison": ("detect_poison", 0, "divination", "close", "none"), @@ -63,7 +63,7 @@ _BATCH1: dict[str, tuple[str, int, str, str, str]] = { "Divine Favor": ("divine_favor", 1, "evocation", "personal", "none"), "Doom": ("doom", 1, "necromancy", "medium", "will"), "Drunkard's Breath": ("drunkards_breath", 2, "conjuration", "close", "fort"), - "Endure Elements": ("endure_elements", 1, "abjuration", "personal", "none"), + "Endure Elements": ("endure_elements", 1, "abjuration", "touch", "none"), "Enhance Water": ("enhance_water", 1, "transmutation", "touch", "fort"), }