diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm
index 15350793fad40..3efc7429d803d 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm
@@ -150,7 +150,7 @@
pixel_x = -5;
pixel_y = 12
},
-/obj/item/clothing/head/helmet/chaplain/ancient{
+/obj/item/clothing/head/witchunter{
pixel_y = 13;
pixel_x = -5
},
diff --git a/_maps/RandomRuins/SpaceRuins/spacemall.dmm b/_maps/RandomRuins/SpaceRuins/spacemall.dmm
index 6383f0b920f3d..05d9a042df56d 100644
--- a/_maps/RandomRuins/SpaceRuins/spacemall.dmm
+++ b/_maps/RandomRuins/SpaceRuins/spacemall.dmm
@@ -2809,10 +2809,9 @@
/obj/item/clothing/head/collectable/chef,
/obj/item/clothing/head/collectable/HoP,
/obj/item/clothing/head/collectable/rabbitears,
-/obj/item/clothing/head/helmet/chaplain,
+/obj/item/clothing/head/witchunter,
/obj/item/clothing/neck/cloak/trans,
/obj/item/clothing/neck/cloak/cap,
-/obj/item/clothing/head/helmet/chaplain/witchunter_hat,
/obj/item/clothing/neck/beads,
/obj/item/clothing/neck/necklace/dope,
/obj/item/clothing/neck/stripedredscarf,
diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm
index a880d2947ae29..207d91d4219ae 100644
--- a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm
+++ b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm
@@ -424,7 +424,7 @@
"qo" = (
/obj/structure/closet/cabinet,
/obj/item/spear/bonespear,
-/obj/item/clothing/suit/armor/riot/chaplain/studentuni,
+/obj/item/clothing/suit/armor/witchhunter,
/obj/item/reagent_containers/food/snacks/grown/berries/death,
/turf/open/floor/wood/waste,
/area/ruin/wasteplanet)
@@ -461,7 +461,7 @@
/area/ruin/wasteplanet)
"qU" = (
/obj/structure/closet/cabinet,
-/obj/item/clothing/suit/armor/riot/chaplain/studentuni,
+/obj/item/clothing/suit/armor/witchhunter,
/turf/open/floor/wood/waste,
/area/ruin/wasteplanet)
"rh" = (
@@ -492,7 +492,7 @@
"sV" = (
/obj/structure/closet/cabinet,
/obj/item/claymore/bone,
-/obj/item/clothing/suit/armor/riot/chaplain/studentuni,
+/obj/item/clothing/suit/armor/witchhunter,
/turf/open/floor/wood/waste,
/area/ruin/wasteplanet)
"tB" = (
diff --git a/_maps/shuttles/roumain/srm_elder.dmm b/_maps/shuttles/roumain/srm_elder.dmm
index 0fdb4827655a9..5ea4e25b46872 100644
--- a/_maps/shuttles/roumain/srm_elder.dmm
+++ b/_maps/shuttles/roumain/srm_elder.dmm
@@ -2617,7 +2617,7 @@
/obj/item/clothing/under/suit/roumain,
/obj/item/clothing/suit/armor/roumain,
/obj/item/clothing/head/cowboy/sec/roumain,
-/obj/item/clothing/suit/armor/riot/chaplain/witchhunter,
+/obj/item/clothing/suit/armor/witchhunter,
/obj/item/flashlight/lantern,
/obj/structure/closet/secure_closet/hunter,
/obj/item/lighter,
diff --git a/check_regex.yaml b/check_regex.yaml
index e01c41995e8e3..d03e153919754 100644
--- a/check_regex.yaml
+++ b/check_regex.yaml
@@ -38,7 +38,7 @@ standards:
- exactly:
[
- 268,
+ 265,
"non-bitwise << uses",
'(?A selection has already been made. Self-Destructing...")
- return
-
-
/obj/item/storage/box/holy
- name = "Templar Kit"
-
-/obj/item/storage/box/holy/PopulateContents()
- new /obj/item/clothing/head/helmet/chaplain(src)
- new /obj/item/clothing/suit/armor/riot/chaplain(src)
-
-/obj/item/storage/box/holy/student
- name = "Profane Scholar Kit"
-
-/obj/item/storage/box/holy/student/PopulateContents()
- new /obj/item/clothing/suit/armor/riot/chaplain/studentuni(src)
- new /obj/item/clothing/head/helmet/chaplain/cage(src)
-
-/obj/item/clothing/suit/armor/riot/chaplain/studentuni
- name = "student robe"
- desc = "The uniform of a bygone institute of learning."
- icon_state = "chaplain_studentuni"
- item_state = "studentuni"
- body_parts_covered = ARMS|CHEST
- allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
-
-/obj/item/clothing/head/helmet/chaplain/cage
- name = "cage"
- desc = "A cage that restrains the will of the self, allowing one to see the profane world for what it is."
- flags_inv = HIDEHAIR //bald
- mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi'
- icon_state = "cage"
- item_state = "cage"
- worn_x_dimension = 64
- worn_y_dimension = 64
-
-/obj/item/storage/box/holy/sentinel
- name = "Stone Sentinel Kit"
-
-/obj/item/storage/box/holy/sentinel/PopulateContents()
- new /obj/item/clothing/suit/armor/riot/chaplain/ancient(src)
- new /obj/item/clothing/head/helmet/chaplain/ancient(src)
-
-/obj/item/clothing/head/helmet/chaplain/ancient
- name = "ancient helmet"
- desc = "None may pass!"
- icon_state = "knight_ancient"
- item_state = "knight_ancient"
-
-/obj/item/clothing/suit/armor/riot/chaplain/ancient
- name = "ancient armour"
- desc = "Defend the treasure..."
- icon_state = "chaplain_ancient"
- item_state = "knight_ancient"
-
-/obj/item/storage/box/holy/witchhunter
name = "Witchhunter Kit"
-/obj/item/storage/box/holy/witchhunter/PopulateContents()
- new /obj/item/clothing/suit/armor/riot/chaplain/witchhunter(src)
- new /obj/item/clothing/head/helmet/chaplain/witchunter_hat(src)
-
-/obj/item/clothing/suit/armor/riot/chaplain/witchhunter
- name = "witchunter garb"
- desc = "This worn outfit saw much use back in the day."
- icon_state = "chaplain_witchhunter"
- item_state = "witchhunter"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
-
-/obj/item/clothing/head/helmet/chaplain/witchunter_hat
- name = "witchunter hat"
- desc = "This hat saw much use back in the day."
- icon_state = "witchhunterhat"
- item_state = "witchhunterhat"
- flags_cover = HEADCOVERSEYES
- flags_inv = HIDEEYES|HIDEHAIR
-
-/obj/item/storage/box/holy/adept
- name = "Divine Adept Kit"
-
-/obj/item/storage/box/holy/adept/PopulateContents()
- new /obj/item/clothing/suit/armor/riot/chaplain/adept(src)
- new /obj/item/clothing/head/helmet/chaplain/adept(src)
-
-/obj/item/clothing/head/helmet/chaplain/adept
- name = "adept hood"
- desc = "Its only heretical when others do it."
- icon_state = "crusader"
- item_state = "crusader"
- flags_cover = HEADCOVERSEYES
- flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
+/obj/item/storage/box/holy/PopulateContents()
+ new /obj/item/clothing/head/witchunter(src)
+ new /obj/item/clothing/suit/armor/witchhunter(src)
-/obj/item/clothing/suit/armor/riot/chaplain/adept
- name = "adept robes"
- desc = "The ideal outfit for burning the unfaithful."
- icon_state = "chaplain_crusader"
- item_state = "crusader"
/obj/item/storage/box/holy/follower
name = "Followers of the Chaplain Kit"
@@ -203,62 +65,6 @@
var/reskinned = FALSE
var/chaplain_spawnable = TRUE
-/obj/item/nullrod/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, null, null, FALSE)
-
-/obj/item/nullrod/attack_self(mob/user)
- if(user.mind && (user.mind.holy_role) && !reskinned)
- reskin_holy_weapon(user)
-
-/**
- * reskin_holy_weapon: Shows a user a list of all available nullrod reskins and based on his choice replaces the nullrod with the reskinned version
- *
- * Arguments:
- * * M The mob choosing a nullrod reskin
- */
-/obj/item/nullrod/proc/reskin_holy_weapon(mob/M)
- if(GLOB.holy_weapon_type)
- return
- var/list/display_names = list()
- var/list/nullrod_icons = list()
- for(var/V in typesof(/obj/item/nullrod))
- var/obj/item/nullrod/rodtype = V
- if(initial(rodtype.chaplain_spawnable))
- display_names[initial(rodtype.name)] = rodtype
- nullrod_icons += list(initial(rodtype.name) = image(icon = initial(rodtype.icon), icon_state = initial(rodtype.icon_state)))
-
- nullrod_icons = sortList(nullrod_icons)
- var/choice = show_radial_menu(M, src , nullrod_icons, custom_check = CALLBACK(src, PROC_REF(check_menu), M), radius = 42, require_near = TRUE)
- if(!choice || !check_menu(M))
- return
-
- var/A = display_names[choice] // This needs to be on a separate var as list member access is not allowed for new
- var/obj/item/nullrod/holy_weapon = new A
- GLOB.holy_weapon_type = holy_weapon.type
-
- SSblackbox.record_feedback("tally", "chaplain_weapon", 1, "[choice]")
-
- if(holy_weapon)
- holy_weapon.reskinned = TRUE
- qdel(src)
- M.put_in_active_hand(holy_weapon)
-
-/**
- * check_menu: Checks if we are allowed to interact with a radial menu
- *
- * Arguments:
- * * user The mob interacting with a menu
- */
-/obj/item/nullrod/proc/check_menu(mob/user)
- if(!istype(user))
- return FALSE
- if(QDELETED(src) || reskinned)
- return FALSE
- if(user.incapacitated() || !user.is_holding(src))
- return FALSE
- return TRUE
-
/obj/item/nullrod/godhand
icon_state = "disintegrate"
item_state = "disintegrate"
@@ -648,13 +454,6 @@
hitsound = 'sound/weapons/bite.ogg'
var/used_blessing = FALSE
-/obj/item/nullrod/carp/attack_self(mob/living/user)
- if(used_blessing)
- else if(user.mind && (user.mind.holy_role))
- to_chat(user, "You are blessed by Carp-Sie. Wild space carp will no longer attack you.")
- user.faction |= "carp"
- used_blessing = TRUE
-
/obj/item/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking
name = "monk's staff"
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, it is now used to harass the clown."
diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm
index 45fee1d676600..67dba503642d3 100644
--- a/code/game/objects/items/storage/book.dm
+++ b/code/game/objects/items/storage/book.dm
@@ -1,3 +1,10 @@
+//need to refactor this.
+GLOBAL_LIST_INIT(biblenames, list("Bible", "Quran", "Scrapbook", "Burning Bible", "Clown Bible", "Banana Bible", "Creeper Bible", "White Bible", "Holy Light", "The God Delusion", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "Melted Bible", "Necronomicon", "Insulationism", "Guru Granth Sahib"))
+//If you get these two lists not matching in size, there will be runtimes and I will hurt you in ways you couldn't even begin to imagine
+// if your bible has no custom itemstate, use one of the existing ones
+GLOBAL_LIST_INIT(biblestates, list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon", "insuls", "gurugranthsahib"))
+GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon", "kingyellow", "gurugranthsahib"))
+
/obj/item/storage/book
name = "hollowed book"
desc = "I guess someone didn't like it."
@@ -17,18 +24,6 @@
/obj/item/storage/book/attack_self(mob/user)
to_chat(user, "The pages of [title] have been cut out!")
-GLOBAL_LIST_INIT(biblenames, list("Bible", "Quran", "Scrapbook", "Burning Bible", "Clown Bible", "Banana Bible", "Creeper Bible", "White Bible", "Holy Light", "The God Delusion", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "Melted Bible", "Necronomicon", "Insulationism", "Guru Granth Sahib"))
-//If you get these two lists not matching in size, there will be runtimes and I will hurt you in ways you couldn't even begin to imagine
-// if your bible has no custom itemstate, use one of the existing ones
-GLOBAL_LIST_INIT(biblestates, list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon", "insuls", "gurugranthsahib"))
-GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning", "honk1", "honk2", "creeper", "white", "holylight", "atheist", "tome", "kingyellow", "ithaqua", "scientology", "melted", "necronomicon", "kingyellow", "gurugranthsahib"))
-
-/mob/proc/bible_check() //The bible, if held, might protect against certain things
- var/obj/item/storage/book/bible/B = locate() in src
- if(is_holding(B))
- return B
- return 0
-
/obj/item/storage/book/bible
name = "bible"
desc = "Apply to head repeatedly."
@@ -41,205 +36,6 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning",
var/deity_name = "Christ"
force_string = "holy"
-/obj/item/storage/book/bible/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, FALSE, TRUE)
-
-/obj/item/storage/book/bible/attack_self(mob/living/carbon/human/H)
- if(!istype(H))
- return
- if(!H.can_read(src))
- return FALSE
- // If H is the Chaplain, we can set the icon_state of the bible (but only once!)
- if(!GLOB.bible_icon_state && H.mind.holy_role == HOLY_ROLE_HIGHPRIEST)
- var/dat = "
Pick Bible StylePick a bible style
"
- for(var/i in 1 to GLOB.biblestates.len)
- var/icon/bibleicon = icon('icons/obj/storage.dmi', GLOB.biblestates[i])
- var/nicename = GLOB.biblenames[i]
- H << browse_rsc(bibleicon, nicename)
- dat += {" | [nicename] |
"}
- dat += "
"
- H << browse(dat, "window=editicon;can_close=0;can_minimize=0;size=250x650")
-
-/obj/item/storage/book/bible/Topic(href, href_list)
- if(!usr.canUseTopic(src, BE_CLOSE))
- return
- if(href_list["seticon"] && !GLOB.bible_icon_state)
- var/iconi = text2num(href_list["seticon"])
- var/biblename = GLOB.biblenames[iconi]
- icon_state = GLOB.biblestates[iconi]
- item_state = GLOB.bibleitemstates[iconi]
-
- if(icon_state == "honk1" || icon_state == "honk2")
- var/mob/living/carbon/human/H = usr
- H.dna.add_mutation(CLOWNMUT)
- H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), ITEM_SLOT_MASK)
- if(icon_state == "insuls")
- var/mob/living/carbon/human/H =usr
- var/obj/item/clothing/gloves/color/fyellow/insuls = new
- insuls.name = "insuls"
- insuls.desc = "A mere copy of the true insuls."
- insuls.siemens_coefficient = 0.99999
- H.equip_to_slot(insuls, ITEM_SLOT_GLOVES)
- GLOB.bible_icon_state = icon_state
- GLOB.bible_item_state = item_state
-
- SSblackbox.record_feedback("text", "religion_book", 1, "[biblename]")
- usr << browse(null, "window=editicon")
-
-/obj/item/storage/book/bible/proc/bless(mob/living/L, mob/living/user)
- if(GLOB.religious_sect)
- return GLOB.religious_sect.sect_bless(L,user)
- if(!ishuman(L))
- return
- var/mob/living/carbon/human/H = L
- for(var/X in H.bodyparts)
- var/obj/item/bodypart/BP = X
- if(!IS_ORGANIC_LIMB(BP))
- to_chat(user, "[src.deity_name] refuses to heal this metallic taint!")
- return 0
-
- var/heal_amt = 10
- var/list/hurt_limbs = H.get_damaged_bodyparts(1, 1, null, BODYTYPE_ORGANIC)
-
- if(hurt_limbs.len)
- for(var/X in hurt_limbs)
- var/obj/item/bodypart/affecting = X
- if(affecting.heal_damage(heal_amt, heal_amt, null, BODYTYPE_ORGANIC))
- H.update_damage_overlays()
- H.visible_message("[user] heals [H] with the power of [deity_name]!")
- to_chat(H, "May the power of [deity_name] compel you to be healed!")
- playsound(src.loc, "punch", 25, TRUE, -1)
- SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "blessing", /datum/mood_event/blessing)
- return 1
-
-/obj/item/storage/book/bible/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE)
-
- if (!user.IsAdvancedToolUser())
- to_chat(user, "You don't have the dexterity to do this!")
- return
-
- if (HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
- to_chat(user, "[src] slips out of your hand and hits your head.")
- user.take_bodypart_damage(10)
- user.Unconscious(400)
- return
-
- var/chaplain = 0
- if(user.mind && (user.mind.holy_role))
- chaplain = 1
-
- if(!chaplain)
- to_chat(user, "The book sizzles in your hands.")
- user.take_bodypart_damage(0,10)
- return
-
- if (!heal_mode)
- return ..()
-
- var/smack = 1
-
- if (M.stat != DEAD)
- if(chaplain && user == M)
- to_chat(user, "You can't heal yourself!")
- return
-
- if(prob(60) && bless(M, user))
- smack = 0
- else if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(!istype(C.head, /obj/item/clothing/head/helmet))
- C.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5, 60)
- to_chat(C, "You feel dumber.")
-
- if(smack)
- M.visible_message("[user] beats [M] over the head with [src]!", \
- "[user] beats [M] over the head with [src]!")
- playsound(src.loc, "punch", 25, TRUE, -1)
- log_combat(user, M, "attacked", src)
-
- else
- M.visible_message("[user] smacks [M]'s lifeless corpse with [src].")
- playsound(src.loc, "punch", 25, TRUE, -1)
-
-/obj/item/storage/book/bible/afterattack(atom/A, mob/user, proximity)
- . = ..()
- if(!proximity)
- return
- if(isfloorturf(A))
- to_chat(user, "You hit the floor with the bible.")
- if(user.mind && (user.mind.holy_role))
- for(var/obj/effect/rune/R in orange(2,user))
- R.invisibility = 0
- if(user?.mind?.holy_role)
- if(A.reagents && A.reagents.has_reagent(/datum/reagent/water)) // blesses all the water in the holder
- to_chat(user, "You bless [A].")
- var/water2holy = A.reagents.get_reagent_amount(/datum/reagent/water)
- A.reagents.del_reagent(/datum/reagent/water)
- A.reagents.add_reagent(/datum/reagent/water/holywater,water2holy)
- if(A.reagents && A.reagents.has_reagent(/datum/reagent/fuel/unholywater)) // yeah yeah, copy pasted code - sue me
- to_chat(user, "You purify [A].")
- var/unholy2clean = A.reagents.get_reagent_amount(/datum/reagent/fuel/unholywater)
- A.reagents.del_reagent(/datum/reagent/fuel/unholywater)
- A.reagents.add_reagent(/datum/reagent/water/holywater,unholy2clean)
- if(istype(A, /obj/item/storage/book/bible) && !istype(A, /obj/item/storage/book/bible/syndicate))
- to_chat(user, "You purify [A], conforming it to your belief.")
- var/obj/item/storage/book/bible/B = A
- B.name = name
- B.icon_state = icon_state
- B.item_state = item_state
- if(istype(A, /obj/item/cult_bastard) && !iscultist(user))
- var/obj/item/cult_bastard/sword = A
- to_chat(user, "You begin to exorcise [sword].")
- playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,TRUE)
- if(do_after(user, 40, target = sword))
- playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE)
- for(var/obj/item/soulstone/SS in sword.contents)
- SS.usability = TRUE
- for(var/mob/living/simple_animal/shade/EX in SS)
- SSticker.mode.remove_cultist(EX.mind, 1, 0)
- EX.icon_state = "ghost1"
- EX.name = "Purified [EX.name]"
- SS.release_shades(user)
- qdel(SS)
- new /obj/item/nullrod/claymore(get_turf(sword))
- user.visible_message("[user] purifies [sword]!")
- qdel(sword)
- else if(istype(A, /obj/item/soulstone) && !iscultist(user))
- var/obj/item/soulstone/SS = A
- if(SS.purified)
- return
- to_chat(user, "You begin to exorcise [SS].")
- playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,TRUE)
- if(do_after(user, 40, target = SS))
- playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE)
- SS.usability = TRUE
- SS.purified = TRUE
- SS.icon_state = "purified_soulstone"
- for(var/mob/M in SS.contents)
- if(M.mind)
- SS.icon_state = "purified_soulstone2"
- if(iscultist(M))
- SSticker.mode.remove_cultist(M.mind, FALSE, FALSE)
- for(var/mob/living/simple_animal/shade/EX in SS)
- EX.icon_state = "ghost1"
- EX.name = "Purified [initial(EX.name)]"
- user.visible_message("[user] purifies [SS]!")
- else if(istype(A, /obj/item/nullrod/scythe/talking))
- var/obj/item/nullrod/scythe/talking/sword = A
- to_chat(user, "You begin to exorcise [sword]...")
- playsound(src,'sound/hallucinations/veryfar_noise.ogg',40,TRUE)
- if(do_after(user, 40, target = sword))
- playsound(src,'sound/effects/pray_chaplain.ogg',60,TRUE)
- for(var/mob/living/simple_animal/shade/S in sword.contents)
- to_chat(S, "You were destroyed by the exorcism!")
- qdel(S)
- sword.possessed = FALSE //allows the chaplain (or someone else) to reroll a new spirit for their sword
- sword.name = initial(sword.name)
- REMOVE_TRAIT(sword, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) //in case the "sword" is a possessed dummy
- user.visible_message("[user] exorcises [sword]!", \
- "You successfully exorcise [sword]!")
-
/obj/item/storage/book/bible/koran
name = "Koran"
icon_state = "koran"
@@ -253,34 +49,6 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning",
new /obj/item/reagent_containers/food/drinks/bottle/whiskey(src)
/obj/item/storage/book/bible/syndicate
+ name = "Syndicate Tome"
icon_state ="ebook"
deity_name = "The Syndicate"
- throw_speed = 2
- throwforce = 18
- throw_range = 7
- force = 18
- hitsound = 'sound/weapons/sear.ogg'
- damtype = BURN
- name = "Syndicate Tome"
- attack_verb = list("attacked", "burned", "blessed", "damned", "scorched")
- var/uses = 1
-
-/obj/item/storage/book/bible/syndicate/attack_self(mob/living/carbon/human/H)
- if (uses)
- H.mind.holy_role = HOLY_ROLE_PRIEST
- uses -= 1
- to_chat(H, "You try to open the book AND IT BITES YOU!")
- playsound(src.loc, 'sound/effects/snap.ogg', 50, TRUE)
- H.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
- to_chat(H, "Your name appears on the inside cover, in blood.")
- var/ownername = H.real_name
- desc += "The name [ownername] is written in blood inside the cover."
-
-/obj/item/storage/book/bible/syndicate/attack(mob/living/M, mob/living/carbon/human/user, heal_mode = TRUE)
- if (user.a_intent == INTENT_HELP)
- return ..()
- else
- return ..(M,user,heal_mode = FALSE)
-
-/obj/item/storage/book/bible/syndicate/add_blood_DNA(list/blood_dna)
- return FALSE
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 0e65a5aeb7604..dac919bb428c4 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -98,7 +98,7 @@
icon_door = "black"
/obj/structure/closet/wardrobe/chaplain_black/PopulateContents()
- new /obj/item/choice_beacon/holy(src)
+ new /obj/item/storage/box/holy(src)
new /obj/item/clothing/accessory/pocketprotector/cosmetology(src)
new /obj/item/clothing/under/rank/civilian/chaplain(src)
new /obj/item/clothing/shoes/sneakers/black(src)
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 7355880e6da10..5058dc73f0810 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -61,10 +61,6 @@ Runes can either be invoked by one's self or with many different cultists. Each
if(do_after(user, 15, target = src))
to_chat(user, "You carefully erase the [lowertext(cultist_name)] rune.")
qdel(src)
- else if(istype(I, /obj/item/nullrod))
- user.say("BEGONE FOUL MAGIKS!!", forced = "nullrod")
- to_chat(user, "You disrupt the magic of [src] with [I].")
- qdel(src)
/obj/effect/rune/attack_hand(mob/living/user)
. = ..()
@@ -502,9 +498,6 @@ structure_check() searches for nearby cultist structures required for the invoca
if(do_after(user, 50, target = src)) //Prevents accidental erasures.
log_game("Summon Narsie rune erased by [key_name(user)] with [I.name]")
message_admins("[ADMIN_LOOKUPFLW(user)] erased a Narsie rune with [I.name]")
- else if(istype(I, /obj/item/nullrod)) //Begone foul magiks. You cannot hinder me.
- log_game("Summon Narsie rune erased by [key_name(user)] using a null rod")
- message_admins("[ADMIN_LOOKUPFLW(user)] erased a Narsie rune with a null rod")
else
..()
diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm
index 76da8304df094..084176f4b8c41 100644
--- a/code/modules/antagonists/revenant/revenant.dm
+++ b/code/modules/antagonists/revenant/revenant.dm
@@ -190,17 +190,6 @@
return BULLET_ACT_FORCE_PIERCE
return ..()
-//damage, gibbing, and dying
-/mob/living/simple_animal/revenant/attackby(obj/item/W, mob/living/user, params)
- . = ..()
- if(istype(W, /obj/item/nullrod))
- visible_message("[src] violently flinches!", \
- "As \the [W] passes through you, you feel your essence draining away!")
- adjustBruteLoss(25) //hella effective
- inhibited = TRUE
- update_action_buttons_icon()
- addtimer(CALLBACK(src, PROC_REF(reset_inhibit)), 30)
-
/mob/living/simple_animal/revenant/proc/reset_inhibit()
inhibited = FALSE
update_action_buttons_icon()
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
index a95ef0d1b5790..a20b905b590d4 100644
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ b/code/modules/antagonists/wizard/equipment/artefact.dm
@@ -58,14 +58,6 @@
if(spawn_amt_left <= 0)
qdel(src)
-/obj/effect/rend/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/nullrod))
- user.visible_message("[user] seals \the [src] with \the [I].")
- qdel(src)
- return
- else
- return ..()
-
/obj/effect/rend/singularity_pull()
return
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 994cc6042ef2b..eb76c13fb5416 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -272,3 +272,12 @@
#undef DRILL_SHOUTING
#undef DRILL_YELLING
#undef DRILL_CANADIAN
+
+/obj/item/clothing/head/witchunter
+ name = "witchunter hat"
+ desc = "This hat saw much use back in the day."
+ icon_state = "witchhunterhat"
+ item_state = "witchhunterhat"
+ flags_cover = HEADCOVERSEYES
+ flags_inv = HIDEEYES|HIDEHAIR
+ armor = list("melee" = 30, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index b9e828ab39749..c04b61563f53c 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -315,13 +315,6 @@
var/datum/brain_trauma/mild/phobia/conspiracies/paranoia
var/warped = FALSE
-/obj/item/clothing/head/foilhat/Initialize(mapload)
- . = ..()
- if(!warped)
- AddComponent(/datum/component/anti_magic, FALSE, FALSE, TRUE, ITEM_SLOT_HEAD, 6, TRUE, null, CALLBACK(src, PROC_REF(warp_up)))
- else
- warp_up()
-
/obj/item/clothing/head/foilhat/equipped(mob/living/carbon/human/user, slot)
. = ..()
if(slot != ITEM_SLOT_HEAD || warped)
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 7eaccd402e357..557a69c5acb2a 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -585,11 +585,6 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/wizard
-/obj/item/clothing/suit/space/hardsuit/wizard/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, TRUE, FALSE, FALSE, ITEM_SLOT_OCLOTHING, INFINITY, FALSE)
-
-
//Medical hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/medical
name = "medical hardsuit helmet"
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index ae6ebb525a641..67dc7ce529b3f 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -332,10 +332,6 @@ Contains:
actions_types = list()
resistance_flags = FIRE_PROOF
-/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, FALSE, FALSE, TRUE, ITEM_SLOT_OCLOTHING)
-
/obj/item/clothing/suit/space/hardsuit/ert/paranormal
name = "paranormal response team hardsuit"
desc = "Powerful wards are built into this hardsuit, protecting the user from all manner of paranormal threats."
@@ -345,10 +341,6 @@ Contains:
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF
-/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE, ITEM_SLOT_OCLOTHING)
-
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor
name = "inquisitor's hardsuit"
icon_state = "hardsuit-inq"
@@ -373,11 +365,6 @@ Contains:
resistance_flags = FIRE_PROOF
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/spear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife, /obj/item/kinetic_crusher, /obj/item/resonator, /obj/item/melee/transforming/cleaving_saw)
-
-/obj/item/clothing/suit/space/hardsuit/berserker/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE, ITEM_SLOT_OCLOTHING)
-
/obj/item/clothing/suit/space/hardsuit/berserker/RemoveHelmet()
var/obj/item/clothing/head/helmet/space/hardsuit/berserker/helm = helmet
if(helm?.berserk_active)
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 79aaf15c4d349..56018c288b6ad 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -286,3 +286,10 @@
body_parts_covered = HEAD
flags_inv = HIDEHAIR|HIDEEARS|HIDEFACE|HIDEFACIALHAIR
+/obj/item/clothing/suit/armor/witchhunter
+ name = "witchunter garb"
+ desc = "This worn outfit saw much use back in the day."
+ icon_state = "chaplain_witchhunter"
+ item_state = "witchhunter"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ allowed = list(/obj/item/storage/book/bible, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
diff --git a/code/modules/holiday/halloween.dm b/code/modules/holiday/halloween.dm
index e95bdb2063a8c..d5b0c0ff66381 100644
--- a/code/modules/holiday/halloween.dm
+++ b/code/modules/holiday/halloween.dm
@@ -243,17 +243,6 @@
if(prob(5))
playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, TRUE)
-/mob/living/simple_animal/hostile/clown_insane/attackby(obj/item/O, mob/user)
- if(istype(O, /obj/item/nullrod))
- if(prob(5))
- visible_message("[src] finally found the peace it deserves. You hear honks echoing off into the distance.")
- playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, TRUE)
- qdel(src)
- else
- visible_message("[src] seems to be resisting the effect!")
- return
- return ..()
-
/mob/living/simple_animal/hostile/clown_insane/handle_temperature_damage()
return
diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm
index 1378fb0253fc8..1c6b19313ee4c 100644
--- a/code/modules/hydroponics/grown/melon.dm
+++ b/code/modules/hydroponics/grown/melon.dm
@@ -52,19 +52,3 @@
dried_type = null
wine_power = 70 //Water to wine, baby.
wine_flavor = "divinity"
-
-/obj/item/reagent_containers/food/snacks/grown/holymelon/Initialize()
- . = ..()
- var/uses = 1
- if(seed)
- uses = round(seed.potency / 20)
- AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, ITEM_SLOT_HANDS, uses, TRUE, CALLBACK(src, PROC_REF(block_magic)), CALLBACK(src, PROC_REF(expire))) //deliver us from evil o melon god
-
-/obj/item/reagent_containers/food/snacks/grown/holymelon/proc/block_magic(mob/user, major)
- if(major)
- to_chat(user, "[src] hums slightly, and seems to decay a bit.")
-
-/obj/item/reagent_containers/food/snacks/grown/holymelon/proc/expire(mob/user)
- to_chat(user, "[src] rapidly turns into ash!")
- qdel(src)
- new /obj/effect/decal/cleanable/ash(drop_location())
diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm
index 8706974767944..ab4ceb6968c04 100644
--- a/code/modules/jobs/job_types/chaplain.dm
+++ b/code/modules/jobs/job_types/chaplain.dm
@@ -16,8 +16,6 @@
var/obj/item/storage/book/bible/booze/B = new
if(GLOB.religion)
- if(H.mind)
- H.mind.holy_role = HOLY_ROLE_PRIEST
B.deity_name = GLOB.deity
B.name = GLOB.bible_name
B.icon_state = GLOB.bible_icon_state
@@ -30,8 +28,6 @@
if(GLOB.religious_sect)
GLOB.religious_sect.on_conversion(H)
return
- if(H.mind)
- H.mind.holy_role = HOLY_ROLE_HIGHPRIEST
var/new_religion = DEFAULT_RELIGION
if(M.client && M.client.prefs.custom_names["religion"])
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 7b80559d26919..268413ef203c4 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -501,10 +501,6 @@
if(input)
src.warcry = input
-/obj/item/immortality_talisman/Initialize()
- . = ..()
- AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE)
-
/datum/action/item_action/hands_free/immortality
name = "Immortality"
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 4430fc1da300f..f92e8d762f2df 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -314,10 +314,6 @@
msg += ""
- if(HAS_TRAIT(user, TRAIT_SPIRITUAL) && mind?.holy_role)
- msg += "[t_He] [t_has] a holy aura about [t_him].\n"
- SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "religious_comfort", /datum/mood_event/religiously_comforted)
-
switch(stat)
if(UNCONSCIOUS, HARD_CRIT)
msg += "[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.\n"
diff --git a/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm
index 675c6fc993426..b251dda91e48e 100644
--- a/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm
+++ b/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm
@@ -47,8 +47,8 @@
melee_damage_upper = 30
deathmessage = "collapses into a pile of bones, its gear clanging as it hits the ground!"
loot = list(/obj/effect/decal/remains/human,
- /obj/item/clothing/suit/armor/riot/chaplain,
- /obj/item/clothing/head/helmet/chaplain,
+ /obj/item/clothing/suit/armor/witchhunter,
+ /obj/item/clothing/head/witchunter,
/obj/item/claymore/weak{name = "holy sword"})
/mob/living/simple_animal/hostile/human/skeleton/ice
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 123afbcf387c9..5902665e85c9c 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -2162,13 +2162,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Trappist Beer"
glass_desc = "boozy Catholicism in a glass."
-/datum/reagent/consumable/ethanol/trappist/on_mob_life(mob/living/carbon/M)
- if(M.mind.holy_role)
- M.adjustFireLoss(-2.5, 0)
- M.jitteriness = max(0, M.jitteriness-1)
- M.stuttering = max(0, M.stuttering-1)
- return ..()
-
/datum/reagent/consumable/ethanol/blazaam
name = "Blazaam"
description = "A strange drink that few people seem to remember existing. Doubles as a Berenstain remover."
diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm
index 92327a2ed6890..3ddce78ae6e53 100644
--- a/code/modules/religion/religion_sects.dm
+++ b/code/modules/religion/religion_sects.dm
@@ -135,8 +135,6 @@
if(iscyborg(L))
var/mob/living/silicon/robot/R = L
var/charge_amt = 50
- if(L.mind?.holy_role == HOLY_ROLE_HIGHPRIEST)
- charge_amt *= 2
R.cell?.charge += charge_amt
R.visible_message("[user] charges [R] with the power of [GLOB.deity]!")
to_chat(R, "You are charged by the power of [GLOB.deity]!")
diff --git a/code/modules/religion/religion_structures.dm b/code/modules/religion/religion_structures.dm
index f9c449c56e9ba..e9d76ca8bf5a8 100644
--- a/code/modules/religion/religion_structures.dm
+++ b/code/modules/religion/religion_structures.dm
@@ -18,10 +18,6 @@
var/can_i_see = FALSE
if(isobserver(user))
can_i_see = TRUE
- else if(isliving(user))
- var/mob/living/L = user
- if(L.mind?.holy_role)
- can_i_see = TRUE
if(!can_i_see || !sect_to_altar)
return
@@ -57,62 +53,6 @@
pushed_mob.forceMove(loc)
return ..()
-/obj/structure/altar_of_gods/attackby(obj/item/C, mob/user, params)
- //If we can sac, we do nothing but the sacrifice instead of typical attackby behavior (IE damage the structure)
- if(sect_to_altar?.can_sacrifice(C,user))
- sect_to_altar.on_sacrifice(C,user)
- return TRUE
- . = ..()
- //everything below is assumed you're bibling it up
- if(!istype(C, /obj/item/storage/book/bible))
- return
- if(sect_to_altar)
- if(!sect_to_altar.rites_list)
- to_chat(user, "Your sect doesn't have any rites to perform!")
- return
- var/rite_select = input(user,"Select a rite to perform!","Select a rite",null) in sect_to_altar.rites_list
- if(!rite_select || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- to_chat(user,"You cannot perform the rite at this time.")
- return
- var/selection2type = sect_to_altar.rites_list[rite_select]
- performing_rite = new selection2type(src)
- if(!performing_rite.perform_rite(user, src))
- QDEL_NULL(performing_rite)
- else
- performing_rite.invoke_effect(user, src)
- sect_to_altar.adjust_favor(-performing_rite.favor_cost)
- QDEL_NULL(performing_rite)
- return
-
- if(user.mind.holy_role != HOLY_ROLE_HIGHPRIEST)
- to_chat(user, "You are not the high priest, and therefore cannot select a religious sect.")
- return
-
- var/list/available_options = generate_available_sects(user)
- if(!available_options)
- return
-
- var/sect_select = input(user,"Select a sect (You CANNOT revert this decision!)","Select a Sect",null) in available_options
- if(!sect_select || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- to_chat(user,"You cannot select a sect at this time.")
- return
- var/type_selected = available_options[sect_select]
- GLOB.religious_sect = new type_selected()
- for(var/i in GLOB.player_list)
- if(!isliving(i))
- continue
- var/mob/living/am_i_holy_living = i
- if(!am_i_holy_living.mind?.holy_role)
- continue
- GLOB.religious_sect.on_conversion(am_i_holy_living)
- sect_to_altar = GLOB.religious_sect
- if(sect_to_altar.altar_icon)
- icon = sect_to_altar.altar_icon
- if(sect_to_altar.altar_icon_state)
- icon_state = sect_to_altar.altar_icon_state
-
-
-
/obj/structure/altar_of_gods/proc/generate_available_sects(mob/user) //eventually want to add sects you get from unlocking certain achievements
. = list()
for(var/i in subtypesof(/datum/religion_sect))
diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm
index bbc53154aac60..da3fdb1340101 100644
--- a/code/modules/vending/wardrobes.dm
+++ b/code/modules/vending/wardrobes.dm
@@ -375,7 +375,7 @@
icon_state = "chapdrobe"
product_ads = "Are you being bothered by cultists or pesky revenants? Then come and dress like the holy man!;Clothes for men of the cloth!"
vend_reply = "Thank you for using the ChapDrobe!"
- products = list(/obj/item/choice_beacon/holy = 1,
+ products = list(/obj/item/storage/box/holy = 1,
/obj/item/storage/backpack/cultpack = 1,
/obj/item/clothing/head/beret/service = 1, //WS edit - berets
/obj/item/clothing/accessory/pocketprotector/cosmetology = 1,
diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi
index 721de12b60b63..c2a73da609b94 100644
Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ
diff --git a/icons/mob/clothing/head/armor.dmi b/icons/mob/clothing/head/armor.dmi
index 4cec91ad01103..38adc74f33179 100644
Binary files a/icons/mob/clothing/head/armor.dmi and b/icons/mob/clothing/head/armor.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index fb23d4bc2afe6..cf7f5ff09bd0b 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/head/armor.dmi b/icons/obj/clothing/head/armor.dmi
index c6792be933fcb..6757e591c853b 100644
Binary files a/icons/obj/clothing/head/armor.dmi and b/icons/obj/clothing/head/armor.dmi differ