mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-04-02 02:11:42 +01:00
* new chaplain sect, the Ever-Burning Candle sect (#54618) * Adds the sect of the Ever Burning candle * make the burning sacrifice 20 seconds instead of 10 only made it 10 seconds for testing purposes, also make the "unmelting" clothing red instead of blue to be more red candle-ish * make another check at the end of the candle fuel rite The candle fuel rite will now check if the sacrifice is still on fire and dead at the end of the rite, you can technically extinguish them and only light them on fire at the last moment but it's fine god won't notice * make the unmelting wax rite actually fireproof clothing hood/helmets so yes you can supposedly get 2 fireproof for the price of one, but since hardsuit and hoodie are allegedly just one big connected suit it sort of make sense. I also took away the forced color from the fireproofed clothing as making it mesh well with most clothing ended badly so now you can only tell its unmelting by the name. * few improvements to rites makes a tighter if check for the unmelting was helmet thing. adds a sound effect at the end of each rite, gives the sect a max favor of 10 000 instead of 1000 which I could've sworn was originally the case but apparently not. * change the for loop * Do the thing that cobby asks I still kept the for loop for the candle fuel for reasons cited above. In other news I just learned that the word SPAM came from a Monty python skit * WHY CAN IAN BE SET ON FIRE AAAAA * what if we kissed on the burning altar * change the for loop to an if check for the sacrifice also added a bunch of early returns which forces me to set chosen sacrifice to null a whole lot more * updqte sect description * new chaplain sect, the Ever-Burning Candle sect Co-authored-by: Caldony <61732742+Caldony@users.noreply.github.com>
221 lines
9.8 KiB
Plaintext
221 lines
9.8 KiB
Plaintext
/datum/religion_rites
|
|
/// name of the religious rite
|
|
var/name = "religious rite"
|
|
/// Description of the religious rite
|
|
var/desc = "immm gonna rooon"
|
|
/// length it takes to complete the ritual
|
|
var/ritual_length = (10 SECONDS) //total length it'll take
|
|
/// list of invocations said (strings) throughout the rite
|
|
var/list/ritual_invocations //strings that are by default said evenly throughout the rite
|
|
/// message when you invoke
|
|
var/invoke_msg
|
|
var/favor_cost = 0
|
|
|
|
/datum/religion_rites/New()
|
|
. = ..()
|
|
if(!GLOB?.religious_sect)
|
|
return
|
|
LAZYADD(GLOB.religious_sect.active_rites, src)
|
|
|
|
/datum/religion_rites/Destroy()
|
|
if(!GLOB?.religious_sect)
|
|
return
|
|
LAZYREMOVE(GLOB.religious_sect.active_rites, src)
|
|
return ..()
|
|
|
|
|
|
///Called to perform the invocation of the rite, with args being the performer and the altar where it's being performed. Maybe you want it to check for something else?
|
|
/datum/religion_rites/proc/perform_rite(mob/living/user, atom/religious_tool)
|
|
if(GLOB.religious_sect?.favor < favor_cost)
|
|
to_chat(user, "<span class='warning'>This rite requires more favor!</span>")
|
|
return FALSE
|
|
to_chat(user, "<span class='notice'>You begin to perform the rite of [name]...</span>")
|
|
if(!ritual_invocations)
|
|
if(do_after(user, target = user, delay = ritual_length))
|
|
return TRUE
|
|
return FALSE
|
|
var/first_invoke = TRUE
|
|
for(var/i in ritual_invocations)
|
|
if(first_invoke) //instant invoke
|
|
user.say(i)
|
|
first_invoke = FALSE
|
|
continue
|
|
if(!ritual_invocations.len) //we divide so we gotta protect
|
|
return FALSE
|
|
if(!do_after(user, target = user, delay = ritual_length/ritual_invocations.len))
|
|
return FALSE
|
|
user.say(i)
|
|
if(!do_after(user, target = user, delay = ritual_length/ritual_invocations.len)) //because we start at 0 and not the first fraction in invocations, we still have another fraction of ritual_length to complete
|
|
return FALSE
|
|
if(invoke_msg)
|
|
user.say(invoke_msg)
|
|
return TRUE
|
|
|
|
|
|
///Does the thing if the rite was successfully performed. return value denotes that the effect successfully (IE a harm rite does harm)
|
|
/datum/religion_rites/proc/invoke_effect(mob/living/user, atom/religious_tool)
|
|
GLOB.religious_sect.on_riteuse(user,religious_tool)
|
|
return TRUE
|
|
|
|
|
|
/*********Technophiles**********/
|
|
|
|
/datum/religion_rites/synthconversion
|
|
name = "Synthetic Conversion"
|
|
desc = "Convert a human-esque individual into a (superior) Android."
|
|
ritual_length = 30 SECONDS
|
|
ritual_invocations = list("By the inner workings of our god...",
|
|
"... We call upon you, in the face of adversity...",
|
|
"... to complete us, removing that which is undesirable...")
|
|
invoke_msg = "... Arise, our champion! Become that which your soul craves, live in the world as your true form!!"
|
|
favor_cost = 1000
|
|
|
|
/datum/religion_rites/synthconversion/perform_rite(mob/living/user, atom/religious_tool)
|
|
if(!ismovable(religious_tool))
|
|
to_chat(user, "<span class='warning'>This rite requires a religious device that individuals can be buckled to.</span>")
|
|
return FALSE
|
|
var/atom/movable/movable_reltool = religious_tool
|
|
if(!movable_reltool)
|
|
return FALSE
|
|
if(!LAZYLEN(movable_reltool.buckled_mobs))
|
|
. = FALSE
|
|
if(!movable_reltool.can_buckle) //yes, if you have somehow managed to have someone buckled to something that now cannot buckle, we will still let you perform the rite!
|
|
to_chat(user, "<span class='warning'>This rite requires a religious device that individuals can be buckled to.</span>")
|
|
return
|
|
to_chat(user, "<span class='warning'>This rite requires an individual to be buckled to [movable_reltool].</span>")
|
|
return
|
|
return ..()
|
|
|
|
/datum/religion_rites/synthconversion/invoke_effect(mob/living/user, atom/religious_tool)
|
|
if(!ismovable(religious_tool))
|
|
CRASH("[name]'s perform_rite had a movable atom that has somehow turned into a non-movable!")
|
|
var/atom/movable/movable_reltool = religious_tool
|
|
if(!movable_reltool?.buckled_mobs?.len)
|
|
return FALSE
|
|
var/mob/living/carbon/human/human2borg
|
|
for(var/i in movable_reltool.buckled_mobs)
|
|
if(istype(i,/mob/living/carbon/human))
|
|
human2borg = i
|
|
break
|
|
if(!human2borg)
|
|
return FALSE
|
|
human2borg.set_species(/datum/species/android)
|
|
human2borg.visible_message("<span class='notice'>[human2borg] has been converted by the rite of [name]!</span>")
|
|
return TRUE
|
|
|
|
|
|
/*********Ever-Burning Candle**********/
|
|
|
|
///apply a bunch of fire immunity effect to clothing
|
|
/datum/religion_rites/fireproof/proc/apply_fireproof(obj/item/clothing/fireproofed)
|
|
fireproofed.name = "unmelting [fireproofed.name]"
|
|
fireproofed.max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
|
fireproofed.heat_protection = chosen_clothing.body_parts_covered
|
|
fireproofed.resistance_flags |= FIRE_PROOF
|
|
|
|
/datum/religion_rites/fireproof
|
|
name = "Unmelting Wax"
|
|
desc = "Grants fire immunity to any piece of clothing."
|
|
ritual_length = 15 SECONDS
|
|
ritual_invocations = list("And so to support the holder of the Ever-Burning candle...",
|
|
"... allow this unworthy apparel to serve you ...",
|
|
"... make it strong enough to burn a thousand time and more ...")
|
|
invoke_msg = "... Come forth in your new form, and join the unmelting wax of the one true flame!"
|
|
favor_cost = 1000
|
|
///the piece of clothing that will be fireproofed, only one per rite
|
|
var/obj/item/clothing/chosen_clothing
|
|
|
|
/datum/religion_rites/fireproof/perform_rite(mob/living/user, atom/religious_tool)
|
|
for(var/obj/item/clothing/apparel in get_turf(religious_tool))
|
|
if(apparel.max_heat_protection_temperature >= FIRE_IMMUNITY_MAX_TEMP_PROTECT)
|
|
continue //we ignore anything that is already fireproof
|
|
chosen_clothing = apparel //the apparel has been chosen by our lord and savior
|
|
return ..()
|
|
return FALSE
|
|
|
|
/datum/religion_rites/fireproof/invoke_effect(mob/living/user, atom/religious_tool)
|
|
if(!QDELETED(chosen_clothing) && get_turf(religious_tool) == chosen_clothing.loc) //check if the same clothing is still there
|
|
if(istype(chosen_clothing,/obj/item/clothing/suit/hooded) || istype(chosen_clothing,/obj/item/clothing/suit/space/hardsuit ))
|
|
for(var/obj/item/clothing/head/integrated_helmet in chosen_clothing.contents) //check if the clothing has a hood/helmet integrated and fireproof it if there is one.
|
|
apply_fireproof(integrated_helmet)
|
|
apply_fireproof(chosen_clothing)
|
|
playsound(get_turf(religious_tool), 'sound/magic/fireball.ogg', 50, TRUE)
|
|
chosen_clothing = null //our lord and savior no longer cares about this apparel
|
|
return TRUE
|
|
chosen_clothing = null
|
|
to_chat(user, "<span class='warning'>The clothing that was chosen for the rite is no longer on the altar!</span>")
|
|
return FALSE
|
|
|
|
|
|
/datum/religion_rites/burning_sacrifice
|
|
name = "Candle Fuel"
|
|
desc = "Sacrifice a buckled burning corpse for favor, the more burn damage the corpse has the more favor you will receive."
|
|
ritual_length = 20 SECONDS
|
|
ritual_invocations = list("To feed the fire of the one true flame ...",
|
|
"... to make it burn brighter ...",
|
|
"... so that it may consume all in its path ...",
|
|
"... I offer you this pitiful being ...")
|
|
invoke_msg = "... may it join you in the amalgamation of wax and fire, and become one in the black and white scene. "
|
|
///the burning corpse chosen for the sacrifice of the rite
|
|
var/mob/living/carbon/chosen_sacrifice
|
|
|
|
/datum/religion_rites/burning_sacrifice/perform_rite(mob/living/user, atom/religious_tool)
|
|
if(!ismovable(religious_tool))
|
|
to_chat(user, "<span class='warning'>This rite requires a religious device that individuals can be buckled to.</span>")
|
|
return FALSE
|
|
var/atom/movable/movable_reltool = religious_tool
|
|
if(!movable_reltool)
|
|
return FALSE
|
|
if(!LAZYLEN(movable_reltool.buckled_mobs))
|
|
to_chat(user, "<span class='warning'>Nothing is buckled to the altar!</span>")
|
|
return FALSE
|
|
for(var/corpse in movable_reltool.buckled_mobs)
|
|
if(!iscarbon(corpse))// only works with carbon corpse since most normal mobs can't be set on fire.
|
|
to_chat(user, "<span class='warning'>Only carbon lifeforms can be properly burned for the sacrifice!</span>")
|
|
return FALSE
|
|
chosen_sacrifice = corpse
|
|
if(chosen_sacrifice.stat != DEAD)
|
|
to_chat(user, "<span class='warning'>You can only sacrifice dead bodies, this one is still alive!</span>")
|
|
return FALSE
|
|
if(!chosen_sacrifice.on_fire)
|
|
to_chat(user, "<span class='warning'>This corpse needs to be on fire to be sacrificed!</span>")
|
|
return FALSE
|
|
return ..()
|
|
|
|
/datum/religion_rites/burning_sacrifice/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
if(!(chosen_sacrifice in religious_tool.buckled_mobs)) //checks one last time if the right corpse is still buckled
|
|
to_chat(user, "<span class='warning'>The right sacrifice is no longer on the altar!</span>")
|
|
chosen_sacrifice = null
|
|
return FALSE
|
|
if(!chosen_sacrifice.on_fire)
|
|
to_chat(user, "<span class='warning'>The sacrifice is no longer on fire, it needs to burn until the end of the rite!</span>")
|
|
chosen_sacrifice = null
|
|
return FALSE
|
|
if(chosen_sacrifice.stat != DEAD)
|
|
to_chat(user, "<span class='warning'>The sacrifice has to stay dead for the rite to work!</span>")
|
|
chosen_sacrifice = null
|
|
return FALSE
|
|
var/favor_gained = 100 + round(chosen_sacrifice.getFireLoss())
|
|
GLOB.religious_sect?.adjust_favor(favor_gained, user)
|
|
to_chat(user, "<span class='notice'>[GLOB.deity] absorb the burning corpse and any trace of fire with it. [GLOB.deity] rewards you with [favor_gained] favor.</span>")
|
|
chosen_sacrifice.dust(force = TRUE)
|
|
playsound(get_turf(religious_tool), 'sound/effects/supermatter.ogg', 50, TRUE)
|
|
chosen_sacrifice = null
|
|
return TRUE
|
|
|
|
|
|
|
|
/datum/religion_rites/infinite_candle
|
|
name = "Immortal Candles"
|
|
desc = "Creates 5 candles that never run out of wax."
|
|
ritual_length = 10 SECONDS
|
|
invoke_msg = "please lend us five of your candles so we may bask in your burning glory."
|
|
favor_cost = 200
|
|
|
|
/datum/religion_rites/infinite_candle/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
var/altar_turf = get_turf(religious_tool)
|
|
for(var/i in 1 to 5)
|
|
new /obj/item/candle/infinite(altar_turf)
|
|
playsound(altar_turf, 'sound/magic/fireball.ogg', 50, TRUE)
|
|
return TRUE
|