THE CULTENNING - brings bloodcult to an acceptable state part 1 of my 3 part plan (#3025)

## About The Pull Request
Upon being converted to cult while mind-shielded, a pop up option will
come up with the option to be gibbed and turn into a shade, or to simply
die/be husked while still dropping a soul shard that's offered to
ghosts.
## Why It's Good For The Game
The main complaint cult gets is that security/other mindshielded players
get denied the ability to play as their character upon being sacrificed,
you have now been granted free will as to what happens.
## Proof Of Testing

![image](https://github.com/user-attachments/assets/1240d8e5-95f4-46b9-bdc3-b4f342eac520)
<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog
🆑
balance: cult no longer gibs mindshields
/🆑

---------

Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
This commit is contained in:
Odairu
2025-02-10 20:15:53 -05:00
committed by GitHub
parent b644a1d0a1
commit 69cafff1b3
6 changed files with 48 additions and 6 deletions

View File

@@ -33,3 +33,6 @@
// makes the mob immune to crusher marks even if they are within the required mob size
#define TRAIT_CRUSHER_MARK_IMMUNE "crusher_mark_immune"
// makes it so cult cannot get another blood stone from this mob
#define TRAIT_HAS_BEEN_CULT_SACRIFICED "has_been_cult_sacrificed"

View File

@@ -281,6 +281,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_HALT_RADIATION_EFFECTS" = TRAIT_HALT_RADIATION_EFFECTS,
"TRAIT_HANDS_BLOCKED" = TRAIT_HANDS_BLOCKED,
"TRAIT_HARDLY_WOUNDED" = TRAIT_HARDLY_WOUNDED,
"TRAIT_HAS_BEEN_CULT_SACRIFICED" = TRAIT_HAS_BEEN_CULT_SACRIFICED, //Bubber edit
"TRAIT_HAS_BEEN_KIDNAPPED" = TRAIT_HAS_BEEN_KIDNAPPED,
"TRAIT_HAS_CRANIAL_FISSURE" = TRAIT_HAS_CRANIAL_FISSURE,
"TRAIT_HATED_BY_DOGS" = TRAIT_HATED_BY_DOGS,

View File

@@ -128,6 +128,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_GUN_NATURAL" = TRAIT_GUN_NATURAL,
"TRAIT_HANDS_BLOCKED" = TRAIT_HANDS_BLOCKED,
"TRAIT_HARDLY_WOUNDED" = TRAIT_HARDLY_WOUNDED,
"TRAIT_HAS_BEEN_CULT_SACRIFICED" = TRAIT_HAS_BEEN_CULT_SACRIFICED, //Bubber edit
"TRAIT_HATED_BY_DOGS" = TRAIT_HATED_BY_DOGS,
"TRAIT_HEAVY_DRINKER" = TRAIT_HEAVY_DRINKER,
"TRAIT_HEAVY_SLEEPER" = TRAIT_HEAVY_SLEEPER,

View File

@@ -390,12 +390,35 @@ structure_check() searches for nearby cultist structures required for the invoca
sacrificial.investigate_log("has been sacrificially dusted by the cult.", INVESTIGATE_DEATHS)
sacrificial.dust(TRUE, FALSE, TRUE)
else if (sacrificial)
//BUBBER EDIT BEGIN: removes force gib from cult
if(!HAS_TRAIT(sacrificial, TRAIT_HAS_BEEN_CULT_SACRIFICED))
ADD_TRAIT(sacrificial, TRAIT_HAS_BEEN_CULT_SACRIFICED, MAGIC_TRAIT)
var/obj/item/soulstone/stone = new(loc)
var/shard_choice = tgui_alert(
user = sacrificial,
message = "Do you wish to become a soul shard for the cult, selecting yes will gib you and you will play as a soul shard, selecting no will husk you and your body will stay intact.",
title = "Choose your fate",
buttons = list("Decline", "Accept"),
timeout = 10 SECONDS,
autofocus = TRUE
)
if(shard_choice == "Accept")
if(sacrificial.mind && !HAS_TRAIT(sacrificial, TRAIT_SUICIDED))
stone.capture_soul(sacrificial, invokers[1], forced = TRUE)
playsound(sacrificial, 'sound/effects/magic/disintegrate.ogg', 100, TRUE)
sacrificial.investigate_log("has been sacrificially gibbed by the cult.", INVESTIGATE_DEATHS)
sacrificial.gib(DROP_ALL_REMAINS)
else
sacrificial.death(FALSE)
sacrificial.become_husk(BURN)
sacrificial.investigate_log("has been sacrificially husked by the cult.", INVESTIGATE_DEATHS)
stone.capture_ghost(sacrificial, invokers[1])
else
sacrificial.death(FALSE)
sacrificial.become_husk(BURN)
sacrificial.investigate_log("has been sacrificially husked by the cult.", INVESTIGATE_DEATHS)
//BUBBER EDIT END
try_spawn_sword() // after sharding and gibbing, which potentially dropped a null rod

View File

@@ -0,0 +1,13 @@
/obj/item/soulstone/proc/capture_ghost(mob/living/carbon/victim, user)
var/mob/chosen_one = SSpolling.poll_ghosts_for_target(
check_jobban = ROLE_CULTIST,
poll_time = 20 SECONDS,
checked_target = src,
ignore_category = POLL_IGNORE_SHADE,
alert_pic = /mob/living/basic/shade,
jump_target = src,
role_name_text = "a shade",
chat_text_border_icon = /mob/living/basic/shade,
)
on_poll_concluded(user, victim, chosen_one)
return TRUE //it'll probably get someone ;)

View File

@@ -8927,6 +8927,7 @@
#include "modular_zubbers\code\modules\antagonists\wizard\events_removal.dm"
#include "modular_zubbers\code\modules\antagonists\wizard\events_rework.dm"
#include "modular_zubbers\code\modules\antagonists\wizard\grand_finale_removal.dm"
#include "modular_zubbers\code\modules\antagonists\wizard\soulstone.dm"
#include "modular_zubbers\code\modules\arcades\assets\arcade.dm"
#include "modular_zubbers\code\modules\arcades\code\loot\arcade_weights_classic.dm"
#include "modular_zubbers\code\modules\arcades\code\loot\arcade_weights_mechanical.dm"