mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-28 01:51:46 +00:00
## About The Pull Request Adds 2 new species: Spirits and Ghosts Spirits are available roundstart during Halloween, Wabbajack and Xenobio's black slime extract Ghosts are available through Magic mirrors They fly around, and don't have legs and instead float around. They also can't get legs implanted onto themselves. They also do have organs, so they are affected by flashbangs, they do get hungry, they do need oxygen to survive (they don't take damage in space but they do suffocate & get slowdown), and can process chems. Gibbing a ghost gives ectoplasm, an ingredient for ghost burgers. Chaplains also got a buff here, null rod-type weapons' bane is now against Spirit mobs, rather than hardcoded revenants. This means it now includes Spirits/Ghosts, but also Soulscythes & Cult shades. Also re-adds https://github.com/tgstation/tgstation/pull/81630 which was reverted in https://github.com/tgstation/tgstation/pull/86506 which I assume was accidental. ### The difference between Spirits and Ghosts Ghosts have an innate ability to become incorporeal, which allows them to phase through walls and stuff. Using this will immediately make them drop any non-ghost limb/organ (not implants cause I thought it would be funny). This ability is not available if they have holy water in their system, and like revenants they also can't walk over blessed tiles with it. They are also invisible to cameras while using this (not the obscura though). Sprites taken from observers directly, if anyone wants to make custom sprites for them feel free. If anyone wants to make this obtainable somehow in-game as well I wouldn't be opposed, halloween is just where I thought it would fit most. This also adds a lot of fixes that I encountered trying to add this, from systems that have been neglected throughout the years. https://github.com/user-attachments/assets/e368d710-80a0-4c63-b271-1abe3dd41a5e ## Why It's Good For The Game We haven't gotten a new halloween species in a long time and thought it would be fun if you can play as an actual ghost, the soul that remains after a person passes, so Halloween feels more haunted. It's overall made in just good fun, with a bonus that Ghosts are a cool species to play with as well for Wizards & maybe Chaplains in the future (Dead sect when?) ## Changelog 🆑 add: Added a new halloween species: Spirits, a species without legs and instead floats. add: Added a new magic mirror species: Ghosts, like spirits but with the ability to become incorporeal, traversing through solid wall. fix: Mobs unable to use storage items now can't use storage items. fix: Mobs unable to use items can now not open airlocks & closets fix: Mobs unable to pick items up can no longer pick items up and immediately drop, moving one tile at a time. fix: Mobs with intentional missing limbs (Alien larva) no longer show their limbs as missing on examine (again) fix: Golems' pref page had a missing icon, it now has one. /🆑 --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
92 lines
4.3 KiB
Plaintext
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
|