From 8dfeaca4e218e1b159765e34646a2d9b63e69e93 Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Tue, 21 Dec 2021 00:04:09 +0100 Subject: [PATCH 01/28] port: cargo mail --- code/__DEFINES/cargo.dm | 2 + code/__DEFINES/colors.dm | 1 + code/__DEFINES/economy.dm | 4 + code/controllers/subsystem/economy.dm | 8 + code/game/objects/items/mail.dm | 312 ++++++++++++++++++ code/modules/cargo/exports/large_objects.dm | 2 +- code/modules/holiday/holidays.dm | 9 + code/modules/jobs/job_types/_job.dm | 12 + code/modules/jobs/job_types/assistant.dm | 9 + .../jobs/job_types/atmospheric_technician.dm | 8 + code/modules/jobs/job_types/bartender.dm | 7 + code/modules/jobs/job_types/botanist.dm | 9 + code/modules/jobs/job_types/captain.dm | 6 + .../jobs/job_types/cargo_technician.dm | 8 + code/modules/jobs/job_types/chaplain.dm | 8 + code/modules/jobs/job_types/chemist.dm | 7 + code/modules/jobs/job_types/chief_engineer.dm | 9 + .../jobs/job_types/chief_medical_officer.dm | 7 + code/modules/jobs/job_types/clown.dm | 8 + code/modules/jobs/job_types/cook.dm | 11 + code/modules/jobs/job_types/detective.dm | 11 + code/modules/jobs/job_types/geneticist.dm | 4 + .../jobs/job_types/head_of_personnel.dm | 13 + code/modules/jobs/job_types/janitor.dm | 6 + code/modules/jobs/job_types/medical_doctor.dm | 10 + code/modules/jobs/job_types/mime.dm | 7 + code/modules/jobs/job_types/quartermaster.dm | 4 + .../jobs/job_types/research_director.dm | 6 + code/modules/jobs/job_types/roboticist.dm | 6 + code/modules/jobs/job_types/scientist.dm | 6 + .../jobs/job_types/security_officer.dm | 8 + .../jobs/job_types/station_engineer.dm | 7 + code/modules/jobs/job_types/virologist.dm | 8 + code/modules/jobs/job_types/warden.dm | 9 + .../reagents/reagent_containers/bottle.dm | 33 ++ code/modules/shuttle/supply.dm | 22 ++ icons/obj/bureaucracy.dmi | Bin 21403 -> 22362 bytes icons/obj/crates.dmi | Bin 24651 -> 25711 bytes strings/junkmail.txt | 14 + 39 files changed, 620 insertions(+), 1 deletion(-) create mode 100644 code/game/objects/items/mail.dm create mode 100644 strings/junkmail.txt diff --git a/code/__DEFINES/cargo.dm b/code/__DEFINES/cargo.dm index e3228ba06258..87bf7b32ce3f 100644 --- a/code/__DEFINES/cargo.dm +++ b/code/__DEFINES/cargo.dm @@ -50,3 +50,5 @@ GLOBAL_LIST_INIT(podstyles, list(\ list(POD_SHAPE_OTHER, "gondola", FALSE, FALSE, FALSE, RUBBLE_NONE, "gondola", "The silent walker. This one seems to be part of a delivery agency."),\ list(POD_SHAPE_OTHER, FALSE, FALSE, FALSE, FALSE, RUBBLE_NONE, FALSE, FALSE, "rl_click", "give_po")\ )) + +GLOBAL_LIST_INIT(junkmail_messages, world.file2list("strings/junkmail.txt")) \ No newline at end of file diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index 1953651125f0..4410f8dd5e52 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -29,6 +29,7 @@ #define COLOR_MAGENTA "#FF00FF" #define COLOR_PURPLE "#800080" #define COLOR_ORANGE "#FF9900" +#define COLOR_PALE_ORANGE "#FFBE9D" #define COLOR_BEIGE "#CEB689" #define COLOR_BLUE_GRAY "#75A2BB" #define COLOR_BROWN "#BA9F6D" diff --git a/code/__DEFINES/economy.dm b/code/__DEFINES/economy.dm index 804967111f0c..741cc4259b33 100644 --- a/code/__DEFINES/economy.dm +++ b/code/__DEFINES/economy.dm @@ -1,4 +1,8 @@ #define STARTING_PAYCHECKS 5 +/// How much mail the Economy SS will create per minute, regardless of firing time. +#define MAX_MAIL_PER_MINUTE 3 +/// Probability of using letters of envelope sprites on all letters. +#define FULL_CRATE_LETTER_ODDS 70 #define PAYCHECK_ASSISTANT 5 #define PAYCHECK_MINIMAL 5 diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index c3ed6d466df7..b6e6b9b17b09 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -53,9 +53,15 @@ SUBSYSTEM_DEF(economy) var/bounty_modifier = 1 ///The modifier multiplied to the value of cargo pack prices. var/pack_price_modifier = 1 + /// Number of mail items generated. + var/mail_waiting = 0 + /// Mail Holiday: AKA does mail arrive today? Always blocked on Sundays. + var/mail_blocked = FALSE /datum/controller/subsystem/economy/Initialize(timeofday) var/budget_to_hand_out = round(budget_pool / department_accounts.len) + if(time2text(world.timeofday, "DDD") == SUNDAY) + mail_blocked = TRUE for(var/A in department_accounts) if(A == ACCOUNT_SEC) new /datum/bank_account/department(A, STARTING_SEC_BUDGET) @@ -80,6 +86,8 @@ SUBSYSTEM_DEF(economy) if(B.account_holder in dictionary[c]) B.payday(c.paymodifier, TRUE) B.payday(1) + var/effective_mailcount = living_player_count() + mail_waiting += clamp(effective_mailcount, 1, MAX_MAIL_PER_MINUTE * 5) /datum/controller/subsystem/economy/proc/get_dep_account(dep_id) for(var/datum/bank_account/department/D in generated_accounts) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm new file mode 100644 index 000000000000..79eef644ef5b --- /dev/null +++ b/code/game/objects/items/mail.dm @@ -0,0 +1,312 @@ +/// Mail is tamper-evident and unresealable, postmarked by CentCom for an individual recepient. +/obj/item/mail + name = "mail" + gender = NEUTER + 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 = WEIGHT_CLASS_SMALL + //drop_sound = 'sound/items/handling/paper_drop.ogg' + //pickup_sound = 'sound/items/handling/paper_pickup.ogg' + mouse_drag_pointer = MOUSE_ACTIVE_POINTER + /// Destination tagging for the mail sorter. + var/sort_tag = 0 + /// Weak reference to 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. The base weight for cash is 56. For there to be a 50/50 chance of getting a department item, they need 56 weight as well. + var/list/generic_goodies = list( + /obj/item/stack/spacecash/c50 = 10, + /obj/item/stack/spacecash/c100 = 25, + /obj/item/stack/spacecash/c200 = 15, + /obj/item/stack/spacecash/c500 = 5, + /obj/item/stack/spacecash/c1000 = 1, + ) + // 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 + + ///mail will have the color of the department the recipient is in. + var/static/list/department_colors + +/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/disposal_handling) + //AddElement(/datum/element/item_scaling, 0.75, 1) + if(isnull(department_colors)) + department_colors = list( + ACCOUNT_CIV = COLOR_WHITE, + ACCOUNT_ENG = COLOR_PALE_ORANGE, + ACCOUNT_SCI = COLOR_PALE_PURPLE_GRAY, + ACCOUNT_MED = COLOR_PALE_BLUE_GRAY, + ACCOUNT_SRV = COLOR_PALE_GREEN_GRAY, + ACCOUNT_CAR = COLOR_BEIGE, + ACCOUNT_SEC = COLOR_PALE_RED_GRAY, + ) + + // Icons + // Add some random stamps. + if(stamped == TRUE) + var/stamp_count = rand(1, stamp_max) + for(var/i in 1 to stamp_count) + stamps += list("stamp_[rand(2, 6)]") + update_icon() + +/obj/item/mail/update_icon() + update_overlays() + +/obj/item/mail/proc/update_overlays() + . = ..() + var/bonus_stamp_offset = 0 + for(var/stamp in stamps) + var/image/stamp_image = image( + icon = icon, + 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(-3, 1), + 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, mob/user, params) + // Destination tagging + if(istype(W, /obj/item/destTagger)) + var/obj/item/destTagger/destination_tag = W + + if(sort_tag != destination_tag.currTag) + var/tag = uppertext(GLOB.TAGGERLOCATIONS[destination_tag.currTag]) + to_chat(user, span_notice("*[tag]*")) + sort_tag = destination_tag.currTag + playsound(loc, 'sound/machines/twobeep_high.ogg', 100, TRUE) + +/obj/item/mail/attack_self(mob/user) + if(recipient_ref) + var/datum/mind/recipient = recipient_ref.resolve() + // If the recipient's mind has gone, then anyone can open their mail + // whether a mind can actually be qdel'd is an exercise for the reader + if(recipient && recipient != user?.mind) + to_chat(user, span_notice("You can't open somebody else's mail! That's illegal!")) + return + + to_chat(user, span_notice("You start to unwrap the package...")) + if(!do_after(user, 1.5 SECONDS, target = user)) + return + user.temporarilyRemoveItemFromInventory(src, TRUE) + if(contents.len) + user.put_in_hands(contents[1]) + playsound(loc, 'sound/items/poster_ripped.ogg', 50, TRUE) + qdel(src) + +/obj/item/mail/examine_more(mob/user) + . = ..() + var/list/msg = list(span_notice("You notice the postmarking on the front of the mail...")) + var/datum/mind/recipient = recipient_ref.resolve() + if(recipient) + msg += "\t[span_info("Certified NT mail for [recipient].")]" + else + msg += "\t[span_info("Certified mail for [GLOB.station_name].")]" + msg += "\t[span_info("Distribute by hand or via destination tagger using the certified NT disposal system.")]" + return msg + +/// Accepts a mind to initialize goodies for a piece of mail. +/obj/item/mail/proc/initialize_for_recipient(datum/mind/recipient) + name = "[initial(name)] for [recipient.name] ([recipient.assigned_role])" + recipient_ref = WEAKREF(recipient) + + var/mob/living/body = recipient.current + var/list/goodies = generic_goodies + + var/datum/job/this_job = SSjob.GetJob(recipient.assigned_role) + if(this_job) + if(this_job.paycheck_department && department_colors[this_job.paycheck_department]) + color = department_colors[this_job.paycheck_department] + var/list/job_goodies = this_job.get_mail_goodies() + if(LAZYLEN(job_goodies)) + // certain roles and jobs (prisoner) do not receive generic gifts. + if(this_job.exclusive_mail_goodies) + goodies = job_goodies + else + goodies += job_goodies + + for(var/iterator in 1 to goodie_count) + var/target_good = pickweight(goodies) + var/atom/movable/target_atom = new target_good(src) + body.log_message("[key_name(body)] received [target_atom.name] in the mail ([target_good])", LOG_GAME) + + return TRUE + +/// Alternate setup, just complete garbage inside and anyone can open +/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/centcom/visitor_info, /obj/item/paper/fluff/junkmail_redpill, /obj/effect/decal/cleanable/ash)) + + var/list/junk_names = list( + /obj/item/paper/pamphlet/gateway = "[initial(name)] for [pick(GLOB.adjectives)] adventurers", + /obj/item/paper/pamphlet/centcom/visitor_info = "[initial(name)] for info about visiting nanotrasen space stations", + /obj/item/paper/fluff/junkmail_redpill = "[initial(name)] for those feeling [pick(GLOB.adjectives)] working at Nanotrasen", + /obj/effect/decal/cleanable/ash = "[initial(name)] with INCREDIBLY IMPORTANT ARTIFACT- DELIVER TO SCIENCE DIVISION. HANDLE WITH CARE.", + ) + + color = pick(department_colors) //eh, who gives a shit. + name = special_name ? junk_names[junk] : "important [initial(name)]" + + junk = new junk(src) + return TRUE + +/obj/item/mail/proc/disposal_handling(disposal_source, obj/structure/disposalholder/disposal_holder, obj/machinery/disposal/disposal_machine, hasmob) + if(!hasmob) + disposal_holder.destinationTag = sort_tag + +/// Subtype that's always junkmail +/obj/item/mail/junkmail/Initialize(mapload) + . = ..() + junk_mail() + +/// Crate for mail from CentCom. +/obj/structure/closet/crate/mail + name = "mail crate" + desc = "A certified post crate from CentCom." + icon_state = "mail" + +/obj/structure/closet/crate/mail/update_icon() + . = ..() + update_icon_state() + +/obj/structure/closet/crate/mail/proc/update_icon_state() + . = ..() + if(opened) + icon_state = "[initial(icon_state)]open" + if(locate(/obj/item/mail) in src) + icon_state = initial(icon_state) + else + icon_state = "[initial(icon_state)]sealed" + +/// Fills this mail crate with N pieces of mail, where N is the lower of the amount var passed, and the maximum capacity of this crate. If N is larger than the number of alive human players, the excess will be junkmail. +/obj/structure/closet/crate/mail/proc/populate(amount) + var/mail_count = min(amount, storage_capacity) + // Fills the + var/list/mail_recipients = list() + + for(var/mob/living/carbon/human in GLOB.player_list) + if(human.stat == DEAD || !human.mind) + continue + // Skip wizards, nuke ops, cyborgs; Centcom does not send them mail + if(human.faction.Find("Station", 1, 0) != 0) + continue + + mail_recipients += human.mind + + for(var/i in 1 to mail_count) + var/obj/item/mail/new_mail + if(prob(FULL_CRATE_LETTER_ODDS)) + new_mail = new /obj/item/mail(src) + else + new_mail = new /obj/item/mail/envelope(src) + + var/datum/mind/recipient = pick_n_take(mail_recipients) + if(recipient) + new_mail.initialize_for_recipient(recipient) + else + new_mail.junk_mail() + + update_icon() + +/// Crate for mail that automatically depletes the economy subsystem's pending mail counter. +/obj/structure/closet/crate/mail/economy/Initialize(mapload) + . = ..() + populate(SSeconomy.mail_waiting) + SSeconomy.mail_waiting = 0 + +/// Crate for mail that automatically generates a lot of mail. Usually only normal mail, but on lowpop it may end up just being junk. +/obj/structure/closet/crate/mail/full + name = "brimming mail crate" + desc = "A certified post crate from CentCom. Looks stuffed to the gills." + +/obj/structure/closet/crate/mail/full/Initialize(mapload) + . = ..() + populate(INFINITY) + + +/// Mailbag. +/obj/item/storage/bag/mail + name = "mail bag" + desc = "A bag for letters, envelopes, and other postage." + icon = 'icons/obj/library.dmi' + icon_state = "bookbag" + //worn_icon_state = "bookbag" + resistance_flags = FLAMMABLE + +/obj/item/storage/bag/mail/ComponentInitialize() + . = ..() + var/datum/component/storage/storage = GetComponent(/datum/component/storage) + storage.max_w_class = WEIGHT_CLASS_NORMAL + storage.max_combined_w_class = 42 + storage.max_items = 21 + storage.display_numerical_stacking = FALSE + storage.set_holdable(list( + /obj/item/mail, + /obj/item/smallDelivery, + /obj/item/paper + )) + +/obj/item/paper/fluff/junkmail_redpill + name = "smudged paper" + icon_state = "scrap" + var/nuclear_option_odds = 0.1 + +/obj/item/paper/fluff/junkmail_redpill/Initialize(mapload) + . = ..() + if(!prob(nuclear_option_odds)) // 1 in 1000 chance of getting 2 random nuke code characters. + 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)]...'" + return + var/code = random_nukecode() + for(var/obj/machinery/nuclearbomb/selfdestruct/self_destruct in GLOB.nuke_list) + self_destruct.r_code = code + message_admins("Through junkmail, the self-destruct code was set to \"[code]\".") + info = "You need to escape the simulation. Don't forget the numbers, they help you remember: '[code[rand(1,5)]][code[rand(1,5)]]...'" + +/obj/item/paper/fluff/junkmail_redpill/true //admin letter enabling players to brute force their way through the nuke code if they're so inclined. + nuclear_option_odds = 100 + +/obj/item/paper/fluff/junkmail_generic + name = "important document" + icon_state = "paper_words" + +/obj/item/paper/fluff/junkmail_generic/Initialize(mapload) + . = ..() + info = pick(GLOB.junkmail_messages) diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm index 5311e8e1fc82..350a38f1db9e 100644 --- a/code/modules/cargo/exports/large_objects.dm +++ b/code/modules/cargo/exports/large_objects.dm @@ -2,7 +2,7 @@ cost = 500 unit_name = "crate" export_types = list(/obj/structure/closet/crate) - exclude_types = list(/obj/structure/closet/crate/large, /obj/structure/closet/crate/wooden, /obj/structure/closet/crate/secure/cheap, /obj/structure/closet/crate/secure/owned) + exclude_types = list(/obj/structure/closet/crate/large, /obj/structure/closet/crate/wooden, /obj/structure/closet/crate/secure/cheap, /obj/structure/closet/crate/secure/owned, /obj/structure/closet/crate/mail) /datum/export/large/crate/total_printout(datum/export_report/ex, notes = TRUE) // That's why a goddamn metal crate costs that much. . = ..() diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 90f6ca7c4476..f8143f95c886 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -11,9 +11,13 @@ var/current_year = 0 var/year_offset = 0 var/obj/item/drone_hat //If this is defined, drones without a default hat will spawn with this one during the holiday; check drones_as_items.dm to see this used + ///When this holiday is active, does this prevent mail from arriving to cargo? Try not to use this for longer holidays. + var/mail_holiday = FALSE // This proc gets run before the game starts when the holiday is activated. Do festive shit here. /datum/holiday/proc/celebrate() + if(mail_holiday) + SSeconomy.mail_blocked = TRUE return // When the round starts, this proc is ran to get a text message to display to everyone to wish them a happy holiday @@ -71,6 +75,7 @@ end_day = 2 end_month = JANUARY drone_hat = /obj/item/clothing/head/festive + mail_holiday = TRUE /datum/holiday/new_year/getStationPrefix() return pick("Party","New","Hangover","Resolution","Auld") @@ -237,6 +242,7 @@ begin_day = 1 begin_month = MAY drone_hat = /obj/item/clothing/head/hardhat + mail_holiday = TRUE /datum/holiday/labor/getStationPrefix() return pick("Union","Labor","Worker","Trade") @@ -306,6 +312,7 @@ "https://www.youtube.com/watch?v=FAVQsnr4uYg", // Lone Star - Tony Marcus "https://www.youtube.com/watch?v=kQzdJUiALBk" // wyoming - In the Shadow of the Valley - Don Burnham ) + mail_holiday = TRUE /datum/holiday/USA/getStationPrefix() return pick("Independent","American","Burger","Bald Eagle","Star-Spangled", "Fireworks") @@ -326,6 +333,7 @@ "https://www.youtube.com/watch?v=o3wivTC1gOw", // Bonjour mon vieux Paris "https://www.youtube.com/watch?v=8KdTChn-pEA" // Maréchal, nous voilà ) + mail_holiday = TRUE /datum/holiday/france/getStationPrefix() return pick("Francais","Fromage", "Zut", "Merde") @@ -587,6 +595,7 @@ Since Ramadan is an entire month that lasts 29.5 days on average, the start and "https://www.youtube.com/watch?v=KGEfBop0nkI", // Julia Ecklar - "Christmastime in Sector 5" - "Little Drummer Boy" "https://www.youtube.com/watch?v=1twga61Kd14" // Julia Ecklar - #1 - Christmas Time ) + mail_holiday = TRUE /datum/holiday/xmas/greet() return "Have a merry Christmas!" diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 23e2a3f08e1d..75b3990a124d 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -68,6 +68,14 @@ var/display_order = JOB_DISPLAY_ORDER_DEFAULT + /// Goodies that can be received via the mail system. + // this is a weighted list. + /// Keep the _job definition for this empty and use /obj/item/mail to define general gifts. + var/list/mail_goodies = list() + + /// If this job's mail goodies compete with generic goodies. + var/exclusive_mail_goodies = FALSE + var/list/changed_maps = list() // Maps on which the job is changed. Should use the same name as the mapping config /* @@ -303,6 +311,10 @@ types += duffelbag return types +/// An overridable getter for more dynamic goodies. +/datum/job/proc/get_mail_goodies(mob/recipient) + return mail_goodies + //Warden and regular officers add this result to their get_access() /datum/job/proc/check_config_for_sec_maint() if(CONFIG_GET(flag/security_has_maint_access)) diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index 2a7e98f08823..c4c112554f03 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -18,6 +18,15 @@ Assistant paycheck_department = ACCOUNT_CIV display_order = JOB_DISPLAY_ORDER_ASSISTANT + mail_goodies = list( + /obj/item/reagent_containers/food/snacks/donkpocket = 10, + /obj/item/clothing/mask/gas = 10, + /obj/item/clothing/gloves/color/fyellow = 7, + /obj/item/choice_beacon/music = 5, + /obj/item/toy/crayon/spraycan = 3, + /obj/item/crowbar/large = 1 + ) + alt_titles = list("Intern", "Apprentice", "Subordinate", "Temporary Worker", "Associate") /datum/job/assistant/get_access() diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index d708fcce4d2c..c3aa86b544de 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -21,6 +21,14 @@ paycheck_department = ACCOUNT_ENG display_order = JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN + mail_goodies = list( + ///obj/item/rpd_upgrade/unwrench = 30, + ///obj/item/grenade/gas_crystal/crystal_foam = 10, + ///obj/item/grenade/gas_crystal/proto_nitrate_crystal = 10, + /obj/item/grenade/gas_crystal/healium_crystal = 10, + /obj/item/grenade/gas_crystal/nitrous_oxide_crystal = 5, + ) + changed_maps = list("OmegaStation", "EclipseStation") /datum/job/atmos/proc/OmegaStationChanges() diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm index dfed18dd2430..654dbedff83c 100644 --- a/code/modules/jobs/job_types/bartender.dm +++ b/code/modules/jobs/job_types/bartender.dm @@ -20,6 +20,13 @@ paycheck_department = ACCOUNT_SRV display_order = JOB_DISPLAY_ORDER_BARTENDER + mail_goodies = list( + /obj/item/storage/box/rubbershot = 30, + /obj/item/reagent_containers/glass/bottle/clownstears = 10, + /obj/item/stack/sheet/mineral/plasma = 10, + /obj/item/stack/sheet/mineral/uranium = 10, + ) + changed_maps = list("OmegaStation") /datum/job/bartender/proc/OmegaStationChanges() diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm index 9ed71fb575be..880b917ac362 100644 --- a/code/modules/jobs/job_types/botanist.dm +++ b/code/modules/jobs/job_types/botanist.dm @@ -19,6 +19,15 @@ paycheck_department = ACCOUNT_SRV display_order = JOB_DISPLAY_ORDER_BOTANIST + mail_goodies = list( + /obj/item/reagent_containers/glass/bottle/mutagen = 20, + /obj/item/reagent_containers/glass/bottle/saltpetre = 20, + /obj/item/reagent_containers/glass/bottle/diethylamine = 20, + /obj/item/gun/energy/floragun = 10 + ///obj/effect/spawner/random/food_or_drink/seed_rare = 5,// These are strong, rare seeds, so use sparingly. + ///obj/item/food/monkeycube/bee = 2 + ) + changed_maps = list("OmegaStation", "EclipseStation") /datum/job/hydro/proc/OmegaStationChanges() diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index cd2dcb17767f..eee46ee51b5d 100755 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -26,6 +26,12 @@ mind_traits = list(TRAIT_DISK_VERIFIER) + mail_goodies = list( + /obj/item/clothing/mask/cigarette/cigar/havana = 20, + ///obj/item/storage/fancy/cigarettes/cigars/havana = 15, + /obj/item/reagent_containers/food/drinks/bottle/champagne = 10 + ) + display_order = JOB_DISPLAY_ORDER_CAPTAIN /datum/job/captain/get_access() diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index 46bd98c8898a..1d479d4c800b 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -20,6 +20,14 @@ display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN + mail_goodies = list( + /obj/item/pizzabox = 10, + /obj/item/stack/sheet/mineral/gold = 5, + /obj/item/stack/sheet/mineral/uranium = 4, + /obj/item/stack/sheet/mineral/diamond = 3, + /obj/item/gun/ballistic/rifle/boltaction = 1 + ) + changed_maps = list("EclipseStation", "OmegaStation") /datum/job/cargo_tech/proc/EclipseStationChanges() diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index cd921a35b619..34523be2311e 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -20,6 +20,14 @@ display_order = JOB_DISPLAY_ORDER_CHAPLAIN + mail_goodies = list( + /obj/item/reagent_containers/food/drinks/bottle/holywater = 30, + /obj/item/toy/plush/awakenedplushie = 10, + /obj/item/grenade/chem_grenade/holy = 5, + /obj/item/toy/plush/narplush = 2 + ///obj/item/toy/plush/ratplush = 1 + ) + /datum/job/chaplain/after_spawn(mob/living/H, mob/M) . = ..() diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index d88bb37fa69f..47ce09bf68a5 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -25,6 +25,13 @@ changed_maps = list("OmegaStation", "EclipseStation") + mail_goodies = list( + /obj/item/reagent_containers/glass/bottle/flash_powder = 15, + ///obj/item/reagent_containers/glass/bottle/exotic_stabilizer = 5, + ///obj/item/reagent_containers/glass/bottle/leadacetate = 5, + /obj/item/paper/secretrecipe = 1 + ) + /datum/job/chemist/proc/OmegaStationChanges() return TRUE diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 16223004efa7..3453e148c40b 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -32,6 +32,15 @@ display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER + mail_goodies = list( + ///obj/item/food/cracker = 25, //you know. for poly + /obj/item/stack/sheet/mineral/diamond = 15, + ///obj/item/stack/sheet/mineral/uranium/five = 15, + ///obj/item/stack/sheet/mineral/plasma/five = 15, + /obj/item/stack/sheet/mineral/gold = 15 + ///obj/effect/spawner/random/engineering/tool_advanced = 3 + ) + /datum/outfit/job/ce name = "Chief Engineer" jobtype = /datum/job/chief_engineer diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 0e770f465b7d..8c187470a87a 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -32,6 +32,13 @@ changed_maps = list("OmegaStation") + /*mail_goodies = list( + /obj/effect/spawner/random/medical/organs = 10, + /obj/effect/spawner/random/medical/memeorgans = 8, + /obj/effect/spawner/random/medical/surgery_tool_advanced = 4, + /obj/effect/spawner/random/medical/surgery_tool_alien = 1 + )*/ + /datum/job/cmo/proc/OmegaStationChanges() return TRUE diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index 36f43b0504b0..be8889cdfc38 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -20,6 +20,14 @@ display_order = JOB_DISPLAY_ORDER_CLOWN + mail_goodies = list( + ///obj/item/food/grown/banana = 100, + ///obj/item/food/pie/cream = 50, + /obj/item/clothing/shoes/clown_shoes/combat = 10, + /obj/item/reagent_containers/spray/waterflower/lube = 20 // lube + ///obj/item/reagent_containers/spray/waterflower/superlube = 1 // Superlube, good lord. + ) + /datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M) . = ..() diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm index a654e5706a2a..69a76a2d8fd8 100644 --- a/code/modules/jobs/job_types/cook.dm +++ b/code/modules/jobs/job_types/cook.dm @@ -23,6 +23,17 @@ changed_maps = list("OmegaStation", "EclipseStation") + mail_goodies = list( + ///obj/item/storage/box/ingredients/random = 80, + /obj/item/reagent_containers/glass/bottle/caramel = 20, + /obj/item/reagent_containers/food/condiment/flour = 20, + /obj/item/reagent_containers/food/condiment/rice = 20, + /obj/item/reagent_containers/food/condiment/enzyme = 15, + /obj/item/reagent_containers/food/condiment/soymilk = 15, + /obj/item/kitchen/knife = 4, + /obj/item/kitchen/knife/butcher = 2 + ) + /datum/job/cook/proc/OmegaStationChanges() access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE) minimal_access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE) diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index fa776183d3db..d9fce41ad354 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -25,6 +25,17 @@ display_order = JOB_DISPLAY_ORDER_DETECTIVE + mail_goodies = list( + ///obj/item/storage/fancy/cigarettes = 25, + /obj/item/ammo_box/c38 = 25, + ///obj/item/ammo_box/c38/dumdum = 5, + /obj/item/ammo_box/c38/hotshot = 5, + /obj/item/ammo_box/c38/iceblox = 5, + ///obj/item/ammo_box/c38/match = 5, + /obj/item/ammo_box/c38/trac = 5, + ///obj/item/storage/belt/holster/detective/full = 1 + ) + changed_maps = list("EclipseStation", "OmegaStation") /datum/job/detective/proc/EclipseStationChanges() diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index dc306bb16b70..b7ab910685a0 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -21,6 +21,10 @@ display_order = JOB_DISPLAY_ORDER_GENETICIST + mail_goodies = list( + /obj/item/storage/box/monkeycubes = 10 + ) + changed_maps = list("OmegaStation", "EclipseStation") /datum/job/geneticist/proc/OmegaStationChanges() diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index 360e1a5eca7b..eb844b049c62 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -40,10 +40,23 @@ changed_maps = list("OmegaStation") + mail_goodies = list( + /obj/item/card/id/silver = 10, + /obj/item/stack/sheet/bone = 5 + ) + /datum/job/hop/proc/OmegaStationChanges() access = get_all_accesses() minimal_access = get_all_accesses() +//only pet worth reviving +/datum/job/hop/get_mail_goodies(mob/recipient) + . = ..() + // Strange Reagent if the pet is dead. + //for(var/mob/living/simple_animal/pet/dog/corgi/ian/staff_pet in GLOB.dead_mob_list) + // . += list(/datum/reagent/medicine/strange_reagent = 20) + // break + /datum/outfit/job/hop name = "Head of Personnel" jobtype = /datum/job/hop diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index 1ad1521c74e6..f59e7589f87b 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -22,6 +22,12 @@ changed_maps = list("OmegaStation", "EclipseStation") + mail_goodies = list( + /obj/item/grenade/chem_grenade/cleaner = 30, + /obj/item/storage/box/lights/mixed = 20, + /obj/item/lightreplacer = 10 + ) + /datum/job/janitor/proc/OmegaStationChanges() access = list(ACCESS_JANITOR, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS) minimal_access = list(ACCESS_JANITOR, ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS) diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index fe16b429edc1..3bf5e2ef5c47 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -23,6 +23,16 @@ changed_maps = list("EclipseStation", "OmegaStation") + mail_goodies = list( + /obj/item/healthanalyzer/advanced = 15, + /obj/item/scalpel/advanced = 6, + /obj/item/retractor/advanced = 6, + /obj/item/cautery/advanced = 6, + /obj/item/reagent_containers/glass/bottle/formaldehyde = 6 + ///obj/effect/spawner/random/medical/organs = 5, + ///obj/effect/spawner/random/medical/memeorgans = 1 + ) + /datum/job/doctor/proc/EclipseStationChanges() total_positions = 6 spawn_positions = 5 diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm index 9ef61ae72d5b..2a853a4928a8 100644 --- a/code/modules/jobs/job_types/mime.dm +++ b/code/modules/jobs/job_types/mime.dm @@ -20,6 +20,13 @@ display_order = JOB_DISPLAY_ORDER_MIME + mail_goodies = list( + /obj/item/reagent_containers/food/snacks/baguette = 15, + /obj/item/reagent_containers/food/snacks/store/cheesewheel = 10, + /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing = 10, + /obj/item/book/mimery = 1, + ) + /datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M) H.apply_pref_name("mime", M.client) diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index 194c35926270..dad66ad3a0f0 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -22,6 +22,10 @@ changed_maps = list("OmegaStation") + mail_goodies = list( + /obj/item/circuitboard/machine/emitter = 3 + ) + /datum/job/qm/proc/OmegaStationChanges() return TRUE diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 5059d98b01a1..0ffec56997fd 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -37,6 +37,12 @@ changed_maps = list("OmegaStation") + mail_goodies = list( + /obj/item/storage/box/monkeycubes = 30, + ///obj/item/circuitboard/machine/sleeper/party = 3, + /obj/item/borg/upgrade/ai = 2 + ) + /datum/job/rd/proc/OmegaStationChanges() return TRUE diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index 5dacf5f61f25..f00f025c1ee7 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -23,6 +23,12 @@ changed_maps = list("OmegaStation") + mail_goodies = list( + /obj/item/storage/box/flashes = 20, + /obj/item/stack/sheet/metal/twenty = 15, + /obj/item/modular_computer/tablet/preset/advanced = 5 + ) + /datum/job/roboticist/proc/OmegaStationChanges() supervisors = "the captain and the head of personnel" diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index ad2b55c088e1..190d23eb3063 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -23,6 +23,12 @@ changed_maps = list("EclipseStation", "OmegaStation") + mail_goodies = list( + ///obj/item/raw_anomaly_core/random = 10, + ///obj/item/disk/tech_disk/spaceloot = 2, + /obj/item/camera_bug = 1 + ) + /datum/job/scientist/proc/EclipseStationChanges() total_positions = 6 spawn_positions = 5 diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index b6db42902600..1fb73d02650f 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -27,6 +27,14 @@ changed_maps = list("EclipseStation", "YogsPubby", "OmegaStation") + //mail_goodies = list( + ///obj/item/food/donut/caramel = 10, + ///obj/item/food/donut/matcha = 10, + ///obj/item/food/donut/blumpkin = 5, + ///obj/item/clothing/mask/whistle = 5, + ///obj/item/melee/baton/security/boomerang/loaded = 1 + //) + /datum/job/officer/proc/EclipseStationChanges() total_positions = 14 spawn_positions = 10 diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index 24ab3ae55c77..1afc7563f058 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -25,6 +25,13 @@ changed_maps = list("EclipseStation", "OmegaStation") + mail_goodies = list( + /obj/item/storage/box/lights/mixed = 20, + /obj/item/lightreplacer = 10, + /obj/item/holosign_creator/engineering = 8 + ///obj/item/clothing/head/hardhat/red/upgraded = 1 + ) + /datum/job/engineer/proc/EclipseStationChanges() total_positions = 6 spawn_positions = 5 diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index aec2e2868f64..20290516131f 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -25,6 +25,14 @@ changed_maps = list("OmegaStation") + mail_goodies = list( + /obj/item/reagent_containers/glass/bottle/random_virus = 15, + /obj/item/reagent_containers/glass/bottle/formaldehyde = 10, + /obj/item/reagent_containers/glass/bottle/synaptizine = 10, + /obj/item/stack/sheet/mineral/plasma = 10, + /obj/item/stack/sheet/mineral/uranium = 5, + ) + /datum/job/virologist/proc/OmegaStationChanges() return TRUE diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index 85e36ac9ed29..d28e248f0237 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -28,6 +28,15 @@ changed_maps = list("YogsPubby", "OmegaStation") + mail_goodies = list( + ///obj/item/storage/fancy/cigarettes = 15, + /obj/item/storage/box/handcuffs = 10, + /obj/item/storage/box/teargas = 10, + /obj/item/storage/box/flashbangs = 10, + /obj/item/storage/box/rubbershot = 10, + /obj/item/storage/box/lethalshot = 5 + ) + /datum/job/warden/proc/YogsPubbyChanges() access += ACCESS_CREMATORIUM minimal_access += ACCESS_CREMATORIUM diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 891f2d247526..3f65e6446518 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -457,3 +457,36 @@ name = "Flu virion culture vial" desc = "A small vial for holding small amounts of reagents. Contains H13N1 flu virion culture in synthblood medium." spawned_disease = /datum/disease/advance/flu + + +// Bottles for mail goodies. + +/obj/item/reagent_containers/glass/bottle/clownstears + name = "bottle of distilled clown misery" + desc = "A small bottle. Contains a mythical liquid used by sublime bartenders; made from the unhappiness of clowns." + list_reagents = list(/datum/reagent/consumable/clownstears = 30) + +/obj/item/reagent_containers/glass/bottle/saltpetre + name = "saltpetre bottle" + desc = "A small bottle. Contains saltpetre." + list_reagents = list(/datum/reagent/saltpetre = 30) + +/obj/item/reagent_containers/glass/bottle/flash_powder + name = "flash powder bottle" + desc = "A small bottle. Contains flash powder." + list_reagents = list(/datum/reagent/flash_powder = 30) + +///obj/item/reagent_containers/glass/bottle/exotic_stabilizer + //name = "exotic stabilizer bottle" + //desc = "A small bottle. Contains exotic stabilizer." + //list_reagents = list(/datum/reagent/exotic_stabilizer = 30) + +///obj/item/reagent_containers/glass/bottle/leadacetate + //name = "lead acetate bottle" + //desc = "A small bottle. Contains lead acetate." + //list_reagents = list(/datum/reagent/toxin/leadacetate = 30) + +/obj/item/reagent_containers/glass/bottle/caramel + name = "bottle of caramel" + desc = "A bottle containing caramalized sugar, also known as caramel. Do not lick." + list_reagents = list(/datum/reagent/consumable/caramel = 30) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 195eab781672..6e2a14607135 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -22,6 +22,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/machinery/autolathe, //same /obj/item/projectile/beam/wormhole, /obj/effect/portal, + /obj/item/mail, /obj/item/shared_storage, /obj/structure/extraction_point, /obj/machinery/syndicatebomb, @@ -73,6 +74,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/docking_port/mobile/supply/initiate_docking() if(getDockedId() == "supply_away") // Buy when we leave home. buy() + create_mail() . = ..() // Fly/enter transit. if(. != DOCKING_SUCCESS) return @@ -197,3 +199,23 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( SSshuttle.centcom_message = msg investigate_log("Shuttle contents sold for [D.account_balance - presale_points] credits. Contents: [ex.exported_atoms ? ex.exported_atoms.Join(",") + "." : "none."] Message: [SSshuttle.centcom_message || "none."]", INVESTIGATE_CARGO) + +/* + Generates a box of mail depending on our exports and imports. + Applied in the cargo shuttle sending/arriving, by building the crate if the round is ready to introduce mail based on the economy subsystem. + Then, fills the mail crate with mail, by picking applicable crew who can recieve mail at the time to sending. +*/ +/obj/docking_port/mobile/supply/proc/create_mail() + //Early return if there's no mail waiting to prevent taking up a slot. We also don't send mails on sundays or holidays. + if(!SSeconomy.mail_waiting || SSeconomy.mail_blocked) + return + //spawn crate + var/list/empty_turfs = list() + for(var/place as anything in shuttle_areas) + var/area/shuttle/shuttle_area = place + for(var/turf/open/floor/shuttle_floor in shuttle_area) + if(is_blocked_turf(shuttle_floor)) + continue + empty_turfs += shuttle_floor + + new /obj/structure/closet/crate/mail/economy(pick(empty_turfs)) \ No newline at end of file diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 98fe0024c4dfb1e3cc21a0c7355eaee653304a0c..7e731c79698cb0057d7237aacfe34c1288cadf0e 100644 GIT binary patch literal 22362 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�|zC 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 Y%p*psgWt_|pl2?muVbiPq-hoM9|5gbr2qf` literal 21403 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 z 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 IsP7p153bQ8DgXcg diff --git a/icons/obj/crates.dmi b/icons/obj/crates.dmi index d2c7ba8ad73a18f7e59b21b50a5dd5956671e37f..650e693438a32d31c5ddbbfcbeea1f146f031583 100644 GIT binary patch delta 5539 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 delta 4471 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 JPDHLkV1gsb)6xI{ diff --git a/strings/junkmail.txt b/strings/junkmail.txt new file mode 100644 index 000000000000..db916907d8aa --- /dev/null +++ b/strings/junkmail.txt @@ -0,0 +1,14 @@ +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? +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! +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. +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! +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 +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. +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 :^() +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 +hello 👋👋 nanotrasens! fuck 👈👌 the syndicate! they 👵 got ☄ me 😍😰 questioning my 🤰 loyalty to nanotraben! so 👌💯 please 😫 lets ⛔👀 gather our 📸💩 energy 😎 and 💰🔣 QUICK. 😲 send this 🗑👈 to 💦💊 10 😂😂 other loyal 💯 nanotraysens to 💦🤔 show we 🐶 dont 🙅🚫 take 🛍 nothing from 😂 the ✝ syndicate!! bless your 👉🏼 heart 😍💔 +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 +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. +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 +MESSAGE FROM CENTCOM 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. +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 From cb156a2e223e443f4c3c6a650f4fdcfb65898c5a Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Tue, 21 Dec 2021 00:19:48 +0100 Subject: [PATCH 02/28] fix: forgot .dme file in commit --- yogstation.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/yogstation.dme b/yogstation.dme index a191936836b9..ccc5ceb4489b 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -966,6 +966,7 @@ #include "code\game\objects\items\inducer.dm" #include "code\game\objects\items\kitchen.dm" #include "code\game\objects\items\latexballoon.dm" +#include "code\game\objects\items\mail.dm" #include "code\game\objects\items\mantis.dm" #include "code\game\objects\items\manuals.dm" #include "code\game\objects\items\miscellaneous.dm" From cf077c8923aa940768c1c67735c7c4ad09aad972 Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Tue, 21 Dec 2021 00:34:12 +0100 Subject: [PATCH 03/28] chore: fix lints --- code/game/objects/items/mail.dm | 7 ------- 1 file changed, 7 deletions(-) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index 79eef644ef5b..21820ca33371 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -72,9 +72,6 @@ update_icon() /obj/item/mail/update_icon() - update_overlays() - -/obj/item/mail/proc/update_overlays() . = ..() var/bonus_stamp_offset = 0 for(var/stamp in stamps) @@ -204,10 +201,6 @@ icon_state = "mail" /obj/structure/closet/crate/mail/update_icon() - . = ..() - update_icon_state() - -/obj/structure/closet/crate/mail/proc/update_icon_state() . = ..() if(opened) icon_state = "[initial(icon_state)]open" From de53bf339f46b7f979de62b16350ce5523712ffc Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Tue, 21 Dec 2021 09:21:07 +0100 Subject: [PATCH 04/28] add postmark/stamp icons --- icons/obj/bureaucracy.dmi | Bin 22362 -> 23241 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 7e731c79698cb0057d7237aacfe34c1288cadf0e..e6d8f1b8ec8721346258098a0f745c5a8ae8011b 100644 GIT binary patch literal 23241 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 literal 22362 zcmc$`by!s2+b=wnw3IXw0)il&QUge%bhjcU-8}=9|>L? zFXMB19@U5NK2oHJUs6{V3wMTxjTyL+9rDf3w4N)pGo4x&?yPULS9EWz-)^}g`}n92 z(oNmZ_pIwhX)+_Mr~WvlL$n}vb#9E`^c&9@J4*4&&o%!Kde>Qg23lQlkMYaxyVt1{5&^hdYIZ^`An&B ziK-(h+4lk#KD2=k9p6jL6&~~Tk~SnfNg&*T*Wyufh_@x`V_SsMV1Y2MK>EON&>miR7-4UPH&H{tUV{Pn; z;Ij1PD=|8k+9wMWOL)t3YSCBU2Ii{BZVhgJCZahCet&2E;99p+62qH$n!@#Ysp!F> za>O2ya3u|X`(VkhFb=x%uHxdC#Uii&m}%P3rBr2&+Q*50q!G1xxb=R()`kKqQ1VmN8HdbmVY5o=N@f1dZIxu|1=6b~bKiBb@cy&hsD@cejnMj@r(g@Hl7%Kw9W*UuIfa3z*|gJz3N zj;`+2BA>Oc434LF>{a4?aK2XMt`N0U@i}7S>aR3n`}9?WkgV=1fIy5OWjPrgpNzfc zz<>v9&F3g;MhR94In!2K`y5gaW?6Z^eU*d#kz}JE-3m}by%CI4rw1<&WaSI%#;SVb zXYt0mZfT;Hk8EqEW#e|gV3mwl&Y9Q1e!ssb$jSWxUB$;hNP<-wec+~heRhDmu~%xq zWXfs%7}AWGouBE2SX+BnoCj3YTk9QP-7tm{%VsEmC-9|lm_iGK&{;x>mzCJ1WpS8d zL;t<;CTJUrG4!KHQALGF$IbTk+d(^I2My3s$xPGS+_}`WQTWnlveYpA1#a(`V6Md|zX z`=-DVYuIS~Xyw*qieoh8f4$`o8(f2_gLn6fQ+-#0XfJvI4B97Km(G&D?ZJ&+n)Sy{Qc zQd!9#D$7JC>e70)o1dRgpRIcCo~?)VlS;op5RT`d7*kHGr|PnunD%6F>bob|$+lnn zTihX7poz+HncpjsZHhs@(&WWTtA4F?=dH24!itKz>;A$WKb2$T4aBF}4Cw7Ak(IcP zkBJV&M)KeE0x7z107x-zPuwpQ=huQ`00I?mag-_Cg& zO9iKwHl&RaxIydBVY3lPx4YUWw3Wp?h+ye1ARKF*At5TBsN zb-}7-%V?p}x5TP_&VYLn_ol`~a_qaO_OC7Nf`Mp>^DQk4^D0MViP?0f%jNZ4_p1r~ zM%Nq4uEiu6eKi*pcnaJC9^+a9)fDc|-I=N%)`K*2hy+ux-jwIX4Fq^s=hM3JT*1_yVM|*D8!nP0MtLN`##*%(xcpCGLZ$`22{2lvpWR z_-i8y-OOrU<%Q~OknQyTME~=;gZ@)$d2e8LjQ3QR#AJCos}S_&Geeg|3vyO9Z~e34 z7qr$=L$@igSxAvroKYCbIr8@#=q+7VMM$6TMAx^zh_47f_xAI*MJlhIFwseRh%LEuVT+M2 zs1*mWa{=F-ChiI|AR+_!%Rvda&V1!vADAQKNQ{*Em*nFx zW?%3xMXm&SCA{!i7R{MwA`0w4K-J9FeUGNI)mP(_K`V-o$DR2JiwS#Hy^kQP1rE!KkiN(N97yrQpOu<5 ziy6tYitDzS*hTvCm$eM|9`*FFxhbgzZJEq>Ztn!4EA4D^>zQLekT%ly{&6Xm0~%{+ zhLq$pPJ`&5mXTDRh|F0U# zJJ_zen!xf-st4ovUFvQG^s$8!zn1i6k_M$p__`S#iwFy!6$Qw;B~4E1<^KF>Ff)|3 z9qgTe#8n1f~5bkaR~o$*tOT~<&@-*2xN#(M_1Re_IXJ0Ty~3+$~y}q zV`IW2n{#y5+`K&2GBDe+SL5#m?Sb=vsi=9^N<@2|9baALaRQS7{3(NsynNWFYYlc5 zR+tDfPmHMdp;kGlGh%S#m^$d1R9ru{Et1FB(2zPnis6rw_sNg9fc^#f$3?OjLk*FV zOsuH*uZ13i2&|yj2bhbKr?nNZLcf*xnj5lSb;exM=wZt2&JQ2({EtoTH4MdCx(z3V z4yq-DNj_IA^TpZF%zaxu6B^q`*L@IA9hG&tR_v7fFO-blz^aL+vJ=Kmyl3$8QW7n~0pC&2B_KoZpV&GqZ zl=(@^+rGX&hYC4=BPcb}=NpcXl^Cd1=m+n55%7>tl6bm$ zEm={Ix`m?mo3Bpl$FV8C4P5hI%7qFuW=B>SOzfY=M0Y=J04Z1`2;%~SThq)9mEc)v z*4f66oxv2Q1cub>(O*oqMsa_);4S=SuOs|5I11*8*EfY~BQqsUT?mA!-ivI&+5_hB zz43ClPkoZh?n&GOH0^wJr4ho*K99vqE|-^2JF4Le(Tf4FywR;5o(FhLR0Kw|6fE0k zf(IUv+!}oI+X0|w+Gw?Qc{mnwI(}ga0<+axAZCZbmvZx8pLGG2?~BtYoh9H$s5)QS zd(0a|muTkhD8#_Cy&!$)FKUeCcRf#aNz&u|vEIpy&Z9HdHOTGBo?b>c|6WWlz}Qcl zN9?@4UTMVI8}Odz(=NXTg~ILL?X>myHLP#V?{IcZdtNp8qkZ5S7!*RLS+Vizhu8KH z^+Z|*5i-|dD3-^11>N%3sn*r)4uk`0a@5% zEbeb5jpf$VOz;wUY~wbrQfBkSdUu^mO>=-5Z8)Syv5ag5+jEl?IAx=&g@nU>wu(Mx z8~WAi2SvJky1?v>m3(g(_%LbbAl-nT2$=4#UEQiS6EkwgG2PT zm+{6-GVyR$HcFbO!;qWF)52*#f0lFYC}u-%pCvq}4>~Z@Zuz4{+}2;mtskPIgj{`c z3(lvwku3cp-odkJ4A1ZD1TE-c)O6A`l_^XewOWIupHB%I7M5Ov80Y%bKgNSH*`;Kz zQ%3CAO;O@aB*=#djNd63#*H*LqkiWS+WB8!@9g2csPf`zdgS9@7ZCjZI+Q?h$MkoK z9H)RW@qDH?qnDu=%_GuX+xHUANB5ptwkhA56_s(KRgD01l%7sZyzlCJBYcUl6!9S8#tDpXa^@uDzYWyJVml3fze5#^LeE_)@oLy#xYLfJdE{G&{jWloNC-7 z4+Jgy9L-kpNfRWOB(-)lYj~S8-UN`Kcs0f6Q~aBtw~mpeR0yBdSpUc0t#D;6v*l(I zU(SL6s5bHu7OJwiw-)2p*XnH4kvobD4x+9Os|xX1h1c8>GC|U0KS4c%>=irFZ;Px z8c`vPiu*V-lL7YBsm{3g+Km-fhyQwx2@E>a-|V_k(7OeKnPb3beR1FWr7hTg7#w1 zuM~q9Tu@@rD#7ZES$Mhe5pX^~sTNXHZU>O#wBbsKeh^8JP}E|+yGTh7T$FvECUP^Z z>1X(fvir{75|{K|yq*TaDkZ7sXr!_@t}OqUXxaZWjb2&_ku!m1=g#a|R_4&2)}2!t zvx=$8192=RM0#tNd-}E&)XP6aCAWp%)a~CO9Q5N@$;&LMG^Yv4l5uyF719 zh@t$f2Dv*MR;=ldKYyN_ts}5T3JD7vJ(f|$G zI5M(B9+8`KBrZU~F76F)_hJcR#nhe25g+nyVG?&=s~Q5A+|mbq??H%{pflya)kCdouug zmCBEM$?36j%bfBgVR5X}9>7GlXr7QhKnTD;fcfGanDpxWqSwrI+1jr58;38p)S<;i zpBAra=0%N*)IwwxI2xFo5fzgIb^L`#S2g6*_n9P^VC2)WG%)ktB@h$LMh`@5JyS(c zQ&W>ZwIlS_-o7S3|1l807;E8Lv);|DtHEZcW*sJRkDSy5SO?3_Ov{=mxDN>j%f-T_ zd{>f4#kgK`038R*X2l5M{KgbLZ9OFi%THj5EN4C#&gMcP`1~xk$)9~0U)bB1ds8noc6%x(n5pe@IjGu-x1VR!vXSqubIIG) zz}tbO?2kF6Dg#eVkJtpv$&cnU_}AFJ8-=994~BhSg<@Lut245&8$-~UWM&X#IJkYu z+0sfH`Pb;Q!*;SEN9TJ(af(VBwbz*I`|4@`>d+eSR4pt3_~vmZ4edHMP?2tqpIt-9cXuDY_tB z-HX%GH)tPEL(l9^@e%)Xt++4cg|TBPw)09n@bxY!}#8ZvTDom=#F~z6@J>=F|0aJqc(T z*E;Z(*RRu9_9t_xAYfM=s$Jo)=vN{?eqmt%HJMc`o%*F6j0DI4sKqVbeBr1kYd`;a z8+q5V%^8(DgUJ^b7!Z5&0cR9|ppF&k8MRK;lBBBuxI>0(1+1;8i*~q+XA%CC`qfh% zB^USOC)c-YgsJ>U8us|bA0k0ZQ)pAyb<#o;(blC=WB?Qs90>{T-YE$Ic z9@dIPxLTkh4hL?)THw$uO?8?Wl;}8D+ZB{WSN5)XPzL3C)W(dqMS2qLH#Y6R${Y}I zZL0%B65Y|%mY^W`L7d9>!a}9(OK8MC0iFE2f6k{8{DBR&<%)S zUA4`%(Gz@^%ag6yWG>_Ah-`>*Nm*HEYqH4Qs*W{0$A~zXl*r8zq=#Ix?q%^n{&0Pf zOcFg?KF?b#`IOTGJ)F^UBKc3Fi}~4{=M!v21Qj> zd?2>?4q!-jJE+DaBD;#fdUKB(=lLUZpTo|eJ>>tUo>j}_-1uO(F$q6wF6p0;zDNYG ztcM*+HJB7*dIG>8h(^H)yTR$k^taX8L7*jb{yu~P#OrxpHGS2kP=s7s&oA^KI=FoJ zYw)GkaiH<}N*q)Q2XwKLP4uhI69Ae4Rj0ngQ0p-B`bD;s>D7|A6JNfG=d*Hd&!uHm z?oQ4MSj>m8{+bsQj~?DVK02@r3e8ge7i;F+9noWL7aKd}Z3l24{C4N7wDD_B=Ucbc z)I}wt!%0eF(K?y8w-pdDF6DjN;Kqu~*g=#JCFO#D$sW?OE1K^~=)Zr)0O+f0;C8dPh=kBwBQ5^qfv)ra8I_?zw1U7XA zQ`3il6?>QfzT47;{jf-qTjUZwOr@*lQU?n_ATC1h4>&fC@H7P$I|3ix;dvub7_b z=Ab-?T*Z~UecYz@H867)nKrriJxd)IEM-&9m+dtc|eBwxkXbRi4e zMy;D&7YBHK5@4p`gVUa#UP4YYf(Tt*iAz~#J3fn z6H8$qHMF(K8j4?gB59$xAnz-<#C76_>$Cp#SAdg}REGK_&53sdu6r4@(jBL$tlaB6 zTvJ_b0f4Zz_(90Yb>m0UZFk!mK;;1pdW#hEQFnykc@%F*ow74#8pAUwpH6api|*Km zW2`uZrgsqhou&N9-D(Swg9N=n`#Tg`kOy$U8mtHU{xay!oNT@7uo+aE_M>w<67Y`> zHxCrwI@U(5fgR@00ORs%H_*~@Y=ft9U%@yI<4RAD+7kv(J3)q_B6 z*VyWA%wgTR2)?b&=L=CTq8TT?Dg9w=Sw3Hf*XPh0rT-0kdqv646#6lvW9KwKV3#jz zc6Qb*PG0NIv2eQ&tf<84xHitccXp_XxxFq^?|G|}$1+~Qe`AMIAf#YXcd0jt9jc?b zL-i1#i2|y^p*oCz8gbpfcO-(PbMA(W10oD1`jN4*PZP(;EN5(L{h)?&TKYKbU}@>z zJm-w817kz07gQp22M1E&ALL8&HlQ|UF??NXU2QJJ>R@ALNoZV4_XQny8~g`@<&EVU z4CTp)>yjY`p|?6Gw@d92R^6P#bswTRq)n#?E2g5t@F{-*OW~O*%IV_Q;%t?4 zRJE5RMkDhrUk*P&HF#0!~dw3V+;(C4U}u z(H_m(S11ocbt?EdchS#3aK$fJjmxtP_vAhC#&L+N- zgG03MQ~ZJrbt(}FH=F)X)7_t_R@^W^G-sw1#|9MH?X2U8g=)F5H9w5fE4@a@d? zZbWP#0Z+`INyoSEeV<0%trh4Hj=F*K#aX$M0Ot0L2l{ONhc*H&r@Z{Wr>EzbyVVBv zJDH#JTXj4|S>mbjAdFy8Uw{9STRrjph&+Z155L>1#yB)%Zx8@)8Pgu#?vt84;X_%7 zzSn3YNHo<89a$g~rBXx5O*mYLpS3q{3A7GWwdUVmh^O;WSgvsaFEUu!$)_(^T6>kx z!}q8=J-B(W)haK3&T zN`~|UGhTW@EG?PO4&d2ms8f$oCjmQr4UcmnAt9M5PeCCe`GS5?imq#=+fY|+UWV4< zcKw|Fb7ReO|9YgQiBsZ|b-;8zbz}O?*c8g$vEo+@I_8|((%gk`&hz~%@Jvtvo$c(s zR{i_)Y$7NPJGr2UbdUr3$xF976q&jN3Hf3>5jZ-60b=m>R{lazg%`8Y6`jYD!7TX# zdF&%G{cxIW(D^(%34w&yyW1QHoc;)a!JT(@3RnTzi|OlAp_2*_HNwI|NAr=OkERjo zJ0n6nZajv==g}SJgU`KF*n8nH5iKlw0_>z!lq7KxIx5y$=m4ru{$4?7hr#x~TnU&Q zc_;I+55-*;ThUmN3|K}k4;})`Grnr6A;skE3nv_M3 zra97Ya7uaIg~Nv)tjGO=ME|;_0KE&=e7Clts2~&J>RNQI${a%@g!h?4Xb-I0DTlc(jOG^p9Xt3v6hK5vQO;1m!y70(NwrQ>lWFrUk z;}61UYn)+(Aa=n?3#JwL&QW*)1eX{DCxn4R)7tdD80$-c?A4BUc@b-NJ?8mOnxl>=; z-%{o;M8Sk5;ssIo+I#b$mp?CHiqBwN;< z8viT^-?x|dTT<8?vKR|!#1foGh2Fa{d#=PQ<==q9wPWij5hYyC>Sj&ye!NSMnVUzu zSfK&dwo91qmm9?8w4c5yurtD?AnUcdM4{&O#IV�|zC z1J>p_3v)$r#(!`D2G4hbrBF!xd+(Hw=bh^Ikj5we3G4l&8egrxiyKdQT3%lqH4oLf zZ>SlUzhG5>orNdqcOm?m6>8sE_+3f1R^J&SIqoeJ$3AYfSO##*l#Hkz-ZTIPHI&;( z;B+0FpL0mx(qICKBeY`mcf7fmMmc@=+JKZ%eB3tRoAuCzCJ4NXQlJg-)F5?LnnZ0^Ek9=}RG*J1emu;M3d-?fx z!^moN<0WO`)Xqy^qHlHm@KsAGz~E{QB`nrlnmi#LphZJ()mE1bv*1lV@vWPSY20rp z8D1xoRbt2$-535qfO}ST+zHs-k7m58yz4xMltsEHMrirJPbrBS(Sh^df{5pTme0*E zkbfL18PTsW8_c}_ zS{&dBYy_SG&~#qlSt?xQ7(d3k+AdFBHU#rYtHh)D-N))#bjLq`{Lq|55Zin#{6Yrg zX*wj%kO5k>R@BJiDOlXb=dfDZ)_F&xt%ORJRBv>T#`)NObrva^M@zZ@+F6RO+`wYL zxlH>E1Z2c;&6#_f?pc)K{5F|PMCew)$d2JB;3>Z{sVNENV$5Tepkj4CjWn3M8V*Q9 z3imJ(BRIcjFD3;n&h0m7q#7O0e7y7J|vIqe8KTfRWikVYH((p3+zM}+7j-ndp z_oKT=Qk5q~jWeBZQ4PZjL1E6Y4Bl>Bq(E}h`@w$aDoHRI?xR|_fz&2a3l11zQlGQ* znmt4vVNaiqBp>zvTCgoZURo;GNxs-gZ#8xBrSrYAV4~N1WzQB4*)Kgq`uxw*kB|YQ zW}hl6dty^I30PBwd|6xHzzD4%Efwo2>gegU^83&!DAyvkupW#$39ggTIv#6jOC|aTv5SRI z@#X{?2fqDj)vsYiOKE zpYq$Iwr+*}&SYi!arER}i}k(8!xR%Y<&$At$_qW|YQjIxr zBiipGDSGI&tHkZa3UF+C@&hSMcb}OUhmnfl5iyQI3!Sugu8F25iDO3NDp{sATk$d0 z>FH_sMb+}@0HGd`zN`MRUF?%P945;&9(WeM8F-wXcG11w#iRQ-yP4t$aejYFnKYGe zOlh$+$Fq_N7VhflEm*c)B)4b8}#v}Ywu8=RO%#)_SU6Z z-5_ff6_u~xz9;)BiHUOAl-cAd{Z`2LS%yb)XzWo8v8Y;nPyUIoI0zlpwF_uYtHQ#W=)l)7J#7dc5t>17p-9_O~pQ(M4sQ{kOE z9`Gl(u(Y&PAZ(hSkN+&<+_gUV*>SKZ?>gVH^-@_%P+0iaKj0(I1KU*OkU}V`h!8|f zkCQl?Xl`Z}i$EZNRrU~QvmoY9>7P7@{}G~u8+bo-sq=JE0W!eWgXvfx1AyC+%xy~J zZg11_F}wbiIq+n8q=Nd;qtwRrZ7F{Ym1gg3?}6^<>ENMn=r80RBez;8Wo08V6P`l1 zSIAs8mfvG$fBqo_?2gl67KZOmSNOP(Ni*v0J%CrF88}aDynyn-bxK>6ada$O2UHgV z;Re7whL76Juu|>8DR1fw+@C>#7?BV8@bf|EIVJpkg$2j$_@AJPM70{O#sbT1>)lci zmaJbSeg9?%KqMh1H(-D83t%K^=;?*~@EOJ!LfR~NXK_H2N+SW+T@tBne?Dsim-w}l z5Ndk~g_~bUNl-jy%$b(%=*Pl?EZ|X`1-aBI*toy9U|rp5w*Nc>fbK7*k++Wetu(C| z7nMWvk$R3$cL=asKCL^OnNgIH?!ZOE2gxP-xqhF+#~*$$k|wJpBdz{Qx~m&> zGCrPognBGn6Ro?>lTq@DGU(D?xsi1P2savzZ~+kUk7$+u<-)p?rcumh7xA1yfab3ymw`ZW_`7l$ z_EDaMdh}|9YO>1hSe_~gUf6eFg`b)>=%_$EJ!@)#Em4S>?YCXDsoZ5hSt?W84I1oc z0F&xi&>vCah4CKO#oZ|;1x^xyBaBV{J@W4yFcCjvRPO1$EW_Zf_;B3(;Q%@O-xPEt~=>*u3~q@o(U$D_QeW+#J%VEMr>Pv~HD&dOm8RCNGe=3%&s!*qP|? zoUmEcCCNF@p~YdNbc%WMqP2-0P0?isB|?LYcQ*WvV7U2&=%_$uAe9f}<;#~;Kq##f z?zJo0$?y(?*!@2JNT4T$ILm`&4nl%x&@hY$}l&Pnsrv*E{JNJnAP0n`}>*V=90RRw)u^^J35 z-nV7J_i#Z9G)cVj9w3iUeOa$M*)26X>N$twV=cGOJ=4@NwhJI08jxkcbXfxM;Hd9l zogNu@R^T=@Y<^=Y?b!QeptbVI-ZU*sl@2vKvs!>iQ?j|CrD)35gK*q!w34CWdvglG>ogqd&ov}*ut6Llb?qAv zH1f7NG?3Ie{^(W+E4%UqEbY7B>D!kkL^?ec1y@HX`qn@$Dn_p$D1323j} zc8rOVgEx3rM)Zg>8A8VjqK{ihFCYY8gl?brLq* z84kEoRt}2fC=s%sG-%=7%28=8u8>zz;wIsFGDG+X$jN7O`Fis?1b@JLs$Yl2R3B0= z6OHvXu4wa?_JG}1sV1dRE<@Qk zDoXi3^|usUAQ05;s|HcWz$-Dn0vQk8fEAF$466+2CvB^fA!)`jj9$1!$cq-V_$N)E z(3vVcww8!@BfU*D2AyDX$U+*0CK`1s>bp*d=R$Fhz{3J`Z;|fyssq*9o4_{eim<$Z z)N$+)l_Vhx#Kn#f;n2DpeE055BC3e{f|jfD*=@5M&<-BkbMCRSSFMu}z3Uc2dIN6yZ!otEB866Eq!@zSv zyb(WxjD&z0(qaW3DhhlGPC_b5U1ERWxfFz4UAxV-6v{$!!JdR4RJ#{#kEJBe$F+nB zz6~$=-Y78hI$Hi3u6@d+)f5Ed5`CN! zqRu#&lBj_944X1AE%^pmNYX|v|Q8f<-w=V zqgL;z=GW%xzm?(b$CokT8#*y)pz_EtzTsZduRWSfOz|_?!n_jnK>RRLiw~yV0ImFaMnJC>3cNoJ!Pf+M_XxUj+Ma7_ zXav1#SIn_kB!2LKp!Iz`vnH<#4oEKFbACAQn%X@5L*!asvVL$G1A}y@NJ}_y=IvVl znG*YhzHMYc*V7x52VV@h#l7YJl$^ZB{3DRty&|{5llzDaS-#evi>!?84TIY~w{VGB z2PCdtNIkCHd0;QGNJ}wN4`7Kt%h0NbI7>xOf4C-lk4vyc&#GWJ_7sq%GPudSceF@Y)*?Zs{`&BKD)T&KoppXldO?(E3EAv7+01JW$lGdXuV8&qibef zeoOkrD73PJ4d72k3nFq)Z7mO;=~}+;f*&KlglFpJ*uQ3SiJ-)B`tZleG00F#R_&N*FlbtyWvolfQKep z-P|YypZg~$#ng>Nh3D#lib~g;KwoEZ1W)sc)?RVRt|>%9`Z# zQi8rBf2XvYq|L}!%qkELPyG_uKj7y+Yb#gVnM6faJ`I|#kWM~xM>1?DSOfMfOL`h6a>Xg{uIhnlS zBqpu)vtcwVFXE0P|GPVj%DIO}#SW)W43?rNnO|2&?xXRjKI&fDKcvBNLjNN`a$(%K z4ov;|`_XcarwYHM-_ZVnu_FEy(O^VacX{B?#e57>LH0iQ?i*M(pw?*ip#liEzUL)b zjE=Mgg>M%2-QHZSoD_Lwh|R>h+YA9T04^K`DT0+hh8|uS9ci)JqH{CBXO;}PH?~yo zu=CbD?2sj>_K1W%MOVNgy{U;A%HVUE&?U>$hla@M=Jai=TX>UGfoCVKH@q5ikI5-1 z?Y$hLE~Y#i=OwullHQMIgNT7ChhNpnH829)%5D&PBe)>aNm-neX&9Jv?&;={@bE?i zO)#v+UXyPo30E!@W~KbbwBSXIlE#aJz7$`-a1~^c=&fyXw(fij^^B~JpO;REVruhxRkX8xhc}YxU}3wPw6`c>Hj~^y59&u4fn*JG3#>uyFF!l2((#Tg*y@ z&~RBM01Vq~=>L>W9ZySeZ|N9G*UT)t8js)2P&P174*QO;iEGUX22p8^Fo>U3=h$vC zp0qy$(c}b1YZr*;9zP)1j0ncKT(YUr;`X16vb6B%(H;o2Z@ zy!M*_gKaKuSs!*QdHeg^#&SMA`wSUxZcQqL;HQOOPUI^#>R6bF{+rJ@uQAO2dlhp7-tN0KR3Ywu^H_)Q$qam0La;QiTM z7!{&wVr$=jJ(~ltOE8GH)Nb~U!J3y#oZQ@#cR*R%BPGGZ=aUx1*~8e3-W`Gj0>dDAJ2{<-ez~4(6f8^wV#l)G(XL5pXT))*kWX8TPBO`+* z$kk|ODt-*N^Pzkm9^2zHbB~DmvR*z5@dC0XyM}xOrLEJ zwxO)8j-}_X21ai9m`>)2VI2 z=-r`r-vv+;DbNJn6^{n(_NAL82eV&V)6=A~h_no{9G=x*O=yEuMxq2ZYJ}1|k!l_p zLM}M1AVO&vWHZ8D)CSZ&7bIZQ*eyXN8Ua4w>ca5NfRnw$BQSA^?9bO92D4kpDhaP< zfY26a77JWzs|auK@p9`xF0}$~SP%G`E7sXoJPN|SX%>>QRB@OB<1-#u_!=IaO1n0e@LBs1Kvt(lmxm!Dfn_uC zbT?*OFHX~(ZX~%0PgFTX&2V_ZW$U5BG*|I>S;}+&1bGfl;WSI@e^Y)PirIb}Ox=u1#`zA= z@iZ?xukw_6TM*i;;ItS3Wc(P&t*lX-y21(8MI_8@;v;cqHa=lmMLqjZy1-tnVH+?? zGr<5FYxtdSQOR1U1>vU+Jic7lVl7k|DCPvu#I*PZx)+h^uv$+fW$!A$n_B91aEnRZ zYm>62fof4ho)-Wc@OjVh)AmwxQAHA6n}8J_PGc`?=fXeq9K`=m&6(Gcpx|Rp8C5eu zY-OFJ9;aPhudB!H$^h==^G4*1qcJdHi3OmzN>tMNC(XC?_9!CJDDa3k%Q3n9+vqx< z!~{01eoftL{f`4ib6Wq#UU|Or@H})6QZ>6><<}Ww(+M4`mX_*65&x8~BF^M|fCLi@ z?SE3x`ae~-{{PTum9PP*Fa#6*(&Ik>TJW7<0wpCaC_`zqb-t+V8Ov(8L>#FHyDDXc z5ack=o?RwF3#fwOL!G%MT2QQJf=vCe;SO@Eb<0CPW;>mmaM+Ybp6txf-t|u|OU;wK z+^Ab*!4-1<%YDZO_LV{Q}Vjuh&4PV>l`Rr*fs%w3def87Qf z{gplaKhN}N8*XQ8*9uhbq=^a4bY=1>$APc=A7^Nk5^#owS#kR)+ynl0DNzHu_?J`) zP~_|?fOi=R)7DZrlX5ut@NtV1vj^^Eu3xxz^~HZKk}GlRr#1Y>fGpaf5`eur@Q5@9 zT8p3Xwsv=5L8D$$hp~9biq<$9V`~0h+M`&?*y#U$`l8ER@85b|6u;1`O-i%F=hf_F zZv3GiKSQhb$voii@yy=mXp;w34_S);T{gYt`^sejOZXGr11Nvsu4lIvcTxFY4>UB9 zGx7@Pm>ItTVHC~#!4~PNVyRA=>vkBE1QeOxiDPze$?-px0{`Du>-|^C{d)b;CN~?t z_))(XyW{TzVrdN_grU@|-S46hwyf zv_jOZfXV`sso|s~%wxSEfVDe*aWe~W2LI8GgiK(N%O_0atzxQqE^W!%Ya^6r(7)6s zp`e+OWJ8G^W7f9392m51g|65nE4i43fNP|v%*xK;dkbNio3 zWlGUC2p^MuwQf6X-ry%)rA@pymykx0Ec=Wz_$C;y>gw+-~hu^H}V-! zbd-a0l&rt!fM+awayrM z=3^zqAu9(0J)pY#T>$9JU(NU=h5?T15M8@b|L@w8nE_DY?9w@nq}97v?hgtAW`46$ z(prlzUS(4iG@+2Q({nGmKh%pnCC^E4=}XCE2|s{U^>%kQ><)L zEwQF6XuU%pu>4oON@7ks3BunR>-(!@bM0mcy#yk+lo|&i2&@);jwzIFwGMqwbLGJQ zpt+U1ej^jKF}1p%BK?^5gk$9~>g`^P`>Q)+4MnZc&bDxa87s|(OF?eBA(dE;$vN7q zDTUjPzhNn-XG5H5LlvVjRY~;Gj{OPRr#Ahx;Tn+2zEHtp&ogiHy2v-V?%nac_$}a%L+~bE@Va;h+N-{;Rreo?h zV_T!8b}}+IzC>kxS-!|M)phPdPn_SZC_b_WGP?R4Xu5<|+kJ5dP|TSFm?1ha;EZe^ zD{iqt@`WYDny)9P;vsY#_zi?v6p#@T86b?mKp4Y(BCD)y&cgflzM!|DeiTmA->s?1 zM|ij)iQ-Jy;u6I$tq3( z;p9m!fHJ(iP02hVfJ1HKRbv|a_TdXXd3$e!y!2id_ZR>yNSpZnw##9vW;ulrvSRRWD>P|??dqjymdTJHW_v1|Ykt^sP2(H0l{599&9)MZou+An}l zHfr-1S;qdK*qXg1+#0gGtBv>+-vTm3Xdy=zE4XnacTE4^uFGcyAY7T%e(*8v@nMl_ z*J23%2glxv)danO?;d-l0drIuXFgpna9LvJHzrB|50XbM9o9!PC3Gs zU7a=cFwxdXeK@TklACdT!wHzy?Ab6U8u058W*fMe=z+p;UM=^Wd_!}e!7NGfGGrOW zVmJ0#UJZuJQfIcBKXbtLCqAFkiIm?rb=4Q!`py=R*md#DfVta!-3F43?D<%T8SeN0 z;F`fxj)NE0l8adcmN@;yKPY5vx@M6nemG=9X&57%>$kcR*Zu9zh`k3U z&L@vy`@Xv*IZw~_7aaR{%!Hljj*l4`Kmb4klm(0p0f99r=cqLNf?uX)fE>EWkD`Sh$WP1hp?hX}FTC*4DVmwpu1wudQ(#dZaE%=7iLK5j1OYF((?Md=a6)v@#eoTjL z^uDb*EhR3lCByku#38_w(=?&hCD0+rd(=L(izytX*iCBAHtZIQ8)bAt9LEesG;_QDu*-bl_4NiW8UY; z{R&;~&?yIx-jv5le7jY_ z6=3q`?jxBY8Mkd{s7}lC<+>}k#g-RVt=v4Q_!eE!*csvPUagG`|A<_NDu1#Vq5hkd ztel}*6xY~#hCv^(WH?U4Qk3sf3shW}ODgmIE?u&VCsY5HR7Vpx22l-cBy;BRZ*>U{ zai&H_Rs($N1LY1qqg3{dgNGIXeA5%Z-o@)wLG9^!vV1}#X+VR!RS{ccbp6#P)usz; z#9|NY&665<_T1?x9|j|Dn#B3)^wdc<3!ffeS2$Bh3{tRBvv_;{Fhkvev`vX%2%5)VqSeyVy>S6sz>{e(AFrs;B|=_(DQZ}AuUcFNm14fa~~QAWUL z9rgq`(QkWLMgKsNPMy#0nNg%E-#sf_qy3F-BqNlSbo$Kj!K&0Ds!sh*gYvF`E{gK> zgqot-<^yAtW&~GE1;lU!Cpg`T#>qA{`f)d_MGskw&T!41Dk(NWrKYCN&(D`ES0tue z5`(?x)&}t35twXA@aG`)rfmK9e=pU>u2ckjI+0LYk{^y%xv^?&8MCJ^)u9ZuLwXYQ z_!9VZ=BJg6Dk~Hp(!6RU-oMFJd7kR)y`X<z{vXo#DNW1Y+k~~-A9MHx|nyPUZ zb*BE(j@cfd8$G)RPuY7v?`1~(**b&F6|O{m-q543zsgUgTdX;k$9$HN?@h-&Ue4z> z)P`RxE{q(HnH{i2NY`!ad{Q> z!t7WG2}qekw3p&(t< zv^*pPe z=l9pO+Ep_{d7 zZJ&N9aS%Zik;03VKHw$s(X#MGB+#<_VChV0Ia=7>Ob8fx5+y$54S%4+-<`nD~N`AF684}b!^O?tgIdsh1Et^t3nh?)<(o*pH=aQ zP#$PQat^{+?#N|_7A@)GJ{XJ-)$%ut3_j~fSwsS)_`03lC+k(8bBT2sghF$|#ldQT zkLGU;UeJgm0{!g^m0A2!MPb14fCEXJCqW4$YaT=wE#-5dS?!dkL=;cHk(vKr2b-Al zpK5Aq2u<{OJpL6?`aMCQId8i6d2p!m%h_4`sd#g@CIjh)v+NI^KFt$N6PJ|iZC15! z-=YfkW7@!k#<+nDP;HEfyYSVQ0=T(A;rK^^A0Dm17NZQ@GX6fl!E^Gabnvq9QVq(jl7)IjdI(xqdC)0+y0uL0U;zNt(8yAqnAlCf<3ziqv;%tPgd6;)H|n2pH9MeF_& zYand%8!WDveaX>%oIXk$k~kCZIBJa3r++53kV>~d9+r)$==0$p=GZ))xaJVPq$4ae zsoc)xGuyHSggq0ni)V%&kF^6)M#uZ~RN`cHFPP-axF0~$k`;}!ENg+f7kA}7^Bay- z2bg&j8LNi>VsNVgHeM#r8$;;CJ>!4?-8K#Sg`w;~Mwy3bHE_Q+?>pfoGC;^l{h~>N zgMB0krfmUeND$2YzF=d%IpqiDZ@pEkio!jR0!!Ow2~XPxQuN~yge$JEFxD0U*+l6a zAy-ZM{goibYsEuS=FO$$BumB%t(a3}o;7Zby$!ioI0!&f)C0MJXK*q24SszJ1;2aO zpBnDH)CWwTk(89|n(HexPq?EiHODqd-F*&}T_>KOx#DY(tdsbeLEe^6j56mIP0Zgs z+i?rn9rN+z2lRdyAz1tc9-o!LIOIVrB(tigF=-|ND8S<jOj&wD?wjp;4(_>%5`qD3}%(IiaQqc?H+ZoYbT|rSj z+C9(re1GD#?9vdtc`$vz91RQIZZ7J$lqadYr`f zbB$ZXR-w*!tz+?d!6v>1Lc75RQ!!wH=fz;4NkCW{3n$9i9_+w)Z*+buLge9{Fxb^3 zoQp#K7VH_N+9{dY;cL(4fNyQjoF1rgpyXwuSBTay%VYk#uiJAqGgo%GMn$ekjjg|o zI-?Yk>GCVb4OZ)*+srvkt$H`~x6)Xd3)f#^`?kSyes)toz8sUgySwY#5ubjQ-BbNz zLZ5~cHEQwuh|;5MsVV2^B+e6umg!3Pn*@YOKg&P_QN65XvhUm|9O# zpx0cs2Zy^DzwZ@(hqEU4>qEPbF1!IVXqN0A6vf)j1TtFZ`4yF>eDU~rj9Y$-aJkxQ zk}L38G^I$hc4Z4M9Sd)=$3foi?uRJ7eBc85AgSRsF+G(QsvNr=#2j`4s0sh?M8~1! Y%p*psgWt_|pl2?muVbiPq-hoM9|5gbr2qf` From b510bd6a7b2dd81c59ddb915e0c4970049dfe24b Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Tue, 21 Dec 2021 09:21:23 +0100 Subject: [PATCH 05/28] setup delta_time --- code/controllers/subsystem/economy.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index b6e6b9b17b09..5aa8f88d7a09 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -75,6 +75,7 @@ SUBSYSTEM_DEF(economy) secmedsrv_payout() // Payout based on crew safety, health, and mood. civ_payout() // Payout based on ??? Profit car_payout() // Cargo's natural gain in the cash moneys. + var/delta_time = wait * 0.2 var/list/dictionary = list() for(var/datum/corporation/c in GLOB.corporations) dictionary[c] = list() @@ -87,7 +88,7 @@ SUBSYSTEM_DEF(economy) B.payday(c.paymodifier, TRUE) B.payday(1) var/effective_mailcount = living_player_count() - mail_waiting += clamp(effective_mailcount, 1, MAX_MAIL_PER_MINUTE * 5) + mail_waiting += clamp(effective_mailcount, 1, MAX_MAIL_PER_MINUTE * delta_time) /datum/controller/subsystem/economy/proc/get_dep_account(dep_id) for(var/datum/bank_account/department/D in generated_accounts) From 72369e880d9e3041b4de5da1e89bae5e8e6f15e6 Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Tue, 21 Dec 2021 09:21:52 +0100 Subject: [PATCH 06/28] more of the port --- code/modules/recycling/disposal/holder.dm | 22 ++++++++-------------- code/modules/recycling/sortingmachinery.dm | 8 ++++++++ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/code/modules/recycling/disposal/holder.dm b/code/modules/recycling/disposal/holder.dm index efa8d9a5e3a8..d2f66da4e994 100644 --- a/code/modules/recycling/disposal/holder.dm +++ b/code/modules/recycling/disposal/holder.dm @@ -41,21 +41,15 @@ // now everything inside the disposal gets put into the holder // note AM since can contain mobs or objs for(var/A in D) - var/atom/movable/AM = A - if(AM == src) + var/atom/movable/atom_in_transit = A + if(atom_in_transit == src) continue - SEND_SIGNAL(AM, COMSIG_MOVABLE_DISPOSING, src, D) - AM.forceMove(src) - if(istype(AM, /obj/structure/bigDelivery) && !hasmob) - var/obj/structure/bigDelivery/T = AM - src.destinationTag = T.sortTag - else if(istype(AM, /obj/item/smallDelivery) && !hasmob) - var/obj/item/smallDelivery/T = AM - src.destinationTag = T.sortTag - else if(istype(AM, /mob/living/silicon/robot)) - var/obj/item/destTagger/borg/tagger = locate() in AM - if (tagger) - src.destinationTag = tagger.currTag + SEND_SIGNAL(atom_in_transit, COMSIG_MOVABLE_DISPOSING, src, D, hasmob) + atom_in_transit.forceMove(src) + if(iscyborg(atom_in_transit)) + var/obj/item/dest_tagger/borg/tagger = locate() in atom_in_transit + if(tagger) + destinationTag = tagger.currTag // start the movement process diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 60616cf5e7ad..e1c89007c5fd 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -8,6 +8,10 @@ var/giftwrapped = FALSE var/sortTag = 0 +/obj/structure/bigDelivery/Initialize() + . = ..() + RegisterSignal(src, COMSIG_MOVABLE_DISPOSING, .proc/disposal_handling) + /obj/structure/bigDelivery/interact(mob/user) playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1) qdel(src) @@ -79,6 +83,10 @@ if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. to_chat(user, span_warning("You fail to remove [O]'s wrapping!")) +/obj/structure/bigDelivery/proc/disposal_handling(disposal_source, obj/structure/disposalholder/disposal_holder, obj/machinery/disposal/disposal_machine, hasmob) + SIGNAL_HANDLER + if(!hasmob) + disposal_holder.destinationTag = sort_tag /obj/item/smallDelivery name = "parcel" From d8ad457276e6bd63af02bafaab2bd6b93744fdfc Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Tue, 21 Dec 2021 09:22:10 +0100 Subject: [PATCH 07/28] more job goodies ported --- code/modules/jobs/job_types/chaplain.dm | 4 ++-- code/modules/jobs/job_types/chief_engineer.dm | 2 +- code/modules/jobs/job_types/chief_medical_officer.dm | 12 ++++++------ code/modules/jobs/job_types/clown.dm | 4 ++-- code/modules/jobs/job_types/medical_doctor.dm | 4 ++-- code/modules/jobs/job_types/security_officer.dm | 6 +++--- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index 34523be2311e..f62853b362b1 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -24,8 +24,8 @@ /obj/item/reagent_containers/food/drinks/bottle/holywater = 30, /obj/item/toy/plush/awakenedplushie = 10, /obj/item/grenade/chem_grenade/holy = 5, - /obj/item/toy/plush/narplush = 2 - ///obj/item/toy/plush/ratplush = 1 + /obj/item/toy/plush/narplush = 2, + /obj/item/toy/plush/plushvar = 1 ) diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 3453e148c40b..5bc23929e3f3 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -33,7 +33,7 @@ display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER mail_goodies = list( - ///obj/item/food/cracker = 25, //you know. for poly + /obj/item/reagent_containers/food/snacks/cracker = 25, //you know. for poly /obj/item/stack/sheet/mineral/diamond = 15, ///obj/item/stack/sheet/mineral/uranium/five = 15, ///obj/item/stack/sheet/mineral/plasma/five = 15, diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 8c187470a87a..f9f2ee2d9ded 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -32,12 +32,12 @@ changed_maps = list("OmegaStation") - /*mail_goodies = list( - /obj/effect/spawner/random/medical/organs = 10, - /obj/effect/spawner/random/medical/memeorgans = 8, - /obj/effect/spawner/random/medical/surgery_tool_advanced = 4, - /obj/effect/spawner/random/medical/surgery_tool_alien = 1 - )*/ + mail_goodies = list( + /obj/effect/spawner/lootdrop/organ_spawner = 10 + ///obj/effect/spawner/random/medical/memeorgans = 8, + ///obj/effect/spawner/random/medical/surgery_tool_advanced = 4, + ///obj/effect/spawner/random/medical/surgery_tool_alien = 1 + ) /datum/job/cmo/proc/OmegaStationChanges() return TRUE diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index be8889cdfc38..08c244bb0887 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -21,8 +21,8 @@ display_order = JOB_DISPLAY_ORDER_CLOWN mail_goodies = list( - ///obj/item/food/grown/banana = 100, - ///obj/item/food/pie/cream = 50, + /obj/item/reagent_containers/food/snacks/grown/banana = 100, + /obj/item/reagent_containers/food/snacks/pie/cream = 50, /obj/item/clothing/shoes/clown_shoes/combat = 10, /obj/item/reagent_containers/spray/waterflower/lube = 20 // lube ///obj/item/reagent_containers/spray/waterflower/superlube = 1 // Superlube, good lord. diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index 3bf5e2ef5c47..72667718caa6 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -28,8 +28,8 @@ /obj/item/scalpel/advanced = 6, /obj/item/retractor/advanced = 6, /obj/item/cautery/advanced = 6, - /obj/item/reagent_containers/glass/bottle/formaldehyde = 6 - ///obj/effect/spawner/random/medical/organs = 5, + /obj/item/reagent_containers/glass/bottle/formaldehyde = 6, + /obj/effect/spawner/lootdrop/organ_spawner = 5 ///obj/effect/spawner/random/medical/memeorgans = 1 ) diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 1fb73d02650f..2112c3651dc7 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -28,9 +28,9 @@ changed_maps = list("EclipseStation", "YogsPubby", "OmegaStation") //mail_goodies = list( - ///obj/item/food/donut/caramel = 10, - ///obj/item/food/donut/matcha = 10, - ///obj/item/food/donut/blumpkin = 5, + /obj/item/reagent_containers/food/snacks/donut/jelly = 10, + /obj/item/reagent_containers/food/snacks/donut/meat = 10, + /obj/item/reagent_containers/food/snacks/donut/spaghetti = 5, ///obj/item/clothing/mask/whistle = 5, ///obj/item/melee/baton/security/boomerang/loaded = 1 //) From 5ebbf1376a553944eaf3adad2e430450c197f101 Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Tue, 21 Dec 2021 09:26:46 +0100 Subject: [PATCH 08/28] fix sec officer --- code/modules/jobs/job_types/security_officer.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 2112c3651dc7..9947a0c656e5 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -27,13 +27,13 @@ changed_maps = list("EclipseStation", "YogsPubby", "OmegaStation") - //mail_goodies = list( + mail_goodies = list( /obj/item/reagent_containers/food/snacks/donut/jelly = 10, /obj/item/reagent_containers/food/snacks/donut/meat = 10, - /obj/item/reagent_containers/food/snacks/donut/spaghetti = 5, + /obj/item/reagent_containers/food/snacks/donut/spaghetti = 5 ///obj/item/clothing/mask/whistle = 5, ///obj/item/melee/baton/security/boomerang/loaded = 1 - //) + ) /datum/job/officer/proc/EclipseStationChanges() total_positions = 14 From 52a676ac58d59e0fa8782de59f1d2e23e6c651d6 Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Tue, 21 Dec 2021 09:34:48 +0100 Subject: [PATCH 09/28] fix some tg->yog stuff --- code/modules/recycling/disposal/holder.dm | 2 +- code/modules/recycling/sortingmachinery.dm | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/recycling/disposal/holder.dm b/code/modules/recycling/disposal/holder.dm index d2f66da4e994..bcde0f844c4c 100644 --- a/code/modules/recycling/disposal/holder.dm +++ b/code/modules/recycling/disposal/holder.dm @@ -47,7 +47,7 @@ SEND_SIGNAL(atom_in_transit, COMSIG_MOVABLE_DISPOSING, src, D, hasmob) atom_in_transit.forceMove(src) if(iscyborg(atom_in_transit)) - var/obj/item/dest_tagger/borg/tagger = locate() in atom_in_transit + var/obj/item/destTagger/borg/tagger = locate() in atom_in_transit if(tagger) destinationTag = tagger.currTag diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index e1c89007c5fd..e97dff7d7782 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -84,9 +84,8 @@ to_chat(user, span_warning("You fail to remove [O]'s wrapping!")) /obj/structure/bigDelivery/proc/disposal_handling(disposal_source, obj/structure/disposalholder/disposal_holder, obj/machinery/disposal/disposal_machine, hasmob) - SIGNAL_HANDLER if(!hasmob) - disposal_holder.destinationTag = sort_tag + disposal_holder.destinationTag = sortTag /obj/item/smallDelivery name = "parcel" From 9210b8e39cad6bdbf41a551e0a45b0b935fee73a Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Thu, 23 Dec 2021 13:14:45 +0100 Subject: [PATCH 10/28] fix check for station faction --- code/game/objects/items/mail.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index 21820ca33371..6e67e913dff9 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -219,7 +219,8 @@ if(human.stat == DEAD || !human.mind) continue // Skip wizards, nuke ops, cyborgs; Centcom does not send them mail - if(human.faction.Find("Station", 1, 0) != 0) + var/datum/job/this_job = SSjob.GetJob(recipient.assigned_role) + if(this_job.faction != "Station") continue mail_recipients += human.mind From 21817521b337e4ce39c6928f7fcd87aba3deb71d Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Thu, 23 Dec 2021 13:15:12 +0100 Subject: [PATCH 11/28] only remove the waiting mail amount that was actually delivered --- code/game/objects/items/mail.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index 6e67e913dff9..8747054516bc 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -240,11 +240,13 @@ update_icon() + return mail_count + /// Crate for mail that automatically depletes the economy subsystem's pending mail counter. /obj/structure/closet/crate/mail/economy/Initialize(mapload) . = ..() - populate(SSeconomy.mail_waiting) - SSeconomy.mail_waiting = 0 + var/mail_handled = populate(SSeconomy.mail_waiting) + SSeconomy.mail_waiting -= mail_handled /// Crate for mail that automatically generates a lot of mail. Usually only normal mail, but on lowpop it may end up just being junk. /obj/structure/closet/crate/mail/full From 31b3630f6b672c276cb8f0b1b2914545f747048e Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Thu, 23 Dec 2021 13:15:33 +0100 Subject: [PATCH 12/28] fix fake nude code being obvious and check if code is already set --- code/game/objects/items/mail.dm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index 8747054516bc..23fdaa1e08cc 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -288,11 +288,15 @@ /obj/item/paper/fluff/junkmail_redpill/Initialize(mapload) . = ..() if(!prob(nuclear_option_odds)) // 1 in 1000 chance of getting 2 random nuke code characters. - 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)]...'" + info = "You need to escape the simulation. Don't forget the numbers, they help you remember: '[rand(0,9)][rand(0,9)]...'" return + var/obj/machinery/nuclearbomb/selfdestruct/nuke = locate() in GLOB.nuke_list var/code = random_nukecode() - for(var/obj/machinery/nuclearbomb/selfdestruct/self_destruct in GLOB.nuke_list) - self_destruct.r_code = code + if(nuke) + if(nuke.r_code == "ADMIN") + nuke.r_code = code + else + code = nuke.r_code message_admins("Through junkmail, the self-destruct code was set to \"[code]\".") info = "You need to escape the simulation. Don't forget the numbers, they help you remember: '[code[rand(1,5)]][code[rand(1,5)]]...'" From 9530e67c99d4e578f04aafe6f0b461e771c8e80d Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Thu, 23 Dec 2021 13:20:10 +0100 Subject: [PATCH 13/28] fix variable name --- code/game/objects/items/mail.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index 23fdaa1e08cc..cb6c84893f91 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -219,7 +219,7 @@ if(human.stat == DEAD || !human.mind) continue // Skip wizards, nuke ops, cyborgs; Centcom does not send them mail - var/datum/job/this_job = SSjob.GetJob(recipient.assigned_role) + var/datum/job/this_job = SSjob.GetJob(human.mind.assigned_role) if(this_job.faction != "Station") continue From fcb63f2e95912e140bd37205213851e6330b9539 Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Thu, 23 Dec 2021 13:24:42 +0100 Subject: [PATCH 14/28] re-add strange reagent for HoP --- code/modules/jobs/job_types/head_of_personnel.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index eb844b049c62..abb64293c8f8 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -53,9 +53,9 @@ /datum/job/hop/get_mail_goodies(mob/recipient) . = ..() // Strange Reagent if the pet is dead. - //for(var/mob/living/simple_animal/pet/dog/corgi/ian/staff_pet in GLOB.dead_mob_list) - // . += list(/datum/reagent/medicine/strange_reagent = 20) - // break + for(var/mob/living/simple_animal/pet/dog/corgi/Ian/staff_pet in GLOB.dead_mob_list) + . += list(/datum/reagent/medicine/strange_reagent = 20) + break /datum/outfit/job/hop name = "Head of Personnel" From b22337918a1696fb5f249aafb493cdbe854f38a4 Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Thu, 23 Dec 2021 13:32:24 +0100 Subject: [PATCH 15/28] more atmostech goodies --- .../objects/items/grenades/atmos_grenades.dm | 53 +++++++++++++++++++ .../jobs/job_types/atmospheric_technician.dm | 4 +- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/grenades/atmos_grenades.dm b/code/game/objects/items/grenades/atmos_grenades.dm index 5c626d8397d1..f991213215b6 100644 --- a/code/game/objects/items/grenades/atmos_grenades.dm +++ b/code/game/objects/items/grenades/atmos_grenades.dm @@ -18,6 +18,29 @@ playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', volume, TRUE) addtimer(CALLBACK(src, .proc/prime), isnull(delayoverride)? det_time : delayoverride) +/obj/item/grenade/gas_crystal/proto_nitrate_crystal + name = "Proto Nitrate crystal" + desc = "A crystal made from the Proto Nitrate gas, you can see the liquid gases inside." + icon_state = "proto_nitrate_crystal" + ///Range of the grenade air refilling + var/refill_range = 5 + ///Amount of Nitrogen gas released (close to the grenade) + var/n2_gas_amount = 80 + ///Amount of Oxygen gas released (close to the grenade) + var/o2_gas_amount = 30 + +/obj/item/grenade/gas_crystal/proto_nitrate_crystal/prime(mob/living/lanced_by) + . = ..() + update_mob() + playsound(src, 'sound/effects/spray2.ogg', 100, TRUE) + for(var/turf/turf_loc in view(refill_range, loc)) + if(!isopenturf(turf_loc)) + continue + var/distance_from_center = max(get_dist(turf_loc, loc), 1) + var/turf/open/floor_loc = turf_loc + floor_loc.atmos_spawn_air("n2=[n2_gas_amount / distance_from_center];o2=[o2_gas_amount / distance_from_center];TEMP=273") + qdel(src) + /obj/item/grenade/gas_crystal/healium_crystal name = "Healium crystal" desc = "A crystal made from the Healium gas, it's cold to the touch." @@ -94,3 +117,33 @@ var/turf/open/floor_loc = turf_loc floor_loc.atmos_spawn_air("n2o=[n2o_gas_amount / distance_from_center];TEMP=273") qdel(src) + +/obj/item/grenade/gas_crystal/crystal_foam + name = "crystal foam" + desc = "A crystal with a foggy inside" + icon_state = "crystal_foam" + var/breach_range = 7 + +/obj/item/grenade/gas_crystal/crystal_foam/prime(mob/living/lanced_by) + . = ..() + + var/datum/reagents/first_batch = new + var/datum/reagents/second_batch = new + var/list/datum/reagents/reactants = list() + + first_batch.add_reagent(/datum/reagent/aluminium, 75) + second_batch.add_reagent(/datum/reagent/smart_foaming_agent, 25) + second_batch.add_reagent(/datum/reagent/toxin/acid/fluacid, 25) + reactants += first_batch + reactants += second_batch + + var/turf/detonation_turf = get_turf(src) + + chem_splash(detonation_turf, breach_range, reactants) + + playsound(src, 'sound/effects/spray2.ogg', 100, TRUE) + log_game("A grenade detonated at [AREACOORD(detonation_turf)]") + + update_mob() + + qdel(src) diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index c3aa86b544de..eb85c68811df 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -23,8 +23,8 @@ mail_goodies = list( ///obj/item/rpd_upgrade/unwrench = 30, - ///obj/item/grenade/gas_crystal/crystal_foam = 10, - ///obj/item/grenade/gas_crystal/proto_nitrate_crystal = 10, + /obj/item/grenade/gas_crystal/crystal_foam = 10, + /obj/item/grenade/gas_crystal/proto_nitrate_crystal = 10, /obj/item/grenade/gas_crystal/healium_crystal = 10, /obj/item/grenade/gas_crystal/nitrous_oxide_crystal = 5, ) From 6ecf0f1def59208af51b8e2ef950500cdfe0875f Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Thu, 23 Dec 2021 13:50:40 +0100 Subject: [PATCH 16/28] station engineer goodies --- code/modules/clothing/head/hardhat.dm | 13 +++++++++++++ code/modules/jobs/job_types/station_engineer.dm | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 1de1adc8ab75..1f6133cc1889 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -60,6 +60,19 @@ cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT +/obj/item/clothing/head/hardhat/red/upgraded + name = "workplace-ready firefighter helmet" + desc = "By applying state of the art lighting technology to a fire helmet, and using photo-chemical hardening methods, this hardhat will protect you from robust workplace hazards." + icon_state = "hardhat0_purple" + item_state = "hardhat0_purple" + brightness_on = 5 + heat_protection = HEAD + max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + custom_materials = list(/datum/material/iron = 4000, /datum/material/glass = 1000, /datum/material/plastic = 3000, /datum/material/silver = 500) + item_color = "purple" + /obj/item/clothing/head/hardhat/white icon_state = "hardhat0_white" item_state = "hardhat0_white" diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index 1afc7563f058..fa1876f53a92 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -28,8 +28,8 @@ mail_goodies = list( /obj/item/storage/box/lights/mixed = 20, /obj/item/lightreplacer = 10, - /obj/item/holosign_creator/engineering = 8 - ///obj/item/clothing/head/hardhat/red/upgraded = 1 + /obj/item/holosign_creator/engineering = 8, + /obj/item/clothing/head/hardhat/red/upgraded = 1 ) /datum/job/engineer/proc/EclipseStationChanges() From 62d498bc6adebb091858e38a17c9dc1dd6bd3adb Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Thu, 23 Dec 2021 13:50:49 +0100 Subject: [PATCH 17/28] warden goodies --- code/modules/jobs/job_types/warden.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index d28e248f0237..1728d7ad87e5 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -29,7 +29,7 @@ changed_maps = list("YogsPubby", "OmegaStation") mail_goodies = list( - ///obj/item/storage/fancy/cigarettes = 15, + /obj/item/storage/box/fancy/cigarettes = 15, /obj/item/storage/box/handcuffs = 10, /obj/item/storage/box/teargas = 10, /obj/item/storage/box/flashbangs = 10, From b890ff1de3027af3b72d3f6139369ea2f750a1a6 Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Thu, 23 Dec 2021 22:19:34 +0100 Subject: [PATCH 18/28] more goodies --- .../game/objects/effects/spawners/lootdrop.dm | 62 +++++++++++++++++++ .../food_and_drinks/food/snacks_meat.dm | 8 +++ code/modules/jobs/job_types/botanist.dm | 6 +- .../jobs/job_types/chief_medical_officer.dm | 8 +-- 4 files changed, 77 insertions(+), 7 deletions(-) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 56dd8d33adcf..f22dc8e00f69 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -30,6 +30,48 @@ loot_spawned++ return INITIALIZE_HINT_QDEL +/obj/effect/spawner/lootdrop/surgery_tool_advanced + name = "Advanced surgery tool spawner" + loot = list( // Mail loot spawner. Drop pool of advanced medical tools typically from research. Not endgame content. + /obj/item/scalpel/advanced, + /obj/item/retractor/advanced, + /obj/item/cautery/advanced, + ) + +/obj/effect/spawner/lootdrop/surgery_tool_alien + name = "Rare surgery tool spawner" + loot = list( // Mail loot spawner. Some sort of random and rare surgical tool. Alien tech found here. + /obj/item/scalpel/alien, + /obj/item/hemostat/alien, + /obj/item/retractor/alien, + /obj/item/circular_saw/alien, + /obj/item/surgicaldrill/alien, + /obj/item/cautery/alien, + ) + +/obj/effect/spawner/lootdrop/memeorgans + name = "meme organ spawner" + lootcount = 5 + loot = list( + /obj/item/organ/ears/penguin, + /obj/item/organ/ears/cat, + /obj/item/organ/eyes/moth, + /obj/item/organ/eyes/snail, + /obj/item/organ/tongue/bone, + /obj/item/organ/tongue/fly, + /obj/item/organ/tongue/snail, + /obj/item/organ/tongue/lizard, + /obj/item/organ/tongue/alien, + ///obj/item/organ/tongue/ethereal, + /obj/item/organ/tongue/robot, + /obj/item/organ/tongue/zombie, + /obj/item/organ/appendix, + /obj/item/organ/liver/fly, + /obj/item/organ/lungs/plasmaman, + /obj/item/organ/tail/cat, + /obj/item/organ/tail/lizard, + ) + /obj/effect/spawner/lootdrop/armory_contraband name = "armory contraband gun spawner" lootdoubles = FALSE @@ -56,6 +98,26 @@ /obj/item/toy/cards/deck/syndicate = 2 ) +/obj/effect/spawner/lootdrop/seed_rare + name = "rare seed" + lootcount = 5 + loot = list( // /obj/item/seeds/random is not a random seed, but an exotic seed. + /obj/item/seeds/random = 30, + /obj/item/seeds/liberty = 5, + /obj/item/seeds/replicapod = 5, + /obj/item/seeds/reishi = 5, + /obj/item/seeds/nettle/death = 1, + /obj/item/seeds/plump/walkingmushroom = 1, + /obj/item/seeds/cannabis/rainbow = 1, + /obj/item/seeds/cannabis/death = 1, + /obj/item/seeds/cannabis/white = 1, + /obj/item/seeds/cannabis/ultimate = 1, + /obj/item/seeds/kudzu = 1, + /obj/item/seeds/angel = 1, + /obj/item/seeds/glowshroom/glowcap = 1, + /obj/item/seeds/glowshroom/shadowshroom = 1, + ) + /obj/effect/spawner/lootdrop/grille_or_trash name = "maint grille or trash spawner" loot = list(/obj/structure/grille = 5, diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index 5a9bdd4bc4f7..e95b96a6fb5b 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -546,6 +546,14 @@ tastes = list("the jungle" = 1, "bananas" = 1, "jimmies" = 1) spawned_mob = /mob/living/simple_animal/hostile/gorilla +/obj/item/reagent_containers/food/snacks/monkeycube/bee + name = "bee cube" + desc = "We were sure it was a good idea. Just add water." + bitesize = 20 + list_reagents = list(/datum/reagent/consumable/honey = 10, /datum/reagent/toxin = 5, /datum/reagent/medicine/strange_reagent = 1) + tastes = list("buzzing" = 1, "honey" = 1, "regret" = 1) + spawned_mob = /mob/living/simple_animal/hostile/poison/bees/toxin + /obj/item/reagent_containers/food/snacks/monkeycube/sheep name = "sheep cube" desc = "A Farm Town brand sheep cube. Just add water!" diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm index 880b917ac362..7f905147fcbf 100644 --- a/code/modules/jobs/job_types/botanist.dm +++ b/code/modules/jobs/job_types/botanist.dm @@ -23,9 +23,9 @@ /obj/item/reagent_containers/glass/bottle/mutagen = 20, /obj/item/reagent_containers/glass/bottle/saltpetre = 20, /obj/item/reagent_containers/glass/bottle/diethylamine = 20, - /obj/item/gun/energy/floragun = 10 - ///obj/effect/spawner/random/food_or_drink/seed_rare = 5,// These are strong, rare seeds, so use sparingly. - ///obj/item/food/monkeycube/bee = 2 + /obj/item/gun/energy/floragun = 10, + /obj/effect/spawner/lootdrop/seed_rare = 5,// These are strong, rare seeds, so use sparingly. + /obj/item/reagent_containers/food/snacks/monkeycube/bee = 2 ) changed_maps = list("OmegaStation", "EclipseStation") diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index f9f2ee2d9ded..cac1945715ec 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -33,10 +33,10 @@ changed_maps = list("OmegaStation") mail_goodies = list( - /obj/effect/spawner/lootdrop/organ_spawner = 10 - ///obj/effect/spawner/random/medical/memeorgans = 8, - ///obj/effect/spawner/random/medical/surgery_tool_advanced = 4, - ///obj/effect/spawner/random/medical/surgery_tool_alien = 1 + /obj/effect/spawner/lootdrop/organ_spawner = 10, + /obj/effect/spawner/lootdrop/memeorgans = 8, + /obj/effect/spawner/lootdrop/surgery_tool_advanced = 4, + /obj/effect/spawner/lootdrop/surgery_tool_alien = 1 ) /datum/job/cmo/proc/OmegaStationChanges() From e0c4d1d23d44d858bcb4680e13aede3575590057 Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Mon, 10 Jan 2022 22:13:10 -0600 Subject: [PATCH 19/28] Adds null check --- code/game/objects/items/mail.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index cb6c84893f91..666da0ba9a4c 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -220,7 +220,7 @@ continue // Skip wizards, nuke ops, cyborgs; Centcom does not send them mail var/datum/job/this_job = SSjob.GetJob(human.mind.assigned_role) - if(this_job.faction != "Station") + if(!this_job || this_job.faction != "Station") continue mail_recipients += human.mind From 807dca295297de329246126579e580db15edb0e8 Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Tue, 11 Jan 2022 13:14:10 -0600 Subject: [PATCH 20/28] Fixed small parcels not being mailable, and set the default sort for junk mail to disposals --- code/game/objects/items/mail.dm | 3 ++- code/modules/recycling/sortingmachinery.dm | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index 666da0ba9a4c..a0545823ee7b 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -11,7 +11,7 @@ //pickup_sound = 'sound/items/handling/paper_pickup.ogg' mouse_drag_pointer = MOUSE_ACTIVE_POINTER /// Destination tagging for the mail sorter. - var/sort_tag = 0 + var/sort_tag = NONE /// Weak reference to who this mail is for and who can open it. var/datum/weakref/recipient_ref /// How many goodies this mail contains. @@ -164,6 +164,7 @@ /// Alternate setup, just complete garbage inside and anyone can open /obj/item/mail/proc/junk_mail() + sort_tag = 1 // Default sort for junk mail is the trash var/obj/junk = /obj/item/paper/fluff/junkmail_generic var/special_name = FALSE diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index e97dff7d7782..b05c5b758db9 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -96,6 +96,14 @@ var/giftwrapped = 0 var/sortTag = 0 +/obj/item/smallDelivery/Initialize() + . = ..() + RegisterSignal(src, COMSIG_MOVABLE_DISPOSING, .proc/disposal_handling) + +/obj/item/smallDelivery/proc/disposal_handling(disposal_source, obj/structure/disposalholder/disposal_holder, obj/machinery/disposal/disposal_machine, hasmob) + if(!hasmob) + disposal_holder.destinationTag = sortTag + /obj/item/smallDelivery/contents_explosion(severity, target) for(var/thing in contents) switch(severity) From 8541d38338ecab8a87bff3c97ee27f17edb6cf42 Mon Sep 17 00:00:00 2001 From: Gabriel Adamson Date: Tue, 11 Jan 2022 14:00:12 -0600 Subject: [PATCH 21/28] Makes lootdrops drop loot in the same loc in which they are, rather than just on the floor --- code/game/objects/effects/spawners/lootdrop.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index f22dc8e00f69..472266ae7a9b 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -10,7 +10,6 @@ /obj/effect/spawner/lootdrop/Initialize(mapload) ..() if(loot && loot.len) - var/turf/T = get_turf(src) var/loot_spawned = 0 while((lootcount-loot_spawned) && loot.len) var/lootspawn = pickweight(loot) @@ -18,7 +17,7 @@ loot.Remove(lootspawn) if(lootspawn) - var/atom/movable/spawned_loot = new lootspawn(T) + var/atom/movable/spawned_loot = new lootspawn(loc) if (!fan_out_items) if (pixel_x != 0) spawned_loot.pixel_x = pixel_x From c0aa2fcdeedeee1cf00fcec501e77e2c28d70830 Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Sat, 22 Jan 2022 20:31:38 +0100 Subject: [PATCH 22/28] add purple hat icon --- icons/obj/clothing/hats.dmi | Bin 92397 -> 92694 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 3798b1ad7a1cb1d53ae50a4bb6a96fc93f1e3534..cc83a3d7bafbbe3548a21f8b93a98a77adc44411 100644 GIT binary patch delta 17202 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 ZpTAhebI*L)=X)4{z|+;wWt~$(699qdSq}gJ delta 16903 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 WsuH#6R)HS|`YiQTvO?T2;Qs Date: Sun, 23 Jan 2022 10:35:50 +0100 Subject: [PATCH 23/28] fix: envelopes with two items should give both now --- code/game/objects/items/mail.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index a0545823ee7b..c5321159ad94 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -119,8 +119,8 @@ if(!do_after(user, 1.5 SECONDS, target = user)) return user.temporarilyRemoveItemFromInventory(src, TRUE) - if(contents.len) - user.put_in_hands(contents[1]) + for (var/content in contents) + user.put_in_hands(content) playsound(loc, 'sound/items/poster_ripped.ogg', 50, TRUE) qdel(src) From 385df804ce21d117d913f0cb191cd387519b32ec Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Sun, 23 Jan 2022 10:36:04 +0100 Subject: [PATCH 24/28] fix: mail amount was using incorrect calculation --- code/controllers/subsystem/economy.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index 5aa8f88d7a09..86dde749c8e9 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -75,7 +75,7 @@ SUBSYSTEM_DEF(economy) secmedsrv_payout() // Payout based on crew safety, health, and mood. civ_payout() // Payout based on ??? Profit car_payout() // Cargo's natural gain in the cash moneys. - var/delta_time = wait * 0.2 + var/delta_time = WAIT / (5 MINUTES) var/list/dictionary = list() for(var/datum/corporation/c in GLOB.corporations) dictionary[c] = list() From bb122776f0474ab8d4483232bef47b66571e6b57 Mon Sep 17 00:00:00 2001 From: Inari Whitebear Date: Sun, 23 Jan 2022 10:44:11 +0100 Subject: [PATCH 25/28] fix typo --- code/controllers/subsystem/economy.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index 86dde749c8e9..11b2f6ed6278 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -75,7 +75,7 @@ SUBSYSTEM_DEF(economy) secmedsrv_payout() // Payout based on crew safety, health, and mood. civ_payout() // Payout based on ??? Profit car_payout() // Cargo's natural gain in the cash moneys. - var/delta_time = WAIT / (5 MINUTES) + var/delta_time = wait / (5 MINUTES) var/list/dictionary = list() for(var/datum/corporation/c in GLOB.corporations) dictionary[c] = list() @@ -88,7 +88,7 @@ SUBSYSTEM_DEF(economy) B.payday(c.paymodifier, TRUE) B.payday(1) var/effective_mailcount = living_player_count() - mail_waiting += clamp(effective_mailcount, 1, MAX_MAIL_PER_MINUTE * delta_time) + mail_waiting += clamp(effective_mailcount, 1, MAX_MAIL_PER_MINUTE * 5 * delta_time) /datum/controller/subsystem/economy/proc/get_dep_account(dep_id) for(var/datum/bank_account/department/D in generated_accounts) From 2820b6a6a90279659a909291100d82fc208392bc Mon Sep 17 00:00:00 2001 From: adamsong Date: Tue, 11 Oct 2022 19:26:39 -0400 Subject: [PATCH 26/28] Fuck your tails --- code/modules/surgery/organs/tails.dm | 174 +++++++++++++-------------- 1 file changed, 87 insertions(+), 87 deletions(-) diff --git a/code/modules/surgery/organs/tails.dm b/code/modules/surgery/organs/tails.dm index 149d15941549..782947f9936b 100644 --- a/code/modules/surgery/organs/tails.dm +++ b/code/modules/surgery/organs/tails.dm @@ -1,87 +1,87 @@ -// Note: tails only work in humans. They use human-specific parameters and rely on human code for displaying. - -/obj/item/organ/tail - name = "tail" - desc = "A severed tail. What did you cut this off of?" - icon_state = "severedtail" - zone = BODY_ZONE_PRECISE_GROIN - slot = ORGAN_SLOT_TAIL - var/tail_type = "None" - -/obj/item/organ/tail/Remove(mob/living/carbon/human/H, special = 0) - ..() - if(H && H.dna && H.dna.species) - H.dna.species.stop_wagging_tail(H) - -/obj/item/organ/tail/cat - name = "cat tail" - desc = "A severed cat tail. Who's wagging now?" - tail_type = "Cat" - -/obj/item/organ/tail/cat/Insert(mob/living/carbon/human/H, special = 0, drop_if_replaced = TRUE) - ..() - if(istype(H)) - if(!("tail_human" in H.dna.species.mutant_bodyparts)) - H.dna.species.mutant_bodyparts |= "tail_human" - H.dna.features["tail_human"] = tail_type - H.update_body() - -/obj/item/organ/tail/cat/Remove(mob/living/carbon/human/H, special = 0) - ..() - if(istype(H)) - H.dna.features["tail_human"] = "None" - H.dna.species.mutant_bodyparts -= "tail_human" - color = H.hair_color - H.update_body() - -/obj/item/organ/tail/lizard - name = "lizard tail" - desc = "A severed lizard tail. Somewhere, no doubt, a lizard hater is very pleased with themselves." - icon_state = "severedlizardtail" //yogs - so the tail uses the correct sprites - color = "#116611" - tail_type = "Smooth" - var/spines = "None" - -/obj/item/organ/tail/lizard/Insert(mob/living/carbon/human/H, special = 0, drop_if_replaced = TRUE) - ..() - if(istype(H)) - // Checks here are necessary so it wouldn't overwrite the tail of a lizard it spawned in - if(!("tail_lizard" in H.dna.species.mutant_bodyparts)) - H.dna.features["tail_lizard"] = tail_type - H.dna.species.mutant_bodyparts |= "tail_lizard" - - if(!("spines" in H.dna.species.mutant_bodyparts)) - H.dna.features["spines"] = spines - H.dna.species.mutant_bodyparts |= "spines" - H.update_body() - -/obj/item/organ/tail/lizard/Remove(mob/living/carbon/human/H, special = 0) - ..() - if(istype(H)) - H.dna.species.mutant_bodyparts -= "tail_lizard" - H.dna.species.mutant_bodyparts -= "spines" - color = "#" + H.dna.features["mcolor"] - tail_type = H.dna.features["tail_lizard"] - spines = H.dna.features["spines"] - H.update_body() - -/obj/item/organ/tail/polysmorph - name = "polysmorph tail" - desc = "A severed polysmorph tail." - icon_state = "severedpolytail" //yogs - so the tail uses the correct sprites - tail_type = "Polys" - -/obj/item/organ/tail/polysmorph/Insert(mob/living/carbon/human/H, special = 0, drop_if_replaced = FALSE) - ..() - if(istype(H)) - if(!("tail_polysmorph" in H.dna.species.mutant_bodyparts)) - H.dna.features["tail_polysmorph"] = tail_type - H.dna.species.mutant_bodyparts |= "tail_polysmorph" - H.update_body() - -/obj/item/organ/tail/polysmorph/Remove(mob/living/carbon/human/H, special = 0) - ..() - if(istype(H)) - H.dna.species.mutant_bodyparts -= "tail_polysmorph" - tail_type = H.dna.features["tail_polysmorph"] - H.update_body() +// Note: tails only work in humans. They use human-specific parameters and rely on human code for displaying. + +/obj/item/organ/tail + name = "tail" + desc = "A severed tail. What did you cut this off of?" + icon_state = "severedtail" + zone = BODY_ZONE_PRECISE_GROIN + slot = ORGAN_SLOT_TAIL + var/tail_type = "None" + +/obj/item/organ/tail/Remove(mob/living/carbon/human/H, special = 0) + ..() + if(H && H.dna && H.dna.species) + H.dna.species.stop_wagging_tail(H) + +/obj/item/organ/tail/cat + name = "cat tail" + desc = "A severed cat tail. Who's wagging now?" + tail_type = "Cat" + +/obj/item/organ/tail/cat/Insert(mob/living/carbon/human/H, special = 0, drop_if_replaced = TRUE) + ..() + if(istype(H)) + if(!("tail_human" in H.dna.species.mutant_bodyparts)) + H.dna.species.mutant_bodyparts |= "tail_human" + H.dna.features["tail_human"] = tail_type + H.update_body() + +/obj/item/organ/tail/cat/Remove(mob/living/carbon/human/H, special = 0) + ..() + if(istype(H)) + H.dna.features["tail_human"] = "None" + H.dna.species.mutant_bodyparts -= "tail_human" + color = H.hair_color + H.update_body() + +/obj/item/organ/tail/lizard + name = "lizard tail" + desc = "A severed lizard tail. Somewhere, no doubt, a lizard hater is very pleased with themselves." + icon_state = "severedlizardtail" //yogs - so the tail uses the correct sprites + color = "#116611" + tail_type = "Smooth" + var/spines = "None" + +/obj/item/organ/tail/lizard/Insert(mob/living/carbon/human/H, special = 0, drop_if_replaced = TRUE) + ..() + if(istype(H)) + // Checks here are necessary so it wouldn't overwrite the tail of a lizard it spawned in + if(!("tail_lizard" in H.dna.species.mutant_bodyparts)) + H.dna.features["tail_lizard"] = tail_type + H.dna.species.mutant_bodyparts |= "tail_lizard" + + if(!("spines" in H.dna.species.mutant_bodyparts)) + H.dna.features["spines"] = spines + H.dna.species.mutant_bodyparts |= "spines" + H.update_body() + +/obj/item/organ/tail/lizard/Remove(mob/living/carbon/human/H, special = 0) + ..() + if(istype(H)) + H.dna.species.mutant_bodyparts -= "tail_lizard" + H.dna.species.mutant_bodyparts -= "spines" + color = "#" + H.dna.features["mcolor"] + tail_type = H.dna.features["tail_lizard"] + spines = H.dna.features["spines"] + H.update_body() + +/obj/item/organ/tail/polysmorph + name = "polysmorph tail" + desc = "A severed polysmorph tail." + icon_state = "severedpolytail" //yogs - so the tail uses the correct sprites + tail_type = "Polys" + +/obj/item/organ/tail/polysmorph/Insert(mob/living/carbon/human/H, special = 0, drop_if_replaced = FALSE) + ..() + if(istype(H)) + if(!("tail_polysmorph" in H.dna.species.mutant_bodyparts)) + H.dna.features["tail_polysmorph"] = tail_type + H.dna.species.mutant_bodyparts |= "tail_polysmorph" + H.update_body() + +/obj/item/organ/tail/polysmorph/Remove(mob/living/carbon/human/H, special = 0) + ..() + if(istype(H)) + H.dna.species.mutant_bodyparts -= "tail_polysmorph" + tail_type = H.dna.features["tail_polysmorph"] + H.update_body() From 20282aab68d58b0a1b8d16991be4d770359dfd8a Mon Sep 17 00:00:00 2001 From: adamsong Date: Tue, 11 Oct 2022 20:03:57 -0400 Subject: [PATCH 27/28] Why didn't these commit? --- code/controllers/subsystem/economy.dm | 1 - code/modules/clothing/head/hardhat.dm | 2 +- code/modules/jobs/job_types/_job.dm | 2 -- code/modules/jobs/job_types/detective.dm | 2 +- 4 files changed, 2 insertions(+), 5 deletions(-) diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index 9175d9d047e7..8b6a90cf3566 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -75,7 +75,6 @@ SUBSYSTEM_DEF(economy) ) /datum/controller/subsystem/economy/Initialize(timeofday) - var/budget_to_hand_out = round(budget_pool / department_accounts.len) if(time2text(world.timeofday, "DDD") == SUNDAY) mail_blocked = TRUE for(var/A in department_accounts) diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 3475841ed3f9..8bd77e70cc76 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -74,7 +74,7 @@ cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT custom_materials = list(/datum/material/iron = 4000, /datum/material/glass = 1000, /datum/material/plastic = 3000, /datum/material/silver = 500) - item_color = "purple" + hat_type = "purple" /obj/item/clothing/head/hardhat/white icon_state = "hardhat0_white" diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index efc4c307f796..733a2ff80666 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -54,8 +54,6 @@ var/list/mind_traits /// Display order of the job var/display_order = JOB_DISPLAY_ORDER_DEFAULT - /// Map Specific changes - var/list/changed_maps = list() /// Goodies that can be received via the mail system. // this is a weighted list. diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index 00e25138627d..01b9ed269960 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -33,7 +33,7 @@ /obj/item/ammo_box/c38/hotshot = 5, /obj/item/ammo_box/c38/iceblox = 5, ///obj/item/ammo_box/c38/match = 5, - /obj/item/ammo_box/c38/trac = 5, + /obj/item/ammo_box/tra32 = 5, ///obj/item/storage/belt/holster/detective/full = 1 ) From 7dce6636b305604b3854bb271577f14666a507ed Mon Sep 17 00:00:00 2001 From: adamsong Date: Tue, 11 Oct 2022 21:36:47 -0400 Subject: [PATCH 28/28] Added debug verb to dump loot --- code/game/objects/items/mail.dm | 53 ++++++++++++++++++++++++++++- code/modules/admin/verbs/mapping.dm | 3 +- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index c5321159ad94..187e5de0a46b 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -296,9 +296,10 @@ if(nuke) if(nuke.r_code == "ADMIN") nuke.r_code = code + message_admins("Through junkmail, the self-destruct code was set to \"[code]\".") + log_game("Through junkmail, the self-destruct code was set to \"[code]\".") else code = nuke.r_code - message_admins("Through junkmail, the self-destruct code was set to \"[code]\".") info = "You need to escape the simulation. Don't forget the numbers, they help you remember: '[code[rand(1,5)]][code[rand(1,5)]]...'" /obj/item/paper/fluff/junkmail_redpill/true //admin letter enabling players to brute force their way through the nuke code if they're so inclined. @@ -311,3 +312,53 @@ /obj/item/paper/fluff/junkmail_generic/Initialize(mapload) . = ..() info = pick(GLOB.junkmail_messages) + +/client/proc/debug_mail_loot() + set name = "Debug Mail Loot" + set category = "Misc.Server Debug" + + var/obj/item/mail/mail = new + var/list/generic_goodies = mail.generic_goodies + qdel(mail) + + var/generic_goodie_weight = 0 + var/goodietype + to_chat(src, generic_goodies.len) + for(goodietype in generic_goodies) + generic_goodie_weight += generic_goodies[goodietype] + to_chat(src, generic_goodie_weight) + + var/debug_info = "Generic Goodies (Weight: [generic_goodie_weight]):\n" + if(generic_goodie_weight) + for(goodietype in generic_goodies) + var/atom/goodie = goodietype + var/goodie_weight = generic_goodies[goodietype] + debug_info += " - [initial(goodie.name)]: [goodie_weight] ([(goodie_weight / generic_goodie_weight) * 100]%)\n" + + for(var/datum/job/job in SSjob.occupations) + if(job.faction != "Station") + debug_info += "\n[job.title] is not a station job, skipping" + continue + var/list/job_goodies = job.mail_goodies + if(job_goodies.len == 0) + debug_info += "\n[span_red("No specific goodies for [job.title]")]\n" + continue + + var/exclusive = job.exclusive_mail_goodies + + var/effective_generic_goodie_weight = exclusive ? 0 : generic_goodie_weight + var/job_goodies_weight = effective_generic_goodie_weight + + for(goodietype in job_goodies) + job_goodies_weight += job_goodies[goodietype] + + debug_info += "\n[job.title] Goodies (Weight: [job_goodies_weight]): \n" + if(job_goodies_weight) + debug_info += "Generic Goodies: [effective_generic_goodie_weight] ([(effective_generic_goodie_weight / job_goodies_weight) * 100]%)\n" + for(goodietype in job_goodies) + var/goodie_weight = job_goodies[goodietype] + var/atom/goodie = goodietype + debug_info += " - [initial(goodie.name)]: [goodie_weight] ([(goodie_weight / job_goodies_weight) * 100]%)\n" + + to_chat(src, examine_block(debug_info)) + diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 8b1368e57938..9fd2f141be87 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -78,7 +78,8 @@ GLOBAL_LIST_INIT(admin_verbs_debug_all, list( /client/proc/reload_configuration, /datum/admins/proc/create_or_modify_area, /client/proc/debug_typeof, // Yogs -- Adds a debug verb for getting the subtypes of something - /client/proc/toggle_cdn + /client/proc/toggle_cdn, + /client/proc/debug_mail_loot )) GLOBAL_PROTECT(admin_verbs_debug_all)