From ded1be52a193d6546f360d50f4fcab0e09deb61c Mon Sep 17 00:00:00 2001
From: Caldony <61732742+Caldony@users.noreply.github.com>
Date: Thu, 19 Nov 2020 20:28:10 +0100
Subject: [PATCH] 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
---
code/modules/religion/religion_sects.dm | 27 ++++++
code/modules/religion/rites.dm | 116 ++++++++++++++++++++++++
2 files changed, 143 insertions(+)
diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm
index 92455429220..6abd0eeabdb 100644
--- a/code/modules/religion/religion_sects.dm
+++ b/code/modules/religion/religion_sects.dm
@@ -190,3 +190,30 @@
to_chat(L, "You offer [the_cell]'s power to [GLOB.deity], pleasing them.")
qdel(I)
return TRUE
+
+/**** Ever-Burning Candle sect ****/
+
+/datum/religion_sect/candle_sect
+ name = "Ever-Burning Candle"
+ desc = "A sect dedicated to candles."
+ convert_opener = "May you be the wax to keep the Ever-Burning Candle burning, acolyte.
Sacrificing burning corpses with a lot of burn damage and candles grants you favor"
+ alignment = ALIGNMENT_NEUT
+ max_favor = 10000
+ desired_items = list(/obj/item/candle)
+ rites_list = list(/datum/religion_rites/fireproof, /datum/religion_rites/burning_sacrifice, /datum/religion_rites/infinite_candle)
+ altar_icon_state = "convertaltar-red"
+
+//candle sect bibles don't heal or do anything special apart from the standard holy water blessings
+/datum/religion_sect/candle_sect/sect_bless(mob/living/blessed, mob/living/user)
+ return TRUE
+
+/datum/religion_sect/candle_sect/on_sacrifice(obj/item/candle/offering, mob/living/user)
+ if(!istype(offering))
+ return
+ if(!offering.lit)
+ to_chat(user, "The candle needs to be lit to be offered!")
+ return
+ to_chat(user, "Another candle for [GLOB.deity]'s collection")
+ adjust_favor(20, user) //it's not a lot but hey there's a pacifist favor option at least
+ qdel(offering)
+ return TRUE
diff --git a/code/modules/religion/rites.dm b/code/modules/religion/rites.dm
index 70c268269a0..97f7e401f0e 100644
--- a/code/modules/religion/rites.dm
+++ b/code/modules/religion/rites.dm
@@ -102,3 +102,119 @@
human2borg.set_species(/datum/species/android)
human2borg.visible_message("[human2borg] has been converted by the rite of [name]!")
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, "The clothing that was chosen for the rite is no longer on the altar!")
+ 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, "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
+ if(!LAZYLEN(movable_reltool.buckled_mobs))
+ to_chat(user, "Nothing is buckled to the altar!")
+ 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, "Only carbon lifeforms can be properly burned for the sacrifice!")
+ return FALSE
+ chosen_sacrifice = corpse
+ if(chosen_sacrifice.stat != DEAD)
+ to_chat(user, "You can only sacrifice dead bodies, this one is still alive!")
+ return FALSE
+ if(!chosen_sacrifice.on_fire)
+ to_chat(user, "This corpse needs to be on fire to be sacrificed!")
+ 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, "The right sacrifice is no longer on the altar!")
+ chosen_sacrifice = null
+ return FALSE
+ if(!chosen_sacrifice.on_fire)
+ to_chat(user, "The sacrifice is no longer on fire, it needs to burn until the end of the rite!")
+ chosen_sacrifice = null
+ return FALSE
+ if(chosen_sacrifice.stat != DEAD)
+ to_chat(user, "The sacrifice has to stay dead for the rite to work!")
+ chosen_sacrifice = null
+ return FALSE
+ var/favor_gained = 100 + round(chosen_sacrifice.getFireLoss())
+ GLOB.religious_sect?.adjust_favor(favor_gained, user)
+ to_chat(user, "[GLOB.deity] absorb the burning corpse and any trace of fire with it. [GLOB.deity] rewards you with [favor_gained] favor.")
+ 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