From b9c15e34c8afdb633dd54f48e6ca9dcd722bbdd4 Mon Sep 17 00:00:00 2001 From: Rhials Date: Sat, 3 Dec 2022 15:48:06 -0500 Subject: [PATCH] Big Paperwork: Adds the Paperwork loan offer, paperwork fraud, and ancient paperwork! (#70863) Adds paperwork -- an indecipherable mess of papers that only a seasoned department head could hope to decipher. If processed and sent to Central Command via the cargo shuttle, the budget gets a bonus. Paperwork is distributed through a new Shuttle Loan offer. A nearby station needs some paperwork reviewed. Do you have what it takes to handle BIG PAPERWORK? Processing paperwork is relatively simple. You can inspect it to see which head of staff it "belongs" to, and you can use their stamp to complete it. You get a lot of these, so the bonuses can add up if you get them all in. Just be careful not to return any unprocessed paperwork. With big paperwork comes big paperwork fraud, and big fines. You can photocopy your completed paperwork to double-dip with Central Command and squeeze out a little bit more money. The more paperwork fraud you commit, the higher the chance you'll be caught and fined. On top of that: Some say that in the long forgotten halls of maintenance, there lies _ancient paperwork_. Documents whose importance has long since passed, but are still important for bookkeeping at Central Command. With a keen eye, you might spot one of these while scouring through maintenance. Make sure it gets forwarded to the right person, cargo will thank you. --- code/_globalvars/lists/maintenance_loot.dm | 1 + .../cargo/exports/stamped_paperwork.dm | 49 ++++ code/modules/events/shuttle_loan.dm | 13 + code/modules/paperwork/folders.dm | 9 +- code/modules/paperwork/folders_premade.dm | 5 + code/modules/paperwork/paperwork.dm | 261 ++++++++++++++++++ code/modules/paperwork/photocopier.dm | 48 +++- icons/obj/bureaucracy.dmi | Bin 25418 -> 27019 bytes tgstation.dme | 2 + 9 files changed, 385 insertions(+), 3 deletions(-) create mode 100644 code/modules/cargo/exports/stamped_paperwork.dm create mode 100644 code/modules/paperwork/paperwork.dm diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 4cfdbd71f9c..4855cb4bf97 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -336,6 +336,7 @@ GLOBAL_LIST_INIT(rarity_loot, list(//rare: really good items /obj/item/disk/nuclear/fake = 1, /obj/item/skillchip/brainwashing = 1, /obj/item/tattoo_kit = 1, + /obj/item/folder/ancient_paperwork = 1, ) = 1, )) diff --git a/code/modules/cargo/exports/stamped_paperwork.dm b/code/modules/cargo/exports/stamped_paperwork.dm new file mode 100644 index 00000000000..6f2c0e47ee1 --- /dev/null +++ b/code/modules/cargo/exports/stamped_paperwork.dm @@ -0,0 +1,49 @@ +/datum/export/paperwork + cost = CARGO_CRATE_VALUE * 3 + unit_name = "paperwork pile" + export_types = list(/obj/item/paperwork) + exclude_types = list(/obj/item/paperwork/photocopy) //Has its own category + allow_negative_cost = TRUE + +/datum/export/paperwork/get_cost(obj/item/paperwork/sold_paperwork) + var/paperwork_cost = cost + + if(sold_paperwork.stamped) + paperwork_cost = ..() + else + paperwork_cost = -init_cost //Punishment for improperly filed paperwork. + + return paperwork_cost + +/datum/export/photocopy + cost = CARGO_CRATE_VALUE + unit_name = "messy paperwork pile" + export_types = list(/obj/item/paperwork/photocopy) + allow_negative_cost = TRUE + ///Tracks the chance of losing money for trying to double-dip with photocopies. Resets every time it ruins an order. + var/backfire_chance = 0 + ///Used to track if a batch of photocopy exports has backfired + var/backfired = FALSE + +/datum/export/photocopy/get_cost(obj/item/paperwork/photocopy/sold_paperwork) + if(sold_paperwork.stamped && !backfired) //Upon backfiring, no more photocopies are processed or sold until the next cargo shipment + if(sold_paperwork.voided) + return 0 //Voided photocopies do nothing + else + backfire_chance += rand(15,25) + if(prob(backfire_chance)) + backfire_chance = 0 + backfired = TRUE + return -init_cost * 4 //too high of an amount to allow for infinite money + else + return ..() + + else + return -init_cost + +/datum/export/photocopy/total_printout(datum/export_report/ex, notes) + . = ..() + + if(backfired) + backfired = FALSE + . += " Counterfeit paperwork was detected in this shipment. A fine has been taken from your budget as a result." diff --git a/code/modules/events/shuttle_loan.dm b/code/modules/events/shuttle_loan.dm index f4db8fe5d0d..4b90dc7f3ab 100644 --- a/code/modules/events/shuttle_loan.dm +++ b/code/modules/events/shuttle_loan.dm @@ -6,6 +6,7 @@ #define PIZZA_DELIVERY 6 #define ITS_HIP_TO 7 #define MY_GOD_JC 8 +#define PAPERS_PLEASE 9 /datum/round_event_control/shuttle_loan name = "Shuttle Loan" @@ -24,6 +25,7 @@ PIZZA_DELIVERY, RUSKY_PARTY, SPIDER_GIFT, + PAPERS_PLEASE, ) ///The types of loan events already run (and to be excluded if the event triggers). var/list/run_events = list() @@ -52,6 +54,7 @@ var/loan_type //for logging /datum/round_event/shuttle_loan/setup() + for(var/datum/round_event_control/shuttle_loan/loan_event_control in SSevents.control) //We can't call control, because it hasn't been set yet var/list/loan_list = list() loan_list += loan_event_control.shuttle_loan_offers @@ -92,6 +95,10 @@ priority_announce("Cargo: We have discovered an active Syndicate bomb near our VIP shuttle's fuel lines. If you feel up to the task, we will pay you for defusing it.", "CentCom Security Division") thanks_msg = "Live explosive ordnance incoming via supply shuttle. Evacuating cargo bay is recommended." bonus_points = 45000 //If you mess up, people die and the shuttle gets turned into swiss cheese + if(PAPERS_PLEASE) + priority_announce("Cargo: A neighboring station needs some help handling some paperwork. Could you help process it for us?", "CentCom Paperwork Division") + thanks_msg = "The cargo shuttle should return in five minutes. Payment will be rendered when the paperwork is processed and returned." + bonus_points = 0 //Payout is made when the stamped papers are returned /datum/round_event/shuttle_loan/proc/loan_shuttle() priority_announce(thanks_msg, "Cargo shuttle commandeered by CentCom.") @@ -131,6 +138,9 @@ if(MY_GOD_JC) SSshuttle.centcom_message += "Live explosive ordnance incoming. Exercise extreme caution." loan_type = "Shuttle with a ticking bomb" + if(PAPERS_PLEASE) + SSshuttle.centcom_message += "Paperwork incoming." + loan_type = "Paperwork shipment" log_game("Shuttle loan event firing with type '[loan_type]'.") @@ -277,6 +287,9 @@ else shuttle_spawns.Add(/obj/item/paper/fluff/cargo/bomb/allyourbase) + if(PAPERS_PLEASE) + shuttle_spawns += subtypesof(/obj/item/paperwork) - typesof(/obj/item/paperwork/photocopy) - typesof(/obj/item/paperwork/ancient) + var/false_positive = 0 while(shuttle_spawns.len && empty_shuttle_turfs.len) var/turf/T = pick_n_take(empty_shuttle_turfs) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 39bab876ade..0d2e2ce8367 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -8,6 +8,13 @@ resistance_flags = FLAMMABLE /// The background color for tgui in hex (with a `#`) var/bg_color = "#7f7f7f" + /// A typecache of the objects that can be inserted into a folder + var/static/list/folder_insertables = typecacheof(list( + /obj/item/paper, + /obj/item/photo, + /obj/item/documents, + /obj/item/paperwork, + )) /obj/item/folder/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] begins filing an imaginary death warrant! It looks like [user.p_theyre()] trying to commit suicide!")) @@ -62,7 +69,7 @@ /obj/item/folder/attackby(obj/item/weapon, mob/user, params) if(burn_paper_product_attackby_check(weapon, user)) return - if(istype(weapon, /obj/item/paper) || istype(weapon, /obj/item/photo) || istype(weapon, /obj/item/documents)) + if(is_type_in_typecache(weapon, folder_insertables)) //Add paper, photo or documents into the folder if(!user.transferItemToLoc(weapon, src)) return diff --git a/code/modules/paperwork/folders_premade.dm b/code/modules/paperwork/folders_premade.dm index 731b8b9efa0..77dfed6d489 100644 --- a/code/modules/paperwork/folders_premade.dm +++ b/code/modules/paperwork/folders_premade.dm @@ -53,3 +53,8 @@ . = ..() new /obj/item/documents/syndicate/mining(src) update_appearance() + +/obj/item/folder/ancient_paperwork/Initialize(mapload) + . = ..() + new /obj/item/paperwork/ancient(src) + update_appearance() diff --git a/code/modules/paperwork/paperwork.dm b/code/modules/paperwork/paperwork.dm new file mode 100644 index 00000000000..bf413e5c66d --- /dev/null +++ b/code/modules/paperwork/paperwork.dm @@ -0,0 +1,261 @@ +/** + * # Paperwork + * + * Paperwork documents that can be stamped by their associated stamp to provide a bonus to cargo. + * + * Paperwork documents are a cargo item meant to provide the opportunity to make money. + * Each piece of paperwork has its own associated stamp it needs to be stamped with. Selling a + * properly stamped piece of paperwork will provide a cash bonus to the cargo budget. If a document is + * not properly stamped it will instead drain a small stipend from the cargo budget. + * + */ + +/obj/item/paperwork + name = "paperwork documents" + desc = "A disorganized mess of documents, research results, and investigation findings." + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "docs_part" + inhand_icon_state = "paper" + throwforce = 0 + w_class = WEIGHT_CLASS_TINY + throw_range = 1 + throw_speed = 1 + layer = MOB_LAYER + ///The stamp overlay, used to show that the paperwork is complete without making a bunch of sprites + var/mutable_appearance/stamp_overlay + ///The specific stamp icon to be overlaid on the paperwork + var/stamp_icon = "paper_stamp-void" + ///The stamp needed to "complete" this form. + var/stamp_requested = /obj/item/stamp/void + ///Has the paperwork been properly stamped + var/stamped = FALSE + ///The path to the job of the associated paperwork form + var/stamp_job + ///Used to store the bonus text that displays when the paperwork's associated role reads it + var/detailed_desc + +/obj/item/paperwork/Initialize(mapload) + . = ..() + + detailed_desc = span_notice("As you sift through the papers, you slowly start to piece together what you're reading.") + +/obj/item/paperwork/attackby(obj/item/attacking_item, mob/user, params) + . = ..() + + if(!stamped) + if(istype(attacking_item, /obj/item/stamp)) + if(istype(attacking_item, stamp_requested)) //chameleon stamp does not work, this is a CRITICAL issue + add_stamp() + to_chat(user, span_notice("You skim through the papers until you find a field reading 'STAMP HERE', and complete the paperwork.")) + else + if(istype(attacking_item, /obj/item/stamp/chameleon)) + var/obj/item/stamp/chameleon/chameleon_stamp = attacking_item + to_chat(user, span_notice("[chameleon_stamp] morphs into the appropriate stamp, which you use to complete the paperwork.")) + chameleon_stamp.chameleon_action.update_item(stamp_requested) + add_stamp() + else + to_chat(user, span_warning("You hunt through the papers for somewhere to use the [attacking_item], but can't find anything.")) + +/obj/item/paperwork/examine_more(mob/user) + . = ..() + + if(ishuman(user)) + var/mob/living/carbon/human/viewer = user + if(istype(viewer.mind?.assigned_role, stamp_job)) //Examining the paperwork as the proper job gets you some bonus details + . += detailed_desc + else + if(stamped) + . += span_info("It looks like these documents have already been stamped. Now they can be returned to Central Command.") + else + var/datum/job/stamp_title = stamp_job + var/title = initial(stamp_title.title) + . += span_info("Trying to read through it makes your head spin. Judging by the few words you can make out, this looks like a job for the [title].") + +/obj/item/paperwork/suicide_act(mob/living/user) + user.visible_message(span_suicide("[user] begins insulting the inefficiency of paperwork and bureaucracy. It looks like [user.p_theyre()] trying to commit suicide!")) + + var/obj/item/paper/new_paper = new /obj/item/paper(get_turf(src)) + var/turf/turf_to_throw_at = get_ranged_target_turf(get_turf(src), pick(GLOB.alldirs)) + new_paper.throw_at(turf_to_throw_at, 2) + + var/obj/item/bodypart/BP = user.get_bodypart(pick(BODY_ZONE_HEAD)) + if(BP) + BP.dismember() + new_paper.visible_message(span_alert("The [src] launches a sheet of paper, instantly slicing off [user]'s head!")) + else + user.visible_message(span_suicide("[user] panics and starts choking to death!")) + return OXYLOSS + + return MANUAL_SUICIDE + +/** + * Adds the stamp overlay and sets "stamped" to true + * + * Adds the stamp overlay to a piece of paperwork, and sets "stamped" to true. + * Handled as a proc so that an object may be maked as "stamped" even when a stamp isn't present (like the photocopier) + */ +/obj/item/paperwork/proc/add_stamp() + stamp_overlay = mutable_appearance('icons/obj/bureaucracy.dmi', stamp_icon) + add_overlay(stamp_overlay) + stamped = TRUE + +/** + * Copies the requested stamp, associated job, and associated icon of a given paperwork type + * + * Copies the stamp/job related info of a given paperwork type to the object + * Used to mutate photocopied/ancient paperwork into behaving like their subtype counterparts without the extra details + */ +/obj/item/paperwork/proc/copy_stamp_info(obj/item/paperwork/paperwork_type) + stamp_requested = initial(paperwork_type.stamp_requested) + stamp_job = initial(paperwork_type.stamp_job) + stamp_icon = initial(paperwork_type.stamp_icon) + +//HEAD OF STAFF DOCUMENTS + +/obj/item/paperwork/cargo + stamp_requested = /obj/item/stamp/qm + stamp_job = /datum/job/quartermaster + stamp_icon = "paper_stamp-qm" + +/obj/item/paperwork/cargo/Initialize() + . = ..() + + detailed_desc += span_info(" The papers are a mess of shipping order paperwork. There's no rhyme or reason to how these documents are sorted at all.") + detailed_desc += span_info(" By the looks of it, there's nothing out of the ordinary here besides a high-priority request for a second engine.") + detailed_desc += span_info(" The 'priority request reason' field is scribbled out, but a note in the margins reads 'we just want to try two engines, don't worry about it'.") + detailed_desc += span_info(" Despite how disorganized the documents are, they're all appropriately filled in. You should probably stamp this.") + +/obj/item/paperwork/security + stamp_requested = /obj/item/stamp/hos + stamp_job = /datum/job/head_of_security + stamp_icon = "paper_stamp-hos" + +/obj/item/paperwork/security/Initialize() + . = ..() + + detailed_desc += span_info(" The stack of documents are related to a civil case being processed by a neighboring installation.") + detailed_desc += span_info(" The document requests that you review a conduct report submitted by the lawyer of the station.") + detailed_desc += span_info(" The case file details accusations against the station's security department, including misconduct, harassment, an-") + detailed_desc += span_info(" What a bunch of crap, the security team were clearly just doing what they had to. You should probably stamp this.") + +/obj/item/paperwork/service + stamp_requested = /obj/item/stamp/hop + stamp_job = /datum/job/head_of_personnel + stamp_icon = "paper_stamp-hop" + +/obj/item/paperwork/service/Initialize() + . = ..() + + detailed_desc += span_info(" You begin scanning over the document. This is a standard Nanotrasen NT-435Z3 form used for requests to Central Command.") + detailed_desc += span_info(" Looks like a nearby station has sent in a MAXIMUM priority request for coal, in seemingly ridiculous quantities.") + detailed_desc += span_info(" The reason listed for the request seems to be hastily filled in -- 'Seeking alternative methods to power the station.'") + detailed_desc += span_info(" A MAXIMUM priority request like this is nothing to balk at. You should probably stamp this.") + +/obj/item/paperwork/medical + stamp_requested = /obj/item/stamp/cmo + stamp_job = /datum/job/chief_medical_officer + stamp_icon = "paper_stamp-cmo" + +/obj/item/paperwork/medical/Initialize() + . = ..() + + detailed_desc += span_info(" The stack of documents appear to be a medical report from a nearby station, detailing the autopsy of an unknown xenofauna.") + detailed_desc += span_info(" Skipping to the end of the report reveals that the specimen was the station bartender's pet monkey.") + detailed_desc += span_info(" The specimen had been exposed to radiation during an 'unrelated incident with the engine', leading to it's mutated form.") + detailed_desc += span_info(" Regardless, the autopsy results look like they could be useful. You should probably stamp this.") + + +/obj/item/paperwork/engineering + stamp_requested = /obj/item/stamp/ce + stamp_job = /datum/job/chief_engineer + stamp_icon = "paper_stamp-ce" + +/obj/item/paperwork/engineering/Initialize() + . = ..() + + detailed_desc += span_info(" These papers are a power output report from a neighboring station. It details the power output and other engineering data regarding the station during a typical shift.") + detailed_desc += span_info(" Checking the logs, you notice the energy output and engine temperature spike dramatically, and shortly after, the surrounding department appears to be depressurized by an unknown force.") + detailed_desc += span_info(" Clearly the station's engineering department was testing an experimental engine setup, and had to use the air in the nearby rooms to help cool the engine. Totally.") + detailed_desc += span_info(" Damn, that's impressive stuff. You should probably stamp this.") + +/obj/item/paperwork/research + stamp_requested = /obj/item/stamp/rd + stamp_job = /datum/job/research_director + stamp_icon = "paper_stamp-rd" + +/obj/item/paperwork/research/Initialize() + . = ..() + + detailed_desc += span_info(" The documents detail the results of a standard ordnance test that occured on a nearby station.") + detailed_desc += span_info(" As you read further, you realize something strange with the results -- The epicenter doesn't seem to be correct.") + detailed_desc += span_info(" If your math is correct, this explosion didn't happen at the station's ordnance site, it occured in the station's engine room.") + detailed_desc += span_info(" Regardless, they're still perfectly usable test results. You should probably stamp this.") + +/obj/item/paperwork/captain + stamp_requested = /obj/item/stamp/captain + stamp_job = /datum/job/captain + stamp_icon = "paper_stamp-cap" + +/obj/item/paperwork/captain/Initialize() + . = ..() + + detailed_desc += span_info(" The documents are an unsigned correspondence from the captain's desk of a nearby station.") + detailed_desc += span_info(" It seems to be a standard check-in message, reporting that the station is functioning at optimal efficiency.") + detailed_desc += span_info(" The message repeatedly asserts that the engine is functioning 'perfectly fine' and is generating 'buttloads' of power.") + detailed_desc += span_info(" Everything checks out. You should probably stamp this.") + +//Photocopied paperwork. These are created when paperwork, whether stamped or otherwise, is printed. If it is stamped, it can be sold to cargo at the risk of the paperwork not being accepted (which takes a small fee from cargo). +//If it is unstamped it will lose you money like normal, unless it has been marked with a VOID stamp +/obj/item/paperwork/photocopy + name = "photocopied paperwork documents" + desc = "An even more disorganized mess of photocopied documents and paperwork. Did these even copy in the right order?" + stamp_icon = "paper_stamp-pc" + /// Has the photocopy been marked with a "void" stamp. Used to prevent documents from draining money if they somehow make their way to cargo. + var/voided = FALSE + +/obj/item/paperwork/photocopy/Initialize(mapload) + . = ..() + + detailed_desc = span_notice("The print job on this paperwork has rendered it almost entirely unreadable.") + +/obj/item/paperwork/photocopy/examine_more(mob/user) + . = ..() + + if(stamped) + if(voided) + . += span_notice("It looks like it's been marked as 'VOID' on the front. It's unlikely that anyone will accept these now.") + else + . += span_notice("The stamp on the front appears to be smudged and faded. Central Command will probably still accept these, right?") + else + . += span_notice("These appear to just be a photocopy of the original documents.") + +/obj/item/paperwork/photocopy/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/stamp/void) && !stamped && !voided) + to_chat(user, span_notice("You plant the [attacking_item] firmly onto the front of the documents.")) + stamp_overlay = mutable_appearance('icons/obj/bureaucracy.dmi', "paper_stamp-void") + add_overlay(stamp_overlay) + voided = TRUE + stamped = TRUE //It won't get you any money, but it also can't LOSE you money now. + return + + return ..() + +//Ancient paperwork is a subtype of paperwork, meant to be used for any paperwork not spawned by the event. +//It doesn't have any of the flavor text that the event ones spawn with. + +/obj/item/paperwork/ancient + name = "ancient paperwork" + desc = "A dusty, ugly mess of paper scraps. You can't recognize a single name, date, or topic mentioned within. How old are these?" + +/obj/item/paperwork/ancient/Initialize(mapload) + . = ..() + + detailed_desc = span_notice("It's impossible to really tell how old these are or what they're for, but Central Command might appreciate them anyways.") + + var/static/list/paperwork_to_use //Make the ancient paperwork function like one of the main types + if(!paperwork_to_use) + paperwork_to_use = subtypesof(/obj/item/paperwork) + paperwork_to_use -= (list(/obj/item/paperwork/ancient, /obj/item/paperwork/photocopy)) //Get rid of the uncopiable paperwork types + + var/obj/item/paperwork/paperwork_type = pick(paperwork_to_use) + copy_stamp_info(paperwork_type) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index e87618a4989..040221d274c 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -14,6 +14,8 @@ #define ASS_TONER_USE 0.625 /// The maximum amount of copies you can make with one press of the copy button. #define MAX_COPIES_AT_ONCE 10 +/// How much toner is used for making a copy of paperwork +#define PAPERWORK_TONER_USE 0.75 /obj/machinery/photocopier name = "photocopier" @@ -34,6 +36,8 @@ var/mob/living/ass /// A reference to the toner cartridge that's inserted into the copier. Null if there is no cartridge. var/obj/item/toner/toner_cartridge + /// A reference to an `/obj/item/paperwork` inside the copier, if one is inserted. Otherwise null. + var/obj/item/paperwork/paperwork_copy /// How many copies will be printed with one click of the "copy" button. var/num_copies = 1 /// Used with photos. Determines if the copied photo will be in greyscale or color. @@ -59,12 +63,15 @@ ass = null if(deleting_atom == toner_cartridge) toner_cartridge = null + if(deleting_atom == paperwork_copy) + paperwork_copy = null return ..() /obj/machinery/photocopier/Destroy() QDEL_NULL(paper_copy) QDEL_NULL(photo_copy) QDEL_NULL(toner_cartridge) + QDEL_NULL(paperwork_copy) ass = null //the mob isn't actually contained and just referenced, no need to delete it. return ..() @@ -143,6 +150,10 @@ if(ass) do_copy_loop(CALLBACK(src, PROC_REF(make_ass_copy)), usr) return TRUE + // Copying paperwork + if(paperwork_copy) + do_copy_loop(CALLBACK(src, PROC_REF(make_paperwork_copy)), usr) + return TRUE // Remove the paper/photo/document from the photocopier. if("remove") @@ -157,6 +168,9 @@ document_copy = null else if(check_ass()) to_chat(ass, span_notice("You feel a slight pressure on your ass.")) + else if(paperwork_copy) + remove_photocopy(paperwork_copy, usr) + paperwork_copy = null return TRUE // AI printing photos from their saved images. @@ -229,6 +243,8 @@ return toner_cartridge.charges >= (PHOTO_TONER_USE * num_copies) else if(ass) return toner_cartridge.charges >= (ASS_TONER_USE * num_copies) + else if(paperwork_copy) + return toner_cartridge.charges >= (PAPERWORK_TONER_USE * num_copies) return FALSE /** @@ -313,6 +329,23 @@ give_pixel_offset(copied_doc) toner_cartridge.charges -= DOCUMENT_TONER_USE +/** + * Handles the copying of documents. + * + * Checks first if `paperwork_copy` exists. Since this proc is called from a timer, it's possible that it was removed. + * Copies the stamp from a given piece of paperwork if it is already stamped, allowing for you to sell photocopied paperwork at the risk of losing budget money. + */ +/obj/machinery/photocopier/proc/make_paperwork_copy() + if(!paperwork_copy || !toner_cartridge) + return + var/obj/item/paperwork/photocopy/copied_paperwork = new(loc, paperwork_copy) + copied_paperwork.copy_stamp_info(paperwork_copy) + if(paperwork_copy.stamped) + copied_paperwork.stamp_icon = "paper_stamp-pc" //Override with the photocopy overlay sprite + copied_paperwork.add_stamp() + give_pixel_offset(copied_paperwork) + toner_cartridge.charges -= PAPERWORK_TONER_USE + /** * The procedure is called when printing a blank to write off toner consumption. */ @@ -430,7 +463,17 @@ else if(istype(O, /obj/item/areaeditor/blueprints)) to_chat(user, span_warning("The Blueprint is too large to put into the copier. You need to find something else to record the document.")) - else + else if(istype(O, /obj/item/paperwork)) + if(copier_empty()) + if(istype(O, /obj/item/paperwork/photocopy)) //No infinite paper chain. You need the original paperwork to make more copies. + to_chat(user, span_warning("The [O] is far too messy to produce a good copy!")) + else + if(!user.temporarilyRemoveItemFromInventory(O)) + return + paperwork_copy = O + do_insertion(O, user) + else + to_chat(user, span_warning("There is already something in [src]!")) return ..() /obj/machinery/photocopier/atom_break(damage_flag) @@ -514,7 +557,7 @@ * Return `FALSE` is the copier has something inside of it. Returns `TRUE` if it doesn't. */ /obj/machinery/photocopier/proc/copier_empty() - if(paper_copy || photo_copy || document_copy || check_ass()) + if(paper_copy || photo_copy || document_copy || check_ass() || paperwork_copy) return FALSE else return TRUE @@ -555,3 +598,4 @@ #undef DOCUMENT_TONER_USE #undef ASS_TONER_USE #undef MAX_COPIES_AT_ONCE +#undef PAPERWORK_TONER_USE diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 8e10e53827ebb750176aea7f7a7b526be17404bb..03d44dc26b0e4ecdc6f0a7efb2463e3cd433ead5 100644 GIT binary patch literal 27019 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 H+sOX`>1Tip literal 25418 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 diff --git a/tgstation.dme b/tgstation.dme index b9844cf96df..09c61bb8d2d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2723,6 +2723,7 @@ #include "code\modules\cargo\exports\parts.dm" #include "code\modules\cargo\exports\seeds.dm" #include "code\modules\cargo\exports\sheets.dm" +#include "code\modules\cargo\exports\stamped_paperwork.dm" #include "code\modules\cargo\exports\tools.dm" #include "code\modules\cargo\exports\weapons.dm" #include "code\modules\cargo\exports\xenobio.dm" @@ -4034,6 +4035,7 @@ #include "code\modules\paperwork\paper_premade.dm" #include "code\modules\paperwork\paperbin.dm" #include "code\modules\paperwork\paperplane.dm" +#include "code\modules\paperwork\paperwork.dm" #include "code\modules\paperwork\pen.dm" #include "code\modules\paperwork\photocopier.dm" #include "code\modules\paperwork\stamps.dm"