Repository navigation
Add the hidden Blood Magic path - #71
Draft
XxFran10xX wants to merge 55 commits into
Draft
XxFran10xX wants to merge 55 commits into
XxFran10xX wants to merge 55 commits into
Conversation
Blood magic phase 1: per-character blood records and altars kept in memory and written whole, bound altar/knife items, a barrier-block altar with a level-based display that nobody can break, push or blow up, placement only underground and outside WorldGuard regions, self-purification when the owner character dies, and /magic blood staff tools. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blood magic phase 2: dark deeds (blade animal kills, more at night or alone; characters you killed for good; deep corruption) fill a hidden per-character meter, faster for configured evil traits. Past the threshold the god teaches the rite in order and hands over the bound ritual knife and altar. Later stages hear occasional lines; true-path mages only hear their own dark self, in a different style and sound. Staff can wake the voices or push a line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blood magic phase 3: the ritual knife binds a living animal still on its owner's altar and only that knife's kill counts. Seven kinds, one per rolling day, taken from other Cooking husbandry keepers (read by reflection, so Cooking stays optional). Each offering raises the altar's level and look and corrupts the room a little; the room also turns slowly between offerings. Every changed block is journalled and put back when the altar purifies. A stolen animal leaves a trace where it was led away and a vague note for its keepers. The seventh kind hands over the blood knife and moves the mage to the god's question. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blood magic phase 4: right-clicking the altar with one's own blood knife opens the god's question with a confirmation step. Devotees keep permanent injuries as their mark, skip the hunt, unlock the devotee class (through RPCharacters' ClassUnlocks when present) and get bound armour. Refusing keeps the current class and starts the hunt. Blood armour is unbreakable, will not stay on any other character, and crumbles once its owner is dead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blood magic phases 5 and 6: a knocked-out character near the altar is dragged onto it with the mage's blood knife and dies for good when the short rite ends. Hunt sacrifices earn points by how much the victim mattered to the mage, from a hidden bond score: counted RP conversations, time spent near each other (sampled for every character) and a will heir who is another player's character the two spent real time with. Same-account characters never count; fresh characters and taking the same player twice in a row are refused. The closest characters are kept for the finals, named one at a time from least close to closest. A named target dying any other way is a failed sacrifice with backlash and a wait; dead, vanished or long-absent targets are replaced, and staff can list, reroll, set or skip targets. Finals grant MythicLib stat boons; reaching the hunt goal unlocks the true class and armour. Builds against RPCharacters 2.31.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sneak and right-click a knocked-out character with the blood knife to drag the body along; RPCharacters keeps it down where it is moved (moveDowned), so the rite now also holds the victim on the altar. The items, altar stages, trace and the two bound armour sets use the tfmc_blood ItemsAdder pack, and bound items opt out of ItemsAdder's auto_update. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BloodFx plays configurable moments (fx: in bloodmagic.yml): layered sounds and particles in points, rings, columns and spirals, with delays and private layers for the player the moment is about. Altars breathe by level while someone is near; the rite, the drag, the question, the finals, the voices and the armour all have their own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The god speaks as a hungry choir ("we"), the dark self as the mage's own
cold thoughts ("I"); final target, nobody and failed lines now have one
version per voice. Rewrites the teaching lines, stage whispers, ascended
lines, every altar, rite and drag message, the question menu and the item
lore; unnamed stolen animals read "your cow".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The god is now Lorvear, the first vampire: paternal and regal, he calls the mage child and speaks of Alaric, the Reaper and the Lady of the Tower, as in the Codex. The question menu asks the mage to kneel to him or to no one; the dark self answers to no father. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The self voice is the Void Reaper working on the mage unseen: at the god's question it argues against kneeling half the time, and it is all a mage hears after refusing Lorvear. It only hints at the quiet and the cold; grey with a touch of void in its colour and effects. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A victim who logs out on the altar is sacrificed as they leave. - The no-repeat rule only applies to the hunt, so a named final target can always be taken; carrying needs the same eligibility as the rite. - The rite needs a clear line from the body to the altar and refuses a body another mage is dragging; dragged bodies are never laid in liquid, fire or walls. - Boons are removed by key, also on disable; the question menu acts a tick after the click. - Bound animals are tagged so they always wake after an unload, a second mage cannot take a bound animal, and a refused teleport does not bind. - Corruption skips protected regions; placing the altar fires a BlockPlaceEvent so claims can refuse it and loggers record it. - enabled: false stops everything but the dead-owner sweep; corruption plants are fully grown; purifying clears the block the altar was. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Switching the feature off ends rites, drags and animal bindings, and a victim's logout only finishes a rite that still holds. - Drag safety is judged at body height, so slabs, paths and soul sand are fine while water plants, waterlogged blocks and hot ground are not. - The rite's line of sight runs a body's height up to the altar top, so slabs, pews and the altar's own bone blocks no longer block it. - A refused move does not start a rite. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A second line just above slab height only counts full blocks, so a body can no longer be pulled through a one-block window while slabs, stairs and beds still do not get in the way. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
The true path's armour is made from the people it took: each piece with
a {victim} name in bloodmagic.yml is named after a hunt victim, the most
important (most points, then the closest rank) on the skull and so on
down to the boots. With fewer victims than pieces the names start over
from the top; an unknown victim leaves the item's own name.
Character sacrifices now keep the victim's closeness rank so the order
can tell victims worth the same points apart.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
permissions: in bloodmagic.yml names a permission each path's character holds while it is played (magic.blood.bloodsworn, magic.blood.sanguinar), so ArmourShop can show the Bloodsworn skins only to Bloodsworn. It follows the character: set on session start, the choice and staff path/reset, removed on session end and quit. ArmourShop skins replace a piece's ItemsAdder compound and drop its override_auto_update, so blood armour is marked again whenever an inventory closes, armour changes or a session starts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
permissions: in bloodmagic.yml takes one permission or a list, so a Bloodsworn character can hold both magic.blood.bloodsworn (its skins) and magic.wild (the hidden Wild Mage Sets skin category). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The binding mage's own ritual knife now kills a bound animal with one hit (the hit is made lethal at HIGHEST), with a new animal_slain moment: a sweep, a wet strike and a spray of blood. Any other hit keeps its damage, on people too. The Ritual Knife is now an MMOItems lore weapon (m.lore_weapons.ritual_knife), so its name, lore and look come from MMOItems. The voice's first lines no longer name Lorvear: only small hints, like Alaric. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Redstone ore and dust, netherrack and nether bricks, crimson nylium, roots, fungus and weeping vines, nether wart blocks and red candles; no more cobwebs, wither roses, skulls, mossy or cracked stone or bone blocks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bloodmagic.yml and the blood: block of messages.yml become one folder, wildmagic/bloodmagic, with a file per topic: settings, items, voices, animals, corruption, choice, armour, fx and messages. Every .yml there but messages.yml is merged into one config; messages.yml is laid over Magic's messages (live keys first, its bundled copy as fallback). A leftover bloodmagic.yml is reported and no longer read. wildmagic/ is meant to take the other wild schools the same way. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Breaking, pushing or blowing up a block the altar changed (while it is still what the altar made it) fails like the altar itself: a warm pulse, a heartbeat and a short line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The altar is the middle of a meditation circle, so placing it shapes the room around it: open floor out to the farthest pedestal (9 by 9 with the default offsets), placement.room.height high. Small gaps are carved and floor holes filled with the stone the player stands on; too many changes, liquid, containers, unbreakable blocks, another altar or its changes, claimed ground or opening the rock to the sky refuse the stone with the size it needs. Runs after the protection probe; the room stays when the altar is purified. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The altar is the middle of its meditation circle: its owner right-clicks it with an empty hand and sits on top (an invisible, unsaved display), so meditation starts there like on any seat. The seat goes when left, when the altar is purified and when Magic stops. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fting colours
Right-clicking the altar no longer seats its owner: sitting on it (GSit /sit or any seat
on top) is how they meditate there, and the stone answers with its own line (a colder
one for anyone else). The plugin-made seat is gone.
From the knife on, the mage's own thoughts answer Lorvear half the time. Animal lines
are written from early to late and the pick follows the kinds given. Each voice now has
a start and an end gradient (voices.yml colors) blended by how far the character has
come: Lorvear grows from dim red into the bright Bloodmagic reds, the mage's own voice
from pale and clear into dark blood. Messages written as {god}... or {self}... (the
animal and rite reactions) are said in those colours. No line names another god or
order any more.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Placing the altar puts an InteractibleFurniture pedestal on every free spot of its meditation ring (open, on solid floor; taken spots are left for the player's own). They belong to the altar: nobody can pick them up, carry them off or break them. Purifying the altar removes them and drops whatever sits on them; pedestals that are not loaded then stay bound in data/bloodmagic/leftover_pedestals.json and go when their chunk loads. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pedestals (their barrier block) and the altar are not floor or ceiling for candles, redstone, roots or vines, so nothing grows over an artifact. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Placing the altar relays its chamber's floor, walls and ceiling in placement.room.template (the same for every player, blocks the corruption turns) with hidden light in the top corners; openings in the walls and ceiling stay open. It refuses when water or lava is in or against the shell, on any WorldGuard region in the 11x11, when a claim or installation denies a corner, and when the chamber would have no doorway two blocks high (it is locked once laid). After that nobody but staff (magic.blood.bypass, under magic.admin) may place, break, pour, hang or set furniture in the chamber out to the corruption's reach; pistons and explosions leave it alone too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…candles The ritual knife's cut no longer kills: the bound animal bleeds out on the stone (animal.rite.bleed_seconds, 15) with blood running into the stone and a slowing heartbeat, a line at the cut and halfway, while its mage stays within stay_range of the altar. Only then does the stone drink and the kind count. Stepping away, switching character or leaving spills it, wasted; nothing else can hurt a bound animal. Animal-stage voice lines now come in tiers by kinds given (lines.animal.<kinds>), from the mage's doubts before the first kind to numbness by the fifth. Once the altar stands they speak only in its chamber, while the stone is ready for the next kind and no rite is under way. The chamber template stands lit black candles in the floor corners and the altar glows (an unseen light above it, removed on purify); no hidden ceiling lights by default. magic.blood.bypass is no longer a child of magic.admin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Candles come with the corruption and on the altar model itself; the template option stays. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
animal.rite.music (default tfmc_blood:rite.bleed, RECORDS, 0.8) plays to the mage alone from the cut and stops when the stone drinks, the blood is spilled or the animal dies otherwise. Animal-stage voices no longer speak anywhere while no altar stands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every animal rite sound (binding, the cut, the heartbeat, the stone drinking, spilling, the blood knife's arrival) is now heard by players nearby instead of the mage alone, at lower volumes. Shared blood effect sounds reach only players within fx.hear_radius (10) instead of the vanilla 16 blocks. The rite music stays private to the mage. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BreedingBuddies has taken husbandry over from Cooking (on Dev already; Cooking's husbandry is disabled there), so the stolen-animal check now asks BreedingBuddies' HusbandryOwnershipService first and falls back to Cooking's. Without this every animal would read as unowned once BreedingBuddies runs, and no stolen kind could ever count. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BreedingBuddies runs on Dev only; Main (the reference) keeps husbandry in Cooking, so the stolen-animal check stays on Cooking's records for now. This reverts commit 52ca34a. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ore the pedestals Binding a led animal unleashes it and hands the lead back (or drops it if the inventory is full). The corruption now picks, of its random candidates, the one nearest the altar that touches what it already turned, so the room reddens in connected veins; floor and ceiling decorations grow only on blocks it has turned, and candles stand only on the eight spots right in front of the pedestals. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…narration follows the path
The answer to Lorvear is no longer a menu. Right-clicking the altar with the blood knife in
its chamber starts the question: the god asks over a few lines (the mage's own voice cuts
in), then waits for the answer spoken aloud in RP chat. The answer is asked back once and
sealed when said again; leaving the chamber or letting the time run out ends it and it can
be asked again. Lines, answer words, timing and optional music live in choice.yml.
Touching and sitting on the altar now say something different at each stage and path.
Narration of the stone is written {stone} and drawn in the colours of whoever speaks to the
mage now: Lorvear's, or after refusing him the mage's own; the red narration lines use it,
so nothing stays crimson after the refusal.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
choice.music defaults to tfmc_blood:rite.question with loop_seconds 91: the track is started again for as long as the question goes on, and stopped when it ends. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ch time Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The altar model's candles now carry only wicks. Magic spawns a small flame (and now and then a wisp of smoke) over each wick while a player is near, following the altar's facing, scale and the candle the skull takes at level 4 (fx.yml candles:). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Like vanilla candles, each flame now spawns 1 px above its wick top instead of 0.4 px, so it no longer sinks into the wick. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The devotee answer and the end of the hunt now put the character into the path's class through RPCharacters (bound to it; players never pick it). finals.class_rewards lists what each final sacrifice gives the class: points for its own skill-point pool, MMOCore slots and spells. ClassRewards works it out from the record on every final, session start, class change and staff stage/path change; ascended characters get all. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fran's balance: 10 points over the five finals instead of 20. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fran: devotees get their class rewards but no stat boons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sanguinar has no mana, so final 2 gives 2 max health instead of 20 max mana. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each path now sets out 8 bound artefacts on its altar's pedestals when its class is given: the devotee's at the kneel, the true path's when the hunt is done, and each true-path final puts one named after its victim in place of an older one. An artefact only counts once sunk into the altar's pool of blood, and each gives an equal share of the path's blood resonance (devotee 20, true path 20 rising to 95 with the finals). Blood spells now need that resonance for their tier (Minor 5 up to Transcendent 90); a refused spell costs nothing. The pool stays full while the path goes on. Once it is complete, the sunk artefacts drink it by the hour the character is played, and only people sacrificed on the altar fill it again (by closeness, same rules as the hunt). Resonance never falls below the Minor floor, and nothing earned is taken away. Staff get /magic blood pool and give <player> artefacts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nance Artefacts no longer sink into the pool for good. Right-clicking the altar with one sets it in the pool to charge: it sinks, turns in the blood while the stone's heart beats, and rises glowing back into its owner's hands to set on a pedestal again. Charging is free while the path goes on and costs pool blood once it is complete; an artefact still charging when its owner leaves (or the server stops) comes back at the next session. Blood resonance now comes from wild magic meditation: sitting on the altar among the charged artefacts, a drop of blood rises from one with each heartbeat and drifts to the mage, and catching it draws its charge, much on the beat and a little off it (which also costs the mage some health). Once the path is complete, resonance fades by a share of itself per hour played. The meditation, the charging and the altar room each have a private sound loop (vanilla placeholders until the music is chosen). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fran picked the catacomb chant: tfmc_blood:meditate.chant loops every 24 s while meditating and tfmc_blood:rite.charge plays as an artefact goes into the pool (both in the ServerAssets blood pack). The altar room gets no ambience, so BloodAmbience goes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Bond flushes (every ten minutes, one file per changed character, so dozens on a full server) are written on a background thread in order, from copies taken on the main thread; shutdown waits for them. A failed write is logged. - Fading blood resonance is written every ten minutes and on shutdown, or at once when a tier slips, instead of every minute per mage. A record reset or forgotten meanwhile is not written back. - A meditation writes its record once, when it ends, not on every catch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A shutdown that never saves the world can bring a purified altar's chunk back from before the purify: its display, altar block and glow return with no altar behind them. Strays were only swept as chunks loaded, which misses spawn and force-loaded chunks that load before the plugin. Settling after enable now sweeps every loaded world too, and a stray whose altar is gone also takes the altar block and glow under it (unless another altar stands there). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…f as often Sitting on a blood altar also ran Magic's own meditation start check every tick: the altar's pedestals form a full ring, so it re-read the lore of all eight blood artefacts each tick (about 0.06 ms per sitter) and could tell a blood mage there were no artifacts. Blood altar seats are now skipped. The charging artefact and the meditation drops move every other tick with a two-tick teleport duration, halving their teleport events. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kneeling no longer gives two random permanent injuries: the devotee gets the one RPCharacters trait choice.devotee_trait names (manaless: -2 to every attribute, given only here), and while a character bears it Magic takes away all max mana (a -100% MAX_MANA modifier under the boons' key). A character dying on the altar now hears it happen: four lines spread over the rite (blood.rite.dying.1-4), one as it ends (dying.last), and another if the rite breaks first (spared). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds the hidden Blood Magic path to Magic (package
net.tfminecraft.magic.blood, configbloodmagic.yml). Hidden content: keep it off the wiki./magic blood whisper.BlockPlaceEvent.ClassUnlocks), bound armour, then straight to the finals.<name> Skull,Ribcage,Hide,Bones), the most important victim (most points, then closest rank) on the skull and so on down; with fewer victims than pieces the names start over from the top. Sacrifices now keep the victim's closeness rank for this order.moveDownedand is never laid in liquid, fire or walls.BloodFxgives every moment layered, configurable sounds and particles (fx:inbloodmagic.yml).permissions:in bloodmagic.yml gives the played character of each path a permission (magic.blood.bloodsworn,magic.blood.sanguinar) through a permission attachment: set on session start, the choice and staff path/reset, removed on session end and quit, so it follows the character. ArmourShop uses it to show the Bloodsworn skin category only to Bloodsworn.override_auto_update; Magic marks every blood piece again when an inventory closes, armour changes or a session starts.tfmc_bloodItemsAdder pack (ServerAssets). Bound items opt out of ItemsAdderauto_update./magic blood list | info | stage | path | give | whisper | voice | target | bonds | altar | reset, documented in ADMIN-COMMANDS.md.Depends on
feat/knockout-move(ClassUnlocksandPvpKnockoutManager.moveDowned). Both are reached by reflection, so Magic still runs on older RPCharacters. Without them, staff unlock classes by hand and a dragged body snaps back.feat/blood-path-art: thetfmc_bloodpack, MMOItemsBLOODSWORN_*/SANGUINAR_*and the MMOCorebloodsworn/sanguinarclasses. Load the pack before this config; a missing IA id builds dirt.Review and tests
bloodpackage and the integration bridge are at 100%, with no skipped tests.main.enabled: falsestops the rite.Notes
🤖 Generated with Claude Code