From ca8ce67cd6c60e6fe3239d0397644655850dd466 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Wed, 10 Apr 2024 20:54:04 -0300 Subject: [PATCH 1/5] mail --- _maps/map_files/BoxStation/BoxStation.dmm | 4 +- _maps/map_files/CogStation/CogStation.dmm | 20 +- .../map_files/Deltastation/DeltaStation2.dmm | 2 +- _maps/map_files/KiloStation/KiloStation.dmm | 4 +- _maps/map_files/LambdaStation/lambda.dmm | 2 +- _maps/map_files/MetaStation/MetaStation.dmm | 4 +- _maps/map_files/PubbyStation/PubbyStation.dmm | 2 +- _maps/map_files/Snaxi/Snaxi.dmm | 4 +- code/__DEFINES/economy.dm | 5 + code/__DEFINES/traits/sources.dm | 2 + code/_globalvars/lists/flavor_misc.dm | 2 + code/controllers/subsystem/economy.dm | 11 +- code/datums/elements/item_scaling.dm | 108 +++++++ code/game/gamemodes/sandbox/h_sandbox.dm | 2 +- .../game/objects/effects/spawners/lootdrop.dm | 28 ++ code/game/objects/items/mail.dm | 276 ++++++++++++++++++ .../objects/items/stacks/sheets/mineral.dm | 9 + code/game/objects/items/stacks/wrap.dm | 8 +- code/game/objects/items/storage/boxes.dm | 2 +- code/modules/cargo/exports/large_objects.dm | 2 +- code/modules/cargo/packs/service.dm | 4 +- .../food_and_drinks/food/snacks_meat.dm | 14 + code/modules/jobs/job_types/_job.dm | 12 + code/modules/jobs/job_types/assistant.dm | 11 +- code/modules/jobs/job_types/bartender.dm | 9 +- code/modules/jobs/job_types/botanist.dm | 9 + code/modules/jobs/job_types/captain.dm | 6 + .../jobs/job_types/cargo_technician.dm | 9 +- code/modules/jobs/job_types/chaplain.dm | 9 +- code/modules/jobs/job_types/chemist.dm | 9 +- code/modules/jobs/job_types/chief_engineer.dm | 11 +- .../jobs/job_types/chief_medical_officer.dm | 9 +- code/modules/jobs/job_types/clown.dm | 10 +- code/modules/jobs/job_types/cook.dm | 11 + code/modules/jobs/job_types/detective.dm | 13 +- code/modules/jobs/job_types/geneticist.dm | 6 +- .../jobs/job_types/head_of_personnel.dm | 14 +- code/modules/jobs/job_types/janitor.dm | 8 +- code/modules/jobs/job_types/medical_doctor.dm | 12 +- code/modules/jobs/job_types/mime.dm | 9 +- code/modules/jobs/job_types/paramedic.dm | 11 +- code/modules/jobs/job_types/prisoner.dm | 7 +- code/modules/jobs/job_types/quartermaster.dm | 6 +- .../jobs/job_types/research_director.dm | 8 +- code/modules/jobs/job_types/roboticist.dm | 8 +- code/modules/jobs/job_types/scientist.dm | 8 +- .../jobs/job_types/security_officer.dm | 8 + .../jobs/job_types/station_engineer.dm | 9 +- code/modules/jobs/job_types/virologist.dm | 10 +- code/modules/jobs/job_types/warden.dm | 9 + .../mob/living/silicon/robot/robot_modules.dm | 6 +- code/modules/mod/modules/modules_supply.dm | 2 +- code/modules/recycling/disposal/bin.dm | 2 +- code/modules/recycling/disposal/holder.dm | 22 +- .../recycling/disposal/pipe_sorting.dm | 4 +- code/modules/recycling/sortingmachinery.dm | 79 +++-- .../autolathe_designs_electronics.dm | 2 +- code/modules/shuttle/supply.dm | 50 ++++ code/modules/vending/wardrobes.dm | 28 +- icons/obj/bureaucracy.dmi | Bin 21888 -> 23585 bytes icons/obj/crates.dmi | Bin 27019 -> 28724 bytes strings/junkmail.txt | 14 + tgstation.dme | 3 + 63 files changed, 872 insertions(+), 116 deletions(-) create mode 100644 code/__DEFINES/traits/sources.dm create mode 100644 code/datums/elements/item_scaling.dm create mode 100644 code/game/objects/items/mail.dm create mode 100644 strings/junkmail.txt diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index c1f0634b27..6c72770978 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -27755,8 +27755,8 @@ layer = 2.9 }, /obj/structure/table/reinforced, -/obj/item/destTagger, -/obj/item/destTagger, +/obj/item/dest_tagger, +/obj/item/dest_tagger, /obj/effect/turf_decal/tile/brown{ dir = 1 }, diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index cf2504d9d6..b526729dce 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -5422,7 +5422,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/item/destTagger, +/obj/item/dest_tagger, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, @@ -7390,7 +7390,7 @@ dir = 1; light_color = "#ffc1c1" }, -/obj/item/destTagger, +/obj/item/dest_tagger, /obj/machinery/requests_console{ department = "Service Router"; name = "Service Router RC"; @@ -21060,7 +21060,7 @@ /obj/item/stack/packageWrap, /obj/item/stack/packageWrap, /obj/item/hand_labeler, -/obj/item/destTagger, +/obj/item/dest_tagger, /obj/machinery/requests_console{ department = "Public Router"; name = "Public Router RC"; @@ -33416,7 +33416,7 @@ /obj/structure/table, /obj/item/stack/packageWrap, /obj/item/hand_labeler, -/obj/item/destTagger, +/obj/item/dest_tagger, /obj/effect/turf_decal/bot, /obj/machinery/requests_console{ department = "EVA Router"; @@ -50542,7 +50542,7 @@ "ceL" = ( /obj/effect/turf_decal/delivery, /obj/structure/table, -/obj/item/destTagger, +/obj/item/dest_tagger, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, @@ -56748,9 +56748,9 @@ "crd" = ( /obj/effect/turf_decal/bot, /obj/structure/table/reinforced, -/obj/item/destTagger, -/obj/item/destTagger, -/obj/item/destTagger, +/obj/item/dest_tagger, +/obj/item/dest_tagger, +/obj/item/dest_tagger, /obj/structure/sign/warning{ name = "\improper KEEP CLEAR: HIGH SPEED DELIVERIES"; pixel_y = 32 @@ -59004,7 +59004,7 @@ /area/router/air) "cvn" = ( /obj/structure/table, -/obj/item/destTagger, +/obj/item/dest_tagger, /obj/machinery/airalarm{ pixel_y = 24 }, @@ -69200,7 +69200,7 @@ /obj/structure/table/reinforced, /obj/item/stack/packageWrap, /obj/item/hand_labeler, -/obj/item/destTagger, +/obj/item/dest_tagger, /obj/machinery/light, /obj/machinery/requests_console{ department = "MedSci Router"; diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 697a37fb21..386e69fd4b 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -98040,7 +98040,7 @@ "noI" = ( /obj/structure/table, /obj/item/folder/yellow, -/obj/item/destTagger, +/obj/item/dest_tagger, /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ dir = 8 diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 12e3252a5e..f32d1cb413 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -11258,8 +11258,8 @@ /obj/structure/table, /obj/item/clipboard, /obj/item/folder/yellow, -/obj/item/destTagger, -/obj/item/destTagger, +/obj/item/dest_tagger, +/obj/item/dest_tagger, /obj/machinery/airalarm{ pixel_y = 22 }, diff --git a/_maps/map_files/LambdaStation/lambda.dmm b/_maps/map_files/LambdaStation/lambda.dmm index 31ed0aa655..d117182485 100644 --- a/_maps/map_files/LambdaStation/lambda.dmm +++ b/_maps/map_files/LambdaStation/lambda.dmm @@ -28627,7 +28627,7 @@ dir = 4 }, /obj/effect/turf_decal/tile, -/obj/item/destTagger, +/obj/item/dest_tagger, /obj/item/hand_labeler, /obj/machinery/airalarm{ dir = 8; diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index cd687fd5af..87d825c938 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -68966,7 +68966,7 @@ }, /obj/item/stack/wrapping_paper, /obj/item/stack/wrapping_paper, -/obj/item/destTagger{ +/obj/item/dest_tagger{ pixel_x = 4; pixel_y = 3 }, @@ -82336,7 +82336,7 @@ /area/medical/treatment_center) "wuz" = ( /obj/structure/table, -/obj/item/destTagger{ +/obj/item/dest_tagger{ pixel_x = 4; pixel_y = 3 }, diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index a388f9d58d..04e936cd7e 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -15992,7 +15992,7 @@ /area/cargo/sorting) "aNK" = ( /obj/structure/table, -/obj/item/destTagger, +/obj/item/dest_tagger, /obj/effect/turf_decal/stripes/line{ dir = 1 }, diff --git a/_maps/map_files/Snaxi/Snaxi.dmm b/_maps/map_files/Snaxi/Snaxi.dmm index c5d156bde2..799ba74dcc 100644 --- a/_maps/map_files/Snaxi/Snaxi.dmm +++ b/_maps/map_files/Snaxi/Snaxi.dmm @@ -1851,11 +1851,11 @@ pixel_y = 23 }, /obj/structure/table/reinforced, -/obj/item/destTagger{ +/obj/item/dest_tagger{ pixel_x = 3; pixel_y = 3 }, -/obj/item/destTagger, +/obj/item/dest_tagger, /turf/open/floor/plasteel, /area/cargo/sorting) "adu" = ( diff --git a/code/__DEFINES/economy.dm b/code/__DEFINES/economy.dm index 0d37607b81..feceb07370 100644 --- a/code/__DEFINES/economy.dm +++ b/code/__DEFINES/economy.dm @@ -1,4 +1,9 @@ +/// Number of paychecks jobs start with at the creation of a new bank account for a player (So at shift-start or game join, but not a blank new account.) #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 25 #define PAYCHECK_MINIMAL 75 diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm new file mode 100644 index 0000000000..dd4246842a --- /dev/null +++ b/code/__DEFINES/traits/sources.dm @@ -0,0 +1,2 @@ +/// From the item_scaling element +#define ITEM_SCALING_TRAIT "item_scaling" diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index fa239e0ea4..609669d704 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -360,3 +360,5 @@ GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2" GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) = "Chest", num2text(LEG_LEFT) = "Left Leg", num2text(LEG_RIGHT) = "Right Leg", num2text(ARM_LEFT) = "Left Arm", num2text(ARM_RIGHT) = "Right Arm")) // list linking bodypart names back to the bitflags GLOBAL_LIST_INIT(bodypart_values, list("Head" = num2text(HEAD), "Chest" = num2text(CHEST), "Left Leg" = num2text(LEG_LEFT), "Right Leg" = num2text(LEG_RIGHT), "Left Arm" = num2text(ARM_LEFT), "Right Arm" = num2text(ARM_RIGHT))) + +GLOBAL_LIST_INIT(junkmail_messages, world.file2list("strings/junkmail.txt")) diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index 88255f375e..06b3b6c8ed 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -55,6 +55,13 @@ SUBSYSTEM_DEF(economy) var/civ_bounty_tracker = 0 /// Contains the message to send to newscasters about earnings, updated on price_update() + /// Total value of exported materials. + var/export_total = 0 + /// Total value of imported goods. + var/import_total = 0 + /// Number of mail items generated. + var/mail_waiting = 0 + /datum/controller/subsystem/economy/Initialize(timeofday) var/budget_to_hand_out = round(budget_pool / department_accounts.len) for(var/A in department_accounts) @@ -62,6 +69,7 @@ SUBSYSTEM_DEF(economy) return ..() /datum/controller/subsystem/economy/fire(resumed = 0) + var/delta_time = wait * 0.2 eng_payout() // Payout based on nothing. What will replace it? Surplus power, powered APC's, air alarms? Who knows. sci_payout() // Payout based on slimes. secmedsrv_payout() // Payout based on crew safety, health, and mood. @@ -70,7 +78,8 @@ SUBSYSTEM_DEF(economy) for(var/account in bank_accounts) var/datum/bank_account/bank_account = account bank_account.payday(1) - + var/effective_mailcount = round(living_player_count()/1) // (inflation_value - 0.5)) //More mail at low inflation, and vis versa. + 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) diff --git a/code/datums/elements/item_scaling.dm b/code/datums/elements/item_scaling.dm new file mode 100644 index 0000000000..1c489e610d --- /dev/null +++ b/code/datums/elements/item_scaling.dm @@ -0,0 +1,108 @@ +/** + * Element for scaling item appearances in the overworld or in inventory/storage. + * + * This bespoke element allows for items to have varying sizes depending on their location. + * The overworld simply refers to items being on a turf. Inventory includes HUD item slots, + * and storage is anywhere a storage component is used. + * Scaling should affect the item's icon and all attached overlays (such as blood decals). + * + */ +/datum/element/item_scaling + element_flags = ELEMENT_BESPOKE + id_arg_index = 2 + /// Scaling value when the attached item is in the overworld (on a turf). + var/overworld_scaling + /// Scaling value when the attached item is in a storage component or inventory slot. + var/storage_scaling + +/** + * Attach proc for the item_scaling element + * + * The proc checks the target's type before attaching. It then initializes + * the target to overworld scaling. The target should then rescale if it is placed + * in inventory/storage on initialization. Relevant signals are registered to listen + * for pickup/drop or storage events. Scaling values of 1 will result in items + * returning to their original size. + * Arguments: + * * target - Datum to attach the element to. + * * overworld_scaling - Integer or float to scale the item in the overworld. + * * storage_scaling - Integer or float to scale the item in storage/inventory. + */ +/datum/element/item_scaling/Attach(atom/target, overworld_scaling, storage_scaling) + . = ..() + if(!isatom(target)) + return ELEMENT_INCOMPATIBLE + + // Initial scaling set to overworld_scaling when item is spawned. + scale(target, overworld_scaling) + + src.overworld_scaling = overworld_scaling + src.storage_scaling = storage_scaling + + // Make sure overlays also inherit the scaling. + ADD_KEEP_TOGETHER(target, ITEM_SCALING_TRAIT) + + // When moved sends a signal. + RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(scale_by_loc)) + +/** + * Detach proc for the item_scaling element. + * + * All registered signals are unregistered, and the attached element is removed from the target datum. + * Arguments: + * * target - Datum which the element is attached to. + */ +/datum/element/item_scaling/Detach(atom/target) + UnregisterSignal(target, COMSIG_MOVABLE_MOVED) + + REMOVE_KEEP_TOGETHER(target, ITEM_SCALING_TRAIT) + + return ..() + +/** + * Scales the attached item's matrix. + * + * The proc first narrows the type of the source to (datums do not have a transform matrix). + * It then creates an identity matrix, M, which is transformed by the scaling value. + * The object's transform variable (matrix) is then set to the resulting value of M. + * Arguments: + * * source - Source datum which sent the signal. + * * scaling - Integer or float to scale the item's matrix. + */ +/datum/element/item_scaling/proc/scale(datum/source, scaling) + var/atom/scalable_object = source + var/matrix/M = matrix() + scalable_object.transform = M.Scale(scaling) + +//Grabs any move signals and checks its loc, properly scaling it when in storage,inhand, or in world. +/datum/element/item_scaling/proc/scale_by_loc(atom/scale) + if(isturf(scale.loc)) + scale_overworld(scale) + else + scale_storage(scale) + +/** + * Shrinks when inworld + * + * Longer detailed paragraph about the proc + * including any relevant detail + * Arguments: + * * source - Source datum which sent the signal. + */ +/datum/element/item_scaling/proc/scale_overworld(datum/source) + SIGNAL_HANDLER + + scale(source, overworld_scaling) + +/** + * Enlarges when inhand or in storage. + * + * Longer detailed paragraph about the proc + * including any relevant detail + * Arguments: + * * source - Source datum which sent the signal. + */ +/datum/element/item_scaling/proc/scale_storage(datum/source) + SIGNAL_HANDLER + + scale(source, storage_scaling) diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 92ae0b764f..f91a8acc60 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -28,7 +28,7 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) var/static/list/spawn_forbidden = list( /obj/item/tk_grab, /obj/item/implant, // not implanter, the actual thing that is inside you /obj/item/assembly, /obj/item/onetankbomb, /obj/item/pda/ai, - /obj/item/smallDelivery, /obj/item/projectile, + /obj/item/small_delivery, /obj/item/projectile, /obj/item/borg/sight, /obj/item/borg/stun, /obj/item/robot_module) /datum/hSB/proc/update() diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index ba98c441f4..0a74581752 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -774,3 +774,31 @@ /obj/item/ammo_casing/shotgun = 8, /obj/item/ammo_casing/shotgun/incendiary = 10, ) + +/// Mail loot spawner. Some sort of random and rare building tool. No alien tech here. +/obj/effect/spawner/lootdrop/space/fancytool/engineonly + loot = list( + /obj/item/wrench/caravan = 1, + /obj/item/wirecutters/caravan = 1, + /obj/item/screwdriver/caravan = 1, + /obj/item/crowbar/red/caravan = 1 + ) + +/// Mail loot spawner. Drop pool of advanced medical tools typically from research. Not endgame content. +/obj/effect/spawner/lootdrop/space/fancytool/advmedicalonly + loot = list( + /obj/item/scalpel/advanced = 1, + /obj/item/retractor/advanced = 1, + /obj/item/surgicaldrill/advanced = 1 + ) + +/// Mail loot spawner. Some sort of random and rare surgical tool. Alien tech found here. +/obj/effect/spawner/lootdrop/space/fancytool/raremedicalonly + loot = list( + /obj/item/scalpel/alien = 1, + /obj/item/hemostat/alien = 1, + /obj/item/retractor/alien = 1, + /obj/item/circular_saw/alien = 1, + /obj/item/surgicaldrill/alien = 1, + /obj/item/cautery/alien = 1 + ) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm new file mode 100644 index 0000000000..ff7d32f337 --- /dev/null +++ b/code/game/objects/items/mail.dm @@ -0,0 +1,276 @@ +/// 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_state = "paper" + 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 + /// Who this mail is for and who can open it. + var/datum/weakref/recipient + /// 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() + . = ..() + RegisterSignal(src, COMSIG_MOVABLE_DISPOSING, .proc/disposal_handling) + AddElement(/datum/element/item_scaling, 0.5, 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 = 1, i <= stamp_count, i++) + stamps += list("stamp_[rand(2, 6)]") + update_icon() + +/obj/item/mail/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/dest_tagger)) + var/obj/item/dest_tagger/destination_tag = W + + if(sort_tag != destination_tag.currTag) + var/tag = uppertext(GLOB.TAGGERLOCATIONS[destination_tag.currTag]) + to_chat(user, "*[tag]*") + sort_tag = destination_tag.currTag + playsound(loc, 'sound/machines/twobeep_high.ogg', 100, TRUE) + +/obj/item/mail/attack_self(mob/user) + if(recipient && user != recipient) + to_chat(user, "You can't open somebody else's mail! That's illegal!") + return + + user.visible_message("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) + +/// Accepts a mob to initialize goodies for a piece of mail. +/obj/item/mail/proc/initialize_for_recipient(mob/new_recipient) + recipient = new_recipient + name = "[initial(name)] for [new_recipient.real_name] ([new_recipient.job])" + var/list/goodies = generic_goodies + + var/datum/job/this_job = SSjob.name_occupations[new_recipient.job] + 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 = 0, iterator < goodie_count, iterator++) + var/target_good = pickweight(goodies) + if(ispath(target_good, /datum/reagent)) + var/obj/item/reagent_containers/target_container = new /obj/item/reagent_containers/glass/bottle(src) + target_container.reagents.add_reagent(target_good, target_container.volume) + target_container.name = "[target_container.reagents.reagent_list[1].name] bottle" + new_recipient.log_message("[key_name(new_recipient)] received reagent container [target_container.name] in the mail ([target_good])", LOG_GAME) + else + var/atom/movable/target_atom = new target_good(src) + new_recipient.log_message("[key_name(new_recipient)] 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/violent_video_games, /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/violent_video_games = "[initial(name)] for the truth about the arcade centcom doesn't want to hear", + /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) + SIGNAL_HANDLER + if(!hasmob) + disposal_holder.destinationTag = sort_tag + +/// Subtype that's always junkmail +/obj/item/mail/junkmail/Initialize() + ..() + 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" + +/// 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/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" + +/obj/structure/closet/crate/mail/full/Initialize() + . = ..() + var/list/mail_recipients = list() + for(var/mob/living/carbon/human/alive in GLOB.player_list) + if(alive.stat != DEAD) + mail_recipients += alive + for(var/iterator in 1 to storage_capacity) + 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/mob/living/carbon/human/mail_to + mail_to = pick(mail_recipients) + if(mail_to) + new_mail.initialize_for_recipient(mail_to) + mail_recipients -= mail_to //Once picked, the mail crate will need a new recipient. + else + new_mail.junk_mail() + + +/// Mailbag. +/obj/item/storage/bag/mail + name = "mail bag" + desc = "A bag for letters, envelopes, and other postage." + icon = 'icons/obj/library.dmi' + icon_state = "bookbag" + item_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.can_hold = list( + /obj/item/mail, + /obj/item/small_delivery, + /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() + . = ..() + 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() + . = ..() + info = pick(GLOB.junkmail_messages) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index eaf576510e..7e327e865d 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -147,6 +147,9 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \ . = ..() . += GLOB.uranium_recipes +/obj/item/stack/sheet/mineral/uranium/five + amount = 5 + /* * Plasma */ @@ -192,6 +195,12 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ atmos_spawn_air("plasma=[amount*10];TEMP=[exposed_temperature]") qdel(src) +/obj/item/stack/sheet/mineral/plasma/five + amount = 5 + +/obj/item/stack/sheet/mineral/plasma/thirty + amount = 30 + /* * Gold */ diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index 5fa4537794..e6c3a2269a 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -49,7 +49,7 @@ /obj/item/stack/packageWrap/suicide_act(mob/living/user) user.visible_message("[user] begins wrapping [user.p_them()]self in \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") if(use(3)) - var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(user.loc)) + var/obj/structure/big_delivery/P = new /obj/structure/big_delivery(get_turf(user.loc)) P.icon_state = "deliverypackage5" user.forceMove(P) P.add_fingerprint(user) @@ -67,7 +67,7 @@ /obj/item/storage/box/can_be_package_wrapped() return TRUE -/obj/item/smallDelivery/can_be_package_wrapped() +/obj/item/small_delivery/can_be_package_wrapped() return FALSE /obj/item/stack/packageWrap/afterattack(obj/target, mob/user, proximity) @@ -89,7 +89,7 @@ else if(!isturf(I.loc)) return if(use(1)) - var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(I.loc)) + var/obj/item/small_delivery/P = new /obj/item/small_delivery(get_turf(I.loc)) if(user.Adjacent(I)) P.add_fingerprint(user) I.add_fingerprint(user) @@ -109,7 +109,7 @@ to_chat(user, "You can't wrap this!") return if(use(3)) - var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc)) + var/obj/structure/big_delivery/P = new /obj/structure/big_delivery(get_turf(O.loc)) P.icon_state = O.delivery_icon O.forceMove(P) P.add_fingerprint(user) diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index e5de4570a5..667e8f9db9 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -1464,7 +1464,7 @@ /obj/item/storage/box/shipping/PopulateContents() var/static/items_inside = list( - /obj/item/destTagger=1,\ + /obj/item/dest_tagger=1,\ /obj/item/sales_tagger=1,\ /obj/item/export_scanner=1,\ /obj/item/stack/packageWrap/small=2,\ diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm index e464a056ab..fa7896aaa1 100644 --- a/code/modules/cargo/exports/large_objects.dm +++ b/code/modules/cargo/exports/large_objects.dm @@ -6,7 +6,7 @@ k_elasticity = 0 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/bin) + exclude_types = list(/obj/structure/closet/crate/large, /obj/structure/closet/crate/wooden, /obj/structure/closet/crate/bin, /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/cargo/packs/service.dm b/code/modules/cargo/packs/service.dm index f53186d96e..a4df8f7ee8 100644 --- a/code/modules/cargo/packs/service.dm +++ b/code/modules/cargo/packs/service.dm @@ -23,7 +23,7 @@ /obj/item/stack/packageWrap, /obj/item/stack/packageWrap, /obj/item/stack/packageWrap, - /obj/item/destTagger, + /obj/item/dest_tagger, /obj/item/hand_labeler) crate_type = /obj/structure/closet/crate/wooden crate_name = "wrapping paper crate" @@ -35,7 +35,7 @@ contains = list(/obj/item/stamp, /obj/item/stamp/denied, /obj/item/export_scanner, - /obj/item/destTagger, + /obj/item/dest_tagger, /obj/item/hand_labeler, /obj/item/toner, /obj/item/toner, diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index 5bcb106822..2d49997c25 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -473,3 +473,17 @@ list_reagents = list(/datum/reagent/consumable/eggyolk = 5) tastes = list("dried eggs" = 1, "confusion" = 1) dried_being = /mob/living/simple_animal/chicken + +/obj/item/reagent_containers/food/snacks/cube/chicken + name = "chicken cube" + desc = "A new Nanotrasen classic, the chicken cube. Tastes like everything!" + list_reagents = list(/datum/reagent/consumable/eggyolk = 30, /datum/reagent/medicine/strange_reagent = 1) + tastes = list("chicken" = 1, "the country" = 1, "chicken bouillon" = 1) + dried_being = /mob/living/simple_animal/chicken + +/obj/item/reagent_containers/food/snacks/cube/bee + name = "bee cube" + desc = "We were sure it was a good idea. Just add water." + 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) + dried_being = /mob/living/simple_animal/hostile/poison/bees diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 3558717348..4f45af88bb 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -76,6 +76,14 @@ var/bounty_types = CIV_JOB_BASIC + /// 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 + //If a job complies with dresscodes, loadout items will not be equipped instead of the job's outfit, instead placing the items into the player's backpack. var/dresscodecompliant = TRUE // How much threat this job is worth in dynamic. Is subtracted if the player's not an antag, added if they are. @@ -396,3 +404,7 @@ /datum/job/proc/after_latejoin_spawn(mob/living/spawning) SHOULD_CALL_PARENT(TRUE) SEND_GLOBAL_SIGNAL(COMSIG_GLOB_JOB_AFTER_LATEJOIN_SPAWN, src, spawning) + +/// An overridable getter for more dynamic goodies. +/datum/job/proc/get_mail_goodies(mob/recipient) + return mail_goodies diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index 6ec7d2c438..90ac6be8dd 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -20,11 +20,20 @@ Assistant dresscodecompliant = FALSE always_can_respawn_as = TRUE threat = 0.2 - + family_heirlooms = list( /obj/item/clothing/gloves/cut/family ) + mail_goodies = list( + /obj/item/storage/box/donkpockets = 10, + /obj/item/clothing/mask/gas = 10, + /obj/item/clothing/gloves/color/fyellow = 7, + /obj/item/choice_beacon/music = 5, + /obj/item/toy/sprayoncan = 3, + /obj/item/crowbar/large = 1 + ) + /datum/job/assistant/get_access() if(CONFIG_GET(flag/assistants_have_maint_access) || !CONFIG_GET(flag/jobs_have_minimal_access)) //Config has assistant maint access set . = ..() diff --git a/code/modules/jobs/job_types/bartender.dm b/code/modules/jobs/job_types/bartender.dm index 40a1b20cb1..bde15b24db 100644 --- a/code/modules/jobs/job_types/bartender.dm +++ b/code/modules/jobs/job_types/bartender.dm @@ -20,13 +20,20 @@ bounty_types = CIV_JOB_DRINK display_order = JOB_DISPLAY_ORDER_BARTENDER threat = 0.5 - + family_heirlooms = list( /obj/item/reagent_containers/rag, /obj/item/clothing/head/that, /obj/item/reagent_containers/food/drinks/shaker ) + mail_goodies = list( + /obj/item/storage/box/rubbershot = 30, + /datum/reagent/consumable/clownstears = 10, + /obj/item/stack/sheet/mineral/plasma = 10, + /obj/item/stack/sheet/mineral/uranium = 10, + ) + /datum/outfit/job/bartender name = "Bartender" jobtype = /datum/job/bartender diff --git a/code/modules/jobs/job_types/botanist.dm b/code/modules/jobs/job_types/botanist.dm index 7a43837cf4..fcd71d7275 100644 --- a/code/modules/jobs/job_types/botanist.dm +++ b/code/modules/jobs/job_types/botanist.dm @@ -26,6 +26,15 @@ /obj/item/toy/plush/beeplushie, ) + mail_goodies = list( + /datum/reagent/toxin/mutagen = 20, + /datum/reagent/saltpetre = 20, + /datum/reagent/diethylamine = 20, + /obj/item/gun/energy/floragun = 10, + /obj/effect/spawner/lootdrop/seed_vault = 5,// These are strong, rare seeds, so use sparingly. + /obj/item/reagent_containers/food/snacks/cube/bee = 2 + ) + /datum/outfit/job/botanist name = "Botanist" jobtype = /datum/job/hydro diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index 82ec47bb47..00fb4822e2 100644 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -38,6 +38,12 @@ /obj/item/toy/figure/captain ) + 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 + ) + /datum/job/captain/get_access() return get_all_accesses() diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm index 1188669db5..823aec3078 100644 --- a/code/modules/jobs/job_types/cargo_technician.dm +++ b/code/modules/jobs/job_types/cargo_technician.dm @@ -21,11 +21,18 @@ display_order = JOB_DISPLAY_ORDER_CARGO_TECHNICIAN bounty_types = CIV_JOB_RANDOM threat = 0.2 - + family_heirlooms = list( /obj/item/clipboard ) + 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/shotgun/boltaction = 1 + ) /datum/outfit/job/cargo_tech name = "Cargo Technician" jobtype = /datum/job/cargo_tech diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index e7d602bd22..522f022072 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -19,12 +19,19 @@ display_order = JOB_DISPLAY_ORDER_CHAPLAIN threat = 0.5 - + family_heirlooms = list( /obj/item/toy/windupToolbox, /obj/item/reagent_containers/food/drinks/bottle/holywater ) + 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, client/C) . = ..() diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index 9f830ba43c..be145b24b2 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -24,12 +24,19 @@ threat = 1.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) - + family_heirlooms = list( /obj/item/book/manual/wiki/chemistry, /obj/item/fermichem/pHbooklet ) + mail_goodies = list( + /datum/reagent/flash_powder = 15, +// /datum/reagent/exotic_stabilizer = 5, + /datum/reagent/toxin/leadacetate = 5, + /obj/item/paper/secretrecipe = 1 + ) + /datum/outfit/job/chemist name = "Chemist" jobtype = /datum/job/chemist diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 2949758d8a..5ec4cca512 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -37,7 +37,7 @@ display_order = JOB_DISPLAY_ORDER_CHIEF_ENGINEER blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/paraplegic, /datum/quirk/insanity) threat = 2 - + family_heirlooms = list( /obj/item/clothing/head/hardhat, /obj/item/screwdriver/brass/family, @@ -47,6 +47,15 @@ /obj/item/wirecutters/brass/family ) + mail_goodies = list( + /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, + /obj/item/stack/sheet/mineral/gold = 15, + /obj/effect/spawner/lootdrop/space/fancytool/engineonly = 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 f5170fc745..ed58d67a1f 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -35,7 +35,7 @@ threat = 2 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) - + family_heirlooms = list( /obj/item/storage/firstaid/ancient/heirloom, /obj/item/scalpel, @@ -45,6 +45,13 @@ /obj/item/cautery ) + mail_goodies = list( + /obj/effect/spawner/lootdrop/organ_spawner = 10, +// /obj/effect/spawner/lootdrop/memeorgans = 8, + /obj/effect/spawner/lootdrop/space/fancytool/advmedicalonly = 4, + /obj/effect/spawner/lootdrop/space/fancytool/raremedicalonly = 1 + ) + /datum/outfit/job/cmo name = "Chief Medical Officer" jobtype = /datum/job/cmo diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index 5631ce4624..c54fb13c0a 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -21,11 +21,19 @@ display_order = JOB_DISPLAY_ORDER_CLOWN threat = 0 // honk - + family_heirlooms = list( /obj/item/bikehorn/golden ) + mail_goodies = list( + /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. + ) + /datum/outfit/job/clown name = "Clown" jobtype = /datum/job/clown diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm index 9947c27ba9..246f8d002f 100644 --- a/code/modules/jobs/job_types/cook.dm +++ b/code/modules/jobs/job_types/cook.dm @@ -28,6 +28,17 @@ /obj/item/clothing/head/chefhat ) + mail_goodies = list( + /obj/item/storage/box/ingredients/wildcard = 80, + /datum/reagent/consumable/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/outfit/job/cook name = "Cook" jobtype = /datum/job/cook diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index 2330e93147..cfa93ecd5a 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -27,11 +27,22 @@ display_order = JOB_DISPLAY_ORDER_DETECTIVE blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/paraplegic, /datum/quirk/monophobia) threat = 1 - + family_heirlooms = list( /obj/item/reagent_containers/food/drinks/flask/det ) + 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/full = 1 // detective/full + ) + /datum/outfit/job/detective name = "Detective" jobtype = /datum/job/detective diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index 2529eaa024..fb830b3ece 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -24,11 +24,15 @@ threat = 1.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) - + family_heirlooms = list( /obj/item/clothing/under/shorts/purple ) + mail_goodies = list( + /obj/item/storage/box/monkeycubes = 10 + ) + /datum/outfit/job/geneticist name = "Geneticist" jobtype = /datum/job/geneticist diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index 6371aaaa9f..508dcfda7b 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -39,11 +39,15 @@ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/prosopagnosia, /datum/quirk/insanity) threat = 2 - + family_heirlooms = list( /obj/item/reagent_containers/food/drinks/trophy/silver_cup ) + mail_goodies = list( + /obj/item/card/id/silver = 10, + /obj/item/stack/sheet/bone = 5 + ) /datum/outfit/job/hop name = "Head of Personnel" @@ -59,3 +63,11 @@ /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/hop) + +//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 diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index 59c6997398..f7e79cb769 100644 --- a/code/modules/jobs/job_types/janitor.dm +++ b/code/modules/jobs/job_types/janitor.dm @@ -19,7 +19,7 @@ display_order = JOB_DISPLAY_ORDER_JANITOR threat = 0.2 - + family_heirlooms = list( /obj/item/mop, /obj/item/clothing/suit/caution, @@ -27,6 +27,12 @@ /obj/item/soap ) + mail_goodies = list( + /obj/item/grenade/chem_grenade/cleaner = 30, + /obj/item/storage/box/lights/mixed = 20, + /obj/item/lightreplacer = 10 + ) + /datum/outfit/job/janitor name = "Janitor" jobtype = /datum/job/janitor diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index b0a0375517..b9a313d0e7 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -22,7 +22,7 @@ threat = 0.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) - + family_heirlooms = list( /obj/item/storage/firstaid/ancient/heirloom, /obj/item/scalpel, @@ -32,6 +32,16 @@ /obj/item/cautery ) + mail_goodies = list( + /obj/item/healthanalyzer/advanced = 15, + /obj/item/scalpel/advanced = 6, + /obj/item/retractor/advanced = 6, + /obj/item/surgicaldrill/advanced = 6, + /datum/reagent/toxin/formaldehyde = 6, + /obj/effect/spawner/lootdrop/organ_spawner = 5, +// /obj/effect/spawner/lootdrop/memeorgans = 1 + ) + /datum/outfit/job/doctor name = "Medical Doctor" jobtype = /datum/job/doctor diff --git a/code/modules/jobs/job_types/mime.dm b/code/modules/jobs/job_types/mime.dm index 84d6bcb1a7..3929b22f9d 100644 --- a/code/modules/jobs/job_types/mime.dm +++ b/code/modules/jobs/job_types/mime.dm @@ -20,11 +20,18 @@ display_order = JOB_DISPLAY_ORDER_MIME threat = 0 - + family_heirlooms = list( /obj/item/reagent_containers/food/snacks/baguette ) + 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, client/C) . = ..() H.apply_pref_name("mime", C) diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm index 73f6c5da5e..c3d42ba365 100644 --- a/code/modules/jobs/job_types/paramedic.dm +++ b/code/modules/jobs/job_types/paramedic.dm @@ -23,11 +23,20 @@ threat = 0.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) - + family_heirlooms = list( /obj/item/storage/firstaid/ancient/heirloom ) + mail_goodies = list( + /obj/item/reagent_containers/hypospray/medipen = 20, + /obj/item/reagent_containers/hypospray/medipen/oxandrolone = 10, + /obj/item/reagent_containers/hypospray/medipen/salacid = 10, + /obj/item/reagent_containers/hypospray/medipen/salbutamol = 10, + /obj/item/reagent_containers/hypospray/medipen/penacid = 10, + /obj/item/reagent_containers/hypospray/medipen/survival = 5 // survival/luxury + ) + /datum/outfit/job/paramedic name = "Paramedic" jobtype = /datum/job/paramedic diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index 20a2f463f5..5de351573f 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -13,11 +13,16 @@ plasma_outfit = /datum/outfit/plasmaman/prisoner display_order = JOB_DISPLAY_ORDER_PRISONER - + family_heirlooms = list( /obj/item/pen/blue ) + exclusive_mail_goodies = TRUE + mail_goodies = list( + /obj/effect/spawner/lootdrop/prison_contraband = 1 + ) + /datum/job/prisoner/get_latejoin_spawn_point() return get_roundstart_spawn_point() diff --git a/code/modules/jobs/job_types/quartermaster.dm b/code/modules/jobs/job_types/quartermaster.dm index dd79768282..efcab13381 100644 --- a/code/modules/jobs/job_types/quartermaster.dm +++ b/code/modules/jobs/job_types/quartermaster.dm @@ -32,12 +32,16 @@ display_order = JOB_DISPLAY_ORDER_QUARTERMASTER blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) threat = 0.5 - + family_heirlooms = list( /obj/item/stamp, /obj/item/stamp/denied ) + mail_goodies = list( + /obj/item/circuitboard/machine/emitter = 3 + ) + /datum/outfit/job/quartermaster name = "Quartermaster" jobtype = /datum/job/qm diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 606c34af5e..f4589cae3d 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -38,11 +38,17 @@ starting_modifiers = list(/datum/skill_modifier/job/level/wiring) blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) threat = 5 - + family_heirlooms = list( /obj/item/toy/plush/slimeplushie ) + mail_goodies = list( + /obj/item/storage/box/monkeycubes = 30, + /obj/item/circuitboard/machine/sleeper/party = 3, + /obj/item/borg/upgrade/ai = 2 + ) + /datum/outfit/job/rd name = "Research Director" jobtype = /datum/job/rd diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index 0e48467d91..089e5cf506 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -24,11 +24,17 @@ display_order = JOB_DISPLAY_ORDER_ROBOTICIST threat = 1 - + family_heirlooms = list( /obj/item/toy/figure/borg ) + 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/outfit/job/roboticist name = "Roboticist" jobtype = /datum/job/roboticist diff --git a/code/modules/jobs/job_types/scientist.dm b/code/modules/jobs/job_types/scientist.dm index 4bdbe6833b..5fcfb7e6f6 100644 --- a/code/modules/jobs/job_types/scientist.dm +++ b/code/modules/jobs/job_types/scientist.dm @@ -22,11 +22,17 @@ starting_modifiers = list(/datum/skill_modifier/job/level/wiring/basic) display_order = JOB_DISPLAY_ORDER_SCIENTIST threat = 1.2 - + family_heirlooms = list( /obj/item/toy/plush/slimeplushie ) + mail_goodies = list( + /obj/item/raw_anomaly_core/random = 10, +// /obj/item/disk/tech_disk/spaceloot = 2, + /obj/item/camera_bug = 1 + ) + /datum/outfit/job/scientist name = "Scientist" jobtype = /datum/job/scientist diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 3985a07049..4e338da1fa 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -34,6 +34,14 @@ /obj/item/clothing/head/beret/sec ) + mail_goodies = list( + /obj/item/reagent_containers/food/snacks/donut/caramel = 10, + /obj/item/reagent_containers/food/snacks/donut/matcha = 10, + /obj/item/reagent_containers/food/snacks/donut/blumpkin = 5, +// /obj/item/clothing/mask/whistle = 5, + /obj/item/melee/baton/boomerang/loaded = 1 + ) + /datum/job/officer/get_access() var/list/L = list() L |= ..() | check_config_for_sec_maint() diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index 58822dc4c5..d8ea7e1df5 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -27,7 +27,7 @@ display_order = JOB_DISPLAY_ORDER_STATION_ENGINEER threat = 1 - + family_heirlooms = list( /obj/item/clothing/head/hardhat, /obj/item/screwdriver/brass/family, @@ -37,6 +37,13 @@ /obj/item/wirecutters/brass/family ) + 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/outfit/job/engineer name = "Station Engineer" jobtype = /datum/job/engineer diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index 423a65048f..e5c64acbc8 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -25,11 +25,19 @@ threat = 1.5 starting_modifiers = list(/datum/skill_modifier/job/surgery, /datum/skill_modifier/job/affinity/surgery) - + family_heirlooms = list( /obj/item/reagent_containers/syringe ) + 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/outfit/job/virologist name = "Virologist" jobtype = /datum/job/virologist diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index ec4e81caea..eda6257653 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -34,6 +34,15 @@ /obj/item/book/manual/wiki/security_space_law ) + 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/get_access() var/list/L = list() L = ..() | check_config_for_sec_maint() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 0e2daf82db..0e2d27889e 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -903,7 +903,7 @@ /obj/item/gripper/mining, /obj/item/cyborg_clamp, /obj/item/stack/marker_beacon/cyborg, - /obj/item/destTagger, + /obj/item/dest_tagger, /obj/item/stack/packageWrap/cyborg, /obj/item/card/id/miningborg) emag_modules = list(/obj/item/borg/stun) @@ -1063,7 +1063,7 @@ /obj/item/stack/sheet/rglass/cyborg, /obj/item/stack/rods/cyborg, /obj/item/stack/tile/plasteel/cyborg, - /obj/item/destTagger/borg, + /obj/item/dest_tagger/borg, /obj/item/stack/cable_coil/cyborg, /obj/item/pinpointer/syndicate_cyborg, /obj/item/borg_chameleon, @@ -1192,7 +1192,7 @@ /obj/item/stack/sheet/rglass/cyborg, /obj/item/stack/rods/cyborg, /obj/item/stack/tile/plasteel/cyborg, - /obj/item/destTagger/borg, + /obj/item/dest_tagger/borg, /obj/item/stack/cable_coil/cyborg, /obj/item/borg_chameleon, /obj/item/pinpointer/spider_cyborg) diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm index 57d2b39db8..1009e3f605 100644 --- a/code/modules/mod/modules/modules_supply.dm +++ b/code/modules/mod/modules/modules_supply.dm @@ -51,7 +51,7 @@ return if(!mod.wearer.Adjacent(target)) return - if(istype(target, /obj/structure/closet) || istype(target, /obj/structure/bigDelivery)) + if(istype(target, /obj/structure/closet) || istype(target, /obj/structure/big_delivery)) var/atom/movable/picked_crate = target if(!check_crate_pickup(picked_crate)) return diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index a8835d0cee..e8c4b0d3d3 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -210,7 +210,7 @@ flush = FALSE /obj/machinery/disposal/proc/newHolderDestination(obj/structure/disposalholder/H) - for(var/obj/item/smallDelivery/O in src) + for(var/obj/item/small_delivery/O in src) H.tomail = TRUE return diff --git a/code/modules/recycling/disposal/holder.dm b/code/modules/recycling/disposal/holder.dm index bce1b3d98d..d01cb87e9a 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 - 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/disposal/pipe_sorting.dm b/code/modules/recycling/disposal/pipe_sorting.dm index 1ae5698312..ec20db22b5 100644 --- a/code/modules/recycling/disposal/pipe_sorting.dm +++ b/code/modules/recycling/disposal/pipe_sorting.dm @@ -60,8 +60,8 @@ /obj/structure/disposalpipe/sorting/mail/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/destTagger)) - var/obj/item/destTagger/O = I + if(istype(I, /obj/item/dest_tagger)) + var/obj/item/dest_tagger/O = I if(O.currTag)// Tagger has a tag set if(O.currTag in sortTypes) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 97a35f9312..ba6b9ede62 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -1,4 +1,4 @@ -/obj/structure/bigDelivery +/obj/structure/big_delivery name = "large parcel" desc = "A large delivery parcel." icon = 'icons/obj/storage.dmi' @@ -6,10 +6,14 @@ density = TRUE mouse_drag_pointer = MOUSE_ACTIVE_POINTER var/giftwrapped = FALSE - var/sortTag = 0 + var/sort_tag = 0 var/obj/item/barcode/sticker -/obj/structure/bigDelivery/interact(mob/user) +/obj/structure/big_delivery/Initialize() + . = ..() + RegisterSignal(src, COMSIG_MOVABLE_DISPOSING, .proc/disposal_handling) + +/obj/structure/big_delivery/interact(mob/user) to_chat(user, "You start to unwrap the package...") if(!do_after(user, 15, target = user)) return @@ -18,29 +22,29 @@ unwrap_contents() qdel(src) -/obj/structure/bigDelivery/Destroy() +/obj/structure/big_delivery/Destroy() var/turf/T = get_turf(src) for(var/atom/movable/AM in contents) AM.forceMove(T) return ..() -/obj/structure/bigDelivery/examine(mob/user) +/obj/structure/big_delivery/examine(mob/user) . = ..() if(sticker) . += "There's a barcode attached to the side." -/obj/structure/bigDelivery/contents_explosion(severity, target, origin) +/obj/structure/big_delivery/contents_explosion(severity, target, origin) for(var/atom/movable/AM in contents) AM.ex_act(severity, target, origin) -/obj/structure/bigDelivery/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/destTagger)) - var/obj/item/destTagger/O = W +/obj/structure/big_delivery/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/dest_tagger)) + var/obj/item/dest_tagger/O = W - if(sortTag != O.currTag) + if(sort_tag != O.currTag) var/tag = uppertext(GLOB.TAGGERLOCATIONS[O.currTag]) to_chat(user, "*[tag]*") - sortTag = O.currTag + sort_tag = O.currTag playsound(loc, 'sound/machines/twobeep.ogg', 100, 1) else if(istype(W, /obj/item/pen)) @@ -108,7 +112,7 @@ else return ..() -/obj/structure/bigDelivery/relay_container_resist(mob/living/user, obj/O) +/obj/structure/big_delivery/relay_container_resist(mob/living/user, obj/O) if(ismovable(loc)) var/atom/movable/AM = loc //can't unwrap the wrapped container if it's inside something. AM.relay_container_resist(user, O) @@ -127,26 +131,35 @@ if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. to_chat(user, "You fail to remove [O]'s wrapping!") -/obj/structure/bigDelivery/proc/unwrap_contents() +/obj/structure/big_delivery/proc/unwrap_contents() if(!sticker) return for(var/obj/I in src.GetAllContents()) SEND_SIGNAL(I, COMSIG_STRUCTURE_UNWRAPPED) -/obj/item/smallDelivery +/obj/structure/big_delivery/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/small_delivery name = "parcel" desc = "A brown paper delivery parcel." icon = 'icons/obj/storage.dmi' icon_state = "deliverypackage3" var/giftwrapped = 0 - var/sortTag = 0 + var/sort_tag = 0 var/obj/item/barcode/sticker -/obj/item/smallDelivery/contents_explosion(severity, target, origin) +/obj/item/small_delivery/Initialize() + . = ..() + RegisterSignal(src, COMSIG_MOVABLE_DISPOSING, .proc/disposal_handling) + +/obj/item/small_delivery/contents_explosion(severity, target, origin) for(var/atom/movable/AM in contents) AM.ex_act(severity, target, origin) -/obj/item/smallDelivery/attack_self(mob/user) +/obj/item/small_delivery/attack_self(mob/user) to_chat(user, "You start to unwrap the package...") if(!do_after(user, 15, target = user)) return @@ -159,7 +172,7 @@ new /obj/effect/decal/cleanable/wrapping(get_turf(user)) qdel(src) -/obj/item/smallDelivery/attack_self_tk(mob/user) +/obj/item/small_delivery/attack_self_tk(mob/user) if(ismob(loc)) var/mob/M = loc M.temporarilyRemoveItemFromInventory(src, TRUE) @@ -175,14 +188,14 @@ unwrap_contents() qdel(src) -/obj/item/smallDelivery/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/destTagger)) - var/obj/item/destTagger/O = W +/obj/item/small_delivery/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/dest_tagger)) + var/obj/item/dest_tagger/O = W - if(sortTag != O.currTag) + if(sort_tag != O.currTag) var/tag = uppertext(GLOB.TAGGERLOCATIONS[O.currTag]) to_chat(user, "*[tag]*") - sortTag = O.currTag + sort_tag = O.currTag playsound(loc, 'sound/machines/twobeep.ogg', 100, 1) else if(istype(W, /obj/item/pen)) @@ -249,19 +262,23 @@ overlaystring = copytext_char(overlaystring, 5) //5 == length("gift") + 1 add_overlay(overlaystring) -/obj/item/smallDelivery/proc/unwrap_contents() +/obj/item/small_delivery/proc/unwrap_contents() if(!sticker) return for(var/obj/I in src.GetAllContents()) SEND_SIGNAL(I, COMSIG_ITEM_UNWRAPPED) -/obj/item/smallDelivery/examine(mob/user) +/obj/item/small_delivery/examine(mob/user) . = ..() if(sticker) . += "There's a barcode attached to the side." +/obj/item/small_delivery/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/destTagger +/obj/item/dest_tagger name = "destination tagger" desc = "Used to set the destination of properly wrapped packages." icon = 'icons/obj/device.dmi' @@ -275,11 +292,11 @@ flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BELT -/obj/item/destTagger/borg +/obj/item/dest_tagger/borg name = "cyborg destination tagger" desc = "Used to fool the disposal mail network into thinking that you're a harmless parcel. Does actually work as a regular destination tagger as well." -/obj/item/destTagger/suicide_act(mob/living/user) +/obj/item/dest_tagger/suicide_act(mob/living/user) user.visible_message("[user] begins tagging [user.p_their()] final destination! It looks like [user.p_theyre()] trying to commit suicide!") if (islizard(user)) to_chat(user, "*HELL*")//lizard nerf @@ -288,7 +305,7 @@ playsound(src, 'sound/machines/twobeep.ogg', 100, 1) return BRUTELOSS -/obj/item/destTagger/proc/openwindow(mob/user) +/obj/item/dest_tagger/proc/openwindow(mob/user) var/dat = "

TagMaster 2.2

" dat += "" @@ -303,12 +320,12 @@ user << browse(dat, "window=destTagScreen;size=450x350") onclose(user, "destTagScreen") -/obj/item/destTagger/attack_self(mob/user) +/obj/item/dest_tagger/attack_self(mob/user) if(!locked_destination) openwindow(user) return -/obj/item/destTagger/Topic(href, href_list) +/obj/item/dest_tagger/Topic(href, href_list) add_fingerprint(usr) if(href_list["nextTag"]) var/n = text2num(href_list["nextTag"]) diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm index fea67a921f..a86195f526 100644 --- a/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm @@ -56,7 +56,7 @@ id = "desttagger" build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/iron = 250, /datum/material/glass = 125) - build_path = /obj/item/destTagger + build_path = /obj/item/dest_tagger category = list("initial", "Electronics") /datum/design/handlabeler diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 21d616bee4..0cebcbb20c 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -27,6 +27,9 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/machinery/syndicatebomb, /obj/item/hilbertshotel, /obj/machinery/launchpad, + /obj/machinery/disposal, + /obj/structure/disposalpipe, + /obj/item/mail, /obj/item/hilbertshotel, /obj/machinery/camera, /obj/item/gps, @@ -102,6 +105,7 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, 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 @@ -236,6 +240,7 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( SO.generateCombo(miscboxes[I], I, misc_contents[I]) qdel(SO) + SSeconomy.import_total += value var/datum/bank_account/cargo_budget = SSeconomy.get_dep_account(ACCOUNT_CAR) investigate_log("[purchases] orders in this shipment, worth [value] credits. [cargo_budget.account_balance] credits left.", INVESTIGATE_CARGO) @@ -286,8 +291,53 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( D.adjust_money(gain) msg = copytext_char(msg, 1, MAX_MESSAGE_LEN) + SSeconomy.export_total += (D.account_balance - presale_points) 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. + if(!SSeconomy.mail_waiting) + 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 + var/obj/structure/closet/crate/mail/mailcrate = new(pick(empty_turfs)) + + //collect recipients + var/list/mail_recipients = list() + for(var/mob/living/carbon/human/player_human in GLOB.player_list) + if(player_human.stat != DEAD) + mail_recipients += player_human + + //Creates mail for all the mail waiting to arrive, if there's nobody to recieve it it's just junkmail. + for(var/mail_iterator in 1 to SSeconomy.mail_waiting) + var/obj/item/mail/new_mail + if(prob(FULL_CRATE_LETTER_ODDS)) + new_mail = new /obj/item/mail(mailcrate) + else + new_mail = new /obj/item/mail/envelope(mailcrate) + var/mob/living/carbon/human/mail_to + if(mail_recipients.len) + mail_to = pick(mail_recipients) + new_mail.initialize_for_recipient(mail_to) + mail_recipients -= mail_to + else + new_mail.junk_mail() + if(new_mail) + SSeconomy.mail_waiting += 1 + mailcrate.update_icon() + return mailcrate + #undef GOODY_FREE_SHIPPING_MAX #undef CRATE_TAX diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index f60ea76015..439ed6b2ed 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -144,16 +144,24 @@ icon_state = "cargodrobe" product_ads = "Upgraded Assistant Style! Pick yours today!;These shorts are comfy and easy to wear, get yours now!" vend_reply = "Thank you for using the CargoDrobe!" - products = list(/obj/item/clothing/suit/hooded/wintercoat/cargo = 3, - /obj/item/clothing/under/rank/cargo/tech = 5, - /obj/item/clothing/under/rank/cargo/tech/skirt = 5, - /obj/item/clothing/under/rank/cargo/util = 5, - /obj/item/clothing/suit/toggle/labcoat/depjacket/sup = 5, - /obj/item/clothing/under/rank/cargo/tech/long = 5, - /obj/item/clothing/shoes/sneakers/black = 5, - /obj/item/clothing/gloves/fingerless = 5, - /obj/item/clothing/head/soft = 5, - /obj/item/radio/headset/headset_cargo = 3) + products = list( + /obj/item/storage/bag/mail = 3, + /obj/item/clothing/suit/hooded/wintercoat/cargo = 3, + /obj/item/clothing/under/rank/cargo/tech = 3, + /obj/item/clothing/under/rank/cargo/tech/skirt = 3, + /obj/item/clothing/under/rank/cargo/util = 3, + /obj/item/clothing/suit/toggle/labcoat/depjacket/sup = 3, + /obj/item/clothing/under/rank/cargo/tech/long = 3, + /obj/item/clothing/shoes/sneakers/black = 3, + /obj/item/clothing/gloves/fingerless = 3, + /obj/item/clothing/head/soft = 3, + /obj/item/radio/headset/headset_cargo = 3 + ) + premium = list( + /obj/item/clothing/under/rank/cargo/miner = 3, + /obj/item/clothing/head/mailman = 1, + /obj/item/clothing/under/misc/mailman = 1 + ) refill_canister = /obj/item/vending_refill/wardrobe/cargo_wardrobe payment_department = ACCOUNT_CAR diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 7b00c155ef71b3c67ee5b052c886c89234927e36..0fc25e4caffcb8f4d77210fdc85034ae2e39758d 100644 GIT binary patch literal 23585 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 literal 21888 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 diff --git a/icons/obj/crates.dmi b/icons/obj/crates.dmi index c6574ca86b23f9494a87846dc6109827d8c82a0d..131034201971b2a45ebb22c0780e772cbbd076e9 100644 GIT binary patch literal 28724 zcmcG#cQjnz|1Ughh@R-8MWTdg(R-I5h$tZ#o#=gpVMLEEdJq!5j^2$<5G6$KUG!0h zG3JiX=lA{H=Xut%?z;DnYc1={IcM*)&)M(ye!pL@yiNON836FfOit-^&gCZ$8$G7f_lwbI zb-G9ydN%ni{DNxi4^y;W+ArsR}6FU$4LBfQS?o8I-P8ZEFT2qVvlSdx|gzq z2Nl`9nid=-9qBQ0`ZMut)ZV*3wlGyj$ExlPne<-U@d@i_bfT$~Zh~#H_E6zA^8!++ zVemya3FD*+)t++IE!`C83G>AF(cCfRDo$zx@j7iQ=Yb%mI&CTI{X(_?V18@5zK;6{ zgX2q{c1dQl2h*7i*RK@nZbFWz+@;_Aj0&QTl*&*gQYK|Y8tVKMi{yP0AJ6Nzr^YML zVo7VDHKwU6g9_jx?4!{BR@wDu^iiJp?pI3c@rsZu=CLMQ(s3z%uTIMVRi3;>;Xe%_ zAL8DHpLi6e#S7t!M7kR zfsBU8dvy9y_$zRf*FLwgsONs^lj}YwOQl56b7fvz*va4dA4a?dyEwOuG@y=8z6Nfx z%WOu*(L6g{tsVJ<=CC^GW3`_!+vixPp7K?Hp^ReJqbwy~YxQBPGt>l~9kh8xih5X# zpsp3C2U#lOWz~LF#J^@=gkMpLYU7UD6D#iO+oh$}Dd41%Ox*O;DJUxJR+|gX#G9=P z3BP0PbB*+!6Lxz>&^Bqv?iw3o{<2Mm-jiukm5tS!*0|PxN{`~y^h!!fTS}WtTbc(@(pujtBnl6uy(a#O7P>5kKI7yBe3D}!2W!PoiDHff zi&T$0aIrt-P$&fw;$q9QMF1WW;0CFXW3iJH;Ks0EYhcRI%j2eD$_fP$@MG%Q;Zm4k zf07#`_&=>!q-3-8#%SRD-{cMg*^5G2k<#Owlc-fKH=OO zGuD=yJ7PniJ!@}Jaf9G5OrQAol}ksJeBf)no=*OFI{!A&ufO6z}ylq%uHv9yFhTY;d3!C;?KaKaWaW+5-TA!Yzm6Jjg#1r;~y*3@w$eoOCV36bos`9We1jV#axCj-#2#{J575)r&QWuP z422QG%twYjoUsCvTl53AhZ@rM?0T@5+M2m8NfYy7E1Us!132LdI4 z{v(+h>;c;j4Y}+kfVy)kKw#D~7~_AWh#RJxSCARRA^3Lj!Ae(`ysr5wiyBYQ;ZlfX z{NcSYhrYP>)vxe%m$AnpG0x}cKIqS1*TL*-=wI9ot}edHcx+ua8Z!pRvPVV`{8>L& z)nKVZ9O}|`Xvo;|5}@M}jVlp)c@H3K$J$kT-=G}Zl{@ggWSqZ(?R2+mc{7Vd3sacG zB;Ic>SUaW!#=}*6MQzM|e!oddO~nahr{iZ9q5Jbph8uRc5IpbSagzh1W-3R5ZwU2$ z$Q%N>ovyulac1D;cEJ_31Y7Z(H#R z`AF7X$RRH($_JGY-h~wMB>95JcMiu;^!rHTpJ1~f7sDG7NNon8L*0d`L-H|f4W?@f zf)F|O9K5?|giZIqia%ox{y4a3%aaXbXP@OTl2R_NY@L>*QDC~b3ms_G!St)vtE;5B zeDLkym*O~&%huzVhW`|STO$W_t%3pv5wnAJrCuPT*C5SdI7%hD&Y$(S~oXu@%QnPhREX#Q*|>oQ?JfEx7A!(U+@+|#FA zs+(~mYXvbsj_-V_rZIjkBBVHiY`54ImqPYYMZ|dMy{8X!H=wzq+C`((8?p&1nH89V z62i^)tJ-C7-wT{SibXAi$UJYi@U-Dynt_BG>D^O8P6iQFX0rwmh~C>2j|QsHC~wrtdSPen*x&yy$Y9KJ>|&yH)vFa_dIZ`+01MYoc#lTZ1bjer5|6HABj9sV35bZt zYMn~0sZg{ylFb~GwJ_;ZQ#HXa*A8I6S*av9)rnW+` zEwD`5IBA-q^ojOITnnRRS*hc%pwiLS6S9>5JOR>`dVtBMm2A?|jC6F-u2fW1-|a@3 z02h{EMpnIoqN0~6w9`GLfm{~!Aep1nBlzD!4Hb{&HCONzLa1S1V{v(?8C|w7@RME` z8<0rig8Dk^Y9!S+O`&6b-}{J!R$%0%@SSl1>~EPDVxq(cL&M>CQ1_M8CT%Y)C=?=ThU?Q;<|75;`9c>)McP`$Yyx#BPcANX>X<*x z*thw7#SL?8e}=75pJxzvcINry@)dQaI>uVPG6q7EQ{3$zsdfhknSxCR2!lNChW^ZU z~x8tfl3Jl1&+$;h-}gsS6!5Ug*F;BJkod;)Mq^$!ngt4cmx;F@dHmieyByWm=SQ;V%^C1byY;! znvoVVjeqz_>y6<(8{=W(7w=$IkA?~$JN1}C=O%9#ezeprTVh>=?@u!y%D+bVS7I6r zI;UK~M2se(X%o-&k;!89v3o5}EoRbqpo20k-pR>lHXZl()-L6#o%YGgI94hcL$&|h zE4@YXLG;Z*_U-f7zap7{h}s8T>aW1bD~J3qnu@MecSxw8yF%j(cOeTTM;P zxGz=mv%*3)w`hx(@I&XVR%=iF3)%{XZaQS7y4#}m_MUO&bZaJB=6<~shz@x81RI{F z+ccY1nr?O%7H#wB1uRp_W~r(TFV#pQ2PLd}Q{OJ}KORxmJX7Cal!$E4HTowG=$% z-)Y~=_w1QM*k1dGUN7HuBbPq|BlO6%+{@z||6c6nWtr#wi;zstMomo-biI(iz>EVkH%-s5l^N-<{4vXhG zUIxGNdm?SO9}7Ku@D|PVN%VG{7?5^-NdPFUTAOY1@$PkBjTT<&77644&)3giVY9-x zgY;91O$%jvv?O2U0u7~uE*jiK<}-EWrSi7{V^Cqr;VJU=DCl58=8faKnCpel<#2Am_&s&g4<7j`z?4jC4 zsmpCdiDu83QT)x*ha5g5km*a@G2$G$hv+ZZfrh~;-#G$8_wKpup8-LF+U4swzupGi z`n>Zt;zq8*0zi=cWn}qc_~M%;xv0@_Dq;Qo1gYe!c@$*2lv5AJWIwKSiz&NXr`9DHKO1Jb=Y& zO$D(ap0?AQcIj<>EGn%~wS3){b)*wVCPu?+3-p+rBY3-qSj4J+-gdue5tY*yw5#)T zkwkG1aZ}a7xY>^ycD+@IRQ5H(@SyDqO?=%cdP`|pNx)rm6 z&zNHn2JhynLBX%gzQxlPhpD$Zm;}j{ExQ83ZnfH77lJ%n&sGlpVVJEWxpxYpfI$xF zuiHq_I}+J9NjcJ(ma@*TS_rhhWvXv)jnHJCqW*JfG_xW4)_qUq@TQ_F5%<8{U+ti5 zbXnPF@Yjbkj~XVb|1O$AfXo8mbQMRhg-X54_E82;-N6!z?tAFfSQiEiN=aQPZTJV5 z;6k)o;OqVB*FBO!mENk;_a59xA7F;4_Be;BbxfUPvrIgqe4iEszC=x{U;7%TuzUb{ zwzaRNViNp4Kd-bfmyqXv1lChFY?a=yq>UG=389^1c8~wny*M+PiyhizR%O6T-2o9@E$;77~i5KfXcw1%o^P!8rmS2~?PZUS07fhnwlN#=ppD+3vk6 z<@^U&lEsso6^EOZxt?G;*CM;!9laoYmguo{I+E%}R)P2z=_L3P^!+ym(jn`7x4MD6 z%UBR=j3tEHnUm2gkw#?@L+UHEt zqfC9{LMvfY)zD^j96C%@g$BI_?^BX z*GvN5n$tn@+-BEd&VnyYzB0M(?zwq`KGhR1B&+3G%iDBXj4@b4*$2vM_sMmhtqD2w zc_`#kO}m!6hSs~Mv$tlFX?C;PcA0C(FSMJdL{aLblVVNKH^g!j_SSik2=J@%BQ3ye zu|kn)Ha|WY3v}Q>xtCzVYk`%8p6h-mf>QjnNOzdz*2k7^fDNENSlIpNW}C}RF2Zx7 z9oO5o@oiuB{|A{t6nJty?$A7ijN?8K>Kc@))#%$un5|v&W+uXp)YAXej1`_c?_I9<0}Ra+)rC zsk!oQ-WfeJVWCtsjF=8Pa3Cy>@ft4>MGM4WQ*kiDwIjmK*H=PNP!PbM?(qAYG+@6U zA)!#B@#f8&jtBt=v?*xOuj+h{83W1S7)VCv9Xux2@yM5wOIigB@QjzKw_&c7UT@#M>8_tvnWHEeXkt78Q)>!`dZcTDUUejmN5wS9*Mrtfi>c6`BTP}F z^^Qu8#zI{RoR7G#lKql{8}A->>xzDol!U8-%pOV)Y8-y z?JbkiV!@7LKhMBBweDOMJFMFs7Wz+p2M6v$KdZ;EnUloSBV%!I?92pvrJlgwt*2y9 z{~2@KU+woyfO$o{S!E81e&>BL-Ms4~vYY2E{|?DkKmB`8y)g8Ptx2nT#dz?Ji4=bv zwVz5(md0=U@(_3XF5Fg)Qcda|o@e_SrD7~x@$%p+4EbTl5Aa|g6SqxdKGxO^_?iCj zHtGKHcx?MH!DRc0`O7~jlE)j{Sa<3Z9OSgZt(c0p z~bJ9F= z@7MbhIOOW1^E}CMJ1;;WoIV4NY%%SuEFw4rZ;@~LELPb3@_uY@$$vP+ucseOX4ThC!p9DM?8LQ*T|T zN3L7FFg^KnCwQ^mr1D!(3nqM|?%GqmFbnm9BhC1}l~YHvxK3BplIfQc)0zoR|03SX z{`uV`T-&oT{j|wJ^*5Jh$d!)})yJj`|5o=mr;0lyu-Vl`8DWS^drSAPjkTi#5GXC( z_z$JI%fINBt7}Pag#U%XjFUPa=s|A*9|zG$|8kwYz8nU^rfB$Q-jNjygD5;dMy6op zTs0<6`T)xO^6@eFoOgXFONo^!@n1Z9c-!P)=S`dbwNi21xEF(TEoOHogHErSnn)`s z*X-FBHU^qJF~e^1qBR(Utr0^~*d0UA8}%vw#;=5;)>}ezn9+H;DDeA(v_T#zWoC=f z`ThiSDfqin{1C#O;|&Cc=6@g(zj zEIRC>N3SSchCg(zWd8yLz5r@^KMU#)aQ>1d5H~`sf*BoSvL?7grF3Jm!^A%tTIbHa zrg(2dT8#f(xllSKP2;)G?+DO}MgJ|eUunj!U;4t;57m^&*!lO9Rzw3ZNy&5L3XF+}!S(wi&JfpSdsI=H$ zyL7v~TAr{>+DE)_W(tcQ2{7imUXXrZSr8C$etFSb*^C1SEa0_YZ ze*ZXD;b9;Zr53+s`c;Qk8Cw#Z5y_St zGqte@cY0B?vDQ(_)<%zZ-7c$A6@>PbK^#|OXIHIjNKrv|=T(Xq-NQ42H+xrJgE8%^ z!6VHwVsSEoWIU-Wp*!ccJu`x2L1%Aj8 zyRMG%(0&nM{+kQn{~cmS&%+E2zy1CJ02u1ulY~~%%uN9IDb7%8(;wpc{kqDHK)9t- zjH@G1rpv&M(uQMwa8;ncwoiP<>XydMJ4y7lTr?jI{AhXFM^Yw(5GX1XgIt}zqTFAK z>Ou#E7P>R{4~v@K{oYJSyH*6}s1xLqqi;pE3ikuBg)uXQDRI+8Av1>H{Kj+gL(IIE zj{~VkW*hw32tEMAg(H5acX~tZe|UjAnh373pRXI}f9q?z)W8O$QMY!^fvL;RQ~3=VjZUi96I86Ia|kXr|`_3dGFy`LV#^L0N5eB+#+d$r5E{i*QY z$NjR~wm&ciSWCV+PfLD50ujZAZa`H#58D=m4@Z-?<28#=CNYzxAwnu% zQDIVzE3A6%Q13=NhN@9kYS0nV1B7%k!Y3tQVy8)LRwGI;#@0?-Sduz`IJB<3Qzb*j!0$HTsxJq(k$`VOhcZF1K%^c+1@aqFU?-k>0z+E}uViX($q zTJFEGl??ZYJ!9}RF|@EY+m~o&=pV*o&r`%3y0FM!8w>rPH0b~Lq8hcXLC~KRB@70} z%)#Owt;6|+FeHej@!tOi3yRN-=w!af!PL@seK*sJi?$xg6c4J3=QgNFLM?sNNs-&p zoQc5+V6_z)&Q`nJo`z5&{vkJPkN4XbZo3YI7Wdm`RdsPgv!Xy>F01FS^;~n=iQhjZyM;fI**0|P&I2R;%Eee~Kwwo(qJ}kzhX;^2vgpL6zrit3Dx(Hw z0IzZ5%EeJmS((O^S8;LiOEtAGH;;TD010mpqYb?_ z7=eTKc3eU^hqh8r zN7fuBZ;5Dl$J+Rg!jI6GS*ICC8wJaYkHuUZ9J*1L%SW}pQl7sbL!JbPfwrDJr#2UX z@vZb5_zTyn6ACM*g+^4OA24`H15|JyK2SX9$!{(h)(pv0`rJ0<7LCs#BggDckaA&e zD(TGxY`MUZv#|J)7r(W=O*E1pA|WfwJSu(p2#}MjxO5w5Ap)tz=3{6mRtSNU)M&jd&=uNYZYHi7hqWU6axKSv%v)xDv0trVqO#~C94 zm`Zs+01jQ8evY=f09%FrN#H-7t+pmoxwT~XeZ>qScr)d9!xDxR-pbC0FM=9N4WP--XTBxj-Q>3G4_&l8pal&{BAXAj5Q@mc zHaEaMQoyt^P8n)KdxV$TCZ*0{8XLeQ=aO@To0D88O{+{s1MXe;F{q?Hf}mi35+-heQE|D=zS8&r zT7G~W+wpFx2B`b`JeEeWu&AQJYcPrH%QP6?OH(;prsgtV`tp9|J2~LhG2tD6`-jo2 zcHaj=3C?A?y)AY&m;yKrwujfIJuJ1dy7y|C@Gsi?(B@O+HLcX>WEY^@?sPM14LYI& z%-^(ea}+NQ(6xovDeYb01om1eD=1+1#WE5_^#-M-(bm@2D?q2$bK_*z_I=w-PtH$A zWmT1wa2-W5va&nt3UrfFOP9!u-(Nh>t*|9{_=(z4giM=BrB05#}$L73CdvB%r zx1*vV_nk4;1z*fM2K3SkdDM2v1(R>& z#rN+Sc&Ld63r1Art+}q*3(Y&iyfRIo(`-+k;Kszn5Zu2XG;FhO$`#plBQWIF`knmf z5JArTi#|@(bT%YDp1iiM4r?qRgH7fOwv>Y758e@E*iBF0}V)C@v~G{-{wt*A78@ zr~RVxIm-RU-_Y+TJmtrH9x`D338g(NJnHO3$u` zQ*XshIf}5oD3}@np3GAec5Rcv`(qeX@10LNJLS2p_x;`>A!ZOEM&E49>Xjq+XKOT6 zQ01oxqx$S#@*f9|(#2IZYD0b}VGulpO>dQB`vlqsLjyM5a#{;_Z5V*N|x)HQi?23+6Vi^t3*xa zjt>-&g+{ltt>KK~_ebr?Q;%`1)=!x|v!wl|w&8X5vVcGOCZFmro&h>kng6WC#l0NG z*6TKKcol*$*EP5?TJSx!2e)t=RJWgfEu~)XfbzZUbJdSMH}U?+OauQU%s0WGG3;{z zy{M62HevqU*QfFeJaWrcyJc-OP70Vn-!Pc^?cHZjQM&mN+zSY#(-K@W1Onr7^KJP# z58MyG-edCV80iZ?pPZhapMAG$&zrMjCeXLQdsEQamwk=E4Yy{TO)`ccj?Lx4?Sp|> ze)8PK_ex4i;?vSN|JoLplqfhlmMO}v-0Zct_Z+3C;N~^8{*t~JXmRX~q%v*Bng*kK zO*IDF49p}?mDzaPB?k{AM!~-$zOnttte545i~gAs!2%TAUNL&&zOsE|k62r?2M{oy zRKi^bvCVLt2kn!}`t72;cRchfhNgFfZpYg%l&q|t{P^*MoZjuF>oDdVS39^BT{B9W z+7^EwkS4k(H9j#R;6K7D-xPqlwj3T3+T!C)jF#QHm@hhzZ2x}V_i`kKoaPgz4{)bn zVZLrOV%fF>|2 zN}%|Da^jv>SlDgGpJR5w$Gh(E+SvGsy+g*MNHG8uf!II+#ZzwUIHnKS`w|$215wD3(U?3(wF*92j_2QudNI*Y_=vfSjOcdf zSOqI*bde2jyRdy`{p=cZ*?rgc`v;>l;cr*`r#0GBqc$1fY)W@QEy!nP8k#7W<^JAo zlv3uL>C?ZKZX32k_zE}OB;i;9is0Zt`z@Sh+P8!NJ4}My5~GA?LMf8vh~L7hmH;)g z(e)wpNy;*)Z%Ng6~;=A?I>dtFqf7EcVEi{gLT4 z{dIUj=Ly_*hxsc$pc4G+m(l>Og)G}4hVErnptx<>AI+1nFvXaOWSHDqG^?;2_tc#3 zK}rXLV(t5Z(l@NPcfq8!b^8N=pO*2Gm@e9vw!$hqnJ~^I`6-<7q2tTd*!8uLZWafJ zO)d7wC=aRkNzB1L24wG5pTkU+n5Q)@zjUJZpq=F&T0T!x=HOYkb=7M__xaFi)|1U_ zzvRDxZ1}DF{`{zv8TmU6zQCfDMQ+#@n|Jy)rlwx8-?h#afNy_T>6-qOD8u~3Ux%)! zruqrYLBj?KogGn9CS>;z4@t51`w=&7iE8_$ z(KLU`j;#&Zjsn3bybbc=Zlpmxh_6t~W`NoSnB*3n+3##=<6bqpO}44OfpEJS&JcYY zCwohaSt$Ng@Rd3zd~A6{%HsiI&VfaW`l{D@Xoyj(V&@R<(o{@4Pqg78x5A5glRm4- zA3)%$M)x5TGoU~tU7-zm*dhezxzOhQGp#8Zh}z44*x4Ml$tmfD{kA~EZHA;s8Em*b zohJyi4Qg?oW_4curWi9^UC584A=;7W=Tet(-=KQiK@<0CcJniJAIDaf3+Zab9)8Z@ z%`4@J$hufEfEU%cRul<=$BxIQsNAjY#vyfkaWOTaw6D3w)JMk~ev=FT=I*?3_4u(| zny+7*+4ns!5%#WUoHeoVx(U)1)GWpEIpsajI`?i+JQ0LVQ?A8-6|vR;mtDRFQ}KY- z$>@07oQA4`RKjHpZY}Xf!U34BPQA4J5+bhU=Yoq3cyhKAnjpFyF5M#Y6t1`S2MT0G zrdN0zicN|R{q=pYoUd`p+*P$*ah$T!mvu$@)Pf;atW|~s!jYdh-^sj2L&d0+_4;~G zYqrzis1gf~l961;jYpg2C|MdboMBTa*jUw({4jPK)g zz*Nhcfi&CDAErOkUlWBzAADUsVc%H!n{pN#=7wVVZM{O$%7{K_SpI&C=nvoF_MPL? z!3MQ^lYT(-@+Yj;GN;JK~@$rgjb?RubylL{-9=Ggo#|QYF zbt*|AR)XKbz)jB<^*y#n@@20!9^ULdv=JPfdOdNldx#-i+yM==WKlX;Z(HIFh7iz- zk6F#@v9COB*iYs1Dl2h;{&jD>QQwjdM&R69EqWeJPHR)-@6$J8o>S?eZLL}GyunZ zabWgy!x@Mq#0>&sR^5mJ51lm>y|z7XW-G-}2@1!$!9wheDP5*Q-aIy7E*c8vUMQzTWP$T%c$c?A}4l zW|7!xmXoy3^$US5lZ(V3?%}b`OIjmY4urV2JSNRa?xI8`#l?h(1gt#Nl1sZ>pds8J zDL%bd-`u^<$1JA?f$ARUA+q+|-_)ShF>AHy`Rb`UM(EqRXsx-U#S5aTpr3|*p920? zy*rDD)1%j-rg7NiKgyEWkWJh;-dZx`Pygm>Ne{Zc;@gh@_MkT_RaeNu3eEH~qB{G0 zYj^Gv!l@_qke81yj!DQa{>x)P;6o10q7&5|ubV?nQ&T2svkri#r>9ft-0$C?F1&4i z#1B|~;jtCT;QM@;UAx?Z>1Ws3St3u3G7w%Ptb(*SRh-5QihHE=8L+*%`I}88TF$Bb z1Xa4WwpIx`GL3_UT`Ari8Z!YzoEKi!Fw5NDiwi{oz7AhV^7%aj+#cVa_NsnBKBrdi zK%@LxP+uMj@J{_{0`)%=SnU&9INP5`1oWzXnEHMXB9Z;|kE!zasthqIwG9nKg5T=vMZ!0++t7)d2>3c?4kBp$ z0{F}a(+>7Rd)&$M^i9{b+MC~0$@f6+d-BJI$Q5m=(^mrYUR|HY4h~k|Va_w9{Y#*?n``41|9ay8xR@aI*$H%U}vLp?v(n7<-yDi|3Kfh1G4Q+mM<6$hi-+}yv%#sC-Q@@i_4R@vG){c({NOs*m# zb1v|Jt4))MX}&syk>V0sy#a-db!(5*H1=C0S-3ise$Q{0!#|%?&D9iuhA|6Zpsv+o zW?Gf{QvX!w!zVy2v%M}t@9C0HvyK?Z88~32;OQxZX?bjHjHS_LEJr@#^XJtHgNKmM z%QG_(D=TIgLdhyr>%i??&$q7=0~OvtwR>WQ;>wAKZDlqn;J{1N4ATxC-oI$FuvIoR zl&?9~tam1(GV6rr#u6yE=D+}SsCAb83^fH0gu8y`D#pz9Zx1$EQgdazU|!bOd$V;B zQ+?cr1V*QX1f- zNx~)6K*n^G$}#(J=IPP=`BC*OU&cW-T~)(hjE7C4KbeJTfYx`>o{XUW3y06LH>eL+ zw?MT68mkTrmiWHpe`!Jwu<+x|j&?h!#UWL0JhTuW)XeHg;(AL-V!zz%ihY>b61z9w z=5Z*&+wGNvg~UE(i|ZgT+gWjFUR2D9jU`>7D2OVStY2mxJ2@I<#@Id|Rbt(t8pnj! z5y9_QhTot$ypEeH4fC>R0+?s>A-hMzW?|--OmeKM`xmD|%ne|Pp7R=ER3}T(4$04@ z1F#h>!>V-6Jf^nyh8*v7A`6}00n;W{Hqe2;k!juziHgkc<68Ewx4CJrR;<#DcKJ^_ z2Qp*s)T@k=Sl6yZv zwDhB(io^|7(fgUmL9h5|Bw+eS0oTPo7h)&N&4EkU>G1(&~Bgi zz_6TQ9@ANs7X>S(h(!b-%Ez|T>iRn1Gvcq60mpUhnn&c`YSiU9>H!>+c7-Tb)r0A@ zhI4|0f+{a2>v)$(@6Nciea@MoUoO9yg_k(U8{0oo3N=%Oiz}(pQK9!aWwwRhv*WUl z4u6bgl99rRpB1+jOpl-ANDkN?C~UoUO(#!lOvX|_5cA{O$3|jWIotW(_Ga1M-M>mf zh3w#U^$K7UP8c`dhRj>rfj=Z5BgCqp4Uzwg1OF9myA#%jf3`cRUTv(bj29FfOriAV z&*U_5|5@hW+NB)T_FGh?-?THhdh=oX&HFTrkofY-^mH7ocDI&{5$=Fz1A4JDQ&Uwj ze;$f_fSk6r#e;)xoKTw<`+Z$RYX1FoF% zaw-nUHKDmYb?z%$$Ij#{@s6x zhc3L3)`Z7vy-`hS=f2WLMn+@fj~A#-q0>YaElFWm6t(MD?NXzt*RTC7=-Y0G&%Zzn zh)$`;aiFvWV;!Y?Q@?FBlZzksY!8jF$UMc{y7ql%M=t^3m>cGF5$z^sVUJLdBzY&_ zO?*Ema4m&2WRLTVNMOy*L6ZIhy*@*XZZOj;)=s$$LN_SDKw)4Z+GU~nPq0r1Z>|| zdwyPArgC`SYA4{oEe%@RfImzV_Mk=$el?J~W)SiYn1~|&VOH=V1n&(2>=!g&f65 zc`{4w>D;7cqqzjDvF{5OcqH^fui3s}e#RvW7AK20VVuCe|>sodg>^8Bq9-;W?f@9e@$az~OML`R8s`15G~P%A6}}&ebDQ z8o#XY-u0kA^0Hfx&cNcJq;972jp_0gQIu&8HJ_1&R;D0@?BQ*vB}K&t$F7%*F&>@2 zRP#ZVSm9si#}p>)1Pv3)rgOV(x}nbx8buyc3dmEAq?bpGIHe!hemU*riz6&_u%iwQsea zG!S2btH760x${1~zd{fep!;z*3+ckt?hPH*M}jH;xg*`cR9+LcrVPC4KYws)I0`Q=|nQ;y$vQod@p8vLkZ9>;!poQZzren&Y(e; z9FKQChE#-Q(5AaH#d|Er9EY5aGDOUT{EI@+n@5as41VW56QfekXQ_+B<;q--|5a>_ zFU}na;+Qsja`i$Q*;C~X(bg?2yYF9@kiAkrpi@+u!6REjvq+n-;aV+y`CJYRARM#_ zjj3mKfh&A1aEgdA_x6+aJLEZ&kmk`R3L{~}&(aKMaE4*w;1{fhA3@|kydvykV{=_Y z5cXakYm6j%mdOy9`!beD@YrE?7Lt#1)e1AR|CzO`{Y^h<}Xe(rq?a5A~?`d^T? zv(JN(kY)HE$@*gG9l|xd_bRG%;ev|$)_n2 zOa@SB53yU|XOXXyfJm7-rM?=?Jg02iN`~P6IqJ*Mz=XL)4D8>lXs4F;JMZex24h@u zv(nIMN47}Tx%Ha28&mo7a-XwR)xQBBP%M+oQU{+uczP(}IEpaHP0-TOMY`9JY>EKn z%RjcvwQUlxXI76wmRsNlY46Q2n*ilRyxk$4W^)Q*_ibDgnJgqpT# z8!Q(gKyS~-l`*m`3ZkF8%1u8_YK_c5VUpIFZd?t^*7)EXgxiy+Pdn{|ezdij#KY_B z>IRy>%Y8DzvFM8V;B(OOU~)GrKwV-9{hf09QoW~-o{hLa@y6<7HmAG9=bvqui*ruooy;4`hgI8!d^H*eoY`5iVhpx+_sySlnCP7~c1 zrn2BSEzNmTL6_cO_2alj!C3ah_Xe5xT+Gz>QRjD+Cq4Zuu}w8tfFV;bA)9j}6Q;+N zu0A54SLdxwd_X05-#&6Kx zt=`f69+`FDRaNy~S9iA?hN>8Tx(d0YF;$JQvAC6}BSe1z79cVz>W%+Cz*mL9pqJ0Z zhW*FOSwjZDVTa{p*T-PJA#Ffl>3#!((S~F^LuEPg2=p>e;O4ItRmBmCnN``P}^NRv$t%lHJl+C_YF~~3LmcC{FyFG z!^r+{kbCgA?lGgib2EjO^b1B=Fd7HIl5Z<0gC3=6++J#_a`_t-(R%5;kNm*=BR3bm z(?e+7#@u?zichSesN?>?-rnA=a))IJy#0I@E_r)R6EfpycfIAH(Rv_~MAsZrS5QEW zu}#;>@+gIQO&4b4>_Cp0VUrFyWO>P-cfIAYnx(Hn6f&DMoi|BYg` zQG0pPY2u4NzkZC*94Sf{$HeZz@Ju@t=a*-5jscH~mK6L(?0T(&K>W5gH=VPU( zI^TU=xHY}!C>?zR*|3bC405@J5$6`XR^Dhw$3#Twjr|ScVRpKHm+gKcra>7xW5yN+ zEb0mEZwGnyk)(wp*mRTY1>*ylZVt*~L6-q75qI|Kr2!_VJmMrMlz zSX<#LU|8eCl1jt=HM8~P-od(RZw{YR@T9%6I8{gp758E+8UL&SbOX1uDd}#5l83UF zUfsUKWLYU@!$=B%L4w&?Nm&^SK+kZ1tm19IaX%D$`c%1EOH4aLq*+$VNUiAVye$nb zu7i%h4@!wDauH@_=SlPPvQ8xef;kq_!kFVqFZ=riF{Hm0tyru`QBhH%f}xZpNV1N~ zwcwey6Dq5PWRhzQI>syYgn%xnY_5TZklL`#SUEK%2RlHYd+|QE*A@z5?&xLP4)kXX zkbp34Cj4$(umG1F|6ha-2O z+^|+d={O%7joIE*g^{f>j&AZBqW<5TTgs4Qk%vq-ovc*$~w@^hvoyT|q6HhH^2u8a-vXP5IIP*Xv{xj{!qBs;Dxy7M)h?3MMvr(%Do#v`PI zrA=v8RHE?iU79`oir|{1!HMQ>7Y!zv`n4Cjm_0eSd

4)>l(COwf*_DqJW(tk79Ly|!!m;J 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 literal 27019 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%0DPiV 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 Xc7&vtyj})V&w!eeredkQMd<$neE}>P diff --git a/strings/junkmail.txt b/strings/junkmail.txt new file mode 100644 index 0000000000..db916907d8 --- /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 diff --git a/tgstation.dme b/tgstation.dme index b2aa6b767e..9d25bf3a57 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -187,6 +187,7 @@ #include "code\__DEFINES\skills\helpers.dm" #include "code\__DEFINES\storage\_storage.dm" #include "code\__DEFINES\storage\volumetrics.dm" +#include "code\__DEFINES\traits\sources.dm" #include "code\__HELPERS\_auxtools_api.dm" #include "code\__HELPERS\_cit_helpers.dm" #include "code\__HELPERS\_lists.dm" @@ -712,6 +713,7 @@ #include "code\datums\elements\flavor_text.dm" #include "code\datums\elements\forced_gravity.dm" #include "code\datums\elements\ghost_role_eligibility.dm" +#include "code\datums\elements\item_scaling.dm" #include "code\datums\elements\mob_holder.dm" #include "code\datums\elements\object_reskinning.dm" #include "code\datums\elements\photosynthesis.dm" @@ -1167,6 +1169,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\manuals.dm" #include "code\game\objects\items\miscellaneous.dm" #include "code\game\objects\items\mop.dm" From c16af5deeda3b0c7adb1e176ed4a1cf31ce9660c Mon Sep 17 00:00:00 2001 From: SandPoot Date: Wed, 10 Apr 2024 21:01:35 -0300 Subject: [PATCH 2/5] no joke, thanks linters check --- code/game/objects/items/mail.dm | 2 +- code/modules/recycling/sortingmachinery.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index ff7d32f337..e7a33a3c36 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -51,7 +51,7 @@ /obj/item/mail/Initialize() . = ..() - RegisterSignal(src, COMSIG_MOVABLE_DISPOSING, .proc/disposal_handling) + RegisterSignal(src, COMSIG_MOVABLE_DISPOSING, PROC_REF(disposal_handling)) AddElement(/datum/element/item_scaling, 0.5, 1) if(isnull(department_colors)) department_colors = list( diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index ba6b9ede62..24c5ccf000 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -11,7 +11,7 @@ /obj/structure/big_delivery/Initialize() . = ..() - RegisterSignal(src, COMSIG_MOVABLE_DISPOSING, .proc/disposal_handling) + RegisterSignal(src, COMSIG_MOVABLE_DISPOSING, PROC_REF(disposal_handling)) /obj/structure/big_delivery/interact(mob/user) to_chat(user, "You start to unwrap the package...") @@ -153,7 +153,7 @@ /obj/item/small_delivery/Initialize() . = ..() - RegisterSignal(src, COMSIG_MOVABLE_DISPOSING, .proc/disposal_handling) + RegisterSignal(src, COMSIG_MOVABLE_DISPOSING, PROC_REF(disposal_handling)) /obj/item/small_delivery/contents_explosion(severity, target, origin) for(var/atom/movable/AM in contents) From 984d7ffe9ad9a9b400c79f51579ce35e64ba91bb Mon Sep 17 00:00:00 2001 From: SandPoot Date: Wed, 10 Apr 2024 22:51:25 -0300 Subject: [PATCH 3/5] holiday and quirk support --- code/datums/traits/_quirk.dm | 19 +- code/datums/traits/negative.dm | 24 +++ code/game/objects/items/mail.dm | 319 +++++++++++++++++++++++++------ code/modules/holiday/holidays.dm | 8 + code/modules/shuttle/supply.dm | 30 +-- icons/obj/crates.dmi | Bin 28724 -> 28764 bytes 6 files changed, 312 insertions(+), 88 deletions(-) diff --git a/code/datums/traits/_quirk.dm b/code/datums/traits/_quirk.dm index a2a8d64909..a0be01b42d 100644 --- a/code/datums/traits/_quirk.dm +++ b/code/datums/traits/_quirk.dm @@ -1,20 +1,33 @@ //every quirk in this folder should be coded around being applied on spawn //these are NOT "mob quirks" like GOTTAGOFAST, but exist as a medium to apply them and other different effects /datum/quirk + /// The name of the quirk var/name = "Test Quirk" + /// The description of the quirk var/desc = "This is a test quirk." + /// What the quirk is worth in preferences, zero = neutral / free var/value = 0 var/human_only = TRUE + /// Text displayed when this quirk is assigned to a mob (and not transferred) var/gain_text + /// Text displayed when this quirk is removed from a mob (and not transferred) var/lose_text - var/medical_record_text //This text will appear on medical records for the trait. Not yet implemented - var/antag_removal_text // Text will be given to the quirk holder if they get an antag that has it blacklisted. + /// This text will appear on medical records for the trait. + var/medical_record_text + /// Text will be given to the quirk holder if they get an antag that has it blacklisted. + var/antag_removal_text var/mood_quirk = FALSE //if true, this quirk affects mood and is unavailable if moodlets are disabled - var/mob_trait //if applicable, apply and remove this mob trait + /// if applicable, apply and remove this mob trait + var/mob_trait /// should we immediately call on_spawn or add a timer to trigger var/on_spawn_immediate = TRUE + /// Reference to the mob currently tied to this quirk datum. Quirks are not singletons. var/mob/living/quirk_holder var/processing_quirk = FALSE + /// A lazylist of items people can receive from mail who have this quirk enabled + /// The base weight for the each quirk's mail goodies list to be selected is 5 + /// then the item selected is determined by pick(selected_quirk.mail_goodies) + var/list/mail_goodies /datum/quirk/New(mob/living/quirk_mob, spawn_effects) if(!quirk_mob || (human_only && !ishuman(quirk_mob)) || quirk_mob.has_quirk(type)) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index c9dcc552eb..6a68334c85 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -9,6 +9,12 @@ antag_removal_text = "Your antagonistic nature has removed your blood deficiency." medical_record_text = "Patient requires regular treatment for blood loss due to low production of blood." +/datum/quirk/blooddeficiency/add() + RegisterSignal(quirk_holder, COMSIG_SPECIES_GAIN, PROC_REF(update_mail)) + + var/mob/living/carbon/human/human_holder = quirk_holder + update_mail(new_species = human_holder.dna.species) + /datum/quirk/blooddeficiency/on_process() var/mob/living/carbon/human/H = quirk_holder if(NOBLOOD in H.dna.species.species_traits) //can't lose blood if your species doesn't have any @@ -16,6 +22,24 @@ else quirk_holder.blood_volume -= 0.2 +/datum/quirk/blooddeficiency/proc/update_mail(datum/source, datum/species/new_species, datum/species/old_species) + SIGNAL_HANDLER + + mail_goodies.Cut() + + if(isnull(new_species.exotic_blood)) // && isnull(new_species.exotic_bloodtype)) // We don't really support your blood yet :( + if(NOBLOOD in new_species.inherent_traits) + return + + mail_goodies += /obj/item/reagent_containers/blood/OMinus + return + + for(var/obj/item/reagent_containers/blood/blood_bag as anything in typesof(/obj/item/reagent_containers/blood)) + var/right_blood_type = !isnull(new_species.exotic_bloodtype) && initial(blood_bag.blood_type) == new_species.exotic_bloodtype +// var/right_blood_reagent = !isnull(new_species.exotic_blood) && initial(blood_bag.unique_blood) == new_species.exotic_blood + if(right_blood_type) // || right_blood_reagent) + mail_goodies += blood_bag + /datum/quirk/depression name = "Depression" desc = "You sometimes just hate life." diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index e7a33a3c36..9f5f102d1a 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -13,8 +13,8 @@ mouse_drag_pointer = MOUSE_ACTIVE_POINTER /// Destination tagging for the mail sorter. var/sort_tag = 0 - /// Who this mail is for and who can open it. - var/datum/weakref/recipient + /// 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. @@ -83,8 +83,8 @@ pixel_y = stamp_offset_y + bonus_stamp_offset ) stamp_image.appearance_flags |= RESET_COLOR - add_overlay(stamp_image) bonus_stamp_offset -= 5 + . += stamp_image if(postmarked == TRUE) var/image/postmark_image = image( @@ -94,7 +94,7 @@ pixel_y = stamp_offset_y + rand(bonus_stamp_offset + 3, 1) ) postmark_image.appearance_flags |= RESET_COLOR - add_overlay(postmark_image) + . += postmark_image /obj/item/mail/attackby(obj/item/W, mob/user, params) // Destination tagging @@ -103,52 +103,106 @@ if(sort_tag != destination_tag.currTag) var/tag = uppertext(GLOB.TAGGERLOCATIONS[destination_tag.currTag]) - to_chat(user, "*[tag]*") + to_chat(user, span_notice("*[tag]*")) sort_tag = destination_tag.currTag - playsound(loc, 'sound/machines/twobeep_high.ogg', 100, TRUE) + playsound(loc, 'sound/machines/twobeep_high.ogg', vol = 100, vary = TRUE) + +/obj/item/mail/multitool_act(mob/living/user, obj/item/tool) + if(user.get_inactive_held_item() == src) + balloon_alert(user, "nothing to disable!") + return TRUE + balloon_alert(user, "hold it!") + return FALSE /obj/item/mail/attack_self(mob/user) - if(recipient && user != recipient) - to_chat(user, "You can't open somebody else's mail! That's illegal!") - return + if(!unwrap(user)) + return FALSE + return after_unwrap(user) - user.visible_message("You start to unwrap the package...") +/// proc for unwrapping a mail. Goes just for an unwrapping procces, returns FALSE if it fails. +/obj/item/mail/proc/unwrap(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 FALSE + + balloon_alert(user, "unwrapping...") 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) + return FALSE + return TRUE -/// Accepts a mob to initialize goodies for a piece of mail. -/obj/item/mail/proc/initialize_for_recipient(mob/new_recipient) - recipient = new_recipient - name = "[initial(name)] for [new_recipient.real_name] ([new_recipient.job])" +// proc that goes after unwrapping a mail. +/obj/item/mail/proc/after_unwrap(mob/user) + user.temporarilyRemoveItemFromInventory(src, force = TRUE) + for(var/obj/stuff as anything in contents) // Mail and envelope actually can have more than 1 item. + if(isitem(stuff)) + user.put_in_hands(stuff) + else + stuff.forceMove(drop_location()) + playsound(loc, 'sound/items/poster_ripped.ogg', vol = 50, vary = TRUE) + qdel(src) + return TRUE + +/obj/item/mail/examine_more(mob/user) + . = ..() + if(!postmarked) + . += span_info("This mail has no postmarking of any sort...") + else + . += span_notice("You notice the postmarking on the front of the mail...") + var/datum/mind/recipient = recipient_ref.resolve() + if(recipient) + . += span_info("[postmarked ? "Certified NT" : "Uncertfieid"] mail for [recipient].") + else if(postmarked) + . += span_info("Certified mail for [GLOB.station_name].") + else + . += span_info("This is a dead letter mail with no recipient.") + . += span_info("Distribute by hand or via destination tagger using the certified NT disposal system.") + +/// 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.name_occupations[new_recipient.job] + var/datum/job/this_job = SSjob.name_occupations[recipient.assigned_role] + var/is_mail_restricted = FALSE // certain roles and jobs (prisoner) do not receive generic gifts + 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() + is_mail_restricted = this_job.exclusive_mail_goodies if(LAZYLEN(job_goodies)) - // certain roles and jobs (prisoner) do not receive generic gifts. - if(this_job.exclusive_mail_goodies) + if(is_mail_restricted) goodies = job_goodies else goodies += job_goodies - for(var/iterator = 0, iterator < goodie_count, iterator++) + if(!is_mail_restricted) + // the weighted list is 50 (generic items) + 50 (job items) + // every quirk adds 5 to the final weighted list (regardless the number of items or weights in the quirk list) + // 5% is not too high or low so that stacking multiple quirks doesn't tilt the weighted list too much + for(var/datum/quirk/quirk as anything in body.roundstart_quirks) + if(LAZYLEN(quirk.mail_goodies)) + var/quirk_goodie = pick(quirk.mail_goodies) + goodies[quirk_goodie] = 5 + + // A little boost for the special times! + for(var/datum/holiday/holiday as anything in SSevents.holidays) + if(LAZYLEN(holiday.mail_goodies)) + var/holiday_goodie = pick(holiday.mail_goodies) + goodies[holiday_goodie] = holiday.mail_goodies[holiday_goodie] + + for(var/iterator in 1 to goodie_count) var/target_good = pickweight(goodies) - if(ispath(target_good, /datum/reagent)) - var/obj/item/reagent_containers/target_container = new /obj/item/reagent_containers/glass/bottle(src) - target_container.reagents.add_reagent(target_good, target_container.volume) - target_container.name = "[target_container.reagents.reagent_list[1].name] bottle" - new_recipient.log_message("[key_name(new_recipient)] received reagent container [target_container.name] in the mail ([target_good])", LOG_GAME) - else - var/atom/movable/target_atom = new target_good(src) - new_recipient.log_message("[key_name(new_recipient)] received [target_atom.name] in the mail ([target_good])", LOG_GAME) + var/atom/movable/target_atom = new target_good(src) + body.log_message("received [target_atom.name] in the mail ([target_good])", LOG_GAME) return TRUE @@ -190,41 +244,87 @@ name = "mail crate" desc = "A certified post crate from CentCom." icon_state = "mail" + base_icon_state = "mail" + ///if it'll show the nt mark on the crate + var/postmarked = TRUE + +/obj/structure/closet/crate/mail/update_icon_state() + . = ..() + if(opened) + icon_state = "[base_icon_state]open" + if(locate(/obj/item/mail) in src) + icon_state = base_icon_state + else + icon_state = "[base_icon_state]sealed" + +/obj/structure/closet/crate/mail/update_overlays() + . = ..() + if(postmarked) + . += "mail_nt" + +/// 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/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.mind.assigned_role in get_all_jobs())) + 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/update_icon_state() +/obj/structure/closet/crate/mail/full/Initialize(mapload) . = ..() - 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" + populate(INFINITY) -/obj/structure/closet/crate/mail/full/Initialize() - . = ..() - var/list/mail_recipients = list() - for(var/mob/living/carbon/human/alive in GLOB.player_list) - if(alive.stat != DEAD) - mail_recipients += alive - for(var/iterator in 1 to storage_capacity) - 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/mob/living/carbon/human/mail_to - mail_to = pick(mail_recipients) - if(mail_to) - new_mail.initialize_for_recipient(mail_to) - mail_recipients -= mail_to //Once picked, the mail crate will need a new recipient. - else - new_mail.junk_mail() +///Used in the mail strike shuttle loan event +/* /obj/structure/closet/crate/mail/full/mail_strike + desc = "A post crate from somewhere else. It has no NT logo on it." + postmarked = FALSE +/obj/structure/closet/crate/mail/full/mail_strike/populate(amount) + var/strike_mail_to_spawn = rand(1, storage_capacity-1) + for(var/i in 1 to strike_mail_to_spawn) + if(prob(95)) + new /obj/item/mail/mail_strike(src) + else + new /obj/item/mail/traitor/mail_strike(src) + return ..(storage_capacity - strike_mail_to_spawn) */ + +/// Opened mail crate +/obj/structure/closet/crate/mail/preopen + opened = TRUE + icon_state = "mailopen" /// Mailbag. /obj/item/storage/bag/mail @@ -274,3 +374,106 @@ /obj/item/paper/fluff/junkmail_generic/Initialize() . = ..() info = pick(GLOB.junkmail_messages) + +/* Maybe some other time +/obj/item/mail/traitor + var/armed = FALSE + var/datum/weakref/made_by_ref + /// Cached information about who made it for logging purposes + var/made_by_cached_name + /// Cached information about who made it for logging purposes + var/made_by_cached_ckey + goodie_count = 0 + +/obj/item/mail/traitor/envelope + name = "envelope" + icon_state = "mail_large" + stamp_max = 2 + stamp_offset_y = 5 + +/obj/item/mail/traitor/after_unwrap(mob/user) + user.temporarilyRemoveItemFromInventory(src, force = TRUE) + playsound(loc, 'sound/items/poster_ripped.ogg', vol = 50, vary = TRUE) + for(var/obj/item/stuff as anything in contents) // Mail and envelope actually can have more than 1 item. + if(user.put_in_hands(stuff) && armed) + var/whomst = made_by_cached_name ? "[made_by_cached_name] ([made_by_cached_ckey])" : "no one in particular" + log_bomber(user, "opened armed mail made by [whomst], activating", stuff) + INVOKE_ASYNC(stuff, TYPE_PROC_REF(/obj/item, attack_self), user) + qdel(src) + return TRUE + +/obj/item/mail/traitor/multitool_act(mob/living/user, obj/item/tool) + if(armed == FALSE || user.get_inactive_held_item() != src) + return ..() + if(IS_WEAKREF_OF(user.mind, made_by_ref)) + balloon_alert(user, "disarming trap...") + if(!do_after(user, 2 SECONDS, target = src)) + return FALSE + balloon_alert(user, "disarmed") + playsound(src, 'sound/machines/defib_ready.ogg', vol = 100, vary = TRUE) + armed = FALSE + return TRUE + else + balloon_alert(user, "tinkering with something...") + + if(!do_after(user, 2 SECONDS, target = src)) + after_unwrap(user) + return FALSE + if(prob(50)) + balloon_alert(user, "disarmed something...?") + playsound(src, 'sound/machines/defib_ready.ogg', vol = 100, vary = TRUE) + armed = FALSE + return TRUE + else + after_unwrap(user) + return TRUE + +///Generic mail used in the mail strike shuttle loan event +/obj/item/mail/mail_strike + name = "dead mail" + desc = "An unmarked parcel of unknown origins, effectively undeliverable." + postmarked = FALSE + generic_goodies = list( + /obj/effect/spawner/random/entertainment/money_medium = 2, + /obj/effect/spawner/random/contraband = 2, + /obj/effect/spawner/random/entertainment/money_large = 1, + /obj/effect/spawner/random/entertainment/coin = 1, + /obj/effect/spawner/random/food_or_drink/any_snack_or_beverage = 1, + /obj/effect/spawner/random/entertainment/drugs = 1, + /obj/effect/spawner/random/contraband/grenades = 1, + ) + +/obj/item/mail/mail_strike/Initialize(mapload) + if(prob(35)) + stamped = FALSE + if(prob(35)) + name = "dead envelope" + icon_state = "mail_large" + goodie_count = 2 + stamp_max = 2 + stamp_offset_y = 5 + . = ..() + color = pick(COLOR_SILVER, COLOR_DARK, COLOR_DRIED_TAN, COLOR_ORANGE_BROWN, COLOR_BROWN, COLOR_SYNDIE_RED) + for(var/goodie in 1 to goodie_count) + var/target_good = pick_weight(generic_goodies) + new target_good(src) + +///Also found in the mail strike shuttle loan. It contains a random grenade that'll be triggered when unwrapped +/obj/item/mail/traitor/mail_strike + name = "dead mail" + desc = "An unmarked parcel of unknown origins, effectively undeliverable." + postmarked = FALSE + +/obj/item/mail/traitor/mail_strike/Initialize(mapload) + if(prob(35)) + stamped = FALSE + if(prob(35)) + name = "dead envelope" + icon_state = "mail_large" + goodie_count = 2 + stamp_max = 2 + stamp_offset_y = 5 + . = ..() + color = pick(COLOR_SILVER, COLOR_DARK, COLOR_DRIED_TAN, COLOR_ORANGE_BROWN, COLOR_BROWN, COLOR_SYNDIE_RED) + new /obj/effect/spawner/random/contraband/grenades/dangerous(src) +*/ diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 6afda0ed20..9a8f4329ab 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -12,6 +12,9 @@ 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 + // Special things to be given during this! + var/list/mail_goodies + // This proc gets run before the game starts when the holiday is activated. Do festive shit here. /datum/holiday/proc/celebrate() return @@ -398,6 +401,11 @@ end_day = 2 end_month = NOVEMBER + mail_goodies = list( + /obj/item/reagent_containers/food/snacks/lollipop = 10, + /obj/item/reagent_containers/food/snacks/chocolatebar = 10 + ) + /datum/holiday/halloween/greet() return "Have a spooky Halloween!" diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 0cebcbb20c..ea5b4aed0d 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -304,40 +304,16 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list( //Early return if there's no mail waiting to prevent taking up a slot. if(!SSeconomy.mail_waiting) return + //spawn crate var/list/empty_turfs = list() - for(var/place as anything in shuttle_areas) - var/area/shuttle/shuttle_area = place + for(var/area/shuttle/shuttle_area as anything in shuttle_areas) for(var/turf/open/floor/shuttle_floor in shuttle_area) if(is_blocked_turf(shuttle_floor)) continue empty_turfs += shuttle_floor - var/obj/structure/closet/crate/mail/mailcrate = new(pick(empty_turfs)) - //collect recipients - var/list/mail_recipients = list() - for(var/mob/living/carbon/human/player_human in GLOB.player_list) - if(player_human.stat != DEAD) - mail_recipients += player_human - - //Creates mail for all the mail waiting to arrive, if there's nobody to recieve it it's just junkmail. - for(var/mail_iterator in 1 to SSeconomy.mail_waiting) - var/obj/item/mail/new_mail - if(prob(FULL_CRATE_LETTER_ODDS)) - new_mail = new /obj/item/mail(mailcrate) - else - new_mail = new /obj/item/mail/envelope(mailcrate) - var/mob/living/carbon/human/mail_to - if(mail_recipients.len) - mail_to = pick(mail_recipients) - new_mail.initialize_for_recipient(mail_to) - mail_recipients -= mail_to - else - new_mail.junk_mail() - if(new_mail) - SSeconomy.mail_waiting += 1 - mailcrate.update_icon() - return mailcrate + new /obj/structure/closet/crate/mail/economy(pick(empty_turfs)) #undef GOODY_FREE_SHIPPING_MAX #undef CRATE_TAX diff --git a/icons/obj/crates.dmi b/icons/obj/crates.dmi index 131034201971b2a45ebb22c0780e772cbbd076e9..5c1be2ecc1ea4a2b4a114bb950bde88feeac72fe 100644 GIT binary patch literal 28764 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 literal 28724 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

4)>l(COwf*_DqJW(tk79Ly|!!m;J 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 From ea4132954481d36f25a3d7d078ff8f68c3142d49 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Wed, 10 Apr 2024 23:01:39 -0300 Subject: [PATCH 4/5] some random math, if it's too low, or too high, change later --- 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 06b3b6c8ed..73e6c0d128 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -78,7 +78,7 @@ SUBSYSTEM_DEF(economy) for(var/account in bank_accounts) var/datum/bank_account/bank_account = account bank_account.payday(1) - var/effective_mailcount = round(living_player_count()/1) // (inflation_value - 0.5)) //More mail at low inflation, and vis versa. + var/effective_mailcount = round(living_player_count() / (rand(1, 5) - 0.5)) // fake inflation // (inflation_value - 0.5)) //More mail at low inflation, and vis versa. mail_waiting += clamp(effective_mailcount, 1, MAX_MAIL_PER_MINUTE * delta_time) /datum/controller/subsystem/economy/proc/get_dep_account(dep_id) From d7062bd9bca0b8d3dc5b60e08adefca273ab3275 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Thu, 11 Apr 2024 13:35:43 -0300 Subject: [PATCH 5/5] typo from tg (real) --- 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 9f5f102d1a..ee027dee1e 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -154,7 +154,7 @@ . += span_notice("You notice the postmarking on the front of the mail...") var/datum/mind/recipient = recipient_ref.resolve() if(recipient) - . += span_info("[postmarked ? "Certified NT" : "Uncertfieid"] mail for [recipient].") + . += span_info("[postmarked ? "Certified NT" : "Uncertified"] mail for [recipient].") else if(postmarked) . += span_info("Certified mail for [GLOB.station_name].") else