Skip to content

BloodCult port part 1#42776

Closed
Terkala wants to merge 14 commits intospace-wizards:masterfrom
Terkala:Bloodcult_port_part_1
Closed

BloodCult port part 1#42776
Terkala wants to merge 14 commits intospace-wizards:masterfrom
Terkala:Bloodcult_port_part_1

Conversation

@Terkala
Copy link
Copy Markdown

@Terkala Terkala commented Feb 4, 2026

About the PR

This is the first half of adding the Blood Cult. I've cut the Blood Cult code in half, specifically this is the core functionality of the Blood Cult antagonist, the cult spells, and how the cult tracks progress. I've omitted all of the Blood Cult rune mechanics, Juggernauts, Shades, the Cult Rituals, and half of the progression mechanics (the ones that rely on rituals). I've commented out any hooks that reference these features, rather than delete them entirely. I've done my best to clean up dead code blocks from earlier implementations. Hopefully this trims the PR size down to small enough to be review-able (though it's still massive).

I've received permission from all of the original authors to release this as MIT code, and attributions for music and sound have been added. Art is added with attribution.

Why / Balance

Design Document explains why:
space-wizards/docs#591

Technical details

The core of the game mode is around the blood collection mechanic. The blood cult has to either convert people or spill their blood to progress, and the way this is tracked is both the conversion system (not included here) and the EdgeEssentiaSystem. Basically, when the cultists stab people with their daggers, it injects edge essentia. This triggers the metabolism system that makes them bleed unholy blood while metabolizing the chemical, and tracks the amount of bleeding they do while injected with edge essentia as cult progress. There is a counter that caps the gathered progress from any one player at 100, and it has a logic check to ensure a soul (player) is present. This is to prevent farming (via a chef making a monkey-cube stack and sacrificing all of them). Since the code for checking the cult progress via study-veil isn't in, use the admin command "cult_queryblood" to view the cult progress. Keep in mind phases 2 and 3 are calculated mid-round (based on 10% of all possible blood that is still remaining to be collected), so it'll show very small numbers during testing.

The cult dagger itself is special, and holds some Edge Essentia inside itself, which it injects on-hit. It also turns to ash if anyone not from the cult attempts to pick it up, preventing people from using it against cultists or to gather prints.

There is also a commune mechanic, which is an activateable ability that functions like a radio channel. Unlike a radio channel, it masks what you are saying with cult-gibberish so nobody can listen in. Which starts at a whisper, and eventually becomes loud once the cult has reached the later stages (not yet implemented in this partial port).

The placeholder for the Study Veil ability is there, but does not function in this version as the runes and cult progress have been disabled. So the ability is added but will not function.

Media

Requirements

Breaking changes

Changelog

No changelog, this is only a half-implementation.

@PJBot PJBot added S: Untriaged Status: Indicates an item has not been triaged and doesn't have appropriate labels. Changes: Sprites Changes: Might require knowledge of spriting or visual design. S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. Changes: UI Changes: Might require knowledge of UI design or code. size/XL Denotes a PR that changes 5000+ lines. Changes: Audio Changes: Might require knowledge of audio. labels Feb 4, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 4, 2026

RSI Diff Bot; head commit 71e59b7 merging into 899c8d2
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/BloodCult/Clothing/cult_boots.rsi

State Old New Status
equipped-FEET-vox Added
equipped-FEET Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/BloodCult/Clothing/cult_hood.rsi

State Old New Status
equipped-HELMET-reptilian Added
equipped-HELMET-vox Added
equipped-HELMET-vulpkanin Added
equipped-HELMET Added
icon Added

Resources/Textures/BloodCult/Clothing/cult_robes.rsi

State Old New Status
equipped-OUTERCLOTHING-vox Added
equipped-OUTERCLOTHING Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/BloodCult/Effects/culteyes.rsi

State Old New Status
arachnid Added
diona Added
gingerbread Added
human Added
moth Added
reptillian Added
skeleton Added
slime Added
thaven Added
vox Added

Resources/Textures/BloodCult/Effects/halo.rsi

State Old New Status
halo Added

Resources/Textures/BloodCult/Objects/Weapons/Melee/bloodcult_dagger_curved.rsi

State Old New Status
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/BloodCult/Objects/Weapons/Melee/bloodcult_dagger_serrated.rsi

State Old New Status
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/BloodCult/Objects/Weapons/Melee/bloodcult_dagger_straight.rsi

State Old New Status
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/BloodCult/Sheets/glass.rsi

State Old New Status
runedglass-inhand-left Added
runedglass-inhand-right Added
runedglass Added
runedglass_2 Added
runedglass_3 Added

Resources/Textures/BloodCult/Sheets/metal.rsi

State Old New Status
runedmetal-inhand-left Added
runedmetal-inhand-right Added
runedmetal-unshaded Added
runedmetal Added
runedmetal_2-unshaded Added
runedmetal_2 Added
runedmetal_3-unshaded Added
runedmetal_3 Added

Resources/Textures/BloodCult/Sheets/plasteel.rsi

State Old New Status
runedplasteel-inhand-left Added
runedplasteel-inhand-right Added
runedplasteel Added
runedplasteel_2 Added
runedplasteel_3 Added

Resources/Textures/BloodCult/spells_cultist.rsi

State Old New Status
commune Added
spell_select Added
study_veil Added
stun Added
stun_selected Added
summon_dagger Added
twisted_construction Added

Resources/Textures/Interface/Misc/job_icons.rsi

State Old New Status
Cultist Added

Edit: diff updated after 71e59b7

Copy link
Copy Markdown
Member

@slarticodefast slarticodefast left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quick first-pass look, not a full review.
I would really recommend splitting this up further so it can be reviewed more easily.
Best start with only the conversion system, which should be unified with that of the revolutionaries.


[Serializable, NetSerializable] public sealed partial class DrawRuneDoAfterEvent : SimpleDoAfterEvent
{
[NonSerialized] public EntityUid CarverUid;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This breaks persistence.

@PJBot PJBot added S: Awaiting Changes Status: Changes are required before another review can happen and removed S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. labels Feb 4, 2026
@slarticodefast
Copy link
Copy Markdown
Member

slarticodefast commented Feb 4, 2026

Also for future reference, can you link or screenshot the permission to relicence from all the authors here on this PR? Or just ask them if they could comment here saying that they agree with it.

@slarticodefast
Copy link
Copy Markdown
Member

Oh, and please add media to your PR description showing all the added features in-game.

@Terkala
Copy link
Copy Markdown
Author

Terkala commented Feb 4, 2026

Also for future reference, can you link or screenshot the permission to relicence from all the authors here on this PR? Or just ask them if they could comment here saying that they agree with it.

@kbarkevich (original author) via discord
image
@JoulesBerg (blanket permission for all funkystation code to be MIT)
image
@Rainbeon (blanket permission for all code to be MIT)
image
@taydeo
Implicit from them merging the PR with this code for an MIT licensed project linked below (though I'll ask them to comment here for clarity):
https://github.com/funky-station/forky-station

@ThatGuyUSA ThatGuyUSA added A: Roundflow/Antag Area: Roundflow - "What happens in the game", including antagonist roles and their capabilities and removed S: Untriaged Status: Indicates an item has not been triaged and doesn't have appropriate labels. labels Feb 4, 2026
@ThatGuyUSA ThatGuyUSA added T: UI / UX Improvement Type: UI and player facing interactive graphical interfaces A: Combat Area: Combat features and changes, balancing, feel A: Art Area: Art with no implications for other areas. P2: Raised Priority: Item has a raised priority, indicating it might get increased maintainer attention. D1: High Difficulty: Extensive codebase knowledge required. and removed T: UI / UX Improvement Type: UI and player facing interactive graphical interfaces labels Feb 4, 2026
Moved a number of systems to content.shared instead of running on content.client and content.server. Fixed mute effect from the sanguine dream spell. Fixed an initialization issue with the bloodcult bleed type. Eliminated the ReagentAutoRefillSystem in favor of the existing system that did the same thing. Removed un-used code for runes (to be re-added later). Changed entity reference to the Entity<T> pattern. Added documentation. Changed how it selects beacon locations so it isn't hard-coded anymore.
@Terkala
Copy link
Copy Markdown
Author

Terkala commented Feb 9, 2026

Still working on addressing some of the code change requests and building out attempt-events for the melee weapon system

@kbarkevich
Copy link
Copy Markdown

In case it's still needed here: I'm the original author, and I agree to the relicensing as long as I'm still given credit for my contributions.

@PJBot PJBot added S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. and removed S: Awaiting Changes Status: Changes are required before another review can happen labels Feb 9, 2026
@Terkala
Copy link
Copy Markdown
Author

Terkala commented Feb 9, 2026

All code review comments from @slarticodefast addressed, and code updated accordingly. Ready for re-review
Edit: Github hid a bunch of the code review comments from me. Give me a few days to re-go-over the comments and make sure everything's addressed

Also removed holy water damage from the holy water medicine, since blood cultists can't take holy damage to begin with
@Terkala
Copy link
Copy Markdown
Author

Terkala commented Feb 10, 2026

I've gone over the comments now (took way less time than anticipated) and updated everything accordingly. Thank you for all the feedback. I've implemented almost everything suggested with a few exceptions, and commenting my reasoning behind not doing so. This should be good for a re-review now

@Golubgik
Copy link
Copy Markdown
Contributor

Golubgik commented Feb 23, 2026

To be honest, I would follow slarti's advice and post the code in parts, as it is easier to review and refactor. I am eager to work on the blood cult and have made some progress in this direction. #42999 . The cult deserves good, non-hardcore code.😶

@Terkala
Copy link
Copy Markdown
Author

Terkala commented Feb 23, 2026

To be honest, I would follow slarti's advice and post the code in parts, as it is easier to review and refactor. I am eager to work on the blood cult and have made some progress in this direction. #42999 . The cult deserves good, non-hardcore code.😶

I'm extremely confused. That is exactly what I've done. This is part of the bloodcult code. They asked me to cut the original, 100% bloodcult PR into parts, so I cut it in half, in the only logical place I could think of to cut it in half.

@Golubgik
Copy link
Copy Markdown
Contributor

Golubgik commented Feb 23, 2026

I'm extremely confused. That is exactly what I've done. This is part of the bloodcult code. They asked me to cut the original, 100% bloodcult PR into parts, so I cut it in half, in the only logical place I could think of to cut it in half.

This is still a lot. I would divide it into, you know, equipment-constructs-buildings-abilities-runes-game rule. For example, you can look at the Xenoborg Pull Requests.

@Terkala
Copy link
Copy Markdown
Author

Terkala commented Feb 24, 2026

I'm extremely confused. That is exactly what I've done. This is part of the bloodcult code. They asked me to cut the original, 100% bloodcult PR into parts, so I cut it in half, in the only logical place I could think of to cut it in half.

This is still a lot. I would divide it into, you know, equipment-constructs-buildings-abilities-runes-game rule. For example, you can look at the Xenoborg Pull Requests.

The difference is that Xenoborgs was created while being PRed. Bloodcult is done, this code is all 100% finished and working. And there is massive cross-integration of those systems. Runes interact with the constructs. Constructs can interact with runes. Their equipment can interact with abilities and with the gamerule itself. So in order for me to split up those features without causing errors, I have to cut the code into pieces and intentionally break and change things just to make the review process easier. I have several pages of notes just on the features I broke to make this PR so I can go back and fix them if/when it ever gets accepted and I can PR the 2nd half.

While it would be "nice" for me to put in this extra work to make it merged to Wizden, it's not really my focus. I was asked to move the code over to Wizden because people here were interested in it. My benefit from making this PR because the code review is actually helpful to the quality of the code, and because it makes maintenance of the bloodcult easier. It's in Funky's normal game mode rotation right now today, and has been for about a month with no issues.

@Terkala
Copy link
Copy Markdown
Author

Terkala commented Mar 27, 2026

All requested changes have been addressed, save one or two small things that I left open discussion on. It's been months since anyone has commented, is this PR still being considered?

@slarticodefast
Copy link
Copy Markdown
Member

All requested changes have been addressed, save one or two small things that I left open discussion on. It's been months since anyone has commented, is this PR still being considered?

It's still a feature maintainers would very much like to have in the game, but like I mentioned in my previous quick look this really needs to be split up and implemented step by step instead of one giant PR so that reviewing it is actually feasible.

Like I mentioned above, the first step that is needed is probably the conversion mechanic, which should be a generic faction conversion system that is shared with revolutionaries and can be reused for other cults in the future.

The second part is the spell system and BUI. This can be implemented without the actual spells, which then can be added one by one.

You can also add an admin antag ctrl verb like we did for the changeling and wizard to allow in-game testing before a full release.

If you address these points than we can see how we best move forward from there.

@slarticodefast slarticodefast added S: Awaiting Changes Status: Changes are required before another review can happen and removed S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. labels Apr 1, 2026
@Terkala
Copy link
Copy Markdown
Author

Terkala commented Apr 5, 2026

While I do appreciate getting an update, as I stated previously that's a level of effort I'm simply not willing to put in here. Especially as the design document hasn't even been approved, meaning there's no guarantee any of this effort would result in anything.

There's a significant gulf in the effort requires when Wizden asked me to port BloodCult and re implementing every feature in BloodCult from scratch. Especially since this whole PR process has been nothing but frustrating getting any kind of feedback up to now. It would take me an actual year to do this one PR at a time. Frankly speaking I could probably make two entirely new antagonists or major game systems from scratch with the level of time and effort you're demanding here.

I welcome anyone from Wizden who wants to take the time to do this, as I will have a version fully up to date with NuBody and working in Funkystation's new codebase.

@Terkala Terkala closed this Apr 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A: Art Area: Art with no implications for other areas. A: Combat Area: Combat features and changes, balancing, feel A: Roundflow/Antag Area: Roundflow - "What happens in the game", including antagonist roles and their capabilities Changes: Audio Changes: Might require knowledge of audio. Changes: Sprites Changes: Might require knowledge of spriting or visual design. Changes: UI Changes: Might require knowledge of UI design or code. D1: High Difficulty: Extensive codebase knowledge required. P2: Raised Priority: Item has a raised priority, indicating it might get increased maintainer attention. S: Awaiting Changes Status: Changes are required before another review can happen size/XL Denotes a PR that changes 5000+ lines.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants