Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into BookClub

This commit is contained in:
Aurorablade
2016-06-01 00:12:37 -04:00
196 changed files with 4223 additions and 1284 deletions
+10 -1
View File
@@ -31,6 +31,9 @@
/obj/item/weapon/door_remote/afterattack(obj/machinery/door/airlock/D, mob/user)
if(!istype(D))
return
if(D.is_special)
to_chat(user, "<span class='danger'>[src] cannot access this kind of door!</span>")
return
if(!(D.arePowerSystemsOn()))
to_chat(user, "<span class='danger'>[D] has no power!</span>")
return
@@ -99,6 +102,12 @@
icon_state = "gangtool-white"
region_access = REGION_GENERAL
/obj/item/weapon/door_remote/centcomm
name = "centcomm door remote"
desc = "High-ranking NT officials only."
icon_state = "gangtool-blue"
region_access = REGION_CENTCOMM
#undef WAND_OPEN
#undef WAND_BOLT
#undef WAND_EMERGENCY
#undef WAND_EMERGENCY
@@ -0,0 +1,98 @@
// Floor painter
/obj/item/device/floor_painter
name = "floor painter"
icon_state = "floor_painter"
var/floor_icon
var/floor_state = "floor"
var/floor_dir = SOUTH
w_class = 1
item_state = "electronic"
flags = CONDUCT
slot_flags = SLOT_BELT
var/static/list/allowed_states = list("arrival", "arrivalcorner", "bar", "barber", "blackcorner", "blue", "bluecorner",
"bluefull", "bluered", "blueyellow", "blueyellowfull", "bot", "brown", "browncorner", "browncornerold", "brownold",
"cafeteria", "caution", "cautioncorner", "chapel", "cmo", "dark", "delivery", "escape", "escapecorner", "floor",
"freezerfloor", "green", "greenblue", "greenbluefull", "greencorner", "greenfull", "greenyellow",
"greenyellowfull", "grimy", "loadingarea", "neutral", "neutralcorner", "neutralfull", "orange", "orangecorner",
"orangefull", "purple", "purplecorner", "purplefull", "rampbottom", "ramptop", "red", "redblue", "redbluefull",
"redcorner", "redfull", "redgreen", "redgreenfull", "redyellow", "redyellowfull", "warning", "warningcorner", "warnwhite",
"warnwhitecorner", "white", "whiteblue", "whitebluecorner", "whitebluefull", "whitebot", "whitecorner", "whitedelivery",
"whitegreen", "whitegreencorner", "whitegreenfull", "whitehall", "whitepurple", "whitepurplecorner", "whitepurplefull",
"whitered", "whiteredcorner", "whiteredfull", "whiteyellow", "whiteyellowcorner", "whiteyellowfull", "yellow",
"yellowcorner", "yellowcornersiding", "yellowsiding")
/obj/item/device/floor_painter/afterattack(var/atom/A, var/mob/user, proximity, params)
if(!proximity)
return
var/turf/simulated/floor/plasteel/F = A
if(!istype(F))
to_chat(user, "<span class='warning'>\The [src] can only be used on station flooring.</span>")
return
F.icon_state = floor_state
F.icon_regular_floor = floor_state
F.dir = floor_dir
/obj/item/device/floor_painter/attack_self(var/mob/user)
if(!user)
return 0
user.set_machine(src)
interact(user)
return 1
/obj/item/device/floor_painter/interact(mob/user as mob)
if(!floor_icon)
floor_icon = icon('icons/turf/floors.dmi', floor_state, floor_dir)
user << browse_rsc(floor_icon, "floor.png")
var/dat = {"
<center>
<a href="?src=\ref[src];cycleleft=1">&lt;-</a>
<img style="-ms-interpolation-mode: nearest-neighbor;" src="floor.png" width=128 height=128 border=4>
<a href="?src=\ref[src];cycleright=1">-&gt;</a>
</center>
<a href="?src=\ref[src];choose_state=1">Choose Style</a>
<div class='statusDisplay'>Style: [floor_state]</div>
<a href="?src=\ref[src];choose_dir=1">Choose Direction</a>
<div class='statusDisplay'>Direction: [dir2text(floor_dir)]</div>
"}
var/datum/browser/popup = new(user, "floor_painter", name, 225, 300)
popup.set_content(dat)
popup.open()
/obj/item/device/floor_painter/Topic(href, href_list)
if(..())
return
if(href_list["choose_state"])
var/state = input("Please select a style", "[src]") as null|anything in allowed_states
if(state)
floor_state = state
floor_dir = SOUTH // Reset dir, because some icon_states might not have that dir.
if(href_list["choose_dir"])
var/seldir = input("Please select a direction", "[src]") as null|anything in list("north", "south", "east", "west", "northeast", "northwest", "southeast", "southwest")
if(seldir)
floor_dir = text2dir(seldir)
if(href_list["cycleleft"])
var/index = allowed_states.Find(floor_state)
index--
if(index < 1)
index = allowed_states.len
floor_state = allowed_states[index]
floor_dir = SOUTH
if(href_list["cycleright"])
var/index = allowed_states.Find(floor_state)
index++
if(index > allowed_states.len)
index = 1
floor_state = allowed_states[index]
floor_dir = SOUTH
floor_icon = icon('icons/turf/floors.dmi', floor_state, floor_dir)
if(usr)
attack_self(usr)
@@ -233,7 +233,6 @@
sleep(300)
canprint = 1
//empty tape recorders
/obj/item/device/taperecorder/empty/New()
return
@@ -260,12 +259,29 @@
to_chat(user, "<span class='notice'>You pull out all the tape!</span>")
ruin()
/obj/item/device/tape/verb/wipe()
set name = "Wipe Tape"
set category = "Object"
if(usr.stat)
return
if(ruined)
return
to_chat(usr, "You erase the data from the [src]")
clear()
/obj/item/device/tape/proc/clear()
used_capacity = 0
storedinfo.Cut()
timestamp.Cut()
/obj/item/device/tape/proc/ruin()
overlays += "ribbonoverlay"
ruined = 1
/obj/item/device/tape/proc/fix()
overlays -= "ribbonoverlay"
ruined = 0
@@ -277,6 +293,12 @@
if(do_after(user, 120, target = src))
to_chat(user, "<span class='notice'>You wound the tape back in!</span>")
fix()
else if(istype(I, /obj/item/weapon/pen))
var/title = stripped_input(usr,"What do you want to name the tape?", "Tape Renaming", name, MAX_NAME_LEN)
if(!title || !length(title))
name = initial(name)
return
name = "tape - [title]"
//Random colour tapes
+50 -3
View File
@@ -107,6 +107,8 @@
var/icon/side
var/dat
var/stamped = 0
var/obj/item/weapon/card/id/guest/guest_pass = null // Guest pass attached to the ID
/obj/item/weapon/card/id/New()
..()
@@ -120,6 +122,16 @@
show(usr)
else
to_chat(user, "<span class='warning'>It is too far away.</span>")
if(guest_pass)
to_chat(user, "<span class='notice'>There is a guest pass attached to this ID card</span>")
if (world.time < guest_pass.expiration_time)
to_chat(user, "<span class='notice'>It expires at [worldtime2text(guest_pass.expiration_time)].</span>")
else
to_chat(user, "<span class='warning'>It expired at [worldtime2text(guest_pass.expiration_time)].</span>")
to_chat(user, "<span class='notice'>It grants access to following areas:</span>")
for (var/A in guest_pass.temp_access)
to_chat(user, "<span class='notice'>[get_access_desc(A)].</span>")
to_chat(user, "<span class='notice'>Issuing reason: [guest_pass.reason].</span>")
/obj/item/weapon/card/id/proc/show(mob/user as mob)
var/datum/asset/assets = get_asset_datum(/datum/asset/simple/paper)
@@ -170,7 +182,9 @@
<img src=side.png height=80 width=80 border=4></td></tr></table>"
/obj/item/weapon/card/id/GetAccess()
return access
if(!guest_pass)
return access
return access | guest_pass.GetAccess()
/obj/item/weapon/card/id/GetID()
return src
@@ -204,9 +218,42 @@
if(!stamped)
dat+="<img src=large_[W.icon_state].png>"
stamped = 1
to_chat(usr, "You stamp the ID card!")
to_chat(user, "You stamp the ID card!")
else
to_chat(usr, "This ID has already been stamped!")
to_chat(user, "This ID has already been stamped!")
else if(istype(W, /obj/item/weapon/card/id/guest))
if(istype(src, /obj/item/weapon/card/id/guest))
return
var/obj/item/weapon/card/id/guest/G = W
if(world.time > G.expiration_time)
to_chat(user, "There's no point, the guest pass has expired.")
return
if(guest_pass)
to_chat(user, "There's already a guest pass attached to this ID.")
return
if(G.registered_name != registered_name && G.registered_name != "NOT SPECIFIED")
to_chat(user, "The guest pass cannot be attached to this ID")
return
if(!user.unEquip(G))
return
G.loc = src
guest_pass = G
/obj/item/weapon/card/id/verb/remove_guest_pass()
set name = "Remove Guest Pass"
set category = "Object"
set src in range(0)
if(usr.stat || !usr.canmove || usr.restrained())
return
if(guest_pass)
to_chat(usr, "<span class='notice'>You remove the guest pass from this ID.</span>")
guest_pass.forceMove(get_turf(src))
guest_pass = null
else
to_chat(usr, "<span class='warning'>There is no guest pass attached to this ID</span>")
/obj/item/weapon/card/id/silver
name = "identification card"
@@ -1,16 +1,16 @@
/obj/item/weapon/dnascrambler
name = "dna scrambler"
desc = "An illegal genetic serum designed to randomize the user's identity."
icon = 'icons/obj/syringe.dmi'
icon = 'icons/obj/hypo.dmi'
item_state = "syringe_0"
icon_state = "b10"
icon_state = "lepopen1"
var/used = null
update_icon()
if(used)
icon_state = "b0"
icon_state = "lepopen0"
else
icon_state = "b10"
icon_state = "lepopen1"
attack(mob/M as mob, mob/user as mob)
if(!M || !user)
@@ -0,0 +1,328 @@
/obj/item/weapon/nullrod
name = "null rod"
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of Nar-Sie's followers."
icon_state = "nullrod"
item_state = "nullrod"
force = 18
throw_speed = 3
throw_range = 4
throwforce = 10
w_class = 1
var/reskinned = FALSE
var/list/fluff_transformations = list() //does it have any special transformations only accessible to it? Should only be subtypes of /obj/item/weapon/nullrod
/obj/item/weapon/nullrod/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is killing \himself with \the [src.name]! It looks like \he's trying to get closer to god!</span>")
return (BRUTELOSS|FIRELOSS)
/obj/item/weapon/nullrod/attack(mob/M, mob/living/carbon/user)
..()
if(M.mind)
if(M.mind.vampire)
if(ishuman(M))
if(!M.mind.vampire.get_ability(/datum/vampire_passive/full))
to_chat(M, "<span class='warning'>The nullrod's power interferes with your own!</span>")
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
/obj/item/weapon/nullrod/attack_self(mob/user)
if(reskinned)
return
if(user.mind && (user.mind.assigned_role == "Chaplain"))
reskin_holy_weapon(user)
/obj/item/weapon/nullrod/proc/reskin_holy_weapon(mob/M)
var/list/holy_weapons_list = typesof(/obj/item/weapon/nullrod) - typesof(/obj/item/weapon/nullrod/fluff)
if(fluff_transformations.len)
for(var/thing in fluff_transformations)
holy_weapons_list += thing
var/list/display_names = list()
for(var/V in holy_weapons_list)
var/atom/A = V
display_names += initial(A.name)
var/choice = input(M,"What theme would you like for your holy weapon?","Holy Weapon Theme") as null|anything in display_names
if(!src || !choice || !in_range(M, src) || M.incapacitated() || reskinned)
return
var/index = display_names.Find(choice)
var/A = holy_weapons_list[index]
var/obj/item/weapon/nullrod/holy_weapon = new A
feedback_set_details("chaplain_weapon","[choice]")
if(holy_weapon)
holy_weapon.reskinned = TRUE
M.unEquip(src)
M.put_in_active_hand(holy_weapon)
qdel(src)
/obj/item/weapon/nullrod/godhand
icon_state = "disintegrate"
item_state = "disintegrate"
name = "god hand"
desc = "This hand of yours glows with an awesome power!"
flags = ABSTRACT | NODROP
w_class = 5
hitsound = 'sound/weapons/sear.ogg'
damtype = BURN
attack_verb = list("punched", "cross countered", "pummeled")
/obj/item/weapon/nullrod/staff
icon_state = "godstaff-red"
item_state = "godstaff-red"
name = "red holy staff"
desc = "It has a mysterious, protective aura."
w_class = 5
force = 5
slot_flags = SLOT_BACK
/obj/item/weapon/nullrod/staff/IsShield()
return 1
/obj/item/weapon/nullrod/staff/blue
name = "blue holy staff"
icon_state = "godstaff-blue"
item_state = "godstaff-blue"
/obj/item/weapon/nullrod/claymore
icon_state = "claymore"
item_state = "claymore"
name = "holy claymore"
desc = "A weapon fit for a crusade!"
w_class = 5
slot_flags = SLOT_BACK|SLOT_BELT
sharp = 1
edge = 1
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/nullrod/claymore/IsShield()
if(prob(30))
return 1
else
return 0
/obj/item/weapon/nullrod/claymore/darkblade
icon_state = "cultblade"
item_state = "cultblade"
name = "dark blade"
desc = "Spread the glory of the dark gods!"
slot_flags = SLOT_BELT
hitsound = 'sound/hallucinations/growl1.ogg'
/obj/item/weapon/nullrod/claymore/chainsaw_sword
icon_state = "chainswordon"
item_state = "chainswordon"
name = "sacred chainsaw sword"
desc = "Suffer not a heretic to live."
slot_flags = SLOT_BELT
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsaw.ogg'
/obj/item/weapon/nullrod/claymore/glowing
icon_state = "swordon"
item_state = "swordon"
name = "force weapon"
desc = "The blade glows with the power of faith. Or possibly a battery."
slot_flags = SLOT_BELT
/obj/item/weapon/nullrod/claymore/katana
name = "hanzo steel"
desc = "Capable of cutting clean through a holy claymore."
icon_state = "katana"
item_state = "katana"
slot_flags = SLOT_BELT | SLOT_BACK
/obj/item/weapon/nullrod/claymore/saber
name = "light energy sword"
hitsound = 'sound/weapons/blade1.ogg'
icon_state = "swordblue"
item_state = "swordblue"
desc = "If you strike me down, I shall become more robust than you can possibly imagine."
slot_flags = SLOT_BELT
/obj/item/weapon/nullrod/claymore/saber/red
name = "dark energy sword"
icon_state = "swordred"
item_state = "swordred"
desc = "Woefully ineffective when used on steep terrain."
/obj/item/weapon/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"
item_state = "sord"
slot_flags = 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/weapon/nullrod/scythe
icon_state = "scythe0"
item_state = "scythe0"
name = "reaper scythe"
desc = "Ask not for whom the bell tolls..."
w_class = 4
armour_penetration = 35
slot_flags = SLOT_BACK
sharp = 1
edge = 1
attack_verb = list("chopped", "sliced", "cut", "reaped")
hitsound = 'sound/weapons/bladeslice.ogg'
/obj/item/weapon/nullrod/scythe/vibro
icon_state = "hfrequency0"
item_state = "hfrequency1"
name = "high frequency blade"
desc = "Bad references are the DNA of the soul."
attack_verb = list("chopped", "sliced", "cut", "zandatsu'd")
/obj/item/weapon/nullrod/hammmer
icon_state = "hammeron"
item_state = "hammeron"
name = "relic war hammer"
desc = "This war hammer cost the chaplain fourty thousand space dollars."
slot_flags = SLOT_BELT
w_class = 5
attack_verb = list("smashed", "bashed", "hammered", "crunched")
/obj/item/weapon/nullrod/chainsaw
name = "chainsaw hand"
desc = "Good? Bad? You're the guy with the chainsaw hand."
icon_state = "chainsaw1"
item_state = "mounted_chainsaw"
w_class = 5
flags = NODROP | ABSTRACT
sharp = 1
edge = 1
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsaw.ogg'
/obj/item/weapon/nullrod/clown
icon = 'icons/obj/wizard.dmi'
icon_state = "clownrender"
item_state = "gold_horn"
name = "clown dagger"
desc = "Used for absolutely hilarious sacrifices."
hitsound = 'sound/items/bikehorn.ogg'
sharp = 1
edge = 1
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut", "honked")
/obj/item/weapon/nullrod/whip
name = "holy whip"
desc = "What a terrible night to be on Space Station 13."
icon_state = "chain"
item_state = "chain"
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed")
hitsound = 'sound/weapons/slash.ogg'
/obj/item/weapon/nullrod/whip/afterattack(atom/movable/AM, mob/user, proximity)
if(!proximity)
return
if(istype(AM, /mob/living/carbon/human))
var/mob/living/carbon/human/H = AM
if(is_shadow(H))
var/phrase = pick("Die monster! You don't belong in this world!!!", "You steal men's souls and make them your slaves!!!", "Your words are as empty as your soul!!!", "Mankind ill needs a savior such as you!!!")
user.say("[phrase]")
H.adjustBruteLoss(8) //Bonus damage
/obj/item/weapon/nullrod/fedora
name = "athiest's fedora"
desc = "The brim of the hat is as sharp as your wit. Throwing it at someone would hurt almost as much as disproving the existence of God."
icon_state = "fedora"
item_state = "fedora"
slot_flags = SLOT_HEAD
icon = 'icons/obj/clothing/hats.dmi'
force = 0
throw_speed = 4
throw_range = 7
throwforce = 20
/obj/item/weapon/nullrod/armblade
name = "dark blessing"
desc = "Particularly twisted deities grant gifts of dubious value."
icon_state = "arm_blade"
item_state = "arm_blade"
flags = ABSTRACT | NODROP
w_class = 5
sharp = 1
edge = 1
/obj/item/weapon/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 recieve the blessing of Carp-Sie."
icon = 'icons/obj/toy.dmi'
icon_state = "carpplushie"
item_state = "carp_plushie"
force = 15
attack_verb = list("bitten", "eaten", "fin slapped")
hitsound = 'sound/weapons/bite.ogg'
var/used_blessing = FALSE
/obj/item/weapon/nullrod/carp/attack_self(mob/living/user)
if(used_blessing)
return
if(user.mind && (user.mind.assigned_role != "Chaplain"))
return
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/weapon/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, now used to harass the clown."
w_class = 4
force = 15
slot_flags = SLOT_BACK
sharp = 0
edge = 0
hitsound = "swing_hit"
attack_verb = list("smashed", "slammed", "whacked", "thwacked")
icon = 'icons/obj/weapons.dmi'
icon_state = "bostaff0"
item_state = "bostaff0"
/obj/item/weapon/nullrod/claymore/bostaff/IsShield()
if(prob(40))
return 1
else
return 0
/obj/item/weapon/nullrod/tribal_knife
icon_state = "crysknife"
item_state = "crysknife"
name = "arrhythmic knife"
w_class = 5
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."
sharp = 1
edge = 1
slot_flags = null
flags = HANDSLOW
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/nullrod/tribal_knife/New()
..()
processing_objects.Add(src)
/obj/item/weapon/nullrod/tribal_knife/Destroy()
processing_objects.Remove(src)
return ..()
/obj/item/weapon/nullrod/tribal_knife/process()
slowdown = rand(-2, 2)
/obj/item/weapon/nullrod/pitchfork
icon_state = "pitchfork0"
item_state = "pitchfork0"
name = "unholy pitchfork"
w_class = 3
desc = "Holding this makes you look absolutely devilish."
attack_verb = list("poked", "impaled", "pierced", "jabbed")
hitsound = 'sound/weapons/bladeslice.ogg'
sharp = 1
edge = 1
+33 -2
View File
@@ -19,11 +19,15 @@
desc = "A trap used to catch bears and other legged creatures."
var/armed = 0
var/obj/item/weapon/grenade/iedcasing/IED = null
var/obj/item/device/assembly/signaler/sig = null
/obj/item/weapon/restraints/legcuffs/beartrap/Destroy()
if(IED)
qdel(IED)
IED = null
if(sig)
qdel(sig)
sig = null
return ..()
/obj/item/weapon/restraints/legcuffs/beartrap/suicide_act(mob/user)
@@ -43,6 +47,9 @@
if(IED)
to_chat(user, "<span class='warning'>This beartrap already has an IED hooked up to it!</span>")
return
if(sig)
to_chat(user, "<span class='warning'>This beartrap already has a signaler hooked up to it!</span>")
return
IED = I
switch(IED.assembled)
if(0,1) //if it's not fueled/hooked up
@@ -50,7 +57,7 @@
IED = null
return
if(2,3)
user.drop_item(src)
user.drop_item()
I.forceMove(src)
message_admins("[key_name_admin(user)] has rigged a beartrap with an IED.")
log_game("[key_name(user)] has rigged a beartrap with an IED.")
@@ -60,12 +67,33 @@
to_chat(user, "<span class='danger'>You shouldn't be reading this message! Contact a coder or someone, something broke!</span>")
IED = null
return
if(istype(I, /obj/item/device/assembly/signaler))
if(IED)
to_chat(user, "<span class='warning'>This beartrap already has an IED hooked up to it!</span>")
return
if(sig)
to_chat(user, "<span class='warning'>This beartrap already has a signaler hooked up to it!</span>")
return
sig = I
if(sig.secured)
to_chat(user, "<span class='notice'>The signaler is secured.</span>")
sig = null
return
user.drop_item()
I.forceMove(src)
to_chat(user, "<span class='notice'>You sneak the [sig] underneath the pressure plate and connect the trigger wire.</span>")
desc = "A trap used to catch bears and other legged creatures. <span class='warning'>There is a remote signaler hooked up to it.</span>"
if(istype(I, /obj/item/weapon/screwdriver))
if(IED)
IED.forceMove(get_turf(src))
IED = null
to_chat(user, "<span class='notice'>You remove the IED from the [src].</span>")
return
if(sig)
sig.forceMove(get_turf(src))
sig = null
to_chat(user, "<span class='notice'>You remove the signaler from the [src].</span>")
return
..()
/obj/item/weapon/restraints/legcuffs/beartrap/Crossed(AM as mob|obj)
@@ -88,6 +116,9 @@
spawn(IED.det_time)
IED.prime()
if(sig && isturf(src.loc))
sig.signal()
if(ishuman(AM))
var/mob/living/carbon/H = AM
if(H.lying)
@@ -192,4 +223,4 @@
/obj/item/weapon/legcuffs/bolas/Bump()
..()
throw_failed() //allows a mech bolas to be destroyed
throw_failed() //allows a mech bolas to be destroyed
@@ -15,75 +15,6 @@
to_chat(viewers(user), "<span class='suicide'>[user] is hitting \himself with the [src.name]! It looks like \he's trying to ban \himself from life.</span>")
return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS)
/obj/item/weapon/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 = 1
var/transformed = 0
var/transform_into = /obj/item/weapon/nullrod/sword
var/transform_via = list(/obj/item/clothing/suit/armor/riot/knight/templar, /obj/item/clothing/suit/chaplain_hoodie/fluff/chronx)
suicide_act(mob/user)
to_chat(viewers(user), "<span class='suicide'>[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
return (BRUTELOSS|FIRELOSS)
/obj/item/weapon/nullrod/attack(mob/M as mob, mob/living/user as mob) //Paste from old-code to decult with a null rod.
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
if(!iscarbon(user))
M.LAssailant = null
else
M.LAssailant = user
msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(M)] with [src.name] (INTENT: [uppertext(user.a_intent)])")
if ((CLUMSY in user.mutations) && prob(50))
to_chat(user, "\red The rod slips out of your hand and hits your head.")
user.take_organ_damage(10)
user.Paralyse(20)
return
if(M.mind)
if(M.mind.vampire)
if(ishuman(M))
if(!M.mind.vampire.get_ability(/datum/vampire_passive/full))
to_chat(M, "<span class='warning'>The nullrod's power interferes with your own!</span>")
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
..()
/obj/item/weapon/nullrod/afterattack(var/obj/item/I as obj, mob/user as mob, proximity)
if(!proximity)
return
for(var/T in transform_via)
if(istype(I, T)) //Only the Chaplain's holy armor is capable fo performing this feat.
if(!transformed) // can't turn a sword into a sword.
var/obj/item/S = new transform_into()
to_chat(user, "<span class='notice'>You sheath the [src] into the [I]'s scabbard, transforming it into \a [S].</span>")
user.unEquip(src)
qdel(src)
user.put_in_hands(S)
break
/obj/item/weapon/nullrod/sword
name = "holy sword"
desc = "A sword imbued with holy power, its very presence disrupts and dampens the powers of paranormal phenomenae."
icon_state = "claymore"
item_state = "claymore"
hitsound = 'sound/weapons/bladeslice.ogg'
w_class = 3 //transforming it is not without its downsides.
sharp = 1
edge = 1
transformed = 1
/obj/item/weapon/sord
name = "\improper SORD"
desc = "This thing is so unspeakably shitty you are having a hard time even holding it."