Repository: CleverRaven/Cataclysm-DDA
Pull request #80615: [Xedra Evolved] Add vampire magic type + update power/trait descriptions with blood costs
Author: login: Standing-Storm
Labels: name: [JSON]
description: Changes (can be) made in JSON
name: Mods
description: Issues related to mods or modding
name: Mutations / Traits / Professions/ Hobbies
description: Mutations / Traits / Professions/ Hobbies
name: Mechanics: Enchantments / Spells
description: Enchantments and spells
name: astyled
description: astyled PR, label is assigned by github actions
name: json-styled
description: JSON lint passed, label assigned by github actions
name: BasicBuildPassed
description: This PR builds correctly, label assigned by github actions
name: EOC: Effects On Condition
description: Anything concerning Effects On Condition
name: Mods: Xedra Evolved
description: Anything to do with Xedra Evolved
Created: 2025-04-18T15:44:51Z | Merged: 2025-04-20T16:40:10Z

<!-- HOW TO USE: Under each "#### Heading" below, enter information relevant to your pull request.
Leave the headings unless they don't apply to your PR.

Please read carefully.
Once a pull request is submitted, automatic stylistic and consistency checks will be performed on the PR's changes.
The results can be either seen under the "Files changed" section of a PR or in the check's details.

Rules for suggested pull requests:
- If possible, limit yourself to small changes, 500 strings at max. Exceptions are adding or changing maps, and changes, that won't work unless they are done in a single run (even then there can be ways) - violating it puts a lot of unnecessary work on our merge team.
- Do not scope creep. If you make a pull request "Add new gun", please do not make anything more than adding the gun and following changes, like changing the stats of the gun, removing other guns from itemgroups or tweaking zombie horse stats - violating it makes future search and debugging stuff much harder, since PR name is not related to what is changed in the game. "Who the hell removed the quest item from drop in location X in PR, that adds a new plushie" - this may be a quote from a person who was affected by scope creep
- Do not make omnibus PRs. Meaning do not make a single PR, that fixes ten different, not related issues, at once, even if they are all one string - same as previously mentioned scope creep, it doesn't help to search the changes when debugging, despite all power of git blame tool

NOTE: Please grant permission for repository maintainers to edit your PR.  It is EXTREMELY common for PRs to be held up due to trivial changes being requested and the author being unavailable to make them. -->

#### Summary
Mods "[Xedra Evolved] Add vampire magic type + update power/trait descriptions with blood costs"
<!-- This section should consist of exactly one line, edit the one above.
1. Replace the word "Category" with one of these words: Features, Content, Interface, Mods, Balance, Bugfixes, Performance, Infrastructure, Build, I18N.
2. Replace the text inside the quotes with a brief description of your changes.
Or if you don't want a changelog entry, replace the whole line with just the word "None" (with no quotes).
Examples:
1. None
2. Features "In-game Armor sprite change"
3. Interface "Show crafting failure chances in the crafting interface"
4. Infrastructure "JSON-ize slot machines"
5. Bugfixes "Crafting GUI: show how much recipe makes for non-charge items"
For more on the meaning of each category, see:
https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/CHANGELOG_GUIDELINES.md
If approved and merged, your summary will be added to the project changelog:
https://github.com/CleverRaven/Cataclysm-DDA/blob/master/data/changelog.txt -->

#### Purpose of change

The powers window can parse tags now, so it's possible to do a custom power source display. Also, vampires were missing a `magic_type` so I added that. 
<!-- With a few sentences, describe your reasons for making this change.
If it relates to an existing issue, you can link it with a # followed by the GitHub issue number, like #1234.
When you submit a pull request that completely resolves an issue, use [Github's closing keywords](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/using-keywords-in-issues-and-pull-requests#linking-a-pull-request-to-an-issue)
to automatically close the issue once your pull request is merged.
If there is no related issue, explain here what issue, feature, or other concern you are addressing.  If this is a bugfix, include steps to reproduce the original bug, so your fix can be verified. -->

#### Describe the solution

Add a hidden trait for vampires/dhampirs so in the power window it shows the shorter name `Blood Arts`. Add text that shows the cost of the power and your current blood. 

![image](https://github.com/user-attachments/assets/1042004b-62c4-4b62-89fc-0e8737f163dd)

Do the same for the traits, though traits cannot parse tags (so it can't show you your current blood) and you have to hit ! to display the description. Edit: #80618 will let traits parse tags, so it's included there too. 

Add an EoC to update existing characters so they get the trait that has Blood Arts attached to it.

<!-- How does the feature work, or how does this fix a bug?  The easier you make your solution to understand, the faster it can get merged. -->

#### Describe alternatives you've considered

<!-- Explain any alternative solutions, different approaches, or possibilities you've considered using to solve the same problem. -->

#### Testing

As you can see from the screenshot, it works.
<!-- Describe what steps you took to test that this PR resolved the bug or added the feature, and what tests you performed to make sure it didn't cause any regressions.  Also, include testing suggestions for reviewers and maintainers. See TESTING_YOUR_CHANGES.md -->

#### Additional context

Need to swap Commune with the Night to a power from an activatable trait (following the one-and-done = powers, turn on and leave on = traits principle), but that should be another PR. 
<!-- Add any other context (such as mock-ups, proof of concepts or screenshots) about the feature or bugfix here. -->


<!--README: Cataclysm: Dark Days Ahead is released under the Creative Commons Attribution ShareAlike 3.0 license.
The code and content of the game are free to use, modify, and redistribute for any purpose whatsoever.
By contributing to the project you agree to the terms of the license and that any contribution you make will also be covered by the same license.
See http://creativecommons.org/licenses/by-sa/3.0/ for details. -->



Diff:
diff --git a/data/mods/Xedra_Evolved/effects/vampvirus.json b/data/mods/Xedra_Evolved/effects/vampvirus.json
index b1514e9c68907..23817854b8fe8 100644
--- a/data/mods/Xedra_Evolved/effects/vampvirus.json
+++ b/data/mods/Xedra_Evolved/effects/vampvirus.json
@@ -20,6 +20,7 @@
             "effect": [
               { "u_lose_effect": "vampire_virus" },
               { "u_lose_trait": "VAMPIRE" },
+              { "u_lose_trait": "VAMPIRE_BLOOD_ARTS" },
               { "u_lose_trait": "EYEGLEAM" },
               { "u_lose_trait": "BLOOD_FUN" },
               { "u_lose_trait": "STAMINAFORBLOOD" },
@@ -204,6 +205,7 @@
                     ],
                     "false_effect": [
                       { "u_add_trait": "VAMPIRE" },
+                      { "u_add_trait": "VAMPIRE_BLOOD_ARTS" },
                       {
                         "u_message": "You suddenly understand that drinking someones blood will make you feel better than you've ever felt before in your life."
                       }
diff --git a/data/mods/Xedra_Evolved/flags.json b/data/mods/Xedra_Evolved/flags.json
index bf93bb23d376c..97c63658bdd0f 100644
--- a/data/mods/Xedra_Evolved/flags.json
+++ b/data/mods/Xedra_Evolved/flags.json
@@ -61,6 +61,10 @@
     "id": "NO_FEY_MAGIC",
     "type": "json_flag"
   },
+  {
+    "id": "NO_VAMPIRE_BLOOD_POWERS",
+    "type": "json_flag"
+  },
   {
     "id": "MAGIC_USER",
     "type": "monster_flag",
diff --git a/data/mods/Xedra_Evolved/mutations/mutations.json b/data/mods/Xedra_Evolved/mutations/mutations.json
index 1ce5e06700b89..90d64d1d4a6f3 100644
--- a/data/mods/Xedra_Evolved/mutations/mutations.json
+++ b/data/mods/Xedra_Evolved/mutations/mutations.json
@@ -536,6 +536,16 @@
     "flags": [ "CANNIBAL", "HEMOVORE" ],
     "cancels": [ "DREAMER", "DREAMSMITH", "EATER", "INVENTOR" ]
   },
+  {
+    "type": "mutation",
+    "id": "VAMPIRE_BLOOD_ARTS",
+    "name": { "str": "Blood Arts" },
+    "points": 1,
+    "description": "This provides the school trait for vampire blood powers.  It should not be visible.",
+    "valid": false,
+    "purifiable": false,
+    "player_display": false
+  },
   {
     "type": "mutation",
     "id": "EYEGLEAM",
@@ -544,7 +554,7 @@
     "purifiable": false,
     "valid": false,
     "name": { "str": "Gleaming Eyes" },
-    "description": "Your eyes gleam lightly red as the light catches in them and with a few drops of the stolen blood in your veins you are able to see in the dark.",
+    "description": "Your eyes gleam lightly red as the light catches in them and with a few drops of the stolen blood in your veins you are able to see in the dark.\n\n<color_light_red>Initial Blood Cost:</color> 100 ml (<u_val:blood_amount_for_graph> ml current)\n<color_light_red>Periodic Blood Cost:</color> 50 ml",
     "active": true,
     "activated_is_setup": true,
     "activated_eocs": [ "EOC_EYEGLEAM_activated" ],
@@ -568,7 +578,7 @@
     "purifiable": false,
     "valid": false,
     "name": { "str": "Vigor Mortis" },
-    "description": "Your stolen blood reinforces your muscles, making your grip crack bone and your punches dent steel.",
+    "description": "Your stolen blood reinforces your muscles, making your grip crack bone and your punches dent steel.\n\n<color_light_red>Initial Blood Cost:</color> 150 ml (<u_val:blood_amount_for_graph> ml current)\n<color_light_red>Periodic Blood Cost:</color> 75 ml",
     "active": true,
     "activated_is_setup": true,
     "activated_eocs": [ "EOC_VAMPIRIC_STRENGTH_activated" ],
@@ -583,7 +593,7 @@
     "purifiable": false,
     "valid": false,
     "name": { "str": "Sanguine Resilience" },
-    "description": "Your cold flesh is not as vulnerable as it once was.  Activate to render it even more resistant to physical damage.",
+    "description": "Your cold flesh is not as vulnerable as it once was.  Activate to render it even more resistant to physical damage.\n\n<color_light_red>Initial Blood Cost:</color> 150 ml (<u_val:blood_amount_for_graph> ml current)\n<color_light_red>Periodic Blood Cost:</color> 75 ml",
     "active": true,
     "activated_is_setup": true,
     "activated_eocs": [ "EOC_VAMPIRIC_RESILIENCE_activated" ],
@@ -688,7 +698,7 @@
     "purifiable": false,
     "valid": false,
     "name": { "str": "Coagulant Weave" },
-    "description": "Your body prepares to prevent the loss of any blood to combat damage.",
+    "description": "Your body prepares to prevent the loss of any blood to combat damage.\n\n<color_light_red>Initial Blood Cost:</color> 500 ml (<u_val:blood_amount_for_graph> ml current)\n<color_light_red>Periodic Blood Cost:</color> 250 ml",
     "active": true,
     "activated_is_setup": true,
     "activated_eocs": [ "EOC_COAGULANTWEAVE_activated" ],
@@ -713,7 +723,7 @@
     "purifiable": false,
     "valid": false,
     "name": { "str": "Flow Like Blood" },
-    "description": "You can move faster than the eye can see, avoiding the claws and teeth and weapons of your enemies.",
+    "description": "You can move faster than the eye can see, avoiding the claws and teeth and weapons of your enemies.\n\n<color_light_red>Initial Blood Cost:</color> 250 (<u_val:blood_amount_for_graph> ml current)\n<color_light_red>Periodic Blood Cost:</color> 125 ml",
     "active": true,
     "activated_is_setup": true,
     "activated_eocs": [ "EOC_VAMPIRIC_DODGE_activated" ],
@@ -765,7 +775,7 @@
     "purifiable": false,
     "valid": false,
     "name": { "str": "Claws of the Beast" },
-    "description": "You can twist your fingernails into sharp claws, allowing you to inflict extra damage in unarmed combat.",
+    "description": "You can twist your fingernails into sharp claws, allowing you to inflict extra damage in unarmed combat.\n\n<color_light_red>Initial Blood Cost:</color> 125 ml (<u_val:blood_amount_for_graph> ml current)\n<color_light_red>Periodic Blood Cost:</color> 62 ml",
     "active": true,
     "activated_is_setup": true,
     "activated_eocs": [ "EOC_VAMPIRE_BEAST_CLAWS_activated" ],
@@ -846,7 +856,7 @@
     "purifiable": false,
     "valid": false,
     "name": { "str": "Blood-Driven Speed" },
-    "description": "Your body exceeds normal human reaction limits as blood turns to ash in your veins.",
+    "description": "Your body exceeds normal human reaction limits as blood turns to ash in your veins.\n\n<color_light_red>Initial Blood Cost:</color> 750 ml (<u_val:blood_amount_for_graph> ml current)\n<color_light_red>Periodic Blood Cost:</color> 375 ml",
     "active": true,
     "activated_is_setup": true,
     "activated_eocs": [ "EOC_BLOODHASTE_activated" ],
@@ -1248,7 +1258,7 @@
     "purifiable": false,
     "valid": false,
     "name": { "str": "Blind the Sun" },
-    "description": "You mastery over the shadowed path of blood has become much more potent, allowing you to use your vampiric powers and a massive expense of blood to blot out the sun for a few dozen minutes.",
+    "description": "You mastery over the shadowed path of blood has become much more potent, allowing you to use your vampiric powers and a massive expense of blood to blot out the sun for a few dozen minutes.\n\n<color_light_red>Initial Blood Cost:</color> 3000 ml (<u_val:blood_amount_for_graph> ml current)",
     "active": true,
     "activated_is_setup": false,
     "activated_eocs": [ "EOC_VAMPIRE_BLIND_THE_SUN" ]
diff --git a/data/mods/Xedra_Evolved/obsoletion_and_migration/eocs.json b/data/mods/Xedra_Evolved/obsoletion_and_migration/eocs.json
index 3e79f2a8d5170..e720896bf331c 100644
--- a/data/mods/Xedra_Evolved/obsoletion_and_migration/eocs.json
+++ b/data/mods/Xedra_Evolved/obsoletion_and_migration/eocs.json
@@ -83,5 +83,13 @@
       },
       { "math": [ "u_vampire_blood_scale_updated = 1" ] }
     ]
+  },
+  {
+    "type": "effect_on_condition",
+    "id": "EOC_VAMPIRE_POWER_TRAIT_UPDATE_GAME_BEGIN",
+    "eoc_type": "EVENT",
+    "required_event": "game_begin",
+    "condition": { "or": [ { "u_has_any_trait": [ "VAMPIRE", "DHAMPIR_TRAIT" ] }, { "u_has_effect": "vampire_virus" } ] },
+    "effect": [ { "u_add_trait": "VAMPIRE_BLOOD_ARTS" } ]
   }
 ]
diff --git a/data/mods/Xedra_Evolved/player/hobbies.json b/data/mods/Xedra_Evolved/player/hobbies.json
index 1e808d67f0255..5269583f224cb 100644
--- a/data/mods/Xedra_Evolved/player/hobbies.json
+++ b/data/mods/Xedra_Evolved/player/hobbies.json
@@ -49,7 +49,7 @@
     "name": "Dhampir (Species)",
     "description": "One of your parents was always a little odd.  They stayed out of the sun as much as they could, their eyes were a bit of an odd color, and they vanished without a trace before you grew old enough to ask them why they left the room every time you got a scrape that drew blood.  But now that you're older, you understand.  You are the child of a vampire, and have inherited a small portion of their power.",
     "points": 3,
-    "traits": [ "DHAMPIR_TRAIT", "VAMPIRIC_STRENGTH", "DHAMPIR_DETECT_VAMPIRES" ]
+    "traits": [ "DHAMPIR_TRAIT", "VAMPIRE_BLOOD_ARTS", "VAMPIRIC_STRENGTH", "DHAMPIR_DETECT_VAMPIRES" ]
   },
   {
     "type": "profession",
diff --git a/data/mods/Xedra_Evolved/spells/vampire_spells.json b/data/mods/Xedra_Evolved/spells/vampire_spells.json
index 61bffa770c15a..6c14b7ca2aa2d 100644
--- a/data/mods/Xedra_Evolved/spells/vampire_spells.json
+++ b/data/mods/Xedra_Evolved/spells/vampire_spells.json
@@ -1,4 +1,13 @@
 [
+  {
+    "id": "xe_vampire_blood_powers",
+    "type": "magic_type",
+    "energy_source": "NONE",
+    "cannot_cast_flags": [ "NO_VAMPIRE_BLOOD_POWERS" ],
+    "cannot_cast_message": "Your blood will not respond to you!",
+    "failure_cost_percent": 0.75,
+    "max_book_level": 0
+  },
   {
     "type": "enchantment",
     "id": "ench_vampire_heightened_senses_hearing",
@@ -29,16 +38,17 @@
     "id": "vampire_smell_nearby_blood_spell",
     "type": "SPELL",
     "name": "Scent of Blood",
-    "description": "You can smell even the faintest traces of living human, or nearly-human, blood.",
+    "description": "You can smell even the faintest traces of living human, or nearly-human, blood.\n\n<color_light_red>Blood Cost:</color> 0 ml.",
     "message": "",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "effect": "effect_on_condition",
     "effect_str": "EOC_VAMPIRE_SCENT_BLOOD_activated",
     "shape": "blast",
     "valid_targets": [ "self" ],
     "flags": [ "NO_HANDS", "SILENT", "NO_FAIL" ],
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "base_casting_time": 25,
     "difficulty": 1
   },
@@ -49,13 +59,14 @@
     "description": "Your fangs allow you to drink blood from an incapacitated or sleeping target.",
     "message": "",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "effect": "effect_on_condition",
     "effect_str": "EOC_VAMPIRE_DRINK_BLOOD_WITH_FANGS_activated",
     "shape": "blast",
     "valid_targets": [ "ally", "hostile" ],
     "flags": [ "NO_HANDS", "SILENT", "NO_FAIL" ],
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "base_casting_time": 0,
     "difficulty": 1,
     "min_range": 1
@@ -64,16 +75,17 @@
     "id": "vampire_stamina_for_blood_spell",
     "type": "SPELL",
     "name": "Unholy Endurance",
-    "description": "You focus on sending the blood in your veins to where it can do the most good for your immediate stamina.",
+    "description": "You focus on sending the blood in your veins to where it can do the most good for your immediate stamina.\n\n<color_light_red>Blood Cost:</color> 100 ml (<u_val:blood_amount_for_graph> ml current).",
     "message": "",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "effect": "effect_on_condition",
     "effect_str": "EOC_STAMINAFORBLOOD_activated",
     "shape": "blast",
     "valid_targets": [ "self" ],
     "flags": [ "NO_HANDS", "SILENT", "NO_FAIL" ],
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "base_casting_time": 100,
     "difficulty": 5
   },
@@ -81,16 +93,17 @@
     "id": "vampire_magic_for_blood_spell",
     "type": "SPELL",
     "name": "Blood-Fueled Magic",
-    "description": "You consume some of the blood in your veins, turning it into magical power.",
+    "description": "You consume some of the blood in your veins, turning it into magical power.\n\n<color_light_red>Blood Cost:</color> 200 ml (<u_val:blood_amount_for_graph> ml current).",
     "message": "",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "effect": "effect_on_condition",
     "effect_str": "EOC_MAGICFORBLOOD_activated",
     "shape": "blast",
     "valid_targets": [ "self" ],
     "flags": [ "NO_HANDS", "SILENT", "NO_FAIL" ],
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "base_casting_time": 100,
     "difficulty": 5
   },
@@ -98,9 +111,10 @@
     "id": "spell_blood_heal",
     "type": "SPELL",
     "name": "Sanguine Restoration",
-    "description": "Heal your wounds with the power of stolen blood.",
+    "description": "Heal your wounds with the power of stolen blood.\n\n<color_light_red>Blood Cost:</color> 750 ml (<u_val:blood_amount_for_graph> ml current).",
     "message": "",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "valid_targets": [ "self" ],
     "effect": "effect_on_condition",
     "effect_str": "EOC_BLOODHEAL_activated",
@@ -108,23 +122,24 @@
     "base_casting_time": 20,
     "flags": [ "NO_HANDS", "SILENT", "NO_FAIL" ],
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "difficulty": 2
   },
   {
     "id": "vampire_fear_gaze_spell",
     "type": "SPELL",
     "name": { "str": "Predator's Mien" },
-    "description": "With a bit of stolen blood and a savage expression, you can send your enemies fleeing.  This power only works on enemies capable of feeling fear.",
+    "description": "With a bit of stolen blood and a savage expression, you can send your enemies fleeing.  This power only works on enemies capable of feeling fear.\n\n<color_light_red>Blood Cost:</color> 150 ml (<u_val:blood_amount_for_graph> ml current).",
     "message": "",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "effect": "effect_on_condition",
     "effect_str": "EOC_VAMPIRE_FEAR_GAZE_activated",
     "shape": "blast",
     "valid_targets": [ "ally", "hostile" ],
     "flags": [ "NO_HANDS", "SILENT", "NO_FAIL", "NO_PROJECTILE" ],
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "min_range": {
       "math": [
         "min((3 + (vampire_total_tier_one_traits() * 0.2) + (vampire_total_tier_two_traits() * 0.33) + (vampire_total_tier_three_traits() * 0.5) + (vampire_total_tier_four_traits() * 0.75)), 12)"
@@ -141,11 +156,12 @@
     "id": "spell_hypnotic_gaze",
     "type": "SPELL",
     "name": "Hypnotic Gaze",
-    "description": "Stare into the eyes of your victim and wills them to pause.  This power does not work on unliving targets.",
+    "description": "Stare into the eyes of your victim and wills them to pause.  This power does not work on unliving targets.\n\n<color_light_red>Blood Cost:</color> 150 ml (<u_val:blood_amount_for_graph> ml current).",
     "message": "",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "valid_targets": [ "ally", "hostile" ],
     "effect": "effect_on_condition",
     "effect_str": "EOC_HYPNOTIC_GAZE_activated",
@@ -169,9 +185,10 @@
     "id": "vampire_command_beast_spell",
     "type": "SPELL",
     "name": "Cowing the Beast",
-    "description": "Exert command over a predatory wild animal like a wolf or a rat, making it your ally for a time.",
+    "description": "Exert command over a predatory wild animal like a wolf or a rat, making it your ally for a time.\n\n<color_light_red>Blood Cost:</color> 500 ml (<u_val:blood_amount_for_graph> ml current).",
     "message": "",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "valid_targets": [ "hostile" ],
     "effect": "effect_on_condition",
     "effect_str": "EOC_VAMPIRE_COMMAND_BEAST_activated",
@@ -179,7 +196,7 @@
     "base_casting_time": 75,
     "flags": [ "NO_HANDS", "SILENT", "NO_FAIL" ],
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "difficulty": 7,
     "min_range": {
       "math": [
@@ -218,11 +235,12 @@
     "description": { "str": "The actual power that lets you command a beast.  If you see this, it's a bug.", "//~": "NO_I18N" },
     "message": "",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "valid_targets": [ "hostile" ],
     "effect": "charm_monster",
     "shape": "blast",
     "flags": [ "NO_HANDS", "SILENT", "NO_FAIL" ],
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "difficulty": 7,
     "max_level": 1,
     "min_range": 60,
@@ -252,9 +270,10 @@
     "id": "vampire_earth_slumber_spell",
     "type": "SPELL",
     "name": "Earthen Slumber",
-    "description": "You can sleep within the earth itself, avoiding the hateful light of the sun.  This power must be used on diggable soil.",
+    "description": "You can sleep within the earth itself, avoiding the hateful light of the sun.  This power must be used on diggable soil.\n\n<color_light_red>Blood Cost:</color> 0 ml.",
     "message": "",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "valid_targets": [ "self" ],
     "effect": "effect_on_condition",
     "effect_str": "EOC_VAMPIRE_EARTH_SLUMBER_activated",
@@ -262,7 +281,7 @@
     "base_casting_time": 150,
     "flags": [ "NO_HANDS", "SILENT", "NO_FAIL" ],
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "difficulty": 2
   },
   {
@@ -272,9 +291,10 @@
     "description": "Enter a deathlike slumber and recover from your wounds and fatigue.  Preferably while somewhere nobody could attack you while you sleep.",
     "message": "You enter torpor.",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "valid_targets": [ "self" ],
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_FAIL" ],
     "effect": "effect_on_condition",
     "effect_str": "EOC_VAMPIRE_TORPOR_activated",
@@ -286,12 +306,13 @@
     "id": "vampire_dominate",
     "type": "SPELL",
     "name": "Dominating Gaze",
-    "description": "Take control of a mind.  Only works on targets that have weak minds.",
+    "description": "Take control of a mind.  Only works on targets that have weak minds.\n\n<color_light_red>Blood Cost:</color> 700 ml (<u_val:blood_amount_for_graph> ml current).",
     "message": "You look for a mind to control.",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "valid_targets": [ "hostile" ],
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_FAIL" ],
     "effect": "effect_on_condition",
     "effect_str": "EOC_VAMPIRE_DOMINATE_activated",
@@ -317,11 +338,12 @@
     "description": { "str": "The actual power that lets you take over a mind.  If you see this, it's a bug.", "//~": "NO_I18N" },
     "message": "",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "valid_targets": [ "hostile" ],
     "effect": "charm_monster",
     "shape": "blast",
     "flags": [ "NO_HANDS", "SILENT", "NO_FAIL" ],
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "skill": "deduction",
     "difficulty": 8,
     "max_level": 1,
@@ -356,12 +378,13 @@
     "description": "Seep through a door or a window.",
     "message": "",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "valid_targets": [ "self" ],
     "effect": "effect_on_condition",
     "effect_str": "EOC_VAMPIRE_MIST_FORM_SEEP_THROUGH_DOOR_WINDOW",
     "shape": "blast",
     "flags": [ "NO_HANDS", "SILENT", "NO_FAIL" ],
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "skill": "deduction",
     "base_casting_time": 500
   },
@@ -372,6 +395,7 @@
     "description": "Create a magical sphere that will contain any blood you will put in it until the spell ends.",
     "message": "You conjure a magical sphere to store blood.",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "valid_targets": [ "self" ],
     "effect": "spawn_item",
     "effect_str": "vampire_blood_ball",
@@ -379,7 +403,7 @@
     "base_casting_time": 75,
     "flags": [ "NO_HANDS", "SILENT", "NO_FAIL" ],
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "difficulty": 0,
     "min_duration": 16640000,
     "base_energy_cost": 350,
@@ -389,12 +413,13 @@
     "id": "vampire_invisible_in_dark",
     "type": "SPELL",
     "name": "Shrouded by the Shadowed Path.",
-    "description": "Surround yourself in shadows, becoming invisible for a while.  This power will fail if you stand outside under the sun.",
+    "description": "Surround yourself in shadows, becoming invisible for a while.  This power will fail if you stand outside under the sun.\n\n<color_light_red>Blood Cost:</color> 300 ml (<u_val:blood_amount_for_graph> ml current).",
     "message": "You gather as many shadows as you can.",
     "teachable": false,
+    "magic_type": "xe_vampire_blood_powers",
     "valid_targets": [ "self" ],
     "skill": "deduction",
-    "spell_class": "VAMPIRE",
+    "spell_class": "VAMPIRE_BLOOD_ARTS",
     "flags": [ "SILENT", "NO_HANDS", "NO_LEGS", "NO_FAIL" ],
     "effect": "effect_on_condition",
     "effect_str": "EOC_VAMPIRE_INVISIBLE_IN_DARK",


Reviews:
user: login: Maleclypse
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-19T18:57:13Z
user: login: Standing-Storm
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-20T01:49:51Z

Review comments:
diff_hunk: @@ -536,6 +536,17 @@
     "flags": [ "CANNIBAL", "HEMOVORE" ],
     "cancels": [ "DREAMER", "DREAMSMITH", "EATER", "INVENTOR" ]
   },
+  {
+    "type": "mutation",
+    "id": "VAMPIRE_BLOOD_ARTS",
+    "name": { "str": "Blood Arts" },
+    "points": 1,
+    "description": "This provides the school trait for vampire blood powers.  It should not be visible.",
+    "valid": false,
+    "purifiable": false,
+    "player_display": false,
+    "cancels": [ "DREAMER", "DREAMSMITH", "EATER", "INVENTOR" ]
path: data/mods/Xedra_Evolved/mutations/mutations.json
user: login: Maleclypse
body: Didn't we have it set so that Vampire wouldn't cancel dream magick prior to tier 3 previously? I guess this just prevents learning new spells  and a later effect removes all learned spells?  Trying to make sure it works how I expect prior to merging
created_at: 2025-04-19T18:57:13Z
author_association: MEMBER
diff_hunk: @@ -536,6 +536,17 @@
     "flags": [ "CANNIBAL", "HEMOVORE" ],
     "cancels": [ "DREAMER", "DREAMSMITH", "EATER", "INVENTOR" ]
   },
+  {
+    "type": "mutation",
+    "id": "VAMPIRE_BLOOD_ARTS",
+    "name": { "str": "Blood Arts" },
+    "points": 1,
+    "description": "This provides the school trait for vampire blood powers.  It should not be visible.",
+    "valid": false,
+    "purifiable": false,
+    "player_display": false,
+    "cancels": [ "DREAMER", "DREAMSMITH", "EATER", "INVENTOR" ]
path: data/mods/Xedra_Evolved/mutations/mutations.json
user: login: Standing-Storm
body: Oh, good catch. You're right--this is a copy-paste error. Since vampirism is reversible I set it up so that they can keep their dream magick but can't learn new spells before they take the final step (so if you get infected but are looking for a cure you don't have to start over)
created_at: 2025-04-20T01:49:50Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-18T16:28:58Z
body: Spell checker encountered unrecognized words in the in-game text added in this pull request. See below for details.
<details>
<summary>Click to expand</summary>

* Exert command over a predatory wild animal like a wolf or a rat, making it your ally for a time.\n\n<color_light_red>Blood Cost:</color> 500 **ml** (<u_val:blood_amount_for_graph> **ml** current).
* Heal your wounds with the power of stolen blood.\n\n<color_light_red>Blood Cost:</color> 750 **ml** (<u_val:blood_amount_for_graph> **ml** current).
* Stare into the eyes of your victim and wills them to pause.  This power does not work on unliving targets.\n\n<color_light_red>Blood Cost:</color> 150 **ml** (<u_val:blood_amount_for_graph> **ml** current).
* Surround yourself in shadows, becoming invisible for a while.  This power will fail if you stand outside under the sun.\n\n<color_light_red>Blood Cost:</color> 300 **ml** (<u_val:blood_amount_for_graph> **ml** current).
* Take control of a mind.  Only works on targets that have weak minds.\n\n<color_light_red>Blood Cost:</color> 700 **ml** (<u_val:blood_amount_for_graph> **ml** current).
* With a bit of stolen blood and a savage expression, you can send your enemies fleeing.  This power only works on enemies capable of feeling fear.\n\n<color_light_red>Blood Cost:</color> 150 **ml** (<u_val:blood_amount_for_graph> **ml** current).
* You can move faster than the eye can see, avoiding the claws and teeth and weapons of your enemies.\n\n<color_light_red>Initial Blood Cost:</color> 250 (<u_val:blood_amount_for_graph> **ml** current)\n<color_light_red>Periodic Blood Cost:</color> 125 **ml**
* You can sleep within the earth itself, avoiding the hateful light of the sun.  This power must be used on diggable soil.\n\n<color_light_red>Blood Cost:</color> 0 **ml**.
* You can smell even the faintest traces of living human, or nearly-human, blood.\n\n<color_light_red>Blood Cost:</color> 0 **ml**.
* You can twist your fingernails into sharp claws, allowing you to inflict extra damage in unarmed combat.\n\n<color_light_red>Initial Blood Cost:</color> 125 **ml** (<u_val:blood_amount_for_graph> **ml** current)\n<color_light_red>Periodic Blood Cost:</color> 62 **ml**
* You consume some of the blood in your veins, turning it into magical power.\n\n<color_light_red>Blood Cost:</color> 200 **ml** (<u_val:blood_amount_for_graph> **ml** current).
* You focus on sending the blood in your veins to where it can do the most good for your immediate stamina.\n\n<color_light_red>Blood Cost:</color> 100 **ml** (<u_val:blood_amount_for_graph> **ml** current).
* You mastery over the shadowed path of blood has become much more potent, allowing you to use your vampiric powers and a massive expense of blood to blot out the sun for a few dozen minutes.\n\n<color_light_red>Initial Blood Cost:</color> 3000 **ml** (<u_val:blood_amount_for_graph> **ml** current)
* Your body exceeds normal human reaction limits as blood turns to ash in your veins.\n\n<color_light_red>Initial Blood Cost:</color> 750 **ml** (<u_val:blood_amount_for_graph> **ml** current)\n<color_light_red>Periodic Blood Cost:</color> 375 **ml**
* Your body prepares to prevent the loss of any blood to combat damage.\n\n<color_light_red>Initial Blood Cost:</color> 500 **ml** (<u_val:blood_amount_for_graph> **ml** current)\n<color_light_red>Periodic Blood Cost:</color> 250 **ml**
* Your cold flesh is not as vulnerable as it once was.  Activate to render it even more resistant to physical damage.\n\n<color_light_red>Initial Blood Cost:</color> 150 **ml** (<u_val:blood_amount_for_graph> **ml** current)\n<color_light_red>Periodic Blood Cost:</color> 75 **ml**
* Your eyes gleam lightly red as the light catches in them and with a few drops of the stolen blood in your veins you are able to see in the dark.\n\n<color_light_red>Initial Blood Cost:</color> 100 **ml** (<u_val:blood_amount_for_graph> **ml** current)\n<color_light_red>Periodic Blood Cost:</color> 50 **ml**
* Your stolen blood reinforces your muscles, making your grip crack bone and your punches dent steel.\n\n<color_light_red>Initial Blood Cost:</color> 150 **ml** (<u_val:blood_amount_for_graph> **ml** current)\n<color_light_red>Periodic Blood Cost:</color> 75 **ml**
</details>

This alert is automatically generated. You can simply disregard if this is inaccurate, or (optionally) you can also add the new words to `tools/spell_checker/dictionary.txt` so they will not trigger an alert next time.

<details>
<summary>Hints for adding a new word to the dictionary</summary>

* If the word is normally in all lowercase, such as the noun `word` or the verb `does`, add it in its lower-case form; if the word is a proper noun, such as the surname `George`, add it in its initial-caps form; if the word is an acronym or has special letter case, such as the acronym `CDDA` or the unit `mW`, add it by preserving the case of all the letters. A word in the dictionary will also match its initial-caps form (if the word is in all lowercase) and all-uppercase form, so a word should be added to the dictionary in its normal letter case even if used in a different letter case in a sentence.
* For a word to be added to the dictionary, it should either be a real, properly-spelled modern American English word, a foreign loan word (including romanized foreign names), or a foreign or made-up word that is used consistently and commonly enough in the game. Intentional misspelling (including eye dialect) of a word should not be added unless it has become a common terminology in the game, because while someone may have a legitimate use for it, another person may spell it that way accidentally.
</details>

author_association: CONTRIBUTOR