/obj/item/nullrod
name = "null rod"
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of dark magic."
icon = 'icons/obj/weapons/magical_weapons.dmi'
icon_state = "nullrod"
worn_icon_state = "tele_baton"
inhand_icon_state = "tele_baton"
lefthand_file = 'icons/mob/inhands/weapons_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons_righthand.dmi'
force = 15
throw_speed = 3
throw_range = 4
throwforce = 10
w_class = WEIGHT_CLASS_TINY
new_attack_chain = TRUE
/// Null rod variant names, used for the radial menu
var/static/list/variant_names = list()
/// Null rod variant icons, used for the radial menu
var/static/list/variant_icons = list()
/// Has the null rod been reskinned yet
var/reskinned = FALSE
/// Is this variant selectable through the reskin menu (Set to FALSE for fluff items)
var/reskin_selectable = TRUE
/// Does this null rod have fluff variants available
var/list/fluff_transformations = list()
/// Extra 'Holy' burn damage for ERT null rods
var/sanctify_force = 0
/// The antimagic type the nullrod has.
var/antimagic_type = MAGIC_RESISTANCE_HOLY
var/obj/item/storage/belt/sheath/holy/bound_sheath = null
/obj/item/nullrod/Initialize(mapload)
. = ..()
AddComponent(/datum/component/anti_magic, antimagic_type)
AddComponent(/datum/component/effect_remover, \
success_feedback = "You disrupt the magic of %THEEFFECT with %THEWEAPON.", \
success_forcesay = "BEGONE FOUL MAGIKS!!", \
effects_we_clear = list(/obj/effect/heretic_rune, /obj/effect/cosmic_rune), \
time_to_remove = 5 SECONDS, \
)
if(!length(variant_names))
for(var/I in typesof(/obj/item/nullrod))
var/obj/item/nullrod/rod = I
if(initial(rod.reskin_selectable))
variant_names[initial(rod.name)] = rod
variant_icons += list(initial(rod.name) = image(icon = initial(rod.icon), icon_state = initial(rod.icon_state)))
/obj/item/nullrod/suicide_act(mob/user)
user.visible_message(SPAN_SUICIDE("[user] is killing [user.p_themselves()] with \the [src.name]! It looks like [user.p_theyre()] trying to get closer to god!"))
return BRUTELOSS|FIRELOSS
/obj/item/nullrod/attack(mob/living/target, mob/living/user, params)
. = ..()
// ERT null rods are sanctified and do extra damage.
if(!sanctify_force)
return
if(isliving(target))
var/mob/living/L = target
L.adjustFireLoss(sanctify_force)
return
/obj/item/nullrod/pickup(mob/living/user)
. = ..()
if(sanctify_force)
if(!user.mind || !HAS_MIND_TRAIT(user, TRAIT_HOLY))
user.adjustBruteLoss(force)
user.adjustFireLoss(sanctify_force)
user.Weaken(10 SECONDS)
user.drop_item_to_ground(src, force = TRUE)
user.visible_message(SPAN_WARNING("[src] slips out of the grip of [user] as they try to pick it up, bouncing upwards and smacking [user.p_them()] in the face!"), \
SPAN_WARNING("[src] slips out of your grip as you pick it up, bouncing upwards and smacking you in the face!"))
playsound(get_turf(user), 'sound/effects/hit_punch.ogg', 50, TRUE, -1)
throw_at(get_edge_target_turf(user, pick(GLOB.alldirs)), rand(1, 3), 5)
/obj/item/nullrod/activate_self(mob/user)
if(..())
return ITEM_INTERACT_COMPLETE
if(HAS_MIND_TRAIT(user, TRAIT_HOLY) && !reskinned)
reskin_holy_weapon(user)
return ITEM_INTERACT_COMPLETE
/obj/item/nullrod/examine(mob/living/user)
. = ..()
if(sanctify_force)
. += SPAN_NOTICE("It bears the inscription: 'Sanctified weapon of the inquisitors. Only the worthy may wield. Nobody shall expect us.'")
/obj/item/nullrod/proc/reskin_holy_weapon(mob/user)
if(!ishuman(user))
return
for(var/I in fluff_transformations) // If it's a fluffy null rod
var/obj/item/nullrod/rod = I
variant_names[initial(rod.name)] = rod
variant_icons += list(initial(rod.name) = image(icon = initial(rod.icon), icon_state = initial(rod.icon_state)))
var/mob/living/carbon/human/H = user
var/choice = show_radial_menu(H, src, variant_icons, null, 40, CALLBACK(src, PROC_REF(radial_check), H), TRUE)
if(!choice || !radial_check(H))
return
var/picked_type = variant_names[choice]
var/obj/item/storage/belt/sheath/holy/new_sheath = null
var/obj/item/nullrod/new_rod = new picked_type(get_turf(user))
if(istype(new_rod, /obj/item/nullrod/claymore/scimitar))
new_sheath = new /obj/item/storage/belt/sheath/holy/scimitar(get_turf(user))
if(istype(new_rod, /obj/item/nullrod/kirpan))
new_sheath = new /obj/item/storage/belt/sheath/holy/kirpan(get_turf(user))
SSblackbox.record_feedback("text", "chaplain_weapon", 1, "[picked_type]", 1)
if(new_rod)
new_rod.reskinned = TRUE
if(bound_sheath)
qdel(bound_sheath)
qdel(src)
if(new_sheath)
new_rod.bound_sheath = new_sheath
new_rod.forceMove(new_sheath)
new_sheath.update_appearance(UPDATE_ICON_STATE)
user.put_in_active_hand(new_sheath)
else
var/mob/living/carbon/human/human_user = user
if(!human_user.equip_to_slot_if_possible(new_rod, (human_user.hand ? ITEM_SLOT_LEFT_HAND : ITEM_SLOT_RIGHT_HAND), disable_warning = TRUE))
if(!human_user.equip_to_slot_if_possible(new_rod, (human_user.hand ? ITEM_SLOT_RIGHT_HAND : ITEM_SLOT_LEFT_HAND), disable_warning = TRUE))
human_user.drop_item_to_ground(new_rod)
if(sanctify_force)
new_rod.sanctify_force = sanctify_force
new_rod.name = "sanctified " + new_rod.name
if(new_sheath)
new_sheath.sanctify_force = sanctify_force
new_sheath.name = "sanctified " + new_sheath.name
/obj/item/nullrod/proc/radial_check(mob/living/carbon/human/user)
if(!src || !user.is_in_hands(src) || user.incapacitated() || reskinned)
return FALSE
return TRUE
/// fluff subtype to be used for all donator nullrods
/obj/item/nullrod/fluff
reskin_selectable = FALSE
/// ERT subtype, applies sanctified property to any derived rod
/obj/item/nullrod/ert
name = "inquisitor null rod"
reskin_selectable = FALSE
sanctify_force = 10
/obj/item/nullrod/godhand
name = "god hand"
desc = "This hand of yours glows with an awesome power!"
icon_state = "disintegrate"
inhand_icon_state = "disintegrate"
lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
flags = ABSTRACT | NODROP | DROPDEL
w_class = WEIGHT_CLASS_HUGE
hitsound = 'sound/weapons/sear.ogg'
damtype = BURN
attack_verb = list("punched", "cross countered", "pummeled")
/obj/item/nullrod/godhand/customised_abstract_text(mob/living/carbon/owner)
return SPAN_WARNING("[owner.p_their(TRUE)] [owner.l_hand == src ? "left hand" : "right hand"] is burning in holy fire.")
/obj/item/nullrod/staff
name = "red holy staff"
desc = "It has a mysterious, protective aura."
icon_state = "godstaff-red"
worn_icon_state = null
inhand_icon_state = null
lefthand_file = 'icons/mob/inhands/staves_lefthand.dmi'
righthand_file = 'icons/mob/inhands/staves_righthand.dmi'
w_class = WEIGHT_CLASS_HUGE
force = 5
slot_flags = ITEM_SLOT_BACK
/obj/item/nullrod/staff/Initialize(mapload)
. = ..()
AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = ALL_ATTACK_TYPES)
/obj/item/nullrod/staff/blue
name = "blue holy staff"
icon_state = "godstaff-blue"
/obj/item/nullrod/kirpan
name = "kirpan"
desc = "Just one of the five K's for a saint-soldier. Used to defend those in peril."
icon = 'icons/obj/weapons/melee.dmi'
icon_state = "kirpan"
worn_icon_state = null
inhand_icon_state = null
w_class = WEIGHT_CLASS_NORMAL
sharp = TRUE
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/nullrod/claymore
name = "holy claymore"
desc = "A weapon fit for a crusade!"
icon = 'icons/obj/weapons/melee.dmi'
icon_state = "claymore"
worn_icon_state = null
inhand_icon_state = null
w_class = WEIGHT_CLASS_BULKY
slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT
sharp = TRUE
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/nullrod/claymore/Initialize(mapload)
. = ..()
AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.7, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (7 / 3) SECONDS) // 2.3333 seconds of cooldown for 30% uptime
/obj/item/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(attack_type == PROJECTILE_ATTACK)
final_block_chance = 0 //Don't bring a sword to a gunfight
return ..()
/obj/item/nullrod/claymore/darkblade
name = "dark blade"
desc = "Spread the glory of the dark gods!"
icon = 'icons/obj/weapons/magical_weapons.dmi'
icon_state = "darkblade"
slot_flags = ITEM_SLOT_BELT
hitsound = 'sound/hallucinations/growl1.ogg'
/obj/item/nullrod/claymore/chainsaw_sword
name = "sacred chainsaw sword"
desc = "Suffer not a heretic to live."
icon = 'icons/obj/weapons/magical_weapons.dmi'
icon_state = "chainswordon"
slot_flags = ITEM_SLOT_BELT
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsaw.ogg'
/obj/item/nullrod/claymore/glowing
name = "force blade"
desc = "The blade glows with the power of faith. Or possibly a battery."
icon = 'icons/obj/weapons/magical_weapons.dmi'
icon_state = "swordon"
slot_flags = ITEM_SLOT_BELT
/obj/item/nullrod/claymore/katana
name = "hanzo steel"
desc = "Capable of cutting clean through a holy claymore."
icon_state = "katana"
/obj/item/nullrod/claymore/multiverse
name = "extradimensional blade"
desc = "Once the harbringer of a interdimensional war, now a dormant souvenir. Still sharp though."
icon = 'icons/obj/weapons/magical_weapons.dmi'
icon_state = "multiverse"
slot_flags = ITEM_SLOT_BELT
/obj/item/nullrod/claymore/saber
name = "light energy blade"
hitsound = 'sound/weapons/blade1.ogg'
icon = 'icons/obj/weapons/energy_melee.dmi'
icon_state = "swordblue"
desc = "If you strike me down, I shall become more robust than you can possibly imagine."
slot_flags = ITEM_SLOT_BELT
/obj/item/nullrod/claymore/saber/red
name = "dark energy blade"
icon_state = "swordred"
desc = "Woefully ineffective when used on steep terrain."
/obj/item/nullrod/claymore/saber/pirate
name = "nautical energy cutlass"
icon_state = "cutlass1"
desc = "Convincing HR that your religion involved piracy was no mean feat."
/obj/item/nullrod/claymore/scimitar
name = "scimitar"
desc = "Power consists not in being able to strike another, but in being able to control oneself when anger arises."
icon_state = "chap_saber"
slot_flags = ITEM_SLOT_BELT
/obj/item/nullrod/claymore/goad
name = "Ankusha"
desc = "A goad for the training and handling of elephants, or spearing demons about the size of elephants."
icon_state = "goad"
slot_flags = null
attack_verb = list("jabbed","stabbed","ripped", "goaded")
/obj/item/nullrod/sord
name = "\improper UNREAL SORD"
desc = "This thing is so unspeakably HOLY you are having a hard time even holding it."
icon_state = "sord"
slot_flags = ITEM_SLOT_BELT
force = 4.13
throwforce = 1
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/nullrod/scythe
name = "reaper scythe"
desc = "Ask not for whom the bell tolls..."
icon = 'icons/obj/weapons/melee.dmi'
icon_state = "scythe"
worn_icon_state = null
inhand_icon_state = null
w_class = WEIGHT_CLASS_BULKY
armor_penetration_flat = 30
slot_flags = ITEM_SLOT_BACK
sharp = TRUE
attack_verb = list("chopped", "sliced", "cut", "reaped")
hitsound = 'sound/weapons/rapierhit.ogg'
/obj/item/nullrod/scythe/vibro
name = "high frequency blade"
desc = "Bad references are the DNA of the soul."
icon = 'icons/obj/weapons/magical_weapons.dmi'
icon_state = "hfrequency1"
attack_verb = list("chopped", "sliced", "cut", "zandatsu'd")
/obj/item/nullrod/scythe/spellblade
name = "dormant spellblade"
desc = "The blade grants the wielder nearly limitless power...if they can figure out how to turn it on, that is."
icon = 'icons/obj/guns/magic.dmi'
icon_state = "spellblade"
/obj/item/nullrod/scythe/talking
name = "possessed blade"
desc = "When the station falls into chaos, it's nice to have a friend by your side."
icon = 'icons/obj/weapons/magical_weapons.dmi'
icon_state = "talking_sword"
attack_verb = list("chopped", "sliced", "cut")
force = 12
can_be_hit = TRUE // be a shit and you can get your ass beat
max_integrity = 100
obj_integrity = 100
var/possessed = FALSE
/obj/item/nullrod/scythe/talking/activate_self(mob/user)
if(..())
return ITEM_INTERACT_COMPLETE
if(possessed)
return ITEM_INTERACT_COMPLETE
to_chat(user, "You attempt to wake the spirit of the blade...")
possessed = TRUE
var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, FALSE, 10 SECONDS, source = src, role_cleanname = "possessed blade")
var/mob/dead/observer/theghost = null
if(QDELETED(src))
return ITEM_INTERACT_COMPLETE
if(length(candidates))
theghost = pick(candidates)
var/mob/living/simple_animal/shade/sword/S = new(src)
S.real_name = name
S.name = name
S.ckey = theghost.ckey
dust_if_respawnable(theghost)
var/input = tgui_input_text(S, "What are you named?", "Change Name", max_length = MAX_NAME_LEN)
if(src && input)
name = input
S.real_name = input
S.name = input
else
to_chat(user, "The blade is dormant. Maybe you can try again later.")
possessed = FALSE
return ITEM_INTERACT_COMPLETE
/obj/item/nullrod/scythe/talking/Destroy()
for(var/mob/living/simple_animal/shade/sword/S in contents)
to_chat(S, "You were destroyed!")
S.ghostize()
qdel(S)
return ..()
/obj/item/nullrod/scythe/talking/item_interaction(mob/living/user, obj/item/used, list/modifiers)
if(!istype(used, /obj/item/soulstone) || !possessed)
return ..()
if(obj_integrity >= max_integrity)
to_chat(user, SPAN_NOTICE("You have no reason to replace a perfectly good soulstone with a new one."))
return ITEM_INTERACT_COMPLETE
to_chat(user, SPAN_NOTICE("You load a new soulstone into the possessed blade."))
playsound(user, 'sound/weapons/gun_interactions/shotgunpump.ogg', 60, TRUE)
obj_integrity = max_integrity
for(var/mob/living/simple_animal/shade/sword/sword_shade in contents)
sword_shade.health = sword_shade.maxHealth
qdel(used)
return ITEM_INTERACT_COMPLETE
/obj/item/nullrod/scythe/talking/take_damage(damage_amount)
if(possessed)
for(var/mob/living/simple_animal/shade/sword/sword_shade in contents)
sword_shade.take_overall_damage(damage_amount)
return ..()
/obj/item/nullrod/scythe/talking/proc/click_actions(atom/attacking_atom, mob/living/simple_animal/attacking_shade)
if(world.time <= attacking_shade.next_move) // yea we gotta check
return
if(!ismovable(attacking_atom))
return
attacking_shade.changeNext_move(CLICK_CD_MELEE)
if(ishuman(loc))
var/mob/living/carbon/human/our_location = loc
if(istype(our_location))
if(!our_location.is_holding(src))
return
if(our_location.Adjacent(attacking_atom)) // with a buddy we deal 12 damage :D
our_location.do_attack_animation(attacking_atom, used_item = src)
melee_attack_chain(attacking_shade, attacking_atom)
return
if(Adjacent(attacking_atom)) // without a buddy we only deal 7 damage :c
force -= 5
var/mob/living/simple_animal/hostile/hostile_target = attacking_atom
if(istype(hostile_target) && prob(40)) // Cheese reduction, non sentient animals have a hard time attacking things in objects
attack_animal(hostile_target)
do_attack_animation(attacking_atom, used_item = src)
melee_attack_chain(attacking_shade, attacking_atom)
force += 5
/datum/hud/sword/New(mob/user)
..()
mymob.healths = new /atom/movable/screen/healths()
infodisplay += mymob.healths
/mob/living/simple_animal/shade/sword/ClickOn(atom/A, params)
if(..() && istype(loc, /obj/item/nullrod/scythe/talking))
var/obj/item/nullrod/scythe/talking/host_sword = loc
return host_sword.click_actions(A, src)
/obj/item/nullrod/hammer
name = "relic war hammer"
desc = "This war hammer cost the chaplain fourty thousand credits."
icon_state = "hammeron"
worn_icon_state = null
inhand_icon_state = null
slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_HUGE
attack_verb = list("smashed", "bashed", "hammered", "crunched")
/obj/item/nullrod/chainsaw
name = "chainsaw hand"
desc = "Good? Bad? You're the guy with the chainsaw hand."
icon = 'icons/obj/weapons/melee.dmi'
icon_state = "chainsaw_on"
inhand_icon_state = "mounted_chainsaw"
w_class = WEIGHT_CLASS_HUGE
flags = NODROP | ABSTRACT
sharp = TRUE
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsaw.ogg'
/obj/item/nullrod/clown
name = "clown dagger"
desc = "Used for absolutely hilarious sacrifices."
icon = 'icons/obj/wizard.dmi'
icon_state = "clownrender"
worn_icon_state = null
inhand_icon_state = "gold_horn"
lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
hitsound = 'sound/items/bikehorn.ogg'
sharp = TRUE
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut", "honked")
/obj/item/nullrod/fedora
name = "binary fedora"
desc = "The brim of the hat is as sharp as the division between 0 and 1. It makes a mighty throwing weapon."
icon = 'icons/obj/clothing/hats.dmi'
icon_state = "fedora"
worn_icon_state = null
inhand_icon_state = null
slot_flags = ITEM_SLOT_HEAD
force = 0
throw_speed = 4
throw_range = 7
throwforce = 25 // Yes, this is high, since you can typically only use it once in a fight.
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/head.dmi',
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
)
/obj/item/nullrod/fedora/Initialize(mapload)
. = ..()
AddElement(/datum/element/clothing_adjustment/monitor_headgear, 0, 1)
var/skulk_adjustment = string_assoc_list(alist(SOUTH = list(-1, 0), NORTH = list(-1, 0), EAST = list(0, -2), WEST = list(0, 2)))
AddElement(/datum/element/clothing_adjustment/skulk_headgear, skulk_adjustment)
/obj/item/nullrod/armblade
name = "dark blessing"
desc = "Particularly twisted deities grant gifts of dubious value."
icon = 'icons/obj/weapons/melee.dmi'
icon_state = "arm_blade"
inhand_icon_state = null
flags = ABSTRACT | NODROP
w_class = WEIGHT_CLASS_HUGE
sharp = TRUE
/obj/item/nullrod/armblade/customised_abstract_text(mob/living/carbon/owner)
return SPAN_WARNING("[owner.p_their(TRUE)] [owner.l_hand == src ? "left arm" : "right arm"] has been turned into a grotesque meat-blade.")
/obj/item/nullrod/armblade/mining
flags = NODROP
reskin_selectable = FALSE //So 2 of the same nullrod doesnt show up.
/obj/item/nullrod/armblade/mining/pickup(mob/living/user)
..()
flags += ABSTRACT
/obj/item/nullrod/armblade/mining/dropped(mob/living/user)
..()
flags ^= ABSTRACT
/obj/item/nullrod/carp
name = "carp-sie plushie"
desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to receive the blessing of Carp-Sie."
icon = 'icons/obj/toy.dmi'
icon_state = "carpplushie"
worn_icon_state = null
inhand_icon_state = null
force = 13
attack_verb = list("bitten", "eaten", "fin slapped")
hitsound = 'sound/weapons/bite.ogg'
var/used_blessing = FALSE
/obj/item/nullrod/carp/activate_self(mob/user)
if(..())
return ITEM_INTERACT_COMPLETE
if(used_blessing)
return ITEM_INTERACT_COMPLETE
if(user.mind && !HAS_MIND_TRAIT(user, TRAIT_HOLY))
return ITEM_INTERACT_COMPLETE
to_chat(user, "You are blessed by Carp-Sie. Wild space carp will no longer attack you.")
user.faction |= "carp"
used_blessing = TRUE
/// May as well make it a "claymore" and inherit the blocking
/obj/item/nullrod/claymore/bostaff
name = "monk's staff"
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, now used to harass the clown."
icon_state = "bostaff0"
lefthand_file = 'icons/mob/inhands/staves_lefthand.dmi'
righthand_file = 'icons/mob/inhands/staves_righthand.dmi'
force = 13
slot_flags = ITEM_SLOT_BACK
sharp = FALSE
hitsound = "swing_hit"
attack_verb = list("smashed", "slammed", "whacked", "thwacked")
/obj/item/nullrod/claymore/bostaff/Initialize(mapload)
. = ..()
AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.4, _parryable_attack_types = ALL_ATTACK_TYPES, _parry_cooldown = (5 / 3) SECONDS ) // will remove the other component, 0.666667 seconds for 60% uptime.
/obj/item/nullrod/tribal_knife
name = "arrhythmic knife"
desc = "They say fear is the true mind killer, but stabbing them in the head works too. Honour compels you to not sheathe it once drawn."
icon_state = "crysknife"
inhand_icon_state = null // no icon state
w_class = WEIGHT_CLASS_HUGE
sharp = TRUE
slot_flags = null
flags = HANDSLOW
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/nullrod/tribal_knife/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
/obj/item/nullrod/tribal_knife/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/nullrod/tribal_knife/process()
slowdown = rand(-2, 2)
/obj/item/nullrod/pitchfork
name = "unholy pitchfork"
desc = "Holding this makes you look absolutely devilish."
icon_state = "pitchfork0"
worn_icon_state = null
inhand_icon_state = null
w_class = WEIGHT_CLASS_NORMAL
attack_verb = list("poked", "impaled", "pierced", "jabbed")
hitsound = 'sound/weapons/bladeslice.ogg'
sharp = TRUE
/obj/item/nullrod/vajra
name = "vajra and ghanta"
desc = "A set of inseparable ritual tools."
icon_state = "vajra_and_ghanta"
worn_icon_state = null
righthand_file = 'icons/mob/inhands/religion_righthand.dmi'
inhand_icon_state = "vajra"
w_class = WEIGHT_CLASS_NORMAL
attack_verb = list("bludgeoned", "hit", "struck")
var/obj/item/nullrod/ghanta/bound_ghanta = null
/obj/item/nullrod/vajra/Initialize(mapload)
. = ..()
bound_ghanta = new(src)
bound_ghanta.bound_vajra = src
bound_ghanta.sanctify_force = sanctify_force
/// Make sure the creature trying to pick up vajra is a human with two hands free.
/obj/item/nullrod/vajra/attack_hand(mob/user, pickupfireoverride = FALSE)
if(!user)
return FALSE
if(!ishuman(user))
return FALSE
var/mob/living/carbon/human/wielder = user
if(!wielder.get_organ("l_hand") || !wielder.get_organ("r_hand"))
to_chat(user, SPAN_WARNING("You need two hands to wield [src]!"))
return FALSE
if(wielder.l_hand || wielder.r_hand)
to_chat(user, SPAN_WARNING("You need both hands free to pick up [src]!"))
return FALSE
//Change to right hand for pickup.
if(wielder.hand)
wielder.swap_hand()
return ..()
/obj/item/nullrod/vajra/pickup(mob/living/user)
if(!..())
return
put_in_both_hands(user)
/obj/item/nullrod/vajra/proc/put_in_both_hands(mob/user)
if(!user)
return
var/mob/living/carbon/human/wielder = user
if(wielder.r_hand != src)
user.drop_item_to_ground(src, TRUE)
if(!wielder.put_in_r_hand(src))
return
if(!wielder.put_in_l_hand(bound_ghanta) && !wielder.l_hand == bound_ghanta)
user.drop_item_to_ground(src, TRUE)
to_chat(user, SPAN_WARNING("You need both hands free to pick up [src]!"))
return
name = "vajra"
desc = "A legendary ritual weapon."
icon_state = "vajra"
update_appearance(UPDATE_ICON_STATE)
/// Stores Ghanta inside Vajra.
/obj/item/nullrod/vajra/proc/reunite_with_ghanta(drop_vajra = FALSE)
icon_state = initial(icon_state)
name = initial(name)
desc = initial(desc)
if(!bound_ghanta)
return
var/mob/holder = null
if(drop_vajra)
if(istype(loc, /mob))
holder = loc
holder.drop_r_hand(TRUE)
if(istype(bound_ghanta.loc, /mob))
holder = bound_ghanta.loc
holder.drop_item_to_ground(bound_ghanta, TRUE, TRUE)
if(bound_ghanta.loc != src)
bound_ghanta.forceMove(src)
update_appearance(UPDATE_ICON_STATE)
/obj/item/nullrod/vajra/on_enter_storage(obj/item/storage/S)
. = ..()
reunite_with_ghanta()
/obj/item/nullrod/vajra/dropped(mob/user, silent)
. = ..()
reunite_with_ghanta()
/obj/item/nullrod/vajra/mob_can_equip(mob/M, slot, disable_warning = FALSE)
if(slot == ITEM_SLOT_LEFT_HAND)
if(!disable_warning)
to_chat(M, SPAN_WARNING("[src] must be equipped in the right hand."))
return FALSE
if(slot == ITEM_SLOT_RIGHT_HAND)
if(M.r_hand || M.l_hand)
if(!disable_warning)
to_chat(M, SPAN_WARNING("You need both hands free to pick up [src]!"))
return FALSE
return ..()
/obj/item/nullrod/vajra/equipped(mob/user, slot, initial = FALSE)
. = ..()
if(slot == ITEM_SLOT_RIGHT_HAND)
put_in_both_hands(user)
else if(slot == ITEM_SLOT_LEFT_HAND)
reunite_with_ghanta(TRUE)
else
reunite_with_ghanta()
/obj/item/nullrod/ghanta
name = "ghanta"
desc = "A powerful ritual tool. Has an auspicious sound."
reskinned = TRUE
reskin_selectable = FALSE
// Keeps ghanta from being stored somewhere all on its lonesome
w_class = WEIGHT_CLASS_BULKY
icon_state = "ghanta"
force = 0
throwforce = 0
inhand_icon_state = null
worn_icon_state = null
righthand_file = 'icons/mob/inhands/religion_righthand.dmi'
lefthand_file = 'icons/mob/inhands/religion_lefthand.dmi'
var/obj/item/nullrod/vajra/bound_vajra = null
var/blessing = FALSE
/obj/item/nullrod/ghanta/Initialize(mapload)
RegisterSignal(src, COMSIG_INTERACTING, PROC_REF(interrupt_interacting))
return ..()
/// Keeps ghanta from being placed somewhere all on its lonesome
/obj/item/nullrod/ghanta/proc/interrupt_interacting(obj/item/nullrod/ghanta/self, mob/user, atom/target, list/modifiers)
var/list/placeable_obj_types = typecacheof(list(
/obj/machinery/disposal,
/obj/machinery/cooking,
/obj/machinery/economy/vending/custom,
/obj/machinery/washing_machine,
/obj/structure/table,
/obj/structure/rack,
/obj/structure/closet,
/obj/structure/displaycase,
/obj/structure/safe,
/obj/structure/shelf,
))
if(is_type_in_list(target, placeable_obj_types))
target.item_interaction(user, bound_vajra, modifiers)
return TRUE
/obj/item/nullrod/ghanta/mob_can_equip(mob/M, slot, disable_warning = FALSE)
if(slot != ITEM_SLOT_LEFT_HAND)
return FALSE
if(M.r_hand || M.l_hand)
to_chat(M, SPAN_WARNING("You need both hands free to pick up [src]!"))
return FALSE
return ..()
/obj/item/nullrod/ghanta/equipped(mob/user, slot, initial = FALSE)
. = ..()
if(slot == ITEM_SLOT_RIGHT_HAND)
user.drop_item_to_ground(src, TRUE)
user.put_in_l_hand(src)
bound_vajra.put_in_both_hands(user)
else if(slot == ITEM_SLOT_LEFT_HAND)
bound_vajra.put_in_both_hands(user)
else
bound_vajra.reunite_with_ghanta()
/// Keeps ghanta from being dropped somewhere all on its lonesome
/obj/item/nullrod/ghanta/dropped(mob/user, silent)
. = ..()
bound_vajra.reunite_with_ghanta(TRUE)
/// Keeps ghanta from being thrown somewhere all on its lonesome
/obj/item/nullrod/ghanta/throw_at(atom/target, range, speed, mob/thrower, spin, diagonals_first, datum/callback/callback, force, dodgeable)
bound_vajra.throw_at(target, range, speed, thrower, spin, diagonals_first, callback, force, dodgeable)
/obj/item/nullrod/ghanta/activate_self(mob/user)
if(!reskinned)
return ..()
if(!user.mind || !HAS_MIND_TRAIT(user, TRAIT_HOLY))
to_chat(user, SPAN_NOTICE("You are not close enough with [SSticker.Bible_deity_name] to use [src]."))
return ITEM_INTERACT_COMPLETE
if(blessing)
to_chat(user, SPAN_NOTICE("You are already ringing [src]."))
return ITEM_INTERACT_COMPLETE
user.audible_message(
SPAN_NOTICE("[user] rings [src], and what an auspicious sound it is."),
SPAN_NOTICE("You ring [src] to welcome divinity to your surroundings."),
SPAN_NOTICE("[user] taps [src] once and stands very still.")
)
blessing = TRUE
if(do_after(user, 5 SECONDS))
for(var/turf/simulated/each_turf in view(1, get_turf(src)))
each_turf.Bless()
to_chat(user, SPAN_NOTICE("The auspicious sound makes the air around you feel lighter."))
blessing = FALSE
else
to_chat(user, SPAN_NOTICE("The ring of [src] was interrupted."))
blessing = FALSE
return ITEM_INTERACT_COMPLETE
/obj/item/nullrod/cleansing
name = "holy cleansing object"
desc = ABSTRACT_TYPE_DESC
worn_icon_state = null
inhand_icon_state = null
force = 0
throwforce = 0
reskin_selectable = FALSE
var/cleansing = FALSE
var/msg_cleansing_action = "cleansing ritual"
/obj/item/nullrod/cleansing/proc/output_cleansing_message(atom/target, mob/living/user)
user.visible_message(
SPAN_NOTICE("[user] kneels[target == user ? null : " next to [target]"] and begins to utter a prayer to [SSticker.Bible_deity_name]."),
SPAN_NOTICE("You kneel[target == user ? null : " next to [target]"] and begin a prayer to [SSticker.Bible_deity_name]."),
SPAN_NOTICE("[user] begins a prayer to [SSticker.Bible_deity_name].")
)
/obj/item/nullrod/cleansing/interact_with_atom(atom/target, mob/living/user, list/modifiers)
if(!iscarbon(target))
return ..()
if(!user.mind || !HAS_MIND_TRAIT(user, TRAIT_HOLY))
to_chat(user, SPAN_NOTICE("You are not close enough with [SSticker.Bible_deity_name] to use [src]."))
return ITEM_INTERACT_COMPLETE
if(cleansing)
to_chat(user, SPAN_NOTICE("You are already using [src]."))
return ITEM_INTERACT_COMPLETE
output_cleansing_message(target, user)
cleansing = TRUE
if(do_after(user, 15 SECONDS, target = target))
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(H.mind)
if(IS_CULTIST(H))
var/datum/antagonist/cultist/cultist = IS_CULTIST(H)
cultist.remove_gear_on_removal = TRUE
H.mind.remove_antag_datum(/datum/antagonist/cultist)
cleansing = FALSE
return ITEM_INTERACT_COMPLETE
var/datum/antagonist/vampire/V = H.mind?.has_antag_datum(/datum/antagonist/vampire)
if(V?.get_ability(/datum/vampire_passive/full)) // Getting a full prayer off on a vampire will interrupt their powers for a large duration.
V.adjust_nullification(120, 50)
to_chat(target, SPAN_USERDANGER("[user]'s [msg_cleansing_action] has interfered with your power!"))
cleansing = FALSE
return ITEM_INTERACT_COMPLETE
if(prob(25))
to_chat(target, SPAN_NOTICE("[user]'s [msg_cleansing_action] has eased your pain!"))
H.adjustToxLoss(-5)
H.adjustOxyLoss(-5)
H.adjustBruteLoss(-5)
H.adjustFireLoss(-5)
cleansing = FALSE
else
to_chat(user, SPAN_NOTICE("Your [msg_cleansing_action] was interrupted."))
cleansing = FALSE
return ITEM_INTERACT_COMPLETE
/obj/item/nullrod/cleansing/rosary
name = "prayer beads"
desc = "A set of prayer beads used by many of the more traditional religions in space.
Vampires and other unholy abominations have learned to fear these."
icon_state = "rosary"
reskin_selectable = TRUE
msg_cleansing_action = "prayer"
/obj/item/nullrod/cleansing/rosary/Initialize(mapload)
. = ..()
msg_cleansing_action = "prayer to [SSticker.Bible_deity_name]"
/obj/item/nullrod/cleansing/gohei
name = "gohei"
desc = "A wooden staff adorned with paper streamers; an offering to the Kami."
w_class = WEIGHT_CLASS_BULKY
reskin_selectable = TRUE
icon_state = "gohei"
/obj/item/nullrod/cleansing/gohei/Initialize(mapload)
. = ..()
desc = "A wooden staff adorned with paper streamers; an offering to [SSticker.Bible_deity_name]."
/obj/item/nullrod/cleansing/gohei/output_cleansing_message(atom/target, mob/living/user)
user.visible_message(
SPAN_NOTICE("[user] begins waving [src] [target == user ? ("over " + user.p_themselves()) : "over [target]"] rhythmically and chanting to cleanse with the power of [SSticker.Bible_deity_name]."),
SPAN_NOTICE("You begin waving [src] [target == user ? "over yourself" : "over [target]"] rhythmically and chanting to cleanse with the power of [SSticker.Bible_deity_name]."),
SPAN_NOTICE("[user] begins chanting and you hear a gentle rustling.")
)
/obj/item/nullrod/cleansing/whisk
name = "whisker"
desc = "A short wooden staff topped with a bundle of horsehair. It casts away evil spirits and flying insects alike."
icon = 'icons/obj/weapons/melee.dmi'
icon_state = "whisk"
w_class = WEIGHT_CLASS_BULKY
reskin_selectable = TRUE
attack_verb = list("swatted", "swept", "whisked")
/obj/item/nullrod/cleansing/whisk/interact_with_atom(atom/target, mob/living/user, list/modifiers)
if(!iscarbon(target))
return ..()
if(HAS_TRAIT(target, TRAIT_FLYING) && user.a_intent == INTENT_HARM)
return NONE
return ..()
/obj/item/nullrod/cleansing/whisk/attack(mob/living/target, mob/living/user)
. = ..()
if(!HAS_TRAIT(target, TRAIT_FLYING))
return
if(user.a_intent != INTENT_HARM)
return
// Knock back 1 tile
var/atom/throw_target = get_edge_target_turf(target, user.dir)
target.throw_at(throw_target, 1, 5, user, spin = FALSE)
/obj/item/nullrod/cleansing/whisk/output_cleansing_message(atom/target, mob/living/user)
user.visible_message(
SPAN_NOTICE("[user] begins sweeping away the evil forces around [target == user ? user.p_themselves() : "[target]"] with [src]."),
SPAN_NOTICE("You begin sweeping away the evil forces around [target == user ? "yourself" : "[target]"] with [src]."),
SPAN_NOTICE("You hear gentle swishing, like someone is dusting.")
)
/obj/item/nullrod/nazar
name = "nazar"
desc = "A set of glass beads and amulet, which has been forged to provide powerful magic protection to the wielder."
icon_state = "nazar"
worn_icon_state = null
inhand_icon_state = null
force = 0
throwforce = 0
antimagic_type = ALL
/obj/item/nullrod/salt
name = "Holy Salt"
desc = "While commonly used to repel some ghosts, it appears others are downright attracted to it."
icon = 'icons/obj/food/containers.dmi'
icon_state = "saltshakersmall"
worn_icon_state = null
inhand_icon_state = null
force = 0
throwforce = 0
var/ghostcall_CD = 0
/obj/item/nullrod/salt/activate_self(mob/user)
if(..())
return ITEM_INTERACT_COMPLETE
if(!user.mind || !HAS_MIND_TRAIT(user, TRAIT_HOLY))
to_chat(user, SPAN_NOTICE("You are not close enough with [SSticker.Bible_deity_name] to use [src]."))
return ITEM_INTERACT_COMPLETE
if(!(ghostcall_CD > world.time))
ghostcall_CD = world.time + 5 MINUTES
user.visible_message(
SPAN_NOTICE("[user] kneels and begins to utter a prayer to [SSticker.Bible_deity_name] while drawing a circle with salt!"),
SPAN_NOTICE("You kneel and begin a prayer to [SSticker.Bible_deity_name] while drawing a circle!")
)
notify_ghosts("The Chaplain is calling ghosts to [get_area(src)] with [name]!", source = src)
else
to_chat(user, SPAN_NOTICE("You need to wait before using [src] again."))
return ITEM_INTERACT_COMPLETE
/obj/item/nullrod/cleansing/rosary/bread
name = "prayer bread"
desc = "a staple of worshipers of the Silentfather, this holy mime artifact has an odd effect on clowns."
icon = 'icons/obj/food/bakedgoods.dmi'
icon_state = "baguette"
lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
var/list/smited_clowns
/obj/item/nullrod/cleansing/rosary/bread/equipped(mob/user, slot, initial = FALSE)
. = ..()
if(ishuman(user) && (slot & ITEM_SLOT_BOTH_HANDS))
START_PROCESSING(SSobj, src)
else
STOP_PROCESSING(SSobj, src)
/obj/item/nullrod/cleansing/rosary/bread/dropped(mob/user, silent)
. = ..()
STOP_PROCESSING(SSobj, src)
/obj/item/nullrod/cleansing/rosary/bread/Destroy()
STOP_PROCESSING(SSobj, src)
for(var/clown in smited_clowns)
unsmite_clown(clown)
return ..()
/obj/item/nullrod/cleansing/rosary/bread/process()
var/mob/living/carbon/human/holder = loc
// would like to make the holder mime if they have it in on their person in general
for(var/mob/living/carbon/human/H in range(5, loc))
if(!H.mind)
continue
if(H.mind.assigned_role == "Clown" && !LAZYACCESS(smited_clowns, H))
LAZYSET(smited_clowns, H, TRUE)
H.Silence(20 SECONDS)
animate_fade_grayscale(H, 2 SECONDS)
addtimer(CALLBACK(src, PROC_REF(unsmite_clown), H), 20 SECONDS)
if(prob(10))
to_chat(H, SPAN_USERDANGER("Being in the presence of [holder]'s [src] is interfering with your honk!"))
/obj/item/nullrod/cleansing/rosary/bread/proc/unsmite_clown(mob/living/carbon/human/hell_spawn)
animate_fade_colored(hell_spawn, 2 SECONDS)
LAZYREMOVE(smited_clowns, hell_spawn)
/obj/item/nullrod/missionary_staff
name = "holy staff"
desc = "It has a mysterious, protective aura."
icon_state = "godstaff-red"
worn_icon_state = null
inhand_icon_state = null
lefthand_file = 'icons/mob/inhands/staves_lefthand.dmi'
righthand_file = 'icons/mob/inhands/staves_righthand.dmi'
w_class = WEIGHT_CLASS_HUGE
force = 5
slot_flags = ITEM_SLOT_BACK
reskinned = TRUE
reskin_selectable = FALSE
var/team_color = "red"
var/obj/item/clothing/suit/hooded/chaplain_cassock/missionary_robe/robes = null //the robes linked with this staff
var/faith = 99 //a conversion requires 100 faith to attempt. faith recharges over time while you are wearing missionary robes that have been linked to the staff.
/obj/item/nullrod/missionary_staff/examine(mob/living/user)
. = ..()
if(isAntag(user))
. += "This seemingly standard holy staff is actually a disguised neurotransmitter capable of inducing blind zealotry in its victims. It must be allowed to recharge in the presence of a linked set of missionary robes. \
Use the staff in hand while wearing robes to link them both, then aim the staff at your victim to try and convert them."
/obj/item/nullrod/missionary_staff/Initialize(mapload)
. = ..()
team_color = pick("red", "blue")
icon_state = "godstaff-[team_color]"
name = "[team_color] holy staff"
AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = ALL_ATTACK_TYPES)
/obj/item/nullrod/missionary_staff/Destroy()
if(robes) //delink on destruction
robes.linked_staff = null
robes = null
return ..()
/obj/item/nullrod/missionary_staff/activate_self(mob/user)
// As long as it is linked, sec can't try to meta by stealing your staff and seeing if they get the link error message.
if(robes)
return ..()
if(!ishuman(user))
return ITEM_INTERACT_COMPLETE
var/mob/living/carbon/human/missionary = user
if(missionary.wear_suit && istype(missionary.wear_suit, /obj/item/clothing/suit/hooded/chaplain_cassock/missionary_robe))
var/obj/item/clothing/suit/hooded/chaplain_cassock/missionary_robe/robe_to_link = missionary.wear_suit
if(robe_to_link.linked_staff)
to_chat(missionary, SPAN_WARNING("These robes are already linked with a staff and cannot support another. Connection refused."))
return FALSE
robes = robe_to_link
robes.linked_staff = src
to_chat(missionary, SPAN_NOTICE("Link established. Faith generators initialized. Go spread the word."))
faith = 100 //full charge when a fresh link is made (can't be delinked without destroying the robes so this shouldn't be an exploitable thing)
else
to_chat(missionary, SPAN_WARNING("You must be wearing the missionary robes you wish to link with this staff."))
return ITEM_INTERACT_COMPLETE
/obj/item/nullrod/missionary_staff/interact_with_atom(atom/target, mob/living/carbon/human/user, list/modifiers)
if(!ishuman(target))
return ..()
if(target == user)
return ..()
if(!robes)
to_chat(user, SPAN_WARNING("You must link your staff to a set of missionary robes before attempting conversions."))
return ITEM_INTERACT_COMPLETE
if(!user.wear_suit || user.wear_suit != robes)
return ITEM_INTERACT_COMPLETE
if(faith < 100)
to_chat(user, SPAN_WARNING("You don't have enough faith to attempt a conversion right now."))
return ITEM_INTERACT_COMPLETE
to_chat(user, SPAN_NOTICE("You concentrate on [target] and begin the conversion ritual..."))
// No mind means no conversion, but also means no faith lost.
var/mob/living/carbon/human/convert_target = target
if(!convert_target.mind)
to_chat(user, SPAN_WARNING("You halt the conversion as you realize [target] is mindless! Best to save your faith for someone more worthwhile."))
return ITEM_INTERACT_COMPLETE
to_chat(target, SPAN_USERDANGER("Your mind seems foggy. For a moment, all you can think about is serving the greater good... The greater good..."))
if(do_after(user, 8 SECONDS))
// To stop people from trying to exploit the do_after system to multi-convert, we check again if you have enough faith when it completes.
if(faith < 100)
to_chat(user, SPAN_WARNING("You don't have enough faith to complete the conversion on [target]!"))
return ITEM_INTERACT_COMPLETE
// User must maintain line of sight to target, but the target doesn't necessary need to be able to see the user.
if(user in viewers(target))
do_convert(target, user)
else
to_chat(user, SPAN_WARNING("You lost sight of the target before [target.p_they()] could be converted!"))
faith -= 25 //they escaped, so you only lost a little faith (to prevent spamming)
// The do_after failed, probably because you moved or dropped the staff
else
to_chat(user, SPAN_WARNING("Your concentration was broken!"))
return ITEM_INTERACT_COMPLETE
/obj/item/nullrod/missionary_staff/proc/do_convert(mob/living/carbon/human/target, mob/living/carbon/human/missionary)
var/convert_duration = 10 MINUTES
if(!target || !ishuman(target) || !missionary || !ishuman(missionary))
return
if(IS_MINDSLAVE(target) || target.mind.zealot_master) //mindslaves and zealots override the staff because the staff is just a temporary mindslave
to_chat(missionary, SPAN_WARNING("Your faith is strong, but [target.p_their()] mind is already slaved to someone else's ideals. Perhaps an inquisition would reveal more..."))
faith -= 25 //same faith cost as losing sight of them mid-conversion, but did you just find someone who can lead you to a fellow traitor?
return
if(ismindshielded(target))
faith -= 75
to_chat(missionary, SPAN_WARNING("Your faith is strong, but [target.p_their()] mind remains closed to your ideals. Your resolve helps you retain a bit of faith though."))
return
else if(target.mind.assigned_role == "Psychiatrist" || target.mind.assigned_role == "Librarian") //fancy book lernin helps counter religion (day 0 job love, what madness!)
if(prob(35)) //35% chance to fail
to_chat(missionary, SPAN_WARNING("This one is well trained in matters of the mind... They will not be swayed as easily as you thought..."))
faith -=50 //lose half your faith to the book-readers
return
else
to_chat(missionary, SPAN_NOTICE("You successfully convert [target] to your cause. The following grows because of your faith!"))
faith -= 100
else if(target.mind.assigned_role == "Assistant")
if(prob(55)) //55% chance to take LESS faith than normal, because assistants are stupid and easily manipulated
to_chat(missionary, SPAN_NOTICE("Your message seems to resound well with [target]; converting [target.p_them()] was much easier than expected."))
faith -= 50
else //45% chance to take the normal 100 faith cost
to_chat(missionary, SPAN_NOTICE("You successfully convert [target] to your cause. The following grows because of your faith!"))
faith -= 100
else //everyone else takes 100 faith cost because they are normal
to_chat(missionary, SPAN_NOTICE("You successfully convert [target] to your cause. The following grows because of your faith!"))
faith -= 100
//if you made it this far: congratulations! you are now a religious zealot!
target.mind.make_zealot(missionary, convert_duration, team_color)
SEND_SOUND(target, sound('sound/misc/wololo.ogg', volume = 25))
missionary.say("WOLOLO!")
SEND_SOUND(missionary, sound('sound/misc/wololo.ogg', volume = 25))
/obj/item/storage/belt/sheath/holy
/// Extra 'Holy' burn damage for ERT null sheaths
var/sanctify_force = 0
/// The antimagic type the null sheath has.
var/antimagic_type = MAGIC_RESISTANCE_HOLY
/obj/item/storage/belt/sheath/holy/Initialize(mapload)
. = ..()
AddComponent(/datum/component/anti_magic, antimagic_type)
update_icon()
/obj/item/storage/belt/sheath/holy/pickup(mob/living/user)
. = ..()
if(sanctify_force)
if(!user.mind || !HAS_MIND_TRAIT(user, TRAIT_HOLY))
user.adjustBruteLoss(force)
user.adjustFireLoss(sanctify_force)
user.Weaken(10 SECONDS)
user.drop_item_to_ground(src, force = TRUE)
user.visible_message(SPAN_WARNING("[src] slips out of the grip of [user] as they try to pick it up, bouncing upwards and smacking [user.p_them()] in the face!"), \
SPAN_WARNING("[src] slips out of your grip as you pick it up, bouncing upwards and smacking you in the face!"))
playsound(get_turf(user), 'sound/effects/hit_punch.ogg', 50, TRUE, -1)
throw_at(get_edge_target_turf(user, pick(GLOB.alldirs)), rand(1, 3), 5)
/obj/item/storage/belt/sheath/holy/kirpan
name = "kirpan scabbard"
desc = "Can hold a kirpan."
base_icon_state = "kirpan_sheath"
can_hold = list(/obj/item/nullrod/kirpan)
/obj/item/storage/belt/sheath/holy/scimitar
name = "scimitar scabbard"
desc = "Can hold a scimitar."
base_icon_state = "chap_sheath"
can_hold = list(/obj/item/nullrod/claymore/scimitar)