diff --git a/aurorastation.dme b/aurorastation.dme
index 2f96924a3fe..2e12fdc9e54 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -846,6 +846,7 @@
#include "code\game\objects\items\weapons\candle.dm"
#include "code\game\objects\items\weapons\cards_ids.dm"
#include "code\game\objects\items\weapons\cards_ids_syndicate.dm"
+#include "code\game\objects\items\weapons\chaplain_items.dm"
#include "code\game\objects\items\weapons\chewables.dm"
#include "code\game\objects\items\weapons\cigs_lighters.dm"
#include "code\game\objects\items\weapons\cloaking_device.dm"
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 4065683b953..5ac579b76d5 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -741,7 +741,7 @@ var/list/sacrificed = list()
rad = 4
go = 1
if (istype(W,/obj/item/nullrod))
- rad = 1
+ rad = 2
go = 1
if(go)
for(var/obj/effect/rune/R in orange(rad,src))
@@ -750,7 +750,7 @@ var/list/sacrificed = list()
S=1
if(S)
if(istype(W,/obj/item/nullrod))
- to_chat(user, "Arcane markings suddenly glow from underneath a thin layer of dust!")
+ visible_message(span("warning", "Arcane markings suddenly glow from underneath a thin layer of dust!"))
return
if(istype(W,/obj/effect/rune))
user.say("Nikt[pick("'","`")]o barada kla'atu!")
diff --git a/code/game/objects/items/weapons/chaplain_items.dm b/code/game/objects/items/weapons/chaplain_items.dm
new file mode 100644
index 00000000000..7f730b21d1d
--- /dev/null
+++ b/code/game/objects/items/weapons/chaplain_items.dm
@@ -0,0 +1,173 @@
+// Nullrod, Aspergillum, Burial Urn
+
+/obj/item/nullrod
+ name = "null rod"
+ desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."
+ icon_state = "nullrod"
+ item_state = "nullrod"
+ slot_flags = SLOT_BELT
+ force = 15
+ throw_speed = 1
+ throw_range = 4
+ throwforce = 10
+ w_class = 2
+ var/cooldown = 0 // floor tap cooldown
+ var/static/list/nullchoices = list("Null Rod" = /obj/item/nullrod/, "Null Staff" = /obj/item/nullrod/staff, "Null Orb" = /obj/item/nullrod/orb, "Null Athame" = /obj/item/nullrod/athame)
+
+/obj/item/nullrod/staff
+ name = "null staff"
+ desc = "A staff of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."
+ icon_state = "nullstaff"
+ item_state = "nullstaff"
+ slot_flags = SLOT_BELT | SLOT_BACK
+ w_class = 4
+
+/obj/item/nullrod/orb
+ name = "null sphere"
+ desc = "An orb of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."
+ icon_state = "nullorb"
+ item_state = "nullorb"
+
+/obj/item/nullrod/athame
+ name = "null athame"
+ desc = "An athame of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."
+ icon_state = "nullathame"
+ item_state = "nullathame"
+
+/obj/item/nullrod/obsidianshards
+ name = "obsidian shards"
+ desc = "A loose pile of obsidian shards, waiting to be assembled into a religious focus."
+ icon_state = "nullshards"
+ item_state = "nullshards"
+
+/obj/item/nullrod/verb/change(mob/user)
+ set name = "Reassemble Null Item"
+ set category = "Object"
+ set src in usr
+
+ if(use_check_and_message(user, USE_FORCE_SRC_IN_USER))
+ return
+
+ var/picked = input("What form would you like your obsidian relic to take?", "Reassembling your obsidian relic") as null|anything in nullchoices
+
+ if(use_check_and_message(user, USE_FORCE_SRC_IN_USER))
+ return
+ if(!ispath(nullchoices[picked]))
+ return
+
+ to_chat(user, span("notice", "You start reassembling your obsidian relic."))
+ if(!do_after(user, 2 SECONDS))
+ return
+
+ var/obj/item/nullrod/chosenitem = nullchoices[picked]
+ new chosenitem(get_turf(user))
+ qdel(src)
+ user.put_in_hands(chosenitem)
+
+/obj/item/nullrod/attack(mob/M as mob, mob/living/user as mob)
+
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ user.do_attack_animation(M)
+
+ if(LAZYLEN(user.spell_list))
+ user.silence_spells(300) //30 seconds
+ to_chat(user, span("danger", "You've been silenced!"))
+ return
+
+ if(!user.IsAdvancedToolUser())
+ to_chat(user, span("danger", "You don't have the dexterity to use this!"))
+ return
+
+ if((user.is_clumsy()) && prob(50))
+ to_chat(user, span("danger", "The [src] slips out of your hand and you hit yourself!"))
+ visible_message(span("danger", "[user] fumbles with the [src] and hits themselves in the process!"))
+ user.take_organ_damage(10)
+ user.Paralyse(20)
+ return
+
+ if(M.stat != DEAD && ishuman(M) && user.a_intent != I_HURT)
+ var/mob/living/K = M
+ if(cult && (K.mind in cult.current_antagonists) && prob(75))
+ if(do_after(user, 15))
+ K.visible_message(span("danger", "[user] waves \the [src] over \the [K]'s head, [K] looks captivated by it."), span("warning", "[user] waves the [src] over your head. You see a foreign light, asking you to follow it. Its presence burns and blinds."))
+ var/choice = alert(K,"Do you want to give up your goal?","Become cleansed","Resist","Give in")
+ switch(choice)
+ if("Resist")
+ K.visible_message(span("warning", "The gaze in [K]'s eyes remains determined."), span("notice", "You turn away from the light, remaining true to the Geometer!"))
+ K.say("*scream")
+ K.take_overall_damage(5, 15)
+ admin_attack_log(user, M, "attempted to deconvert", "was unsuccessfully deconverted by", "attempted to deconvert")
+ if("Give in")
+ K.visible_message(span("notice", "[K]'s eyes become clearer, the evil gone, but not without leaving scars."))
+ K.take_overall_damage(10, 20)
+ cult.remove_antagonist(K.mind)
+ admin_attack_log(user, M, "successfully deconverted", "was successfully deconverted by", "successfully deconverted")
+ else
+ user.visible_message(span("warning", "[user]'s concentration is broken!"), span("warning", "Your concentration is broken! You and your target need to stay uninterrupted for longer!"))
+ return
+ else
+ to_chat(user, span("danger", "The [src] appears to do nothing."))
+ M.visible_message(span("danger", "\The [user] waves \the [src] over \the [M]'s head."))
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(prob(25))
+ H.cure_all_traumas(cure_type = CURE_SOLITUDE)
+ else if(prob(20))
+ H.cure_all_traumas(cure_type = CURE_CRYSTAL)
+ return
+ else if(user.a_intent != I_HURT) // to prevent the chaplain from hurting peoples accidentally
+ to_chat(user, span("notice", "The [src] appears to do nothing."))
+ return
+ else
+ return ..()
+
+/obj/item/nullrod/afterattack(atom/A, mob/user as mob, proximity)
+ if(!proximity)
+ return
+ if (istype(A, /turf/simulated/floor) && (cooldown + 5 SECONDS < world.time))
+ cooldown = world.time
+ user.visible_message(span("notice", "[user] loudly taps their [src.name] against the floor."))
+ playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1)
+ call(/obj/effect/rune/proc/revealrunes)(src)
+ return
+
+/obj/item/reagent_containers/spray/aspergillum
+ name = "aspergillum"
+ desc = "A ceremonial item for sprinkling holy water, or other liquids, on a subject."
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "aspergillum"
+ item_state = "aspergillum"
+ amount_per_transfer_from_this = 5
+ possible_transfer_amounts = null
+ spray_size = 1
+ volume = 10
+ spray_sound = 'sound/effects/jingle.ogg'
+
+/obj/item/material/urn
+ name = "urn"
+ desc = "A vase used to store the ashes of the deceased."
+ icon = 'icons/obj/urn.dmi'
+ icon_state = "urn"
+ applies_material_colour = TRUE
+ w_class = ITEMSIZE_SMALL
+
+/obj/item/material/urn/attack(var/obj/A, var/mob/user, var/proximity)
+ if(!istype(A, /obj/effect/decal/cleanable/ash))
+ return ..()
+ else if(proximity)
+ if(contents.len)
+ to_chat(user, span("warning", "\The [src] is already full!"))
+ return
+ user.visible_message("[user] scoops \the [A] into \the [src], securing the lid.", "You scoop \the [A] into \the [src], securing the lid.")
+ desc = "A vase used to store the ashes of the deceased. It contains some ashes."
+ A.forceMove(src)
+
+/obj/item/material/urn/attack_self(mob/user)
+ if(!contents.len)
+ to_chat(user, span("warning", "\The [src] is empty!"))
+ return
+ else
+ for(var/obj/effect/decal/cleanable/ash/A in contents)
+ A.dropInto(loc)
+ user.visible_message("[user] pours \the [A] out from \the [src].", "You pour \the [A] out from \the [src].")
+ desc = "A vase used to store the ashes of the deceased."
diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm
index f22cd984544..6941de07938 100644
--- a/code/game/objects/items/weapons/storage/bible.dm
+++ b/code/game/objects/items/weapons/storage/bible.dm
@@ -1,18 +1,18 @@
/obj/item/storage/bible
name = "bible"
- desc = "Apply to head repeatedly."
- icon_state ="bible"
+ desc = "A holy item, containing the written words of a religion."
+ icon_state = "bible"
icon = 'icons/obj/library.dmi'
throw_speed = 1
throw_range = 5
- w_class = 3.0
+ w_class = ITEMSIZE_SMALL // POKKET - geeves
var/mob/affecting = null
use_sound = 'sound/bureaucracy/bookopen.ogg'
drop_sound = 'sound/bureaucracy/bookclose.ogg'
/obj/item/storage/bible/booze
name = "bible"
- desc = "To be applied to the head repeatedly."
+ desc = "A holy item, containing the written words of a religion."
icon_state = "bible"
starts_with = list(
/obj/item/reagent_containers/food/drinks/bottle/small/beer = 2,
@@ -20,81 +20,100 @@
)
/obj/item/storage/bible/afterattack(atom/A, mob/user as mob, proximity)
- if(!proximity) return
+ if(!proximity)
+ return
if(user.mind && (user.mind.assigned_role == "Chaplain"))
if(A.reagents && A.reagents.has_reagent("water")) //blesses all the water in the holder
- to_chat(user, "You bless [A].")
- var/water2holy = A.reagents.get_reagent_amount("water")
- A.reagents.del_reagent("water")
- A.reagents.add_reagent("holywater",water2holy)
+ if(A.reagents.get_reagent_amount("water") > 60)
+ to_chat(user, span("notice", "There's too much water for you to bless at once!"))
+ else
+ to_chat(user, span("notice", "You bless the water in [A], turning it into holy water."))
+ var/water2holy = A.reagents.get_reagent_amount("water")
+ A.reagents.del_reagent("water")
+ A.reagents.add_reagent("holywater", water2holy)
/obj/item/storage/bible/attackby(obj/item/W as obj, mob/user as mob)
- if (src.use_sound)
+ if(src.use_sound)
playsound(src.loc, src.use_sound, 50, 1, -5)
..()
/obj/item/storage/bible/proc/Set_Religion(mob/user)
if(use_check(user))
return
-
if(!ishuman(user))
return
var/religion_name = "Christianity"
var/new_religion = sanitize(input(user, "You are the crew services officer. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name), MAX_NAME_LEN)
- if (!new_religion)
+ if(!new_religion)
new_religion = religion_name
var/book_name = sanitize(input(user, "Would you like the change your bible name? Default is holy bible.", "Book name change", name), MAX_NAME_LEN)
- if (book_name)
+ if(book_name)
name = book_name
SSticker.Bible_name = book_name
- var/new_book_style = input(user,"Which bible style would you like?") in list("Bible", "Quran", "Scrapbook", "Creeper", "White Bible", "Holy Light", "Atheist", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "the bible melts", "Necronomicon")
+ var/new_book_style = input(user,"Which bible style would you like?") in list("Generic", "Bible", "White Bible", "Melted Bible", "Quran", "Torah", "Holy Light", "Tome", "Scroll", "The King in Yellow", "Ithaqua", "Trinary", "Stars", "Scrapbook", "Atheist", "Necronomicon")
switch(new_book_style)
- if("Quran")
- icon_state = "quran"
- item_state = "quran"
- if("Scrapbook")
- icon_state = "scrapbook"
- item_state = "scrapbook"
- if("Creeper")
- icon_state = "creeper"
- item_state = "creeper"
+ if("Bible")
+ icon_state = "bible"
+ item_state = "bible"
+ new /obj/item/clothing/accessory/rosary(src)
if("White Bible")
icon_state = "white"
item_state = "white"
+ new /obj/item/clothing/accessory/rosary(src)
+ if("Melted Bible")
+ icon_state = "melted"
+ item_state = "melted"
+ new /obj/item/clothing/accessory/rosary(src)
+ if("Quran")
+ icon_state = "quran"
+ item_state = "quran"
+ if("Torah")
+ icon_state = "torah"
+ item_state = "torah"
+ if("Kojiki")
+ icon_state = "kojiki"
+ item_state = "kojiki"
if("Holy Light")
icon_state = "holylight"
item_state = "holylight"
- if("Atheist")
- icon_state = "atheist"
- item_state = "atheist"
if("Tome")
icon_state = "tome"
item_state = "tome"
+ if("Scroll")
+ icon_state = "scroll"
+ item_state = "scroll"
if("The King in Yellow")
icon_state = "kingyellow"
item_state = "kingyellow"
if("Ithaqua")
icon_state = "ithaqua"
item_state = "ithaqua"
- if("Scientology")
- icon_state = "scientology"
- item_state = "scientology"
- if("the bible melts")
- icon_state = "melted"
- item_state = "melted"
+ if("Trinary")
+ icon_state = "trinary"
+ item_state = "trinary"
+ if("Stars")
+ icon_state = "skrellbible"
+ item_state = "skrellbible"
+ if("Scrapbook")
+ icon_state = "scrapbook"
+ item_state = "scrapbook"
+ if("Atheist")
+ icon_state = "atheist"
+ item_state = "atheist"
if("Necronomicon")
icon_state = "necronomicon"
item_state = "necronomicon"
else
- icon_state = "bible"
- item_state = "bible"
+ var/randbook = "book" + pick("1", "2", "3", "4", "5", "6" , "7")
+ icon_state = randbook
+ item_state = randbook
SSticker.Bible_icon_state = icon_state
SSticker.Bible_item_state = item_state
- verbs -= /obj/item/storage/bible/proc/Set_Religion
\ No newline at end of file
+ verbs -= /obj/item/storage/bible/proc/Set_Religion
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index 4622dd36ac4..5dadf835fc0 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -1,155 +1,3 @@
-
-/obj/item/nullrod
- name = "null rod"
- desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."
- icon_state = "nullrod"
- item_state = "nullrod"
- icon = 'icons/obj/weapons.dmi'
- hitsound = "swing_hit"
- slot_flags = SLOT_BELT
- force = 15
- throw_speed = 1
- throw_range = 4
- throwforce = 10
- w_class = 2
- var/static/list/nullchoices
-
-/obj/item/nullrod/nullstaff
- name = "null staff"
- desc = "A staff of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."
- icon_state = "nullstaff"
- item_state = "nullstaff"
- slot_flags = SLOT_BACK
- w_class = 4
-
-/obj/item/nullrod/nullorb
- name = "null sphere"
- desc = "An orb of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."
- icon_state = "nullorb"
- item_state = "nullorb"
-
-/obj/item/nullrod/nullathame
- name = "null athame"
- desc = "An athame of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."
- icon_state = "nullathame"
- item_state = "nullathame"
-
-/obj/item/nullrod/obsidianshards
- name = "Obsidian Shards"
- desc = "A loose pile of obsidian shards, waiting to be assembled into a religious focus."
- icon_state = "nullshards"
- item_state = "nullshards"
-
-/obj/item/nullrod/Initialize()
- . = ..()
- if(!nullchoices)
- var/blocked = list(src.type, /obj/item/nullrod/nullorb) + typesof(/obj/item/nullrod/fluff)
- nullchoices = generate_chameleon_choices(/obj/item/nullrod, blocked)
-
-/obj/item/nullrod/verb/change()
- set name = "Reassemble"
- set category = "Obsidian Relics"
- set src in usr
-
- if (use_check_and_message(usr, USE_FORCE_SRC_IN_USER))
- return
-
- var/picked = input("What form would you like your obsidian relic to take?", "Reassembling your obsidian relic") as null|anything in nullchoices
-
- if (use_check_and_message(usr, USE_FORCE_SRC_IN_USER))
- return
-
- if(!ispath(nullchoices[picked]))
- return
-
- disguise(nullchoices[picked])
-
- if (ismob(src.loc))
- var/mob/M = src.loc
- M.update_inv_r_hand(FALSE)
- M.update_inv_l_hand()
-
-/obj/item/nullrod/attack(mob/M as mob, mob/living/user as mob) //Paste from old-code to decult with a null rod.
-
- user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
- user.do_attack_animation(M)
-
- if(LAZYLEN(user.spell_list))
- user.silence_spells(300) //30 seconds
- to_chat(user, "You've been silenced!")
- return
-
- if (!user.IsAdvancedToolUser())
- to_chat(user, "You don't have the dexterity to do this!")
- return
-
- if ((user.is_clumsy()) && prob(50))
- to_chat(user, "The rod slips out of your hand and hits your head.")
- user.take_organ_damage(10)
- user.Paralyse(20)
- return
-
- if (M.stat !=2 && ishuman(M) && user.a_intent != I_HURT)
- var/mob/living/K = M
- if(cult && (K.mind in cult.current_antagonists) && prob(33))
- if(do_after(user, 15))
- K.visible_message("\The [user] waves \the [src] over \the [K]'s head, [K] looks captivated by it.", "[user] wave's the [src] over your head. You see a foreign light, asking you to follow it. Its presence burns and blinds.")
- var/choice = alert(K,"Do you want to give up your goal?","Become cleansed","Resist","Give in")
- switch(choice)
- if("Resist")
- K.visible_message("The gaze in [K]'s eyes remains determined.", "You turn away from the light, remaining true to the Geometer!")
- K.say("*scream")
- K.take_overall_damage(5, 15)
- if("Give in")
- K.visible_message("[K]'s eyes become clearer, the evil gone, but not without leaving scars.")
- K.take_overall_damage(15, 30)
- cult.remove_antagonist(K.mind)
- else
- user.visible_message("[user]'s concentration is broken!", "Your concentration is broken! You and your target need to stay uninterrupted for longer!")
- return
- else if(prob(10))
- to_chat(user, "The rod slips in your hand.")
- ..()
- else
- to_chat(user, "The rod appears to do nothing.")
- M.visible_message("\The [user] waves \the [src] over \the [M]'s head.")
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(prob(15))
- H.cure_all_traumas(cure_type = CURE_SOLITUDE)
- else if(prob(10))
- H.cure_all_traumas(cure_type = CURE_CRYSTAL)
- return
- M.attack_log += text("\[[time_stamp()]\] Is being deconverted with the [src.name] by [user.name] ([user.ckey])")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attempt to deconvert [M.name] ([M.ckey])")
-
- msg_admin_attack("[key_name_admin(user)] attempted to deconvert [key_name_admin(M)] with [src.name] (INTENT: [uppertext(user.a_intent)]) (JMP)",ckey=key_name(user),ckey_target=key_name(M))
-
- else
- return ..()
-
-/obj/item/nullrod/afterattack(atom/A, mob/user as mob, proximity)
- if(!proximity)
- return
- if (istype(A, /turf/simulated/floor))
- to_chat(user, "You hit the floor with the [src].")
- call(/obj/effect/rune/proc/revealrunes)(src)
-
-/obj/item/reagent_containers/spray/aspergillum/AltClick()
- return
-
-/obj/item/reagent_containers/spray/aspergillum
- name = "aspergillum"
- desc = "A ceremonial item for sprinkling holy water, or other liquids, on a subject."
- icon = 'icons/obj/weapons.dmi'
- icon_state = "aspergillum"
- item_state = "aspergillum"
- amount_per_transfer_from_this = 5
- possible_transfer_amounts = null
- spray_size = 1
- volume = 10
- spray_sound = 'sound/effects/jingle.ogg'
-
/obj/item/energy_net
name = "energy net"
desc = "It's a net made of green energy."
diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm
index 73e0cf4eac7..c5d6aede687 100644
--- a/code/modules/clothing/under/accessories/accessory.dm
+++ b/code/modules/clothing/under/accessories/accessory.dm
@@ -219,6 +219,19 @@
return
return ..(M,user)
+//Religious items
+/obj/item/clothing/accessory/rosary
+ name = "rosary"
+ desc = "A form of prayer psalter used in the Catholic Church, with a string of beads attached to it."
+ icon = 'icons/obj/clothing/chaplain.dmi'
+ icon_state = "rosary"
+ overlay_state = "rosary"
+ flippable = 1
+
+ slot_flags = SLOT_BELT | SLOT_TIE
+
+ drop_sound = 'sound/items/drop/scrap.ogg'
+
//Medals
/obj/item/clothing/accessory/medal
name = "bronze medal"
diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm
index e44e8db6501..7f729ba323a 100644
--- a/code/modules/materials/material_recipes.dm
+++ b/code/modules/materials/material_recipes.dm
@@ -21,6 +21,7 @@
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] lock",/obj/item/material/lock_construct, 1, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
+ recipes += new/datum/stack_recipe("[display_name] urn", /obj/item/material/urn, 10, time = 30, one_per_turf = FALSE, on_floor = 1, supplied_material = "[name]")
if(hardness>=10)
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
if(hardness>50)
diff --git a/html/changelogs/geeves - forSNAKE.yml b/html/changelogs/geeves - forSNAKE.yml
new file mode 100644
index 00000000000..540055b125b
--- /dev/null
+++ b/html/changelogs/geeves - forSNAKE.yml
@@ -0,0 +1,18 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - tweak: "Reassembling a null item now correctly assigns new values to it."
+ - rscdel: "You can no longer bonk yourself in the head when blessing people, if you're perfectly sane."
+ - tweak: "Chance to prompt the convert path raised to 75% up from 33%. (Cultists should not mess around with chaplains.)"
+ - tweak: "Damage done by conversions reduced a tad."
+ - tweak: "Chance of null rod waving curing some mental traumas raised by 10%."
+ - tweak: "You can no longer accidentally bash the shit out of people with the null rod."
+ - tweak: "Tapping your rod against the floor now makes a visible message, and reveals runes in a wider radius."
+ - tweak: "Bibles now have better descriptors, meme sprites removed."
+ - rscadd: "Added new bible types, as well as a generic variant with no face."
+ - rscadd: "You can now only bless up to 60u of water, the amount that's in a flask. No more blessing water tanks."
+ - rscadd: "Adds craftable burial urns."
+ - rscadd: "Added null orb sprite."
+ - rscadd: "Added the Catholic Rosary to the Bible and White Bible spawns."
\ No newline at end of file
diff --git a/icons/obj/clothing/chaplain.dmi b/icons/obj/clothing/chaplain.dmi
new file mode 100644
index 00000000000..dc7f9fe20fd
Binary files /dev/null and b/icons/obj/clothing/chaplain.dmi differ
diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi
index 1c0cf3462d6..e4beec6c9f0 100644
Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ
diff --git a/icons/obj/urn.dmi b/icons/obj/urn.dmi
new file mode 100644
index 00000000000..e2d43cf594c
Binary files /dev/null and b/icons/obj/urn.dmi differ