/*
* Paper
* also scraps of paper
*/
/obj/item/paper
name = "paper"
gender = PLURAL
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "paper"
item_state = "paper"
throwforce = 0
w_class = WEIGHT_CLASS_TINY
throw_range = 1
throw_speed = 1
pressure_resistance = 0
slot_flags = ITEM_SLOT_HEAD
body_parts_covered = HEAD
resistance_flags = FLAMMABLE
max_integrity = 50
blocks_emissive = null
attack_verb = list("bapped")
dog_fashion = /datum/dog_fashion/head
drop_sound = 'sound/items/handling/paper_drop.ogg'
pickup_sound = 'sound/items/handling/paper_pickup.ogg'
var/header //Above the main body, displayed at the top
var/info //What's actually written on the paper.
var/footer //The bottom stuff before the stamp but after the body
var/info_links //A different version of the paper which includes html links at fields and EOF
var/stamps //The (text for the) stamps on the paper.
var/list/stamp_overlays = list()
var/fields = 0 //Amount of user created fields
var/list/stamped
var/ico[0] //Icons and
var/offset_x[0] //offsets stored for later
var/offset_y[0] //usage by the photocopier
var/rigged = FALSE
var/spam_flag = FALSE
var/contact_poison // Reagent ID to transfer on contact
var/contact_poison_volume = 0
var/contact_poison_poisoner = null
/// Width of the window that opens
var/paper_width = 600
/// Height of the window that opens
var/paper_height = 750
var/const/deffont = "Verdana"
var/const/signfont = "Times New Roman"
var/const/crayonfont = "Comic Sans MS"
var/regex/blacklist = new("(
"
/obj/item/paper/syndicate_druglab/delivery
name = "paper - 'Delivery Note'"
info = "Hey sweetie! The boss wants you to have some friends. I couldn't get you a real suit, but I found this in a cosplay shop! The bees surely won't see through your IMPECCABLE disguise!
xoxo,
george ♥
- What the fuck. I'm airlocking him tomorrow."
/obj/item/paper/atmos_asteroid
header ="
Nanotrasen Central Command
Official Expedited Memorandum
"
name = "Lava Field Observations"
info = "Asteroid Core Observation Log 306
We took some additional samples of the deep layers of the molten core of the asteroid. Undetermined trace elements were able to be identified in the solution. Its possible this is how the plasma remains so stable at these temperatures. None of our current filter methods have been able to properly extract it as of yet, but we're certain a breakthrough is on the horizon. We did it before, we can do it again."
/obj/item/paper/clockwork_cult_message
name = "Old handwritten note"
info = "To any brothers and sisters that journey here from beyond the system:
\
The Nar'Sien dogs have failed, and we have gleaned the method by which we can awake His divine mechanism. The spark shall be turned into lightning and the gears shall once again turn.
\
We go now to purge the dogs from the hole we know they hide within, and then The Eminance shall then call us back to Reebe so that we may begin preperations for His awakening.
\
The guardians shall protect the monastery in our stead. Make use of its supplies and prepare for our return, together we shall all finalize His vison."
/obj/item/paper/zombie_cure
name = "paper - 'Research on Zombies'"
/obj/item/paper/zombie_cure/Initialize(mapload)
. = ..()
return INITIALIZE_HINT_LATELOAD // Make sure reagents appear before this paper
/obj/item/paper/zombie_cure/LateInitialize()
. = ..()
var/list/zombie_cure_reactions = list()
for(var/id in GLOB.chemical_reactions_list)
for(var/datum/chemical_reaction/zombie/reaction in GLOB.chemical_reactions_list[id])
zombie_cure_reactions["[reaction.cure_level]"] = reaction // we use string keys here so we can measure how many cures there are
if(length(zombie_cure_reactions) != 4)
stack_trace("GLOB.chemical_reactions_list only had [length(zombie_cure_reactions)] zombie cure reactions, when it should have had 4")
var/list/info_builder = list(
"I've done my best to cure them but... I'm out of time. I'd rather die than be bitten and turn into one of them. Below is a compilation of my research of the virus... Good luck.
"
)
for(var/counter in list("1", "2", "3", "4"))
var/datum/chemical_reaction/zombie/level = zombie_cure_reactions[counter]
if(!level)
continue
info_builder += "[level.name]
"
if(counter == "4")
var/datum/reagent/reagent_type
for(var/reagent in level.required_reagents)
if(reagent == "blood")
continue
reagent_type = GLOB.chemical_reagents_list[reagent]
break
info_builder += "I wasn't able to finalize this final Omega sequence. But I know it must contain [reagent_type.name]."
break
info_builder += ""
for(var/reagent in level.required_reagents)
if(reagent == "blood")
continue
var/datum/reagent/reagent_type = GLOB.chemical_reagents_list[reagent]
info_builder += "- [reagent_type.name]"
info_builder += "
"
info = info_builder.Join("")
/obj/item/paper/evilfax
name = "Centcomm Reply"
info = ""
var/mytarget = null
var/myeffect = null
var/used = FALSE
var/countdown = 60
var/activate_on_timeout = FALSE
var/faxmachineid = null
/obj/item/paper/evilfax/show_content(mob/user, forceshow = 0, forcestars = 0, infolinks = 0, view = 1)
if(user == mytarget)
if(iscarbon(user))
var/mob/living/carbon/C = user
evilpaper_specialaction(C)
..()
else
// This should never happen, but just in case someone is adminbussing
evilpaper_selfdestruct()
else
if(mytarget)
to_chat(user,"This page appears to be covered in some sort of bizzare code. The only bit you recognize is the name of [mytarget]. Perhaps [mytarget] can make sense of it?")
else
evilpaper_selfdestruct()
/obj/item/paper/evilfax/New()
..()
START_PROCESSING(SSobj, src)
/obj/item/paper/evilfax/Destroy()
STOP_PROCESSING(SSobj, src)
if(mytarget && !used)
var/mob/living/carbon/target = mytarget
target.ForceContractDisease(new /datum/disease/transformation/corgi(0))
return ..()
/obj/item/paper/evilfax/process()
if(!countdown)
if(mytarget)
if(activate_on_timeout)
evilpaper_specialaction(mytarget)
else
message_admins("[mytarget] ignored an evil fax until it timed out.")
else
message_admins("Evil paper '[src]' timed out, after not being assigned a target.")
used = TRUE
evilpaper_selfdestruct()
else
countdown--
/obj/item/paper/evilfax/proc/evilpaper_specialaction(mob/living/carbon/target)
spawn(30)
if(iscarbon(target))
var/obj/machinery/photocopier/faxmachine/fax = locateUID(faxmachineid)
if(myeffect == "Borgification")
to_chat(target,"You seem to comprehend the AI a little better. Why are your muscles so stiff?")
target.ForceContractDisease(new /datum/disease/transformation/robot(0))
else if(myeffect == "Corgification")
to_chat(target,"You hear distant howling as the world seems to grow bigger around you. Boy, that itch sure is getting worse!")
target.ForceContractDisease(new /datum/disease/transformation/corgi(0))
else if(myeffect == "Death By Fire")
to_chat(target,"You feel hotter than usual. Maybe you should lowe-wait, is that your hand melting?")
var/turf/simulated/T = get_turf(target)
var/obj/effect/hotspot/hotspot = new /obj/effect/hotspot/fake(T)
hotspot.temperature = 1000
hotspot.recolor()
target.adjustFireLoss(150) // hard crit, the burning takes care of the rest.
else if(myeffect == "Total Brain Death")
to_chat(target,"You see a message appear in front of you in bright red letters: YHWH-3 ACTIVATED. TERMINATION IN 3 SECONDS")
ADD_TRAIT(target, TRAIT_BADDNA, "evil_fax")
target.adjustBrainLoss(125)
else if(myeffect == "Honk Tumor")
if(!target.get_int_organ(/obj/item/organ/internal/honktumor))
var/obj/item/organ/internal/organ = new /obj/item/organ/internal/honktumor
to_chat(target,"Life seems funnier, somehow.")
organ.insert(target)
else if(myeffect == "Cluwne")
if(ishuman(target))
var/mob/living/carbon/human/H = target
to_chat(H, "You feel surrounded by sadness. Sadness... and HONKS!")
H.makeCluwne()
else if(myeffect == "Demote")
GLOB.major_announcement.Announce("[target.real_name] is hereby demoted to the rank of Assistant. Process this demotion immediately. Failure to comply with these orders is grounds for termination.","CC Demotion Order")
for(var/datum/data/record/R in sortRecord(GLOB.data_core.security))
if(R.fields["name"] == target.real_name)
R.fields["criminal"] = SEC_RECORD_STATUS_DEMOTE
R.fields["comments"] += "Central Command Demotion Order, given on [GLOB.current_date_string] [station_time_timestamp()]
Process this demotion immediately. Failure to comply with these orders is grounds for termination."
update_all_mob_security_hud()
else if(myeffect == "Demote with Bot")
GLOB.major_announcement.Announce("[target.real_name] is hereby demoted to the rank of Assistant. Process this demotion immediately. Failure to comply with these orders is grounds for termination.","CC Demotion Order")
for(var/datum/data/record/R in sortRecord(GLOB.data_core.security))
if(R.fields["name"] == target.real_name)
R.fields["criminal"] = SEC_RECORD_STATUS_ARREST
R.fields["comments"] += "Central Command Demotion Order, given on [GLOB.current_date_string] [station_time_timestamp()]
Process this demotion immediately. Failure to comply with these orders is grounds for termination."
update_all_mob_security_hud()
if(fax)
var/turf/T = get_turf(fax)
new /obj/effect/portal(T)
new /mob/living/simple_animal/bot/secbot(T)
else if(myeffect == "Revoke Fax Access")
GLOB.fax_blacklist += target.real_name
if(fax)
fax.authenticated = 0
else if(myeffect == "Angry Fax Machine")
if(fax)
fax.become_mimic()
else
message_admins("Evil paper [src] was activated without a proper effect set! This is a bug.")
used = TRUE
evilpaper_selfdestruct()
/obj/item/paper/evilfax/proc/evilpaper_selfdestruct()
visible_message("[src] spontaneously catches fire, and burns up!")
qdel(src)
/obj/item/paper/pickup(user)
..()
if(!contact_poison || !ishuman(user))
return
var/mob/living/carbon/human/H = user
var/obj/item/clothing/gloves/G = H.gloves
if(!istype(G) || !G.safe_from_poison)
H.reagents.add_reagent(contact_poison, contact_poison_volume)
add_attack_logs(src, user, "Picked up [src], coated with [contact_poison] by [contact_poison_poisoner]")
contact_poison = null
/obj/item/paper/researchnotes
name = "paper - 'Research Notes'"
info = "The notes appear gibberish to you. Perhaps a scientific analyzer in R&D could make sense of them?"
origin_tech = "combat=4;materials=4;engineering=4;biotech=4"
/obj/item/paper/researchnotes/Initialize(mapload)
. = ..()
var/list/possible_techs = list("materials", "engineering", "plasmatech", "powerstorage", "bluespace", "biotech", "combat", "magnets", "programming", "syndicate")
var/mytech = pick(possible_techs)
var/mylevel = rand(7, 9)
origin_tech = "[mytech]=[mylevel]"
name = "research notes - [mytech] [mylevel]"
// I want this type dead
/obj/item/paper/instruction
name = "Instruction Notes"
/obj/item/paper/instruction/pacman_generator
name = "Instructions for P.A.C.M.A.N. Generator series"
info = "P.A.C.M.A.N. are commonly used as 'Emergency' power generators, with its upgraded version being capable of utilizing uranium and plasma sheets to function. Simply anchor on the power cable node, insert the plasma sheet, select the level and turn it ON to generate power, just make sure to not overheat it or it will explode."