-
-
Notifications
You must be signed in to change notification settings - Fork 452
/
rites.dm
698 lines (625 loc) · 29.2 KB
/
rites.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
/datum/religion_rites
var/name = "religious rite" // name of the religious rite
var/desc = "immm gonna rooon" // Description of the religious rite
var/ritual_length = (10 SECONDS) // length it takes to complete the ritual
var/list/ritual_invocations // list of invocations said (strings) throughout the rite
var/invoke_msg // message when you invoke
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_warning("This rite requires more favor!"))
return FALSE
to_chat(user, span_notice("You begin to perform the rite of [name]..."))
if(!ritual_invocations)
if(do_after(user, ritual_length, user))
if(invoke_msg)
user.say(invoke_msg, forced = "ritual")
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, ritual_length/ritual_invocations.len, user))
return FALSE
user.say(i, forced = "ritual")
if(!do_after(user, ritual_length/ritual_invocations.len, user)) //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, forced = "ritual")
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 = 350
/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 = 200
/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/toolset/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
/datum/religion_rites/botcreation
name = "Lesser Robotic Manufacturing"
desc = "Manufacture a robotic companion."
ritual_length = 45 SECONDS
ritual_invocations = list(
"I call upon the machine spirits, aid me in creation...",
"... The energy shall take the form of its shell...")
invoke_msg = "...AND LET IT BE BORN!!"
favor_cost = 50 // two bluespace cells, 80MJ. needs sci and mining to be competent.
/datum/religion_rites/botcreation/invoke_effect(atom/religious_tool, mob/user)
var/altar_turf = get_turf(religious_tool)
var/chosenbot = pick(/mob/living/simple_animal/bot/medbot, /mob/living/simple_animal/bot/cleanbot, /mob/living/simple_animal/bot/firebot, /obj/item/drone_shell) // nothing too bad.
new chosenbot(altar_turf)
return TRUE
/*********Capitalists**********/
/*
* this rites makes you into a non converting capitalist golem for 10000 favor
*/
/datum/religion_rites/toppercent
name = "Reaching the Top Percent"
desc = "Help a moneybag to get even richer."
ritual_length = 30 SECONDS
ritual_invocations = list("%Money, money, money...",
"%... Must be funny...",
"%... In the rich man's world...")
invoke_msg = "... Wait, it worked?"
favor_cost = 10000
/*
* this rites gives you some snazzy looking clothes for 100 favor
*/
/datum/religion_rites/looks
name = "Gonna look like it"
desc = "From rags to riches? Better get rid of the rags then!"
ritual_length = 0.5 MINUTES
invoke_msg = "Please, all i want are some nice clothes..."
favor_cost = 100
/datum/religion_rites/looks/invoke_effect(atom/religious_tool, mob/user)
var/location = get_turf(user)
new /obj/item/clothing/head/that(location)
new /obj/item/clothing/glasses/monocle(location)
new /obj/item/clothing/under/yogs/victorianvest(location)
return TRUE
/datum/religion_rites/toppercent/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/toppercent/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/mantomoney
for(var/i in movable_reltool.buckled_mobs)
if(istype(i,/mob/living/carbon/human))
mantomoney = i
break
if(!mantomoney)
return FALSE
mantomoney.set_species(/datum/species/golem/church_capitalist)
mantomoney.visible_message(span_notice("[mantomoney] has ascended to the top of society!"))
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_warning("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, 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] 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
/datum/religion_rites/candletransformation //in case you'd rather look like your lord than be flameproof
name = "Wax Conversion"
desc = "Convert a human-esque individual into a being of wax."
ritual_length = 30 SECONDS
ritual_invocations = list(
"Let us offer this unworthy being...",
"... Offered in hope to become something much more...",
"... And in hope to better suit your great image..."
)
invoke_msg = "... Rise, rise! Rise in your new form!!"
favor_cost = 2000
/datum/religion_rites/candletransformation/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/candletransformation/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/human2wax
for(var/i in movable_reltool.buckled_mobs)
if(istype(i,/mob/living/carbon/human))
human2wax = i
break
if(!human2wax)
return FALSE
human2wax.set_species(/datum/species/golem/wax)
human2wax.visible_message(span_notice("[human2wax] has been converted by the rite of [name]!"))
/*********Plant people**********/
/datum/religion_rites/plantconversion
name = "Ent Conversion"
desc = "Convert a human-esque individual into a treelike golem."
ritual_length = 30 SECONDS
ritual_invocations = list(
"Let us call upon the vines that protect...",
"... Allow them to strip away that which is undesirable...",
"... Allow them to protect our souls with a new shell..."
)
invoke_msg = "... Arise, one from the earth! Become one with the true vines, and spread its holy roots!!"
favor_cost = 400 //on average, 20-40 crops
/datum/religion_rites/plantconversion/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/plantconversion/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/human2plant
for(var/i in movable_reltool.buckled_mobs)
if(istype(i,/mob/living/carbon/human))
human2plant = i
break
if(!human2plant)
return FALSE
human2plant.set_species(/datum/species/golem/wood/holy)
human2plant.visible_message(span_notice("[human2plant] has been converted by the rite of [name]!"))
return TRUE
/datum/religion_rites/photogeist
name = "Summon Photogeist"
desc = "Summons forth a holy photogeist that can heal fellow plant-like creatures. Note, it will be dormant till a ghost inhabits it, and it only understands Sylvan."
ritual_length = 15 SECONDS
invoke_msg = "please, great kudzu, give us an angel to watch over us."
favor_cost = 150
/datum/religion_rites/photogeist/invoke_effect(mob/living/user, atom/movable/religious_tool)
var/altar_turf = get_turf(religious_tool)
new /obj/effect/mob_spawn/photogeist(altar_turf)
return TRUE
/*********Old Ones**********/
/datum/religion_rites/ruinousknife
name = "Ruinous Knife"
desc = "Creates a knife that is mostly cosmetic, but is also a weapon. It is extra effective as a butchering tool, and can be upgraded with crafting alongside a piece of ruinous metal."
ritual_length = 5 SECONDS
invoke_msg = "please, old ones, lend us a tool of holy creation."
favor_cost = 50
/datum/religion_rites/ruinousknife/invoke_effect(mob/living/user, atom/movable/religious_tool)
var/altar_turf = get_turf(religious_tool)
new /obj/item/kitchen/knife/ritual/holy(altar_turf)
playsound(altar_turf, 'sound/magic/enter_blood.ogg', 50, TRUE)
return TRUE
/datum/religion_rites/meatbless
name = "Meat Blessing"
desc = "Bless a piece of meat. Preps it for sacrifice. The meat must be on top of the altar."
ritual_length = 2 SECONDS
//no invoke message, this does a custom one down below in invoke_effect
///the piece of meat that will be blessed, only one per rite
var/obj/item/reagent_containers/food/snacks/meat/slab/chosen_meat
/datum/religion_rites/meatbless/perform_rite(mob/living/user, atom/religious_tool)
for(var/obj/item/reagent_containers/food/snacks/meat/slab/offering in get_turf(religious_tool))
if(istype(offering, /obj/item/reagent_containers/food/snacks/meat/slab/blessed))
continue //we ignore anything that is already blessed
chosen_meat = offering //the meat has been chosen by our lord and savior
return ..()
return FALSE
/datum/religion_rites/meatbless/invoke_effect(mob/living/user, atom/religious_tool)
if(!QDELETED(chosen_meat) && get_turf(religious_tool) == chosen_meat.loc) //check if the same meat is still there
var/altar_turf = get_turf(religious_tool)
playsound(get_turf(religious_tool), 'sound/magic/enter_blood.ogg', 50, TRUE)
if(istype(chosen_meat, /obj/item/reagent_containers/food/snacks/meat/slab/synthmeat))
new /obj/item/reagent_containers/food/snacks/meat/slab/blessed/weak(altar_turf)
else
new /obj/item/reagent_containers/food/snacks/meat/slab/blessed(altar_turf)
qdel(chosen_meat)
chosen_meat = null //our lord and savior no longer cares about this meat
var/mb_message = pick("old ones, I bless this meat for you!", "old ones, I bless this flesh in your name", "old ones, I empower this flesh in your name.")
user.say(mb_message, forced = "ritual") //chooses one of three invoke messages to say in order to avoid auto mute and add variety.
return TRUE
chosen_meat = null
to_chat(user, span_warning("The meat that was chosen for the rite is no longer on the altar!"))
return FALSE
/datum/religion_rites/ruinousmetal
name = "Ruinous Metal"
desc = "Creates a piece of metal that can create various holy structures."
ritual_length = 5 SECONDS
invoke_msg = "please, old ones, lend us some of your holy material."
favor_cost = 150
/datum/religion_rites/ruinousmetal/invoke_effect(mob/living/user, atom/movable/religious_tool)
var/altar_turf = get_turf(religious_tool)
new /obj/item/stack/sheet/ruinous_metal(altar_turf)
playsound(altar_turf, 'sound/magic/enter_blood.ogg', 50, TRUE)
return TRUE
/datum/religion_rites/bodybless
name = "Body Blessing"
desc = "Convert a human-esque individual into a being of ruinous metal."
ritual_length = 30 SECONDS
ritual_invocations = list(
"Let us call upon the blessings of the old gods...",
"... Show them one that is worthy of greatness...",
"... And allow them to bless this one with a great power..."
)
invoke_msg = "... Become one with the blessings of our gods, arise great one!!"
favor_cost = 2000 // 27 slabs of blessed meat/200 blessed synthetic meat, more expensive than working with xenobio.
/datum/religion_rites/bodybless/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/bodybless/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/human2ruinous
for(var/i in movable_reltool.buckled_mobs)
if(istype(i,/mob/living/carbon/human))
human2ruinous = i
break
if(!human2ruinous)
return FALSE
human2ruinous.set_species(/datum/species/golem/ruinous)
human2ruinous.visible_message(span_notice("[human2ruinous] has been converted by the rite of [name]!"))
/*********Honkmother**********/
/datum/religion_rites/holypie
name = "Holy Pie"
desc = "Creates a cream pie to throw at others"
ritual_length = 5 SECONDS
invoke_msg = "Oh, Honkmother, grant us the pie to cream the faces of the people."
favor_cost = 50
/datum/religion_rites/holypie/invoke_effect(mob/living/user, atom/movable/religious_tool)
var/altar_turf = get_turf(religious_tool)
new /obj/item/reagent_containers/food/snacks/pie/cream (altar_turf)
playsound(altar_turf, 'sound/items/bikehorn.ogg', 50, TRUE)
return TRUE
/datum/religion_rites/honkabot
name = "Honk a Bot"
desc = "Summons a Honkbot to bring honking to the station"
ritual_length = 5 SECONDS
invoke_msg = "Great Honkmother, hear my pray: HONK!"
favor_cost = 150
/datum/religion_rites/honkabot/invoke_effect(mob/living/user, atom/movable/religious_tool)
var/altar_turf = get_turf(religious_tool)
new /mob/living/simple_animal/bot/honkbot(altar_turf)
return TRUE
/datum/religion_rites/bananablessing
name = "Banana Blessing"
desc = "Creates a piece of bananium to further the clown researches"
ritual_length = 30 SECONDS
ritual_invocations = list(
"I pray to the Honkmother to hear my pleas...",
"...Bring us the power to entertain our allies...",
"...And merciless prank our enemies...",
)
invoke_msg = "Show the true power of clownkind!"
favor_cost = 1000
/datum/religion_rites/bananablessing/invoke_effect(mob/living/user, atom/movable/religious_tool)
var/altar_turf = get_turf(religious_tool)
new /obj/item/stack/sheet/mineral/bananium (altar_turf)
playsound(altar_turf, 'sound/items/bikehorn.ogg', 50, TRUE)
return TRUE
/*********Holy Light**********/
/datum/religion_rites/holysight
name = "Holy Sight"
desc = "Creates a medhud implant."
ritual_length = 15 SECONDS
ritual_invocations = list(
"To aid in our journey to heal...",
"...Grant us the ability to see within...",
)
invoke_msg = "So that we may seek the injured!"
favor_cost = 150
/datum/religion_rites/holysight/invoke_effect(mob/living/user, atom/movable/religious_tool)
var/altar_turf = get_turf(religious_tool)
var/atom/newitem = new /obj/item/autosurgeon/cmo (altar_turf)
newitem.name = "autosurgeon of truesight"
playsound(altar_turf, 'sound/magic/staff_healing.ogg', 50, TRUE)
return TRUE
/datum/religion_rites/medibot
name = "Angelic Assistance"
desc = "Creates a medibot."
ritual_length = 15 SECONDS
ritual_invocations = list(
"To prolong healing far past even my expiration...",
"...Automated, soulless, but efficient...",
"...Grant us this sustaining robot...",
)
invoke_msg = "So that we may live forever!"
favor_cost = 250
/datum/religion_rites/medibot/invoke_effect(mob/living/user, atom/movable/religious_tool)
var/altar_turf = get_turf(religious_tool)
var/mob/living/simple_animal/bot/medbot/newitem = new (altar_turf)
newitem.name = "\improper Holy Medibot"
newitem.add_atom_colour(GLOB.freon_color_matrix, TEMPORARY_COLOUR_PRIORITY)
newitem.holy = TRUE
newitem.AddComponent(/datum/component/anti_magic, MAGIC_RESISTANCE|MAGIC_RESISTANCE_HOLY)
playsound(altar_turf, 'sound/magic/staff_healing.ogg', 50, TRUE)
return TRUE
/datum/religion_rites/healrod
name = "The White"
desc = "Creates an area-of-effect healing rod."
ritual_length = 20 SECONDS
ritual_invocations = list(
"To ensure all remain healthy...",
"...Grant us a tool capable of passively healing the injured...",
"...One that binds us to an unbreakable contract of pacifism..."
)
invoke_msg = "So that we may heal all indiscriminately!"
favor_cost = 400
/obj/item/rod_of_asclepius/white
name = "\improper Rod of The White"
desc = "A sleek white rod with a snake spiraling along it."
efficiency = 0.5
resistance_flags = FREEZE_PROOF
/obj/item/rod_of_asclepius/white/Initialize(mapload)
. = ..()
add_atom_colour(GLOB.freon_color_matrix, TEMPORARY_COLOUR_PRIORITY)
/datum/religion_rites/healrod/invoke_effect(mob/living/user, atom/movable/religious_tool)
var/altar_turf = get_turf(religious_tool)
new /obj/item/rod_of_asclepius/white (altar_turf)
playsound(altar_turf, 'sound/magic/staff_healing.ogg', 75, TRUE)
return TRUE
/datum/religion_rites/holyrevival
name = "Rebirth"
desc = "Regenerates a being to its once pure state."
ritual_length = 60 SECONDS
ritual_invocations = list(
"This being is in dire need of your assistance...",
"...As they have been inflicted with great ailment...",
"...Please, grant us the unbridled power of the Holy Light...",
"...We will channel our power in your name...",
)
invoke_msg = "So that this being may be reborn in your image!"
favor_cost = 650
/datum/religion_rites/holyrevival/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)
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/holyrevival/invoke_effect(mob/living/user, atom/movable/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/man_to_revive
for(var/i in movable_reltool.buckled_mobs)
if(istype(i,/mob/living/carbon/human))
man_to_revive = i
break
if(!man_to_revive)
return FALSE
var/was_dead = man_to_revive.stat == DEAD
man_to_revive.revive(TRUE)
if(was_dead) // aheal needs downside
man_to_revive.adjustCloneLoss(75) // can be slowly healed with the rod of asclepius anyways
man_to_revive.apply_status_effect(STATUS_EFFECT_HOLYLIGHT_ANTIMAGIC)
to_chat(man_to_revive, span_userdanger("As you rise anew, you forget all that had previously harmed you!"))
man_to_revive.emote("smile")
man_to_revive.visible_message(span_notice("[man_to_revive] rises, reborn in the Holy Light!"))
var/altar_turf = get_turf(religious_tool)
playsound(altar_turf, 'sound/magic/staff_healing.ogg', 100, TRUE)
return TRUE