mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-01 04:21:42 +00:00
* removes double spaces AFTER symbols * Fixing conflicts Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
744 lines
31 KiB
Plaintext
744 lines
31 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 ..()
|
|
|
|
/datum/religion_rites/proc/can_afford(mob/living/user)
|
|
if(GLOB.religious_sect?.favor < favor_cost)
|
|
to_chat(user, span_warning("This rite requires more favor!"))
|
|
return FALSE
|
|
return TRUE
|
|
|
|
///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(!can_afford(user))
|
|
return FALSE
|
|
to_chat(user, span_notice("You begin to perform the rite of [name]..."))
|
|
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)
|
|
SHOULD_CALL_PARENT(TRUE)
|
|
GLOB.religious_sect.on_riteuse(user,religious_tool)
|
|
return TRUE
|
|
|
|
|
|
/**** Mechanical God ****/
|
|
|
|
/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_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
|
|
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_warning("This rite requires a religious device that individuals can be buckled to."))
|
|
return
|
|
to_chat(user, span_warning("This rite requires an individual to be buckled to [movable_reltool]."))
|
|
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_notice("[human2borg] has been converted by the rite of [name]!"))
|
|
return TRUE
|
|
|
|
|
|
/datum/religion_rites/machine_blessing
|
|
name = "Receive Blessing"
|
|
desc = "Receive a blessing from the machine god to further your ascension."
|
|
ritual_length = 5 SECONDS
|
|
ritual_invocations =list( "Let your will power our forges.",
|
|
"...Help us in our great conquest!")
|
|
invoke_msg = "The end of flesh is near!"
|
|
favor_cost = 2000
|
|
|
|
/datum/religion_rites/machine_blessing/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
..()
|
|
var/altar_turf = get_turf(religious_tool)
|
|
var/blessing = pick(
|
|
/obj/item/organ/cyberimp/arm/surgery,
|
|
/obj/item/organ/cyberimp/eyes/hud/diagnostic,
|
|
/obj/item/organ/cyberimp/eyes/hud/medical,
|
|
/obj/item/organ/cyberimp/mouth/breathing_tube,
|
|
/obj/item/organ/cyberimp/chest/thrusters,
|
|
/obj/item/organ/eyes/robotic/glow)
|
|
new blessing(altar_turf)
|
|
return TRUE
|
|
/**** Pyre God ****/
|
|
|
|
///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 Protection"
|
|
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_warning("The clothing that was chosen for the rite is no longer on the altar!"))
|
|
return FALSE
|
|
|
|
|
|
/datum/religion_rites/burning_sacrifice
|
|
name = "Burning Offering"
|
|
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("Burning body ...",
|
|
"... cleansed by the flame ...",
|
|
"... we were all created from fire ...",
|
|
"... and to it ...")
|
|
invoke_msg = "... WE RETURN! "
|
|
///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_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
|
|
if(!LAZYLEN(movable_reltool.buckled_mobs))
|
|
to_chat(user, span_warning("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, span_warning("Only carbon lifeforms can be properly burned for the sacrifice!"))
|
|
return FALSE
|
|
chosen_sacrifice = corpse
|
|
if(chosen_sacrifice.stat != DEAD)
|
|
to_chat(user, span_warning("You can only sacrifice dead bodies, this one is still alive!"))
|
|
return FALSE
|
|
if(!chosen_sacrifice.on_fire)
|
|
to_chat(user, span_warning("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, span_warning("The right sacrifice is no longer on the altar!"))
|
|
chosen_sacrifice = null
|
|
return FALSE
|
|
if(!chosen_sacrifice.on_fire)
|
|
to_chat(user, span_warning("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, span_warning("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, span_notice("[GLOB.deity] absorbs 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 = "Burn bright, little candles, for you will only extinguish along with the universe."
|
|
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
|
|
|
|
/*********Greedy God**********/
|
|
|
|
///all greed rites cost money instead
|
|
/datum/religion_rites/greed
|
|
ritual_length = 5 SECONDS
|
|
invoke_msg = "Sorry I was late, I was just making a shitload of money."
|
|
var/money_cost = 0
|
|
|
|
/datum/religion_rites/greed/can_afford(mob/living/user)
|
|
var/datum/bank_account/account = user.get_bank_account()
|
|
if(!account)
|
|
to_chat(user, span_warning("You need a way to pay for the rite!"))
|
|
return FALSE
|
|
if(account.account_balance < money_cost)
|
|
to_chat(user, span_warning("This rite requires more money!"))
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/datum/religion_rites/greed/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
var/datum/bank_account/account = user.get_bank_account()
|
|
if(!account || account.account_balance < money_cost)
|
|
to_chat(user, span_warning("This rite requires more money!"))
|
|
return FALSE
|
|
account.adjust_money(-money_cost)
|
|
. = ..()
|
|
|
|
/datum/religion_rites/greed/vendatray
|
|
name = "Purchase Vend-a-tray"
|
|
desc = "Summons a Vend-a-tray. You can use it to sell items!"
|
|
invoke_msg = "I need a vend-a-tray to make some more money!"
|
|
money_cost = 300
|
|
|
|
/datum/religion_rites/greed/vendatray/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
..()
|
|
var/altar_turf = get_turf(religious_tool)
|
|
new /obj/structure/displaycase/forsale(altar_turf)
|
|
playsound(get_turf(religious_tool), 'sound/effects/cashregister.ogg', 60, TRUE)
|
|
return TRUE
|
|
|
|
/datum/religion_rites/greed/custom_vending
|
|
name = "Purchase Personal Vending Machine"
|
|
desc = "Summons a custom vending machine. You can use it to sell MANY items!"
|
|
invoke_msg = "If I get a custom vending machine for my products, I can be RICH!"
|
|
money_cost = 1000 //quite a step up from vendatray
|
|
|
|
/datum/religion_rites/greed/custom_vending/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
..()
|
|
var/altar_turf = get_turf(religious_tool)
|
|
new /obj/machinery/vending/custom/greed(altar_turf)
|
|
playsound(get_turf(religious_tool), 'sound/effects/cashregister.ogg', 60, TRUE)
|
|
return TRUE
|
|
|
|
/*********Honorbound God**********/
|
|
|
|
///Makes the person holy, but they now also have to follow the honorbound code (CBT). Actually earns favor, convincing others to uphold the code (tm) is not easy
|
|
/datum/religion_rites/deaconize
|
|
name = "Join Crusade"
|
|
desc = "Converts someone to your sect. They must be willing, so the first invocation will instead prompt them to join. \
|
|
They will become honorbound like you, and you will gain a massive favor boost!"
|
|
ritual_length = 30 SECONDS
|
|
ritual_invocations = list(
|
|
"A good, honorable crusade against evil is required.",
|
|
"We need the righteous ...",
|
|
"... the unflinching ...",
|
|
"... and the just.",
|
|
"Sinners must be silenced ...",)
|
|
invoke_msg = "... And the code must be upheld!"
|
|
///the invited crusader
|
|
var/mob/living/carbon/human/new_crusader
|
|
|
|
/datum/religion_rites/deaconize/perform_rite(mob/living/user, atom/religious_tool)
|
|
var/datum/religion_sect/honorbound/sect = GLOB.religious_sect
|
|
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
|
|
if(!LAZYLEN(movable_reltool.buckled_mobs))
|
|
to_chat(user, span_warning("Nothing is buckled to the altar!"))
|
|
return FALSE
|
|
for(var/mob/living/carbon/human/possible_crusader in movable_reltool.buckled_mobs)
|
|
if(possible_crusader.stat != CONSCIOUS)
|
|
to_chat(user, span_warning("[possible_crusader] needs to be alive and conscious to join the crusade!"))
|
|
return FALSE
|
|
if(TRAIT_GENELESS in possible_crusader.dna.species.inherent_traits)
|
|
to_chat(user, span_warning("This species disgusts [GLOB.deity]! They would never be allowed to join the crusade!"))
|
|
return FALSE
|
|
if(possible_crusader in sect.currently_asking)
|
|
to_chat(user, span_warning("Wait for them to decide on whether to join or not!"))
|
|
return FALSE
|
|
if(!(possible_crusader in sect.possible_crusaders))
|
|
INVOKE_ASYNC(sect, /datum/religion_sect/honorbound.proc/invite_crusader, possible_crusader)
|
|
to_chat(user, span_notice("They have been given the option to consider joining the crusade against evil. Wait for them to decide and try again."))
|
|
return FALSE
|
|
new_crusader = possible_crusader
|
|
return ..()
|
|
|
|
/datum/religion_rites/deaconize/invoke_effect(mob/living/carbon/human/user, atom/movable/religious_tool)
|
|
..()
|
|
var/mob/living/carbon/human/joining_now = new_crusader
|
|
new_crusader = null
|
|
if(!(joining_now in religious_tool.buckled_mobs)) //checks one last time if the right corpse is still buckled
|
|
to_chat(user, span_warning("The new member is no longer on the altar!"))
|
|
return FALSE
|
|
if(joining_now.stat != CONSCIOUS)
|
|
to_chat(user, span_warning("The new member has to stay alive for the rite to work!"))
|
|
return FALSE
|
|
if(!joining_now.mind)
|
|
to_chat(user, span_warning("The new member has no mind!"))
|
|
return FALSE
|
|
if(joining_now.mind.has_antag_datum(/datum/antagonist/cult))//what the fuck?!
|
|
to_chat(user, span_warning("[GLOB.deity] has seen a true, dark evil in [joining_now]'s heart, and they have been smitten!"))
|
|
playsound(get_turf(religious_tool), 'sound/effects/pray.ogg', 50, TRUE)
|
|
joining_now.gib(TRUE)
|
|
return FALSE
|
|
var/datum/mutation/human/honorbound/honormut = user.dna.check_mutation(HONORBOUND)
|
|
if(joining_now in honormut.guilty)
|
|
honormut.guilty -= joining_now
|
|
GLOB.religious_sect.adjust_favor(200, user)
|
|
to_chat(user, span_notice("[GLOB.deity] has bound [joining_now] to the code! They are now a holy role! (albeit the lowest level of such)"))
|
|
joining_now.mind.holy_role = HOLY_ROLE_DEACON
|
|
GLOB.religious_sect.on_conversion(joining_now)
|
|
playsound(get_turf(religious_tool), 'sound/effects/pray.ogg', 50, TRUE)
|
|
return TRUE
|
|
|
|
///Mostly useless funny rite for forgiving someone, making them innocent once again.
|
|
/datum/religion_rites/forgive
|
|
name = "Forgive"
|
|
desc = "Forgives someone, making them no longer considered guilty. A kind gesture, all things considered!"
|
|
invoke_msg = "You are absolved of sin."
|
|
var/mob/living/who
|
|
|
|
/datum/religion_rites/forgive/perform_rite(mob/living/carbon/human/user, atom/religious_tool)
|
|
if(!ishuman(user))
|
|
return FALSE
|
|
var/datum/mutation/human/honorbound/honormut = user.dna.check_mutation(HONORBOUND)
|
|
if(!honormut)
|
|
return FALSE
|
|
if(!honormut.guilty.len)
|
|
to_chat(user, span_warning("[GLOB.deity] is holding no grudges to forgive."))
|
|
return FALSE
|
|
var/forgiven_choice = input(user, "Choose one of [GLOB.deity]'s guilty to forgive.", "Forgive") as null|anything in honormut.guilty
|
|
if(!forgiven_choice)
|
|
return FALSE
|
|
who = forgiven_choice
|
|
return ..()
|
|
|
|
/datum/religion_rites/forgive/invoke_effect(mob/living/carbon/human/user, atom/movable/religious_tool)
|
|
..()
|
|
if(in_range(user, religious_tool))
|
|
return FALSE
|
|
var/datum/mutation/human/honorbound/honormut = user.dna.check_mutation(HONORBOUND)
|
|
if(!honormut) //edge case
|
|
return FALSE
|
|
honormut.guilty -= who
|
|
who = null
|
|
playsound(get_turf(religious_tool), 'sound/effects/pray.ogg', 50, TRUE)
|
|
return TRUE
|
|
|
|
/datum/religion_rites/summon_rules
|
|
name = "Summon Honorbound Rules"
|
|
desc = "Enscribes a paper with the honorbound rules and regulations."
|
|
invoke_msg = "Bring forth the holy writ!"
|
|
///paper to turn into holy writ
|
|
var/obj/item/paper/writ_target
|
|
|
|
/datum/religion_rites/summon_rules/perform_rite(mob/living/user, atom/religious_tool)
|
|
for(var/obj/item/paper/could_writ in get_turf(religious_tool))
|
|
if(istype(could_writ, /obj/item/paper/holy_writ))
|
|
continue
|
|
if(could_writ.get_info_length()) //blank paper pls
|
|
continue
|
|
writ_target = could_writ //PLEASE SIGN MY AUTOGRAPH
|
|
return ..()
|
|
to_chat(user, span_warning("You need to place blank paper on [religious_tool] to do this!"))
|
|
return FALSE
|
|
|
|
/datum/religion_rites/summon_rules/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
..()
|
|
var/obj/item/paper/autograph = writ_target
|
|
var/turf/tool_turf = get_turf(religious_tool)
|
|
writ_target = null
|
|
if(QDELETED(autograph) || !(tool_turf == autograph.loc)) //check if the same food is still there
|
|
to_chat(user, span_warning("Your target left the altar!"))
|
|
return FALSE
|
|
autograph.visible_message(span_notice("words magically form on [autograph]!"))
|
|
playsound(tool_turf, 'sound/effects/pray.ogg', 50, TRUE)
|
|
new /obj/item/paper/holy_writ(tool_turf)
|
|
qdel(autograph)
|
|
return TRUE
|
|
|
|
/obj/item/paper/holy_writ
|
|
icon = 'icons/obj/wizard.dmi'
|
|
icon_state = "scroll"
|
|
slot_flags = null
|
|
show_written_words = FALSE
|
|
|
|
//info set in here because we need GLOB.deity
|
|
/obj/item/paper/holy_writ/Initialize(mapload)
|
|
add_filter("holy_outline", 9, list("type" = "outline", "color" = "#fdff6c"))
|
|
name = "[GLOB.deity]'s honorbound rules"
|
|
info = {"[GLOB.deity]'s honorbound rules:
|
|
<br>
|
|
1.) Thou shalt not attack the unready!<br>
|
|
Those who are not ready for battle should not be wrought low. The evil of this world must lose
|
|
in a fair battle if you are to conquer them completely.
|
|
<br>
|
|
<br>
|
|
2.) Thou shalt not attack the just!<br>
|
|
Those who fight for justice and good must not be harmed. Security is uncorruptable and must
|
|
be respected. Healers are mostly uncorruptable and if you are truly sure Medical has fallen
|
|
to the scourge of evil, use a declaration of evil.
|
|
<br>
|
|
<br>
|
|
3.) Thou shalt not attack the innocent!<br>
|
|
There is no honor on a pre-emptive strike, unless they are truly evil vermin.
|
|
Those who are guilty will either lay a hand on you first, or you may declare their evil.
|
|
<br>
|
|
<br>
|
|
4.) Thou shalt not use profane magicks!<br>
|
|
You are not a warlock, you are an honorable warrior. There is nothing more corruptive than
|
|
the vile magicks used by witches, warlocks, and necromancers. There are exceptions to this rule.<br>
|
|
You may use holy magic, and, if you recruit one, the mime may use holy mimery. Restoration has also
|
|
been allowed as it is a school focused on the light and mending of this world.
|
|
"}
|
|
. = ..()
|
|
|
|
/*********Maintenance God**********/
|
|
|
|
/datum/religion_rites/maint_adaptation
|
|
name = "Maintenance Adaptation"
|
|
desc = "Begin your metamorphasis into a being more fit for Maintenance."
|
|
ritual_length = 10 SECONDS
|
|
ritual_invocations = list("I abandon the world ...",
|
|
"... to become one with the deep.",
|
|
"My form will become twisted ...")
|
|
invoke_msg = "... but my smile I will keep!"
|
|
favor_cost = 150 //150u of organic slurry
|
|
|
|
/datum/religion_rites/maint_adaptation/perform_rite(mob/living/carbon/human/user, atom/religious_tool)
|
|
if(!ishuman(user))
|
|
return FALSE
|
|
//uses HAS_TRAIT_FROM because junkies are also hopelessly addicted
|
|
if(HAS_TRAIT_FROM(user, TRAIT_HOPELESSLY_ADDICTED, "maint_adaptation"))
|
|
to_chat(user, span_warning("You've already adapted.</b>"))
|
|
return FALSE
|
|
return ..()
|
|
|
|
/datum/religion_rites/maint_adaptation/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
..()
|
|
to_chat(user, span_warning("You feel your genes rattled and reshaped. <b>You're becoming something new.</b>"))
|
|
user.emote("laughs")
|
|
ADD_TRAIT(user, TRAIT_HOPELESSLY_ADDICTED, "maint_adaptation")
|
|
//addiction sends some nasty mood effects but we want the maint adaption to be enjoyed like a fine wine
|
|
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "maint_adaptation", /datum/mood_event/maintenance_adaptation)
|
|
if(iscarbon(user))
|
|
var/mob/living/carbon/vomitorium = user
|
|
vomitorium.vomit()
|
|
var/datum/dna/dna = vomitorium.has_dna()
|
|
dna?.add_mutation(/datum/mutation/human/stimmed) //some fluff mutations
|
|
dna?.add_mutation(/datum/mutation/human/strong)
|
|
user.mind.add_addiction_points(/datum/addiction/maintenance_drugs, 1000)//ensure addiction
|
|
|
|
/datum/religion_rites/adapted_eyes
|
|
name = "Adapted Eyes"
|
|
desc = "Only available after maintenance adaptation. Your eyes will adapt as well, becoming useless in the light."
|
|
ritual_length = 10 SECONDS
|
|
invoke_msg = "I no longer want to see the light."
|
|
favor_cost = 300 //300u of organic slurry, i'd consider this a reward of the sect
|
|
|
|
/datum/religion_rites/adapted_eyes/perform_rite(mob/living/carbon/human/user, atom/religious_tool)
|
|
if(!ishuman(user))
|
|
return FALSE
|
|
if(!HAS_TRAIT_FROM(user, TRAIT_HOPELESSLY_ADDICTED, "maint_adaptation"))
|
|
to_chat(user, span_warning("You need to adapt to maintenance first."))
|
|
return FALSE
|
|
var/obj/item/organ/eyes/night_vision/maintenance_adapted/adapted = user.getorganslot(ORGAN_SLOT_EYES)
|
|
if(adapted && istype(adapted))
|
|
to_chat(user, span_warning("Your eyes are already adapted!"))
|
|
return FALSE
|
|
return ..()
|
|
|
|
/datum/religion_rites/adapted_eyes/invoke_effect(mob/living/carbon/human/user, atom/movable/religious_tool)
|
|
..()
|
|
var/obj/item/organ/eyes/oldeyes = user.getorganslot(ORGAN_SLOT_EYES)
|
|
to_chat(user, span_warning("You feel your eyes adapt to the darkness!"))
|
|
if(oldeyes)
|
|
oldeyes.Remove(user, special = TRUE)
|
|
qdel(oldeyes)//eh
|
|
var/obj/item/organ/eyes/night_vision/maintenance_adapted/neweyes = new
|
|
neweyes.Insert(user, special = TRUE)
|
|
|
|
/datum/religion_rites/adapted_food
|
|
name = "Moldify"
|
|
desc = "Once adapted to the Maintenance, you will not be able to eat regular food. This should help."
|
|
ritual_length = 5 SECONDS
|
|
invoke_msg = "Moldify!"
|
|
favor_cost = 5 //5u of organic slurry
|
|
///the food that will be molded, only one per rite
|
|
var/obj/item/food/mold_target
|
|
|
|
/datum/religion_rites/adapted_food/perform_rite(mob/living/user, atom/religious_tool)
|
|
for(var/obj/item/food/could_mold in get_turf(religious_tool))
|
|
if(istype(could_mold, /obj/item/food/badrecipe/moldy))
|
|
continue
|
|
mold_target = could_mold //moldify this o great one
|
|
return ..()
|
|
to_chat(user, span_warning("You need to place food on [religious_tool] to do this!"))
|
|
return FALSE
|
|
|
|
/datum/religion_rites/adapted_food/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
..()
|
|
var/obj/item/food/moldify = mold_target
|
|
mold_target = null
|
|
if(QDELETED(moldify) || !(get_turf(religious_tool) == moldify.loc)) //check if the same food is still there
|
|
to_chat(user, span_warning("Your target left the altar!"))
|
|
return FALSE
|
|
to_chat(user, span_warning("[moldify] becomes rancid!"))
|
|
user.emote("laughs")
|
|
new /obj/item/food/badrecipe/moldy(get_turf(religious_tool))
|
|
qdel(moldify)
|
|
return TRUE
|
|
|
|
/datum/religion_rites/ritual_totem
|
|
name = "Create Ritual Totem"
|
|
desc = "Creates a Ritual Totem, a portable tool for performing rites on the go. Requires wood. Can only be picked up by the holy."
|
|
favor_cost = 100
|
|
invoke_msg = "Padala!!"
|
|
///the food that will be molded, only one per rite
|
|
var/obj/item/stack/sheet/mineral/wood/converted
|
|
|
|
/datum/religion_rites/ritual_totem/perform_rite(mob/living/user, atom/religious_tool)
|
|
for(var/obj/item/stack/sheet/mineral/wood/could_totem in get_turf(religious_tool))
|
|
converted = could_totem //totemify this o great one
|
|
return ..()
|
|
to_chat(user, span_warning("You need at least 1 wood to do this!"))
|
|
return FALSE
|
|
|
|
/datum/religion_rites/ritual_totem/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
..()
|
|
var/altar_turf = get_turf(religious_tool)
|
|
var/obj/item/stack/sheet/mineral/wood/padala = converted
|
|
converted = null
|
|
if(QDELETED(padala) || !(get_turf(religious_tool) == padala.loc)) //check if the same food is still there
|
|
to_chat(user, span_warning("Your target left the altar!"))
|
|
return FALSE
|
|
to_chat(user, span_warning("[padala] reshapes into a totem!"))
|
|
if(!padala.use(1))//use one wood
|
|
return
|
|
user.emote("laughs")
|
|
new /obj/item/ritual_totem(altar_turf)
|
|
return TRUE
|
|
|
|
///sparring god rites
|
|
|
|
/datum/religion_rites/sparring_contract
|
|
name = "Summon Sparring Contract"
|
|
desc = "Turns some paper into a sparring contract."
|
|
invoke_msg = "I will train in the name of my god."
|
|
///paper to turn into a sparring contract
|
|
var/obj/item/paper/contract_target
|
|
|
|
/datum/religion_rites/sparring_contract/perform_rite(mob/living/user, atom/religious_tool)
|
|
for(var/obj/item/paper/could_contract in get_turf(religious_tool))
|
|
if(could_contract.get_info_length()) //blank paper pls
|
|
continue
|
|
contract_target = could_contract
|
|
return ..()
|
|
to_chat(user, span_warning("You need to place blank paper on [religious_tool] to do this!"))
|
|
return FALSE
|
|
|
|
/datum/religion_rites/sparring_contract/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
..()
|
|
var/obj/item/paper/blank_paper = contract_target
|
|
var/turf/tool_turf = get_turf(religious_tool)
|
|
contract_target = null
|
|
if(QDELETED(blank_paper) || !(tool_turf == blank_paper.loc)) //check if the same paper is still there
|
|
to_chat(user, span_warning("Your target left the altar!"))
|
|
return FALSE
|
|
blank_paper.visible_message(span_notice("words magically form on [blank_paper]!"))
|
|
playsound(tool_turf, 'sound/effects/pray.ogg', 50, TRUE)
|
|
var/datum/religion_sect/spar/sect = GLOB.religious_sect
|
|
if(sect.existing_contract)
|
|
sect.existing_contract.visible_message(span_warning("[src] fizzles into nothing!"))
|
|
qdel(sect.existing_contract)
|
|
sect.existing_contract = new /obj/item/sparring_contract(tool_turf)
|
|
qdel(blank_paper)
|
|
return TRUE
|
|
|
|
/datum/religion_rites/declare_arena
|
|
name = "Declare Arena"
|
|
desc = "Declare a new area as fit for sparring. You'll be able to select it in contracts."
|
|
ritual_length = 6 SECONDS
|
|
ritual_invocations = list("I seek new horizons ...")
|
|
invoke_msg = "... may my climb be steep."
|
|
favor_cost = 1 //only costs one holy battle for a new area
|
|
var/area/area_instance
|
|
|
|
/datum/religion_rites/declare_arena/perform_rite(mob/living/user, atom/religious_tool)
|
|
var/list/filtered = list()
|
|
for(var/area/unfiltered_area as anything in GLOB.sortedAreas)
|
|
if(istype(unfiltered_area, /area/centcom)) //youuu dont need thaaat
|
|
continue
|
|
if(!(unfiltered_area.area_flags & HIDDEN_AREA))
|
|
filtered += unfiltered_area
|
|
area_instance = tgui_input_list(user, "Choose an area to mark as an arena!", "Arena Declaration", filtered)
|
|
if(!area_instance)
|
|
return FALSE
|
|
. = ..()
|
|
|
|
/datum/religion_rites/declare_arena/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
. = ..()
|
|
var/datum/religion_sect/spar/sect = GLOB.religious_sect
|
|
sect.arenas[area_instance.name] = area_instance.type
|
|
to_chat(user, span_warning("[area_instance] is a now an option to select on sparring contracts."))
|
|
|
|
/datum/religion_rites/ceremonial_weapon
|
|
name = "Forge Ceremonial Gear"
|
|
desc = "Turn some material into ceremonial gear. Ceremonial blades are weak outside of sparring, and are quite heavy to lug around."
|
|
ritual_length = 10 SECONDS
|
|
invoke_msg = "Weapons in your name! Battles with your blood!"
|
|
favor_cost = 0
|
|
///the material that will be attempted to be forged into a weapon
|
|
var/obj/item/stack/sheet/converted
|
|
|
|
/datum/religion_rites/ceremonial_weapon/perform_rite(mob/living/user, atom/religious_tool)
|
|
for(var/obj/item/stack/sheet/could_blade in get_turf(religious_tool))
|
|
if(!(GET_MATERIAL_REF(could_blade.material_type) in SSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL]))
|
|
continue
|
|
if(could_blade.amount < 5)
|
|
continue
|
|
converted = could_blade
|
|
return ..()
|
|
to_chat(user, span_warning("You need at least 5 sheets of a material that can be made into items!"))
|
|
return FALSE
|
|
|
|
/datum/religion_rites/ceremonial_weapon/invoke_effect(mob/living/user, atom/movable/religious_tool)
|
|
..()
|
|
var/altar_turf = get_turf(religious_tool)
|
|
var/obj/item/stack/sheet/used_for_blade = converted
|
|
converted = null
|
|
if(QDELETED(used_for_blade) || !(get_turf(religious_tool) == used_for_blade.loc) || used_for_blade.amount < 5) //check if the same food is still there
|
|
to_chat(user, span_warning("Your target left the altar!"))
|
|
return FALSE
|
|
var/material_used = used_for_blade.material_type
|
|
to_chat(user, span_warning("[used_for_blade] reshapes into a ceremonial blade!"))
|
|
if(!used_for_blade.use(5))//use 5 of the material
|
|
return
|
|
var/obj/item/ceremonial_blade/blade = new(altar_turf)
|
|
blade.set_custom_materials(list(GET_MATERIAL_REF(material_used) = MINERAL_MATERIAL_AMOUNT * 5))
|
|
return TRUE
|
|
|
|
/datum/religion_rites/unbreakable
|
|
name = "Become Unbreakable"
|
|
desc = "Your training has made you unbreakable. In times of crisis, you will attempt to keep fighting on."
|
|
ritual_length = 10 SECONDS
|
|
invoke_msg = "My will must be unbreakable. Grant me this boon!"
|
|
favor_cost = 4 //4 duels won
|
|
|
|
/datum/religion_rites/unbreakable/perform_rite(mob/living/carbon/human/user, atom/religious_tool)
|
|
if(!ishuman(user))
|
|
return FALSE
|
|
if(HAS_TRAIT_FROM(user, TRAIT_UNBREAKABLE, INNATE_TRAIT))
|
|
to_chat(user, span_warning("Your spirit is already unbreakable!"))
|
|
return FALSE
|
|
return ..()
|
|
|
|
/datum/religion_rites/unbreakable/invoke_effect(mob/living/carbon/human/user, atom/movable/religious_tool)
|
|
..()
|
|
to_chat(user, span_nicegreen("You feel [GLOB.deity]'s will to keep fighting pouring into you!"))
|
|
user.AddComponent(/datum/component/unbreakable)
|
|
|
|
/datum/religion_rites/tenacious
|
|
name = "Become Tenacious"
|
|
desc = "Your training has made you tenacious. In times of crisis, you will be able to crawl faster."
|
|
ritual_length = 10 SECONDS
|
|
invoke_msg = "Grant me your tenacity! I have proven myself!"
|
|
favor_cost = 3 //3 duels won
|
|
|
|
/datum/religion_rites/tenacious/perform_rite(mob/living/carbon/human/user, atom/religious_tool)
|
|
if(!ishuman(user))
|
|
return FALSE
|
|
if(HAS_TRAIT_FROM(user, TRAIT_TENACIOUS, INNATE_TRAIT))
|
|
to_chat(user, span_warning("Your spirit is already tenacious!"))
|
|
return FALSE
|
|
return ..()
|
|
|
|
/datum/religion_rites/tenacious/invoke_effect(mob/living/carbon/human/user, atom/movable/religious_tool)
|
|
..()
|
|
to_chat(user, span_nicegreen("You feel [GLOB.deity]'s tenacity pouring into you!"))
|
|
user.AddElement(/datum/element/tenacious)
|