Files
MrMelbert aae24b1ab2 Sect of the Dream God (#95643)
## About The Pull Request

Adds a new chaplain sect, the sect of the Dream God

This sect gains favor from dreaming and blessing dreamers. 

Their blessing only works on sleeping mobs - hitting a sleeping mob with
your bible will cause it to start dreaming, and if it's already
dreaming, grant favor. Either way, the mob is healed.

For 0 favor, you can **Banish Nightmare** - offering a Nightmare's
corpse rewards favor for banishing bad dreams. If the Nightmare has a
heart, you are rewarded with a special **Sacred Heart** which heals you
while dreaming and sleeping. You can also offer a Nightmare's heart on
its own without the body attached.

For 0 favor, you can **Deaconize Dreamers** - you can deaconize up to 3
dreamers.

For 50 favor, you can have a **Dream Portent** - This rite immediately
makes you fall asleep, and grants you a dream related to something going
on in the round. It may provide insight into something you otherwise
don't know about. If you take damage, the effect ends early.

<img width="374" height="126" alt="image"
src="https://github.com/user-attachments/assets/7c4e12fe-8456-411c-9d39-691e4ac2312d"
/>

For 100 favor, you can **Dream Projection** - this rite allows you to
pick one of your deacons, and forces you to become an imaginary friend
of that deacon. For the duration of the effect you are asleep. If you
are woken up or take damage, the effect ends. If the deacon dies, the
effect ends early.

<img width="492" height="294" alt="image"
src="https://github.com/user-attachments/assets/4e2f6810-15cd-41af-a69f-daa6ddca671a"
/>

For 200 favor, you can give you and your followers **Dream Protection**
- While sleeping and dreaming all damage taken is reduced.

For 200 favor, you can start a **Slumber Party** - All nearby mobs (who
can't block magic and some other asterisks) fall asleep and share a
dream. This form of sleep heals the mob rapidly (also heals holy people
even more).

## Why It's Good For The Game

A new sect for chaplains to sink their teeth into. This one brings a
unique niche, focused around sleeping and fortune telling.

## Changelog

🆑 Melbert
add: Adds the Sect of the Dream God, a new option for chaplains.
/🆑
2026-04-29 00:01:56 +01:00

92 lines
4.3 KiB
Plaintext

/**
* Deaconize
* Makes a sentient, non-cult member of the station into a Holy person, able to use bibles & other chap gear.
* Is a one-time use ability, given to all sects that don't have their own variation of it.
*/
/datum/religion_rites/deaconize
name = "Deaconize"
desc = "Converts someone to your sect. They must be willing, so the first invocation will instead prompt them to join. \
They will gain the same holy abilities as you, this is a one-time use so make sure they are worthy!"
ritual_length = 30 SECONDS
ritual_invocations = list(
"A good, honorable person has been brought here by faith ...",
"With their hands ready to serve ...",
"Heart ready to listen ...",
"And soul ready to follow ...",
"May we offer our own hand in return ..."
)
invoke_msg = "And use them to the best of our abilities."
rite_flags = RITE_ALLOW_MULTIPLE_PERFORMS | RITE_ONE_TIME_USE
///The person currently being deaconized.
var/mob/living/carbon/human/potential_deacon
/datum/religion_rites/deaconize/Destroy()
potential_deacon = null
return ..()
/datum/religion_rites/deaconize/perform_rite(mob/living/user, atom/religious_tool)
if(!ismovable(religious_tool))
to_chat(user, span_warning("This rite requires a religious device that individuals can be buckled to."))
return FALSE
var/atom/movable/movable_reltool = religious_tool
if(!movable_reltool)
return FALSE
var/mob/living/carbon/human/possible_deacon = locate() in movable_reltool.buckled_mobs
if(!possible_deacon)
to_chat(user, span_warning("Nothing is buckled to the [movable_reltool]!"))
return FALSE
if(!is_valid_for_deacon(possible_deacon, user))
return FALSE
//no one invited or this is not the invited person
if(!potential_deacon || (possible_deacon != potential_deacon))
INVOKE_ASYNC(src, PROC_REF(invite_deacon), possible_deacon)
to_chat(user, span_notice("They have been offered the oppertunity to join our ranks. Wait for them to decide and try again."))
return FALSE
return ..()
/datum/religion_rites/deaconize/invoke_effect(mob/living/carbon/human/user, atom/movable/religious_tool)
. = ..()
if(!(potential_deacon in religious_tool.buckled_mobs)) //checks one last time if the right corpse is still buckled
to_chat(user, span_warning("[potential_deacon] is no longer on the altar!"))
return FALSE
if(potential_deacon.stat != CONSCIOUS)
to_chat(user, span_warning("[potential_deacon] has to be conscious for the rite to work!"))
return FALSE
if(!potential_deacon.mind)
to_chat(user, span_warning("[potential_deacon]'s mind appears to be elsewhere!"))
return FALSE
if(IS_CULTIST(potential_deacon))//what the fuck?!
to_chat(user, span_warning("[GLOB.deity] has seen a true, dark evil in [potential_deacon]'s heart, and they have been smitten!"))
playsound(get_turf(religious_tool), 'sound/effects/pray.ogg', 50, TRUE)
potential_deacon.gib(DROP_ORGANS|DROP_BODYPARTS)
return FALSE
var/datum/brain_trauma/special/honorbound/honor = user.has_trauma_type(/datum/brain_trauma/special/honorbound)
if(honor && (potential_deacon in honor.guilty))
honor.guilty -= potential_deacon
to_chat(user, span_notice("[GLOB.deity] has bound [potential_deacon] to the code! They are now a holy role! (albeit the lowest level of such)"))
potential_deacon.mind.set_holy_role(HOLY_ROLE_DEACON)
GLOB.religious_sect.on_conversion(potential_deacon)
playsound(get_turf(religious_tool), 'sound/effects/pray.ogg', 50, TRUE)
return TRUE
///Helper if the passed possible_deacon is valid to become a deacon or not.
/datum/religion_rites/deaconize/proc/is_valid_for_deacon(mob/living/carbon/human/possible_deacon, mob/living/user)
if(possible_deacon.stat != CONSCIOUS)
to_chat(user, span_warning("[possible_deacon] needs to be alive and conscious to join!"))
return FALSE
if(possible_deacon.mind && possible_deacon.mind.holy_role)
to_chat(user, span_warning("[possible_deacon] is already a member of the religion!"))
return FALSE
return TRUE
/**
* Async proc that waits for a response on joining the sect.
* If they accept, the deaconize rite can now recruit them instead of just offering more invites.
*/
/datum/religion_rites/deaconize/proc/invite_deacon(mob/living/carbon/human/invited)
var/ask = tgui_alert(invited, "Join [GLOB.deity]? You will be expected to follow the Chaplain's order.", "Invitation", list("Yes", "No"), 60 SECONDS)
if(ask != "Yes")
return
potential_deacon = invited