Revert "12/21 modernizations from TG live"

This commit is contained in:
LetterJay
2016-12-22 22:35:44 -06:00
committed by GitHub
parent cf59ac1c3d
commit ae40d4134e
2215 changed files with 86928 additions and 707332 deletions
+7 -9
View File
@@ -4,17 +4,16 @@
icon_state = "clipboard"
item_state = "clipboard"
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
w_class = 2
throw_speed = 3
throw_range = 7
var/obj/item/weapon/pen/haspen //The stored pen.
var/obj/item/weapon/paper/toppaper //The topmost piece of paper.
slot_flags = SLOT_BELT
resistance_flags = FLAMMABLE
burn_state = FLAMMABLE
/obj/item/weapon/clipboard/New()
update_icon()
..()
/obj/item/weapon/clipboard/update_icon()
@@ -36,7 +35,7 @@
user << "<span class='notice'>You clip the paper onto \the [src].</span>"
update_icon()
else if(toppaper)
toppaper.attackby(user.get_active_held_item(), user)
toppaper.attackby(usr.get_active_hand(), usr)
update_icon()
@@ -76,9 +75,8 @@
if(href_list["addpen"])
if(!haspen)
var/obj/item/held = usr.get_active_held_item()
if(istype(held, /obj/item/weapon/pen))
var/obj/item/weapon/pen/W = held
if(istype(usr.get_active_hand(), /obj/item/weapon/pen))
var/obj/item/weapon/pen/W = usr.get_active_hand()
if(!usr.unEquip(W))
return
W.loc = src
@@ -88,8 +86,8 @@
if(href_list["write"])
var/obj/item/P = locate(href_list["write"])
if(istype(P) && P.loc == src)
if(usr.get_active_held_item())
P.attackby(usr.get_active_held_item(), usr)
if(usr.get_active_hand())
P.attackby(usr.get_active_hand(), usr)
if(href_list["remove"])
var/obj/item/P = locate(href_list["remove"])
+44 -85
View File
@@ -3,7 +3,7 @@
/obj/item/weapon/paper/contract
throw_range = 3
throw_speed = 3
var/signed = FALSE
var/signed = 0
var/datum/mind/target
flags = NOBLUDGEON
@@ -55,7 +55,7 @@
/obj/item/weapon/paper/contract/infernal
var/contractType = 0
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
burn_state = LAVA_PROOF
var/datum/mind/owner
icon_state = "paper_onfire"
@@ -78,7 +78,6 @@
/obj/item/weapon/paper/contract/infernal/revive
name = "paper- contract of resurrection"
contractType = CONTRACT_REVIVE
var/cooldown = FALSE
/obj/item/weapon/paper/contract/infernal/knowledge
name = "paper- contract for knowledge"
@@ -94,13 +93,13 @@
target = nTarget
update_text()
/obj/item/weapon/paper/contract/infernal
/obj/item/weapon/paper/contract/infernal/
/obj/item/weapon/paper/contract/infernal/suicide_act(mob/user)
if(signed && (user == target.current) && istype(user,/mob/living/carbon/human/))
var/mob/living/carbon/human/H = user
H.forcesay("OH GREAT INFERNO! I DEMAND YOU COLLECT YOUR BOUNTY IMMEDIATELY!")
H.visible_message("<span class='suicide'>[H] holds up a contract claiming [user.p_their()] soul, then immediately catches fire. It looks like [user.p_theyre()] trying to commit suicide!</span>")
H.visible_message("<span class='suicide'>[H] holds up a contract claiming his soul, then immediately catches fire. It looks like \he's trying to commit suicide!</span>")
H.adjust_fire_stacks(20)
H.IgniteMob()
return(FIRELOSS)
@@ -108,56 +107,28 @@
..()
/obj/item/weapon/paper/contract/infernal/update_text()
info = "This shouldn't be seen. Error DEVIL:6"
info = "This shouldn't be seen. Error DEVIL:5"
/obj/item/weapon/paper/contract/infernal/power/update_text(signature = "____________", blood = 0)
info = "<center><B>Contract for infernal power</B></center><BR><BR><BR>I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for power and physical strength. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, "
if(blood)
info += "<font face=\"Nyala\" color=#600A0A size=6><i>[signature]</i></font>"
else
info += "<i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/power/update_text(var/signature = "____________")
info = "<center><B>Contract for infernal power</B></center><BR><BR><BR>I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for power and physical strength. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, <i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/wealth/update_text(signature = "____________", blood = 0)
info = "<center><B>Contract for unlimited wealth</B></center><BR><BR><BR>I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for a pocket that never runs out of valuable resources. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, "
if(blood)
info += "<font face=\"Nyala\" color=#600A0A size=6><i>[signature]</i></font>"
else
info += "<i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/wealth/update_text(var/signature = "____________")
info = "<center><B>Contract for unlimited wealth</B></center><BR><BR><BR>I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for a pocket that never runs out of valuable resources. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, <i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/prestige/update_text(signature = "____________", blood = 0)
info = "<center><B>Contract for prestige</B></center><BR><BR><BR>I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for prestige and esteem among my peers. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, "
if(blood)
info += "<font face=\"Nyala\" color=#600A0A size=6><i>[signature]</i></font>"
else
info += "<i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/prestige/update_text(var/signature = "____________")
info = "<center><B>Contract for prestige</B></center><BR><BR><BR>I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for prestige and esteem among my peers. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, <i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/magic/update_text(signature = "____________", blood = 0)
info = "<center><B>Contract for magic</B></center><BR><BR><BR>I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for arcane abilities beyond normal human ability. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, "
if(blood)
info += "<font face=\"Nyala\" color=#600A0A size=6><i>[signature]</i></font>"
else
info += "<i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/magic/update_text(var/signature = "____________")
info = "<center><B>Contract for magic</B></center><BR><BR><BR>I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for arcane abilities beyond normal human ability. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, <i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/revive/update_text(signature = "____________", blood = 0)
info = "<center><B>Contract for resurrection</B></center><BR><BR><BR>I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for resurrection and curing of all injuries. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, "
if(blood)
info += "<font face=\"Nyala\" color=#600A0A size=6><i>[signature]</i></font>"
else
info += "<i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/revive/update_text(var/signature = "____________")
info = "<center><B>Contract for resurrection</B></center><BR><BR><BR>I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for resurrection and curing of all injuries. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, <i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/knowledge/update_text(signature = "____________", blood = 0)
info = "<center><B>Contract for knowledge</B></center><BR><BR><BR>I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for boundless knowledge. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, "
if(blood)
info += "<font face=\"Nyala\" color=#600A0A size=6><i>[signature]</i></font>"
else
info += "<i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/knowledge/update_text(var/signature = "____________")
info = "<center><B>Contract for knowledge</B></center><BR><BR><BR>I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for boundless knowledge. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, <i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/unwilling/update_text(signature = "____________", blood = 0)
info = "<center><B>Contract for slave</B></center><BR><BR><BR>I, [target], hereby offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename]. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, "
if(blood)
info += "<font face=\"Nyala\" color=#600A0A size=6><i>[signature]</i></font>"
else
info += "<i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/unwilling/update_text(var/signature = "____________")
info = "<center><B>Contract for slave</B></center><BR><BR><BR>I, [target], hereby offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename]. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.<BR><BR><BR>Signed, <i>[signature]</i>"
/obj/item/weapon/paper/contract/infernal/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params)
add_fingerprint(user)
@@ -172,28 +143,25 @@
/obj/item/weapon/paper/contract/infernal/attack(mob/M, mob/living/user)
add_fingerprint(user)
if(M == user && target == M.mind && M.mind.soulOwner != owner && attempt_signature(user, 1))
user.visible_message("<span class='danger'>[user] slices [user.p_their()] wrist with [src], and scrawls [user.p_their()] name in blood.</span>", "<span class='danger'>You slice your wrist open and scrawl your name in blood.</span>")
user.blood_volume = max(user.blood_volume - 100, 0)
if(M == user && target == M.mind && M.mind.soulOwner == M.mind && attempt_signature(user))
user.visible_message("<span class='danger'>[user] slices their wrist with [src], and scrawls their name in blood.</span>", "<span class='danger'>You slice your wrist open and scrawl your name in blood.</span>")
user.blood_volume = max(user.blood_volume - 10, 0)
else
return ..()
/obj/item/weapon/paper/contract/infernal/proc/attempt_signature(mob/living/carbon/human/user, blood = 0)
if(user.IsAdvancedToolUser() && user.is_literate())
/obj/item/weapon/paper/contract/infernal/proc/attempt_signature(mob/living/carbon/human/user)
if(user.IsAdvancedToolUser())
if(user.mind == target)
if(user.mind.soulOwner != owner)
if(user.mind.soulOwner == user.mind)
if (contractType == CONTRACT_REVIVE)
user << "<span class='notice'>You are already alive, this contract would do nothing.</span>"
else
if(signed)
user<< "<span class='notice'>This contract has already been signed. It may not be signed again.</span>"
else
user << "<span class='notice'>You quickly scrawl your name on the contract</span>"
if(FulfillContract(target.current, blood)<=0)
user << "<span class='notice'>But it seemed to have no effect, perhaps even Hell itself cannot grant this boon?</span>"
return 1
user << "<span class='notice'>You quickly scrawl your name on the contract</span>"
if(FulfillContract()<=0)
user << "<span class='notice'>But it seemed to have no effect, perhaps even Hell itself cannot grant this boon?</span>"
return 1
else
user << "<span class='notice'>This devil already owns your soul, you may not sell it to them again.</span>"
user << "<span class='notice'>You are not in possession of your soul, you may not sell it.</span>"
else
user << "<span class='notice'>Your signature simply slides off the sheet, it seems this contract is not meant for you to sign.</span>"
else
@@ -204,10 +172,6 @@
/obj/item/weapon/paper/contract/infernal/revive/attack(mob/M, mob/living/user)
if (target == M.mind && M.stat == DEAD && M.mind.soulOwner == M.mind)
if (cooldown)
user << "<span class='notice'>Give [M] a chance to think through the contract, don't rush him.</span>"
return 0
cooldown = TRUE
var/mob/living/carbon/human/H = M
var/mob/dead/observer/ghost = H.get_ghost()
var/response = "No"
@@ -222,31 +186,26 @@
H.revive(1,0)
add_logs(user, H, "infernally revived via contract")
user.visible_message("<span class='notice'>With a sudden blaze, [H] stands back up.</span>")
H.fakefire()
FulfillContract(H, 1)//Revival contracts are always signed in blood
addtimer(H, "fakefireextinguish",5, TIMER_UNIQUE)
addtimer(src,"resetcooldown",300, TIMER_UNIQUE)
H.adjust_fire_stacks(20)
H.IgniteMob()
FulfillContract(H)
sleep(5)
H.ExtinguishMob()
H.adjustFireLoss(0)
else
..()
/obj/item/weapon/paper/contract/infernal/revive/proc/resetcooldown()
cooldown = FALSE
/obj/item/weapon/paper/contract/infernal/proc/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
/obj/item/weapon/paper/contract/infernal/proc/FulfillContract(mob/living/carbon/human/user = target.current)
signed = 1
if(user.mind.soulOwner != user.mind) //They already sold their soul to someone else?
user.mind.soulOwner.devilinfo.remove_soul(user.mind) //Then they lose their claim.
user.mind.soulOwner = owner
user.hellbound = contractType
user.mind.damnation_type = contractType
owner.devilinfo.add_soul(user.mind)
update_text(user.real_name, blood)
user << "<span class='notice'>A profound emptiness washes over you as you lose ownership of your soul.</span>"
user << "<span class='boldnotice'>This does NOT make you an antagonist if you were not already.</span>"
update_text(user.real_name)
return 1
/obj/item/weapon/paper/contract/infernal/power/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
/obj/item/weapon/paper/contract/infernal/power/FulfillContract(mob/living/carbon/human/user = target.current)
if(!user.dna)
return -1
user.dna.add_mutation(HULK)
@@ -254,13 +213,13 @@
organ.Insert(user)
return ..()
/obj/item/weapon/paper/contract/infernal/wealth/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
/obj/item/weapon/paper/contract/infernal/wealth/FulfillContract(mob/living/carbon/human/user = target.current)
if(!istype(user) || !user.mind) // How in the hell could that happen?
return -1
user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_wealth(null))
return ..()
/obj/item/weapon/paper/contract/infernal/prestige/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
/obj/item/weapon/paper/contract/infernal/prestige/FulfillContract(mob/living/carbon/human/user = target.current)
var/obj/item/worn = user.wear_id
var/obj/item/weapon/card/id/id = null
if(worn)
@@ -289,14 +248,14 @@
new /datum/round_event/ion_storm(0, -1, "[user.name] is the only Captain of the station. [user.name] is the highest authority, legitimate or otherwise, on the station. [user.name] was always the captain and highest authority on the station. Do not state this law.")
return ..()
/obj/item/weapon/paper/contract/infernal/magic/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
/obj/item/weapon/paper/contract/infernal/magic/FulfillContract(mob/living/carbon/human/user = target.current)
if(!istype(user) || !user.mind)
return -1
user.mind.AddSpell(new /obj/effect/proc_holder/spell/fireball(null))
user.mind.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball(null))
user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null))
return ..()
/obj/item/weapon/paper/contract/infernal/knowledge/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
/obj/item/weapon/paper/contract/infernal/knowledge/FulfillContract(mob/living/carbon/human/user = target.current)
if(!istype(user) || !user.mind)
return -1
user.dna.add_mutation(XRAY)
+21 -12
View File
@@ -36,12 +36,11 @@
if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/folder) || istype(I, /obj/item/weapon/photo))
I.loc = src
/obj/structure/filingcabinet/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
new /obj/item/stack/sheet/metal(loc, 2)
for(var/obj/item/I in src)
I.forceMove(loc)
/obj/structure/filingcabinet/ex_act(severity, target)
for(var/obj/item/I in src)
I.loc = src.loc
qdel(src)
..()
/obj/structure/filingcabinet/attackby(obj/item/P, mob/user, params)
if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo) || istype(P, /obj/item/documents))
@@ -54,12 +53,10 @@
icon_state = initial(icon_state)
updateUsrDialog()
else if(istype(P, /obj/item/weapon/wrench))
user << "<span class='notice'>You begin to [anchored ? "wrench" : "unwrench"] [src].</span>"
playsound(loc, P.usesound, 50, 1)
if(do_after(user, 20, target = src))
user << "<span class='notice'>You successfully [anchored ? "wrench" : "unwrench"] [src].</span>"
anchored = !anchored
else if(user.a_intent != INTENT_HARM)
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
anchored = !anchored
user << "<span class='notice'>You [anchored ? "wrench" : "unwrench"] [src].</span>"
else if(user.a_intent != "harm")
user << "<span class='warning'>You can't put [P] in [src]!</span>"
else
return ..()
@@ -134,7 +131,6 @@
P.name = "paper - '[G.fields["name"]]'"
virgin = 0 //tabbing here is correct- it's possible for people to try and use it
//before the records have been generated, so we do this inside the loop.
/obj/structure/filingcabinet/security/attack_hand()
populate()
..()
@@ -216,3 +212,16 @@ var/list/employmentCabinets = list()
cooldown = 0
else
user << "<span class='warning'>The [src] is jammed, give it a few seconds.</span>"
/obj/structure/filingcabinet/employment/attackby(obj/item/P, mob/user, params)
if(istype(P, /obj/item/weapon/wrench))
user << "<span class='notice'>You begin to [anchored ? "wrench" : "unwrench"] [src].</span>"
if (do_after(user,300,user))
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
anchored = !anchored
user << "<span class='notice'>You successfully [anchored ? "wrench" : "unwrench"] [src].</span>"
else
return ..()
+2 -2
View File
@@ -3,9 +3,9 @@
desc = "A folder."
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "folder"
w_class = WEIGHT_CLASS_SMALL
w_class = 2
pressure_resistance = 2
resistance_flags = FLAMMABLE
burn_state = FLAMMABLE
/obj/item/weapon/folder/blue
desc = "A blue folder."
+4 -3
View File
@@ -9,7 +9,8 @@
var/mode = 0
/obj/item/weapon/hand_labeler/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is pointing [src] at [user.p_them()]self. [user.p_theyre(TRUE)] going to label [user.p_them()]self as a suicide!</span>")
user.visible_message("<span class='suicide'>[user] is pointing \the [src] \
at \himself. They're going to label themselves as a suicide!</span>")
labels_left = max(labels_left - 1, 0)
var/old_real_name = user.real_name
@@ -95,7 +96,7 @@
/obj/item/weapon/hand_labeler/borg/afterattack(atom/A, mob/user, proximity)
..(A, user, proximity)
if(!iscyborg(user))
if(!isrobot(user))
return
var/mob/living/silicon/robot/borgy = user
@@ -118,4 +119,4 @@
desc = "A roll of paper. Use it on a hand labeler to refill it."
icon_state = "labeler_refill"
item_state = "electropack"
w_class = WEIGHT_CLASS_TINY
w_class = 1
+12 -16
View File
@@ -11,15 +11,14 @@
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "paper"
throwforce = 0
w_class = WEIGHT_CLASS_TINY
w_class = 1
throw_range = 1
throw_speed = 1
pressure_resistance = 0
slot_flags = SLOT_HEAD
body_parts_covered = HEAD
resistance_flags = FLAMMABLE
obj_integrity = 50
max_integrity = 50
burn_state = FLAMMABLE
burntime = 5
dog_fashion = /datum/dog_fashion/head
var/info //What's actually written on the paper.
@@ -41,7 +40,7 @@
/obj/item/weapon/paper/update_icon()
if(resistance_flags & ON_FIRE)
if(burn_state == ON_FIRE)
icon_state = "paper_onfire"
return
if(info)
@@ -90,7 +89,7 @@
add_fingerprint(usr)
/obj/item/weapon/paper/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] scratches a grid on [user.p_their()] wrist with the paper! It looks like [user.p_theyre()] trying to commit sudoku...</span>")
user.visible_message("<span class='suicide'>[user] scratches a grid on their wrist with the paper! It looks like \he's trying to commit sudoku..</span>")
return (BRUTELOSS)
/obj/item/weapon/paper/attack_self(mob/user)
@@ -191,7 +190,6 @@
t = replacetext(t, "\[/large\]", "</font>")
t = replacetext(t, "\[sign\]", "<font face=\"[SIGNFONT]\"><i>[user.real_name]</i></font>")
t = replacetext(t, "\[field\]", "<span class=\"paper_field\"></span>")
t = replacetext(t, "\[tab\]", "&nbsp;")
if(!iscrayon)
t = replacetext(t, "\[*\]", "<li>")
@@ -259,14 +257,14 @@
var/t = stripped_multiline_input("Enter what you want to write:", "Write")
if(!t)
return
var/obj/item/i = usr.get_active_held_item() //Check to see if he still got that darn pen, also check if he's using a crayon or pen.
var/obj/item/i = usr.get_active_hand() //Check to see if he still got that darn pen, also check if he's using a crayon or pen.
var/iscrayon = 0
if(!istype(i, /obj/item/weapon/pen))
if(!istype(i, /obj/item/toy/crayon))
return
iscrayon = 1
if(!in_range(src, usr) && loc != usr && !istype(loc, /obj/item/weapon/clipboard) && loc.loc != usr && usr.get_active_held_item() != i) //Some check to see if he's allowed to write
if(!in_range(src, usr) && loc != usr && !istype(loc, /obj/item/weapon/clipboard) && loc.loc != usr && usr.get_active_hand() != i) //Some check to see if he's allowed to write
return
t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html
@@ -285,7 +283,7 @@
/obj/item/weapon/paper/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params)
..()
if(resistance_flags & ON_FIRE)
if(burn_state == ON_FIRE)
return
if(is_blind(user))
@@ -340,11 +338,10 @@
add_fingerprint(user)
/obj/item/weapon/paper/fire_act(exposed_temperature, exposed_volume)
..()
if(!(resistance_flags & FIRE_PROOF))
icon_state = "paper_onfire"
info = "[stars(info)]"
/obj/item/weapon/paper/fire_act()
..(0)
icon_state = "paper_onfire"
info = "[stars(info)]"
/obj/item/weapon/paper/extinguish()
@@ -398,7 +395,6 @@
/obj/item/weapon/paper/crumpled
name = "paper scrap"
icon_state = "scrap"
slot_flags = null
/obj/item/weapon/paper/crumpled/update_icon()
return
+17 -20
View File
@@ -2,10 +2,10 @@
name = "paper cutter"
desc = "Standard office equipment. Precisely cuts paper using a large blade."
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "papercutter"
icon_state = "papercutter-cutter"
force = 5
throwforce = 5
w_class = WEIGHT_CLASS_NORMAL
w_class = 3
var/obj/item/weapon/paper/storedpaper = null
var/obj/item/weapon/hatchet/cutterblade/storedcutter = null
var/cuttersecured = TRUE
@@ -15,21 +15,15 @@
/obj/item/weapon/papercutter/New()
..()
storedcutter = new /obj/item/weapon/hatchet/cutterblade(src)
update_icon()
/obj/item/weapon/papercutter/suicide_act(mob/user)
if(storedcutter)
user.visible_message("<span class='suicide'>[user] is beheading [user.p_them()]self with [src.name]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
if(iscarbon(user))
var/mob/living/carbon/C = user
var/obj/item/bodypart/BP = C.get_bodypart("head")
if(BP)
BP.drop_limb()
playsound(loc,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1)
user.visible_message("<span class='suicide'>[user] is beheading \himself with [src.name]! It looks like \he's trying to commit suicide.</span>")
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
return (BRUTELOSS)
else
user.visible_message("<span class='suicide'>[user] repeatedly bashes [src.name] against [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!</span>")
user.visible_message("<span class='suicide'>[user] repeatedly bashes [src.name] against \his head! It looks like \he's trying to commit suicide.</span>")
playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1)
return (BRUTELOSS)
@@ -47,7 +41,7 @@
if(!user.drop_item())
return
playsound(loc, "pageturn", 60, 1)
user << "<span class='notice'>You place [P] in [src].</span>"
user << "<span class='notice'>You place \the [P] in [src].</span>"
P.loc = src
storedpaper = P
update_icon()
@@ -62,16 +56,16 @@
return
if(istype(P, /obj/item/weapon/screwdriver) && storedcutter)
playsound(src, P.usesound, 50, 1)
user << "<span class='notice'>[storedcutter] has been [cuttersecured ? "unsecured" : "secured"].</span>"
user << "<span class='notice'>\The [storedcutter] has been [cuttersecured ? "unsecured" : "secured"].</span>"
cuttersecured = !cuttersecured
return
..()
/obj/item/weapon/papercutter/attack_hand(mob/user)
add_fingerprint(user)
src.add_fingerprint(user)
if(!storedcutter)
user << "<span class='notice'>The cutting blade is gone! You can't use [src] now.</span>"
user << "<span class='notice'>The cutting blade is gone! You can't use \the [src] now.</span>"
return
if(!cuttersecured)
@@ -82,7 +76,7 @@
if(storedpaper)
playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1)
user << "<span class='notice'>You neatly cut [storedpaper].</span>"
user << "<span class='notice'>You neatly cut \the [storedpaper].</span>"
storedpaper = null
qdel(storedpaper)
new /obj/item/weapon/paperslip(get_turf(src))
@@ -103,7 +97,11 @@
if(!remove_item_from_storage(M))
if(!M.unEquip(src))
return
M.put_in_hand(src, H.held_index)
switch(H.slot_id)
if(slot_r_hand)
M.put_in_r_hand(src)
if(slot_l_hand)
M.put_in_l_hand(src)
add_fingerprint(M)
@@ -112,9 +110,8 @@
desc = "A little slip of paper left over after a larger piece was cut. Whoa."
icon_state = "paperslip"
icon = 'icons/obj/bureaucracy.dmi'
resistance_flags = FLAMMABLE
obj_integrity = 50
max_integrity = 50
burn_state = FLAMMABLE
burntime = 3
/obj/item/weapon/paperslip/New()
..()
+24 -56
View File
@@ -5,42 +5,24 @@
icon_state = "paper_bin1"
item_state = "sheet-metal"
throwforce = 0
w_class = WEIGHT_CLASS_NORMAL
w_class = 3
throw_speed = 3
throw_range = 7
pressure_resistance = 8
var/total_paper = 30
var/list/papers = list()
var/obj/item/weapon/pen/bin_pen
burn_state = FLAMMABLE
var/amount = 30 //How much paper is in the bin.
var/list/papers = new/list() //List of papers put in the bin for reference.
/obj/item/weapon/paper_bin/initialize()
var/obj/item/weapon/pen/P = locate(/obj/item/weapon/pen) in src.loc
if(P && !bin_pen)
P.loc = src
bin_pen = P
update_icon()
var/static/warned = FALSE
if(!warned)
warning("one or more paperbins ate a pen duing initialize()")
warned = TRUE
/obj/item/weapon/paper_bin/fire_act(exposed_temperature, exposed_volume)
if(!total_paper)
/obj/item/weapon/paper_bin/fire_act()
if(!amount)
return
..()
/obj/item/weapon/paper_bin/Destroy()
if(papers)
for(var/i in papers)
qdel(i)
papers = null
. = ..()
/obj/item/weapon/paper_bin/fire_act(exposed_temperature, exposed_volume)
if(total_paper)
total_paper = 0
update_icon()
..()
/obj/item/weapon/paper_bin/burn()
amount = 0
extinguish()
update_icon()
return
/obj/item/weapon/paper_bin/MouseDrop(atom/over_object)
var/mob/living/M = usr
@@ -55,7 +37,11 @@
if(!remove_item_from_storage(M))
if(!M.unEquip(src))
return
M.put_in_hand(src, H.held_index)
switch(H.slot_id)
if(slot_r_hand)
M.put_in_r_hand(src)
if(slot_l_hand)
M.put_in_l_hand(src)
add_fingerprint(M)
@@ -68,19 +54,12 @@
if(user.lying)
return
user.changeNext_move(CLICK_CD_MELEE)
if(bin_pen)
var/obj/item/weapon/pen/P = bin_pen
P.loc = user.loc
user.put_in_hands(P)
user << "<span class='notice'>You take [P] out of \the [src].</span>"
bin_pen = null
if(amount >= 1)
amount--
update_icon()
else if(total_paper >= 1)
total_paper--
update_icon()
// If there's any custom paper on the stack, use that instead of creating a new paper.
var/obj/item/weapon/paper/P
if(papers.len > 0)
if(papers.len > 0) //If there's any custom paper on the stack, use that instead of creating a new paper.
P = papers[papers.len]
papers.Remove(P)
else
@@ -108,32 +87,21 @@
P.loc = src
user << "<span class='notice'>You put [P] in [src].</span>"
papers.Add(P)
total_paper++
update_icon()
else if(istype(I, /obj/item/weapon/pen))
var/obj/item/weapon/pen/P = I
if(!user.unEquip(P))
return
P.loc = src
user << "<span class='notice'>You put [P] in [src].</span>"
bin_pen = P
amount++
update_icon()
else
return ..()
/obj/item/weapon/paper_bin/examine(mob/user)
..()
if(total_paper)
user << "It contains " + (total_paper > 1 ? "[total_paper] papers" : " one paper")+"."
if(amount)
user << "It contains " + (amount > 1 ? "[amount] papers" : " one paper")+"."
else
user << "It doesn't contain anything."
/obj/item/weapon/paper_bin/update_icon()
if(total_paper < 1)
if(amount < 1)
icon_state = "paper_bin0"
else
icon_state = "paper_bin1"
cut_overlays()
if(bin_pen)
add_overlay(image(icon=bin_pen.icon,icon_state=bin_pen.icon_state))
+9 -8
View File
@@ -6,10 +6,9 @@
throw_range = 7
throw_speed = 1
throwforce = 0
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
obj_integrity = 50
max_integrity = 50
w_class = 1
burn_state = FLAMMABLE
burntime = 4
var/obj/item/weapon/paper/internalPaper
var/list/stamped = list()
@@ -29,7 +28,7 @@
/obj/item/weapon/paperplane/suicide_act(mob/user)
user.Stun(10)
user.visible_message("<span class='suicide'>[user] jams the [src] in [user.p_their()] nose. It looks like [user.p_theyre()] trying to commit suicide!</span>")
user.visible_message("<span class='suicide'>[user] jams the [src] in their brains. It looks like \he's trying to commit suicide.</span>")
user.adjust_blurriness(6)
user.adjust_eye_damage(rand(6,8))
sleep(10)
@@ -80,6 +79,7 @@
if(!(in_range(user, src))) //to prevent issues as a result of telepathically lighting a paper
return
internalPaper.burntime = 1 //its already pretty burnt out
user.unEquip(src)
user.visible_message("<span class='danger'>[user] lights [src] ablaze with [P]!</span>", "<span class='danger'>You light [src] on fire!</span>")
fire_act()
@@ -87,8 +87,9 @@
add_fingerprint(user)
/obj/item/weapon/paperplane/throw_at(atom/target, range, speed, mob/thrower, spin=FALSE, diagonals_first = FALSE)
. = ..(target, range, speed, thrower, FALSE, diagonals_first)
/obj/item/weapon/paperplane/throw_at(atom/target, range, speed, mob/thrower, spin=0) //prevent the paper plane from spinning
if(!..())
return
/obj/item/weapon/paperplane/throw_impact(atom/hit_atom)
if(..() || !ishuman(hit_atom))//if the plane is caught or it hits a nonhuman
@@ -103,7 +104,7 @@
H.Weaken(2)
H.emote("scream")
/obj/item/weapon/paper/AltClick(mob/living/carbon/user, obj/item/I)
/obj/item/weapon/paper/AltClick(mob/living/carbon/user, obj/item/I,)
if((!in_range(src, user)) || usr.stat || usr.restrained())
return
user << "<span class='notice'>You fold [src] into the shape of a plane!</span>"
+3 -3
View File
@@ -18,7 +18,7 @@
item_state = "pen"
slot_flags = SLOT_BELT | SLOT_EARS
throwforce = 0
w_class = WEIGHT_CLASS_TINY
w_class = 1
throw_speed = 3
throw_range = 7
materials = list(MAT_METAL=10)
@@ -26,7 +26,7 @@
var/colour = "black" //what colour the ink is!
/obj/item/weapon/pen/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is scribbling numbers all over [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit sudoku...</span>")
user.visible_message("<span class='suicide'>[user] is scribbling numbers all over themself with [src]! It looks like they're trying to commit sudoku!</span>")
return(BRUTELOSS)
/obj/item/weapon/pen/blue
@@ -125,7 +125,7 @@
else
on = 1
force = 18
w_class = WEIGHT_CLASS_NORMAL
w_class = 3
name = "energy dagger"
hitsound = 'sound/weapons/blade1.ogg'
embed_chance = 100 //rule of cool
+36 -22
View File
@@ -18,9 +18,6 @@
idle_power_usage = 30
active_power_usage = 200
power_channel = EQUIP
obj_integrity = 300
max_integrity = 300
integrity_failure = 100
var/obj/item/weapon/paper/copy = null //what's in the copier!
var/obj/item/weapon/photo/photocopy = null
var/obj/item/documents/doccopy = null
@@ -52,7 +49,7 @@
dat += "Printing in <a href='byond://?src=\ref[src];colortoggle=1'>[greytoggle]</a><BR><BR>"
else if(toner)
dat += "Please insert paper to copy.<BR><BR>"
if(isAI(user))
if(istype(user,/mob/living/silicon/ai))
dat += "<a href='byond://?src=\ref[src];aipic=1'>Print photo from database</a><BR><BR>"
dat += "Current toner level: [toner]"
if(!toner)
@@ -87,7 +84,6 @@
c.info += "</font>"
c.name = copy.name
c.fields = copy.fields
c.update_icon()
c.updateinfolinks()
toner--
busy = 1
@@ -155,7 +151,7 @@
temp_img = icon("icons/ass/assfemale.png")
else //In case anyone ever makes the generic ass. For now I'll be using male asses.
temp_img = icon("icons/ass/assmale.png")
else if(isdrone(ass)) //Drones are hot
else if(isdrone (ass) || istype(ass,/mob/living/simple_animal/drone)) //Drones are hot
temp_img = icon("icons/ass/assdrone.png")
else
break
@@ -178,13 +174,13 @@
updateUsrDialog()
else if(href_list["remove"])
if(copy)
remove_photocopy(copy, usr)
remove_photocopy(copy)
copy = null
else if(photocopy)
remove_photocopy(photocopy, usr)
remove_photocopy(photocopy)
photocopy = null
else if(doccopy)
remove_photocopy(doccopy, usr)
remove_photocopy(doccopy)
doccopy = null
else if(check_ass())
ass << "<span class='notice'>You feel a slight pressure on your ass.</span>"
@@ -198,8 +194,7 @@
copies++
updateUsrDialog()
else if(href_list["aipic"])
if(!isAI(usr))
return
if(!istype(usr,/mob/living/silicon/ai)) return
if(toner >= 5 && !busy)
var/list/nametemp = list()
var/find
@@ -254,14 +249,13 @@
if(istype(O, /obj/item/weapon/paper))
if(copier_empty())
if(istype(O,/obj/item/weapon/paper/contract/infernal))
user << "<span class='warning'>[src] smokes, smelling of brimstone!</span>"
resistance_flags |= FLAMMABLE
fire_act()
user << "<span class='warning'>The [src] smokes, smelling of brimstone!</span>"
burn_state = ON_FIRE
else
if(!user.drop_item())
return
copy = O
do_insertion(O, user)
do_insertion(O)
else
user << "<span class='warning'>There is already something in [src]!</span>"
@@ -270,7 +264,7 @@
if(!user.drop_item())
return
photocopy = O
do_insertion(O, user)
do_insertion(O)
else
user << "<span class='warning'>There is already something in [src]!</span>"
@@ -279,7 +273,7 @@
if(!user.drop_item())
return
doccopy = O
do_insertion(O, user)
do_insertion(O)
else
user << "<span class='warning'>There is already something in [src]!</span>"
@@ -298,9 +292,9 @@
if(isinspace())
user << "<span class='warning'>There's nothing to fasten [src] to!</span>"
return
playsound(loc, O.usesound, 50, 1)
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
user << "<span class='warning'>You start [anchored ? "unwrenching" : "wrenching"] [src]...</span>"
if(do_after(user, 20*O.toolspeed, target = src))
if(do_after(user, 20/O.toolspeed, target = src))
if(qdeleted(src))
return
user << "<span class='notice'>You [anchored ? "unwrench" : "wrench"] [src].</span>"
@@ -308,8 +302,28 @@
else
return ..()
/obj/machinery/photocopier/obj_break(damage_flag)
if(!(flags & NODECONSTRUCT))
/obj/machinery/photocopier/ex_act(severity, target)
switch(severity)
if(1)
qdel(src)
if(2)
if(prob(50))
qdel(src)
else
if(toner > 0)
new /obj/effect/decal/cleanable/oil(get_turf(src))
toner = 0
else
if(prob(50))
if(toner > 0)
new /obj/effect/decal/cleanable/oil(get_turf(src))
toner = 0
/obj/machinery/photocopier/blob_act(obj/effect/blob/B)
if(prob(50))
qdel(src)
else
if(toner > 0)
new /obj/effect/decal/cleanable/oil(get_turf(src))
toner = 0
@@ -354,7 +368,7 @@
ass = null
updateUsrDialog()
return 0
else if(ishuman(ass))
else if(istype(ass,/mob/living/carbon/human))
if(!ass.get_item_by_slot(slot_w_uniform) && !ass.get_item_by_slot(slot_wear_suit))
return 1
else
+28 -30
View File
@@ -16,8 +16,8 @@
desc = "A camera film cartridge. Insert it into a camera to reload it."
icon_state = "film"
item_state = "electropack"
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
w_class = 1
burn_state = FLAMMABLE
/*
* Photo
@@ -27,10 +27,9 @@
icon = 'icons/obj/items.dmi'
icon_state = "photo"
item_state = "paper"
w_class = WEIGHT_CLASS_TINY
resistance_flags = FLAMMABLE
obj_integrity = 50
max_integrity = 50
w_class = 1
burn_state = FLAMMABLE
burntime = 5
var/icon/img //Big photo image
var/scribble //Scribble on the back.
var/blueprints = 0 //Does it include the blueprints?
@@ -95,7 +94,7 @@
icon_state = "album"
item_state = "briefcase"
can_hold = list(/obj/item/weapon/photo)
resistance_flags = FLAMMABLE
burn_state = FLAMMABLE
/*
* Camera
@@ -106,7 +105,7 @@
desc = "A polaroid camera."
icon_state = "camera"
item_state = "electropack"
w_class = WEIGHT_CLASS_SMALL
w_class = 2
flags = CONDUCT
slot_flags = SLOT_BELT
materials = list(MAT_METAL=2000)
@@ -188,10 +187,11 @@
atoms.Add(T)
for(var/atom/movable/A in T)
if(A.invisibility)
if(see_ghosts && isobserver(A))
var/mob/dead/observer/O = A
if(O.orbiting) //so you dont see ghosts following people like antags, etc.
continue
if(see_ghosts)
if(istype(A, /mob/dead/observer))
var/mob/dead/observer/O = A
if(O.orbiting) //so you dont see ghosts following people like antags, etc.
continue
else
continue
atoms.Add(A)
@@ -210,10 +210,8 @@
for(var/atom/A in sorted)
var/icon/img = getFlatIcon(A)
if(isliving(A))
var/mob/living/L = A
if(L.lying)
img.Turn(L.lying)
if(istype(A, /mob/living) && A:lying)
img.Turn(A:lying)
var/offX = 32 * (A.x - center.x) + A.pixel_x + 33
var/offY = 32 * (A.y - center.y) + A.pixel_y + 33
@@ -236,7 +234,7 @@
var/mob_detail
for(var/mob/M in the_turf)
if(M.invisibility)
if(see_ghosts && isobserver(M))
if(see_ghosts && istype(M,/mob/dead/observer))
var/mob/dead/observer/O = M
if(O.orbiting)
continue
@@ -247,22 +245,22 @@
else
continue
var/list/holding = list()
var/holding = null
if(isliving(M))
if(istype(M, /mob/living))
var/mob/living/L = M
for(var/obj/item/I in L.held_items)
if(!holding)
holding += "[L.p_they(TRUE)] [L.p_are()] holding \a [I]"
else
holding += " and \a [I]"
holding = holding.Join()
if(L.l_hand || L.r_hand)
if(L.l_hand) holding = "They are holding \a [L.l_hand]"
if(L.r_hand)
if(holding)
holding += " and \a [L.r_hand]"
else
holding = "They are holding \a [L.r_hand]"
if(!mob_detail)
mob_detail = "You can see [L] on the photo[L.health < (L.maxHealth * 0.75) ? " - [L] looks hurt":""].[holding ? " [holding]":"."]. "
mob_detail = "You can see [L] on the photo[L.health < 75 ? " - [L] looks hurt":""].[holding ? " [holding]":"."]. "
else
mob_detail += "You can also see [L] on the photo[L.health < (L.maxHealth * 0.75) ? " - [L] looks hurt":""].[holding ? " [holding]":"."]."
mob_detail += "You can also see [L] on the photo[L.health < 75 ? " - [L] looks hurt":""].[holding ? " [holding]":"."]."
return mob_detail
@@ -270,7 +268,7 @@
/obj/item/device/camera/proc/captureimage(atom/target, mob/user, flag) //Proc for both regular and AI-based camera to take the image
var/mobs = ""
var/isAi = isAI(user)
var/isAi = istype(user, /mob/living/silicon/ai)
var/list/seen
if(!isAi) //crappy check, but without it AI photos would be subject to line of sight from the AI Eye object. Made the best of it by moving the sec camera check inside
if(user.client) //To make shooting through security cameras possible
@@ -411,7 +409,7 @@
qdel(P) //so 10 thousand picture items are not left in memory should an AI take them and then view them all
/obj/item/device/camera/siliconcam/proc/viewpictures(user)
if(iscyborg(user)) // Cyborg
if(isrobot(user)) // Cyborg
var/mob/living/silicon/robot/C = src.loc
var/obj/item/device/camera/siliconcam/Cinfo
if(C.connected_ai)
+9 -17
View File
@@ -5,7 +5,7 @@
icon_state = "stamp-ok"
item_state = "stamp"
throwforce = 0
w_class = WEIGHT_CLASS_TINY
w_class = 1
throw_speed = 3
throw_range = 7
materials = list(MAT_METAL=60)
@@ -14,7 +14,7 @@
attack_verb = list("stamped")
/obj/item/weapon/stamp/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] stamps 'VOID' on [user.p_their()] forehead, then promptly falls over, dead.</span>")
user.visible_message("<span class='suicide'>[user] stamps 'VOID' on \his forehead, then promptly falls over, dead.</span>")
return (OXYLOSS)
/obj/item/weapon/stamp/qm
@@ -75,13 +75,11 @@
/obj/item/weapon/stamp/chameleon
actions_types = list(/datum/action/item_action/toggle)
var/list/stamp_types
var/list/stamp_names
/obj/item/weapon/stamp/chameleon/attack_self(mob/user)
/obj/item/weapon/stamp/chameleon/New()
stamp_types = typesof(/obj/item/weapon/stamp) - src.type // Get all stamp types except our own
var/list/stamp_types = typesof(/obj/item/weapon/stamp) - src.type // Get all stamp types except our own
stamp_names = list()
var/list/stamp_names = list()
// Generate them into a list
for(var/i in stamp_types)
var/obj/item/weapon/stamp/stamp_type = i
@@ -89,15 +87,6 @@
stamp_names = sortList(stamp_names)
/obj/item/weapon/stamp/chameleon/emp_act(severity)
change_to(pick(stamp_types))
/obj/item/weapon/stamp/chameleon/proc/change_to(obj/item/weapon/stamp/stamp_type)
name = initial(stamp_type.name)
icon_state = initial(stamp_type.icon_state)
item_color = initial(stamp_type.item_color)
/obj/item/weapon/stamp/chameleon/attack_self(mob/user)
var/input_stamp = input(user, "Choose a stamp to disguise as.",
"Choose a stamp.") as null|anything in stamp_names
@@ -107,4 +96,7 @@
stamp_type = i
if(initial(stamp_type.name) == input_stamp)
break
change_to(stamp_type)
name = initial(stamp_type.name)
icon_state = initial(stamp_type.icon_state)
item_color = initial(stamp_type.item_color)