Files
CHOMPStation2/code/game/objects/mail.dm
CHOMPStation2StaffMirrorBot f7de0bb70b [MIRROR] Start of TG Click Code Port (#12071)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
2025-12-06 03:18:32 -05:00

529 lines
23 KiB
Plaintext

/obj/item/mail
name = "mail"
desc = "An officially postmarked, tamper-evident parcel regulated by CentCom and made of high-quality materials."
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "mail_small"
item_flags = NOBLUDGEON
w_class = ITEMSIZE_SMALL
drop_sound = 'sound/items/drop/paper.ogg'
pickup_sound = 'sound/items/pickup/paper.ogg'
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
// Destination tagging for the mail sorter.
var/sortTag = 0
// Who this mail is for and who can open it.
var/datum/weakref/recipient_ref
// How many goodies this mail contains.
var/goodie_count = 1
// Goodies which can be given to anyone.
// Weight sum will be 1000
var/list/generic_goodies = list(
/obj/item/spacecash/c50 = 75,
/obj/item/reagent_containers/food/drinks/cans/cola = 75,
/obj/item/reagent_containers/food/snacks/chips = 75,
/obj/item/reagent_containers/food/drinks/coffee = 75,
/obj/item/reagent_containers/food/drinks/tea = 75,
/obj/item/reagent_containers/food/drinks/glass2/coffeemug/nt = 50,
/obj/item/spacecash/c100 = 40,
/obj/item/spacecash/c200 = 25,
/obj/item/spacecash/c500 = 15,
/obj/item/spacecash/c1000 = 5,
/obj/item/reagent_containers/food/drinks/bluespace_coffee = 5
)
// Overlays (pure fluff)
// Does the letter have the postmark overlay?
var/postmarked = TRUE
// Does the letter have a stamp overlay?
var/stamped = TRUE
// List of all stamp overlays on the letter.
var/list/stamps = list()
// Maximum number of stamps on the letter.
var/stamp_max = 1
// Physical offset of stamps on the object. X direction.
var/stamp_offset_x = 0
// Physical offset of stamps on the object. Y direction.
var/stamp_offset_y = 2
// If the mail is actively being opened right now
var/opening = FALSE
// If the mail has been scanned with a mail scanner
var/scanned
// Does it have a colored envelope?
var/colored_envelope
/obj/item/mail/container_resist(mob/living/M)
if(istype(M, /mob/living/voice)) return
if(isdisposalpacket(loc))
M.forceMove(loc)
else
M.forceMove(get_turf(src))
to_chat(M, span_warning("You climb out of \the [src]."))
/obj/item/mail/envelope
name = "envelope"
icon_state = "mail_large"
goodie_count = 2
stamp_max = 2
stamp_offset_y = 5
/obj/item/mail/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_MOVABLE_DISPOSING, PROC_REF(disposal_handling))
// Icons
// Add some random stamps.
if(stamped == TRUE)
var/stamp_count = rand(1, stamp_max)
for(var/i = 1, i <= stamp_count, i++)
stamps += list("stamp_[rand(2, 8)]")
/obj/item/mail/blank
desc = "A blank envelope."
description_info = "An object can be placed into the envelope, click on it with an empty hand to seal it. Alt-Click to retrieve the items from inside before sealing."
stamped = FALSE
postmarked = FALSE
var/set_recipient = FALSE
var/set_content = FALSE
var/sealed = FALSE
var/list/mail_recipients
/obj/item/mail/blank/attackby(obj/item/W, mob/user)
..()
if(istype(W, /obj/item/pen) && sealed && !set_recipient)
if(setRecipient(user))
set_recipient = TRUE
add_fingerprint(user)
return
if(!set_content && !sealed)
if(!do_after(user, 1.5 SECONDS, target = user))
set_content = FALSE
user.drop_item()
W.forceMove(src)
balloon_alert(user, "placed \the [W] into \the [src]")
set_content = TRUE
description_info = "Click with an empty hand to seal it, or Alt-Click to retrieve the object out."
return
return
/obj/item/mail/proc/setRecipient(mob/user)
var/list/recipients = list()
var/mob/living/recipient_mob
for(var/mob/living/player in GLOB.player_list)
if(!player_is_antag(player.mind) && player.mind.show_in_directory)
recipients += player
recipient_mob = tgui_input_list(usr, "Choose recipient", "Recipients", recipients, recipients)
if(recipient_mob)
initialize_for_recipient(recipient_mob.mind, preset_goodies = TRUE)
return TRUE
/obj/item/mail/blank/click_alt(mob/user)
if(sealed)
return
for(var/obj/stuff as anything in contents)
if(isitem(stuff))
user.put_in_hands(stuff)
else
stuff.forceMove(drop_location())
set_content = FALSE
description_info = initial(description_info)
/obj/item/mail/blank/ShiftClick(mob/user)
..()
if(!sealed)
var/sender = tgui_input_text(user, "Write name", "Name", user.name)
if(sender)
desc = "A signed envelope, from [sender]."
/obj/item/mail/blank/attack_self(mob/user)
if(!sealed)
if(!do_after(user, 1.5 SECONDS, target = user))
sealed = FALSE
sealed = TRUE
description_info = "Shift Click to add the sender's name to the envelope, or attack with a pen to set a receiver."
return
. = ..()
/obj/item/mail/update_icon()
. = ..()
cut_overlays()
if(colored_envelope)
var/image/envelope = image(icon, icon_state)
envelope.color = colored_envelope
add_overlay(envelope)
var/bonus_stamp_offset = 0
for(var/stamp in stamps)
var/image/stamp_image = image(
icon_state = stamp,
pixel_x = stamp_offset_x,
pixel_y = stamp_offset_y + bonus_stamp_offset
)
stamp_image.appearance_flags |= RESET_COLOR
add_overlay(stamp_image)
bonus_stamp_offset -= 5
if(postmarked == TRUE)
var/image/postmark_image = image(
icon = icon,
icon_state = "postmark",
pixel_x = stamp_offset_x + rand(-4, 0),
pixel_y = stamp_offset_y + rand(bonus_stamp_offset + 3, 1)
)
postmark_image.appearance_flags |= RESET_COLOR
add_overlay(postmark_image)
/obj/item/mail/attackby(obj/item/W as obj, mob/user as mob)
. = ..()
// Destination tagging
if(istype(W, /obj/item/destTagger))
var/obj/item/destTagger/O = W
if(O.currTag)
if(src.sortTag != O.currTag)
balloon_alert(user, "labeled for [O.currTag].")
src.sortTag = O.currTag
playsound(src, 'sound/machines/twobeep.ogg', 50, 1)
W.description_info = " It is labeled for [O.currTag]"
else
balloon_alert(user, "already labeled for [O.currTag].")
else
balloon_alert(user, "destination not set!")
return
/obj/item/mail/attack_self(mob/user)
if(!unwrap(user))
return FALSE
return after_unwrap(user)
/obj/item/mail/proc/unwrap(mob/user)
if(recipient_ref)
var/datum/mind/recipient = recipient_ref.resolve()
if(recipient && recipient.current?.dna.unique_enzymes != user.dna.unique_enzymes)
balloon_alert(user, "you can't open somebody's mail! That's <em>illegal</em>")
return FALSE
if(opening)
balloon_alert(user, "already opening that!")
return FALSE
opening = TRUE
if(!do_after(user, 1.5 SECONDS, target = user))
opening = FALSE
return FALSE
return TRUE
/obj/item/mail/proc/after_unwrap(mob/user)
user.temporarilyRemoveItemFromInventory(src, TRUE)
for(var/obj/stuff as anything in contents)
if(isitem(stuff))
user.put_in_hands(stuff)
else
stuff.forceMove(drop_location())
//Now here's the kicker
if(HAS_TRAIT(user, TRAIT_UNLUCKY) && prob(5)) //1 in 20 chance for your mail to be rigged with a glitter bomb
to_chat(user, span_bolddanger("You open the mail and - OH SHIT IS THAT A BOMB!"))
var/obj/item/grenade/confetti/confetti_nade = new /obj/item/grenade/confetti()
confetti_nade.name = "Pipebomb"
confetti_nade.desc = span_bolddanger("What the hell are you looking at it for?! RUN!!")
confetti_nade.activate()
playsound(loc, 'sound/items/poster_ripped.ogg', 100, TRUE)
qdel(src)
/obj/item/mail/proc/initialize_for_recipient(var/datum/mind/recipient, var/preset_goodies = FALSE)
var/current_title = recipient.role_alt_title ? recipient.role_alt_title : recipient.assigned_role
name = "[initial(name)] for [recipient.name] ([current_title])"
recipient_ref = WEAKREF(recipient)
var/datum/job/this_job = SSjob.name_occupations[recipient.assigned_role]
var/list/goodies = generic_goodies
if(this_job)
colored_envelope = this_job.get_mail_color()
if(!preset_goodies)
var/list/job_goodies = this_job.get_mail_goodies(recipient.current, current_title)
if(LAZYLEN(job_goodies))
if(this_job.get_mail_goodies(recipient.current, current_title))
goodies = job_goodies
else
goodies += job_goodies
if(!preset_goodies)
for(var/iterator in 1 to goodie_count)
var/target_good = pickweight(goodies)
var/atom/movable/target_atom = new target_good(src)
log_game("[key_name(recipient)] received [target_atom.name] in the mail ([target_good])")
update_icon()
return TRUE
/obj/item/mail/proc/disposal_handling(disposal_source, obj/structure/disposalholder/disposal_holder, obj/machinery/disposal/deliveryChute, hasmob)
SIGNAL_HANDLER
if(!hasmob)
disposal_holder.destinationTag = sortTag
// Mail spawn for events
/datum/admins/proc/spawn_mail(var/object as text)
set name = "Spawn Mail"
set category = "Fun.Event Kit"
set desc = "Spawn mail for a specific player, with a specific item."
if(!check_rights(R_SPAWN)) return
var/list/types = typesof(/atom)
var/list/matches = new()
var/list/recipients = list()
var/datum/mind/recipient_mind
for(var/path in types)
if(findtext("[path]", object))
matches += path
if(matches.len==0)
return
var/chosen
if(matches.len==1)
chosen = matches[1]
else
chosen = tgui_input_list(usr, "Select an atom type", "Spawn Atom in Mail", matches)
if(!chosen)
return
for(var/mob/living/player in GLOB.player_list)
recipients += player
var/mob/living/chosen_player = tgui_input_list(usr, "Choose recipient", "Recipients", recipients, recipients)
recipient_mind = chosen_player.mind
if(!recipient_mind)
return
var/shuttle_spawn = tgui_alert(usr, "Spawn mail at location or in the shuttle?", "Spawn mail", list("Location", "Shuttle"))
if(!shuttle_spawn)
return
if(shuttle_spawn == "Shuttle")
var/obj/item/mail/new_mail = new
new_mail.initialize_for_recipient(recipient_mind, TRUE)
new chosen(new_mail)
SSmail.admin_mail += new_mail
log_and_message_admins("spawned [chosen] inside an envelope at the shuttle")
else
var/obj/item/mail/ground_mail = new /obj/item/mail(usr.loc)
ground_mail.initialize_for_recipient(recipient_mind, TRUE)
new chosen(ground_mail)
log_and_message_admins("spawned [chosen] inside an envelope at ([usr.x],[usr.y],[usr.z])")
feedback_add_details("admin_verb","SM")
// Mail Crate
/obj/structure/closet/crate/mail
name = "mail crate"
desc = "An official mail crate from CentCom"
points_per_crate = 0
closet_appearance = /decl/closet_appearance/crate/nanotrasen
/obj/structure/closet/crate/mail/full/Initialize(mapload)
. = ..()
var/list/mail_recipients = list()
for(var/mob/living/carbon/human/alive in GLOB.player_list)
if(alive.stat != DEAD && alive.client && alive.client.inactivity <= 10 MINUTES)
mail_recipients += alive
for(var/iterator in 1 to storage_capacity)
var/obj/item/mail/new_mail
if(prob(70))
new_mail = new /obj/item/mail(src)
else
new_mail = new /obj/item/mail/envelope(src)
var/mob/living/carbon/human/mail_to
if(mail_to)
new_mail.initialize_for_recipient(mail_to.mind)
mail_recipients -= mail_to
else
new_mail.junk_mail()
// Mailbag
/obj/item/storage/bag/mail
name = "mail bag"
desc = "A bag for letters, envelopes and other postage."
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "mailbag"
slot_flags = SLOT_BELT | SLOT_POCKET
w_class = ITEMSIZE_NORMAL
storage_slots = 31
max_storage_space = 50
max_w_class = ITEMSIZE_NORMAL
use_to_pickup = TRUE
allow_quick_gather = TRUE
can_hold = list(
/obj/item/mail,
/obj/item/smallDelivery,
/obj/item/paper,
/obj/item/stolenpackage,
/obj/item/contraband,
/obj/item/mail_scanner,
/obj/item/pen
)
// Mail Scanner
/obj/item/mail_scanner
name = "mail scanner"
desc = "Sponsored by the Intergalactic Mail Service, this device logs mail deliveries in exchance for financial compensation."
force = 0
throwforce = 0
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "mail_scanner"
slot_flags = SLOT_BELT
w_class = ITEMSIZE_SMALL
var/cargo_points = 5
var/obj/item/mail/saved
/obj/item/mail_scanner/examine(mob/user)
. = ..()
. += span_notice("Scan a letter to log it into the active database, then scan the person you wish to hand the letter to. Correctly scanning the recipient of the letter logged into the active database will add points to the supply budget.")
/obj/item/mail_scanner/attack()
return
/obj/item/mail_scanner/afterattack(atom/A, mob/user)
if(istype(A, /obj/item/mail))
var/obj/item/mail/saved_mail = A
if(saved_mail.scanned)
balloon_alert(user, "already scanned!")
playsound(loc, 'sound/items/mail/maildenied.ogg', 50, TRUE)
return
balloon_alert(user, "added to database")
playsound(loc, 'sound/items/mail/mailscanned.ogg', 50, TRUE)
saved = A
return
if(isliving(A))
if(!saved)
balloon_alert(user, "no logged mail!")
playsound(loc, 'sound/items/mail/maildenied.ogg', 50, TRUE)
return
var/datum/mind/recipient
if(saved.recipient_ref)
recipient = saved.recipient_ref.resolve()
if(isnull(recipient) || isnull(recipient.current))
return
if(recipient.current.stat == DEAD)
to_chat(user, span_warning("Consent Verification failed: You can't deliver mail to a corpse!"))
playsound(loc, 'sound/items/mail/maildenied.ogg', 50, TRUE)
return
if(recipient.current.dna.unique_enzymes != recipient.current.dna.unique_enzymes)
to_chat(user, span_warning("Identity Verification failed: Target is not authorized recipient of this envelope!"))
playsound(loc, 'sound/items/mail/maildenied.ogg', 50, TRUE)
return
if(!recipient.current.client)
to_chat(user, span_warning("Consent Verification failed: The scanner does not accept orders from SSD crewmemmbers!"))
playsound(loc, 'sound/items/mail/maildenied.ogg', 50, TRUE)
return
saved.scanned = TRUE
saved = null
cargo_points = rand(5, 10)
to_chat(user, span_notice("Succesful delivery acknowledged! [cargo_points] points added to Supply."))
playsound(loc, 'sound/items/mail/mailapproved.ogg', 50, TRUE)
SSsupply.points += cargo_points
// JUNK MAIL STUFF
/obj/item/mail/junkmail/Initialize(mapload)
. = ..()
junk_mail()
/obj/item/mail/proc/junk_mail()
var/obj/junk = /obj/item/paper/fluff/junkmail_generic
var/special_name = FALSE
if(prob(25))
special_name = TRUE
junk = pick(list(
/obj/item/paper/pamphlet/gateway,
/obj/item/paper/pamphlet/violent_video_games,
/obj/item/paper/pamphlet/radstorm,
/obj/item/paper/fluff/junkmail_redpill,
/obj/effect/decal/cleanable/ash,
/obj/item/paper/fluff/love_letter,
/obj/item/reagent_containers/food/snacks/donkpocket/berry,
/obj/item/reagent_containers/food/snacks/donkpocket/dankpocket,
/obj/item/reagent_containers/food/snacks/donkpocket/gondola,
/obj/item/reagent_containers/food/snacks/donkpocket/honk,
/obj/item/reagent_containers/food/snacks/donkpocket/pizza,
/obj/item/reagent_containers/food/snacks/donkpocket/spicy,
/obj/item/reagent_containers/food/snacks/donkpocket/teriyaki,
/obj/item/toy/figure,
/obj/item/contraband/package,
/obj/item/tool/screwdriver/sdriver,
/obj/item/storage/briefcase/target_toy
))
var/list/junk_names = list(
/obj/item/paper/pamphlet/gateway = "[initial(name)] for BRAVE adventurers",
/obj/item/paper/pamphlet/violent_video_games = "[initial(name)] for the truth about the arcade CentComm doesn't want to hear",
/obj/item/paper/pamphlet/radstorm = "[initial(name)] for the threats in space",
/obj/item/paper/fluff/junkmail_redpill = "[initial(name)] for those feeling tired working at Nanotrasen",
/obj/effect/decal/cleanable/ash = "[initial(name)] with INCREDIBLY IMPORTANT ARTIFACT- DELIVER TO SCIENCE DIVISION. HANDLE WITH CARE.",
/obj/item/paper/fluff/love_letter = "[initial(name)] for STUPID CARGO MAILMEN.",
/obj/item/reagent_containers/food/snacks/donkpocket/berry = "[initial(name)] with NEW BERRY-POCKET.",
/obj/item/reagent_containers/food/snacks/donkpocket/dankpocket = "[initial(name)] with NEW DANK-POCKET.",
/obj/item/reagent_containers/food/snacks/donkpocket/gondola = "[initial(name)] with NEW GONDOLA-POCKET.",
/obj/item/reagent_containers/food/snacks/donkpocket/honk = "[initial(name)] with NEW HONK-POCKET.",
/obj/item/reagent_containers/food/snacks/donkpocket/pizza = "[initial(name)] with NEW PIZZA-POCKET.",
/obj/item/reagent_containers/food/snacks/donkpocket/spicy = "[initial(name)] with NEW SPICY-POCKET.",
/obj/item/reagent_containers/food/snacks/donkpocket/teriyaki = "[initial(name)] with NEW TERIYAKI-POCKET.",
/obj/item/toy/figure = "[initial(name)] from DoN**K*oC",
/obj/item/contraband/package = "[pick("oddly shaped", "strangely wrapped", "weird", "bulging")] [initial(name)]",
/obj/item/tool/screwdriver/sdriver = "[initial(name)] for Proffesor Who",
/obj/item/storage/briefcase/target_toy = "[initial(name)] for SIMPATHY, SUCCESS, MANHATTAN, BELIEFS"
)
name = special_name ? junk_names[junk] : "important [initial(name)]"
junk = new junk(src)
update_icon()
return TRUE
/obj/item/paper/fluff/junkmail_generic/Initialize(mapload)
. = ..()
info = pick(
prob(5);"Hello! I am executive at Nanotrasen Nigel Takall. Due to accounting error all of my salary is stored in an account unreachable. In order to withdraw I am required to utilize your account to make a deposit to confirm my reality situation. In exchange for a temporary deposit I will give you a payment 1000 credits. All I need is access to your account. Will you be assistant please?",
prob(5);"WE NEED YOUR BLOOD! WE ARE AN ANARCHO-COMMUNIST VAMPIRE COMMUNE. BLOOD ONLY LASTS 42 DAYS BEFORE IT GOES BAD! WE DO NOT HAVE NANOTRASEN STASIS! PLEASE, SEND BLOOD! THANK YOU! OR WE KILL YOU!",
prob(5);"Triple deposits are waiting for you at MaxBet Online when you register to play with us. You can qualify for a 200% Welcome Bonus at MaxBet Online when you sign up today. Once you are a player with MaxBet, you will also receive lucrative weekly and monthly promotions. You will be able to enjoy over 450 top-flight casino games at MaxBet.",
prob(5);"Hello !, I'm the former HoS of your deerest station accused by the Nanotrasen of being a traitor . I was the best we had to offer but it seems that nanotramsen has turned their back on me. I need 2000 credits to pay for my bail and then we can restore order on space station 14!",
prob(5);"Hello, I noticed you riding in a 2555 Ripley and wondered if you'd be interested in selling. Low mileage mechs sell very well in our current market. Please call 223-334-3245 if you're interested",
prob(5);"Resign Now. I'm on you now. You are fucking with me now Let's see who you are. Watch your back , bitch. Call me. Don't be afraid, you piece of shit. Stand up. If you don't call, you're just afraid. And later: I already know where you live, I'm on you. You might as well call me. You will see me. I promise. Bro.",
prob(5);"Clown Planet Is Going To Become Awesome Possum Again! If This Wasn't Sent To A Clown, Disregard. If This Was Sent To A Mime, Blow It Out Your Ass, Space Frenchie! Anyway! We Make Big Progress On Clown Planet After Stupid Mimes BLOW IT ALL TO SAM HELL!!!!! Sorry I Am Mad.. Anyway Come And Visit, Honkles! We Thought You Were Dead Long Time :^()",
prob(5);"MONTHPEOPLE ARE REAL, THE NANOTRASEN DEEP STATE DOESN'T WANT YOU TO SEE THIS! I'VE SEEN THEM IN REAL LIFE, THEY HAVE HUGE EYEBALLS AND NO HEAD. THEY'RE SENTIENT CALENDARS. I'M NOT CRAZY. SEARCH THE CALENDAR INCIDENT ON NTNET. USE A PROXY! #BIGTRUTHS #WAKEYWAKEYSPACEMEN #21STOFSEPTEMBER",
prob(5);"hello :wave::wave: nanotrasens! fuck :point_left::ok_hand: the syndicate! they :older_woman: got ☄ me :heart_eyes::cold_sweat: questioning my :pregnant_woman: loyalty to nanotraben! so :ok_hand::100: please :tired_face: lets :no_entry::eyes: gather our :camera_with_flash::poop: energy :sunglasses: and :moneybag::symbols: QUICK. :astonished: send this :wastebasket::point_left: to :sweat_drops::pill: 10 :joy::joy: other loyal :100: nanotraysens to :sweat_drops::thinking: show we :dog: dont :person_gesturing_no::no_entry_sign: take :shopping_bags: nothing from :joy: the ✝ syndicate!! bless your :point_right_tone2: heart :heart_eyes::broken_heart:",
prob(5);"Hello, my name is Immigration officer Mimi Sashimi from the American-Felinid Homeworld consulate. It appears your current documents are either inaccurate if not entirely fraudulent. This action in it's current state is a federal offense as listed in the United Earth Commission charter section NY-4. Please pay a fine of 300,000 Space credits or $3000 United States Dollars or face deportation",
prob(5);"Hi %name%, We are unable to validate your billing information for the next billing cycle of your subscription to HONK Weekly therefore we'll suspend your membership if we do not receive a response from you within 48 hours. Obviously we'd love to have you back, simply mail %address% to update your details and continue to enjoy all the best pranks & gags without interruption.",
prob(5);"Loyal customer, DonkCo Customer Service. We appreciate your brand loyalty support. As such, it is our responsibility and pleasure to inform you of the status of your package. Your package for one \"Moth-Fuzz Parka\" has been delayed. Due to local political tensions, an animal rights group has seized and eaten your package. We appreciate the patience, DonkCo",
prob(5);"MESSAGE FROM CENTCOMM HIGH COMMAND: DO NOT ACCEPT THE FRIEND REQUEST OF TICKLEBALLS THE CLOWN. HE IS NOT FUNNY AND ON TOP OF THAT HE WILL HACK YOUR NTNET ACCOUNT AND MAKE YOU UNFUNNY TOO. YOU WILL LOSE ALL YOUR SPACECREDITS!!!!! SPREAD THE WORD. ANYONE WHO BECOMES FRIENDS WITH TINKLEBALLS THE CLOWN IS GOING TO LOSE ALL OF THEIR SPACECREDITS AND LOOK LIKE A HUGE IDIOT.",
prob(5);"i WAS A NORMAL BOY AND I CAME HOME FROM SCHOOL AND I WANTED TO PLAY SOME ORION TRAIL WHICH IS A VERY FUN GAME BUT WHEN WENT TO ARCADE MACHINE SOMETHING WAS WEIRD TEH LOGO HASD BLOD IN IT AND I BECAME VERY SCARE AND I CHECK OPTIONS AND TEHRES ONLY 1 \"GO BACK\" I CKLICK IT AND I SEE CHAT SI EMPTY THERE'S ONLY ONE CHARACTER CALLED \"CLOSE TEH GAME \" AND I GO TO ANOTHER MACHINE AND PLAY THERE BUT WHEN I PLAY GAME IS FULL OF BLOOD AND DEAD BODIES FROM SPACEMAN LOOK CLOSER AND SEE CLOWN AND CLOWN COMES CLOSER AND LOOKS AT ME AND SAYS \"DON'T SAY I DIKDNT' WWARN YOU\" AND CLOWN CLOSEUP APPEARS WITH BLOOD-RED HYPERREALISTIC EYES AND HE TELLS ME \"YOU WILL BE THE NEXT ONE\" AND ARCADE MACHINE POWER SHUT OFF AND THAT NITE CLOWN APPEAR AT MY WINDOW AND KILL ME AT 3 AM AND NOW IM DEAD AND YOU WILL BE TRHNE NEXT OEN UNLESS YOU PASTE THIS STORY TO 10 NTNET FRIENDS",
)
/obj/item/paper/fluff/junkmail_redpill
name = "smudged paper"
icon_state = "scrap"
/obj/item/paper/fluff/junkmail_redpill/Initialize(mapload)
. = ..()
info = "You need to escape the simulation. Don't forget the numbers, they help you remember: '[rand(0,9)]*[rand(0,9)][rand(0,9)]...'"
/obj/item/paper/fluff/love_letter
name = "love letter"
icon_state = "paper_words"
/obj/item/paper/fluff/love_letter/Initialize(mapload)
. = ..()
info = "I HATE CARGO MAIL\n\"GRAA LEMME BREAK YOUR DOORS DOWN I GOTTA GIVE YOU MAIL\nREE YOU GOTTA GET YOUR MAIL I SORTED IT\nYOU'RE WASTIN YOUR TIME IF YOU DONT GET MAIL YOU NEED TO GET YOUR MAIL NOW\nWHY ARENT YO UGETTING YOUR MAIL RAAA\""
/obj/item/paper/fluff/junkmail_generic
name = "important document"
icon_state = "paper_words"